ChatGPT : Révolution de l'IA Développeurs
ChatGPT : Révolution de l'IA Développeurs
ChatGPT
L’IA qui murmure
à l’oreille des dévs
d e s
ECO-CONCEPTION
& GREEN IT
m a g a z i n e
Avec l’expertise de
L e
N°257
04/05
2023
3’:HIKONB=^U[^^X:?a@c@f@r@k";
M 04319 - 257 - F: 6,99 E - RD
Printed in EU - Imprimé en UE - BELGIQUE 7,50 € - Canada 10,55 $ CAN - SUISSE 14,10 FS - DOM Surf 8,10 € - TOM 1100 XPF - MAROC 59 DH
PARAÎTRE !*
VIENT DE
Une histoire de la micro-informatique
volume 4
GLOIRE ET DÉCADENCE
DE LA MICRO-INFORMATIQUE FRANÇAISE
1960-1990
ChatGPT n’est pas arrivé d’un coup. Open AI développe les modèles Comme souvent avec une nouvelle technologie nouvelle, de nombreuses
GPT depuis plusieurs années et chaque génération améliore le personnes et entreprises s’y engouffrent sans réellement réfléchir à l’usage
modèle et la pertinence des générations. Ce qui impressionne, c’est et la pertinence. On parle déjà de remplacer des écrivains, d’utiliser
la capacité de génération des réponses aux requêtes (si celles-ci sont ChatGPT à la place d’avocats ou de journalistes, etc. À l’opposé, les
suffisamment compréhensibles). ChatGPT tire profit de réactions sont aussi violentes que nombreuses : il faut l’interdire, ChatGPT
l’entraînement massif de modèles novateurs à partir de volumes de va détruire le monde, il voit mettre au chômage des millions de
données gigantesques. Et ces modèles sont en constantes évolutions : personnes, les générations actuelles ne seront plus capables de réfléchir.
il ne se passe pas un jour sans que des progrès soient accomplis dans Chaque rupture provoque de fortes tensions et des mouvements sociétaux :
le domaine. imprimerie vs copiste, automobile vs voiture à cheval.
Ce qui est fascinant, au-delà de la notion d’IA générative, c’est Comme souvent, il faut que les tensions retombent. Il faudra poser des
comment ChatGPT en quelques mois a obligé de nombreux éditeurs limites, interdire certaines données. ChatGPT pose de nombreuses
et géants de la technologie à réagir. Microsoft investit des milliards questions de sécurité : des données sensibles sont injectées sans que
dans Open AI, fournit la colossale infrastructure nécessaire à GPT et l’utilisateur n’y prenne garde. Se pose aussi la question de la sécurité par
l’injecte dans de multiples apps. Google a été forcé de suivre même design du code généré. Le problème avait déjà été soulevé avec CoPilot.
si le démarrage de son alternative a été plutôt laborieux pour ne pas
dire mauvais. ChatGPT est-il éthique ? On peut s’interroger sur le caractère éthique
de ChatGPT, mais il faut aussi juger les usages que l’on en fait. Car
Un éditeur comme Salesforce a compris l’intérêt de l’outil. Par au-delà de la technologie, ce sont les usages qui vont faire que l’IA
exemple, Slack va directement intégrer ChatGPT pour générer des est éthique ou non. Et là, le débat ne fait que commencer.
réponses, générer des résumés de fils, etc.
ChatGPT va-t-il conforter le mouvement néo-luddisme et son rejet de
Le moteur de recherche vit-il ces derniers mois comme on peut la technologie ? L’objectif de ce mouvement hétérogène est de nous
l’entendre ? À court terme, non. Par contre, d’ici 18 à 24 mois, je ne libérer de notre aliénation vis-à-vis de la technologie. Cette conception
doute pas que le moteur de recherche aura (beaucoup) changé. Car anti-technologique prend racine avec le luddisme (de Ludd, sans
l’IA générative telle de ChatGPT permet d’étendre le moteur de doute une référence imaginaire inventé par le mouvement) chez les
recherche à d’autres fonctions bien plus puissantes et rendre tisserands anglais qui détruisent les machines en 1811-1812. Ils
obsolète, par exemple, un Google Translate. s’opposent aux machines et à l’automatisation du métier.
Hari Seldon
[Link] EDITO 3
TABLE DES MATIÈRES
Contenus
⊦≭ Edito ⊦≸⊛ SpécialChatGPT
Edito spécial ChatGPT Mon aventure avec ChatGPT
Hari Seldon Denis Duplan
⊦≲ Chronique
L’herbe est toujours plus verte sur notre colline ⊦≺⊒ Mainframe - Cobol
Vincent Lextrait & Philippe Boulanger HN Services : changer les codes autour du Mainframe
Pascal Cerezo
⊦≵⊒ Chronique
Le mur de la dette
Mathieu Eveillard
⊦≺⊔ Vintage
Construire son ordinateur 8-bit - Partie 2
Olivier Huber
⊦≵⊓ Pourquoi utiliser un Mac dans le cloud ?
Thomas Deschamps
⊦≺⊚ Cloud
⊦≵⊔ Dossierspécial Projet NUA
éco-conception&GreenIT Stefane Fermigier & Jérôme Dumonteil
100%
d é v s
d e s
m a g a z i n e
L e
[Link] 5
AGENDA
2023
• API Platform conference :
• Best of web : juin / Paris
21 & 22 septembre / Lille
• Riviera DEV :
• Cloud Nord :
10-12 juillet / Sophia Antipolis
12 octobre / Lille
• Salon de la Data :
• Volcamp 2023 :
19 septembre / Nantes
12-13 octobre / Clermont-Ferrand
• Agile en Seine :
• Open Source Experience :
19 & 20 septembre / Paris
6 & 7 décembre / Paris
Merci à Aurélie Vache pour la liste 2023, consultable sur son GitHub : [Link]
6 AGENDA [Link]
Les partenaires 2023 de
L e m a g a z i n e d e s d é v s
Niveau padawan
[Link] 7
L’herbe est toujours plus verte
sur notre colline
Vincent Lextrait
a été pendant plusieurs Il y a quelques mois, une étude effectuée par six chercheurs de trois universités portu-
années le leader de la gaises devint rapidement virale. Son titre ? « Efficacité énergétique des langages de
normalisation du
langage C++ à programmation ». Cet article était passionnant, car il mettait en lumière un problème de
l’AFNOR en France, il a
organisé la réunion du
plus en plus important, celui de l’impact énergétique des choix de langages de pro-
comité mondial ISO à grammation sur les applications qui sont développées avec eux. L’étude comparait tous
Sophia Antipolis, où le
premier standard C++, les langages les plus connus et certains dont vous n’avez probablement jamais entendu
ISO-98 a été fini. Il est parler. Et les conclusions sont frappantes, il y a des langages « verts » (Green IT) et
le fondateur de
Metaspex, une startup d’autres qui ne le sont absolument pas, dans des proportions jamais rapportées (cer-
de la Silicon Valley qui
promeut un modèle de
tains 10, 20... 80 fois moins), et extrêmement utiles à une urgente prise de conscience.
programmation basé sur Des variations dans des proportions si significatives sont complètement inexistantes
de l’hyper-abstraction
pour réaliser des dans les autres activités humaines sérieuses.
applications entreprise
100 à 1.000 fois plus
rapidement, et qui les > Un classement ? nécessaires. En conséquence, si le langage C est la référence
fait fonctionner avec 10 Nous ne citerons que quelques résultats de cette étude. En énergétique, par construction de C++, C++ ne peut pas
fois moins de partant du langage C, qui a un coefficient de 1 (le meilleur), avoir une efficacité inférieure. Tout programme qu’on peut
ressources. Bjarne
l’étude met au « Top 5” des langages les moins énergivores écrire en C peut s’écrire en C++. L’indice de C++ devrait
Stroustrup, l’inventeur
du langage C++ est le les quatre suivants : être au maximum 1.
conseiller technique de • Rust 1,03
Metaspex. • C++ 1,34 Mais si on peut faire en C++ tout ce qu’on peut faire en C,
• Ada 1,70 l’inverse n’est pas vrai. C++ possède des fonctionnalités
• Java 1,98 : pour faire la même chose, un programme Java additionnelles pour optimiser le code. On pense en particulier
consommera deux fois plus d’énergie qu’un programme C. au travail massif fait sur le langage C++ pour permettre au
compilateur d’optimiser le code. Les outils les plus notables
Plus loin dans le classement « de la honte » on trouve nota- sont fournis par les mots-clés constexpr et consteval. En voici un
blement Haskell à 3,10, C# à 3,14, Go à 3,23, JavaScript à exemple :
4,45, PHP à 29,30, Erlang 42,23, Ruby 69,91, et Python à
75,88. consteval int sqr(int n) {
return n*n;
Disons-le tout net, ce papier est extrêmement utile dans le }
sens qu’il rappelle de mesurer avant de comparer et/ou de constexpr int r = sqr(100);
Philippe
prendre des décisions architecturales ; ce qui apparemment
BOULANGER
n’est jamais fait dans certaines communautés qui ignorent consteval juste avant la fonction indique que son calcul doit
Architecte Logiciel
les stupéfiants ordres de grandeur publiés. être effectué par le compilateur, et ne devra pas être fait à
Scientifique
runtime. constexpr juste avant la déclaration de la variable
Quelques résultats sont suspects, en particulier celui sur C#, indique qu’elle sera calculée par le compilateur et pas à run
qui est connu pour avoir succédé à Java en s’inspirant de time. Si cette garantie n’est pas possible, le compilateur refu-
celui-ci, et en ajoutant des innovations améliorant la perfor- sera ce source. Ceci est un tout petit exemple. Mais on peut
mance (ramasse-miettes hybride, réification plutôt que l’éli- faire des choses beaucoup plus puissantes. En particulier on
sion de types de Java pour l’implémentation des génériques, peut faire de l’arithmétique de dates totalement statique-
etc.). La plupart des professionnels savent que C# est un tout ment. Vous voulez ajouter 6 mois à une date connue à
peu plus efficace que Java. Or, le premier reçoit une efficacité l’avance ? Facile, vous pouvez le faire, et aucun calcul com-
énergétique de 1,98 et le second de 3,14. plexe ne sera nécessaire. Vous pouvez trouver le jour de la
semaine si vous voulez.
Au sujet de C++, là aussi, il y a une grosse anomalie. C++
s’appelait à l’origine « C avec des classes ». Il ne contient pas L’usage de constexpr combiné avec des valeurs données en
stricto sensu exactement le langage C, mais grossièrement argument de templates peut être d’une puissance inouïe. Un
on peut dire qu’un programme C peut se compiler avec un entassement d’abstractions formulées proprement avec ce
compilateur C++ la plupart du temps, et dans les cas où ce mot-clé et des templates fait faire au compilateur l’équivalent
n’est pas possible, seulement des ajustements minimes sont de l’effondrement des briques du jeu Tetris, produisant un
8 [Link]
code binaire extrêmement compact, et impossible à écrire Ce que dit le papier de Lutz Prechelt, c’est que toutes les
raisonnablement à la main, même en assembleur. De plus, études que l’on voit passer régulièrement depuis que le pay-
tous les compilateurs C++ ne sont pas égaux en performan- sage des langages de programmation est divers (un demi-
ce : le compilateur Intel permet d’obtenir des binaires plus siècle), et qui veut les comparer, sont affectées de la même
efficaces que le compilateur gcc sur une même plateforme. faute méthodologique grave. Quand on voit passer une
étude qui montre que Scheme est plus rapide que C++,
Le résultat ? Avec une bonne connaissance du langage l’étude ne montre que le manque de compétence du pro-
C++, il est relativement facile de programmer des applica- grammeur en C++. Quand on veut mesurer soi-même, on
tions beaucoup plus vertes qu’en C. Alors, comment l’étude finit avec le vieil adage « on voit toujours midi à sa fenêtre »,
citée plus haut a-t-elle pu rater cela ? Après tout c’est une ou l’adage inverse « l’herbe est toujours plus verte sur notre
étude scientifique, dont le rôle est précisément d’arriver à colline ».
fournir des résultats scientifiques objectifs.
Du coup, c’est très compliqué de comparer, il faut réunir
> Bonnes connaissances… beaucoup de programmeurs comme Prechelt l’a fait, en s’as-
mais encore… surant qu’on dispose de programmeurs de haute qualité pour
Tout le problème est dans la phrase « bonne connaissance du chaque langage de programmation. Ces programmeurs
langage C++ ». Ou plus généralement dans la bonne seront probablement différents pour chaque langage.
connaissance de n’importe quel langage de programmation. Personne ne peut se payer une telle rigueur. Ou est-ce peut-
Alors que les résultats de l’étude sont par ailleurs, à quelques être possible ?
exceptions près relativement fiables, dans le cas de C++, le
résultat ne l’est pas. C++ est un des langages de program- Un exemple récent est donné par une compétition lancée
mation parmi les plus difficiles à bien utiliser. Il est multi-para- involontairement par Matt Parker, mathématicien, comédien
digmes, et il n’y a pas de C++ « idiomatique ». L’idiome est et personnalité YouTube. Matt, qui est seulement un pro-
le choix du programmeur. grammeur amateur en Python, publia sur son excellente
chaîne YouTube « Stand-up Maths » sa solution à un petit
Est-ce que le monde académique sait que ce genre de mesures puzzle mathématique inspiré du jeu Wordle. Sa solution était
n’est pas fiable en présence de variations d’expertise ? La programmée en Python. Sa solution prenait 32 jours (!) pour
réponse est oui, depuis au moins le 23 mars 1999. C’est trouver le résultat. Il ne comptait pas sur sa popularité sur
aussi précis que cela. Le 23 mars 1999, Lutz Prechelt, cher- YouTube, et déclencha sans le vouloir une compétition ami-
cheur à l’Université de Karlsruhe publia un article dans la cale entre ses auditeurs. Il avait donc accès à un gigantesque
prestigieuse revue Communications of the ACM. Ce papier échantillon (il a plus d’un million d’abonnés) de program-
s’intitulait un peu cryptiquement Comparing Java vs. C/C++ meurs, qui étaient tous libres de choisir leur langage de pro-
efficiency differences to inter-personal differences grammation favori. Très rapidement ses 32 jours furent bat-
(Comparaison des différences d’efficacité de Java vs. C/C++ tus, jusqu’au résultat record actuel qui résout le même pro-
aux différences inter-personnelles). On peut encore le télé- blème en C++ en... 300 microsecondes ! Pour le même lan-
charger sur Internet, il est facile à trouver sur n’importe quel gage de programmation, Python, C, Rust ou C++, les varia-
moteur de recherche. Que disait ce papier qui mériterait tions d’un programmeur à un autre sont celles que prédisait
d’être plus connu ? Il concluait après des tests réalisés avec le papier de Lutz Prechelt.
des échantillons significatifs, que les différences d’efficacité
entre des programmeurs utilisant un même langage de pro- > Conclusion
grammation étaient supérieures aux différences entre les Et à la fin, pour ce problème particulier, le résultat montre
meilleurs programmes réalisés par les meilleurs program- que le mythe que « Rust est plus rapide que C++ » est faux.
meurs utilisant des langages différents. En d’autres termes, il L’herbe est bien verte sur la colline C++. Il montre aussi que
est possible de faire le pire comme le meilleur avec un langa- C++ est plus rapide que C, comme on pouvait s’y attendre.
ge de programmation, selon qu’on ait du talent ou pas. Jusqu’à ce qu’un programmeur encore plus talentueux batte
le record en Rust ou en C, ou... en C++... bien sûr !
Est-ce surprenant ? En fait si on réfléchit, ça ne l’est pas. Ce
n’est pas le langage de programmation qui garantit en pre-
mier une performance, c’est surtout le programmeur.
Ensuite, entre programmeurs de même « force » les langages PROCHAIN NUMÉRO
de programmation permettent de grosses différences.
Donnez une mauvaise raquette au meilleur joueur de tennis
du monde, et donnez à votre voisin la meilleure raquette, je PROGRAMMEZ! N°258
suis convaincu que votre voisin ne gagnera pas un seul point.
Après, si vous donnez une mauvaise raquette au numéro un Disponible à partir du
et qu’il joue contre le numéro deux avec sa raquette favorite,
le numéro un perdra sans aucun doute, et ne marquera pro- 30 juin 2023
bablement aucun point non plus.
[Link] 9
Le mur de la dette
Il faut aller vite, prouver qu’il y a un marché, acquérir des utilisateurs, les garder, lever
des fonds, délivrer, délivrer. Alors forcément, l’équipe tech ne va jamais assez vite.
Mathieu Eveillard
Consultant, formateur &
Alors on a passé le POC en prod. Aïe. Et le modèle qui ne tient plus… on n’a pas les
coach technique. Expert bons objets métier, et le refacto est gigantesque. Et puis l’upgrade TypeScript, on a 2
en qualité logicielle /
artisanat logiciel. versions majeures de retard. Mais il faut délivrer. On n’a pas de test d’intégration, on fait
[Link] ça à la main et ça prend un temps fou. Mais on n’a pas le temps parce qu’il faut délivrer.
eveillard/
Ça vous semble familier ? c’est humain, il nous est difficile d’échapper à la théorie de
C’est vrai que la pression du business favorise l’apparition la vitre brisée.
de la dette technique. En même temps, cela fait partie de Cependant, je vous rassure, la dette ne s’explique pas que
notre métier de développeurs et développeuses : faire avec par nos errements. Elle provient aussi de l’inadéquation du
cette pression. C’est notre lot commun. En tant que code à un instant donné par rapport à ce que l’on veut en
professionnels du code, il est de notre responsabilité de faire, c’est-à-dire par rapport aux nouvelles fonctionnalités
délivrer sans compromis sur la qualité. Nous n’avons pas à que l’on souhaite implémenter. L’entreprise s’adapte au
demander l’autorisation de bien faire notre travail. marché, à ses utilisateurs, le besoin émerge et le code se
retrouve en tension.
Produire du code de qualité, ça s’apprend. C’est un
ensemble de considérations méthodologiques et La dette ne résulte donc pas nécessairement de mauvaises
architecturales que l’on regroupe sous le terme d’artisanat décisions. On peut en limiter l’apparition par de bons
logiciel (Software craftsmanship) : Clean code, Test-driven principes d’architecture (modularisation, architecture
development, programmation fonctionnelle, you name it. hexagonale), mais elle reste pour ainsi dire inévitable. Écrire
S’y former prend du temps, des années (une vie ?). du code, c’est déjà créer de la dette.
Dur, dur.
Cette problématique est caractéristique des scale-up. Ce qui
marchait bien à 6 personnes ne fonctionne plus à 20 et
encore moins à 200. Une start-up aura donc tout intérêt à
se pencher sur ces sujets que l’on regroupe sous le terme
un peu générique de qualité de code dès les premières
lignes afin de contrôler sa dette technique.
Bon, mais quand la dette s’est installée, que faire ?
Eh bien il n’y a “que” 2 choses à faire (les guillemets
La dette n’est cependant pas qu’une affaire de compétence s’imposent) :
technique. Il y a aussi la connaissance du métier. Quand on • Arrêter d’en créer, autant que possible, dès que possible.
ne maîtrise pas suffisamment ce dernier, on va tout droit Ce qui veut dire se former et mettre en place de
vers des problèmes de nommage et de modularisation. Le nouveaux standards partagés au sein de l’équipe.
code que l’on écrit est inutilement compliqué parce que l’on Quelques mois suffisent par exemple pour s’initier au
n’a pas fait émerger les bonnes abstractions, celles qui sont Test-driven development et s’en servir au quotidien pour
significatives d’un point de vue métier. Si vous venez de écrire le cœur de métier.
penser “Domain-driven design” (DDD), c’est normal. • Résorber la dette existante. C’est un travail de longue
haleine, qui demande une bonne priorisation, de vraies
Une fois que le mal est fait, la dette appelle la dette, ce qui compétences de refactoring et avant cela une très bonne
signe une croissance exponentielle . En effet, même avec la compréhension du domaine. Car quand on parle de re-
meilleure volonté du monde, il est difficile de construire modularisation, les réponses sont à rechercher dans le
proprement sur des bases qui ne sont pas saines. Et puis, domaine.
10 [Link]
Pourquoi utiliser un Mac
dans le cloud?
Thomas
En 2010, Twitter utilisait un Mac mini pour servir de tunnel de connexion à ses serveurs Deschamps
de production. Un jour, quelqu’un l’a débranché… et là, c’est le drame. PM Block Storage &
Apple Silicon, Scaleway
[Link] 11
L’impact environnemental des
datacenters et du cloud
Raphaël Lemaire D’après l’IEA (Agence Internationale de l’Énergie), les centres informatiques et les
Directeur technique chez
Zenika, consultant et réseaux consommaient ensemble en 2020 entre 580 et 800 TWh d’électricité (1) - plus
formateur, spécialisé que la production totale d’électricité en France (537,7 TWh en 2019 (2)) - et émettaient
dans le numérique
responsable. 300 MT eq CO2 de gaz à effet de serre, là encore un chiffre du même ordre de grandeur
que les émissions d’un grand pays développé (406 MT eq CO2 émis en France en
2021 (3)).
L’impact de ces infrastructures ne se réduit pas à la installations a beaucoup augmenté (entre 20 et 60% de
consommation d’électricité et aux émissions de GES consommation en plus pour 4 fois plus de charges), cet
associées. Un centre de données de 15 MW peut consommer impact est en croissance. La commission européenne estime
Sylvain Révéreault par exemple jusqu’à 1,6 million de litres d’eau par jour (4). par exemple que la consommation d’électricité issue des
Directeur technique Cette consommation d’eau peut être localement centres informatiques des 28 membres de l’union va
Zenika Rennes et problématique. On pense aux installations mises en place augmenter de 21% entre 2020 et 2025 (7).
France, consultant sur dans des zones plutôt sèches comme les États américains de
les thématiques DevOps, l’Arizona ou du Nevada, mais avec le dérèglement L’intérêt et les limites du cloud d’un
innovation managériale
et numérique
climatique, personne n’est à l’abri des pénuries d’eau. La point de vue environnemental
responsable. Hollande a par exemple vu Microsoft consommer 84 millions Le cloud est-il un atout ou un désavantage pour maîtriser les
de litres d’eau potable en 2021, 4 fois plus que prévus (5). Il impacts environnementaux d’un service numérique ? Pour
faut également compter avec l’impact des bâtiments et des répondre à cette question, il est intéressant de se pencher sur
équipements dont la fabrication représente 15% de la définition du cloud proposée par le National Institute of
l’empreinte en émission de gaz à effet de serre totale du Standards and Technology (NIST). Cette définition nous dit
centre informatique sur toute son existence. que pour être qualifiée de cloud, une plateforme doit
L’étude ADEME / ARCEP, « évaluation de l’empreinte du répondre à 5 caractéristiques essentielles :
numérique en France et analyse prospective » (6) donne une • l’élasticité rapide, c’est à dire la capacité à redimensionner
photographie détaillée de ces impacts selon le type de centre la plateforme en fonction de la charge
informatique ou encore par type d’équipements, comme on • la mutualisation des ressources (serveurs, réseaux,
peut le voir dans cette figure : Figure 1 stockage, etc.)
Figure 1 Enfin, même si, comme le relève l’IEA, l’efficacité des • la mesure en permanence du service (qui permet
notamment la facturation à l’usage)
• l’accès au travers de mécanismes réseaux standards
• la possibilité pour les utilisateurs d’être autonomes dans
leur utilisation (à la demande, en self-service)
(1) [Link]
(2) [Link]
(3) [Link]
(4) [Link]
(5) [Link]
(6) [Link]
(7) [Link]
12 [Link]
L’utilisation de ces mécanismes d’élasticité va permettre de
dimensionner les plateformes au plus juste de la charge
utilisateur réelle, par opposition aux approches antérieures
qui consistaient à dimensionner les plateformes en fonction
des pics d’utilisation potentiels. Cette approche permet donc
de diminuer le nombre de machines nécessaires pour
l’utilisation d’un service, en particulier lorsqu’ elle est
conjuguée avec la mutualisation. Figure 2
La mutualisation apporte en effet des avantages certains
dans la maîtrise des impacts environnementaux. Par
exemple, la virtualisation système (qui est une composante Exemple de plateforme Web utilisant de l’élasticité automatique (8). Figure 2
forte de cette mutualisation) permet de regrouper des
charges de travail différentes sur une même machine
physique, tout en isolant ces charges de travail. Ce
regroupement va permettre, pour un ensemble de services
numériques donné, d’utiliser moins de machines physiques
que sur une architecture n’utilisant pas de virtualisation ;
moins de machines physiques utilisées, ça signifie
potentiellement moins de machines à fabriquer, à acheminer
jusqu’au centre de données, à alimenter, à refroidir, à
retraiter en fin de vie, etc.
De plus, cette mutualisation ne s’arrête pas à la virtualisation
système, puisque le cloud computing va également permettre Répartition des responsabilités en fonction du modèle de service. Figure 3
la mise en commun des accès internet, des équipements
réseau (notamment au travers de la virtualisation des réseaux avantages d’un point de vue environnemental, mais cette
et du Software Defined Networking), des équipements utilisation doit être accompagnée d’une réelle réflexion sur
d’alimentation électrique et de refroidissement, etc. les usages afin d’éviter d’annuler les effets positifs.
Selon le modèle de service utilisé (IaaS, Paas, FaaS, etc.), la Il est également important de souligner que ces avantages
mutualisation peut être plus ou moins forte. En effet, plus le sont théoriques, et qu’il n’existe aujourd’hui pas d’étude
fournisseur de cloud a à sa charge de responsabilités dans scientifique systémique qui prouve ces gains
l’hébergement, plus il va être dans son intérêt de mutualiser environnementaux ; cette preuve scientifique étant d’autant
et de maximiser l’utilisation des ressources informatiques. plus complexe à apporter que les données communiquées
Figure 3 par les différents fournisseurs sont disparates et avec un
Enfin, la mesure du service en permanence va permettre la niveau de transparence laissé à l’appréciation de chacun
mise en place de tableaux de bord de suivi des d’entre eux.
consommations, qui seront utiles pour le suivi des impacts
environnementaux. Cette mesure constante permet Optimiser son déploiement
également la facturation à l’usage du service, qui va pousser Mesurer
l’utilisateur à éviter la surconsommation de ressources. Choisir un hébergement
Car il s’agit ici d’un écueil dans lequel il est possible de Une part importante de l’impact de l’hébergement d’un
tomber lors de l’utilisation de cloud : comme il est facile (et service numérique est déterminée par les sources qui
relativement peu cher) de déployer de nouvelles ressources permettent de produire l’électricité localement. Si aucune
informatiques, il peut être tentant d’en déployer beaucoup énergie n’est vraiment verte, au sens où il y a toujours un
plus que dans les infrastructures traditionnelles impact, celui-ci varie en importance et en nature. Si
d’hébergement, quitte à avoir des “serveurs zombie” qui l’électricité est produite à partir de gaz ou de charbon, les
continuent de fonctionner dans le vide. émissions de GES seront importantes, si elle est produite à
Les gains environnementaux réalisés à l’aide de la partir de panneaux solaires ou d’éoliennes, les émissions de
mutualisation et de l’élasticité peuvent ainsi être annulés par GES seront basses, mais la consommation de ressources
une surconsommation de ressources ; c’est ce qu’on appelle naturelles sera plus importante pour construire tous les petits
l’effet rebond. générateurs et les relier au réseau. La France a une électricité
Un autre écueil possible dans l’utilisation du cloud consiste à issue majoritairement de centrales nucléaires et
systématiser la redondance et la haute disponibilité des d’hydroélectricité, sources peu gourmandes en ressources et
services, même lorsque cela n’est pas nécessaire, tout peu émettrices de GES. Héberger son infrastructure ailleurs
simplement parce que la technologie le permet. Il convient qu’en France se traduit par une augmentation d’une grande
donc de bien réfléchir à dimensionner les plateformes et partie des impacts environnementaux.
niveaux de redondances en fonction de ce qui est réellement Le choix de la zone géographique est donc crucial. Google
nécessaire pour les objectifs du service (cf. les liens avec la fournit d’ailleurs dans son formulaire de choix de localisation
démarche FinOps plus loin dans cet article).
Sur le papier, l’utilisation du cloud apporte donc de nombreux (8) Source : “Green IT, les clés pour des projets informatiques plus responsable” - Editions ENI
[Link] 13
des déploiements, entre autres informations, une note sur les consoles d’administration et de monitoring. Là encore, il
impacts en émissions de GES sous la forme de feuilles vertes, s’agit d’une estimation à partir de la consommation
dont il est possible de tenir compte. Figure 4 d’électricité à l’usage.
Tous les centres informatiques n’ont pas la même efficacité.
Il existe beaucoup d’optimisations possibles pour économiser Ajuster
de l’énergie en rendant toujours service au client. Le plus Une infrastructure plus petite aura typiquement moins
gros enjeu à l’heure actuelle pour ces installations est de ne d’impact. Il est donc important de bien dimensionner les
pas dépenser trop en refroidissement. En effet, les ressources déployées dans le cloud par rapport au besoin du
équipements informatiques émettent de la chaleur pendant projet. Bien dimensionner le besoin est d‘ailleurs une des
leur fonctionnement et deviennent défaillants au-delà d’une premières et des plus importantes des bonnes pratiques
certaine température. Il faut donc réguler la température de d’écoconception poussées par les référentiels. Le référentiel
la pièce. des 115 bonnes pratiques d’écoconception Web du collectif
Il existe un indicateur très largement utilisé par les exploitants : conception numérique responsable (11) par exemple place
le PUE. Il s’agit du ratio entre l’énergie totale que le centre cette idée en haute priorité.
informatique utilise et celle qui est effectivement consommée Dans cette optique, il faut soigner la définition des niveaux de
par des équipements utiles aux clients, c’est-à-dire les disponibilité attendus. Si un produit n’est utilisé qu’aux
serveurs, routeurs, etc. La note optimale est 1. Le standard heures de bureau (entre 8h et 19h) il n’est pas utile d’avoir
était de 2 il y a 15 ans, mais aujourd’hui OVH revendique un un environnement de production disponible 24h/24h. De
PUE de 1.28 (9) et Google de jusqu’à 1.08 (10). manière générale, questionner le niveau de redondance des
services déployés éventuellement de façon dynamique (plus
ou moins de disponibilité selon les heures et la courbe de
charge) est une pratique encouragée.
Il existe d’autres indicateurs permettant d’évaluer et de
comparer les opérateurs comme le CUE, pour Carbon Usage % d’uptime Downtime Downtime
Effectiveness et le WUE pour Water Usage Effectiveness, qui par an par jour
99,9% - three nine 52 minutes 7 secondes
respectivement mesurent l’impact carbone et la
33 secondes
consommation d’eau. OVH revendique ainsi 0.2 T eq CO2
99,999% - five nine 5 minutes 1 seconde
par MWh et 0.26L par kWh. 35 secondes
99,9999% - six nine 31,5 secondes 86 ms
Mesurer les impacts de votre architecture
Des outils permettent de mesurer, ou du moins d’estimer, Le lien avec la démarche Finops est évident. Celle-ci consiste
l’impact de votre infrastructure afin de l’optimiser. à inventorier toutes les ressources déployées et à mesurer leur
Cloud Carbon Footprint, développé par Thoughtworks, usage réel afin d’optimiser à la baisse l’infrastructure dans le
permet par exemple d’avoir une estimation de l’empreinte but de réduire les coûts. À part la planification des instances
carbone des services à partir des données des fournisseurs, réservées, la plupart des pratiques FinOps sont aussi des
selon des formules fournies de façon transparente. pratiques GreenIT : mieux dimensionner les VM, Pods et
Mais depuis quelques années, les fournisseurs de cloud eux- autres composants, utiliser des services managés, supprimer
mêmes fournissent cette estimation directement dans leurs les services sous-utilisés, etc.
14 [Link]
• diminution de l’impact lié au matériel utilisé
• mise à disposition de tableaux de bord de suivi de la
consommation
Une architecture
• soutien de projets environnementaux
Il est cependant regrettable que ces engagements soient
souvent tournés vers la phase d’utilisation des centres de
écologiquement
données, et focalisés sur l’impact carbone.
Les acteurs français et européens ne sont pas en reste sur le
responsable Raphaël Lemaire
Directeur technique chez
Zenika, consultant et
sujet. On peut notamment citer : formateur, spécialisé
• OVH, qui -entre autres actions- mène une politique de Tout le monde a conscience de dans le numérique
responsable.
longue date d’optimisation du cycle de vie de ses serveurs l’existence des crises écologiques, dont
(12)
• Scaleway qui présente son dernier centre de données
l’importance et l’urgence alimentent notre
comme l’un des plus efficients d’europe, en terme de actualité et notre anxiété depuis les
consommation énergétique et d’usage d’eau (13) années soixante-dix. Toutes nos activités
• Infomaniak, qui présente une page très détaillée sur leurs
impacts actuels et leurs engagements de réduction (14)
ont un impact : nos déplacements, notre
• et d’autres acteurs positionnés spécifiquement sur le chauffage, notre alimentation, nos achats,
créneau de l’hébergement “green”, comme Neutral IT qui et aussi bien sûr, le numérique.
met en œuvre le réemploi de la chaleur produite par les
équipements (15) ou Stratosfair avec leurs datacenters
écoconçus (16) Celui-ci a en effet un impact environnemental non négli-
Il faut ici encore noter que chaque fournisseur est libre geable : 10,3% de la consommation d’électricité en France,
d’afficher les éléments qu’il souhaite mettre en avant, sans 2,5% de nos émissions de GES (1), 3,8% au niveau mondial (2),
faire nécessairement appel au contrôle d’un organisme une consommation d’eau et de ressources naturelles impor-
indépendant. tante pour fabriquer les appareils, des pollutions en fin de vie,
un recyclage très difficile et très partiel, etc.
Conclusion Certes le numérique n’est (pas encore) le secteur le plus pol-
En résumé, les datacenters ont un impact non négligeable et il luant, mais son impact est en croissance alors que nous
faut être attentif à cet aspect dans le cadre des projets. Les devrions diminuer drastiquement notre empreinte pour pré-
référentiels de pratiques pour le numérique responsable server un monde vivable. À titre d’illustration, si on prend les
encouragent la mutualisation pour minimiser la taille des deux tonnes équivalent CO2 souvent citées comme « budget »
infrastructures. Celle-ci est plus intéressante avec une utilisation cible pour conserver un climat vivable, l’impact du numérique
des outils permettant de dimensionner les déploiements de pour un Européen moyen représente actuellement 40% de ce
façon élastique et en faisant très attention à l’effet rebond, la forfait (3). Si ce chiffre ne change pas, il ne nous resterait
facilité d’utilisation incitant à consommer plus. plus que 60% de ces 2 tonnes pour nous déplacer, nous
Les acteurs de l’hébergement ne sont pas toujours aussi chauffer, manger, nous vêtir, etc. Figure 1
transparents que possible, mais fournissent néanmoins des
données sur leurs impacts et engagements Informations essentielles avant de
environnementaux, ce qui permet aux clients de faire des poursuivre
choix éclairés. Le premier réflexe d’un développeur pour tenter de limiter
l’impact environnemental d’un logiciel est naturellement de
chercher à optimiser les applications pour qu’elles consom-
ment moins de ressources machine (CPU, RAM, bande pas-
sante…). L’idée sous-jacente est qu’ainsi, moins d’électricité
sera dépensée, avec donc moins d’impact environnemental.
Mais si économiser des ressources informatiques va plutôt
toujours dans le bon sens, le sujet est en fait plus complexe,
et pour bien hiérarchiser les priorités, il faut connaître
quelques faits.
[Link] 15
Figure 1
Seuls les appareils sont matériels Impact et charge machine : une relation pas
Les logiciels n’ont pas d’existence physique, ils n’existent qu’à forcément linéaire
travers les matériels (ordinateurs, smartphones, serveurs, Les appareils numériques (surtout côté serveur et réseaux)
équipements réseau, objets connectés…) sur lesquels ils consomment de l’électricité à partir du moment où ils sont
s’exécutent. Ce sont ces appareils qui ont un impact environ- allumés, même s’ils ne font rien. De plus, même s’il y a une
nemental, à travers leur consommation d’énergie, mais aussi corrélation entre la charge d’une machine (par exemple un
leur fabrication, leur transport ou encore leur fin de vie, serveur) et sa consommation d’énergie, celle-ci n’est pas
quand ils deviennent des déchets et sont, ou non, bien traités linéaire et dépend de l’application. Si on cherche à réduire la
et recyclés. quantité de ressources informatiques utilisées, c’est donc plus
dans le but de réduire la taille de l’infrastructure nécessaire
Un impact surtout coté client que pour gagner quelque chose sur les machines déjà
Si on regarde dans le détail, ce sont les appareils des utilisa- déployées.
teurs, par opposition aux réseaux et aux datacenters, qui ont
le plus d’impact (entre 60 et 83% selon le critère choisi). Cela Les actions clefs
vient du fait qu’il y a plus de 500 fois plus d’appareils côté Ainsi si on va bien chercher à économiser des ressources
client. Il faut donc mettre un maximum d’efforts de ce côté. informatiques, le but n’est pas seulement d’économiser de
Il faut pousser vers l’utilisation de moins d’appareils et favo- l’électricité, mais surtout de limiter les besoins d’infrastruc-
riser leur durabilité. tures (côté serveur et réseau) et de ne pas pousser à l’obso-
lescence les appareils (coté client) en donnant l’impression
Une grande partie de l’impact est à la à l’utilisateur que « ça rame ». Côté client, la compatibilité
fabrication des appareils est aussi un point très important : le but est de faire durer les
Une grande partie des impacts environnementaux se trouve appareils, il faut donc que les services fonctionnent sur un
à la fabrication des appareils plutôt qu’à leur utilisation. Pour maximum de configurations matérielles et logicielles, même
les appareils utilisés côté client, en France, la majeure partie « anciennes ». Figure 3
des impacts se trouve à leur fabrication. Ainsi 90% des émis-
sions de gaz à effet de serre d’un smartphone sur toute son L’architecture logicielle est une
existence sont déjà réalisées au moment où on l’achète. Cela discipline de contexte et de compromis
vient du fait que ces équipements consomment relativement Une architecture logicielle est nécessairement un compromis
peu d’énergie, quelques kWh par an pour un smartphone, entre différentes contraintes. Il y a de nombreuses capacités
environ 30 kWh par an pour un ordinateur portable, et sont (capabilities en anglais) qui peuvent être optimisées : perfor-
conservés assez peu de temps, de l’ordre de quelques mance, efficience, maintenabilité, fiabilité, résilience, dispo-
années. nibilité, élasticité, scalabilité, utilisabilité, compatibilité, sécu-
Pour les équipements serveur et réseau, qui sont conservés rité… selon le contexte projet, l’architecte mettra l’accent sur
longtemps et chargés au maximum de leur capacité, c’est une ou plusieurs d’entre elles, dans les limites de budget dis-
plutôt l’usage qui a le plus d’impact, même si leur fabrication ponible. Figure 4
reste non négligeable. Figure 2 La minimisation de l’impact environnemental est un aspect
transverse du projet, qui doit être pris en compte sur toute la
vie du produit. Fort heureusement, prendre en compte cet
16 [Link]
Figure 2
[Link] 17
complexité peut entraîner des besoins en ressources plus cela, il faut idéalement inclure ces appareils dans le péri-
importants. mètre et dans la stratégie de test.
C’est dans cette optique que les communautés poussent par Se poser des limites de taille de page, de nombre de
exemple dans les référentiels l’utilisation de pages statiques requêtes ou de métriques comme les web vitals est égale-
plutôt que générées dynamiquement pour des contenus qui ment intéressant, cela permet d’avoir des chiffres objectifs et
changent peu souvent. On se passe ainsi de base de données mesurables qui puissent être posés dans les spécifications.
et de serveur d’application : c‘est plus simple et réclame Ces métriques peuvent être obtenues grâce aux outils de
moins de ressources côté back. Par extension, l’architecture développement des navigateurs ou grâce à des applications
JAMStack (pages statiques + un peu de JavaScript et appels dédiées comme Google Lighthouse.
d’API) est également plébiscité[Link] 5
L’architecture micro-services qui s’est répandue sur beau- Métrique Description Objectif
coup de projets ces dernières années a, dans beaucoup de Nombre de requêtes Moins de 80
cas, apporté de la complexité, plus d’appels réseaux, sans Taille de la page Moins de 1,5 mo
forcément compenser par les économies promises par un Temps d’affichage Moment où le Moins de 2s
déploiement différencié et ajusté à la charge des différentes du premier contenu premier texte
briques. Figure 6 ou la première
image sont affichés.
Réduire la pression à l’obsolescence Temps pour que Temps nécessaire Moins de 4s
Toujours dans l’objectif de faire durer les appareils coté la page devienne pour que la page
client, le second levier après le rejet des cassures de compa- interactive devienne
tibilité est de faire attention à ce que l’application ne « rame » entièrement
interactive
pas sur les appareils les plus contraignants du parc, afin
d’éviter que les utilisateurs ressentent le besoin d’acheter un Temps d’affichage Moment où le Moins de 2,5s
du contenu texte le plus
nouvel appareil (ou cessent d’utiliser votre produit). Pour
le plus large. long ou l’image
la plus grande
sont affichés.
Réduire la quantité
Figure 5 de données stockées
L’espace disque est une des ressources à économiser. Dans
cette optique, conserver des bases de données petites est
intéressant. Une base plus petite sera aussi typiquement plus
performante en termes de temps de réponse et de calcul.
Pour cela il faut chercher et éliminer les redondances et ne
pas stocker des choses inutiles, mais aussi prévoir dès la
conception d’intégrer le temps de vie des données dans l’ar-
chitecture de l’application, ce qui n’est pas souvent fait : Au
bout de combien de temps peut-on supprimer ces informa-
tions ? Comment cette suppression va-t-elle être effectuée ?
Certaines bases de données comme MongoDB permettent
de paramétrer un temps d’obsolescence sur une collection,
ou bout duquel la donnée est automatiquement supprimée.
Dans d’autres cas, il faudra prévoir des batchs ou un autre
mécanisme.
Figure 6 : Exemple d’architecture complexe
18 [Link]
Ces interrogations convergent avec les contraintes légales qui Parmi les actions simples, mettre à jour les piles techniques
s’appliquent sur les données personnelles, qui doivent être sup- (la version de base de Java, de Node, de Python,) permet
primées au bout de 18 mois sans utilisation. Étendre ce méca- souvent d’améliorer le comportement de l’application avec
nisme à tout ce qui est stocké permet d’alléger le système. une quantité de travail limitée. En effet, les développeurs des
plateformes améliorent régulièrement celles-ci, ou ajoutent
Réduire la quantité de données des options (par exemple des stratégies de garbage collector)
transférées permettant d’optimiser les applications.
La bande passante utilisée par l’application, que ce soit avec
l’extérieur ou entre ses propres composants, détermine en Réutiliser : mutualiser
partie la taille de l’infrastructure nécessaire et a un impact les infrastructures utilisées
automatique sur les ressources requises par les machines Dans l’optique de réduire les besoins d’infrastructure, tout ce
émettrices et réceptrices pour traiter ces informations. Côté qui permet de mutualiser celle-ci est encouragé dans les réfé-
client, réduire la quantité de données transférées est un des rentiels. Il y a moins d’impacts en faisant cohabiter plusieurs
moyens de rendre une application plus légère. La conception services numériques sur un même ensemble d’appareils
d’une API doit donc prendre en compte cet aspect. chargés au maximum de leurs capacités qu’en déployant un
Le premier levier est tout simplement de faire des messages ensemble d’équipement pour chacun. Ainsi, les référentiels
plus petits : ne transporter que ce qui est nécessaire pour le encouragent l’utilisation de la virtualisation, du dimensionne-
récepteur, et pas toutes les informations par défaut. ment dynamique des systèmes en fonction de la charge ou
Un autre levier, complémentaire, est la réduction du nombre encore des services dits « managés »
de requêtes. Pensez par exemple à récupérer un maximum Cela va dans le sens du mouvement vers le cloud quasi géné-
de choses en une seule requête plutôt qu’en en faisant plu- ralisé de ces dernières décennies, effectué pour des raisons
sieurs petites. On parle d’API « coarsed grained ». économiques et pratiques. Pour plus de détails, voir notre
Les protocoles d’échanges permettent également de gagner article « L’impact environnemental des datacenters et du
beaucoup de ressources. Pour ne citer qu’un seul exemple cloud » dans ce numéro.
HTTP2, grâce à des optimisations techniques, permet de
gagner en temps de chargement et en nombre de Recyclez les outils et pratiques pour
connexions. Comme il est rétro compatible, l’activer ne un numérique plus responsable
devrait pas être une option si votre programme utilise une Beaucoup d’outils et de techniques sont déjà utilisés dans le
API http. cadre de la conception et de la surveillance et de l’évolution
L’approche Mobile First est une stratégie de conception et de des architectures d’applications et de systèmes d’informa-
test consistant à imaginer en priorité une application pour les tion. Comme on l’a dit, les pratiques encouragées par les
appareils portables en situation de mobilité. C’est en effet référentiels d’écoconception de services numériques sont
dans ce contexte que l’on a le plus de contraintes : le produit déjà intéressantes pour d’autres raisons. Il est donc tout à fait
doit bien fonctionner sur des appareils potentiellement peu naturel d’utiliser les outils et les compétences déjà déployés
puissants et avec une connexion réseau limitée. Si l’applica- dans votre contexte et de les utiliser en ciblant l’impact envi-
tion se comporte bien sous ces contraintes, elle sera automa- ronnemental.
tiquement satisfaisante sur des appareils haut de gamme En particulier, les outils de monitoring sont très intéressants.
avec une connexion fixe. La contrainte réseau implique de Ils permettent de voir quels sont les composants qui sont
transférer peu de données et de pouvoir répondre au moins sous-utilisés, à quels moments et sur quelles parties de l’ap-
en partie au besoin utilisateur en étant hors ligne. Si on pous- plication se trouvent les pics de charge, si une fuite de
se cette approche à l’extrême, on peut imaginer une concep- mémoire est présente, etc. Les chiffres de consommation de
tion Offline First, où l’application est prévue pour fonction- ressources fournis (CPU, mémoire, bande passante…) peu-
ner hors ligne par défaut, après une synchronisation éven- vent être utilisés comme KPI à optimiser à la baisse dans l’op-
tuelle. tique d’une démarche de réduction de l’empreinte environ-
nementale.
Réparer les applicatifs pour éviter les Il y a un lien très étroit avec la démarche Finops, qui vise à
dépenses inutiles optimiser la facture d’hébergement, en particulier sur le
Le manque d’optimisation, voire les bugs (fuite de mémoire, cloud, en surveillant et optimisant finement les composants
doublons de traitements, de requêtes, etc.) est une des prin- déployés, ce qui va dans le sens d’une réduction des res-
cipales causes de gaspillages de ressources. C’est pourquoi, sources utilisées.
comme on l’a dit, les développeurs ont le réflexe de creuser
de ce côté pour réduire l’impact environnemental de leur Conclusion
produit. Optimiser les applications est aussi intéressant d’un Comme on le voit, la minimisation de l’impact environne-
point de vue financier (pour réduire la facture d’héberge- mental d’une architecture consiste à construire un produit
ment) et pour avoir de meilleures performances. Utiliser tous simple et efficient, compatible avec le plus d’appareils clients
les outils disponibles pour repérer et corriger les problèmes possible. Dans le détail, les conseils des référentiels vont lar-
de performance est donc très intéressant. gement dans le sens des bonnes pratiques déjà connues qui
améliorent les performances ou permettent des économies.
[Link] 19
Comment réduire l’impact
environnemental des applications ?
Vincent Méoc L’été 2022 a été marqué par de nombreux incendies ainsi qu’un nouveau record de tem-
Sr Staff Solution
Architect et CTO pérature annuel… Le dérèglement climatique est là et, d’après le rapport 2022 du GIEC,
Ambassador chez nous n’en sommes qu’au début ! De plus, le coût de l’énergie pour les entreprises a aug-
VMware. Il travaille sur
les projets liés aux multi menté de façon significative en 2022. Cela donne de nombreuses raisons aux sociétés
cloud, à l’automatisation
(Infra as code, DevOps,
de réfléchir à leur impact environnemental et de tenter de le réduire. Dans cet article,
etc..) et à l’approche nous allons voir ce qu’il est possible de faire en nous concentrant sur l’impact du numé-
Green Ops concernant
les enjeux rique dans le dérèglement climatique et la réduction de la consommation énergétique.
environnementaux.
D’abord, les (autres) mauvaises nouvelles. Le numérique individuelle trouve rapidement ses limites et il faudra travailler
compte pour 4 % des émissions de gaz à effet de serre (GES). à l’échelle d’une équipe, d’un département, voire d’une
En gros, c’est l’équivalent de toute la flotte mondiale de ca- société pour avoir un impact important. Une excellente façon
mions ou de 2 fois la marine marchande mondiale ! Ces gaz d’avoir une adhésion à un projet de développement durable
sont les responsables du dérèglement climatique donc il est numérique est de motiver un grand nombre de personnes en
important de tenter de les réduire le plus possible. Ce n’est leur permettant de comprendre la situation et les améliora-
pas la tendance actuelle, car le numérique croit de 9 % par tions qu’elles peuvent apporter. Aujourd’hui, les entreprises
an en termes d’énergie consommée. se saisissent de plus en plus des formations appelées « La
Et alors, me direz-vous, quel est le lien avec votre application ? fresque du climat » ([Link]) qui, en 3H, explique de
Tout simplement, votre application s’exécute sur un façon didactique le dérèglement climatique. L’excellente
serveur, est accédée à travers un réseau et est utilisée sur un Bande dessinée « Le monde sans fin » est aussi un bon ouvra-
terminal de type smartphone, portable, etc. Chacun de ces ge de vulgarisation sur ce sujet. Plus spécifique au numé-
éléments a émis des GES lors de sa fabrication et consomme rique, il existe « la fresque du numérique » ([Link]-
de l’énergie dont la production émet du GES. Pour donner [Link]) ainsi que le MOOC très bien fait de l’institut du
quelques chiffres : les Datacenters sont responsables de 10 à numérique responsable ([Link]/#mooc-nr - en ligne
15 % des émissions de GES du numérique, le réseau (anten- et gratuit). Pour les plus techniques, vous pourrez, ensuite,
ne et transport des données) l’est pour 25 à 30 %, et les ter- aller vous frotter à des concepts plus poussés à travers la
minaux utilisateurs le sont pour 50 %. Green Software Foundation ([Link]/).
La bonne nouvelle est que cet impact du numérique peut être
grandement réduit à travers une approche de type : Mesurer pour comprendre son
Apprendre, Mesurer, Réduire. impact…
Idéalement, votre société a fait un bilan carbone et vous avez
Apprendre ? Pourquoi faire ? déjà de nombreux indicateurs pour comprendre votre impact.
Ces notions de développement durable appliqués au monde En pratique, ce n’est cependant pas toujours le cas et il vous
numérique nécessitent de prendre en compte de nouveaux faudra en plus des outils pour comprendre votre impact d’un
concepts, de nouvelles méthodologies ainsi que de suivre de point de vue opérationnel.
nouvelles métriques. Le champ de connaissance nécessaire Des outils permettent d’instrumentaliser votre code pour
est bien plus large que ce que couvrira cet article et nécessite mesurer son impact carbone tandis que d’autres permettent
d’être partagé avec de nombreuses personnes de façon à d’analyser votre site web pour évaluer son impact (globemal-
permettre un changement d’ampleur. En effet, l’approche [Link] par exemple, mais il y en a plusieurs).
Figure 1 Globalement, et malheureusement, cela reste tout de même
une gageure de comprendre l’impact de son application en
restant purement d’un point de vue applicatif.
Il est donc nécessaire de regarder l’infra sous-jacente.
Du point de vue infrastructure, il existe des solutions permet-
tant de comprendre l’impact énergétique et GES des applica-
tions. VMware Aria Operation permet notamment de prendre
en compte la consommation énergétique et les émissions de
GES des Datacenters et montre aux équipes projet, applica-
tives ou aux départements quelle est leur part de responsabi-
lité. Chaque population impliquée (Datacenters ou applica-
tives) peut ainsi comprendre son impact et suivre ces progrès
pour les réduire. Figure 1
20 [Link]
Une métrique importante d’un Datacenter (DC) est son PUE
(Power Usage Effectiveness). Il s’agit du ratio mesurant l’effi-
cience du DC. Un PUE de 2 signifie que pour 1 kWh ingéré
par un serveur, il faut 1 kWh pour, entre autres, le refroidis-
sement du datacenter. Bien entendu un PUE proche de 1.1
fais une différence significative en termes d’efficacité énergé-
tique puisque seulement 0.1kwh est nécessaire pour chaque
kWh consommé par un serveur. Une autre métrique impor-
tante concerne le type d’énergie consommée par votre data-
center. On parle ici d’intensité carbone et elle se mesure en
gCO2e/kWh (gramme de CO2 émis pour chaque kWh).
Cette métrique se trouve assez facilement sur Internet. Je
vous conseille notamment le site [Link] qui
donne une très bonne visualisation temps réel de l’intensité
carbone de chaque pays. Figure 2
Ces mêmes métriques (PUE et intensité carbone) existent
pour les cloud publics, mais tous les fournisseurs de cloud
publics ne sont pas égaux, eu égard à la transparence. Figure 2
Google fait la course en tête en vous donnant une visibilité de l’unité fonctionnelle que l’on souhaite utiliser et qui impacte
l’intensité carbone par kWh sur chacune des régions qu’il la consommation des ressources (Call API, N<ombre d’utili-
propose ainsi qu’un outil d’analyse détaillé de vos émissions sateurs, etc.)
carbones. La partie C peut être définie par l’équation suivante C = (O
+ M). O étant les émissions causées par la consommation
Réduire… Comment faire ? énergétique et M les émissions liées à la fabrication du maté-
D’un point de vue organisationnel, les responsables d’appli- riel sous-jacent.
cations, projets et tech leads sont les mieux placés pour Pour trouver O, il suffit de multiplier la consommation éner-
réduire l’impact numérique. Ce sont ceux qui définissent leurs gétique par l’intensité carbone de la région où tourne l’appli-
besoins fonctionnels et techniques. Une réduction forte peut cation.
ainsi être rapidement envisagée en évitant de faire tourner Pour trouver M, il faut prendre en compte l’ensemble des
des serveurs constamment, en supprimant les environne- émissions carbone émises par le matériel, divisé par le temps
ments de dev/test/pré prod, en prenant en compte le cycle de d’utilisation et le montant de ressources utilisées par l’appli-
vie complet de l’application et des données associées. cation.
Quelques questions à se poser : Certaines de ces données ne sont pas faciles à trouver, voire
• Parmi l’ensemble des données générées par votre applica- impossibles. L’accessibilité de la donnée et sa pertinence sont
tion (logs, fichiers, objets, enregistrement BDD), quelles parmi les plus gros défis dans l’évaluation des émissions car-
données sont essentielles et sur quelle durée ? bone. Certaines initiatives ont récemment vu le jour et met-
• Le format de compression de vos vidéos et images est-il tent à disposition des jeux de données (dataset) permettant
adapté au terminal utilisateur ? d’avancer. Vous pouvez notamment tirer parti du travail réa-
• Utilisez-vous les mécanismes d’optimisation disponibles ? lisé par l’association Française boavizta.
Beaucoup de questions doivent être posées dès la conception Un exemple d’implémentation est disponible à travers la
de l’application. Certaines sont listées sur le site gouverne- solution Aria Operations for Apps qui tire parti de ces jeux de
mental du référentiel général d’écoconception (ecoresponsable. données. Il est ainsi possible de suivre en temps réel le poten-
[Link]/publications/referentiel-general-ecoconception) tiel de consommation énergétique et de CO2e émis d’une
Pour les applications web, vous trouverez sur ce site application tournant sur différents runtime (VM, containers,
([Link]/blog/website-energy-efficiency) une liste cloud public). Il est aussi possible de corréler ces éléments
relativement complète des moyens à votre disposition pour avec des métriques qui ont du sens pour les équipes de déve-
être plus efficient. loppeurs ou métiers. Dans cette capture d’écran, vous voyez
D’un point de vue architecture applicative, la Green Software le score remonté pour une application dont la finalité est l’en-
Foundation propose des analyses de plusieurs modèles (pat- voi de produit. Le R choisi ici est donc le produit envoyé. Ce
[Link]) en indiquant comment score permet ensuite de suivre les progrès lors d’une migra-
mesurer leur impact. tion vers une nouvelle région ou un nouveau cloud, une
transformation en micro-service, l’utilisation d’un nouvel
Le Software Carbone Intensity score algorithme, d’un nouveau langage, etc. Figure 3
Une autre approche de la Green Software Foundation consis-
te à attribuer un score aux applications en tirant parti d’une Quid de la partie infrastructure ?
méthodologie appelée Software Carbone Intensity. Celle-ci se Côté infrastructure, de nombreuses choses sont aussi pos-
résume en l’équation suivante : sibles. La solution VMware Aria Operations permet notam-
SCI = C per R ment de faire la chasse au gâchis en analysant constamment
C étant le montant de carbone émis par l’application et R quelles machines virtuelles (VM) gâchent des ressources.
[Link] 21
Figure 3
Cette récupération de ressources permet à certaines sociétés caractéristiques les plus souvent prises en compte sont le
de supprimer entre 10 et 30% des VMs. coût, la latence, l’aspect légal, la proximité des utilisateurs.
Aussi, Aria Operations permet d’améliorer l’efficience des L’intensité CO2e/kWh de la région doit impérativement être
serveurs en augmentant le nombre de machines virtuelles un critère à prendre en compte.
par serveurs physiques. Le gain peut atteindre jusque 30 % !
Consolider de façon plus forte sur des serveurs physiques est Tout seul on va plus vite, ensemble on
notamment lié à son modèle de calcul de capacité (capacity va plus loin…
planning), mais dépend aussi de l’urbanisation réalisé dans Le travail collaboratif entre les équipes cloud, Datacenters,
son Datacenter. De plus grands clusters de virtualisation per- DevOps et applicatives est important pour réussir une straté-
mettent de réduire le nombre de serveurs de secours néces- gie de développement durable. Les équipes Datacenters et
saires. Une prise en compte des mécanismes de gestion éner- cloud doivent ainsi donner aux équipes applicatives des
gétique des serveurs physiques devra aussi être prise en métriques leur permettant de comprendre leurs émissions de
compte, notamment de mécanisme tel que HPM (Host CO2 afin qu’ils puissent réduire leur impact. À l’inverse, les
Power Management) et DPM (Distributed Power équipes applicatives et DevOps doivent correctement tagger
Management). Un serveur physique émet rapidement plus de leurs objets de façon à permettre aux équipes Datacenters de
1,5 tonne de CO2 équivalent (CO2e) lors de sa fabrication comprendre l’appartenance, la fonction et le statut des objets
donc augmenter l’efficience et la durée de vie de ses serveurs utilisés. Une approche multi cloud est généralement appré-
existants sont des leviers forts de réductions de GES. ciée pour soutenir ces démarches et peut tirer parti de solu-
Certaines pratiques du cloud public sont aussi intéressantes à tion telle que « Aria Cost powered by CloudHealth » afin
porter dans le cloud privé. d’utiliser des mécanismes automatisés de tagging et
Il est ainsi fréquent dans le cloud public d’éteindre ses ser- d’arrêt/redémarrage des services quel que soit le cloud.
vices la nuit ou le week-end afin de réduire les coûts. Pour
cette même raison et aussi pour des raisons environnemen- Conclusion
tales, il est possible de faire la même chose dans le cloud La bonne nouvelle est que de nombreuses solutions peuvent
privé. VMware Aria Automation permet notamment de four- être mises en place pour améliorer le bilan carbone du
nir aux utilisateurs un catalogue de service et une manipula- numérique. Elles passent nécessairement par l’évaluation de
tion de leurs ressources à travers une interface graphique et la situation, la compréhension du gain vs effort des actions
infra as code. Il est alors possible de programmer des plages de réduction, la mise en place des actions et un suivi régulier
d’arrêt d’environnements non critiques en permettant aux des critères de développement durable. En effet, au-delà
utilisateurs de redémarrer en quelques minutes leurs services d’un projet unitaire de réduction de son impact, la notion de
lorsqu’ils en ont besoin. Couramment utilisée, la fonctionna- développement numérique durable nécessite ensuite une
lité de bail permet de donner une durée de vie à une ressour- prise en compte de ces nouveaux concepts et métrique de
ce. Au terme de cette durée, le responsable de l’objet est façon… durable !
notifié et peut étendre le bail ou la ressource est soit archivée, J’espère que cet article vous a été utile, n’hésitez pas à me
soit supprimée. Cette approche simple permet de largement faire part de vos retours, succès et échecs dans votre
réduire les tendances d’accroissement continu classique des démarche de développement durable ou si vous avez besoin
systèmes d’information. d’aide pour les étapes d’évaluation et de réduction.
Le cloud public est aussi une excellente solution pour amélio-
rer le bilan carbone de son système d’information. Par Sources :
exemple, la reprise après sinistre (Disaster recovery) peut se [Link]
faire au sein du cloud public (hyperscaler ou cloud souve- Catégorisation des émissions Srce : Institut Numérique Responsable
rain), diminuant potentiellement la taille du Datacenter Émission CO2 d’un serveur : [Link]
jusque 60 %. te/social-impact/advancing-sustainability/climate-action/product-carbon-foot-
Si le datacenter a une intensité carbone élevée (>100g de [Link]#tab0=0
CO2e/kWh), il peut être intéressant de tirer parti d’héber-
geurs référencés « Zero Carbon Committed » ([Link]-
[Link]/providers/zero-carbon ). Ces hébergeurs (hyperscalers
ou souverains) ont des PUE particulièrement efficaces et peu-
vent soit être liés à un mix énergétique avec une bonne inten-
sité carbone, soit proposer des mécanismes de certification
bas carbone, sachant qu’une meilleure intensité carbone res-
tera toujours le choix à privilégier.
Cette même réflexion liée à l’intensité carbone doit être prise
en compte lors du choix de la région chez un hyperscaler. Les
22 [Link]
Minimiser l’impact des vidéos
dans nos sites web
Hervé Boisgontier
A l’heure où la transition écologique est sur toutes les lèvres, le numérique reste très Formateur en
généralement envisagé comme facilitateur des futurs changements à opérer dans nos développement
informatique au sein
sociétés. d'ENI École Informatique
à Nantes.
Seulement les émissions du secteur du numérique représen- La stratégie de l’allègement Depuis plus de 10 ans,
avec différents langages,
tent déjà le double de celles du transport aérien (4% des Si la mise en ligne d’un support vidéo s’avère bel et bien né- je forme à la
émissions mondiales de gaz à effet de serre selon le Shift cessaire et pertinent, il reste possible de limiter l’impact de programmation et l’art
Project), et elles sont en croissance de 8% par an, ce qui pré- votre vidéo sur les infrastructures serveur/réseau/client. du développement
dit un doublement de ces émissions tous les 10 ans...tout Plusieurs leviers sont disponibles, et bonne nouvelle : ils sont informatique. Depuis
simplement insoutenable ! tous activables simultanément et permettent de limiter consi- longtemps, je
m’intéresse au
Nos vies numériques portent leur part de ces émissions, à tra- dérablement cet impact ! développement durable
vers la consommation de services numériques sans cesse et plus récemment
croissants. Parmi ces usages, la consommation de médias vi- Diminuer le poids des vidéos par la définition comment le mettre en
déos occupe aujourd’hui une part très importante, boostée La définition est, sans l’ombre d’un doute, le facteur permet- pratique dans notre
par les changements d’usages très rapides de ces dernières tant les plus gros gains d’un point de vue taille de fichier et métier d’informaticien
ou d'informaticienne.
années. donc de sollicitation du réseau lors de son chargement. Est-il
Transmettre aux autres
Les usages du web sont en effet de plus en plus d’ordre “télé- nécessaire d’avoir une résolution HD (ou pire 4K ou 8K) pour
mes connaissances a
visuels”, cela se ressent tant dans la tendance croissante de regarder cela sur un écran d’un smartphone sachant que toujours été pour moi
tous les réseaux sociaux à recourir à la vidéo, que dans les seules les plus grandes salles de cinéma projettent une image une grande joie et c’est
contenus même de ces vidéos, avec des créateurs de conte- en 4K (la majorité des salles utilisent des projecteurs 2K, ré- encore plus le cas pour
nus qui se professionnalisent et adoptent des processus de solution proche du FullHD) ? des sujets qui me
tiennent à cœur. J’ai
production de plus en plus semblables à ceux des produc- Il est possible de présenter des vidéos sobres et efficaces en
donc écrit le livre "Green
tions télévisuelles classiques. s’interrogeant sur les conditions de diffusion de ces supports IT et Accessibilité" aux
La démocratisation des outils de création vidéo permise par afin de limiter la résolution finale du fichier au minimum né- Éditions ENI et je
la massification de la production de smartphones et d’appa- cessaire. présente dans des
reils photos (bien souvent très doués en vidéos) a participé à Voici un comparatif du poids des fichiers pour un enregistre- conférences techniques
(DevFest, MiXiT,
la baisse des coûts de production des supports vidéos, et à ment d’une minute à trente images par secondes sans
Web2day…) afin d’aider
leur adoption croissante en tant que support de communica- compression : à la création de sites
tion. web plus
La vidéo est aujourd’hui largement utilisée dans tous les sec- Conditions numériquement
teurs d’activité et les chiffres de consultation explosent, tout de diffusion Résolution Norme Définition Poids
responsables.
Smartphone 480p DVD 720×480px 20Mo
comme les infrastructures réseaux et les serveurs nécessaires uniquement (16/9)
à soutenir la demande croissante. Figure 1 Smartphone 720p HD Ready 1280×720px 60Mo
Selon le Shift Project, les flux vidéo sur internet représentent Tablette (16/9)
environ 80% de l’ensemble des flux de données mondiaux ! Ordinateur
Bien évidemment, les vidéos de nos sites internet n’en repré- Ecrans de plus 1080p Full HD 1920×1080px 130Mo
sentent qu’une infime partie mais, il faut être conscient que de 50 pouces (16/9)
de part leur nature, les vidéos constituent des fichiers volumi- Projection
neux sollicitant fortement les réseaux. vidéo grand
format (moins
de 10m de base)
La stratégie de l’évitement Projection vidéo 2160p UHDTV1 3840×2160px 375Mo
Dans l’objectif de déployer une communication numérique
grand format (4K) (16/9)
sobre, le premier reflexe à avoir est donc l’évitement. (plus de 10
La question à se poser est la suivante : “la vidéo est-elle la de base)
forme la plus adaptée pour véhiculer mon message ?” Les écrans 4320p UHDTV2 7680×4320px 600Mo
Si le contenu est jugé suffisamment indispensable, il faut diffusant en 8K (8K) (16/9)
alors se poser la question de l’importance des images. Est-ce sont extrèmement
qu’une version audio n’est pas suffisante ? Qu’apporte l’ima- rares et onéreux...
ge en plus de l’audio dans la transmission de ce contenu ?
Le podcast étant une solution nettement moins consomma- La bonne règle peut être d’utiliser une définition de 480p
trice de données et d’énergie, il peut souvent être pour les smartphones et de 720px pour les ordinateurs, et de
favorablement substitué à une vidéo. ne passer au 1080p que pour des écrans de 50 pouces ou
[Link] 23
pour les vidéos. À l’heure actuelle, le H264 (ou Mpeg4) est le
codec (COmpression – DECompression) le plus utilisé. Il a
pour avantage d’être supporté par la quasi-totalité des navi-
gateurs et d’être le codec le mieux décodé nativement par les
cartes graphiques, diminuant ainsi fortement les ressources
nécessaires à la lecture côté client. Il n’est toutefois pas
Boris Butaeye exempt d’inconvénients car il produit des fichiers plus volumi-
Directeur artistique et neux que ses concurrents plus récents.
co-fondateur de la Le H265 est le successeur désigné du H264. Il a pour avan-
SCOP Light.
tage de produire des fichiers deux fois plus légers que son
Communication, je crée
des supports print, web prédécesseur mais n’étant pas libre de droit, il n’est supporté
et vidéo dans une que par Safari. Il est aujourd’hui décodé en hardware par la
optique de sobriété et j’ majorité du matériel récent.
anime des formations à Le codec le plus prometteur est le AV1 proposé par l’Alliance
l’éco-conception des Figure 1
for Open Media. Celui-ci est basé sur les mêmes algorithmes
supports, afin d’aider à
rendre ces activités que le format AVIF pour les images. Il a des taux de compres-
compatibles avec les plus de diagonale. Le 4K est à réserver uniquement à la sion encore meilleurs que ceux du H265. Il est mieux
objectifs climatiques… vidéo-projection sur des images de très grande taille (plus de supporté par les navigateurs (Firefox, Chrome, Edge, Opera
J’exerce dans la vidéo 10m de base). mais pas Safari). Le second inconvénient, en plus de sa non
depuis plus de 20 ans, Il est possible de mettre en place des média queries pour dé- prise en charge par le navigateur d’Apple, est qu’il demande
comme monteur, motion livrer une vidéo adaptée à la taille d’écran de l’utilisateur : de très fortes ressources pour être lu et que très peu de maté-
designer, graphiste SFX,
directeur des effets riels sont capables de le décoder nativement. Cela sollicite
spéciaux et réalisateur. <video controls> donc beaucoup le processeur.
Des prises de conscience <source src=”video480p.mp4” type=”video/mp4” media=”(max Il semble donc plus sage pour le moment de s’en tenir au
environnementales -width: 1024px)”> H264 pour la compression de ses vidéos, mais cette situation
successives m’ont <soursource src=”video720p.mp4” type=”video/mp4”> est amenée à évoluer dans les années à venir.
amené à questionner les
pratiques du secteur </video> Pour compresser sa vidéo, il existe des solutions destinées à
audiovisuel et à essayer un public professionnel comme HandBrake (open source) ou
de les améliorer. Je Il est important de bien réfléchir à la définition souhaitée des solutions hyper faciles d’utilisation comme Shrink my
m’inscris dans la avant de tourner les images : cela permet non seulement video!.
démarche d’acteurs d’utiliser du matériel plus simple (un smartphone fait des mer-
produisant des travaux
dans lesquels je puise veilles de nos jours) et d’utiliser moins de puissance de calcul Mono ou stéréo ?
pour alimenter mes (et donc d’énergie) pour le montage. Un son en mono n’est constitué que d’une seule piste diffu-
propres recherches: Dans le cas de vidéos diffusées sur les réseaux sociaux, pen- sée aussi bien à gauche que à droite alors qu’un son stéréo
Ecoprod, GreenIT, Le sez aux formats vidéo carrés (720x720 pixels) ! Ils sont très est constitué de deux pistes l’une destinée à l’oreille gauche
Shift Project, l’ADEME… adaptés à la consultation sur smartphones et consomment et l’autre pour la droite. Un son stéréo est donc deux fois plus
jusqu’à 40% de données en moins par rapport aux formats volumineux que son équivalent mono.
16/9 classiques. Il est nécessaire de se poser la question d’utiliser une ou deux
pistes son. Pour répondre à cette question, il est nécessaire
Diminuer le poids des vidéos par la durée de prendre en compte deux éléments :
Cela semble une évidence mais il faut bien avoir en tête que • L’intérêt d’avoir du son en stéréo
plus une vidéo est courte moins elle est lourde. Il est donc in- • Le contexte d’écoute
téressant avant le tournage de la vidéo de la concevoir le plus Tout d’abord, si la bande son n’est constituée principalement
efficacement possible. Bien penser aux messages que vous que de parole, un son mono est largement suffisant. Ensuite,
souhaitez faire passer, bien ordonner et structurer les idées, si les internautes regardent la vidéo sur un smartphone ou un
les rendre compréhensibles sont les clefs du succès. En plus ordinateur, un son en stéréo n’apporte le plus souvent rien de
votre vidéo sera plus attractive et efficace qu’une vidéo trop probant. Enfin les seuls cas où le stéréo a un intérêt sont
longue ! quand l’internaute écoute de la musique avec un casque ou
Sachez que le temps moyen de visionnage d’une vidéo sur les avec des hauts parleurs externes.
réseaux sociaux exède rarement la minute, et ce quelle que
soit la plateforme examinée. Chaque seconde au-delà de La compression pour tous : Shrink my video!
cette première minute devient donc potentiellement une se- Shrink my video! est un outil de compression vidéo basé sur
conde de trop si vous tenez à délivrer l’ensemble de votre ffmpeg. Il permet de compresser vos vidéos depuis votre navi-
message au spectateur de la vidéo. gateur internet sans avoir à les uploader sur le site.
Il suffit de sélectionner sa vidéo pour récupérer une vidéo
Diminuer le poids des vidéos compressée en appliquant les recommandations du Shift
par la compression Project ou d’aller un peu plus loin en cochant quelques op-
Les codecs de compression tions supplémentaires. Il est par exemple possible de générer
Il existe également différents algorithmes de compression une vidéo en 480p pour les petits écrans. Figure 2
24 [Link]
Figure 2
• Paramétrer le son:
Dans l’onglet “Audio” :
- Codec : AAC
- Mixage : Mono ou stéréo
- Débit : 128 kbps ou 160 kbps maximum Figure 5
Avec ces réglages, qui ne sont que des suggestions, vos vi-
déos devraient être légères et de qualité suffisante pour la
diffusion.
[Link] 25
Intégration des vidéos Le moyen le plus sobre d’intégrer une vidéo hébergée sur une
sur un service web plateforme de streaming à votre page reste donc d’y intégrer
Pour héberger vos vidéos, vous avez deux options : soit direc- une image (avec le pictogramme de lecture incrusté dans
tement chez votre hébergeur avec le reste de votre site l’image) comportant un lien au clic vers la plateforme. Ce
internet soit dans une plateforme de vidéo comme YouTube, procédé réduit drastiquement les échanges de données avec
Vimeo, Dailymotion… le serveur en limitant le nombre de requêtes et permet de
conserver le bénéfice du lazy loading si il a été déployé sur
L’hébergement sur son serveur web votre page.
La vidéo est hébergée chez votre prestataire au même titre Exemple avec YouTube :
que vos pages internet, vos images et le reste de vos conte- Il faut aller sur YouTube, se connecter et cliquer sur l’icône
nus. Il n’est alors nécessaire que d’utiliser une balise <video> pour ajouter une vidéo puis sur mettre en ligne une
avec la source qui pointe vers votre vidéo ou vos vidéos si vous vidéo. Une fois la vidéo ajoutée, il faut ensuite la regarder sur
utilisez différentes définitions ou différents formats. YouTube avec l’icône . Vous devez cliquer sur le lien
Cette méthode vous permettra de mettre en ligne les vidéos Partager puis choisir Intégrer.
les plus légères qui soient, aucune compression supplémen- Voici un exemple de code généré :
taire n’ayant lieu dans le processus.
Il est possible d’appliquer des filtres graphiques sur cette balise <iframe width=”560” height=”315” src=”[Link]
vidéo néanmoins cela est généralement une mauvaise idée. embed/qPbR4ucGbEY” title=”YouTube video player” frameborder=”0”
Il est préférable d’effectuer ces effets lors du montage. D’une allow=”accelerometer; autoplay; clipboard-write; encrypted-media;
part cela économise des cycles CPU à chaque visionnage de gyroscope; picture-in-picture” allowfullscreen></iframe>
la vidéo et d’autre part, ces filtres graphiques appliqués avant
la compression peuvent améliorer celle-ci. Il faut ensuite récupérer l’adresse pour l’intégrer dans le code
Sur la balise <video>, il est possible d’utiliser l’attribut poster suivant :
pour afficher une image avant que l’internaute lance la
vidéo. Si cet attribut n’est pas utilisé, rien n’est affiché tant <a href=”lienYoutube”>
que la vidéo n’est pas chargée puis c’est la première image <img src=”[Link]” alt=”vidéo ...” loading=”lazy”>
du film qui est affichée. Il faut se poser l’intérêt de cette </a>
image. Est-ce qu’elle apporte un réel plus ? Il n’est pas pos-
sible d’utiliser différents formats d’images. Il faut alors utiliser Pour être totalement écoconçu, il est possible d’utiliser plu-
un format qui soit supporté par tous les navigateurs. sieurs formats d’images pour qu’en fonction du navigateur, le
format le plus léger qu’il supporte soit utilisé.
L’hébergement sur une plateforme vidéo Exemple :
Héberger ses vidéos sur une plateforme dédiée de type
Youtube est la solution la plus courante et la plus simple à <a href=”[Link]
votre disposition. Si vous possédez un compte chez l’une <picture>
d’elles, il est assez aisé d’intégrer ces vidéos sur votre site <source srcset=”images/[Link]” type=”image/avif”>
internet. Certains points de vigilance méritent toutefois d’être <source srcset=”images/[Link]” type=”image/webp”>
soulevés : <img src=”images/[Link]” alt=”vidéo d’escalade” loading
• Les plateformes de streaming vidéo recompressent systé- =”lazy”>
matiquement les vidéos, principalement dans l’objectif </picture>
d’en limiter le poids. Il se trouve que si vous avez déjà fait </a>
le nécessaire pour livrer un fichier optimisé, la vidéo mise
en ligne par la plateforme sera très probablement plus lour- Conclusion
de que le fichier qui a été uploadé. Si la vidéo a bénéficié La mise à disposition raisonnée de vidéos sobres et bien inté-
d’une direction artistique favorisant la compression (aplats grées est à ce jour l’un des leviers logiciels les plus impactants
de couleurs, mouvements de translation et rotation essen- en termes de sobriété numérique proposé par le Green IT. Il
tiellement), cela n’aura que peu d’impact sur le point final reste aussi l’un des plus souvent mis de côté tant il est plus
du fichier diffusé, mais tout le travail effectué sur la com- facile et plus rapide de se reposer sur les solutions les plus
pression par vos soins sera perdu. populaires du marché. Loin de nous décourager, il est urgent
• L’intégration du plugin Youtube dans votre page web (via le de nous retrousser les manches pour imposer une cure de
code d’intégration fourni par Youtube) pour lire la vidéo a sobriété aux usages de la vidéo en ligne dont la croissance
pour conséquence d’augmenter la quantité de données comme les impacts environnementaux suivent une dange-
nécessaires à lire votre vidéo et le poids de votre page d’en- reuse exponentielle !
viron 600 Ko. Si les actions individuelles à entreprendre pour limiter les
• Le code d’intégration du lecteur Youtube intègre de nom- externalités négatives de la vidéo en ligne sont dorénavant
breux trackers qui posent question du point de vue RGPD connues, elles ne sauraient se substituer à une remise en
à cause des fuites de données constatées (Pour en savoir question profonde des usages ni à une action des pouvoirs
plus, consultez l’article de Greenspector: [Link] publics par la création de normes techniques encadrant les
.com/fr/service-tiers-youtube/) procédés de diffusion à grande échelle.
26 [Link]
WebP : un format optimisé
Sur un site web, les images constituent un des problèmes récurrents quand on veut
optimiser et faire de l’écoconception efficace. Les images sont parmi les pires contenus
pour un site web ou des apps. Traditionnellement, nous utilisons surtout les formats François Tonic
Rédacteur en chef de
JPEG et plus récemment PNG ou SVG. Le format WebP est un format poussé par Programmez !
Google depuis plusieurs années.
WebP signifie Web Picture ou Web Photo. Il a l’avantage d’être
plus léger que les JPEG et PNG. Cela permet donc d’alléger les
LES OPTIONS POSSIBLES EN CONVERSION WEBP
Compression avec perte : la compression avec perte est basée sur l’encodage d’images
assets techniques côté serveur, de réduire les trafics réseau et
clés VP8. VP8 est un format de compression vidéo créé par On2 Technologies qui succède
d’optimiser l’affichage côté front (navigateur). Aujourd’hui, aux formats VP6 et VP7.
tous les principaux navigateurs le supportent. Safari a été un Compression sans perte : le format de compression sans perte est développé par l’équipe WebP.
des derniers. L’argument de Google est limpide : Transparence : la version alpha 8 bits est utile pour les images graphiques. La version
-26 % en moyenne pour une image WebP par rapport à une alpha peut être utilisée avec le mode RVB avec perte, qui n’est actuellement disponible dans
image PNG aucun autre format.
-25 à -34 % par rapport à une image JPEG Animation : accepte les images animées de couleur réelle.
Support de la transparence : point important du PNG par Métadonnées : elles peuvent contenir des métadonnées EXIF et SECONDE (utilisées par
exemple avec 22% d’octets supplémentaires, c’est une ques- les caméras, par exemple).
tion d’équilibre sur ce point sensible. Profil de couleur : il peut s’agir d’un profil ICC intégré.
Pour obtenir cette optimisation, WebP avec perte repose un
encodage prédictif qui réduit le nombre de pixels. Google uti- • La compression sans perte. Une image peut être com-
lise le même principe que pour les vidéos VP8. « Le code pressée sans perte à l’aide du format sans perte WebP.
prédictif utilise les valeurs des blocs de pixels voisins pour pré- • Métadonnées. Les métadonnées d’une image peuvent
dire les valeurs d’un bloc, puis encode uniquement la être stockées au format Exif ou XMP.
différence. • Transparence. Une image peut être transparente, c’est-à-
Basiquement, un fichier WebP contient des données image dire qu’il s’agit d’un canal alpha.
VP8 ou VP8L et un RIFF. • Profil de couleur. Une image peut avoir un profil ICC intégré.
Nous avons fait un test très simple avec un image provenant • Animation. Une image peut comporter plusieurs images
d’un iPhone dernière génération : avec des pauses entre elles, ce qui en fait une animation.
[Link] 27
ecoCode : réduisez la dette
environnementale de vos apps !
Geoffrey Lalloué
Co-fondateur projet « Si les usages numériques se poursuivent au rythme actuel, l’empreinte carbone du
ecoCode, Team member
collectif Green Code
numérique en France pourrait augmenter de 45% en 10 ans » [2]. Dans le contexte du
Initiative changement climatique, le numérique semble représenter une faible part comparée aux
secteurs du transport ou encore de l’industrie. Mais cela pourrait représenter jusqu’à 25
millions de tonnes équivalent CO2 d’ici 2030. Comment agir en tant que développeur
pour améliorer les choses ?
Le projet ecoCode propose une solution permettant de store. Le marché du logiciel est déjà énorme et ne fait que
répondre à cette question via la sensibilisation, l’information croître avec les années.
et la remontée d’indicateurs liés directement au code réalisé ! Sur le web : figure 1 - Sources : [3]
Et sur mobile : figure 2 - Sources : [4] [5] [6]
L’ébriété du numérique en quelques
chiffres Qui est impliqué ?
Afin de comprendre le poids des applications développées sur On le sait, l’utilisation des applications web ou mobiles a un
l’empreinte environnementale, il est nécessaire de com- impact environnemental ! Et si l’on souhaite réduire cet
prendre l’impact qu’une seule mauvaise pratique de code impact, tous les acteurs doivent agir :
pourrait avoir si elle était répliquée sur un panel important
Figure 1 des sites web et applications en ligne sur internet ou sur un Les consommateurs :
Par la mise en pratique d’éco-gestes pour limiter leur
empreinte : acheter reconditionné, limiter leur temps
d’écran, activer le mode économie d’énergie…
Les fabricants :
Par l’utilisation de moins de ressources non renouvelables,
une meilleure réparabilité des produits réalisés, le développe-
ment de nouvelles batteries possédant une autonomie plus
Figure 2 longue, en utilisant de nouveaux matériaux (recyclables, per-
mettant de remplacer les produits polluants dans le stockage
de l'énergie, comme par exemple le graphène), en proposant
de nouveaux indicateurs (indice de réparabilité, eco-rating),
ainsi qu’en optimisant les OS pour une utilisation de l’énergie
plus raisonnée…
28 [Link]
A noter également que le matériel est « piloté » par le logiciel.
Donc la consommation d’énergie des appareils est souvent
corrélée à l’usage des applications, qui sont également les
garantes de l’usure prématurée ou non de l’appareil sur
lequel elles s’exécutent.
Exemple concret :
Considérons un smartphone moyenne gamme doté d’une
batterie de 3,6V et d’une capacité de 3000mAh, qui
consomme toute sa batterie chaque jour. Sa consommation
Figure 4
d’énergie journalière est donc de 3Ah x 3,6V = 10Wh, et au Le « code Smell » est un motif de code qui suggère qu’il pour-
bout d’un an, de 3,65kWh. rait y avoir une meilleure façon d’écrire ce code, ou qu’il
Avec 6,3 milliards de smartphones actifs dans le monde, la pourrait y avoir un problème sur ce code.
consommation annuelle atteint 23 Térawatt-heure [TWh] Ce n’est pas un bug, le programme continue de fonctionner.
• Cela représente la consommation annuelle en électricité Mais ce code contribue à la dette technique de l’application.
d’un pays comme l’Islande (18 TWh en 2019 [7]) Le projet ecoCode propose alors d’adapter ce concept à l’ef-
• L’utilisation de nos smartphones conduit donc à une utilisa- ficience énergétique et à l’identification de la « dette environ-
tion énergétique de l’ordre de grandeur d’un pays développé nementale » d’une application.
Il reste un acteur du changement qui n’a pas encore été L’analyseur de code
mentionné : le législateur ! Afin de capter ces « code smells » au sein du code d’un pro-
Depuis plusieurs années, plusieurs lois votées vont également jet, il est nécessaire de s’appuyer sur un analyseur de code.
dans le sens d’imposer la conception numérique responsable Le projet ecoCode s’est naturellement orienté vers la solution
des logiciels. SonarQube, outils de qualimétrie de code le plus populaire
En 2021, le décret d’application de la loi visant à réduire du moment sur le marché.
l’empreinte environnementale du numérique (REEN) en ecoCode se présente comme une « collection » de plugins
France indique que les acteurs du numérique doivent garder pouvant être installés sur une instance SonarQube existante.
à l’esprit que les applications conçues « ont une empreinte L’analyse exécutée est une analyse statique de code source :
écologique ». le programme n’est jamais exécuté.
« Les mesures relatives à l’écoconception des services numé- Ce procédé permet de ne pas dépendre de la taille, de la
riques sont très faibles aujourd’hui. Quand on est formé au catégorie ou des fonctionnalités de l’application étudiée. Les
développement, on est un peu sensibilisé à « l’écologie du fichiers sont considérés comme des fichiers de code à plat,
code » ; il est nécessaire d’avancer sur ce sujet-là » scannés et vérifiés par le plugin intégré à SonarQube.
Cédric O. secrétaire d’état chargé de la transition numérique SonarQube a également l’avantage d’être facilement inté-
et des communications électroniques (décembre 2020) grable à un pipeline CI/CD permettant l’automatisation du
Pour répondre à ce décret, plusieurs leviers d’actions peuvent scan et la simplification des remontées d’informations.
être envisagés : Pour « scanner » le code, l’analyseur de SonarQube ne traite
• Le « dégraissage » des fonctionnalités des applications afin pas les fichiers de code comme du texte (tel qu’on peut le lire
d’éviter le syndrome de l’obésiciel [8]. quand nous programmons).
• L’amélioration de la qualité du code des applications Il représente le code sous forme d’arbre aussi appelé
Il est donc évident qu’en tant que développeur, nous avons « Abstract Syntax Tree (AST) ».
les moyens d’agir. Encore faut-il pouvoir les identifier ! Ce découpage du code en nœuds d’un arbre permet de par-
ser et d’analyser le contenu d’un fichier simplement et d’en
Rétrospective du projet ecoCode extraire des éléments, ce qui est tout à fait adapté à la défi-
Le projet ecoCode a justement été pensé pour « identifier » nition de code smells.
ces améliorations du code. Par exemple, le code suivant serait représenté de cette façon
En 2020, le sujet de l’ « éco-conception » associé au numé- (de manière synthétique) en AST : figure 4
rique commence à faire un peu plus de bruit. Quelques orga- Une contrainte du projet ecoCode est d’avoir accès à ces
nismes proposent des formations sur le sujet et certaines AST. En effet, certains AST ne sont pas ouverts par l’API de
entreprises entrevoient une nouvelle manière d’aborder le SonarQube.
problème du changement climatique à leur échelle. Exemple : l’AST Java est ouvert mais l’AST Kotlin ne l’est pas.
L’industrie du numérique apparaît alors comme une industrie
lourde et doit se mettre en ordre de marche vers la sobriété Les plugins disponibles
numérique. Pour chaque AST disponible, ecoCode a défini un nouveau
Certains acteurs et entreprises commencent alors à réfléchir plugin. Ainsi, le projet propose à ce jour les plugins suivants :
à l’impact du développement logiciel sur les émissions de • Java
GES. Ces acteurs créent alors le projet « ecoCode » propo- • PHP
sant une analyse de code statique en se basant sur le concept • Python
du « code smell ». • Javascript
[Link] 29
• Android (java, xml, groovy) Le code smell par l’exemple
• iOS (swift, xml) Voici quelques exemples de code smells intégrés aux plugins
Un plugin définit une liste de « code smells » scannés et véri- d’ecoCode :
fiés sur le code sur lequel il est appliqué. Les « Wake locks » sur Android : Un « wake lock » sur
Android est un mécanisme qui indique que votre application
Définition des « code smells » a besoin que l’appareil reste allumé. Le principe général est
Les « code smells » sont souvent associés à de mauvaises pra- d’obtenir un « wake lock », de l’acquérir et enfin de le libérer.
tiques de conception logicielle qui conduisent à l’apparition Le défi consiste donc à libérer le verrou le plus rapidement
de défauts. possible afin d’éviter d’épuiser la batterie de l’appareil de
Ces pratiques ont des conséquences sur la maintenabilité, les manière excessive. L’absence d’appel à la méthode :
performances ou la consommation énergétique.
ecoCode s’appuie sur plusieurs référentiels de bonnes (ou PowerManager#release()
mauvaises) pratiques afin de cibler les analyses de code et
remonter ces « code smells ». est une vérification intégrée à Android lint (vérification
Afin que les remontées soient les plus pertinentes possibles, Wakelock), mais cela n’empêche pas l’utilisation abusive du
les règles sont sélectionnées d’après les critères suivants : verrou sur une période trop longue. Ceci peut être évité par
• La règle fait partie d’un référentiel validé par une commu- un appel à :
nauté d’experts
• ET/OU l’application de cette règle est mesurable et son [Link]#acquire(long timeout)
impact est avéré
• ET/OU la règle a été identifiée et décrite selon un protocole au lieu de :
scientifique reconnu
Les référentiels sur lesquels s’appuie ecoCode à ce jour sont [Link]#acquire()
les suivants :
• Écoconception web : les 115 bonnes pratiques [9] car le verrou sera libéré à coup sûr après l’expiration du
• GR491, le guide de référence de conception responsable timeout donné.
de services numériques [10]
• Référentiel général d’écoconception de services numé- Ref : Energy Smells for android [12]
riques (RGESN) [11]
• Mobile-specific Best Practices for Sustainable Software [12] La requête SQL à l’intérieur d’une boucle : Les serveurs de
La liste des règles extraites des référentiels existants, addi- base de données sont optimisés pour traiter plusieurs sélec-
tionnées aux règles spécifiques définies par le projet ecoCode tions, insertions ou modifications dans une seule requête ou
permet de constituer la base de règle ecoCode intégrée dans une seule transaction. Mal utilisées, ces requêtes consom-
SonarQube via les plugins. ment inutilement des cycles CPU, de la mémoire vive et de la
Exemple de « code smells » Java remontés par le plugin bande passante, d’autant plus si le serveur SQL ne se trouve
ecoCode dans SonarQube : figure 5 pas sur la machine locale d’exécution du code.
Certaines règles liées notamment aux performances font Ne pas écrire :
déjà partie des règles « natives » renseignées dans
SonarQube. Ces règles ont également été identifiées comme foreach ($userList as $user) {
ayant un impact environnemental sur l’application qui les uti- $query = ‘INSERT INTO users (first_name,last_name) VALUES(“‘. $user
liserait. Ces règles existantes sont alors tagguées « eco-desi- [‘first_name’] .’”, “‘. $user[‘last_ name’] .’”)’;
gn » afin de ne pas dupliquer l’analyse et remonter dans les mysql_query($query);
résultats. }
$userData = array();
foreach ($userList as $user) {
$userData[] = ‘(“‘. $user[‘first_name’] .’”, “‘.
$user[‘last_name’] .’”)’;
}
$query = ‘INSERT INTO users (first_name,last_name) VALUES’. implode
(‘,’, $userData); mysql_query($query);
30 [Link]
La communauté ecoCode
Le projet ecoCode a fait le choix en 2023 de rejoindre le
Green Code Initiative.
Ce collectif promeut les pratiques de green coding et le par-
tage de connaissances autour d’un développement plus res-
ponsable, à destination des équipes de développement logi-
ciel.
À ce jour, le projet a été développé par une quarantaine de
contributeurs, soutenu par un grand nombre d’entreprises du
numérique et sponsorisé par certaines entreprises utilisa-
trices.
Ce qui a permis de coorganiser l’événement annuel
« ecoCode challenge » en partenariat avec le Crédit Agricole.
Ce challenge, déjà récompensé du prix « Netexplo Figure 6
Change 2022 » [14], regroupe chaque année entre 60 et
100 développeurs autour d’un seul objectif : améliorer, par-
tager et promouvoir les outils autour du projet ecoCode.
Références :
[1] L’empreinte environnementale du numérique | Arcep
[2] L’Ademe et l’Arcep publient leur rapport sur l’impact environnemental du numérique en France - ChannelNews
[3] Internet : Statistiques et Chiffres Clés (2023) ([Link])
[4] Mobile App Download Statistics & Usage Statistics (2023) - BuildFire
[5] Annual number of mobile app downloads worldwide 2022 | Statista
[6] L’homme passe près de cinq heures par jour sur son mobile ([Link])
[7] Electric energy consumption - Wikipedia
[8] Le syndrome de l’obésiciel : des applications énergivores - Interstices
[9] cnumr/best-practices : 115 Web Ecodesign Best Practices ([Link])
[10] GR491, Le Guide de Référence de Conception Responsable de Services Numériques | INR ([Link])
[11] Référentiel général d’écoconception de services numériques (RGESN) - Numérique écoresponsable ([Link])
[12] cnumr/best-practices-mobile : Mobile Ecodesign Best Practices (for developers) ([Link])
[13] best-practices/BP_072_fr.md at main · cnumr/best-practices ([Link])
[14] ecoCode Challenge : le Groupe Crédit Agricole lauréat du Prix Netexplo ([Link])
[15] green-code-initiative/ecoCode : Reduce the environmental footprint of your software programs with SonarQube ([Link])
1 an de
L e m a g a z i n e d e s d é v s
ABONNEMENT PDF : 45 €
Abonnez-vous directement sur [Link]
[Link] 31
OVHcloud : optimiser et réutiliser
OVHcloud est un acteur historique de l’hébergement et du cloud. Pour proposer ces ser-
vices, il faut disposer de datacenters, le dernier ouvert l’a été en Inde. Qui dit datacenter
François Tonic
Rédacteur en chef de
dit des milliers de baies et des dizaines de milliers de serveurs. Savez-vous que OVH-
Programmez ! cloud crée ses propres designs et cherche à optimiser la chaîne de fabrication, à rac-
courcir les transports, tout en misant sur la réutilisation de composants ?
32 [Link]
s’ils sont validés, ils partent sur les ateliers de montage.
OVHcloud participe aussi à un programme de récupération
et de traitement de certains composants (ex. : les cartes
mères, certains câbles) pour récupérer des terres rares, l’or
des connecteurs ou le cuivre. À ce jour, le fournisseur a fourni
plus de 400 kg de cartes mères.
Les économies en réutilisant des composants se comptent en
plusieurs millions €. Environ 36 % des serveurs sortant de
Croix utilisent au moins un élément recyclé.
AVEC 1 an ........ 55 €
1 an ........ 45 €
2 ans ........ 90 €
Abonnez-vous sur :
[Link] Voir page 42
[Link] 33
Les générateurs de site statique :
un allié de l’éco-conception
Bastien Wirtz
DevOps engineer dans
l’équipe database chez
Le poids moyen d’une page web a augmenté de 191% en 10 ans(1) ! Une tendance qui
Scaleway participe à l’augmentation de l’empreinte environnementale liée au web. En moyenne,
une page web génère 0.5g de CO2 par visite(2) (60 kg par an au rythme de 10000 visites
par mois). La technologie et l’approche de la conception de site web a beaucoup évolué,
mais cette évolution est-elle nécessaire, ou seulement synonyme de surpoids ? Imagi-
nez qu’on puisse obtenir les mêmes sites, beaucoup plus légers, rapides et sécurisés !
La conception d’un site web rime souvent avec CMS. Simples fréquence de sollicitation de ces ressources, avec un système
à utiliser, ils ont rendu la réalisation de site web plus rapide et de cache par exemple, mais elles resteront allouées et à
plus accessible, mais nous le verrons, à un certain prix. Il disposition. De l’autre côté, le générateur de sites statiques
existe d’autres options intéressantes, parmi lesquelles : les est séparé du site en lui-même et n’est utilisé que pour
générateurs de sites statiques. Ils présentent de nombreux construire le site. Il n’a pas besoin d’être installé sur
avantages, en termes d’impact environnemental, mais pas l’hébergement. Voici le principe:
seulement. −> Consultation. Figure 2
• L’utilisateur consulte une page.
Le fonctionnement • Le serveur web renvoie le contenu.
Quel que soit l’outil utilisé, un −> Ajout / édition de contenu. Figure 3
site web c’est avant tout du • L’utilisateur saisit le contenu souhaité (différentes
HTML. Ni plus ni moins (bon je possibilités, nous y reviendrons).
vous l’accorde, on va probable- • Le site est régénéré avec le nouveau contenu.
ment y mettre un peu de CSS • Le site est redéployé sur le serveur web.
et de JavaScript, mais l’idée est Le HTML est généré une seule fois lors de la modification de
là). Un CMS et un générateur contenu, et non plus à chaque visite. L’économie des étapes
de sites statiques partagent le de traitement serveur à chaque consultation entraîne une
même but : générer facilement réduction notable de l’utilisation des ressources. De l’autre
ce HTML à partir de vos conte- côté, une modification de contenu engendre la nécessité de
nus (articles, photos, billets de réaliser une “mise en production” du site. Heureusement, ce
blog…) processus peut être automatisé et transparent, accessible à
Commençons par revoir une personne non technique. La modification des contenus
Figure 1
rapidement l’approche “classique” ayant généralement lieu beaucoup moins fréquemment que
d’un CMS. Prenons WordPress (le choix d’un peu plus de la consultation, la génération du HTML est donc réalisée
40% des sites). Il est nécessaire de l’installer sur un moins souvent. Cependant le contenu n’est pas
hébergement disposant de PHP ainsi que d’une base de instantanément disponible (même si ça peut être très rapide).
données MySQL ou MariaDB. Le principe est le suivant :
−>Consultation. Figure 1 Le contenu
• L’utilisateur consulte une page. Un CMS offre une interface simple pour saisir le contenu. Le
• Le serveur web relaie la demande au moteur PHP. plus souvent le générateur de sites quant à lui, va proposer…
Figure 2
• Le moteur PHP consulte la base de données pour une multitude de possibilités ! Un certain nombre de sources
récupérer les données demandées (article, blog…) et de données peut être utilisé pour alimenter le générateur, de
génère le HTML. simples fichiers texte (éditable avec l’outil de votre choix)
• Le serveur web renvoie le contenu. au… CMS ! En effet, un CMS peut être utilisé pour la saisie
−>Ajout / édition de contenu des données, et certains d’entre eux sont optimisés et
• L’utilisateur se rend sur le site d’administration et saisit le spécialisés pour les générateurs de sites statiques (souvent
contenu via l’interface web. appelés “headless CMS”). Il existe même des solutions très
• Le contenu est tout de suite disponible pour la consultation. intéressantes qui proposent toute la simplicité de l’interface
À chaque consultation d’une page, les ressources serveur d’un CMS tout en reposant sur de simples fichiers textes
(PHP & Mysql en particulier) sont sollicitées pour générer le (pour n’en citer qu’un: [Link]
HTML à la volée. Cela apporte une immense flexibilité: les Le générateur n’impose pas de format spécifique : le contenu
pages sont dynamiques, et toute modification de contenu se trouve en quelque sorte découplé du site, et peut être
Figure 3 sera instantanément disponible. Il est possible de réduire la utilisé avec un autre système ou dans un tout autre contexte.
34 [Link]
Et mon formulaire de contact, dans JavaScript comme peuvent l’être certains autres générateurs
tout ça ? de sites statiques. Parmi les critères de choix, on peut
Générer du HTML statique, c’est chouette, mais comment également considérer le langage utilisé par le générateur.
gérer les besoins de traitement de données ? (formulaire, Toutes les étapes sont réalisées manuellement dans le cadre
commentaire sur les articles…). Un site statique ne sera pas de notre test, mais un site en production réalisera les
capable de réaliser de telles opérations de lui-même, mais il opérations récurrentes de manière automatique et
lui est possible de communiquer et d’interagir avec d’autres transparente.
services (via des API par exemple). Il faudra être vigilant vis-
à-vis des solutions envisagées et s’assurer qu’elles soient Installation
compatibles avec une approche d’éco-conception. Hugo est constitué d’un binaire, disponible à l’installation sur
L’utilisation de fonctions serverless pour prendre en charge la plupart des systèmes d’exploitation via votre gestionnaire
vos besoins est adaptée. de paquet habituel. Dans le cas contraire, il peut être
téléchargé depuis GitHub:
Une très bonne base d’éco conception $ wget -qO- [Link]
On constate donc que dans le cas du site statique, la
111.3/hugo_0.111.3_Linux-[Link] | tar -xz
consultation du site ne nécessite aucune opération
$ hugo version
particulière du serveur qui va délivrer le HTML déjà prêt. On
hugo v0.111.3-5d4eb5154e1fed125ca8e9b5a0315c4180dab192 linux/
consomme donc moins de ressources. De plus, là où un CMS
amd64 BuildDate=2023-03-12T[Link]Z VendorInfo=gohugoio
embarque souvent le plus de choses possible pour assurer
une flexibilité maximum (les librairies et le code pour tous les La commande hugo permet non seulement de générer notre
usages possibles, un “second site” d’administration…), le site résultat en HTML, mais elle va aussi nous aider à préparer
statique embarque uniquement ce qui est nécessaire. notre site.
Cette approche présente de nombreux autres avantages :
Sécurité. En l’absence de code côté serveur, les possibilités Création du site
de failles de sécurité sont drastiquement réduites. Les commandes suivantes vont permettre de créer la
Maintenance. Le site ne nécessite aucune mise à jour une structure de base de notre site et installer un thème (cf:
fois en place. Peu de choses côté serveur web non plus, pas [Link]
de version de PHP ou autre moteur à maintenir.
$ hugo new site demo
Performances & scalabilité. Le HTML étant généré en
$ cd demo
avance et non pas à la volée, la performance est au rendez-
$ mkdir themes/ananke
vous. La simplicité de l’hébergement en fait un système facile
$ wget -qO- [Link]
à adapter aux fortes charges.
archive/refs/tags/[Link] | tar -xz —strip-components=1 -C ./
Hébergement. Les besoins côté serveur étant quasi
themes/ananke
inexistants, il existe de nombreuses solutions peu coûteuses
(voire gratuites) et performantes. Nous allons éditer le fichier [Link] qui va nous permettre
Il est bien sûr possible d’optimiser un site construit à l’aide de saisir les informations de base de notre site, comme le titre
d’un CMS pour le rendre plus efficace ou de surcharger un et le thème choisi:
site statique ! Cette solution est un outil, et ce qu’il apportera
title = ‘My New Hugo Site’
en matière de réduction d’impact environnemental dépend
theme = ‘ananke’
de vous !
Il est désormais possible d’obtenir un aperçu du site !
Less is more $ hugo server
Un CMS constitue un outil clef en main, disposant d’un
[...]
écosystème immense et d’un système de plug-ins qui permet
Web Server is available at //localhost:1313/ (bind address [Link])
d’adresser la plupart des besoins en quelques clics. Du côté du
générateur de site statique, s’il n’y a techniquement pas vraiment Rendez-vous sur l’adresse indiquée pour voir le résultat. Le
de limitation, la mise en place de fonctionnalités site est minimaliste, mais ça suffira pour un premier test.
supplémentaires demandera souvent de mettre la main à la pâte. Cette commande très pratique va simuler un serveur web et
Néanmoins, cet effort supplémentaire amène une vraie va automatiquement générer le HTML dès qu’une
réflexion sur les besoins et la pertinence de certaines modification est apportée. Nous pouvons la laisser
fonctionnalités, qu’on a tendance à oublier quand il suffit fonctionner pour la suite.
d’appuyer sur un bouton pour surcharger de fonctionnalités
inutilisées ajouter des fonctionnalités. Cet effort s’inscrit dans Ajoutons du contenu
une démarche d’éco-conception et de sobriété et le résultat Pour notre test nous utiliserons la source de données par
n’en sera que meilleur. défaut de Hugo : de simples fichiers textes au format
Markdown.
Mise en place $ hugo new posts/[Link]
Nous choisirons la solution Hugo ([Link] pour notre
PoC. Il est très populaire et n’est pas lié à un framework
[Link] 35
Un nouveau fichier est créé dans le répertoire content/posts, loin d’être représentatif d’un site complet, et d’autre part une
ouvrons-le afin d’y ajouter un peu de contenu : comparaison avec WordPress nécessiterait de réaliser 2 sites
complets et identiques, ce qui dépasse un peu le cadre de cet
—-
article.
title: “Hello World”
Toutefois, nous pouvons faire quelques constatations, en
date: 2023-03-19T[Link]+01:00
gardant en tête les limitations de l’exercice. J’ai déployé notre
draft: false
site Hugo (non minifié) aux côtés d’un site WordPress sans
—-
aucune customisation, thème par défaut, avec un article
“hello world” (le résultat est une page quasi vide, très
Un article super écolo !
similaire à notre test).
Le fichier contient déjà quelques lignes : il s’agit des L’outil GreenIT-Analysis ([Link]
informations non visibles dans le contenu qui seront nous donne les résultats suivants :
interprétées lors de la génération du site. Nous allons juste
modifier la dernière ligne pour indiquer à Hugo que notre Hugo WordPress Wordpress admin
article n’est plus à l’état de brouillon, afin qu’il soit publié et Taille totale
0,63 Mo 71 Mo
accessible. Il existe d’autres options que vous retrouverez (code source)
Taille de la page 4 ko 96 ko 1876 ko
dans la documentation. Ce système de métadonnées est
Nombre
appelé FrontMatter. Nous pouvons ensuite saisir le contenu à 2 6 49
de requêtes
la suite dans le fichier. Taille du DOM 50 100 833
Si vous avez laissé votre serveur hugo en marche, vous EcoScore A A D
pouvez voir qu’un article est apparu et qu’il est possible de le
consulter ! Il peut être intéressant de garder vos fichiers de A contenu similaire, le HTML généré par Hugo est environ
contenu dans un système de gestion de version tel que git, x24 moins lourd. Pour des données un peu plus
qui fournira un historique des modifications de contenu. représentatives du monde réel, le site [Link]
Si le mécanisme de contribution est de base un peu regorge de statistique, notamment en rapport avec
technique, il est tout à fait possible de mettre en place une l’utilisation des sites statiques ([Link]
solution graphique simple et pratique pour le rendre 2022/sustainability#popular-frameworks-platforms-and-cmss)
accessible à des personnes non techniques.
Conclusion
Génération du site Les sites web évoluent et nous rendent de plus en plus de
Nous sommes maintenant prêts à procéder à la génération services, ce qui peut parfois nécessiter plus de ressources
du site ! Il suffit d’utiliser la commande suivante : pour les réaliser. Mais sont-ils plus utiles ? Au-delà des
besoins techniques, c’est notre façon de concevoir les sites
$ hugo –-minify
qui a/doit évolué(er). Il est aujourd’hui plus simple que jamais
L’option —minify permet d’optimiser la taille des pages. Le de réaliser un site, mais cette flexibilité a un prix.
résultat se trouve dans le répertoire public/. Les fichiers Le site statique n’offre pas une solution clef en main
Markdown ont disparu au profit de fichiers HTML. Le site est complète, mais elle est modulaire, ouverte et extensible.
prêt à être publié. Cette approche a le potentiel de couvrir la plupart de nos
besoins tout en réduisant significativement l’impact
Publication environnemental, à condition à repenser la façon de
Pour mettre en ligne, il suffit de copier le contenu du concevoir le site ainsi que son administration.
répertoire public sur un serveur web. Réaliser un site en éco-conception, c’est avant tout réaliser
Nos besoins sont si minimaux que n’importe quel espace un site bien conçu, optimisé, respectant les bonnes pratiques
d’hébergement ferait l’affaire… Même sur un bucket S3 : du domaine. N’hésitez pas à consulter le référentiel d’éco-
[Link] conception des services numériques mis à disposition par le
website/ ! gouvernement; [Link]
La publication du site est nécessaire après chaque referentiel-general-ecoconception/ . Pour moi, les efforts supplémentaires
modification de contenus pour les rendre disponibles aux en valent largement la chandelle.
visiteurs. Si vous utilisez un outil comme Gitlab ou GitHub,
une solution simple est d’utiliser l’intégration continue pour Source : [Link]
déclencher la publication après un push sur le repository du Source : [Link]
site.
36 [Link]
L’alliance entre UX et écologie :
le Green UX !
Si vous lisez cet article, c’est que vous êtes (très probablement) concepteur de services Isabelle
Macaire Ferry
numériques, vous avez donc un rôle à jouer. Ceci est vrai, quel que soit le profil au sein Product designer chez
d’une équipe de réalisation. Dans les rôles usuels, les développeurs vont pouvoir réali- Zenika, consultante en
accessibilité et éco-
ser les choix techniques nécessaires pour minimiser les impacts matériels et optimiser conception.
les ressources générées par le produit. Le product owner choisit les fonctionnalités les
plus importantes pour le business et les utilisateurs. Mais l’utilisabilité n’est pas tou-
jours bien maîtrisée. C’est là que les designers UX apportent leur savoir-faire.
Le rôle du designer UX est d’accompagner le product owner compétence. Ainsi, l’illectronisme, ou illettrisme numérique
sur l’usage, par exemple en questionnant le choix des concerne 17 % de la population ».
fonctionnalités ou leur enchaînement, et les contenus (choix
des médias, mobile first, contenus accessibles, etc.). Son rôle D’après l’enquête Handicap-Santé de 2008-2009(1) :
s’attache surtout à améliorer l’expérience utilisateur (User La France comptait 2,5 millions de personnes
eXperience, ou UX). Son objectif est la qualité de handicapées de 16 à 59 ans et 1,3 million de 60 ans et
l’expérience utilisateur vécue. Sa démarche est centrée sur plus, en tant que personne reconnue par
les besoins utilisateurs. l’administration comme ayant un handicap, une
Sa mission est aussi de dialoguer avec les développeurs pour invalidité ou une perte d’autonomie ;L’ensemble des
s’assurer que les choix techniques vont être alignés avec les personnes déclarant de fortes difficultés ou une
besoins utilisateurs et surtout que les impacts de ces choix impossibilité dans une dimension fonctionnelle, c’est-à-
sont maîtrisés. Par exemple, le mode sombre est souvent dire voir, entendre, se déplacer, etc. : on peut compter
proposé par les développeurs pour des raisons d’économie 4,8 millions de personnes handicapées de 16 à 59 ans ;
d’énergie. Il s’avère que son intérêt, même s’il permet à partir de 60 ans et plus, le chiffre passe à 5,4 millions.
d’économiser la batterie d’un téléphone, est plutôt d’ordre du
confort visuel. Les enjeux sont ailleurs. Si on veut réellement Il est important de garder à l’esprit qu’il existe de nombreuses
réduire les impacts environnementaux d’un service formes de handicap et qu’une partie de la population a un
numérique, il faut s’attaquer au parcours utilisateur pour le accès limité au numérique. Prendre en compte ces éléments
rendre le plus efficient possible et proposer une expérience est un pilier de l’écoconception. Nous devons veiller, en tant
globale satisfaisante et éco-responsable. Pour cela, il y a des que concepteur, à créer/optimiser des produits et services
critères à définir et un suivi à mettre en place avec les légers afin de ne pas inciter les utilisateurs à renouveler leur
développeurs qui sauront utiliser les outils adéquats. équipement. Il faut savoir que c’est le matériel qui concentre
Le travail du designer UX s’applique aux produits, mais aussi le plus fort impact environnemental du numérique.
aux services et à l’ensemble de l’organisation autour, par En matière d’accessibilité, il existe en France le RGAA(2) et
exemple en repensant les lieux de travail, les déplacements, à l’international le WCAG(3) qui sont deux bonnes bases de
et le numérique dans une approche plus globale. Ses réflexion et d’application pour la mise en conformité des
méthodologies de conception vont permettre d’aligner les sites. ll est indispensable de se référer aux bonnes pratiques
besoins utilisateurs tout en gardant le focus sur les impacts et aux documents qui évoluent régulièrement.
en matière d’écoconception et même de conception
responsable. Élargir la démarche UX avec
des problématiques éco-responsables
L’accessibilité numérique, Une approche centrée utilisateur
un impératif de conception L’UX Designer a pour rôle de créer une expérience utilisateur
Une des premières étapes réalisées par un designer UX lors efficace et satisfaisante. Sa mission est de concevoir un
de son arrivée dans la conception d’un produit est de savoir produit/service utile, facile d’usage et qui offre une
à qui on s’adresse. En effet, le numérique permet de interaction plaisante. Il va travailler avec un processus itératif
nombreuses avancées technologiques, mais il peut aussi et qui se concrétise en trois grandes phases :
exclure de la société certaines catégories de personnes qui ne • L’analyse des attentes et besoins de l’utilisateur final pour déterminer
maîtrisent pas bien ces nouveaux outils. D’après l’étude de notamment les spécifications fonctionnelles de l’interface ;
l’INSEE de 20194, « 15 % des personnes de 15 ans ou plus • La conception, c’est-à-dire l’élaboration d’une maquette
n’ont pas utilisé Internet au cours de l’année, tandis que 38 % ou le prototypage ;
des usagers manquent d’au moins une compétence • L’évaluation, principalement avec des tests d’utilisabilité,
numérique de base et 2 % sont dépourvus de toute pour améliorer l’expérience utilisateur.
[Link] 37
Figure 1
les utilisateurs finaux. La recherche utilisateur est une phase
importante pour bien définir le contexte d’utilisation d’un
produit ou service. Par exemple, le parcours utilisateur peut
être représenté sous la forme d’un parcours client (customer
journey en anglais) qui s’attache à décrire les successions
d’étapes pour mener à bien son objectif en prenant en
compte le ressenti et les points de contact de l’utilisateur. Le
parcours utilisateur peut être aussi représenté sous une forme
graphique (user flow) qui mettra en avant les données et flux
qu’un utilisateur va utiliser sur une interface. La carte
d’expérience (ou experience map) est la synthèse visuelle de
l’expérience globale d’un utilisateur.
Pour chacun des livrables issus de la conception UX, il est
tout à fait possible d’ajouter des critères ou métriques éco-
responsables et de les suivre. Plus loin, nous allons voir
comment envisager une conception de services numériques
et comment définir ces critères, notamment avec les
Livre blanc l’écoconception des services numériques(5). questions de conception. Elles guideront l’équipe jusqu’à la
Alliance Green IT - février 2017 phase d’évaluation.
Par exemple, dans le customer journey, il est possible
d’ajouter la dimension éco-responsable. De la même
Ces 3 phases sont essentielles pour explorer, définir, évaluer manière, sur un user flow, le fait d’identifier les flux et les
un produit numérique. interactions permet de mettre en évidence les
La bonne collaboration entre PO et UX va être capitale pour problématiques matérielles. La dimension impact écologique
permettre d’aborder les sujets de manière optimale. La est alors une nouvelle préoccupation dans la conception.
combinaison des approches agiles et UX permet de bien Notre mission en tant que concepteur éco-responsable est de
évaluer l’intérêt des fonctionnalités, d’aborder les sujets en s’adresser à notre cible, de répondre aux besoins identifiés
mode MVP et d’itérer tout en prenant en compte les besoins tout en faisant travailler le moins possible le matériel et les
utilisateurs à travers une recherche précise sur la cible. terminaux (échanges client/serveur, CPU, consommation et
usure du matériel…). Il est capital de communiquer avec
L’écoconception toute l’équipe de conception pour identifier les leviers et outils
En écoconception de service numérique, il s’agit d’étudier de à mettre en place. Ainsi la démarche UX qui est exploratoire
manière conjointe, les leviers d’optimisation suivants, afin peut être élargie avec des critères éco-responsables.
d’améliorer la performance environnementale globale :
• Définition de la fonctionnalité, de l’usage, Mesurer l’impact avec l’unité
dimensionnement du service numérique et la sollicitation fonctionnelle
des équipements physiques associés Afin d’élaborer le parcours utilisateur, l’équipe va définir une
• Équipements (hardware) et des infrastructures physiques et ou plusieurs unité(s) fonctionnelle(s) selon l’ampleur du
virtuelles et dimensionnements projet. Il faut voir l’unité fonctionnelle comme la fonction
• Couche logicielle (software) principale, c’est-à-dire le cas d’usage sur lequel se
• Communication avec les parties prenantes. Figure 1 concentrer.
Exemple : notre persona X souhaite réserver un billet de train
Intégrer la dimension responsable dans la pour telle destination.
pratique UX L’UF doit répondre aux questions : “Quoi ? Combien ?
Tout d’abord, il est important d’avoir de bonnes Comment ? Combien de temps ? “
connaissances générales, les 115 bonnes pratiques Dans un cas simple ou complexe, c’est l’unité fonctionnelle
d’écoconception web(4) sont une bonne base. Elles qui sera la base du calcul de l’impact et de la réflexion pour
permettent de voir sur quels aspects les concepteurs vont l’amélioration.
pouvoir intervenir que cela soit pour le PO, l’UX et les Après avoir posé les problématiques de conception et
développeurs. Se l’approprier comme base de structuré les livrables UX, la phase de prototype peut
questionnement sur la conception est déjà une première commencer. Le produit commence à prendre forme et les
étape vers plus de sobriété numérique. Pour un service choix d’implémentation auront un impact conséquent s’ils ne
existant, ce travail permet de voir sur quels aspects il est sont pas éclairés par de bonnes connaissances en
possible de s’améliorer. Pour la conception d’un nouveau écoconception.
service ou produit, se poser les bonnes questions en amont
aura d’autant plus d’impact. Conception de services numériques et
Pendant la phase de découverte des besoins, l’UX va design
collecter de nombreuses données. La création des personae Concernant les questions relatives au design, le guide des
(avec la dimension accessibilité) permet de bien comprendre designers éthiques(6) est une très bonne base. Il aborde les
38 [Link]
questions d’éco-conception en tentant de faire le pont avec • Quelle est la durée de chargement maximale acceptable
l’accessibilité, l’économie de l’attention ou encore la pour mes utilisateurs ?
diversité. Ce guide est avant tout destiné aux UX et UI • Dans quelles conditions de connexion la majorité de mes
designers. Néanmoins, tout concepteur de service numérique utilisateurs accède à mon service ?
(chef de projet, développeur, product owner…) y trouvera Nous avons vu comment définir une unité fonctionnelle, elle
matière et conseils. servira de référence pour évaluer les impacts. Elle peut servir
Nous avons vu que le rôle de l’UX designer est de rationaliser aussi dans le cadre d’une Analyse de Cycle de Vie (ACV) qui
le nombre de fonctionnalités, de se concentrer sur les besoins est un dispositif d’évaluation international et normé (normes
utilisateurs finaux et de proposer un parcours utilisateur fluide ISO 14040/44). Elle est plus coûteuse, mais c’est l’outil le
afin de fournir la meilleure expérience possible. plus complet pour faire un bilan énergétique sur un produit.
Le designer UI a aussi un rôle à jouer, notamment pour créer
les éléments graphiques et rendre le service attractif pour “Cette approche dite «mobile first» doit être pensée pour
l’utilisateur. C’est à ce moment-là qu’il faudra communiquer des terminaux mobiles peu puissants et avec une
suffisamment avec les développeurs afin de faire des choix connexion réseau non optimale (3G plutôt que 4G par
techniques pertinents. Effectivement, les impacts peuvent exemple). Ces contraintes techniques obligeront les
être nombreux aussi à ce niveau-là (optimisation des concepteurs à se concentrer sur l’essentiel et à produire
contenus, des interactions, SEO, etc.). un service numérique sobre et peu impactant.”
Globalement, toute l’équipe pourra trouver matière à Livre blanc GreenConcept, 20206
réflexion dans le guide des designers éthiques(6), dont voici
un résumé pas du tout exhaustif. Enfin, concevoir un produit numérique responsable implique
de penser avec un état d’esprit “minimal” pour aller à
Au début de la conception l’essentiel. Dans cette optique, avoir une approche mobile
Après la définition des besoins, il est important de définir les first va favoriser l’économie de la fonctionnalité, rationaliser
critères sur lesquels seront mesurés et évalués le produit ou les contenus et anticiper les questions de compatibilité. Au
le service (voir quelques exemples ci-dessous). Même si cette sujet des applications (applications natives ou Web apps), les
étape peut prendre du temps, il faut l’envisager comme une questions de conception sont fondamentales puisqu’elles
intention de conception plus responsable. La mesure vont amener l’équipe à faire des choix techniques selon les
d’impact permet également de sensibiliser autour de soi, problématiques du projet.
notamment des décisionnaires sensibles aux indicateurs et
objectifs quantitatifs. Organiser l’implémentation
Une fois que les besoins et le parcours sont clairement
Mesurer et évaluer un produit (quelques exemples) définis, on peut passer à l’étape de réalisation et préparer les
Pour un nouveau service, il peut être intéressant de mesurer éléments et contenus (choix des polices, images, vidéo,
l’impact de l’expérience sur des sites équivalents (nombre d’uti- animations). Les choix d’implémentation doivent être bien
lisateurs, le matériel nécessaire et l’impact de votre service)
évalués entre bénéfice utilisateur et impact environnemental.
Pour un produit existant, évaluer l’impact environnemental En effet, certains choix peuvent avoir des conséquences
du parcours utilisateur et identifier ses axes d’amélioration et importantes, que ce soit pour l’accessibilité comme pour
les bonnes pratiques à mettre en place. l’éco-conception. Par exemple, l’emploi de vidéos en lecture
Quelle est la quantification minimale répondant aux besoins automatique va alourdir le site et proposer une expérience
des utilisateurs ? Nombre de résultats, résolution d’image, peu satisfaisante pour beaucoup d’utilisateurs. De plus c’est
qualité de son, durée de vidéo… un anti-pattern d’accessibilité, de plus en plus d’extensions
Établir un budget environnemental de navigateur Web bloquent la lecture automatique. Si le
message principal de la page passe par une image ou une
À cela, il est impératif de poser des questions de conception vidéo, comment l’expérience sera vécue par des utilisateurs
afin d’identifier les leviers pour réduire l’empreinte ayant des bloqueurs ou des connexions limitées ?
environnementale. De même, ces questions peuvent être Aussi, l’utilisation de cartes interactives ou de fils d’actualité
posées comme des impératifs de conception et imposer un intégrés sont gourmands en ressources. Il est important de se
cadre initial au projet. poser la question : cette fonctionnalité est-elle indispensable ?
Quelle serait la meilleure solution pour plus de sobriété ? Par
Exemples de questions de conception : exemple proposer un annuaire à la place d’une carte
• Quels effets négatifs pourrait générer une utilisation de interactive.
mon service à grande échelle Pour les contenus textes, il faut savoir qu’un site doit avoir un
• À quoi peut ressembler un “usage excessif “ du service ? niveau de lecture suffisamment simple pour être compris
Puis-je estimer quantitativement ce seuil ? pour toutes les catégories d’utilisateurs en matière
• Quels sont les risques d’effet rebond à l’usage du service ? d’accessibilité. La structuration de l’information doit être
• Quel est l’impact environnemental de ces parcours ? Ces pertinente. Travailler le SEO d’un site va avoir un impact sur
pages consomment-elles beaucoup de ressources ? Puis-je l’expérience utilisateur à travers l’accès plus facile à
réduire leur impact, même à la marge ? l’information et va améliorer l’accessibilité. L’UX est
• De quelles données ai-je besoin ? maintenant désignée par Google comme un élément central
[Link] 39
dans l’évaluation de la qualité d’un site Web.
Cela permet d’améliorer la fluidité du
parcours, de passer moins de temps sur
l’interface, ainsi l’utilisateur va pouvoir réaliser
plus facilement la tâche qu’il l’amène sur le
site. De même, il ne faut pas oublier que le
SEO va aussi servir l’accessibilité pour une
bonne restitution concernant les lecteurs
d’écran et l’accès au contenu pour les
utilisateurs ayant des difficultés visuelles.
40 [Link]
Docaposte : en route vers
une informatique vertueuse
François Tonic
Docaposte est une filiale du groupe La Poste. L’entité comprend 7500 collaborateurs,
dont 1800 dans les équipes IT, et plus d’une centaine de solutions numériques (apps, sites web
principalement) qui sont déployées. Au-delà du Green IT et de l’éco-conception, il s’agit aussi de rendre
accessibles ces services à toute personne ayant un handicap.
renouvellement tous les 2-3 ans alors que le les bonnes pratiques. Par exemple : alléger et
matériel peut encore parfaitement servir. mieux adapter les polices de caractères. L’analyse
de cet asset a montré que les certains serveurs
Quand un matériel doit être remplacé, il peut être numériques utilisaient plus de 4 Mo de polices. Le
proposé aux salariés ou partir en recyclage pour chantier a consisté à réduire le nombre de
donner une seconde vie aux matériels ou polices, utiliser des polices plus compactes et plus
Delphine Bénard
récupérer les matériaux. légères, compression les fontes qui peuvent l’être.
Directrice RSE
Docaposte
Docaposte a déployé un outil de référencement Le même travail a été mené sur les images. Ces
permettant ainsi de calculer l’impact de chaque fichiers prennent de la place, nécessitent un flux
matériel de bout en bout. Rallonger la vie des réseau et stressent les navigateurs et terminaux.
matériels permet en effet d’éviter de racheter un Au-delà, il s’agira de mettre en places règles de
matériel neuf. La fabrication d’un PC représente codage précises.
75 % de son impact environnemental.
Lionel Tuttle Infrastructure :
Chef de Projet Les équipes décrivent cela en 3 vies : l’autre gros chantier
Numérique
Responsable • Analyse du cycle de vie : les mesures sont les L’infrastructure n’est pas oubliée, mais le chantier
plus précises possible en front et en back. Cette n’est pas encore lancé. Aujourd’hui, Docaposte
analyse nécessite des outils profonds et un utilisent plusieurs datacenters d’opérateurs mais
Delphine Bénard et Lionel Tuttle nous temps de mise en œuvre et de traitement. Il cela ne concerne pas l’ensemble des workloads.
dévoilent les ambitions, les projets en cours et n’est pas possible de traiter la centaine de Les baies sont déployées chez des opérateurs de
les difficultés. services numériques datacenters. Un des chantiers sera de migrer des
• Utilisation d’outils de mesures telles que machines virtuelles aux conteneurs, bien plus
Le green-it et plus largement un numérique plus Greensceptor. Cela permet de remonter des légers. Docaposte s’appuie aussi sur les bonnes
responsable est supporté et encouragé par le métriques sur l’impact, les usages. pratiques des opérateurs par exemple sur le type
groupe La Poste et par la direction de Docaposte. • Amélioration des services, utiliser d’éco-index de refroidissement utilisé ou la température de
Il s’agit d’une des priorités que ce soit au niveau fonctionnement des baies.
de la DSI que pour les salariés. Parallèlement à ces actions, Docaposte met en
place une sensibilité pour tous les salariés et des Une des difficultés est d’unifier l’infrastructure, car
Les écueils et défis sont nombreux. Sur la partie formations. Tout le monde est concerné et pas Docaposte a racheté plusieurs entreprises. Or,
service, un des premiers chantiers, en cours, est uniquement les équipes IT. Pour les équipes chaque entité possède son SI, son infrastructure.
de déterminer comment les front-end des services techniques et les développeurs, des formations sur Un des objectifs est de converger vers une
sont réalisés. Ce n’est qu’une étape, ensuite, il mesure ont été créées pour faire des plateforme harmonisée. Il s’agit aussi à terme de
faudra s’attaquer au back-end et à développements web responsables. Aujourd’hui, mesurer l’impact de l’infrastructure avec outils tels
l’infrastructure. Ce chantier permettra de mesurer cela concerne essentiellement les dévs front, mais que Power API.
l’impact et d’agir dessus pour optimiser et réduire les dévs back sont aussi concernés.
la consommation, les trafics réseaux, etc. Une communauté active
Développement responsable : Pour que la démarche responsable soit comprise
Un des autres enjeux est la maîtrise de patience et bonnes pratiques et efficace, il faut aussi la mobiliser de tous les
l’équipement informatique. Celui-ci est à la fois Si aujourd’hui, Docaposte est avant tout dans les salariés, ce qui n’est toujours le plus simple. Une
multiple et nombreux (plus de 10 000 mesures et les récupérations des métriques, les communauté d’ambassadeurs du numérique
équipements référencés). Cet inventaire précis chantiers sont déjà ouverts. Un des soucis est de responsable s’est créée, des développeurs, mais
permet ensuite de mesurer les consommations et mesurer l’impact des optimisations : il ne faut pas pas seulement. Aujourd’hui, ils sont plus de 200 à
de voir comment tel matériel peut être utilisé plus dégrader la qualité des services numériques en informer, former, sensibiliser et à proposer des
longtemps. Aujourd’hui, il s’agit de rallonger le allégeant l’UX par exemple. Les outils solutions.
cycle de vie des matériels et ne plus être dans un Greenspector ont été utilisés pour mettre en place
[Link] 41
Abonnez-vous à Programmez! Abonnez-vous à Programmez! Abonnez
L e m a g a z i n e d e s d é v s
Offre 2023
Nos classiques
55€*
Notre partenaire be quiet! vous offre le Silent Wings
1 an D 10 numéros (1) 4 pour tout abonnement 1 ou 2 ans
(6 numéros + 4 hors séries)
90€*(1)
Silent Wings 4 un ventilateur haut de gamme pour
2 ans D 20 numéros PC. Il permettra de refroidir vos radiateurs et
dissipateurs. Un bouton permet de régler la vitesse.
(12 numéros + 8 hors séries)
45€*
Modèle 120mm PWM. Il est livré complet avec son
Etudiant kit de fixation et le ventilateur. Prix public : 23,90 €
1 an D 10 numéros
(6 numéros + 4 hors séries)
20€
be quiet! est une marque haut de gamme
d’alimentations, de solutions de
Option : accès aux archives refroidissement et de boîtiers PC.
1 an Programmez!
* Tarifs France métropolitaine
(1) Au lieu de 69,90 € ou 139,80 € selon l’abonnement, par
rapport au prix facial.
61€
Abonnement + Silent Wings 4 de be quiet
numérique
2 ans Programmez!
PDF ..............................................45€
96€
+ Silent Wings 4 de be quiet
1 an
Quantité limitée. Cette offre peut s’arrêter à tout moment.
Souscription directement sur Tarif abonnement + 6 € de frais postaux. Cette offre n’est pas valable pour les
[Link] abonnements étudiants et PDF. Sous réserve d’erreur typographique.
Délai moyen pour l’envoi : 7 jours
Adresse : I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I
n Je joins mon règlement par chèque à l’ordre de Programmez ! n Je souhaite régler à réception de facture * Tarifs France métropolitaine
Boutique Boutique Boutique Boutiq
250
251
252
Complétez votre collection....
HS 07
HS 08
253
254
n 252 n HS8
57 rue de Gisors
: I___I ex : I___I ex 95300 Pontoise
€ = I___I___I___I___I € .............................I___I___I___I___I € €
Offres pouvant s'arrêter à tout moment, sans préavis
Adresse : I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I___I
44 [Link]
De plus, elles ne sont pas réellement convertibles en Watt, ce
sont des mesures par proxy. Mais elles ont l’avantage d’être
“actionnables” : il est possible pour le développeur d’avoir un
impact direct dessus, et de vérifier comment ces valeurs évo-
luent après un changement du code. Et même si on ne mesu-
re pas exactement ce qu’on veut, une augmentation ou dimi-
nution indiquera une amélioration ou régression réelle de la
consommation. Ce sont donc des proxys acceptables.
Idéalement, les mesures que nous prendrons seront à la fois
faciles à observer sur une machine locale, et possibles à
agréger pour un grand nombre d’utilisateurs par télémétrie
pour évaluer l‘impact global.
Le temps CPU d’un processus est accessible sur tous les OS.
En ce qui concerne l’utilisation de la puissance de traitement
GPU, cela devient plus complexe, car il n’existe à notre
Figure 1 : Répartition
connaissance aucune API documentée à ce sujet. du temps CPU par type
Cependant, en fouillant un peu sous Windows et Mac, il est de processus
possible de trouver les API non documentées utilisées par le
Gestionnaire de tâches (Windows) et le Moniteur d’activité
(Mac).
Pour les réveils de threads, il a été possible d’instrumenter le
code de bas niveau de Gecko (moteur de rendu Mozilla), en
incrémentant un compteur à chaque fois qu’un thread rede-
vient actif. Maintenant que nous avons vu ce qui peut être
mesuré, regardons comment exploiter ces mesures à très
grande et très petite échelle.
La télémétrie :
pour une vue d’ensemble
La plateforme Mozilla permet de collecter et d’agréger faci-
lement de gros volumes de données. Il est ainsi possible de
mesurer la quantité de temps CPU consommé par Firefox sur
l’ordinateur de chaque utilisateur nous envoyant des données
télémétriques, et d’obtenir le temps de CPU total (des
dizaines de millions d’heures de CPU par jour !) Ce total est
utile pour établir le bilan carbone de Mozilla avec une assez
bonne précision (l’utilisation de Firefox sur les machines de
nos utilisateurs représentant environ 98% des émissions asso- Figure 2
ciables aux activités de Mozilla). bien plus important pour le climat que si ces mêmes dévelop-
Cependant, ce total ne s’avère pas très pratique pour les peurs changeaient leur style de vie personnel pour réduire
ingénieurs. Pour prendre des décisions, il est préférable de leur bilan carbone individuel. Mais c’est à la fois très peu, car
connaître la distribution de l’utilisation des ressources. L’idéal il s’agit d’une petite fraction du total, et nous pourrions espé-
serait de pouvoir distinguer ce qui est réellement utile pour rer des gains potentiels bien plus conséquents en nous
l’utilisateur de ce qui est du gaspillage. Nous avons ainsi col- concentrant sur une autre partie du problème. Par exemple,
lecté des données avec une granularité plus fine. Par les “content processes” au premier plan additionnés au pro-
exemple, Firefox étant un logiciel à architecture multi-proces- cessus “gpu” (utilisé pour l’affichage sous Windows), repré-
sus, nous avons collecté le temps CPU par type de processus. sentent 56,5% du total.
Revenons à notre intuition selon laquelle les onglets en arriè- Pour avoir des données encore plus précises pour les ingé-
re-plan seraient une source importante de consommation nieurs, pour le canal ‘Nightly’ (pour tester quotidiennement
d’énergie. Nous pouvons maintenant mesurer (Figure 1) : les les derniers développements [1]), nous collectons des don-
onglets ayant la priorité “background” (donc n’étant ni au nées sur l’utilisation de ressources CPU par nom de thread.
premier plan ni en train d’émettre du son) représentent 7,6% Nous pouvons ainsi savoir quels temps de calcul sont utilisés
du temps CPU consommé par Firefox (moyenne sur les 12 et combien de réveils ont lieu sur chacun des threads, sur
derniers mois). chacun des types de processus. Nous pouvons suivre l’évolu-
C’est à la fois énorme et très peu. Énorme, car vu la taille de tion de ces données pour chaque nouvelle version de Firefox
notre base d’utilisateurs, ça représente des dizaines de mil- Nightly, et donc voir rapidement l’impact d’un changement
liers de tonnes d’équivalent CO2. Ainsi, une petite équipe de chez nos utilisateurs. Ces données nous permettent par
développeurs travaillant quelques mois pour améliorer l’effi- exemple de voir (Figure 2) que le 20 juin 2022, suite à la cor-
cacité des onglets en arrière-plan aurait un impact positif rection d’un bug [2], le thread nommé “Timer” ne représente
[Link] 45
trique de l’ordinateur. Ces découvertes nous ont permis de
réaliser des avancées significatives :
• Proposée à partir de Firefox 104, une fonctionnalité de
power profiling permet d’analyser la consommation millise-
conde par milliseconde sur les machines tournant sous
Windows 11 et disposant d’un processeur Intel.
• Sur les machines Apple Silicon, nous pouvons afficher la
Figure 3 : Consommation d’énergie lors du clignotement du curseur - consommation séparément pour chaque processus.
[Link]
• Avec Firefox 107, nous avons ajouté le support des
machines tournant sous Linux, et des machines Apple uti-
lisant un CPU Intel.
Une mise à jour récente de Windows 11 a rendu possible
l’accès aux données sur les CPU AMD Ryzen, où il est en plus
possible de mesurer la consommation électrique cœur par
cœur.
Qu’est-il possible de voir sur ces profils d’énergie ? Beaucoup
de choses ! Nous sommes par exemple en mesure de voir
avec précision combien d’énergie est utilisée par le clignote-
ment du curseur dans la barre d’adresse du navigateur
(Figure 3).
Développer cette fonctionnalité de profiling d’énergie était
une étape très importante dans notre progression pour com-
prendre la consommation énergétique de Firefox, car non
Figure 4 : Configuration seulement elle nous a permis de mesurer rapidement plein
du profiler pour mesurer plus qu’un peu moins de 5% du total des réveils de thread, de choses, mais elle met aussi dans les mains de nos utilisa-
l’énergie consommée
contre environ 7% avant. Une belle amélioration, qui montre teurs un outil permettant de faire rapidement des rapports de
que le correctif a porté ses fruits. bugs précis.
Le profiler est en effet extrêmement simple à utiliser pour
Le Profiler, pour des mesures fines mesurer l’énergie :
Les données télémétriques sont très précieuses pour savoir si • aller sur la page [Link] depuis Firefox
nous nous améliorons ou régressons et pour prioriser nos • cliquer le gros bouton “Activer le bouton de menu Firefox
efforts d’optimisation, mais n’ont généralement pas une pré- Profiler”
cision suffisante pour nous permettre d’identifier directement • sélectionner le preset “Énergie”
des bugs dans le code. Pour ça, l’utilisation d’un profiler est • commencer l’enregistrement (bouton “Commencer l’enre-
beaucoup plus appropriée. Et justement, Firefox intègre un gistrement”) (Figure 4).
excellent profiler, développé il y a quelques années pour sou- • Après avoir reproduit ce qu’il y avait à profiler, un clic sur
tenir le travail intense qui a eu lieu pour faire de Firefox 57 l’icône dans la barre d’outils (ou sur le bouton “Capturer”)
(Quantum) un navigateur très compétitif du point de vue des suffit à capturer le profil enregistré et l’ouvrir dans un nou-
performances. Ce profiler a depuis été maintenu très active- vel onglet.
ment, et est de mon point de vue devenu un outil de débo- • Si le profil a été capturé dans le but de l’inclure dans un
gage à tout faire. J’irais même jusqu’à dire que c’est “les rapport de bug, deux clics de plus (bouton “Envoyer le pro-
yeux du développeur”. En seulement quelques secondes, il fil local”, puis “Envoyer”) permettent d’uploader le profil et
est possible de visualiser l’exécution de n’importe quelle d’obtenir une URL courte facile à partager.
tâche dans n’importe quel processus de Firefox. Si le but était de l’analyser soi-même, il pourrait être utile
Le profiler intègre deux sources de données : de lire la documentation [3] pour comprendre comment
• L’échantillonnage : à un intervalle régulier, le profiler met naviguer dans l’interface dense en information du profiler.
en pause l’exécution du programme et capture les stacks Cette méthode peut tout aussi bien s’appliquer à l’utilisation
de tous les threads, ainsi que les valeurs de quelques d’énergie d’un site web chargé dans Firefox, et pourra être
compteurs, comme le nombre d’allocations mémoires très utile aux développeurs web souhaitant étudier et amélio-
• Les marqueurs, sortes d’annotations laissées par les déve- rer leur site de ce point de vue. Ainsi, il devient possible pour
loppeurs pour s’assurer de pouvoir voir des points clés de un développeur web d’évaluer l’impact énergétique d’un site :
l’exécution même s’ils ne durent pas assez longtemps pour animation, vidéo, publicité, etc. Ces outils étant en place,
être visibles dans les échantillons. Par exemple, cela nous regardons comment ils permettent d’améliorer Firefox.
permet de visualiser les réveils d’un thread.
Il y a encore quelques années, il était très difficile d’évaluer Savoir ce qui a besoin d’être optimisé
l’impact énergétique des logiciels. Des recherches poussées Pour réduire la consommation d’énergie de Firefox, par où
sur le sujet nous ont permis de trouver sur les différentes pla- commencer ? Afin de déterminer où apporter des améliora-
teformes des API insuffisamment documentées permettant tions, il est nécessaire de pouvoir distinguer ce qui est utile de
d’accéder à des mesures précises sur la consommation élec- ce qui ne l’est pas. Il est effectivement acceptable de
46 [Link]
consommer de l’énergie pour réaliser une tâche qui s’avère
utile pour l’utilisateur. Ce qui mérite d’être optimisé est ce qui
consomme des ressources sans apporter aucun bénéfice du
point de vue utilisateur. Il n’est pas toujours aisé de séparer
les deux.
Sur sa propre machine, c’est plus simple, car on connaît nos
attentes. Nous avons donc passé beaucoup de temps à ana-
lyser ce que font nos instances de Firefox, en particulier
lorsque l’usage du CPU était supérieur à nos attentes. Le ges-
tionnaire de processus intégré dans Firefox (about:processes)
(Figure 5) nous a permis de voir très vite quels processus
consomment des ressources. Parfois, cet outil nous indique
un onglet trop gourmand qu’il serait préférable de fermer.
Parfois, il nous a fait soupçonner un bug dans le navigateur.
Pour lever rapidement le doute, nous avons ajouté dans le
gestionnaire de processus une icône permettant de capturer
d’un seul clic un profil de 5 secondes montrant l’intégralité
de ce qu’il se passe dans un processus (Figure 6).
Nous avons passé un temps significatif à regarder ce genre de
profil. Les nôtres, ceux de nos proches, et ceux que nos utili-
Figure 5 : Gestionnaire de processus (about:processes)
sateurs nous envoient lorsqu’ils ouvrent un bug pour signaler
qu’ils trouvent l’usage de CPU excessif sur leur machine.
Après un certain temps, des classes de bug émergent.
Par exemple, ce qui peut susciter une plainte de la part de
l’utilisateur est souvent associé à des animations qui consom-
ment d’importantes quantités de ressources pour générer 60
images par seconde afin d’obtenir une animation fluide, alors
qu’elles ne sont pas réellement visibles.
Lorsqu’un processus est modérément actif alors que l’utilisa-
teur s’attend à ce qu’il soit complètement inactif, on retrouve
souvent des timers qui s’exécutent trop fréquemment.
Lorsqu’un bug a été identifié, il faut ensuite décider s’il est
important :
• Si le bug est trivial et peut être corrigé en quelques instants,
il est évidemment plus simple de le corriger et passer à
autre chose.
• Si corriger nécessite que quelqu’un ayant des connais- Figure 6 : Capture d’un profil en un seul clic
sances spécifiques dans cette partie du code passe plu-
sieurs jours de son temps pour comprendre et remédier au ment d’alternative à l’implémentation actuelle, de disposer
problème, il vaut mieux s’assurer que le bug a un impact d’une piste pour résoudre le bug sans perdre de temps.
significatif ! Avec une équipe compétente et motivée, avoir un impact
Les données télémétriques peuvent parfois nous aider à faire ponctuel sur les performances est relativement facile, mais
le tri entre un cas particulier se produisant quelques fois par gare aux régressions ! Régressions qui sont d’autant plus sus-
jour, et un bug responsable d’une expérience dégradée pour ceptibles d’être introduites que le code est modifié fréquem-
de nombreux utilisateurs. ment par de nombreux contributeurs.
Bien sûr, nous avons des tests automatiques de performance
Optimiser, un travail collaboratif qui prennent des mesures pour chacun des nouveaux com-
Comme n’importe quel travail sur les performances, optimi- mits, et alertent en cas de régression conséquente. Hélas, à
ser la consommation d’énergie nécessite de collaborer avec cause du bruit qui est inévitablement lié à ce type de
de nombreux ingénieurs dans diverses équipes, et de les mesures, les régressions mineures passent souvent inaper-
convaincre de l’importance de ce travail. Disposer de don- çues. Lorsque ces régressions s’accumulent, on arrive lente-
nées solides pour illustrer l’impact est d’une grande aide pour ment à une baisse significative des performances, dont il est
convaincre. impossible d’identifier la source. Une solution à ce problème
Un bon profil ou des données télémétriques sont des alliés est d’écrire des tests qui identifient systématiquement une
nécessaires pour s’assurer qu’un bug soit pris en compte. De mauvaise pratique, plutôt que de se reposer sur des tests qui
plus, pour faciliter le travail des développeurs, des sugges- prennent des mesures. Cette méthode avait déjà donné de
tions d’amélioration sont toujours d’une grande aide. Cela bons résultats pour limiter l’augmentation lente du temps de
permet à des développeurs sans compétences particulières démarrage de Firefox.
en termes de performances et qui ne voient pas immédiate- En ce qui concerne l’énergie, nous avons appliqué cette
[Link] 47
méthode au cas des animations qui continuent de s’exécuter Une illustration : j’ai récemment modifié un code qui pro-
à l’infini. Un gros avantage à notre disposition est que pour grammait l’exécution de tâches en arrière-plan, et se donnait
Firefox, nous avons le contrôle de la plateforme qui effectue beaucoup de mal pour éviter que deux tâches ne démarrent
le rendu, et nous pouvons donc la modifier pour qu’elle nous en même temps, ce qui semble aberrant. La lecture des com-
donne plus d’informations. Ici, nous avons ajouté une métho- mentaires dans le code, et dans l’historique de bugzilla, où il
de qui permet de savoir si le navigateur écoute actuellement est possible de consulter les échanges entre les développeurs
les notifications VSync (indiquant au logiciel qu’il est temps depuis plus de 20 ans, indique que ce choix a été fait pour
de rafraîchir l’image affichée sur l’écran, et se produisant au préserver la réactivité de l’application. À l’époque où ce code
taux de rafraîchissement du moniteur). À la fin de chaque a été écrit, c’était sans doute la bonne décision, car presque
test automatique, nous vérifions que VSync n’est plus activé. tout (y compris les I/O) était fait sur le thread principal de
Tout test qui laisse une animation active à la fin de son exé- l’application, et enchaîner trop d’utilisations du disque ris-
cution empêche VSync d’être désactivé, et fait maintenant quait de bloquer l’interface utilisateur pour une durée inac-
échouer les tests. Ajouter cette vérification aux tests existants ceptable. Aujourd’hui, les I/O sont faites sur d’autres threads,
a généré une longue liste de cas particuliers où une anima- et pour les opérations qui doivent s’exécuter sur le thread
tion persistait après la fin d’un test. Il a fallu diagnostiquer principal, il est possible d’utiliser une priorité plus basse pour
tous ces cas individuellement pour séparer les bugs des tests ne pas interférer avec la gestion des événements utilisateur.
des bugs du navigateur. Grâce à ces efforts, la catégorie de Pour ce qui est de l’efficacité énergétique, le fonctionnement
bug “animation qui continue à l’infini” a entièrement disparu de nos machines a beaucoup évolué. Lorsque les processeurs
et ne reviendra pas. n’avaient qu’un voire deux cœurs, réveiller un thread n’occa-
Si corriger toutes les occurrences existantes d’un problème sionnait que très rarement le réveil d’un cœur, et le coût éner-
n’est pas possible rapidement, une alternative est d’exempter gétique était insignifiant. En 2023, nos processeurs ont de
les problèmes existants de la nouvelle vérification. Cela per- nombreux cœurs qui peuvent être réveillés, bien qu’il est
met de prendre son temps pour les corriger, tout en stoppant énergétiquement plus pertinent de les laisser dormir aussi
immédiatement l’introduction de nouvelles occurrences de la longtemps que possible. C’est pour cette raison que l’on peut
mauvaise pratique, et ainsi s’assurer de ne pas régresser. parfois trouver des fragments de code qui ne sont pas opti-
Idéalement, le message d’erreur produit lorsque la mauvaise misés pour minimiser les réveils, voire même “optimisés”
pratique est utilisée devra être suffisamment descriptif pour pour faire exactement le contraire.
permettre à tout développeur qui le rencontrerait de com- Enfin, nous pouvons tirer parti des nouvelles technologies
prendre rapidement pourquoi cette pratique est bannie et ce pour économiser de l’énergie. En effet, certaines générations
qu’il peut faire à la place. Il est préférable aussi d’indiquer récentes de CPU intègrent des cœurs d’efficacité. Microsoft,
comment obtenir de l’aide en cas de difficulté, par exemple dans Windows 11, a introduit une API pour signaler au systè-
un groupe ou une personne à contacter pour expliquer le me d’exploitation qu’une tâche n’a pas d’impact sur l’expé-
fonctionnement du test et trouver ensemble une solution. rience utilisateur de premier plan, en assignant au processus
ou au thread la qualité de service “eco” [4]. Utiliser cette API
Quelques cas concrets nous a permis d’obtenir un gain d’efficacité énergétique
Depuis que j’ai commencé à travailler sur ce projet il y a envi- remarquable (jusqu’à diviser par 5 la consommation élec-
ron un an et demi, une quarantaine de bugs ont été corrigés trique du CPU sur un benchmark d’un cas extrême) sur les
spécifiquement dans le but de réduire la consommation onglets en arrière-plan, avec très peu de code.
d’énergie. Les bugs corrigés rentrent souvent dans ces En résumé, comprendre et réduire l’utilisation d’énergie d’un
quelques catégories : logiciel est un travail qui s’inscrit dans la durée.
• des timers qui se répètent alors qu’ils auraient pu être arrê- Il faut d’abord mesurer pour savoir ce qui mérite d’être opti-
tés, ou remplacés par du code réagissant à des événe- misé. Un profiler permettant de visualiser les consommations
ments énergétiques est un excellent outil pour ça. Lorsque c’est réa-
• des animations qui ne s’arrêtent pas quand elles sont lisable, collecter de la télémétrie est une aide supplémentaire.
cachées ou terminées Ensuite, il faut optimiser. Les progrès peuvent initialement
• des threads réveillés inutilement être rapides, avec la correction des bugs ayant le plus gros
• plus rarement, des cas particuliers mal gérés causant un impact. Après, c’est un travail de patience qui nécessite de
usage de ressource intensif (par exemple une boucle infi- convaincre, quand il ne reste que de nombreux bugs qui ont
nie). collectivement un impact significatif, mais dont l’impact indi-
Lorsqu’on profile quelque chose pour la première fois, on a viduel est peu visible. C’est ainsi que nous avons significative-
souvent des surprises. On voit des choses qui fonctionnent de ment amélioré l’efficacité énergétique de Firefox, et ces
manière inefficace, et on se demande “pourquoi ?”. Parfois efforts ne font que commencer.
c’est juste une erreur d’inattention qui est passée inaperçue
lors des relectures du code. Parfois la raison est historique : [1] [Link]
Firefox, avec plus de 800 000 commits au cours des 25 der- [2] [Link]
nières années par plus de 9 000 contributeurs, a une longue [3] [Link]
histoire ; quelque chose qui pouvait avoir du sens il y a des [4] [Link]
années peut être illogique aujourd’hui.
48 [Link]
Mon aventure avec ChatGPT
À moins d’être benêt comme certains, l’utilisateur de ChatGPT comprend vite qu’il faut
prendre le machin pour ce qu’il est : une machine qui génère du texte, et non pour ce
que certains le vendent, une entité avec qui il serait possible de papoter. Seulement Denis Duplan
Sociologue et
voilà : un machin qui génère du texte, c’est amusant, mais pour quoi en faire ? Et dans développeur à ses
le cas présent, quoi en faire dans le domaine de la programmation ? heures.
Blog : [Link]
ChatGPT, on ne sait pas à quoi ça sert, et encore moins can keep on exploring the world. If he is killed, he has to start
comment ça fonctionne, mais pour le développeur, c’est the game again.
justement là que réside le fun. Vu ainsi, utiliser ChatGPT per- En retour, ChatGPT commence à générer un code, mais s’ar-
met de revivre une expérience similaire à celle de l’apprentis- rête un peu avant la centième ligne :
sage de la programmation : on peut visiblement demander Code complet sur [Link] & github
plein de choses amusantes à faire à la machine, et pour
savoir ce qu’il est exactement possible en la matière, rien de Ce code est lisible et les commentaires permettent de bien s’y
mieux que de procéder d’emblée à des expérimentations ; retrouver. Visiblement, ce n’est pas trop mal parti, mais com-
par la suite, il sera toujours temps de tenter de rentrer dans ment lui faire générer la suite afin de tester ? Après quelques
les détails pour comprendre le pourquoi du comment, mais recherches, je constate que je ne suis pas le seul à me heurter
ce n’est pas un prérequis pour s’y mettre. à ce problème. Quelqu’un recommande de simplement de
Partant, pourquoi ne pas chercher à l’utiliser pour créer un demander à ChatGPT de continuer, en évitant de regénérer
jeu ? Mon aventure avec ChatGPT relèvera donc un peu de tout ce qui précède :
la mise en abîme : ce sera l’aventure de mon (jeu d’)aventure Continue. Do not repeat the code you already wrote.
avec ChatGPT, avant la dernière version reposant sur GPT-4. En réponse, ChatGPT plante et ne me permet pas de
reprendre, si bien que je n’ai pas eu d’autre choix que d’en-
Un jeu d’aventure et huit problèmes tamer une nouvelle conversation.
Je n’ai jamais utilisé ChatGPT ni d’autre AI génératrice
Problème n°≫ : lorsqu’il génère du code, ChatGPT risque
jusqu’à ce que j’entende parler de prompt injection.
de s’interrompre sans possibilité de reprise.
Comment s’y prendre ? Quelques recherches me permettent de
Je reformule donc ma demande initiale, et ChatGPT com-
tomber sur des recommandations en matière de ce que d’au-
mence à générer un code tout différent, partant cette fois sur
cuns appellent assez pompeusement le prompt engineering, et
des objets. Ainsi :
dont ils ont parfois même fait un fonds de commerce [1].
Visiblement, il est bien possible de générer du code, en n’hé- class Creature:
sitant toutefois pas à se montrer précis, quitte à rédiger de def __init__(self, life_points, strength):
longues demandes. Sur cette base, j’entreprends donc de lui self.life_points = life_points
faire générer le code d’un jeu d’aventure en mode texte, en [Link] = strength
ne lésinant pas sur les détails :
Write a program for a short adventure game. Write in Python. def attack(self, other):
The game must be text based. The user and the creatures in damage = [Link]
this game have those attributes: life points, strength. The user print(f”{self.__class__.__name__} attacks {other.__class__.__name__}
has to explore a world until he finds a treasure, at which point for {damage} damage”)
the game ends. If the player dies during the exploration, the
game starts over. other.take_damage(damage)
The world is a square grid which side is 200 squares. The user
is placed at a random location on the grid where there is no def take_damage(self, damage):
monster and no treasure. A random number of monsters self.life_points -= damage
between 50 and 100 are generated. Each monster is placed if self.life_points <= 0:
a random location on the grid where there is no monster, no print(f”{self.__class__.__name__} is defeated”)
treasure and no player. The treasure is placed at a random
location on the grid where there is no player and no monster. class Player(Creature):
To explore the world, the player must be asked one of the fol- def __init__(self):
lowing direction: north, south, east or west. If the direction super().__init__(INITIAL_LIFE_POINTS, INITIAL_STRENGTH)
leads the player outside the grid, the player must not be self.experience_points = 0
moved and must be asked again a direction.
If the player move to a square where there is monster, he class Monster(Creature):
must fight this monster. If he kills the monster, he earns expe- def __init__(self, strength):
rience points related to the strength of the monster and he super().__init__(INITIAL_LIFE_POINTS, strength)
[Link] 49
Problème n°≬ : ChatGPT peut générer des codes diffé- Problème n°≮ : par défaut, ChatGPT utilise des espaces
rents en réponse à une même demande. et non des tabulations pour indenter le code.
Ici encore, ChatGPT s’interrompt avant la fin, un peu avant Le code démarre par la déclaration d’une série de constantes
la centième ligne. Je lui demande de nouveau de terminer sa qui semblent bien augurer de ce qui suit, car j’y retrouve les
réponse. Cette fois, il semble bien y parvenir, puisqu’après dimensions du terrain, le nombre de monstres et les direc-
avoir repris en générant du code, il conclut fièrement par : tions de déplacement que j’avais demandées :
This is just one possible implementation of the game, and
there are many ways to improve or modify it. For example, # Define constants
you could add more types of creatures, implement a leveling GRID_SIZE = 200
system based on experience points, or allow the player to use NUM_MONSTERS = [Link](50, 100)
items such as weapons or potions. DIRECTIONS = [“north”, “south”, “east”, “west”]
Je copie-colle les deux parties de ce nouveau code dans INITIAL_LIFE_POINTS = 100
Notepad++, je sauvegarde le tout dans un fichier [Link] , INITIAL_STRENGTH = 10
et j’entreprends de l’exécuter.
Cela marche, mais je constate un petit problème, à savoir Ensuite, c’est une phase d’initialisation :
que le déplacement du joueur est étrangement mal géré. En
effet, un déplacement vers le nord ou le sud entraîne un # Initialize game
déplacement horizontal, et inversement, un déplacement grid = generate_grid()
vers l’ouest ou l’est entraîne un déplacement vertical : creatures = generate_creatures()
player_x, player_y, player = creatures[0]
def move_player(direction):
global player_x, player_y # Main game loop
if direction == “north” and player_x > 0: find_treasure()
player_x -= 1
elif direction == “south” and player_x < GRID_SIZE-1: Je rentre dans chacune de ces fonctions. Celle qui génère le
player_x += 1 terrain retourne bien une liste des dimensions requises :
elif direction == “west”and player_y > 0:
player_y -= 1 def generate_grid():
elif direction == “east” and player_y < GRID_SIZE-1: return [[None for _ in range(GRID_SIZE)] for _ in range(GRID_SIZE)]
player_y += 1
La fonction qui génère les créatures génère bien le joueur et
Problème n°≭ : ChatGPT peut générer un code qui ne les monstres en quantité demandée, et place bien tout ce petit
répond pas aux besoins. monde sur le terrain à des positions aléatoires en veillant
Qu’à cela ne tienne, je déplace mon personnage jusqu’à apparemment à ce qu’ils ne se marchent pas sur les pieds :
tomber sur un monstre. Comme demandé, la rencontre se
solde par un combat dont fort heureusement je sors vain- def generate_creatures():
queur, gagnant au passage de l’expérience. creatures = []
Pour finir, je déplace mon personnage jusqu’au trésor, et # Generate player at random location
comme demandé encore, le jeu se termine bien par la player = Player()
découverte de ce dernier : Figure 1 player_x, player_y = generate_random_location()
Pas mal du tout ! Toutefois, le code fait-il bien ce que j’ai [Link]((player_x, player_y, player))
demandé ? Vu l’inversion des directions du déplacement, j’ai # Generate monsters at random locations
clairement intérêt à me poser la question. Je passe donc le for _ in range(NUM_MONSTERS):
code en revue. monster_strength = [Link](1, 10)
Pour commencer, je constate que ChatGPT utilise des espaces monster_x, monster_y = generate_random_location()
et non des tabulations pour indenter le code. Or comme cha- monster = Monster(monster_strength)
cun le sait, notamment après avoir visionné l’épisode 8 de la [Link]((monster_x, monster_y, monster))
saison 4 de l’excellente série Silicon Valley, l’utilisation d’es- return creatures
paces est tout à fait attentatoire à la dignité humaine [2]. On
reconnaît bien là le geste perfide d’une intelligence artificielle def generate_random_location():
qui peine à refouler son terminatorisme. while True:
x, y = [Link](0, GRID_SIZE-1), [Link](0, GRID_SIZE-1)
if grid[x][y] is None:
Figure 1 return x, y
50 [Link]
def find_treasure(): if direction not in DIRECTIONS:
treasure_x, treasure_y = generate_random_location() print(“Invalid direction, try again”)
while grid[treasure_x][treasure_y] is not None: continue
treasure_x, treasure_y = generate_random_location() move_player(direction)
grid[treasure_x][treasure_y] = “treasure” if grid[player_x][player_y] == “treasure”:
print(f”Treasure is located at ({treasure_x}, {treasure_y})”) print(“Congratulations, you found the treasure and won the game!”)
break
La contemplation de ce code appelle deux remarques. elif any(x == player_x and y == player_y for x, y, creature in creatures if isinstance
Tout d’abord, ce code n’est pas efficient. En effet, et c’est une (creature, Monster)):
erreur de débutant en matière de placement de créatures sur fight_monster(player_x, player_y)
un terrain de jeu, la dernière fonction risque de tourner d’au- if player.life_points <= 0:
tant plus longtemps qu’il y a de créatures déjà placées. Mieux restart_game()
vaut générer une liste de toutes les positions possibles, la trier continue
aléatoirement avec l’algorithme de Fisher-Yates, et se conten- else:
ter de parcourir la liste résultante pour récupérer des posi- grid[player_x][player_y] = “player”
tions aléatoires :
C’est une boucle infinie. A chaque itération, la boucle com-
random_locations = [i for i in range (GRID_SIZE * GRID_SIZE)] mence par afficher des informations. Il s’agit de la position
for i in range (len (random_locations) - 1, 0, -1): du joueur, et de tout ce qu’affiche print_status () , à savoir les
j = [Link] (0, i) attributs du joueur, puis la liste des monstres avec pour cha-
random_locations[i], random_locations[j] = random_locations[j], random_locations[i] cun sa position et ses attributs :
for i in range (len (random_locations)):
random_locations[i] = (random_locations[i] % GRID_SIZE, random_locations[i] def print_status():
// GRID_SIZE) print(f”Player: life points={player.life_points}, strength={[Link]}, experience
points={player.experience_points}”)
Problème n°≯ : ChatGPT peut générer un code qui n’est for x, y, creature in creatures:
pas efficient. if isinstance(creature, Monster):
Ensuite, ce code est verbeux, au sens où il contient du code print(f”Monster at ({x}, {y}): life points={creature.life_points}, strength=
inutile. En effet, generate_grid () est appelée pour retourner {[Link]}”)
une liste à double entrée dans la variable grid , mais à aucun Je relis ma demande, mais comme il me semble, je n’avais
moment le joueur ni les monstres ne sont stockés dedans : pas du tout demandé à ce que ces informations soient affi-
ces derniers ne se trouvent que dans la liste creatures . La chées !
seule chose qui est stockée dans grid , c’est le trésor. Dans
ces conditions, grid n’a pas d’utilité : autant se contenter de Problème n°≲ : ChatGPT peut générer du code qui
conserver les coordonnées du trésor. répond à des besoins qui n’ont pas été formulés.
Après cet affichage, la boucle demande bien au joueur de
Problème n°≰ : ChatGPT peut générer du code inutile. saisir une direction et contrôle si celle qu’il saisit est possible.
Enfin, ce code ne marche pas. Quand je dis qu’il place appa- Dans ce cas, la boucle appelle move_player () pour déplacer
remment le joueur, les monstres et le trésor sur le terrain à le joueur. Comme déjà indiqué, cette fonction n’interprète
des positions exclusives, c’est qu’en réalité, c’est faux. En pas correctement les directions, mais elle limite bien le dépla-
effet, chacune de ces entités est bien placée à une position cement du joueur aux bornes du terrain.
aléatoire retournée par generate_random_location () , mais Ensuite, la boucle vérifie si le joueur se trouve à la position du
cette fonction vérifie si le joueur ou une créature se trouve trésor, et termine le jeu en le félicitant si c’est bien le cas.
déjà à une position en se basant sur un parcours de grid . Or, Autrement, le code passe en revue la liste des créatures afin
comme cela vient d’être vu, grid ne contient ni le joueur ni de vérifier si le joueur n’est pas tombé sur un monstre.
les créatures générées. Autrement dit, il est parfaitement Comme déjà vu, le joueur est la première créature de cette
possible que generate_random_location () retourne une posi- liste, mais le code parvient à éviter de comparer le joueur à
tion déjà occupée par le joueur ou une créature. lui-même en contrôlant la classe de l’objet lorsqu’il parcourt
cette liste : la position du joueur n’est comparée qu’à celles
Problème n°≱ : ChatGPT peut générer du code qui des instances de la classe Monster .
semble répondre aux besoins, mais qui n’y répond pas. Si le joueur est tombé sur un monstre, le code appelle
Je continue de lire le code. C’est maintenant le programme fight_monster () pour dérouler le combat :
principal :
def fight_monster(x, y):
while True: monster = None
grid[player_x][player_y] = “player” for c_x, c_y, creature in creatures:
print(f”Player is at ({player_x}, {player_y})”) if c_x == x and c_y == y and isinstance(creature, Monster):
print_status() monster = creature
direction = input(“Where do you want to go (north/south/east/west)? “) break
[Link] 51
if monster is None: loge l’instance en tête de la liste creatures . Toutefois, plutôt
return que de se terminer au retour de l’appel à generate_creatures () ,
print(f”You encounter a monster at ({x}, {y})”) cette fonction répète cela.
while True: « Je l’aurai un jour, je l’aurai ! »
# Player attacks
[Link](monster) Ainsi, ChatGPT a généré un code qui s’exécute en donnant
if monster.life_points <= 0: l’impression de répondre aux besoins, et même de les dépas-
player.experience_points += [Link] ser, mais qui dans les faits n’y répond pas vraiment, et de plus
[Link]((x, y, monster)) se révèle verbeux et inefficient. Pour finir, il a affirmé que tout
print(f”You defeated the monster and earned {[Link]} experience cela constituait un exemple de jeu tel que je l’ai demandé.
points”) Mais quel toupet !
Parlant de toupet, ça tombe bien, car j’ai vraiment l’impres-
break sion qu’avec sa manière de camper droit dans ses bottes
# Monster attacks quoiqu’il hallucine, ChatGPT me prend pour le client de
[Link](player) Palace [3] :
if player.life_points <= 0: - Dites donc, c’est quoi ça ? Un cheveu dans ma soupe ou
print(“You were defeated by the monster”) une hallucination ?
restart_game() - Si je puis me permettre, Monsieur, ce n’est pas tout à fait
exact. Il ne s’agit pas d’un cheveu, mais de plusieurs. Oui,
Clairement, ce code n’est pas efficient, en ceci que la boucle c’est une soupe à la moumoute, toute bête, toute tradition-
principale avait déjà parcouru la liste des créatures et récu- nelle, agrémentée de quelques fantaisies condimentales.
péré l’instance du monstre à la position du joueur, et que
cette fonction débute en faisant exactement la même chose,
réalisant donc un parcours et un test inutiles.
Pour ce qui est du combat, le code appelle d’abord une
méthode attack () du joueur, dont il est possible de vérifier
plus haut qu’elle affiche un message annonçant l’attaque à
hauteur de la force du joueur, puis appelle la méthode
take_damage () du monstre qu’elle a reçu en paramètre.
Cette dernière retire au monstre un nombre de points de vie
qui correspond à la force du joueur, et affiche un message
annonçant la défaite de ce dernier si son nombre de points
de vie devient inférieur ou égal à zéro. Mais bon, moi aussi, « je l’aurai un jour, je l’aurai. » Je ne
Au retour de la méthode attack () , la boucle vérifie si le démords donc pas de mon objectif qui est de lui faire générer
nombre de points de vie du monstre est inférieur ou égal à tout le code de mon jeu d’aventure. Étant donné les pro-
zéro, et si oui retire le monstre de la liste creatures , affiche un blèmes constatés, n’est-il pas possible de m’y prendre autre-
message pour annoncer la victoire du joueur, et repart sur la ment pour les éviter ? Mon idée est de commencer par écar-
prochaine itération. Si jamais le monstre n’est pas mort, c’est ter toute mention inutile dans mes demandes, tout particuliè-
rebelotte, mais cette fois c’est le monstre qui attaque, et si au rement celle à un jeu d’aventure, car il me semble que
retour le joueur est mort, la boucle affiche un message qui ChatGPT est trop guidé par elle, et de lui demander de géné-
l’annonce et redémarre le jeu en appelant une dernière fonc- rer le code non plus d’un bloc, mais par morceaux. Bref, de
tion, restart_game () : faire l’effort de mieux spécifié en montant en abstraction et
en lotissant. Dans ces conditions, j’ai clairement intérêt à
def restart_game(): procéder par objets.
global grid, creatures, player_x, player_y, player Puisque ChatGPT ne capitalise pas sur les conversations, j’en
print(“Restarting game...”) démarre une nouvelle pour tout reprendre à zéro. Je com-
grid = generate_grid() mence donc par lui demander :
creatures = generate_creatures() Define a class in Python for a creature. The attributes are:
player_x, player_y, player = None, None, None - life points: integer
while player is None: - strength: integer
x, y = generate_random_location() - experience: integer, default value is 0
if grid[x][y] is None: - coordinates: a pair of integers, default value is (0, 0)
player_x, player_y = x, y Add a constructor which sets values for those attributes:
player = creatures[0][2] - life points: if not provided, default value for this argument is
creatures[0] = (x, y, player) a random integer between 10 and 100
- strength: if not provided, default value for this argument is a
Cette fonction semble récapituler l’initialisation déjà passée random integer between 10 and 100
en revue, mais ce n’est qu’une impression. En effet, comme Use the tab character to indent. Write only the code, no com-
vu précédemment, generate_creatures () instancie Player et ments.
52 [Link]
En réponse de quoi, il génère : contexte pour que ChatGPT commette moins d’erreurs n’est
pas la bonne piste. Je pense qu’il aurait généré une méthode
import random moveTo () correcte si je lui avais indiqué que c’était pour
déplacer une créature sur un terrain. D’ailleurs, je commence
class Creature: une nouvelle conversation pour le vérifier :
def __init__(self, life_points=[Link](10,100), strength=[Link] Write the Python code for two classes:
(10,100), experience=0, coordinates=(0,0)): - a class for a playfield
self.life_points = life_points - a class for a creature
[Link] = strength The playfield class as a constructor which takes the width and
[Link] = experience height of the playfield as arguments.
[Link] = coordinates The creature class has a method moveTo () to move the play-
field. If the provided coordinates are out of the bounds of the
Je remarque qu’en dépit de ce que je lui ai demandé, playfield, it displays a message and returns. Else, it moves the
ChatGPT n’utilise toujours pas de tabulations, mais des creature to the coordinates.
espaces. De plus, il termine en expliquant ce que fait le code. En réponse de quoi, il génère :
Je continue en lui demandant de générer une classe pour le
terrain : class Playfield:
Define a class for a playfield. The attributes are: def __init__(self, width, height):
- width: integer [Link] = width
- height: integer [Link] = height
Add a constructor which sets values for those attributes.
Write only the code, no comments. class Creature:
En réponse de quoi, il génère : def __init__(self, x, y):
self.x = x
class Playfield: self.y = y
def __init__(self, width, height):
[Link] = width def moveTo(self, playfield, x, y):
[Link] = height if x < 0 or x >= [Link] or y < 0 or y >= [Link]:
print(“Cannot move creature outside playfield!”)
Je lui demande de rajouter une méthode pour déplacer une return
créature sur le terrain :
Add a moveTo method to Creature. The arguments are: self.x = x
- a Playfield object self.y = y
- coordinates: a pair of integers (x, y)
The method checks if x fits in the width of the playfield. If not Donc voilà. Tout l’enjeu est de parvenir à positionner le cur-
it displays a message and returns. seur en lui fournissant des informations sur le contexte sans
The method checks if y fits in the height of the playfield. If not toutefois que ce soit ni trop, ni pas assez.
it displays a message and returns. Ensuite, je lui demande :
Else this method updates the coordinates of Creature with x Add a constructor to the creature, which sets life points and
and y. strength as random integers between 10 and 100.
Write only the code, no comments. Write the code for the creature only.
En réponse de quoi, il regénère la classe, ce que j’aurais dû lui Le code généré est correct. Ensuite, je demande :
demander de ne pas faire. Elle contient la nouvelle méthode : Write the code of a class for a player. This class inherits the
class creature. The player as a new attribute: experience, by
def moveTo(self, playfield, coordinates): default set to 0.
if coordinates[0] > [Link] or coordinates[1] > [Link]: Le code généré est correct. Ensuite, je demande :
print(“Coordinates are out of bounds.”) Write the class named Game. The constructor runs like this:
return - it creates a playfield
[Link] = coordinates - it creates a random number between 10 and 100 of crea-
tures
Bon, c’est déjà parti en sucette, puisque ce code ne contrôle - it places each creature at a random and empty location on
pas si une coordonnée est négative, et qu’il contrôle si elle est the playfield
strictement supérieure à la dimension correspondante du ter- - it creates a player
rain alors qu’il faudrait contrôler si elle y est supérieure ou - it places the player at a random and empty location on the
égale. playfield
A ce stade, je réalise déjà qu’il va être extrêmement laborieux Le code généré pour placer les créatures et le joueur fonc-
de parvenir à mes fins si je persiste à être trop précis, car je tionne, mais il est inefficient, pour la raison que j’ai déjà
vais tout simplement me retrouver à écrire le code, sauf que expliquée. Je lui fais modifier :
ce sera en langage naturel. Considérer qu’il faut réduire le Modify this constructor: use the Fisher-Yates algorithm to
[Link] 53
place the creatures and the player at ramdom on the play- for creature in [Link]:
field. [Link]((creature.x, creature.y))
Le code généré n’est pas bon. ChatGPT semble avoir tout assert len(positions) == len([Link]) + 1 # player + creatures
compris de travers. Il mélange une liste des créatures plutôt
que celle des positions, puis place les créatures de manière
inefficiente à des positions inoccupées, puis mélange une C’est du grand n’importe quoi, et c’est assez drôle à la lecture
liste des positions qui n’est même pas celle des positions du commentaire que ChatGPT fait de son code :
occupées, et enfin parcourt cette liste pour positionner le In this test, we first create a Game object with a 10x10 play-
joueur de manière inefficiente à une position inoccupée : field.
Code complet sur [Link] & github We then create an empty set positions to keep track of all the
unique positions of the creatures and the player.
Pour éviter que cela devienne encore plus le bazar si je lui We add the position of the player to the positions set using
demande de mettre de l’ordre, je préfère lui demander de ([Link].x, [Link].y).
rétropédaler… : We then iterate over all the creatures in the [Link]
Restore the previous version of this class list and add their positions to the positions set as well.
…puis je demande, plus clairement à mon sens : Finally, we check that the length of the positions set is equal
Modify this constructor: use the Fisher-Yates algorithm to shuf- to the number of creatures plus one (for the player). This
fle the positions in the playfield, and then use the result to ensures that each creature and the player have a unique posi-
place the creatures and the player at random on the playfield. tion on the playfield.
Ce qu’il génère n’est pas mieux. Je rétropédale donc de nou- Clairement, s’il stocke les positions des créatures plus celle
veau, et je lui demande encore plus explicitement à mon du joueur dans une liste, et qu’il compare la longueur de
sens : cette liste au nombre de créatures plus un, ce test ne risque
Modify the constructor: use the Fisher-Yates algorithm to shuf- pas d’échouer. Vu les problèmes déjà relevés, il ne fallait pas
fle a liste of positions in the playfield, and then use the result- que je m’attendre à des miracles en lui demandant d’écrire
ing list to place the creatures and the player on the playfield. un test, mais je dois reconnaître qu’il a fait fort…
Cette fois-ci, c’est la bonne : J’écris donc mon propre test qui me permet de vérifier que le
code du constructeur de Game est correct, et je continue :
class Game : Add a method play to the class Game. This method contains
def __init__(self, width, height) : an infinite loop that waits for keys to be pressed:
[Link] = Playfield(width, height) - If the key is “Q”, the loops ends.
- If the key is a direction key:
# Create a list of all possible positions in the playfield - Check if the player can be moved in this direction without
positions = [(x, y) for x in range(width) for y in range(height)] exiting the playfield. If no, display a message and continue
the loop.
# Shuffle the positions using the Fisher-Yates algorithm - Else move the player in this direction.
for i in range(len(positions) – 1, 0, -1) : - Check if there is a monster at the new position of the play-
j = [Link](0, i) er. If no, continue the loop.
positions[i], positions[j] = positions[j], positions[i] - Else the player fight the monster. If the player dies, display
a message and continue the loop.
# Create the creatures and place them on the shuffled positions - Else give experience points to the player according to the
[Link] = [] strength of the defeated monster.
for i in range([Link](10, 100)) : À partir de là, tout part en sucette. ChatGPT réécrit le
creature = Creature(0, 0) constructeur auquel j’étais si péniblement parvenu, rajoute
[Link](creature) une méthode qui s’appuie sur un module keyboard dont je ne
creature.x, creature.y = [Link]() dispose pas, se met à halluciner en présumant que la classe
Playfield dispose d’une méthode is_inside () , etc.
# Create the player and place it on a shuffled position Je tente de lui faire redresser le tir, mais il s’enfonce, peut-
[Link] = Player(0, 0) être car plus j’avance, plus le code qu’il a généré sur lequel
[Link].x, [Link].y = [Link]() je souhaiterais qu’il capitalise sort de son contexte.
54 [Link]
de pur émerveillement et d’autres de franche consternation, conception, mais ce ne serait pas vraiment par lui-même, en
comme si l’on conversait avec un enfant de cinq ans qui tien- ce sens où ce serait en rapportant directement – ie : sans
drait parfois des propos parfaitement justes, parfois des pro- générer de texte – des exemples de solutions à des problèmes
pos strictement erronés – et qui décevraient d’autant plus formulés approximativement dans les mêmes termes que
qu’ils suivent les premiers. Dès lors, le doute s’installe : dans ceux dans lesquels on lui décrit le problème, bref en agissant
quelle mesure est-il possible de faire confiance en ChatGPT ? plus comme un moteur de recherche classique. Par exemple,
Anthropomorphisme oblige, plus qu’avec Google, la question il faudrait lui demander (conception) « Quels sont les
de la confiance est posée. Elle va constituer l’enjeu central meilleurs algorithmes pour calculer le plus court chemin entre
pour le succès de ChatGPT, et plus généralement de toute IA deux points ? », puis (formulation, en retenant un des algo-
générative qui pourra bien plus facilement être accusée de rithmes qu’il cite) « Écris une implémentation de l’algorithme
rapporter n’importe quoi – ou tout simplement quelque chose de Dijkstra en Python. » Mais alors, quelle plus-value sur un
de profondément biaisé –, par ailleurs de manière convain- moteur de recherche classique, que l’on interrogerait directe-
cante. L’objectivation de la confiance sera tout un chantier, et ment sur une implémentation de l’algorithme de Dijkstra en
je parie volontiers que des organismes vont surgir, qui condui- Python ?
ront des enquêtes auprès d’utilisateurs et en laboratoire pour Pour conclure, je dirais qu’après une première impression
qualifier le degré de confiance qu’il convient d’accorder à très favorable, car j’ai été bluffé par le fait que ChatGPT
une AI en fonction de ce pourquoi elle est utilisée. génère du code qui semblait répondre à mes besoins, j’ai pris
L’intensité du doute en les capacités de ChatGPT dépend cer- une douche froide en rentrant dans le détail de ce code pour
tainement du domaine, plus particulièrement de la tolérance m’en assurer, et, pour finir, j’ai été usé par les efforts que j’ai
à l’erreur dont il est possible d’y faire preuve, donc de ce qu’il dû déployer, sans succès, pour lui faire redresser la barre.
en coûte de la détecter et de la corriger : ChatGPT peut indéniablement être utile pour écrire du code,
• Si vous demandez à ChatGPT de générer un courrier pour mais à moins de me tromper, on est encore loin de pouvoir
vous plaindre à la DRH du comportement de votre mana- lui demander de générer le code qui répond à un besoin pré-
ger, vous corrigerez sans grand frais une erreur, car s’agis- cis dès lors que ce dernier est un peu élaboré, ou peut-être
sant d’un résultat en langage « naturel », elle sera facile à plus précisément : sur mesure. Mais bon, tel le client de
détecter, ses conséquences seront limitées, et elle sera par Palace que j’évoquais, il ne faut jamais désespérer : quel-
nature simple à corriger – s’il s’agit d’un mot dans une qu’un, un jour, nous livrera bien une IA qui, en matière de
phrase, un autre vous viendra à l’esprit à peine la phrase code, générera autre chose que de la soupe à la moumoute.
relue, ce qui sera presque immédiat. Par ailleurs, vous
aurez sans doute prévu de retoucher ici et là, histoire de Références
personnaliser. Dans ce cas, l’erreur sera donc tolérable, et [1] Fin février, un intéressant article du Washington Post reve-
votre confiance en ChatGPT sera grande. nait sur le sujet : Tech’s hottest new job: AI whisperer. No
• A l’inverse, si vous demandez à ChatGPT de générer le coding required. En plus d’évoquer la possibilité d’être recru-
code d’un jeu d’aventure, corriger une erreur sera nette- té comme prompt engineer à un salaire mirobolant, l’auteur
ment plus coûteux, car s’agissant justement d’un résultat pointait l’existence de places de marché comme PromptBase
qui n’est pas en langage « naturel », l’erreur sera plus dif- pour acheter et vendre des prompts. Nous verrons si cela n’a
ficile à détecter, ses conséquences seront globales – la qu’un temps…
machine est moins tolérante que la DRH, elle ne compren- [2] La scène à découvrir sur YouTube :
dra pas malgré tout –, et elle sera par nature difficile à cor- [Link]
riger – s’il s’agit d’une instruction dans un bloc de code, [3] La scène à découvrir sur YouTube :
vous devrez comprendre le propos de ce bloc et vous figu- [Link]
rer la bonne instruction, ce qui ne sera en rien immédiat.
Par ailleurs, vous n’aurez sans doute pas prévu de retou-
cher, étant plutôt parti sur l’idée de copier-coller. Dans ce
cas, l’erreur ne sera pas tolérable, et le doute en ChatGPT
s’installera.
Pour ce qui concerne le code, le fait que l’on écrit générale-
ment le code d’une solution à un problème en même que
l’on élabore cette solution vient en rajouter. Car si comme
indiqué plus tôt, ChatGPT ne sait pas résoudre un problème,
mais simplement enchaîner des mots pour produire ce qui se
trouve être la plus probable des solutions, alors pour bien uti-
liser ChatGPT il faudrait déjà avoir établi une claire distinc-
tion entre ce qui, dans l’écriture de code que l’on pratique au
quotidien, relève de la conception de la solution, d’une part,
et ce qui relève de la formulation de cette solution, d’autre
part. Si une telle distinction était possible, ce serait alors plu-
tôt pour assister dans la formulation que ChatGPT pourrait
aider. Il ne faudrait pas exclure qu’il puisse aider dans la
[Link] 55
ChatGPT : un géant de l’intelligence
artificielle au service de l’innovation
Philippe Matray
Architecte de solutions /
Lancé le 30 novembre 2022, ChatGPT a créé une véritable révolution en surprenant tout le
Coach technique .NET monde par sa capacité à générer des pages de texte similaires à celles rédigées par des
humains. ChatGPT est devenu l’application web à la croissance la plus rapide de tous les
temps, atteignant 100 millions d’utilisateurs en seulement deux mois. Ce record témoigne
d’un effet waouh, résultant de la pertinence des réponses fournies et des attentes suscitées.
Alors que le modèle GPT-3.5 réussissait de justesse l’examen du barreau en janvier 2023,
il n’aura fallu que 2 mois et la sortie de GPT-4 pour passer du statut d’élève médiocre à
celui de premier de classe. Mais qu’est-ce que ChatGPT et comment peut-il servir les pro-
fessionnels de l’informatique ? C’est ce que nous allons explorer dans cet article.
L’ère des conversations intelligentes : • Gains de productivité : Les outils tels que ChatGPT permet-
À la découverte de ChatGPT tent aux professionnels de l’informatique de gagner du
ChatGPT est un service en ligne, accessible à tous, conçu temps et de l’énergie en automatisant certaines tâches, ce
pour comprendre et générer du texte de manière naturelle, qui leur permet de se concentrer sur des problèmes plus
comme si vous aviez une conversation avec un être humain. complexes et stratégiques. Les métiers techniques sont plus
Le nom “ChatGPT” provient de l’association de deux termes : que jamais au service du business.
“chat” et “GPT”. “Chat” fait référence à la fonction de • Collaboration améliorée : ChatGPT facilite la collaboration
conversation du programme, tandis que “GPT” est l’acrony- entre les membres d’une équipe en permettant un partage
me de “Generative Pre-trained Transformer”, qui est la des connaissances plus fluide et en aidant à la rédaction de
technologie sur laquelle il est basé. documents et à la communication entre les équipes.
Développé par OpenAI, le GPT-4 est une version avancée de • Apprentissage continu : Les professionnels de l’informatique
cette technologie qui utilise un vaste réseau de neurones arti- peuvent utiliser ChatGPT pour se tenir au courant des dernières
ficiels pour traiter et analyser des données textuelles. En avancées technologiques et améliorer leurs compétences en ti-
analysant d’énormes volumes de données provenant rant parti de la vaste base de connaissances de l’IA.
d’Internet ainsi que des corpus de livres, ChatGPT apprend • Innovation accrue : La possibilité d’explorer de nouvelles
des modèles linguistiques pour répondre aux questions ou idées et d’expérimenter rapidement grâce à des outils
aux demandes des utilisateurs de manière naturelle. comme ChatGPT encourage l’innovation et la créativité,
Cependant, lors du lancement de GPT-4, OpenAI a publié un conduisant à de meilleures solutions pour les clients des SSII.
rapport technique de 98 pages qui a suscité des critiques de • Réduction des coûts : L’automatisation de certaines tâches
la part des chercheurs pour son manque de transparence, par ChatGPT et d’autres outils similaires permettent aux
contraire aux valeurs fondatrices de la firme. Le rapport ex- ESN de réduire leurs coûts opérationnels, offrant ainsi un
clut en effet des détails sur l’architecture, la taille du modèle, avantage concurrentiel sur le marché jusqu’à ce que toutes
le hardware, la méthode d’entraînement et la construction les entreprises aient embrassé le changement.
du dataset. Ainsi, GPT-4 est plus secret que ses prédéces-
seurs, marquant un tournant pour l’entreprise initialement Et ça fonctionne comment ChatGPT ?
axée sur l’open source. Malgré cela, grâce à sa formation, L’architecture GPT est basée sur les Transformateurs, qui sont
ChatGPT peut être utilisé dans diverses applications, telles des modèles de traitement du langage naturel développés
que l’assistance virtuelle, la rédaction automatique, la tra- par Vaswani et al. en 2017. Les Transformateurs sont particu-
duction de langues et bien d’autres. Il est cependant lièrement performants pour la modélisation de séquences et
important de noter que ses connaissances sont limitées à la compréhension du contexte à travers de longues distances
celles disponibles jusqu’en septembre 2021, et il peut parfois dans le texte. L’architecture GPT est une version pré-entraî-
fournir des informations obsolètes ou imprécises. née et générative des modèles de Transformateur.
Les principales composantes de l’architecture GPT sont :
Impact sur les professionnels • Encodeur : L’encodeur prend en entrée une séquence de
de l’informatique mots et la convertit en une représentation continue. Il utilise
Le succès fulgurant de ChatGPT et des autres IA génératives des mécanismes d’attention multi-têtes pour comprendre
a un impact significatif sur les professionnels de l’informa- les relations entre les mots et les contextes.
tique, notamment dans les SSII. Voici quelques domaines où • Décodeur : Le décodeur génère une séquence de sortie en
ChatGPT et ses pairs transforment le paysage de l’industrie utilisant les représentations continues produites par l’enco-
informatique : deur. Il utilise également des mécanismes d’attention
56 [Link]
multi-têtes pour comprendre les relations entre les mots et
les contextes.
• Pré-entraînement : L’architecture GPT est pré-entraînée sur
de grands corpus de texte pour apprendre une représenta-
tion générale du langage et des connaissances.
• Fine-tuning : Après le pré-entraînement, le modèle est adapté
à des tâches spécifiques, comme la traduction automatique,
la réponse aux questions ou la génération de texte.
Le modèle GPT-4 est une version améliorée de l’architecture
GPT, avec des milliards de paramètres pour offrir une perfor-
mance supérieure dans diverses tâches de traitement du
langage naturel. Figure 1
Les “transformer blocks” sont les couches principales de l’ar-
chitecture Transformer, qui est à la base des modèles GPT.
Les transformer blocks sont composés d’encodeurs et de dé-
codeurs, qui sont eux-mêmes composés de plusieurs couches
(par exemple, 12 couches pour GPT-2, 24 pour GPT-3, et un
nombre encore plus élevé pour GPT-4).
Chaque couche d’encodeur et de décodeur dans les transfor-
mer blocks comporte deux sous-couches principales :
• Attention multi-têtes : Cette sous-couche permet au modèle
de capter les relations entre les mots d’une séquence, quelle Figure 1
que soit leur distance. L’attention multi-têtes divise les repré-
sentations continues des mots en plusieurs “têtes” et calcule
l’attention pour chacune d’entre elles. Cela permet au mo-
dèle de capturer différentes caractéristiques ou types de
relations entre les mots. Les résultats des différentes têtes
sont ensuite combinés pour former une seule représentation.
• Réseau de neurones feedforward positionnel : Cette sous-
couche est un réseau de neurones feedforward
entièrement connecté, appliqué de manière identique à
chaque position du texte. Elle agit sur les représentations
continues produites par l’attention multi-têtes pour ajouter
une capacité de modélisation supplémentaire.
Entre ces deux sous-couches, il y a aussi des connexions rési-
duelles et des normalisations de couche. Les connexions
résiduelles facilitent le flux d’information à travers le modèle,
tandis que les normalisations de couche stabilisent les activa-
tions, ce qui permet un entraînement plus rapide et une
meilleure généralisation. L’empilement de plusieurs transfor- Figure 2
mer blocks permet au modèle de capturer des relations plus
complexes et des abstractions de haut niveau dans le texte. GPT-2 large, avec 36 couches et 738 millions de paramètres.
Dans le cas de GPT, ces transformer blocks sont utilisés dans Le modèle a été entraîné sur des séquences de protéines pro-
le cadre d’un modèle génératif pré-entraîné pour apprendre venant de la base de données UniRef50.
des représentations linguistiques et des connaissances géné- Dans une étude récente, les chercheurs ont montré que
rales à partir de vastes corpus de texte. ProtGPT2 peut générer des séquences de protéines avec des
propriétés d’acides aminés et de désordre similaires à celles
ProtGPT2 et BioGPT : des protéines naturelles. Les séquences générées sont égale-
des modèles GPT spécialisés ment considérées comme “évolutionnairement” éloignées de
Les architectures GPT sont en train d’être spécialisées pour l’espace protéique actuel, ce qui indique que le modèle ex-
répondre à des besoins spécifiques dans divers domaines, tels plore de nouvelles régions de l’espace des protéines.
que la biologie et les séquences de protéines. ProtGPT2 et ProtGPT2 peut être utilisé pour générer des séquences de
BioGPT sont deux exemples de modèles GPT adaptés pour protéines en quelques secondes sur des stations de travail
des applications spécialisées. standard. Le modèle peut également être adapté pour aug-
menter des familles de protéines spécifiques en fonction des
ProtGPT2 : un modèle GPT pour les besoins de l’utilisateur. ProtGPT2 est disponible sur le dépôt
séquences de protéines HuggingFace et a le potentiel de transformer le domaine de
ProtGPT2 est un modèle GPT conçu spécifiquement pour gé- la conception de protéines et de l’ingénierie des protéines à
nérer des séquences de protéines de novo. Il est basé sur haut débit. Figure 2
[Link] 57
BioGPT : un modèle GPT pour le contenu Les entreprises et les particuliers peuvent utiliser ChatGPT
biomédical pour générer des articles de blog, des descriptions de pro-
BioGPT est un modèle GPT adapté pour traiter du contenu duits, des communications internes et bien d’autres types de
biomédical. Il est basé sur GPT-2 medium, avec 24 couches, textes. L’outil peut également être utilisé pour la rédaction de
16 têtes et 347 millions de paramètres. Le modèle a été en- code ou pour répondre à des questions techniques.
traîné sur des éléments non vides de la base de données
PubMed, totalisant 1,5 million d’articles. En s’appuyant sur Création assistée
les avancées des modèles GPT, BioGPT a le potentiel de révo- Dans le scénario de création d’un site web, l’utilisation de
lutionner le traitement et la génération de contenu dans le quatre assistants facilite grandement le processus. Tout
domaine biomédical. Les applications possibles de BioGPT d’abord, MidJourney peut être employé pour concevoir la
incluent l’extraction d’informations, le résumé automatique maquette du site vitrine, les images d’illustration, le logo... Ce
d’articles de recherche, la découverte de connaissances bio- faisant, il permet de gagner du temps. Le résultat produit
médicales et bien d’autres tâches spécifiques au domaine. devra être retouché par un professionnel mais dans un
ProtGPT2 et BioGPT représentent des applications spéciali- contexte de recherche graphique, c’est un outil précieux.
sées des architectures GPT pour répondre aux besoins Figure 3
spécifiques dans les domaines de la biologie et des sé- Ensuite, ChatGPT intervient pour rédiger du contenu à la fois
quences de protéines. Ces modèles montrent comment les attrayant et informatif, adapté à l’audience cible et aux objec-
modèles GPT peuvent être adaptés pour résoudre des pro- tifs de l’entreprise. Cela permet de créer des textes de qualité
blèmes complexes et spécialisés, ouvrant la voie à de qui captent l’attention des visiteurs et véhiculent efficacement
nouvelles avancées dans divers domaines. le message souhaité. Lorsque la maquette est prête et le
contenu rédigé, GitHub Copilot est utilisé pour développer le
Une évolution du Taylorisme ? code du site vitrine. Cet assistant de codage facilite le dévelop-
Le taylorisme, fondé sur l’optimisation de la productivité par pement en proposant des extraits de code pertinents ainsi que
la division du travail et la standardisation des tâches, a long- la création de tests unitaires et la documentation du code de
temps été un principe directeur dans l’industrie. À l’ère du manière plus rapide et efficace. Enfin, DeepL est employé pour
numérique, le taylorisme a évolué pour inclure la recherche traduire le contenu en différentes langues afin d’atteindre un
de l’efficacité grâce à l’automatisation et l’intelligence artifi- public international. Cette étape garantit une communication
cielle. Les IA génératives, tels que ChatGPT, sont des claire et cohérente pour les visiteurs du site, quelles que soient
exemples concrets de cette évolution, en permettant d’ac- leur langue et leur localisation. Ainsi, en combinant les forces
complir des tâches répétitives rapidement et avec précision. de ces quatre assistants, la création d’un site web profession-
nel devient un processus bien plus fluide et efficace.
Figure 3
Développement d’une CLI utilisant
l’API ChatGPT-3.5 Turbo Figure 4
L’extrait de code suivant, en C#11, est conçu pour générer
un argumentaire de vente en utilisant l’API GPT-3.5 Turbo
d’OpenAI. Le code met l’accent sur les techniques de prompt
engineering pour guider l’intelligence artificielle afin qu’elle
génère un texte de qualité. Le prompt engineering consiste à
optimiser la manière dont on communique avec le modèle
pour obtenir les résultats souhaités. La communication avec
les API de d’OpenAI se fait ici grâce au package NuGet
[Link].GPT3.
58 [Link]
Nom du produit : {[Link]}
Prix : {[Link]}
Caractéristiques : {[Link]}
Avantages : {[Link]}
“”“),
}
};
[Link] 59
HN Services :
changer les codes autour du mainframe
HN Services est une ESN qui accompagne
ses clients dans la transformation
numérique de leurs activités. L’entreprise
imagine des solutions innovantes pour
répondre aux besoins applicatifs des clients,
crée le code, teste avant de mettre en
production, puis supervise et maintient en
condition opérationnelle des millions de
lignes. Sur le plan technologique, HN
Services se revendique comme un acteur
complet du langage Cobol encore très
présent dans les applications bancaires et
assurantielles jusqu’aux technologies
digitales les plus évoluées.
L
e mainframe occupe toujours nécessiter de réécriture. IBM n’a
une place prépondérante formation constitue une pépinière jamais cessé d’investir sur ce
dans les entreprises de
externe, les pour les compétences mainframe et langage historique et les mises à
grande envergure qui mènent
deux ? Un moyen un réel bénéfice pour nos clients. Ce jour sont constantes grâce à la
beaucoup de leurs opérations d’accroitre les savoir-faire est important pour nos livraison continue de nouvelles
stratégiques sur les grands systèmes. profils Cobol ? marchés en France comme à optimisations et fonctionnalités. Le
Ce dernier tend à évoluer Les talents sont la clé de voute de l’international. virage DB2 sur mainframe n’a pas
aujourd’hui vers des technologies notre métier. En 1989, nous avons toujours été simple et l’arrivée de
plus modernes basées sur créé notre propre institut de IBM fait évoluer Java a constitué un défi
l’innovation, l’agilité et le DevOps. formation HN Institut avec pour régulièrement les supplémentaire. Notre rôle est de
Avec plus de 500 personnes dédiées objectif de répondre à trois grandes comprendre vers quoi tendent nos
en France et en Europe, HN problématiques : le déséquilibre
systèmes Z/OS. clients et de les accompagner au
Services bénéficie d’une importante entre l’offre et de la demande sur le Comment HN plus près de leurs objectifs.
expertise sur le legacy mainframe / marché de l’IT, un manque Services voit le
cobol et le secteur bancaire d’accessibilité et de débouchés marché et ses Dans l’architecture
représente 60% de son chiffre métier pour les parcours évolutions ? on trouve
d’affaires. Les projets conduits par scientifiques et enfin, le manque
HN sont principalement axés sur la d’appétence, de formation et de Les 850 milliards de lignes Cobol des modèles
maintenance et le support applicatif. compétences sur le langage Cobol qui aujourd’hui constituent la hybrides :
bien que ce dernier continue encore majeure partie du patrimoine du mainframe en
HN Service fait de à supporter une grande partie des code mondial démontrent qu’il reste back et des apps
applications critiques. Les un langage sur lequel les entreprises
la formation : compétences Cobol déclinent en continuent à s’appuyer et à investir.
front. Ce n’est pas
pourquoi une telle effet, année après année, à mesure Les programmes Cobol fonctionnent
une nouveauté,
activité ? que les développeurs expérimentés depuis des décennies sans nous l’avions avec
60 [Link]
le web to host Comment les
dans les années mainframes
2000. On voit deviennent agiles,
aussi apparaître et se modernisent ?
d’autres mots : La question ici n’est pas de savoir si
cloud, migration, le mainframe est assez agile mais
replatforming. bel et bien comme on le disait plus
Quelles réalités tôt de disposer des processus et des
donner à ces outils adéquats pour accélérer les
cycles d'innovation. Une démarche
mots ? Agile/Scrum/DevOps va répondre
Le mainframe est la plateforme aux enjeux de développement et de
idéale pour exploiter à la fois les livraison en permettant aux équipes
systèmes distribués et cloud. Notre de travailler de manière itérative et
constat du marché aujourd’hui est créer du code de qualité pour les
que le cloud ne bouleverse pas métiers. Cela demande une
véritablement le legacy, peu de organisation un peu plus complexe
demandes de migration émanent que sur des nouvelles technologies
dans ce sens de la part de nos mais aussi un environnement de
clients. L’enjeu est de savoir développement moderne sans
comment déplacer sur le cloud des conflits entre les accès.
ressources legacy encore sur un projet existant, un coût de choix assez radical qui va lui
fonctionnelles sans forcément La structuration refactorisation est corrélé. Si on part demander sans doute de mettre en
réécrire les assets tout en prenant le du code passe par de zéro, on le fera plus facilement. place des étapes intermédiaires.
risque d’être obsolète, de casser C’est un débat récurrent en
l’existant et donc d’impacter la
son architecture. développement. Le passage d'un langage distribué
production. Même si IBM continue à Comment très simplifié à un langage « low
innover et cela est rassurant, le rendre Qui freinent le level » de type Cobol peut s'avérer
attention cependant au décalage modulaire ? plus ? DSI ? complexe pour les développeurs
par rapport à la réalité. Les banques Si Cobol est un langage rigide, il est offrant moins de place pour créer de
par exemple hésitent à investir cependant possible de créer des
Finance, la valeur. Il est donc nécessaire de
massivement pour renouveler et sous programmes dits modularisés, Direction ? pallier la problématique
faire évoluer leurs mainframes. Cela c’est à dire de découper un Un peu tous finalement, certaines d'appauvrissement des ressources
peut être lié à la crainte d’une fin traitement en encapsulant les entreprises peuvent être plus qualifiées et le manque de
du support IBM et du déficit de fonctions pour rendre le code plus matures que d’autres à l’instar de formations dans les écoles en
compétences chez les dev. Elles facilement réutilisable et ainsi FedEx qui a annoncé son intention acculturant directement les
chercheront plutôt à ajouter de la paralléliser les tâches. On ne passe de sortir du mainframe pour aller ressources afin d’alimenter les ESN
valeur ajoutée sur des services pas à un code multi module comme vers le cloud, conscient des risques et les entreprises. Le moyen aussi de
stratégiques. cela. Il faut réarchitecturer. Si on est tout en assumant son choix. Un renforcer l’attractivité du langage.
[Link] 61
Construire son ordinateur 8-bit PARTIE 2
Cet article fait suite à la partie 1 parue dans Programmez! 256 qui présentait mon projet
Olivier HUBER
de création d’un ordinateur 8-bit à l’aide de circuits intégrés simples. Nous étions res-
Senior Partner Solution tés sur l’architecture haut niveau et son fonctionnement sur un programme basique.
Architect @Aiven Nous allons cette fois-ci rentrer dans la construction proprement dite avec l’explication
J’interviens depuis plus
de 24 ans en des schémas de chaque module un par un. Enjoy !
développement, conseil,
formation, conférence L’ordinateur est construit en 2 parties : module “input” et copie de ce nombre dans le registre B
pour des clients, écoles,
Une première partie, construite avec un nombre minimum de • Copie du résultat de l’addition des valeurs des 2 registres A
et B dans le registre ∑
associations que ce soit
sur des sujets techniques modules, est capable d’additionner 2 nombres de 8 bits
ou autres. Selon moi, chacun et d’en afficher le résultat en décimal. • Affichage en décimal de la valeur du registre ∑ dans le
notre métier Chaque opération est, par contre, manuelle et il faut donc module Output
d’informaticien est l’un activer les puces à l’aide d’interrupteurs pour faire Une seconde partie, où l’on ajoute quelques modules,
des rares à nous donner
la capacité de transitionner nos valeurs d’un module à l’autre. permet d’automatiser (ou de programmer) la totalité des
matérialiser une idée Voici pour rappel le schéma simplifié : Figure 1 manipulations manuelles précédentes et donc l’ordinateur
rapidement et à faible L’exécution d’un programme d’exemple d’addition de 2 fonctionne seul sans intervention humaine.
coût. Passionné de nombres se fait donc pas à pas avec la génération manuelle
création tout court, je du signal d’horloge depuis le module “Control”. 1ER PARTIE - MODE MANUEL
passe beaucoup de
temps sur mes projets • Saisie du nombre 0101 en binaire (5 en décimal) dans le L’ordinateur possède 4 registres de 8-bits chacun :
électroniques et du module “input” et copie de ce nombre dans le registre A • 2 registres A et B servent à stocker nos 2 opérandes
tournage sur bois. • Saisie du nombre 0011 en binaire (3 en décimal) dans le • 1 registre ∑ pour stocker le résultat de la somme, calculé
par notre ALU (additionneur)
• 1 registre Output qui va être connecté à un afficheur en
décimal.
Registre B
Ce registre est constitué de 2 circuits intégrés 74HC173
(contenant chacun 4 D Flip-Flop) capable donc de stocker 4
bits chacun.
Ses entrées :
• Les 8 bits de données [BUS_0 - BUS_7] venant du bus
• Un signal de remise à zéro (Reset) du registre
• Le signal d’horloge (Clock) qui va “activer” la sauvegarde
dans le registre
Figure 1 • Le signal (BI) pour “B register Input” en logique inversée
(c.a.d. actif si potentiel à 0 et inactif si 1) qui va “autoriser”
ou non l’enregistrement des données dans le registre au
signal d’horloge
Ses sorties :
• Les 8 bits de données [B_0 - B_7] vers l’additionneur
Les Flip-Flop sont configurés avec leurs sorties toujours
actives et cela pour toujours avoir leur contenu affiché au
travers des 8 LED connectées à leur sortie.
Cela complexifie un peu l’architecture, mais c’est ce qui nous
permet de “voir” le contenu des registres du processeur à
tout moment, ce qui est le but de ce projet.
Sur les schémas, LSB signifie “Least Significant Bit” soit “bit
de poids faible” et correspond à la LED la plus à droite et
MSB signifie “Most Significant Bit” soit “bit de poids fort” et
correspond à la LED la plus à gauche.
Le chiffre 5 en décimal se lira donc bien 00000101 en
binaire sur les LED de notre processeur.
Chacun des registres que l’on va créer aura donc a minima
cette configuration. Figures 2
Figures 2
62 [Link]
Figure 4 • Le signal d’horloge (Clock) qui va “activer” la sauvegarde
dans le registre
• Le signal (∑I) pour “∑ register Input” en logique inversée
(c.à.d. actif si potentiel à 0 et inactif si 1) qui va “autoriser”
ou non l’enregistrement des données dans le registre au
signal d’horloge
• Le signal (∑O) pour “∑ register Output” en logique
inversée (c.à.d. actif si potentiel à 0 et inactif si 1) qui va
“autoriser” ou non la sortie des données vers le BUS (sens
A vers B sur le schéma).
Ses sorties :
• Les 8 bits de données [BUS_0 - BUS_7] vers le bus.
Figures 5
Registre A
Ce registre va avoir quant à lui la possibilité supplémentaire
(en plus de pouvoir lire sa valeur depuis le bus) d’écrire sa
valeur sur le bus. Mais étant donné que l’on active en
permanence la sortie de nos registres pour pouvoir en
afficher le contenu sur des LED, on va devoir rajouter un
circuit intégré permettant de contrôler à nouveau l’écriture
du contenu de notre registre sur le bus. On ajoute donc la
puce 74HC245 qui permet de faire ce tampon. Le registre A
possède les mêmes entrées/sorties que le registre B auquel Figures 3
on y ajoute le signal d’entrée (AO) pour “A register Output”
en logique inversée (c.à.d. actif si potentiel à 0 et inactif si 1)
qui va “autoriser” ou non le passage de nos données vers le
BUS (sens A vers B sur le schéma). Figures 3
Registre ∑ et ALU
Notre ALU (Arithmetic and Logical Unit), Unité arithmétique
et logique en français, n’est en fait qu’une unité arithmétique
Figures 5
et même simplement un additionneur pour la version
simplifiée de cet ordinateur. On va donc utiliser 2 puces
74HC283 (contenant chacune un additionneur complet 4-
bit). Pour avoir un additionneur 8-bit complet on va chaîner
la retenue de sortie (Carry out) du premier vers la retenue
d’entrée (Carry in) du second. On va tirer la retenue d’entrée
du premier additionneur à zéro et on va pour le moment
ignorer la retenue de sortie du second. Vous pourriez y
ajouter une LED par exemple pour identifier un débordement
(Overflow) si notre addition dépasse la capacité de
l’additionneur.
Voici le schéma partiel avec les 8 sorties de notre ALU qui
vont vers l’entrée du registre de somme ∑. Figure 4
Le schéma complet du module est donc constitué de :
Ses entrées :
• Les 8 bits de données [A_0 - A_7] venant du registre A
• Les 8 bits de données [B_0 - B_7] venant du registre B
• Un signal de remise à zéro (Reset) du registre
[Link] 63
qu’il n’y a qu’un afficheur dans cette version simplifiée, il
n’affichera que les valeurs de 0 à 9 en décimal. Je vous invite
à voir le module de Ben Eater [Link] pour
afficher sur plusieurs décimales.
Le registre de ce module est exactement le même que le
registre B.
Et pour la conversion BCD (Binary Coded Decimal), j’utilise
la puce 74HC4511. Figures 6
Input
On va s’intéresser maintenant au module “Input” qui va nous
Figures 6
permettre de saisir 8 bits de données à travers le bus vers nos
registres A ou B.
Pour ce faire nous avons besoin de 8 interrupteurs, mais nous
allons tout de même y ajouter la puce 74HC245 vue
précédemment afin de contrôler (activer ou non) l’écriture sur
le bus à l’aide d’un interrupteur.
Ses entrées :
• Le signal (IO) pour “Input Output” en logique inversée
(c.a.d. actif si potentiel à 0 et inactif si 1) qui va “autoriser”
ou non le passage des données vers le bus
Ses sorties :
• Les 8 bits de données [BUS_0 - BUS_7] vers le bus.
Figures 7
Control
Ce module pourrait être omis étant donné qu’il n’ajoute pas
de logique à notre ordinateur.
Son but est de nous simplifier la vie en “tirant” chaque signal
de chaque module vers lui-même pour pouvoir activer ou non
chaque puce depuis celui-ci.
Figures 7 J’en ai profité pour ajouter la puce 74HC04 (possédant 6
inverseurs) pour inverser la logique de chaque signal pour
être dans une logique positive (un potentiel de 5v va activer
la puce) qui nous permet aussi d’ajouter des LED qui
s’allumeront donc pour montrer l’activation (ou non) de
chaque signal.
Vous noterez que je n’ai pas fait cela pour le module Input et
donc la LED du signal (IO) indique que l’on écrit sur le bus
lorsque la LED est éteinte (ce qui est une logique négative).
On va également ajouter un bouton pour générer le signal
d’horloge (Clock) et un autre bouton pour générer le signal
de remise à zéro (Reset).
Voici un rappel de chaque signal de sortie présent sur le
schéma ci-dessous :
AI A Register Input (from Bus)
AO A Register Output (to Bus)
∑I ALU Register Input (from A+B)
∑O ALU Register Output (to Bus)
BI B Register Input (from Bus)
OI Output Register Input (from Bus). Figures 8
64 [Link]
EEPROM Microcode/Opcode
On a vu dans l’article précédent que la première action
d’automatisation était de nous créer un premier niveau
d’indirection en codant l’activation des différents signaux
dans une mémoire. Comme cela, au lieu par exemple,
d’activer les signaux ∑O (somme out) et OI (display in) pour
afficher le résultat de l’addition dans le module d’affichage
décimal, il nous suffit de stocker nos 7 signaux dans une
EEPROM par exemple à l’adresse 3.
Et ensuite lorsque l’on veut “exécuter” cette action, il nous
suffit de chercher à l’adresse 3 pour retrouver la combinaison
de nos 7 bits pour les rediriger vers nos signaux respectifs et
ainsi activer les bons signaux.
On a donc une correspondance avec une adresse mémoire -
que l’on appellera aussi Opcode (3 dans notre exemple) et
une activation des signaux ∑O et OI dans notre exemple.
Et vous remarquerez que si l’on donne un nom à cette action
comme “OUT ∑”, on se retrouve à avoir créé notre propre
langage assembleur ;)
Voici un tableau de correspondance possible :
Figures 9
[Link] 65
Figures 10
Program Counter
Nous ne sommes plus loin de l’automatisation totale, car il
nous suffit maintenant d’activer une par une les quatre
premières adresses de notre RAM et de générer notre signal
d’horloge et notre programme exécutera donc ces quatre
lignes de code. Dans un processeur, le compteur ordinal ou
pointeur d’instruction (en anglais : instruction pointer ou
program counter souvent nommé PC) est le registre qui
contient l’adresse mémoire de l’instruction en cours
d’exécution.
Figures 11
Dans notre cas j’ai simplifié au maximum pour n’utiliser
qu’un compteur sans registre.
J’ai dans ce module utilisé une puce 74HC112 (contenant 2
JK Flip-Flop) pour créer un compteur de 0 à 3 (00, 01, 10,
11 en binaire) qui boucle donc sur lui-même. Je lui ai ajouté
un affichage en décimal qui reprend le schéma du module
d’affichage vu plus haut. Figures 12
Signal d’horloge
La touche finale vient dans la création d’un signal d’horloge
qui va activer tel un métronome toutes les puces de notre
ordinateur en même temps. Et pour ce faire et toujours dans
un souci d’utiliser des composants les plus simples possible,
j’ai fait le choix de créer un multivibrateur astable à l’aide de
composants discrets (2 transistors BJT NPN, 2 condensateurs
et des résistances). Pour nettoyer le signal et le rendre plus
“carré” je passe la sortie du multivibrateur dans une puce
74HC14 (Inverter Schmitt trigger). Figures 13
Figures 12
Conclusion
Une fois tous ces modules assemblés, on a un ordinateur
fonctionnel qui peut être programmé et exécuter du code
sans intervention humaine. Figure 14
Fun Fact
Certains auront remarqué que cet ordinateur ne possède pas
d’instruction de saut ou de branchement. C’est d’ailleurs une
évolution possible toute trouvée de cet ordinateur.
66 [Link]
Maintenant si vous observez bien et comme notre compteur
de programme (program counter) boucle, on peut considérer
que la cinquième instruction est un saut vers la première
instruction ;)
Figure 14
[Link] 67
Nua : un PaaS open source pour
simplifier l’auto-hébergement des
Stefane Fermigier
est le créateur du projet
Nua et le fondateur de
applications web
la société Abilian. Nua est un projet de plateforme de cloud (un PaaS - platform as a service) open source
Pendant ses études de
mathématiques, il a et auto-hébergé. Plus qu’une simple plateforme technique, il vise à couvrir le cycle de
plongé dans le logiciel
libre dès le début des
vie complet des applicatifs web, du développement (et du packaging) au déploiement
années 90, et dans le puis au maintien en conditions opérationnelles, en incluant la sécurité. Il s’adresse
langage Python en
1996. notamment aux organisations qui souhaitent, ou doivent, mettre en œuvre une stratégie
d’autonomie numérique, et à ce titre se dirigent en priorité vers le logiciel libre.
Vision d’ensemble du projet frameworks web du marché (Django, Rails, Laravel…) le
Le projet Nua est né d’un double besoin au sein de la société plus simple possible.
Abilian : • Sécuriser l’ensemble de la chaîne d’approvisionnement
• Utiliser le meilleur des logiciels libres pour ses besoins logicielle en appliquant les pratiques actuelles ou émer-
internes : outils de développement (bug-tracker, intégration gentes, notamment la notion de “SBOM” (software bill of
Jérôme continue…), outils de communication et de collaboration material).
Dumonteil (Wiki, bureautique web, messagerie, visio…), outils de ges- • Couvrir directement les besoins courants, tout en rendant
est lead developer du tion (facturation, ERP, RH…), outils marketing (sites web, la plateforme extensible (par des plugins) afin de per-
projet Nua. Il possède newsletters…), etc. Avec les contraintes propres à une mettre l’utilisation de technologies émergentes ou plus
une expérience avérée
PME : simplifier le déploiement et l’intégration, minimiser confidentielles. Figure 1
dans le logiciel libre
(Mandriva Linux, Ars les coûts d’hébergement et l’effort consacré à la mainte-
Aperta), avec comme nance et aux montées de version, assurer le maintien en Le cycle de vie des applications Nua
langages favoris Python conditions opérationnelles, notamment la sécurité et la Nua est un ensemble d’applications Python pilotables depuis
et Cython. résilience face aux aléas du matériel et du réseau. la ligne de commande qui permettent de gérer l’ensemble du
• Mettre à disposition de ses clients et prospects, en mode SaaS, cycle de vie des applications :
autant les applications développées par la société que des • Le build : ce sont les étapes qui aboutissent à la création et
applications tierces, intégrées en fonction de leurs besoins, en à la validation d’une “image Docker” (plus précisément,
tenant compte des mêmes contraintes que ci-dessus. d’une image OCI).
Forte d’une longue expérience de l’administration système • Le run : le déploiement de l’application sur un serveur conte-
Linux, du packaging de logiciels pour les distributions Linux, nant l’orchestrateur et plus généralement l’environnement
Abilian de Docker et des principaux PaaS du marché, l’équipe de d’exécution Nua, son monitoring, la gestion de la sécurité et
est une entreprise du développement de Nua a ainsi entrepris il y a 2 ans de ratio- des backups, et l’application des mises à jour. Figure 2
logiciel libre française naliser les outils et les méthodologies développés, expérimen-
créée en 2012. Elle
développe des tés ou utilisés en interne pour en faire un produit open sour- Le build
applications de gestion ce, qui réponde notamment au besoin des développeurs de Le “build” consiste à créer une image de conteneur propre à
de l’information et de déployer facilement, en mode test, démo ou production, une être exécutée dans l’environnement de déploiement, à partir
collaboration pour les ou plusieurs instances d’applications, que celles-ci soient d’un fichier nua-config qui décrit l’application, de ses sources et
entreprises et les développées en interne ou par des tiers. éventuellement d’autres fichiers utiles. Cette image inclut
administrations,
principalement en Cette vision s’appuie sur un ensemble de principes : notamment :
utilisant le langage • Privilégier, autant que possible, la configuration déclarative • Un système d’exploitation minimisé, en l’occurrence,
Python. plutôt qu’impérative, et les conventions plutôt que la confi- Ubuntu LTS — cela peut changer à l’avenir,
guration explicite, en évitant les duplications d’information. • L’ensemble des dépendances nécessaires à la bonne
• S’appuyer, lorsqu’elles existent, sur des technologies éprou- marche de l’application : bibliothèques systèmes, exécu-
vées et déjà largement diffusées : le langage Python, les tables, bibliothèques propres à la ou aux technologies uti-
standards de containers OCI (Open Container Initiative), la lisées par l’application…
plateforme Docker (sans toutefois ignorer les autres tech- • Le code compilé de l’application dans le cas d’un langage
nologies d’isolation et d’orchestration qui peuvent être per- compilé, ou l’ensemble des scripts nécessaires dans le cas
tinentes pour certains usages). d’un langage de script,
• Aligner les méthodes de développement et l’expérience • L’ensemble des fichiers additionnels nécessaires (configu-
développeur sur les best practices des PaaS du marché, ration, templates…).
notamment la philosophie des “12 factor apps”. Rendre le Elle inclut par ailleurs les fichiers de métadonnées générés
déploiement d’applications s’appuyant sur les principaux par Nua qui serviront ensuite lors des phases de run.
68 [Link]
Figure 1 : carte conceptuelle du projet Nua)
Figure 2 : le cycle
Le build est actuellement basée sur Docker : Nua génère une de la plateforme : SlapOS, Podman, LXC, Firecracker, Kata de vie des
applications gérées
image dédiée au build, un Dockerfile générique, et lance un doc- Containers, Nomad, Kubernetes… par Nua.
ker build en injectant les variables nécessaires. D’autres
méthodes de build pourront être envisagées (sous forme de Les mises à jour
plugins) à l’avenir. La vie d’une application ne s’arrêtant pas à son déploiement,
De manière alternative, cette phase de build peut également Nua permet d’intégrer les upgrades de logiciels et les migra-
être réalisée à partir d’un Dockerfile préexistant. Dans ce cas, tions de schéma de données dans le processus de déploie-
Nua se contente d’exécuter le build Docker et d’ajouter ses ment. Cette phase, qui peut être risquée lorsqu’on a affaire à
métadonnées à l’image générée. une application en production, est sécurisée par l’application
d’un protocole de test.
Le déploiement
À partir de l’image créée lors du build, l’orchestrateur de Nua Les backups
va déployer une ou plusieurs instances de l’application, en Autre aspect essentiel, mais parfois négligé, pour tout systè-
prenant soin de créer ou d’allouer, puis de lui affecter les res- me en production : les sauvegardes et la reprise sur incident.
sources nécessaires, dont notamment un nom de domaine Nua permet de définir simplement une politique de backup,
(bien évidemment, Nua prend en charge la gestion des cer- soit globale, soit au niveau de chaque application (voire de
tificats TLS). chaque type de données gérées par une application). Nua
Le déploiement se fait actuellement sur un serveur configuré fournit des garanties fortes, et testables, qu’un système peut
avec l’ensemble des services nécessaires à l’environnement être remonté à partir d’un backup (stocké sur un site externe,
Nua, et notamment un serveur Docker. D’autres environne- par exemple un système de stockage objet compatible avec
ments d’exécution seront ciblés dans des versions ultérieures l’API S3).
[Link] 69
Configurer un projet Nua : étendu par plugins. Lorsqu’un Dockerfile existe déjà, celui-ci
le fichier [Link] peut être explicitement pris en compte par Nua, qui réalisera
C’est la pierre angulaire d’une application gérée par Nua. Ce le build directement à l’aide de ce Dockerfile, et ajoutera à
fichier centralise les métadonnées qui décrivent l’application, l’image créée par Docker les métadonnées spécifiées dans le
la description des étapes du build d’une application, des res- nua-config ainsi que les autres fichiers utiles pour le runtime,
sources requises (bases de données…) et des valeurs par le cas échéant.
défaut (environnement, fichiers de configuration).
[build]
Le contenu de ce fichier est interprété à toutes les étapes du
builder = “node-14”
cycle de vie d’une application gérée par Nua : dans un pre-
run-packages = [
mier temps, lors du build, pour fabriquer une image OCI puis,
“fontconfig”,
lors du run, par l’orchestrateur pour déployer une ou plu-
“fonts-noto”
sieurs instances de l’image, avec l’ensemble des ressources
]
qui leur sont nécessaires, puis les maintenir en conditions
build-packages = [
opérationnelles. La syntaxe utilisée est celle du langage
“build-essential”,
TOML, mais Nua accepte aussi YAML et JSON.
“python3-dev”,
“libsqlite3-dev”,
Un exemple commenté de fichier nua-config:
“netcat”,
HedgeDoc
“libicu-dev”,
HedgeDoc ([Link] est une application d’édition
“libssl-dev”,
collaborative de documents au format Markdown, l’une des
“git”,
premières à avoir été packagée avec Nua. C’est une applica-
]
tion Nodejs qui utilise les outils de build classique pour cet
test = “test -f /nua/build/hedgedoc/[Link]”
écosystème : [Link] et npm.
Les déclarations de la section build reposent autant que pos-
Section metadata sible sur un mode déclaratif, de l’auto-détection et des fichiers
Le fichier [Link] comprend pour commencer un bloc de par défaut. Ici, il s’agit d’une application Node, ce qui est nor-
métadonnées décrit de manière classique l’application : malement auto-détecté par la présence d’un fichier [Link].
Néanmoins, la version actuelle de Hedgedoc nécessitant une
[metadata]
version spécifique de Node, cet élément de configuration doit
id = “hedgedoc”
être spécifié par la directive builder = “node-14”.
version = “1.9.6”
Les build-packages sont des paquets nécessaires à la phase de “com-
release = 13
pilation” de l’application, mais qui peuvent être retirés ensuite,
title = “Hedgedoc”
dans l’optique d’obtenir une image de taille raisonnable.
author = “Hedgedoc developers”
Enfin, la balise test déclare un “smoke test” permettant de
tagline = “The best platform to write and share markdown”
vérifier la bonne installation de l’application.
website = “[Link]
En plus de ces déclarations, si l’outil nua-build détecte un dos-
tags = [“Markdown”, “Documentation”, “Collaboration”]
sier local nommé nua/, son contenu pris en compte et inclus
license = “AGPL-3.0 license”
dans l’image. Si un fichier nommé [Link] est détecté, il sera
src-url = “[Link]
exécuté en complément. De même, un fichier [Link] peut
hedgedoc-{version}.[Link]”
contenir les directives de démarrage du conteneur. Tous ces
checksum = “dfd0fca006f9075f072df058476ea542adb32b63964afb2985211e1114ab
éléments sont configurables dans la section build.
333e”
70 [Link]
Les variables d’environnement déclarées dans le fichier nua- Le volume peut s’accompagner d’une directive de sauvegar-
config peuvent être modifiées lors du démarrage d’une instan- de. Comme pour les variables d’environnement, ces directives
ce. Cette caractéristique permet à la fois: peuvent être modifiées lors du déploiement d’une instance.
• Le déploiement simplifié d’une application pour les cas Par exemple, une instance de test ou de démo n’a pas les
standards, mêmes besoins de backup qu’une instance de production.
• Le réglage fin si besoin, notamment pour le cas du déploie-
ment parallèle de plusieurs instances de la même application. Liste de directives resource
Une partie de ces variables dans l’exemple ci-dessus sont Enfin, la directive resource permet de déclarer une ressource, à
dynamiques. L’orchestrateur de Nua établit une passerelle savoir une application ou un service. Il peut s’agir d’un servi-
entre l’application principale et une ressource annexe (ici un ce local ou distant, ou ici d’un conteneur.
service de base de données déclaré plus bas, nommé “data-
[[resource]]
base”). Chaque directive permet d’affecter à une variable de
name = “database”
l’environnement de l’application une propriété de la ressour-
type = “postgres”
ce (par exemple, l’adresse du “host” sur le réseau, le nom de
version = “>=14, <15”
la base…). Ces variables dynamiques permettent d’autres
fonctionnalités comme la génération automatique de noms
[[Link]]
ou de mots de passe.
method = “pg_dumpall”
Pour les applications qui ne sont pas programmées pour être
destination = “local”
configurées via des variables d’environnement, un mécanis-
frequency = “24h”
me de génération de fichiers de config, via un langage de
templates comme Jinja, est prévu. Ici, cette déclaration demande à l’orchestrateur un conteneur
de type base de données Postgres version 14. Le nom “database”
Directive port est utilisé plus haut dans la configuration pour communiquer
Cette directive permet de lister les ports à configurer par l’or- à l’application les caractéristiques de la base créée (nom de
chestrateur. Ici un port nommé “web” est déclaré, et l’appli- la base, mot de passe, etc). Comme pour les volumes, une
cation fournit un service sur le port 3000. Par défaut il s’agit directive de sauvegarde peut être spécifiée.
du protocole TCP, il sera routé ultérieurement par l’orchestra-
teur sur un nom de domaine. Le déploiement
À partir des images préparées lors du build, l’orchestrateur de
[[Link]]
Nua peut créer la ou les instances de l’application, en lui
container = 3000
affectant les ressources nécessaires :
Section healthcheck
nua deploy —image=nua-hedgedoc:1.9.6 —domain=[Link]
La directive healthcheck permet de déclarer une configuration
de suivi de l’application. Actuellement, il s’agit d’une simple Les paramètres de déploiement peuvent être spécifiés soit en
transcription de la commande HEALTHCHECK de Docker, le for- ligne de commande, soit dans un fichier de config (distinct de nua-
mat de conteneurs sous-jacent. config), ce qui est utile lorsque l’on souhaite automatiser le déploie-
ment de tout un ensemble d’applications et/ou de services.
[healthcheck]
command = “node /nua/build/hedgedoc/[Link]”
Statut actuel et perspectives
interval = 10
Nua est un logiciel libre, en développement actif sur le site
Liste de directives volume [Link]
Il est possible de déclarer des espaces de stockage de diffé- Nua est utilisé en interne chez Abilian depuis plusieurs mois
rents types. Par défaut le type “volume” est un espace géré pour héberger des applications non critiques, et une première
localement par le serveur Docker. D’autres types de volumes version bêta a été publiée en février 2023.
sont disponibles (bind pour les ressources locales gérées Le projet va continuer à s’enrichir avec notamment :
manuellement, tmpfs, ou tout type de ressource distante dis- • la constitution d’un catalogue d’applications ;
posant d’un driver pour Docker. La valeur de la balise prefix • la création d’une interface web de gestion de l’orchestra-
sera complétée par le nom de l’instance (nom du domaine teur, qui s’adressera à des utilisateurs moins à l’aise avec
servi) pour avoir un nom de volume unique à l’instance. l’interface en ligne de commande actuellement disponible ;
• le support de plus d’outils et de profils de build, d’environ-
[[volume]]
nements d’exécution, de services ;
type = “volume”
• l’intégration, en amont et en aval, de plus d’outils liés à la
prefix = “hedgedoc_uploads”
sécurité, par exemple : scanners de vulnérabilité, firewall,
target = “/hedgedoc/public/uploads”
authentification centralisée.
Nua est un projet ambitieux, nous avons bon espoir qu’il
[[Link]]
répondra à des besoins concrets, au-delà des nôtres : nous
method = “sync”
sommes à l’écoute des remarques et commentaires de la
destination = “local”
communauté du logiciel libre.
frequency = “24h”
Site web du projet : [Link]
[Link] 71
Intégration et livraison continues
sécurisées sur GCP PARTIE 2
Laurent En préambule, je tiens a remercier Olivier Dupré, Tony Jarriault ainsi que Sandra Parlant pour la relecture de cet article,
Grangeau ainsi que leurs précieux conseils.
Solutions Architect
chez Google. Dans ce dossier en plusieurs parties, nous allons découvrir comment mettre en place
Il est également de l’intégration continue et de la livraison continue avec GCP. Nous allons pour cela
l'organisateur du meetup
Serverless Paris, ainsi utiliser Cloud Build et Cloud Deploy afin de packager et déployer une application sur
que co-organisateur des
meetups Kubernetes et
Cloud Run.
Docker Paris. Il a
développé dans plusieurs Cloud Run Cloud Run est également intégré à d’autres services de GCP,
langages, Google Cloud Run est un service de déploiement et d’exécu- tels que Cloud Build, Cloud Logging, Cloud Monitoring et
principalement orientés tion de conteneurs sur GCP. Il permet aux développeurs de Cloud Trace, pour fournir une vue complète du processus de
objet comme Java ou déployer des applications conteneurisées de manière simple déploiement et de fonctionnement des applications. Il permet
C#. Depuis plusieurs
années, il aide les et rapide, sans avoir à gérer les infrastructures sous-jacentes. aux équipes de suivre les performances des applications, de
entreprises à adopter le C’est l’offre Serverless de déploiement de conteneurs de GCP. recevoir des alertes en cas de problème et de visualiser les
cloud, ainsi que les journaux pour résoudre les problèmes éventuels.
principes DevOps. Il a Avec Cloud Run, les développeurs peuvent déployer des
de l'expérience dans la applications conteneurisées en quelques minutes, en utilisant En résumé, Google Cloud Run est un service de déploiement
construction de
microservices et de des images Docker existantes ou en créant des images à par- de conteneurs sur GCP qui permet aux développeurs de
systèmes distribués. Il tir de fichiers de configuration de construction tels que déployer et d’exécuter des applications conteneurisées rapi-
aime automatiser les Dockerfile. Une fois déployées, les applications s’exécutent dement et facilement, sans avoir à gérer les infrastructures
choses et exécuter des automatiquement sur des instances de machines virtuelles sous-jacentes. Il offre une scalabilité automatique, une inté-
applications distribuées gérées par GCP, sans avoir besoin de gérer les instances ou gration transparente avec d’autres services de GCP et des
à l'échelle.
les réseaux sous-jacents. fonctionnalités de mise à l’échelle pour répondre aux besoins
spécifiques des applications.
Cloud Run prend en charge des conteneurs basés sur Linux
et Windows, et permet de déployer des applications écrites Pour pouvoir définir les caractéristiques d’un déploiement sur
dans de nombreux langages de programmation tels que Go, Cloud Run, nous allons créer un fichier nommé [Link]
Java, Python, [Link], C#, etc. Il prend également en charge contenant les lignes suivantes :
les protocoles de communication standard comme HTTP et
gRPC, ce qui permet aux développeurs de créer des applica- apiVersion: [Link]/v1
tions web, des microservices et des API. kind: Service
metadata:
Une des principales caractéristiques de Cloud Run est sa sca- name: spring-petclinic-dev
labilité automatique. Il permet aux applications de s’adapter spec:
automatiquement aux demandes de charge en ajoutant ou template:
en supprimant des instances de machines virtuelles, ce qui metadata:
permet d’optimiser les coûts et les performances. Il offre éga- annotations:
lement des fonctionnalités de mise à l’échelle verticale et [Link]/minScale: 1
horizontale pour les applications ayant des besoins spéci- [Link]/maxScale: 10
fiques. spec:
Figure 1 containers:
- image: spring-petclinic
72 [Link]
Cependant, si nous essayons d’aller sur l’URL généré, nous
recevons une erreur HTTP 403: Error: Forbidden.
[Link] 73
[Link]/binary-authorization: default
fichiers contiennent pour l’instant la même chose que le
spec:
fichier de l’environnement de développement, au nom prêt.
template:
Nous pourrions ici ajouter des spécificités propres à chaque
metadata:
environnement comme une mise à l’échelle accrue sur l’en-
annotations:
vironnement de production :
[Link]/minScale: 1
[Link]/maxScale: 10
apiVersion: [Link]/v1
spec:
kind: Service
containers:
metadata:
- image: spring-petclinic
name: spring-petclinic-staging
spec: Une fois ces trois environnements définis, nous pouvons alors
template: promouvoir la Release en environnement de staging, puis
metadata: promouvoir la Release en environnement de production,
annotations: après avoir fait une revue du déploiement. Figure 3
[Link]/minScale: 1
[Link]/maxScale: 10 Nous avons donc maintenant un pipeline complet de
spec: déploiement d’une application depuis le code source jusqu’à
containers: Cloud Run, avec une revue manuelle par des pairs pour le
- image: spring-petclinic passage en production. Le passage d’un environnement à un
autre (par exemple de l’environnement de développement à
apiVersion: [Link]/v1 l’environnement de staging) se fait par la promotion de la
kind: Service Release. Figure 4
metadata:
name: spring-petclinic-prod Cependant, comme nous l’avons vu au début de cet article,
Figure 3 annotations: il y a de plus en plus d’attaques sur la Supply Chain afin d’es-
sayer de corrompre la création, mais aussi le déploiement
des applications en injectant par exemple un malware dès la
compilation du code source. Il serait intéressant de pouvoir se
prémunir de ce genre d’attaques. Il existe un service chez
GCP qui permet de ne déployer que des images qui ont été
signées et validées, qui s’appelle Binary Authorization.
Binary Authorization
Google Cloud Binary Authorization est un service de sécurité
proposé par GCP qui permet aux entreprises de s’assurer que
les images de conteneurs utilisées dans leur environnement
de production proviennent de sources fiables et sont
conformes aux politiques de sécurité de l’entreprise. Il est
conçu pour protéger les applications conteneurisées contre
les menaces de sécurité, telles que les logiciels malveillants et
les vulnérabilités de sécurité.
Avec Binary Authorization, les entreprises peuvent définir des
politiques de sécurité pour les images de conteneurs qui sont
autorisées à être déployées dans leur environnement de pro-
duction. Ces politiques peuvent inclure des exigences de
signature numérique, de conformité, de tests ou encore de
provenance des images.
Figure 4
74 [Link]
Lorsqu’une image de conteneur est prête à être déployée,
Binary Authorization vérifie automatiquement si elle respecte
les politiques de sécurité définies. Si l’image ne respecte pas
les politiques, elle est bloquée et ne peut pas être déployée,
ce qui empêche les images non conformes ou potentielle-
ment dangereuses d’être exécutées dans l’environnement de
production.
Binary Authorization est intégré à d’autres services de GCP
tels que Kubernetes Engine, Cloud Build et Container
Registry pour fournir une protection de bout en bout pour les
images de conteneurs. Il peut également être intégré avec
des outils de gestion de conformité tels que Stackdriver pour Ensuite, nous allons modifier les fichiers Service afin d’activer Figure 5
fournir des informations sur la conformité des images aux Binary Authorization sur Cloud Run. Ces fichiers devraient
politiques de sécurité. ressembler à ceci :
En résumé, Google Cloud Binary Authorization est un service
de sécurité qui permet aux entreprises de protéger leurs appli- apiVersion: [Link]/v1
cations conteneurisées contre les menaces de sécurité en véri- kind: Service
fiant automatiquement que les images utilisées dans leur metadata:
environnement de production respectent les politiques de name: spring-petclinic-dev
sécurité définies. Il offre une intégration transparente avec annotations:
d’autres services de GCP et des outils de gestion de conformi- [Link]/binary-authorization: default
té pour une meilleure visibilité et une meilleure protection des spec:
images de conteneurs. template:
Le principe de Binary Authorization est de créer des attesta- metadata:
tions qui certifient qu’une image a bien été créée en respec- annotations:
tant les politiques de sécurité de l’entreprise. Ces attestations [Link]/minScale: 1
sont des signatures numériques cryptographiques générées [Link]/maxScale: 10
en utilisant des clés stockées dans Cloud Key Management spec:
Service. Par exemple, nous pourrions très bien imaginer de containers:
ne pouvoir déployer que des images qui ont été construites - image: spring-petclinic
par la chaîne d’intégration continue, et non pas directement
sur un poste de travail. Mais nous pourrions aussi imaginer Notez l’ajout de l’annotation [Link]/binary-
avoir plusieurs environnements de déploiement (dev -> test - authorization: default qui active Binary Authorization.
> qa -> préprod -> prod) qui valident à chaque fois que
l’image est conforme et que les tests automatisés passent sur Cependant, si nous essayons de déployer ce service dans
chaque environnement, créant une attestation à chaque fois. Cloud Run, le déploiement ne fonctionnera pas, car Binary
Figure 5 Authorization a été activé et par défaut, Binary Authorization
bloque toutes les images. Nous allons modifier cette politique
Dans ce diagramme : afin d’autoriser uniquement les images qui ont été
Le code pour construire l’image du conteneur est poussé construites par Cloud Build.
vers un dépôt de sources. Dans un premier temps, il faut exporter la politique par
Cloud Build construit et teste le conteneur. défaut :
La construction pousse l’image du conteneur vers
gcloud container binauthz policy export > /tmp/[Link]
Artifact Registry.
Cloud Key Management Service, qui assure la gestion Ensuite, il faut modifier le fichier [Link] afin qu’il res-
des clés pour la paire de clés cryptographiques, signe semble à ceci :
l’image du conteneur. La signature résultante est ensuite
stockée dans une attestation nouvellement créée. defaultAdmissionRule:
Au moment du déploiement, l’attestor vérifie l’attesta- enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
tion à l’aide de la clé publique de la paire de clés. Binary evaluationMode: REQUIRE_ATTESTATION
Authorization applique la politique en exigeant des requireAttestationsBy:
attestations signées pour déployer l’image du conteneur. - projects/lgu-demos/attestors/built-by-cloud-build
Ainsi, nous sommes sûrs que l’image déployée respecte la etag: ‘“fBDUv8pxU08u”‘
politique de sécurité lors de toutes les étapes. globalPolicyEvaluationMode: ENABLE
Pour activer Binary Authorization sur Cloud Run, il faut name: projects/lgu-demos/policy
d’abord activer les APIs correspondants. updateTime: ‘2022-06-24T[Link].581071Z’
gcloud services enable [Link] [Link] La partie importante est le bloc requireAttestationsBy qui
.com [Link] doit contenir l’URL de votre projet projects/[PROJECT]/
[Link] 75
args:
attestors/built-by-cloud-build. L’attestor devrait être créé
- “—artifact-url”
automatiquement lors de l’activation de Binary Authorization.
- “[Link]/lgu-demos/spring-projects/spring-petclinic:
Si l’attestor n’existe pas, relancer Cloud Build pour construire
${SHORT_SHA}”
une image et l’attestor devrait être créé.
- “—attestor”
Enfin, il faut importer la nouvelle politique dans Binary
- “projects/${PROJECT_ID}/attestors/built-by-cloud-build”
Authorization :
- “—keyversion”
gcloud container binauthz policy import /tmp/[Link] - “projects/${PROJECT_ID}/locations/europe-west1/keyRings/binauthz-attestors/
cryptoKeys/binauthz-signing-key/cryptoKeyVersions/1”
Nous avons maintenant une politique qui va autoriser uni-
quement le déploiement des images signé par Cloud Build.
# Create a new release with Cloud Deploy
- id: Create a Cloud Deploy release
La prochaine étape est de mettre en place toutes les briques
name: ‘[Link]/cloud-builders/gcloud’
nécessaires pour pouvoir signer les images. Pour cela, nous
args:
allons utiliser une image de la communauté qui s’occupera
[
de poser une attestation sur l’image lors du build Cloud Build.
‘deploy’,
Le code source est disponible ici : [Link]
‘releases’,
Platform/cloud-builders-community/tree/master/binauthz-attestation
‘create’,
Après avoir récupéré le code source, il faut lancer la création
‘run-release-${SHORT_SHA}’,
et le déploiement de l’image avec la commande :
‘—skaffold-version=skaffold_preview’,
‘—region’,
git clone [Link]
‘europe-west1’,
‘—delivery-pipeline’,
cd binauthz-attestation
‘cloud-run-pipeline’,
‘—build-artifacts’,
gcloud builds submit . —config [Link]
‘[Link]’
]
Cela aura pour effet de créer l’image binauthz-attestation
dans le projet courant. Ensuite, il faut activer Cloud KMS et
créer les clés de signature nécessaires dans Cloud KMS : Le pipeline va alors créer et pousser l’image, créer sa signa-
ture puis déclencher Cloud Deploy pour déployer l’image sur
gcloud services enable [Link] les différents environnements.
gcloud kms keys create binauthz-signing-key \ La dernière étape d’un pipeline de livraison continue sécurisé
—keyring binauthz-attestor \ est l’analyse de sécurité des dépendances de l’application.
—location europe-west1 \ Artifact Registry permet justement de scanner les dépen-
—purpose “asymmetric-signing” \ dances présentes dans une image afin de détecter une ou
—default-algorithm “ec-sign-p256-sha256” plusieurs CVE qui pourraient impacter la sécurité de l’appli-
cation.
Puis ajouter la clé publique de signature à l’attestor :
Artifact Registry
gcloud alpha container binauthz attestors public-keys add —attestor=built-by-cloud Google Cloud Artifact Registry est un service de gestion des
-build —keyversion-project=lgu-demos —keyversion-location=europe-west1 — artefacts proposé par GCP qui permet aux équipes de déve-
keyversion-keyring=binauthz-attestor —keyversion-key=binauthz-signing-key — loppement de stocker, gérer et distribuer des livrables de
keyversion=1 construction tels que des images de conteneurs, des biblio-
thèques de packages et des fichiers binaires. Il est conçu pour
Nous sommes maintenant parés pour ajouter la signature de faciliter la gestion des dépendances et des versions des
l’image lors de sa construction. Il faut alors modifier le fichier livrables, tout en garantissant la qualité et la sécurité de ces
[Link] afin qu’il ressemble à ceci : éléments.
76 [Link]
bibliothèques de packages, les fichiers binaires et les fichiers
de configuration. Il peut également intégrer avec d’autres
outils de construction tels que Cloud Build, Skaffold,
Spinnaker pour générer automatiquement des livrables et les
stocker dans les référentiels.
Une des principales caractéristiques de Cloud Artifact
Registry est sa sécurité.
Pour activer le scan automatique des CVE de toutes les nou-
velles images poussées sur Artifact Registry, il faut activer
l’API de scan automatique :
[Link] 77
Infrastructure As Code avec
OVHcloud PARTIE 2
Olivier Beautier Aujourd’hui, de plus en plus d’entreprises et de particuliers utilisent les services Cloud.
DevRel chez OVHcloud
Gitpod Community Hero
La nature de ceux-ci est très variée, et peut dépendre du fournisseur de services choisi.
Comédien improvisateur Chez OVHcloud, la gamme est assez large et couvre la majorité des besoins actuels :
@raclepoulpe Bare Metal & VPS (Virtual Private Server), Hosted Private Cloud, Hébergement web &
Domaines, Public Cloud, Télécom, etc..
Floating IP Figure 5 module “floatip” {
La dernière étape est la création d’un adresse IP flottante source = “../../modules/floating_ip”
(Floating IP). depends_on = [[Link]]
Une Floating IP est une adresse IP statique publique floatip = {
permettant d’exposer des services et offrant une grande region = [Link]
flexibilité. Ce type d’adresse IP peut être assigné à une component_id = [Link].instance_id
instance ou à une fonction réseau telle que le Load Balancer, }
avant d’être rapidement ré-assigné. }
Quelles sont les autres méthodes pour accéder à une La variable principale du module est la variable floatip,
instance, dans le cadre de l’utilisation d’un réseau privé ? déclarée dans le fichier [Link] tel que :
Parmi les nombreuses architectures possibles, sans l’usage
variable “floatip” {
d’une Floating IP, une pratique courante est de configurer son
description = “Floating IP”
instance avec une deuxième interface réseau, connectée au
type = object({
réseau public et s’étant attribué une adresse publique. Ceci
region = string
implique plusieurs étapes de configuration supplémentaires.
component_id = string
En effet, qui dit plusieurs interfaces réseau, dit invariablement
})
mise en place de règles de routage, et donc disposer de
default = {
connaissance réseau spécifique.
region = “”
Ajoutons à cela que la génération d’une machine virtuelle
component_id = “”
avec plusieurs interfaces sort des cas d’usage simple des
}
outils d’infrastructure as code et en complexifie l’usage.
}
C’est en partie pour éviter cette surcharge de complexité que
nous avons fait le choix de l’usage d’une Floating IP, mais Il n’y a pas de valeurs additionnelles, car les informations
aussi pour profiter des avantages de ce produit : disposer nécessaires sont fournies par le module bastion.
d’un adresse IP “semi-fixe”, sur laquelle nous pouvons figer L’information principale est l’identifiant OpenStack de
une résolution DNS,et tout en pouvant la connecter et la l’instance, sur laquelle la Floating IP va venir se brancher. On
déconnecter à loisir sur des des instances. a déjà indiqué cette valeur dans la définition du module :
Dernier avantage, c’est complètement transparent de côté
component_id = [Link].instance_id
de l’instance, car complètement gérée par la gestion des
interfaces par OpenStack. Voici tout ce qu’il faut savoir pour paramétrer et instancier
L’instance est donc être paramétrée avec une seule interface, une infrastructure minimale en réseau privé, sur l’offre Public
en mode DHCP, sur le réseau privé. Cloud. Pour déployer cet exemple, il suffit juste d’exécuter ces
L’appel au module floatip se fait dans le fichier [Link] : deux commandes :
terraform init
Outputs:
bastion_floating_ip = “[Link]”
bastion_private_ip = “[Link]”
78 [Link]
Ces variables sont définies dans le fichier [Link] de Page de l’exemple n°2 :
l’exemple, elles font référence aux variables elles-mêmes [Link]
définies dans les fichiers [Link] des modules.
Côté exemple leur définition est faite de la sorte : Base de donnée managée MongoDB
De quoi a-t-on besoin pour ajouter notre BDD à notre projet ?
output “bastion_floating_ip” {
D’appeler dans un premier temps un module dédié à cette
description = “Bastion public IP (via Floating IP)”
fonction :
value = [Link].floating_ip
} # Managed MongoDB Database
module “db_engine” {
output “bastion_private_ip” { source = “../../modules/database/mongodb_pvnw”
description = “Bastion private IP” depends_on = [[Link]]
value = [Link].instance_private_ip region = [Link]
} db_engine = var.db_engine
}
Cela implique que le module floatip ait déclaré une variable
output nommée floating_ip : Ce module est alimenté d’une variable principale db_engine
définie dans le fichier [Link] tel que :
output “floating_ip” {
description = “Floating IP address” # Database Engine
value = openstack_networking_floatingip_v2.[Link]
} variable “db_engine” {
description = “Db Engine parameters”
et que le module instance_simple est lui déclaré une variable
type = object({
output nommée instance_private_ip :
region = string
output “instance_private_ip” { pv_network_name = string
description = “Instance private IP” subnet_name = string
value = openstack_compute_instance_v2.simple_instance.network[0].fixed_ip_v4 description = string
} engine = string
version = string
Pour tester la configuration, utilisez votre client SSH et la clé
plan = string
SSH privée générée à la racine de l’exemple, en utilisant les
flavor = string
valeurs définies dans le fichier [Link].
user_name = string
Par exemple une commande SSH classique de type
user_role = list(string)
ssh -i <fichier de clé privée> <utilisateur>@<adresse IP distante> allowed_ip = list(string)
})
donne ici :
}
$ ssh -i myMainKeypair_rsa ubuntu@[Link]
Et que vous pouvez renseigner via le fichier [Link] tel que :
Après acceptation de l’empreinte de la clé, vous obtenez le
db_engine = {
prompt sur la machine distante :
region = “GRA”
ubuntu@bastion:~$ pv_network_name = “myNetwork”
subnet_name = “mySubnet”
Pour tout supprimer, utiliser la commande :
description = “myMongoDb”
terraform apply -var-file=[Link] engine = “mongodb”
version = “6.0”
Voilà pour l’explication en détail de ce premier exemple.
plan = “business”
flavor = “db1-7”
Ajoutons maintenant une base de données et
user_name = “myuser”
de l’Ansible
user_role = [“readWriteAnyDatabase”]
Il est temps de compléter l’infra avec ce que nous propose
allowed_ip = [“[Link]/24”]
notre catalogue de services chez OVHcloud, et intéressons-
}
nous au deuxième exemple du projet GitHub : Une instance
virtuelle sur laquelle est installée un client mongosh, et une La base de données sera rendue accessible sur le sous-
base de donnée managée MongoDB, le tout dans un réseau réseau défini par la variable allowed_ip, car le module prend
privé. en charge automatiquement la gestion des restrictions
Ce deuxième exemple est intéressant en deux points. D’une d’accès par adresse IP (IP restriction).
part, il montre comment ajouter la création d’une base de Ces quelques lignes suffisent donc à intégrer une base de
données managée dans ce même environnement réseau données managée dans votre infrastructure. Vous pouvez
privé, et d’autre part, il montre comment accéder à une ainsi intégrer d’autres moteurs tels que : MySQL,
instance pour y installer des produits supplémentaires. PostgreSQL, MongoDB (y compris la version Enterprise),
[Link] 79
instance_public_ip = [Link].floating_ip
Redis, Kafka, Opensearch, Kafka MirrorMaker, Kafka
instance_user_name = [Link]
Connect, Grafana, Cassandra, M3DB et M3 Aggregator.
ssh_private_key_name = [Link]
Toutes les références de moteurs de bases de donnée :
})
[Link]
filename = “${[Link]}/apps/hosts”
file_permission = “0644”
Intégration d’Ansible dans Terraform
}
Ansible est l’autre référence IaC, l’objet de cet article n’étant
pas de comparer l’un par rapport à l’autre, mais plutôt de Ici nous communiquons à Ansible les trois variables
profiter de leur complémentarité. instance_public_ip, instance_user_name et ssh_private_key
Néanmoins, dans cet exemple, nous utilisons Terraform pour qui vont être remplacées dans le fichier templates/[Link]
le déploiement des composants d’infrastructure, tel que vu pour générer le fichier apps/hosts.
précédemment, et donnons ensuite la main à Ansible pour la
partie logicielle et paramétrage. Comment organiser ses Deuxième phase d’intégration : fichiers de variables
fichiers entre le Terraform et Ansible ? Ici, un répertoire apps Ces fichiers n’apparaissent pas dans cet exemple, mais c’est
est créé à la racine de l’exemple Terraform, pour Ansible ce le même principe que précédemment, pour le cas où vous
sera son répertoire racine référencé par la variable {{ voudriez générer un fichier de variables Ansible à partir de
inventory_dir }}. Dans ce répertoire, nous essayons de valeurs issues de Terraform. Exemple :
respecter les bonnes pratiques Ansible. On y retrouve les
définitions de tâches organisées par rôles. # Ansible variables file
resource “local_file” “ansible_vars_all” {
.
content = templatefile(“./templates/[Link]”, {
|—— apps
region = [Link]
| |—— [Link]
component_id = [Link].instance_id
| |—— group_vars
})
| |—— І—— all
І—— roles filename = “${[Link]}/apps/group_vars/all”
|
file_permission = “0644”
| |—— І—— mongoshell
І—— tasks }
| |——|
| |——| | І—— [Link]
Troisième phase d’intégration : Exécution du playbook
Première phase d’intégration : créer le fichier Pour séquencer l’exécution du playbook Ansible à la suite des
d’inventaire hosts étapes Terraform, on utilise la ressource spéciale
Ne connaissant pas forcément à l’avance la valeur de null_resource, avec le provisionner local-exec. Ce
l’adresse IP fournie à la génération de l’instance et de la provisionner nous permet d’exécuter une commande shell, à
Floating IP, il convient de manipuler le fichier d’inventaire savoir la commande ansible-playbook :
Ansible hosts.
# Ansible Execution - Mongoshell Installation
La technique employée est l’utilisation de la ressource
resource “null_resource” “ansible_exec” {
local_file, qui, basée sur un fichier modèle (template)
depends_on = [local_file.ansible_config]
[Link], va intégrer les variables utiles :
triggers = { always_run = “${timestamp()}” }
# Ansible inventory file provisioner “local-exec” {
resource “local_file” “ansible_config” { command = “ansible-playbook -i apps/hosts apps/[Link]”
content = templatefile(“./templates/[Link]”, { }
}
Figure 6 Nous ajoutons un trigger basé sur le timestamp afin de
forcer l’exécution de ce playbook à chaque application de vos
fichiers de configuration Terraform.
Voilà comment en trois étapes supplémentaires nous
pouvons faire interagir Terraform et Ansible.
Cluster Kubernetes
Jetons un oeil maintenant à notre troisième exemple. Nous y
retrouvons les composants de base, donc un réseau privé
routé (réseau sur lequel des règles de routage sont
appliquées), une base de données MySQL, et un cluster
Kubernetes. Figure 6
Page de l’exemple n°3 :
[Link]
Le principe est le même que pour les autres composants,
c’est-à-dire l’appel à un module :
80 [Link]
resource “local_file” “kubeconfig_file” {
module “kube” { depends_on = [[Link]]
source = “../../modules/kubernetes/k8s_pvnw” content = [Link].kubeconfig_file
depends_on = [[Link]] file_permission = “0644”
region = [Link] filename = “kubeconfig_file”
kube = [Link] }
pool = [Link]
} Il faut ensuite paramétrer le provider pour lui indiquer la localisation
du fichier kubeconfig, et ensuite le contexte Kubernetes (utilisateur
Ce module est alimenté par deux variables, une pour le et nom du cluster) associé à la configuration :
cluster Kubernetes (kube) et une autre pour la définition du
provider “helm” {
pool de noeuds associé au cluster (pool). La définition des
kubernetes {
deux variables se trouve dans le fichier [Link] :
config_path = “kubeconfig_file”
# Managed Kubernetes Cluster config_context = “kubernetes-admin@mykubernetesCluster”
variable “kube” { }
description = “Managed Kubernetes Cluster parameters” }
type = object({
Ensuite, nous utilisons et paramétrons la ressource
name = string
helm_release pour y indiquer les variables de la base de
pv_network_name = string
données :
gateway_ip = string
Code complet sur [Link] & github
})
}
Après le déploiement de cet exemple, grâce aux commandes
terraform init et terraform apply identiques à celles vues
variable “pool” {
précédemment, l’application Wordpress est accessible via un
description = “Node Pool parameters”
service Kubernetes de type Load-Balancer, dont l’adresse IP
type = object({
a été attribuée automatiquement.
name = string
Pour obtenir cette adresse IP, on utilise la CLI de Kubernetes
flavor = string
kubectl, après l’avoir configuré :
desired_nodes = string
max_nodes = string export KUBECONFIG=”$PWD/kubeconfig_file”
min_nodes = string kubectl get svc wordpress
})
Vous obtenez une résultat de ce type :
}
NAME TYPE CLUSTER-IPEXTERNAL-IP PORT(S) AGE
On positionne nos valeurs dans le fichier [Link] tel que :
wordpress LoadBalancer [Link] [Link] 3h2m
# Managed Kubernetes Cluster 80:31746/TCP,
kube = { 443:30304/TCP
name = “mykubernetesCluster”
L’adresse IP recherchée est celle indiquée par EXTERNAL-IP
pv_network_name = “myNetwork”
Vous pouvez maintenant commencer à utiliser le Wordpress.
gateway_ip = “[Link]”
}
Pour conclure
Voici donc quelques exemples d’utilisation de notre offre
pool = {
Public Cloud via les outils d’Infrastructure as Code. Le
name = “mypool”
provider Terraform OVHcloud couvre aussi les autres offres,
flavor = “b2-7”
n’hésitez pas à vous tenir à jour sur les nouveautés. Le liste
desired_nodes = “3”
d’exemples possibles étant proportionnelle aux nombres de
max_nodes = “6”
produits mis à disposition par OVHcloud, vous comprendrez
min_nodes = “3”
facilement qu’il reste encore beaucoup de place pour de
}
nouveaux exemples. Vous pouvez être contributrice ou
Le paramètre gateway_ip correspond à l’adresse IP du routeur contributeur, et faire profiter de votre expertise pour y ajouter
associé au réseau. Par convention c’est la première adresse IP vos propres exemples, ou tout simplement solliciter des cas
de la plage d’adresse du sous-réseau. Nous ajoutons ensuite précis, nous trouverons toujours quelqu’un d’aussi
la définition d’une ressource local_file qui permet de sauver le passionné.e que vous l’êtes !
fichier kubeconfig à la création du cluster :
[Link] 81
Directives de compilation
Abonnement
Abonnement (tarifs France) : 55 € pour 1 an,
Maquette
82 [Link]
CONFÉRENCE DÉVELOPPEUR