Dot.Blog

C#, XAML, WinUI, WPF, Android, MAUI, IoT, IA, ChatGPT, Prompt Engineering

Le poids des habitudes en matière de développement

Bonnes ou mauvaise, les habitudes pèsent, souvent par inertie et sans remise en question. Et si le problème n'étaient pas les mauvaises habitudes mais tout simplement d'avoir des habitudes ?

La taille du cul des vaches 

Rappelez-vous, il y a de de cela longtemps circulait sur Internet une histoire (vraie ou fausse peu importe) qui démontrait que le diamètre des fusées de la Nasa dépendait, par une suite invraisemblable de relations de cause à effet, de la taille du cul des vaches au temps des romains. On passait par la taille des charriots dont la largeur dépendait justement de celle du fessier de ces honorables bovins, ce qui imposait une distance entre les roues, elles-mêmes créant des traces au sol qui firent que les premières voitures à cheval, pour emprunter les routes aux ornières profondes tracées par les charrues se devaient de respecter la même distance inter-roue, etc. On en arrivait ainsi au diamètre des fusées qui, pour passer sur les trains, qui devaient passer dans les tunels, dont la taille dépendait etc, etc... Au final un objet ultra technologique et on ne plus moderne se retrouvait à respecter une taille qui dérivait de celle du cul des vaches des romains...

Je n'ai pas pu retrouver le lien vers cette histoire pour vous mettre la référence, si un lecteur la connaît qu'il l'indique dans les commentaires...

Une histoire plus vraie qu'on le pense 

Bien entendu je n'ai jamais pu savoir à l'époque s'il s'agissait d'un hoax, d'une vérité romancée ou bien d'une vérité historique.  Et puis cela n'a pas tant d'importance car même si cette histoire est une affabulation, l'histoire que je vais vous raconter aujourd'hui me fait penser, des années plus tard, que cette amusante fable était probablement vraie...

Les couleurs sous WPF et MAUI

24 bit RGB 

En Xaml il existe plusieurs façons d'exprimer une couleur. Une des options est d'utiliser la notation 24 bits hexadécimale de type RGB (Red/Green/Blue, rouge/vert/bleu) :

<Rectangle Fill="#B2AAFF" Stroke="#10F2DA" ... />   	

32 bit ARGB 

Comme WPF et MAUI savent gérer la transparence via le canal dit Alpha, on peut spécifier une couleur par un code hexadécimal 32 bits dit A-RGB (Alpha / RGB) :

<Line Stroke="#7F006666" ... />

Ce qui donnera un rectangle en Cyan à 50% d'opacité.

scRGB

Plus subtile et bien moins connu (et encore moins utilisée) est la notation scRGB qui permet d'exprimer une couleur sous la forme de 4 nombres décimaux de type Single ce qui autorise la représentation d'un gamut ultra large. Les composantes de la couleur étant représentées par des nombres plus grand, si on applique des effets ou des traitements il y aura moins de dégradations visuelles.

Un exemple de notation scRGB :

 <Rectangle Stroke="sc#1, 0.6046357, 0.223508522, 0.182969958" Fill="sc#1, 0.7785599, 1, 0"
      RadiusX="25" RadiusY="25" Width="250" Height="80" StrokeThickness="5" Margin="60" />  

(Cela donne un rectangle jaune à bords arrondis bistres).

Toutefois cette notation très intéressante n'est pas présente sous MAUI, je la fournis ici car je compare MAUI et WPF qui lui supporte cette façon d'exprimer une couleur. Très entre-nous je ne crois pas avoir jamais vu un code WPF utiliser ce mode et je pense que presque aucun développeur WPF et même Silverlight ne sait que cela existe... Raison pour laquelle très certainement MAUI n'a pas repris cette fonctionnalité. Mais elle a existé sous Silverlight et existe toujours dans WPF, cela peut être bon à savoir.

Les couleurs nommées

Enfin, il est possible d'utiliser des noms pour définir des couleurs.

On peut ainsi utiliser des noms tels que : Green, SteelBlue ou MediumVioletRed. Ce qui donne en XAML :

<Rectangle Stroke="yellow" Fill="red" Width ="50" Height="50" />

Le bord est bien jaune mais il faut de bons yeux !  :-) 

Et le cul des vaches ?

C'est là que l'affaire devient croustillante... Attendez la suite pour juger !

Par souci de compatibilité avec HTML et SVG, Microsoft a repris la liste des couleurs définies dans ces standards. Une bonne idée, on a souvent accusé Microsoft de ne pas respecter les standards, ce que j'ai toujours trouvé idiot puisque justement l'innovation vient de ce qui est différent et non de l'uniformisation. Et bien justement, quand les développeurs de chez Microsoft se plient à cette servile obligation, cela donne des choses bien curieuses (à l'insu de leur plein gré comme disait l'idiot pédaleur).

En effet, la liste des couleurs HTML est pleine de bizarreries et d'idiosyncrasies qu'il eut été préférable de corriger. Expurgée de ces anomalies la liste des couleurs HTML aurait pu faire une belle liste pour le XAML de WPF, mais voilà, compatibilité oblige (en fait rien ne l'obligeait, sauf les habitudes), on se retrouve dans l'un des environnements de développement le plus moderne à l'époque, et toujours le XAML le plus complet à ce jour, trainer des bêtises d'un autre âge ! La fameuse taille du cul des vaches au temps des romains influençant le diamètre des fusées de la Nasa... Pire, WPF est maintenant ancien (Framework .NET 3.0 en 2006 !) alors... Mais non ! Le cul des vaches est toujours présent puisque dans MAUI, l'actuel produit phare en XAML, ces drôles de noms, par souci d'une compatibilité approximative, ont été repris ! Si !!!

Par exemple, le spectre couvert par les couleurs HTML ne respecte pas même une répartition à peu près homogène, ce qui fait qu'on dispose de très nombreuses teintes dans les rouges ou les oranges alors que les verts sont très mal couverts.

Autre exemple, les couleurs ont parfois des noms ésotériques qui montrent à quel point les auteurs originaux n'avaient aucune volonté de rendre l'ensemble compréhensible. En dehors d'un américain pure souche, qui peut bien, en Italie, en France ou en Slovénie s'imaginer de quel bleu il s'agit lorsque HTML nous indique un "DodgerBlue" ? La charte couleur des T-shirts d'une équipe d'un sport totalement inconnu (le baseball) chez nous n'évoque rien (les dodgers sont en effet une équipe de baseball de Los Angeles, très connus certes, mais uniquement des américains et des rares amateurs étrangers).

Des origines encore plus lointaines

Mais si cela s'arrêtait là le rapprochement avec la petite histoire sur l'arrière train des vaches pourrait sembler un peu capillotractée. En fait nous sommes toujours exactement dans le même cas. Car les choses ne s'arrêtent pas à HTML. Ces couleurs remontent en réalité aux premières implémentations sous UNIX du système X-Window ! HTML définit 16 couleurs qui sont directement mappées sur les 16 couleurs de la palette EGA. Mais plus loin encore, les premiers browsers comme Mosaic (1992) supportaient aussi les couleurs nommées de X11 ! Malheureusement certaines couleurs HTML avaient des homonymes X11 qui, bien entendu, ne donnait pas exactement la même teinte... 

Un gris plus foncé que le gris foncé ?

Et c'est ainsi que de tout ce mélange le Gray HTML fut défini par #808080 alors que le DarkGray est défini par #A9A9A9, un gris plus clair que le gris...

On en revient à la question posée dans le titre de ce billet. Et vous voyez que la réponse est loin d'être celle qui semble s'imposer en toute logique !

WPF et MAUI réutilisent cette liste de couleurs qui ne remonte pas aux temps des romains, mais pour l'informatique, l'époque de X11 c'est même pire : de la préhistoire !

Du coup, il semble bien plus intelligent d'utiliser les codes couleurs RGB, ARGB ou scRGB (sous WPF) que les couleurs nommées si on ne veut pas obtenir des résultats étranges... En tout cas il ne faut absolument pas se fier aux noms des couleurs pour s'imaginer leur teinte réelle.

Incroyable non ?

On pourrait tirer milles conclusions de cette petite histoire. Je vous laisse y réfléchir, je préfère ouvrir des portes que d'asséner des vérités définitives. Poser des questions ou inciter au questionnement est souvent bien plus utile que d'apporter des réponses toutes faites. Mais cherchez bien dans votre entreprise, et je suis certain que vous finirez par trouver quelque part dans du code, des procédures administratives ou autres, l'ombre du cul des vaches romaines !

On peut aussi juste en rire, c'est bon pour la santé 🤣

Stay Tuned !

Le Guide Complet de.NET MAUI ! Lien direct Amazon : https://amzn.eu/d/95wBULD

Près de 500 pages dédiées à l'univers .NET MAUI !

Existe aussi en version Kindle à prix réduit !

Faites des heureux, PARTAGEZ l'article !