Cyag

Yohann Agrebbe

Programmeur Unix/C++ en freelance

Blog

Booster un réseau de neurones en C grâce à l'assembleur

Et voilà, je me suis finalement mis à l'Intelligence Artificielle, et c'est arrivé bien plus tôt que prévu !

Si une voyante m'avait annoncé le mois dernier que j'intégrerais du réseau de neurone dans mon code avant la mi-mai, j'aurais détourné les yeux de mon XTerm sous XWM pour la dévisager avec un air chiffonné, pour ensuite de me rouler au sol en riant durant de longues minutes… Et pourtant elle aurait vu juste, cela s'est produit : Tout est parti d'un besoin de créer un générateur d'images pour une bibliothèque d'icônes il y a une paire de semaines, tandis que comme tout développeur moyen j'entamais tête baissée la bonne cinquantaine de fonctions chronophages à implémenter, je réalisais soudain qu'au 21ème siècle ce genre de besogne devait impérativement être déléguée aux réseaux de neurones.

J'avais toutefois deux obstacles titanesques à franchir :

  1. Je n'y connaissais rien.
  2. Bienvenue chez Python.

Or si apprendre un nouveau domaine a toujours été un plaisir pour moi, il n'était pas question d'imposer à mes clients l'installation de lourds environnements Python pour exécuter leurs logiciels, ni d'abandonner mon code C++ et mon terminal Unix. Mais alors, comment se doter de l'IA quand on est un programmeur à l'ancienne, est-on bon pour la casse ? J'ai bien essayé de passer quelques heures à utiliser le très célèbre TensorFlow, mais j'étais incapable de créer le moindre graphe qui fonctionne, d'ailleurs personne ne semble savoir le faire en langage C sur les forums d'experts. Heureusement, il existe au moins un grand Seigneur Nerd en ce monde, celui-ci a eu l'audace de construire une petite API de Machine Learning en C, nommée « nn.h », et d'en faire un petit projet à porté éducative. Grâce à lui on peut enfin comprendre le principe des réseaux de neurones, et en fabriquer soi-même sur n'importe quel ordinateur sans rien installer de plus qu'un simple compilateur. Mes amis, voici venu le temps de considérer l'IA comme un outil facile et rapide à intégrer à nos petites moulinettes du quotidien ! Cependant, l'auteur insiste bien sur le fait que son code est inadapté pour un usage en production. Ce n'est pas gênant pour la partie apprentissage, mais comment optimiser le résultat d'un entraînement pour l'intégrer à un vrai projet professionnel ?

Nous pouvons facilement intervenir sur trois aspects : Le poids des neurones en octets grâce à la quantification, la dépendance à la bibliothèque <math.h> pour calculer la fonction sigmoïde grâce à une approximation, et la vitesse de calcul grâce à une implémentation de la multiplication matricielle avec une gestion fine des instructions SIMD. Et pour deux de ces points, nous aurons besoin d'appeler le bon vieux langage assembleur à la rescousse !

Lire la suite…

Outlook est fait pour les personnes désordonnées

(modifié 1 fois)

Si vous aimez organiser les choses et avoir une bonne représentation mentale de votre travail, alors vous avez sûrement créé des petits répertoires dans le volet gauche de votre client de messagerie en vue d'y ranger vos emails. Ceci vous permet de vous y retrouver efficacement, mais si vous utilisez le très célèbre Outlook, alors vous risquez de rater des notifications, car le logiciel part du principe que vous ne savez pas ranger.

Il se trouve que la nébuleuse de progiciels développés par Microsoft propose un système complet de planification de réunions, qui passe par des invitations sous forme d'email. Soyons francs, la fonctionnalité est conceptuellement bonne, d'autant plus qu'elle semble se baser sur la spécification ouverte « iCalendar », ce qui laisse entrevoir quelques chances d'interopérabilité avec d'autres technologies. Mais à l'instar de nombreuses applications contemporaines, c'est la petite subtilité ergonomique qui blesse : Si l'organisateur d'une réunion décide d'en modifier la date et de renvoyer de nouveaux emails d'invitation, Outlook entreprend de nettoyer silencieusement la boîte aux lettres des participants en déplaçant les invitations précédentes dans les courriers supprimés. Et ça, c'est une façon de faire rater l'information à certaines personnes !

Voici un cas réel fraîchement survenu. Ceci est un compte Outlook fourni par une entreprise pour permettre des échanges directs avec ses salariés, le dernier message reçu est une invitation à une réunion, déjà lue par le destinataire et notée soigneusement sur son bon vieux calendrier au format papier :

Avant

Quelques heures plus tard, l'organisateur de la réunion a reporté l'événement à la semaine suivante et déclenché l'envoi d'un nouvel email d'invitation ayant exactement le même intitulé. Sur un client de messagerie classique la ligne du haut donnerait l'impression de se dédoubler, la présence d'un deuxième message rectifiant le premier irait alors de soi. Mais avec Outlook l'email précédent se retire automatiquement, ce qui revient visuellement à le remplacer par son successeur, laissant comme seuls indicateurs du changement la mise en gras du titre pour représenter un statut non lu, ainsi que l'heure d'arrivée devenue plus récente :

Après

Évidemment, dans le cas présenté ici le report de date n'a pas été remarqué, l'hurluberlu invité s'est donc retrouvé en réunion seul avec lui-même au cours de la plage horaire annulée.

Ce comportement d'Outlook est trompeur à bien des égards : Soupçonner le logiciel de faire disparaître des entrées de la liste par sa propre initiative n'a rien de naturel, et nul ne vérifie en continu si les horaires des courriers reçus semblent se modifier par magie. Quant au changement de mise en forme, la pollution visuelle de nos supports numériques au quotidien par des publicités tapageuses nous habitue à ignorer les couleurs et tailles de police, afin de nous concentrer uniquement sur le texte brut. (Note : Il n'est pas impossible que l'utilisation massive de terminaux de commandes conjuguée à la lecture régulière de spécifications techniques accentue cette approche textuelle des contenus)

Par conséquent, les non habitués ont toutes les raisons de confondre un message correctif avec l'original, et ce, même en remarquant son retour en gras… parce qu'il n'est pas plus évident d'imaginer un nettoyage automatique que de supposer machinalement un petit bug de synchronisation avec le serveur, ou bien un raccourci clavier déclenché par inadvertance pour restaurer le statut non lu. Hé oui, à vouloir rendre les logiciels trop intelligents, leur fonctionnement devient parfois contre-intuitif. Ceux qui embrassent le « KISS » ne le répéteront jamais assez, l'être humain a besoin d'outils simples, obéïssants, et non pas de machines hantées prenant des décisions à sa place.

Ceci est encore plus vrai pour les personnes ordonnées qui auront tendance à ignorer le statut lu ou non lu des éléments situés dans leur boîte de réception. Pour elles, tant qu'un email s'y trouve, c'est qu'une opération reste à faire. Peu importe son statut, il devra de toute façon être rangé une fois traité. Et même celles allant jusqu'à pratiquer une chasse maniaque aux intitulés en gras risqueraient de survoler trop rapidement un message de rectification, puisqu'elles penseraient l'avoir déjà lu.

En revanche pour d'autres utilisateurs moins organisés, qui laissent leur courrier entrant s'entasser au fil des mois et des années, la disparition automatique des messages caduques peut devenir un avantage, car elle élimine le risque de lire la mauvaise ligne au milieu d'un fatras initelligible. En y réfléchissant bien, il s'agit là du seul cas d'usage dans lequel la balance bénéfice/risque penche du bon côté. Mais au fait, est-ce que les concepteurs d'Outlook ont remarqué que leur produit favorise les personnes désordonnées ? Quelque soit la réponse à cette question, elle ne peut qu'être éminemment divertissante.

Mon premier stagiaire

Une chose est sûre, l'activité se densifie : Entre développement logiciel, création d'API, administration système, installation de VM, cybersécurité, documentation, réunions à distance, relations client, tâches adminsitratives… la liste est encore loin d'être finie, et elle s'agrandit au fil du temps, je dois admettre une certaine surcharge de travail. Hélas, mon statut de professionnel indépendant ne permet pas de recruter un salarié pour m'assister au quotidien, mais au moins, il permet de faire appel à des stagiaires.

J'ai donc tenté ma chance en postant une annonce sur un petit réseau social, telle une bouteille à la mer contenant un message d'appel à l'aide.

Et cela a porté ses fruits ! Une personne qui étudie le traitement de signal et d'images en Master, avec en prime une expérience dans l'embarqué, a rencontré mon offre. Suite à de nombreux échanges par email et appels téléphoniques, la convention de stage est enfin signée, il est temps de préparer le terrain pour accueillir une ressource supplémentaire, comme le diraient certains DRH.

Salle aux ordinateurs

Et voilà, l'installation d'un nouveau bureau est faite, juste en face d'une fenêtre qui donne sur la nature, afin de présenter un cadre de verdure ensoleillée et de petite brise taquinant les feuilles des arbres. Aussi, le poste de travail jouxte les terminaux permettant de gérer les compilations, automatisations et serveurs de test, ce qui devrait apporter un certain confort organisationnel durant les quatre mois et demi de stage.

Je découvre aussi tout un tas de questions que l'on doit résoudre lorsque de nouveaux arrivants débarquent dans une entreprise : Comment les former, quels vont être leurs horaires, quels niveaux de permissions leur accorder sur les serveurs, faut-il souscrire à des assurances supplémentaires, comment calcule-t-on les cotisations patronales… Autant de sujets passionnants mais toujours très chronophages, tandis que les clients continuent d'attendre des retours sur investissement. Heureusement mes partenaires actuels se montrent très compréhensifs, l'un d'eux songe même à me confier une mission qu'il considère trop grande pour un développeur seul, grâce au doublement imminent de mes effectifs.

Les semaines à venir vont être serties de nombreux événements, mais quelqu'en soit le déroulement, l'expérience promet d'être très enrichissante ! À présent je dois quitter mon clavier et me concentrer sur la réception d'une nouvelle recrue.

Affaire à suivre.

Pourquoi le type « auto » en C++ devrait être banni

(modifié 2 fois)

Ces dernières années, parmis les experts de renommée mondiale, on trouve quelques défenseurs de l'utilisation systématique du mot clé « auto » pour déclarer toute variable dans un code, recommandant vivement l'adoption du principe de l'AA (Always Auto), ou a minima, de l'AAA (Almost Always Auto). En revanche l'idée opposée, qui consisterait à rejetter intégralement cette pratique, est quasi inexistante dans la grande littérature du C++. Serait-ce donc le signe d'une écrasante victoire argumentative de la part des auto-enthousiastes ?

Rien n'est moins sûr, il arrive parfois que des points de vue soient peu défendus car ils concordent avec les pratiques déjà massivement répandues. Il n'est nul besoin de militer pour un monde qui est déjà en place, et dont les bases sont suffisamment solides pour résister à ceux qui souhaitent le renverser.

Toutefois, depuis peu et dans tout type de domaine, on observe une tendance des théories farfelues à sortir de l'ombre pour conquérir l'opinion publique, avec parfois quelques malheureuses répercussions politiques. Le C++ a beau être un sujet dérisoire comparé aux grands problèmes de l'humanité, il faut bien que quelqu'un cherche à le préserver lui aussi de la bêtise et de la « hype disruptive », notamment dans un contexte où les grands décideurs de l'avenir du langage, pleinement occupés par l'animation de conventions et la production de best-sellers, n'ont plus travaillé sur du vrai code depuis des décennies. Il serait donc bon de rappeler de temps en temps ce qui fait la force du C++, et d'insister sur le fait qu'il existe d'autres langages très efficaces comme le python pour les développeurs amoureux de l'abstraction matérielle et de la conception faiblement typée.

Lire la suite…

Backlog

Pour bien commencer l'année 2023 et redoubler de motivation, j'ai cru bon de placarder des post-it dans mon bureau en vue de représenter les tâches à réaliser…

Backlog

Quel malheureux insouciant je fus, j'avais oublié la fameuse malédiction de la « backlog originelle » : Avant l'adoption des post-it on imagine toujours qu'ils ne seront jamais plus de cinq ou six sur le tableau. Mais en réalité, ils recouvriront forcément le mur dès les premiers instants, c'est comme ça dans toutes les entreprises après tout.

Au moins cela signifie que je gère une vraie activité. Il faut toujours positiver hein…
Allez hop c'est parti, il y a du pain sur la planche.

Bonne année aux quelques zéro personnes qui suivent ce blog.

La différence entre un programmeur et un développeur

Les termes « programmeur » et « développeur » sont assez interchangeables, dans les conversations du quotidien aussi bien que dans les discussions entre experts. Pourtant comme il existe deux mots, on pourrait en profiter pour leur associer des connotations spécifiques, d'ailleurs il existe déjà une petite différence entre eux : Le programmeur est un peu tombé en désuétude, tandis que le développeur est mieux considéré.

Lire la suite…

Mon premier client

(modifié 1 fois)

Cela fait des mois que l'on en parle, les négociations sont faites, l'analyse du cahier des charges est finie, et le chiffrage est validé. Il est enfin temps de commencer le tout premier jour de travail pour mon premier client !

Il s'agit d'un particulier, un certain « Adrien M. », ingénieur chevronné pour lequel le domaine du dessin industriel n'a aucun secret, et qui a décidé de se lancer lui aussi dans la création d'entreprise. Tout est parti d'une idée de progiciel qui lui est venue à l'esprit pour faciliter sa profession, mais il était globalement insatisfait des propositions faites par les autres développeurs, car ils poussaient toujours l'application vers du « 100% web ». En fait Adrien rêvait d'un vrai logiciel de bureau, avec des fenêtres, des boutons, des menus… Bref, tout ce que l'on peut attendre d'un produit correctement dimensionné pour le domaine industriel.

Le défi pour moi maintenant, cela va être de surmonter l'ampleur d'un double travail, car j'ai l'ambition pharaonique de bâtir deux pyramides interconnectées pour répondre aux exigences de ce contrat :

  1. La création d'une bibliothèque, en langage C, qui s'interface avec le système d'exploitation.
  2. La réalisation du logiciel lui-même, en langage C++, qui utilise la bibliothèque.

Bien entendu, les jours passés sur la bibliothèque ne seront pas facturés, puisqu'elle restera ma boîte à outils par la suite. C'est pourtant elle qui me demandera le plus d'efforts, car dans un monde idéal, les tâches les plus ingrates doivent être réalisées par les bibliothèques, afin d'apporter aux logiciels une capacité de production rapide, des coûts peu élevés qui soient le plus en adéquation possible avec les intuitions des acheteurs.

Heureusement je ne me lance pas à l'improviste non plus, cela fait près d'une dizaine d'années que l'idée de cette bibliothèque se promène dans mon esprit. Au fil du temps j'ai rédigé quelques idées par-ci, écrit un peu de code expérimental par-là… À présent il est l'heure de réunir tout ça et de poser la première brique sur le chantier, la grande aventure c'est maintenant !

Renaissance

(modifié 1 fois)

Et voilà, à 36 ans je passe mes derniers instants en tant que salarié, avant de me consacrer à la création d'entreprise. C'est l'occasion d'ouvrir un petit blog pour se doter d'une ébauche de com.

Tiama Core 2022

En fait il s'agit de ma deuxième tentative entrepreneuriale, la première fois date d'il y a une douzaine d'années… Mais j'avais fini par plier boutique pour entrer en EPST, avant de rechanger pour aller dans le privé. On sait maintenant que tout ceci n'était qu'un long virage à 360 degrés.

Yohann Agrebbe 2010

Il faut se rendre à l'évidence, on est sûrement pas plus congitivement doué après quelques lustres passés au sein du monde de l'entreprise qu'à une époque où l'on avait encore l'esprit vif d'un étudiant universitaire. Cependant maintenant je suis vieux, les partenaires m'accorderont volontiers une présomption de sagesse experte, surtout dans le domaine des technologies antiques.