Du tissu, des cartes à jouer, un minitel et du bois – c’était JoliDay 2024
Comme tous les ans, nous avons profité d’un jour férié (en application de la journée de solidarité avec les personnes âgées) pour nous retrouver tous ensemble et faire des projets ni Web ni Mobile, mais toujours de qualité 👌. Nous avons un gros faible pour le DIY et retrouvons la même gratification à résoudre des problèmes dans « le monde réel » que dans nos projets du quotidien !
Dans cet article, nous vous présentons les différents projets réalisés en une journée par les JoliCodeuses et JoliCodeurs !
Section intitulée une-terrasse-encore-plus-accueillanteUne terrasse encore plus accueillante 🪵
Les beaux jours arrivent ! Pour cette raison, nous avons continué le refactoring de la terrasse. Nous avions plusieurs idées pour améliorer encore cet espace déjà bien exploité.
Nous avons commencé par donner les dernières finitions qu’il manquait aux bars qui ont été rénovés/améliorés lors du dernier JoliDay. Nous en avons également profité pour réparer quelques dalles du sol qui étaient abîmées. Puis nous avons attaqué les 2 gros sujets imaginés pour cette année.
Greg et Loïck ont ainsi réalisé une « tête de lit » / crédence pour la plancha à l’aide des lames de terrasse qu’il restait depuis le dernier chantier terrasse. L’idée était d’habiller un peu l’espace autour de la plancha et cacher ce mur en béton pas très joli.
Le résultat :
Quant à Cécile et Quentin, ils ont imaginé et créé un bac à fleurs, sur-mesure, qui s’intègre parfaitement dans l’espace qu’il restait entre la terrasse et les tuyaux de la climatisation. En plus d’ajouter toujours plus de couleurs et de verdure à la terrasse, cela nous permettra de profiter de nos propres herbes aromatiques à déguster lors de nos repas du midi.
Le résultat :
Section intitulée un-scanner-de-cartes-a-jouer-avec-l-iaUn scanner de cartes à jouer avec l’IA 🤖
Des tiroirs remplis de cartes Magic nous ont poussé à nous intéresser à des méthodes de tri et de reconnaissance automatique, dans le but premier de référencer le contenu de ces decks improvisés et à terme d’en exploiter les contenus (génération automatique, reconnaissance de complémentarité, etc.).
Nous nous sommes basés sur un projet existant que nous avons adapté, côté code, à nos besoins.
Paul s’est affairé à la construction de la structure en Lego accueillant le paquet de cartes et les distribuant une par une vers la caméra, Vincent à la partie reconnaissance par Intelligence Artificielle (utilisant OpenAI Vision), et Matthieu à la partie IOT (Configuration du Raspberry, prise de la photo par la caméra, alimentation du tout, etc.).
Comme d’habitude, même à trois, difficile de réaliser un projet aux petits oignons en une seule journée, nous avons donc été obligés de nous adapter et de prendre des raccourcis quand nécessaire.
Petite liste pêle-mêle des embûches rencontrées :
- alimentation défectueuse ;
- un seul servomoteur acheté, conformément à la liste fournie, alors qu’il en faut 2 ;
- transfert d’images pas si simple côté NodeJS ;
- le passage des cartes entre les roues doit être très précis, pour n’en prendre qu’une sans l’abîmer ;
- focus de la caméra du raspberry défini par défaut sur plusieurs mètres, contre 10 cm pour notre besoin.
Finalement, nous avons quand même réussi, à la fin de la journée, à avoir un POC fonctionnel dont nous ne sommes pas peu fiers, qui prend des photos, les transfère à une API, et reconnaît automatiquement la carte et ses différentes caractéristiques.
Il nous reste pas mal d’applications possibles à ce projet, qui continuera certainement d’évoluer, afin de pouvoir ingérer intelligemment les 2000 et quelques cartes qui sont beaucoup trop fastidieuses à trier à la main.
Section intitulée de-la-couture-et-de-la-broderieDe la couture et de la broderie 🪡
Une fois n’est pas coutume, nous avons profité de cette journée pour ne pas développer. Nous avons abandonné nos ordinateurs au profit de belles machines à coudre.
Cet atelier couture a été mené en collaboration avec Premier Octet nos pairs en développement mobile.
Et nous avons été chanceux que Colin se soit passionné plus jeune pour la couture. En plus de nous aider à installer tout le matériel, il nous a aussi guidés pour prendre en main les machines et aussi revoir nos bases en broderie.
Les objectifs de la journée étaient simples — mais sans doute trop ambitieux — chacun repartir avec une trousse cousue par ses soins. Et aussi broder des lettres pour personnaliser les rideaux de notre château fort, car oui dans nos bureaux, nous avons un magnifique château fort ! — en carton — qui est notre espace repos.
Côté machine à coudre, c’est tout un nouveau vocabulaire qu’il a fallu apprendre, entre le pied, la canette et le curseur. Nous nous sommes vite rendu compte qu’il était facile de se tromper et de coudre … à l’envers 😱 Parfois nous avons dû recommencer à plusieurs reprises, mais une fois lancés, nous sommes devenus inarrêtables.
Côté broderie, il a fallu reprendre les bases, souvent, nous avons eu la chance d’en faire étant enfant, mais ce n’est pas comme le vélo : on oublie rapidement. Mais le point de croix est simple, une fois qu’on l’a de nouveau en tête.
En fin de journée tout le monde est reparti avec sa petite trousse, agrémentée ou non d’un joli-pompon. Par contre, pour la broderie, nous nous sommes rendu compte que le temps allait manquer. Nous avons décidé de simplifier les motifs, mais malgré ça, nous n’avons pas eu le temps de terminer.
C’est une bonne chose, car ça veut dire qu’on aura de nouveau couture l’année prochaine, et il est certain qu’il faudra limiter les places tellement cet atelier a passionné les foules.
Section intitulée la-reconnaissance-faciale-appliquee-a-secret-santaLa reconnaissance faciale appliquée à Secret Santa 🧑🎄
Secret Santa est notre application open-source qui permet d’organiser des partages de cadeaux à partir de Slack, Discord et Webex.
Nous avons profité de ce JoliDay pour créer un POC ajoutant la possibilité de créer un tirage à partir d’une simple photo. Plutôt que de récupérer les membres d’un des outils cités précédemment, l’idée est de détecter les visages présents sur une image contenant les participants comme un selfie, une photo de groupe ou un trombinoscope.
Pour ce faire, nous sommes partis sur du Python 🐍. D’une part pour sortir de notre zone de confort 🐘, mais surtout car c’est le langage couramment utilisé pour ce genre de traitement. Par exemple, face_recognition, la librairie que nous avons utilisée, permet de le faire en seulement deux lignes de code. Nous avons donc créé une minuscule application Flask histoire d’avoir une route à laquelle envoyer notre image depuis notre application Secret Santa et obtenir les coordonnées des visages. Nous pouvons ensuite découper notre image pour les isoler et lancer le tirage au sort.
Section intitulée du-feu-dans-le-chateauDu feu dans le château 🏰🔥
Afin de recycler une matrice de rubans de LEDs, nous avons eu l’idée de l’utiliser pour afficher un gif animé de feu à placer dans notre bien beau château médiéval.
Côté électronique, nous nous sommes débarrassés du superflu et avons simplement relié une alimentation 5V de récup avec un ESP 8266 et une bande de LED à 3 entrées : in, out, et signal. Sur l’ESP, nous avons installé WLED, et en quelques clics seulement, nous pouvions contrôler notre matrice ! Un peu de configuration très rapide : indiquer la quantité de LEDs et les dimensions de la matrice.
Malheureusement, vu que le tableau de LED était récupéré d’un vieux projet, certaines LED étaient non fonctionnelles et provoquaient un brouillage des instructions envoyées à la suite de la bande de LED, il faudra donc remplacer l’ensemble des LEDs défaillantes.
Heureusement, nous avions d’autres projets pour le château !
Nous récupérons parfois des photos physiques lors des divers évènements de JoliCode, mais celles-ci finissent invariablement dans l’ombre d’un tiroir. Plus maintenant ! Un peu de carton, quelques coups de peinture, et hop, nous obtenons un cadre pour afficher toutes ces pépites !
La difficulté ici a surtout été sur l’assemblage des angles du cadre. On ne pouvait pas simplement aplatir le cadre et tracer une ligne sur un angle à 45° : les parties du haut se chevauchaient, celles du bas ne se rejoignaient pas. Nous avons donc fait un premier découpage, à l’œil, je l’avoue, puis un patron à partir de celui-ci nous a permis de reporter les angles correctement.
Section intitulée la-lecture-des-donnees-contenus-dans-un-passeport-et-l-affichage-sur-un-minitelLa lecture des données contenus dans un passeport et l’affichage sur un Minitel 😂
Depuis 2009, tous les passeports délivrés en France sont biométriques : ils contiennent une micropuce dans laquelle sont stockées les informations critiques du titre de transport. Accessible sans fil via NFC, ces données sont bien entendu chiffrées et en lecture seule.
Nous avons étudié comment la lecture de ces données était possible et avons découvert quelques faits intéressants qui ne sont pas forcément connus du grand public :
- l’identifiant de la puce est aléatoire et change à chaque lecture 🤯 ;
- pour lire les données, il faut fournir trois informations :
- la date de naissance ;
- la date d’expiration du passeport ;
- le numéro du passeport.
- ces trois informations sont exposées en bas de la page « photo » dans un format idéal pour l’OCR – le MRZ ;
- certains pays ajoutent un blindage sur la couverture pour empêcher la lecture de la puce quand le document est fermé !
- la puce contient votre photo 😋 ;
- elle contient aussi les clés pour en valider son intégrité.
Notre objectif avec ce projet était de mettre en place une interface Minitel pour saisir les 3 informations de la MRZ, inviter l’utilisateur à poser son passeport sur un capteur NFC et afficher sa photo sur l’écran.
Cela s’est avéré trop ambitieux pour une journée. En effet, il n’existe pas encore de librairie Ardunio / PN532 pour facilement envoyer un challenge BAC et récupérer les données en clair (ou alors nos nombreuses recherches sont tombées à côté) et ça ne pouvait pas être codé en si peu de temps 😨. Nous avons donc terminé notre POC avec une simple carte MiFare faisant office de faux passeport.
Côté interface, nous avons utilisé un Minitel pour saisir les données et afficher le résultat. Le Minitel est un objet cher au cœur de Damien, qui s’amuse depuis quelque temps à le faire renaître de ses cendres grâce à des projets comme MiniMit, MiniPavi, MiEdit… Il y a une belle communauté de passionnés qui rééditent des services de l’époque.
Notre Minitel se connecte (via un ESP32) en WebSocket à notre serveur AMPHP et nous écrivons l’interface en videotext. Ce serveur PHP doit aussi lire le port série de notre Arduino. C’est très amusant car tout l’état de l’écran doit aussi être conservé côté serveur (où se trouve le curseur, quelle page est affichée, etc) pour être capable de restituer la saisie dans un champ par exemple. Mais tout cela fera sans doute l’objet d’un article dédié ! ❤️🔥
Section intitulée un-jeu-de-tarot-maisonUn jeu de tarot maison ♣️
A JoliCode, comme dans la plupart des entreprises, nous profitons d’une pause le midi, dédiée avant toute chose à la prise de repas. Mais cette pause est également l’occasion pour nous de nous adonner à une activité à laquelle nous vouons une passion absolument déraisonnée : le tarot.
Le tarot a progressivement remplacé les jeux de société auxquels nous jouions jusque-là, au point de devenir un élément incontournable de nos pauses méridiennes (pour ceux qui le souhaitent en tout cas, car personne n’a pour le moment été forcé de jouer).
Il était donc tout naturel pour nous de nous lancer dans la création de notre propre jeu de tarot JoliCode x Premier Octet.
Notre plan de base était de prendre des photos des membres de l’équipe, puis de les incruster sur des cartes de tarot en utilisant Dall-E. Nous avons donc installé un téléphone en libre service au cours d’une soirée dans nos locaux, et laissé les gens se photographier entre eux.
A la suite de cette soirée, il nous manquait toujours quelques photos pour compléter notre jeu, aussi nous sommes-nous plongés dans notre Drive afin de récupérer les pires meilleures photos de chacun.
Une fois celles-ci en notre possession, nous avons pu commencer à entraîner nos modèles dessus, ce qui a pris un peu de temps. Et, malheureusement, ce temps consacré à l’entraînement de modèles ne fut pas vraiment récompensé, puisque même entraînés sur une dizaine de photos différentes, nos modèles ne parvenaient pas à incruster un visage sur une carte de roi, par exemple.
Nous ne sommes donc pas parvenus à avoir un résultat exploitable en utilisant cette méthode.
Si les têtes (ndlr : c’est le nom donné aux « figures », telles que le roi ou la dame) ne furent pas couronnées (🤪) de succès, nous avons en revanche été très impressionnés par la capacité de l’IA à générer des images dans le style des illustrations des cartes d’atout. Comme pour les têtes, il était très difficile d’incruster des photos à la place des visages, mais nous avons pu détourer un visage et l’incruster nous-mêmes sur une de ces illustrations, ce qui fonctionnait assez bien.
Voici l’exemple d’une image générée par IA dans le style des atouts du jeu de tarot, sans incrustation de visage (nous avons demandé un personnage terrifié pour l’atout le moins fort du jeu).
Notre jeu n’est donc malheureusement pas terminé. Il nous reste à trouver un moyen d’incruster des visages sur les têtes du jeu de tarot, et à créer des atouts pour tous les membres des équipes de Premier Octet et de JoliCode. Nous avons aussi designé notre propre dos de carte pour notre jeu. Une fois toutes nos images générées, il ne nous restera donc « plus qu’à » tout imprimer !
Section intitulée pour-conclurePour conclure
Cette journée fait partie des nombreux side-projects que l’équipe poursuit tout au long de l’année, et cette édition a été une nouvelle fois riche en apprentissages.
Envie de jouer avec nous ? Changez de boulot ! Vous pouvez aussi découvrir le tourne-disque réalisé par Premier Octet dans leur publication LinkedIn.
Commentaires et discussions
Des copeaux de bois, de la soudure, de l’impression 3D et des tatouages – c’était JoliDay 2023
Comme tous les ans, nous avons profité d’un jour férié (en application de la journée de solidarité) pour nous retrouver tous ensemble et faire des projets ni Web ni Mobile, mais toujours de qualité 👌. Nous avons un gros faible pour le DIY et retrouvons la même gratification à résoudre…
JoliDay 2022 avec du chêne, des bruits d’animaux, des Lego et de la Badoit
Comme tous les ans, nous avons profité d’un jour férié (en application de la journée de solidarité) pour nous retrouver tous ensemble et faire des projets ni Web ni Mobile, mais toujours de qualité 👌. Nous avons un gros faible pour le DIY et retrouvons la même gratification à résoudre…