<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Jean-Baptiste Le Duigou on Medium]]></title>
        <description><![CDATA[Stories by Jean-Baptiste Le Duigou on Medium]]></description>
        <link>https://medium.com/@jb.leduigou?source=rss-b698ed005d53------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/0*RCL98nMMDi_oMsmX.jpg</url>
            <title>Stories by Jean-Baptiste Le Duigou on Medium</title>
            <link>https://medium.com/@jb.leduigou?source=rss-b698ed005d53------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Tue, 26 May 2026 22:55:55 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@jb.leduigou/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Kenavo Medium]]></title>
            <link>https://medium.com/@jb.leduigou/kenavo-medium-4fd496e9227a?source=rss-b698ed005d53------2</link>
            <guid isPermaLink="false">https://medium.com/p/4fd496e9227a</guid>
            <dc:creator><![CDATA[Jean-Baptiste Le Duigou]]></dc:creator>
            <pubDate>Mon, 07 Sep 2020 20:54:51 GMT</pubDate>
            <atom:updated>2020-09-07T20:54:51.860Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*G2YJ0Y_iASa8ON0Z" /><figcaption>Photo by <a href="https://unsplash.com/@craft_ear?utm_source=medium&amp;utm_medium=referral">Jan Tinneberg</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>J’ai commencé à publier sur Medium il y a un peu plus d’un an.<br>Choisir Medium pour commencer mon blog était une excellente décision.<br>Mais j’ai décidé de quitter cette plateforme et <a href="http://www.jbleduigou.fr/20/9/7/kenavo-medium/">je t’explique pourquoi sur mon nouveau blog</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4fd496e9227a" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Utiliser un bot afin de mettre à jour automatiquement les dépendances]]></title>
            <link>https://medium.com/@jb.leduigou/utiliser-un-bot-afin-de-mettre-%C3%A0-jour-automatiquement-les-d%C3%A9pendances-80232caae749?source=rss-b698ed005d53------2</link>
            <guid isPermaLink="false">https://medium.com/p/80232caae749</guid>
            <category><![CDATA[github]]></category>
            <category><![CDATA[coding]]></category>
            <category><![CDATA[cloud-computing]]></category>
            <category><![CDATA[devops]]></category>
            <category><![CDATA[bots]]></category>
            <dc:creator><![CDATA[Jean-Baptiste Le Duigou]]></dc:creator>
            <pubDate>Mon, 15 Jun 2020 21:21:37 GMT</pubDate>
            <atom:updated>2020-06-17T20:33:20.620Z</atom:updated>
            <content:encoded><![CDATA[<p>75 % des projets contiennent au moins une vulnérabilité et 49 % de ces mêmes projets contiennent des vulnérabilités qui présentent un risque élevé. C’est une des informations qui se dégagent de<a href="https://www.synopsys.com/software-integrity/resources/analyst-reports/2020-open-source-security-risk-analysis.html"> l’édition 2020 du rapport OSSRA</a>, Open Source Security and Risk Analysis, publié par la société Synopsys.</p><p>Je t’ai déjà parlé de cette étude dans un précédent article qui expliquait <a href="https://medium.com/@jb.leduigou/automatiser-la-d%C3%A9tection-de-vuln%C3%A9rabilit%C3%A9s-%EF%B8%8F-f9a483c1d27e">comment automatiser la détection de vulnérabilités</a>. Tu noteras au passage que l’année dernière seuls 60% des projets contenaient au moins une vulnérabilité. Je n’ai pas suffisamment de détails pour expliquer cette hausse. Au delà du nombre précis ce qui est important c’est de se demander ce que l’on peut mettre en place pour prévenir les risques que cela entraîne. Je pense qu’une bonne approche peut se résumer au moyen de ses deux stratégies :</p><ul><li>Rester constamment à jour</li><li>Éviter les gros changements de type big-bang au profit de mise à jour plus ciblées</li></ul><p>Il se trouve que j’ai découvert récemment un outil, <a href="https://dependabot.com/">Dependabot</a>, qui permet d’automatiser la mise à jour de ces dépendances. Je vais te le présenter dans cet article.</p><h3>Présentation Générale</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/336/1*paUXXaQGZ28y7LL6JbL79g.png" /></figure><p>Dependabot est une application GitHub qui va accéder à tes repos au moyen d’un access token. Chaque jour, elle analyse tes fichiers de dépendances et recherche celles qui peuvent être mise à jour. Si l’une des dépendances est obsolète, Dependabot ouvre un Pull Request pour la remplacer. Il te reste alors à vérifier l’exécution des tests, analyser le changelog de la bibliothèque et prendre une décision. Accepter la mise à jour en mergeant la PR ou ignorer la nouvelle version.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*c54B-SFcxw7ma5VXEsGKRQ.png" /></figure><p>Ce que je trouve intéressant c’est la variété des langages supportés. On retrouve des langages de backend populaires tels que Javascript, Java et PHP. Mais aussi des langages moins répandus tels que Go, Rust ou encore Elixir.</p><h3>Quelques Exemples</h3><p>Afin de rédiger cet article j’ai pris le temps de tester l’outil sur plusieurs projets. Un projet en <a href="https://github.com/jbleduigou/boucles">Java/Maven</a> et un projet en <a href="https://github.com/jbleduigou/budgetcategorizer">Go</a>. Ces deux stacks techniques sont disponibles respectivement en beta et en alpha. Cela c’est un peu ressenti à l’usage.</p><h4>Un exemple de PR</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/818/1*zld3Zr540owTFdAdmGTYkQ.png" /></figure><p>Pour ce premier exemple je te montre une PR ajoutée par le bot pour un projet en Go. Comme pour toute PR il est possible de consulter la liste des fichiers modifiés :</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*3khKdtKOMtTMAOknx_QGqA.png" /></figure><p>Habituellement cela permet de comprendre l’impact des changements de code. Dans le cas d’une mise a jour de dépendance pas tant que ça. Et c’est là que l’outil est bien conçu ! Dans la description de la PR vont être renseignées trois informations. Tout d’abord les release notes, qui indiquent les changements majeurs de la version. Ensuite la liste des commits, cela permet d’avoir une information plus détaillée. Enfin, un score de comptabilité est aussi mentionné.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/671/1*sVn6a_TX4VhAsmYbA4pYSg.png" /></figure><p>Comment est calculé ce score ? C’est très simple. Lorsqu’une nouvelle version de dépendance est publiée, Dependabot crée des PRs similaires sur des centaines de dépôts. Pour chaque repos avec l’intégration continue d’activée, Dependabot détermine si la mise à jour casse des tests. Le score de compatibilité est le pourcentage d’exécutions de CI qui ont réussies la mise à jour entre les versions concernées.</p><h4>Clôture automatique des PRs obsolètes</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/927/1*DhdJk99EBUW2IoJD-Pn3OA.png" /></figure><p>Une des autres fonctionnalités que j’ai trouvé pratique c’est la clôture automatique des PRs obsolètes. Dans l’exemple ci dessus une version 0.26.0 venait d’être publiée. Le bot a donc automatiquement clôturé la PR concernant la version 0.25.0. Cerise sur le gâteau un commentaire indique que la PR est remplacée par une autre, en proposant un lien vers cette nouvelle PR.</p><h4>Clôture sans raison</h4><p>J’ai malheureusement constaté certaines incohérences dans le fonctionnement du bot. Par exemple j’ai vu une PR se voir clôturer sur le projet utilisant Maven.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/929/1*KRc5xJG8gz5gT0PGC10jJQ.png" /></figure><p>Ici le bot commente en disant que la dépendance ne peut plus être mise à jour. Ce comportement est apparu après avoir approuvé une autre PR sur ce même repo. Pourtant la dépendance est actuellement en version 2.0.16 et il est donc possible de la mettre à jour.<br>Dans ce cas j’ai interagis avec le bot en commentant la PR. Tout t’abord pour la réouvrir, puis pour effectuer un rebase. C’est justement une des forces de l’outil, la possibilité de pouvoir interagir avec le bot directement dans la PR. Malheureusement cela n’a pas suffit. La PR était systématiquement refermée par le bot. L’outil étant en version beta pour les projets Maven, il n’est pas surprenant que quelques bugs puissent exister.</p><h4>Besoin d’un petit coup de ménage</h4><p>Sur un des projets en Go j’ai aussi constaté un comportement lacunaire. Suite à la <a href="https://github.com/jbleduigou/budget2sheets/commit/437956847db3c929b5dc995874a2891ac5c83edb">mise à jour de testify</a>, une dépendance transitive n’a pas été supprimée. Si j’ouvre le projet avec <a href="https://code.visualstudio.com/">Visual Studio Code</a> je constate un warning :</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*mTIkLLNPCZguSsMBnnRAUQ.png" /></figure><p>C’est d’autant plus dommage que c’est trivial à corriger. Si je tape la commande suivante :</p><pre>go mod tidy</pre><p>Le fichier go.mod est alors nettoyé. La dépendance transitive “gopkg.in/yaml.v2 v2.2.8” est supprimée.</p><h3>Configuration Avancée</h3><p>Il est possible de configurer plus finement le bot. Pour cela on utilise un fichier dependabot.yml, au format <a href="https://www.codeproject.com/Articles/1214409/Learn-YAML-in-five-minutes">YAML</a> donc. Il est nécessaire de placer ce fichier dans le repertoire .github du repo.</p><p>Les options disponibles concernent la fréquence des vérifications, le nommage des PRs, la stratégie de rebase et bien d’autres. Je te laisse consulter la <a href="https://help.github.com/en/github/administering-a-repository/configuration-options-for-dependency-updates">documentation officielle</a> pour obtenir une liste exhaustive.</p><h3>Déployer sa propre instance</h3><p>Les gestionnaires de sources actuellement compatibles avec Dependabot sont : GitHub, GitHub Enterprise, GitLab et Azure Devops. D’autre part je pense que certaines organisations peuvent être frileuses à l’idée d’autoriser l’accès à leur code source à un outil en ligne. Pour palier à ces limitations il semble qu’il soit possible de déployer sa propre instance de Dependabot.</p><p>Le projet étant implémenté en Ruby il faut compiler le projet puis le déployer. Pour faire fonctionner Dependabot et utiliser l’ensemble des langages supportés, tu auras besoin d’installer Ruby, Python, PHP, Elixir, Node, Go, Elm et Rust. Cependant, si tu souhaites l’utiliser pour un seul langage, tu peux te contenter d’installer ce langage ainsi que Ruby.</p><p>Autre possibilité : Docker. Bien qu’il soit possible de déployer Dependabot sans utiliser Docker, c’est l’approche recommandée par les concepteurs du projet. En effet l’image Docker contient déjà toutes les dépendances pour pouvoir utiliser les différents langages supportés. Je n’ai personnellement pas déployé ma propre instance. Je ne peux donc pas te dire si c’est rapide à réaliser.</p><h3>Considérations diverses</h3><p>Avant de conclure cet article je voudrais partager quelques remarques. Tout d’abord la nécessité des tests. Pour pouvoir utiliser cet outil avec confiance, il faut une base de code avec des tests. Plus encore, il faut une couverture de tests suffisantes. Un build vert doit garantir que l’on n’aura pas de régressions en production. On entend parfois dire que les tests coûtent chers. Je pense d’une part que cela dépend de l’expérience des développeurs de l’équipe en la matière. Pratiquer le TDD quand on ne l’a jamais fait avant prend du temps. Quand on est habitué c’est quasiment sans incidence sur le temps de développement. D’autre part le léger surcoût est remboursé sur la durée. Pouvoir mettre à jour fréquemment ses dépendances et ainsi limiter la probabilité qu’une fuite de données ou un hack ait lieu, ce n’est pas du luxe !</p><p>Une autre considération est le nombre de mise à jour qu’un projet en moyenne aura chaque semaine avec Dependabot. Dans un <a href="https://github.blog/2019-01-31-keep-your-dependencies-secure-and-up-to-date-with-github-and-dependabot/">billet de blog</a>, GitHub nous explique qu’un projet Ruby compte en moyenne 125 dépendances. 38 sont directes et 87 sont des dépendances transitives. Un projet Ruby typique reçoit habituellement deux mises à jour de dépendances par semaine. Parmi ces mises à jour, 94 % ne cassent pas le build. Cela signifie qu’en moyenne, tu n’auras besoin d’écrire du code en réponse à une mise à jour de dépendance qu’une fois tous les deux mois. Le reste du temps, tu peux simplement cliquer sur “merge” et continuer à opérer avec des dépendances sécurisées et mises à jour.</p><p>Enfin, il faut savoir que Dependabot a d’abord été un projet indépendant de GitHub. L’acquisition par GitHub a été annoncée en milieu d’année 2019. Soit environ un an après le rachat de GitHub par Microsoft. Il est intéressant de constater les nombreux changements apparus depuis ce rachat. N’oublions pas que Microsoft est aussi un cloud provider. Les cloud providers tels que AWS, GCP et Microsoft Azure proposent fréquemment de nouveaux services DevOps (gestionnaires de code source, de chaînes d’intégration, etc…). Cette semaine par exemple AWS a <a href="https://aws.amazon.com/fr/about-aws/whats-new/2020/06/introducing-aws-codeartifact-a-fully-managed-software-artifact-repository-service/">présenté son outil AWS CodeArtifact</a>. Il va donc être interessant de voir si les services additionnels de GitHub vont permettre à Microsoft d’améliorer Azure Devops et ainsi obtenir un avantage concurrentiel.</p><p>Si tu es arrivé jusqu’ici, merci beaucoup d’avoir lu cet article !<br>Si il t’a plu, pense à me laisser un clap et à me suivre.<br>N’hésite pas à me laisser un commentaire ou une question, directement en bas de cet article ou en m’envoyant un message sur <a href="http://www.linkedin.com/in/jbleduigou/en">LinkedIn</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=80232caae749" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Comment je fais ma veille technique au sujet de AWS]]></title>
            <link>https://medium.com/@jb.leduigou/comment-je-fais-ma-veille-technique-au-sujet-de-aws-ab4994b259ad?source=rss-b698ed005d53------2</link>
            <guid isPermaLink="false">https://medium.com/p/ab4994b259ad</guid>
            <category><![CDATA[code]]></category>
            <category><![CDATA[devops]]></category>
            <category><![CDATA[developer]]></category>
            <category><![CDATA[aws]]></category>
            <category><![CDATA[cloud-computing]]></category>
            <dc:creator><![CDATA[Jean-Baptiste Le Duigou]]></dc:creator>
            <pubDate>Mon, 11 May 2020 12:23:09 GMT</pubDate>
            <atom:updated>2020-05-11T12:23:09.079Z</atom:updated>
            <content:encoded><![CDATA[<p>Dans mon dernier article je te parlais de <a href="https://medium.com/@jb.leduigou/mes-objectifs-pour-2020-c03df676560">mes objectifs pour l’année 2020</a>. Un de ses objectifs est de développer une expertise sur AWS. La réussite de cet objectif repose en partie sur le passage de certifications. Cela me pousse à étudier certains aspects précis du cloud d’Amazon. Mais ce n’est pas suffisant. J’essaie de lire le maximum de choses sur AWS en faisant une veille technique. Je vais donc t’expliquer aujourd’hui quelles sont les sources que j’utilise pour cela.</p><h3>Les blogs AWS</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*vUSh-YMvsv6WIwFI0OmrbQ.png" /><figcaption>Le premier article du blog officiel d’AWS</figcaption></figure><p>Qui mieux que AWS peut parler de AWS ? Question rhétorique je te l’accorde ! Depuis 2004 AWS publie des articles sur son <a href="https://aws.amazon.com/blogs/">blog officiel</a>. Le blogueur le plus célèbre est probablement <a href="https://aws.amazon.com/blogs/aws/author/jbarr/">Jeff Barr</a>. Chief Evangelist chez AWS, c’est lui qui a lancé le blog en 2004. Il a écrit des articles quasiment sans interruption depuis lors. Par la suite de nombreux autres contributeurs sont venus l’épauler dans cette tâche.</p><p>Ce que je trouve pratique avec ce blog c’est la quantité de filtres disponibles. Ces filtres permettent de trouver plus facilement le type de contenu que je recherche. Il est ainsi possible d’afficher les articles concernant uniquement un niveau de connaissance : débutant, confirmé ou expert. Autres possibilités, trier par produit ou solution : Compute, Lambda, DynamoDB, Intelligence Artificielle, etc…</p><p>L’autre page qui je visite régulièrement est <a href="https://aws.amazon.com/new/">What’s New with AWS</a>. La plateforme cloud AWS se développe chaque jour. Cette page me permet d’en savoir plus sur les dernières annonces de produits, services et fonctions d’AWS.</p><h3>La chaîne Youtube d’AWS</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*IwS5Q9qHreMLxPekficEuQ.png" /><figcaption>Capture d’écran de la chaîne officielle Amazon Web Services</figcaption></figure><p>L’autre média privilégié par AWS pour communiquer avec ses utilisateurs est la vidéo. La chaîne officielle AWS propose un peu plus de dix mille vidéos à l’heure où j’écris cet article. Plusieurs formats sont proposés : cas client, présentation de produits et services. Ce que j’apprécie particulièrement ce sont les vidéos des conférences.</p><p>La plus connues d’entre elles est re:Invent, la conférence annuelle de AWS. Je visionne généralement les KeyNotes d’ouverture et de fermeture. Certaines sessions techniques sont aussi riches d’enseignement.</p><p>L’autre conférence que AWS organise est re:Inforce. C’est une conférence axée sur la sécurité dans le cloud. Pendant deux jours des problématiques telles que la gestion des identifiants, de la conformité ou encore de la détection de menaces sont abordées.</p><h3>AWS This Week</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*EZmiBBfyzHoLlbySIv_VFg.png" /><figcaption>Capture d’écran de la chaîne YouTube de A Cloud Guru</figcaption></figure><p>Cette semaine une personne m’a demandé des conseils sur la meilleure manière de se préparer aux certifications AWS. Personnellement j’ai suivi les cours dispensés en ligne par A Cloud Guru. Je trouve que c’est bien conçu et que c’est agréable à suivre. Le résumé en fin de section permet de mieux mémoriser les connaissances. L’autre atout de cette plateforme est le simulateur d’examens. Je pense sincèrement que cela m’a fait gagner de précieux points à chaque fois.</p><p>Il se trouve que A Cloud Guru possède également une chaîne Youtube. Une des séries de vidéos que j’apprécie le plus est “AWS This Week”. Ces vidéos présentent les dernières annonces de AWS. On y retrouve les nouveaux produits et les nouvelles fonctionnalités sur les produits existants. Le format est relativement court, environ trois minutes.</p><h3>Les livres blancs</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*VtPl-oEcKIfTpYd4gvCSrg.png" /><figcaption>Page d’accueil des livres blancs AWS</figcaption></figure><p>L’autre source officielle d’information c’est <a href="https://aws.amazon.com/fr/whitepapers/">les livres blancs</a>. Certains sont très généraux comme par exemple “<a href="https://d1.awsstatic.com/whitepapers/aws-overview.pdf">Overview of Amazon Web Services</a>”. D’autres sont plus spécifiques comme par exemple “<a href="https://d1.awsstatic.com/whitepapers/aws-power-ml-at-scale.pdf">Power Machine Learning at Scale”</a>. Il est à noter que pour chaque certification, AWS fournit une liste de livres blanc dont la lecture est recommandée.</p><p>Au-delà de se préparer aux certifications ces livres blancs me permettent d’approfondir mes connaissances. Je dois reconnaître que c’est parfois un peu indigeste à lire. J’évite donc de lire cela le soir avant de m’endormir ! Autres astuces, j’essaie d’être dans un endroit calme et je prends des notes pendant la lecture.</p><h3>Reddit</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Rfk3jH-B1LWRuOiPo0fSRA.png" /><figcaption>Aperçu du sub reddit dédié à AWS</figcaption></figure><p>Connais-tu Reddit ? C’est un réseau social, plus populaire outre atlantique qu’en France, mais dont l’adoption augmente depuis peu en France. Pour faire simple c’est un meta forum, c’est à dire un forum regroupant une myriade de sous-forums nommés subreddits. On y trouve du contenu de divertissement mais aussi des subreddits techniques. Parmi ceux-ci on compte le subreddit dédié à AWS.</p><p>On y trouve différents contenus. Des personnes qui demandent de l’aide par exemple, les réponses proposées sont souvent instructives. Certains utilisateurs postent aussi des liens vers des articles de leur blog ou des vidéos de leur chaîne. Régulièrement on retrouve même des posts de Jeff Barr himself ! Bref si tu ne connais pas encore je te conseille d’aller y faire un tour !</p><p>Si tu es arrivé jusqu’ici, merci beaucoup d’avoir lu cet article !<br>J’espère qu’il t’a plu ?<br>N’hésite pas à me laisser un commentaire ou une question, directement en bas de cet article ou en m’envoyant un message sur <a href="http://www.linkedin.com/in/jbleduigou/en">LinkedIn</a>.<br>Je suis curieux de savoir quels sont les sujets qui t’intéresse et comment tu fais ta veille ?</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ab4994b259ad" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Mes objectifs pour 2020]]></title>
            <link>https://medium.com/@jb.leduigou/mes-objectifs-pour-2020-c03df676560?source=rss-b698ed005d53------2</link>
            <guid isPermaLink="false">https://medium.com/p/c03df676560</guid>
            <category><![CDATA[golang]]></category>
            <category><![CDATA[development]]></category>
            <category><![CDATA[goals]]></category>
            <category><![CDATA[aws]]></category>
            <dc:creator><![CDATA[Jean-Baptiste Le Duigou]]></dc:creator>
            <pubDate>Mon, 27 Apr 2020 07:50:21 GMT</pubDate>
            <atom:updated>2020-04-27T07:50:21.014Z</atom:updated>
            <content:encoded><![CDATA[<p>Dans <a href="https://medium.com/@jb.leduigou/un-article-par-semaine-pendant-trois-mois-le-bilan-2752f59ebfec">mon dernier article</a> je te parlais de mon objectif de publier un article par semaine. Cet objectif n’est pas orphelin. Il fait parti d’une liste plus globale de souhaits que j’ai établi pour l’année. C’est la première année que je rédige véritablement une liste d’objectif. Pourquoi ? Être occupé ne veux pas forcément dire réaliser des tâches qui ont de la valeur. J’ai d’ailleurs découvert récemment qu’il existait un mot en anglais qui capture bien cette notion : <a href="https://dictionary.cambridge.org/fr/dictionnaire/anglais/busywork">busywork</a>.</p><p>J’ai donc élaboré une liste de réalisations pour cette année. Je me suis dit que ça pourrait t’intéresser d’en connaître le contenu. Je vais donc te la détailler aujourd’hui. Avant cela je vais t’expliquer comment je l’ai rédigé et comment je la décline au cours de l’année.</p><h3>L’enthousiasme comme carburant</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*P7j80FAu6gGCr8k5" /><figcaption>Photo by <a href="https://unsplash.com/@neonbrand?utm_source=medium&amp;utm_medium=referral">NeONBRAND</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>La plupart des listes d’objectifs ont un problème majeur. Leur formulation. “Il faut que je fasse X cette année”. Cela en fait une liste d’impératifs. Ça devient vite une contrainte plutôt qu’un plaisir. Quand j’ai écouté <a href="https://alexisminchella.com/podcast-anais-jousset/">l’épisode 29 de Tribu Indé</a> je me suis dit que je tenais une bonne formulation. L’idée c’est de compiler une liste de réalisations qui nous font envie.</p><p>L’enthousiasme est une formidable source de productivité. Quand je travaille sur quelque chose qui m’électrise je vois ma motivation déborder. Je vais plus vite. J’ai envie d’aller plus loin. J’ai envie d’approfondir le sujet sur lequel je travaille. J’ai donc essayé de garder cela en tête afin de définir mes objectifs.</p><h3>Une déclinaison sur 90 jours</h3><p>Une fois mes quatres objectifs définis je les décline sur des périodes de 90 jours. Cela donne donc quatre périodes dans une année. Cela permet d’avoir de la diversité durant cette année. Je peux ainsi décider de travailler principalement un objectif au premier trimestre puis de le mettre en arrière-plan le trimestre suivant.</p><p>Cela donne aussi de la souplesse et la possibilité de réajuster mes objectifs tous les trois mois. La fameuse agilité ! En fonction des événements il peut-être intelligent de supprimer un objectif et de le remplacer pour un autre. Autre possibilité, réduire à la hausse ou à la baisse un objectif en fonction des opportunités. C’est par exemple le cas des conférences (j’en parle un peu plus bas). Actuellement la quasi totalité des conférences sont annulées et il ne m’est pas toujours possible d’y assister en ligne.</p><h3>Amazon Web Services</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/900/1*_ByV8Yl8KrLxIkUU0z8nnQ.png" /><figcaption>Les certifications que je possède actuellement</figcaption></figure><p>Depuis un peu plus d’un an, j’ai décidé de me spécialiser dans le cloud AWS. J’aurais pu aussi choisir Azure ou GCP. L’entreprise où je travaillais à cette époque utilisait exclusivement AWS. D’où ce choix. Une fois lancé je trouve plus intéressant de connaître une plateforme en profondeur plutôt que d’avoir des connaissances superficielles sur plusieurs plateformes. De plus on retrouve des services similaires sur ces trois plateformes. Par exemple GCP Cloud Storage et Azure Blob Storage sont quasi équivalents à AWS S3.</p><p>Une des approches qui fonctionne pour moi et de passer des certifications. C’est un peu comme pour la course à pied. Quand je me suis inscrit au <a href="http://www.saintpolmorlaix.com/">semi-marathon Saint-Pol-Morlaix</a> j’ai enfin réussi à aller courir régulièrement. Avoir une épreuve cible me permet de me motiver. Cette année je veux donc passer quatre certifications AWS.</p><p>C’est plutôt en bonne voie car je viens de passer deux certifications du niveau associate : Developer Associate et SysOps Administrator Associate. Pour la suite je vais probablement attaquer des certifications de type Specialty. J’hésite encore entre Networking et Security ou quelque chose de plus fun comme Alexa Skill Builder et Machine Learning.</p><h3>Open-source &amp; Go</h3><p>Il n’y a pas longtemps je te parlais de <a href="https://medium.com/@jb.leduigou/r%C3%A9alise-facilement-ta-premi%C3%A8re-contribution-open-source-d7e40880d479">certaines de mes contribution open-source.</a> Cette année j’ai envie de contribuer encore plus. Je t’ai aussi expliqué que <a href="https://medium.com/@jb.leduigou/apprendre-le-langage-go-en-2020-1ad43ecaccb">j’avais appris le langage Go l’année dernière</a>. Je souhaite aussi accumuler de l’expérience avec Go. Idéalement j’ai donc envie de contribuer à un ou plusieurs projets open-source en Go cette année.</p><p>Pour l’instant je n’ai pas fait suffisamment de progrès sur cet objectif. J’ai bien conçus <a href="https://medium.com/@jb.leduigou/ma-banque-a-modifi%C3%A9-son-ui-et-%C3%A7a-memb%C3%AAte-8340c83c5953">un outil pour gérer mon budget en Go </a>que j’ai <a href="https://github.com/jbleduigou/budgetcategorizer">open-sourcé</a>. J’ai aussi effectué quelques contributions en Java et <a href="https://github.com/upsidetravel/bucket-antivirus-function/pull/118">Python</a>. En vérité je ne pense pas être en mesure d’avancer beaucoup non plus dans les trois mois à venir. Mais l’année n’est pas terminée !</p><h3>Meetup &amp; Conférences</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*11RCPMDOllccXQTi" /><figcaption>Photo by <a href="https://unsplash.com/@samuelpereira?utm_source=medium&amp;utm_medium=referral">Samuel Pereira</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>J’ai envie d’assister à trois conférences cette année. J’ai déjà eu le plaisir <a href="https://medium.com/@jb.leduigou/retour-sur-le-devfest-du-bout-du-monde-2020-a6cfc87a64ed">d’assister au DevFest du Bout du Monde</a> fin février. J’avais envisagé de me déplacer à Paris pour assister à <a href="https://www.dotgo.eu/">DotGo</a>. Malheureusement l’épidémie de Covid-19 a eu raison de l’événement. Un événement est prévu dans les Côtes d’Armor en septembre, j’ai prévu d’y aller également. Bien évidemment tout cela dépendra de l’évolution de la situation sanitaire.</p><p>Je rêve aussi d’assister à Re:Invent, la conférence d’AWS à Las Vegas. Mais cela est un tout autre budget. Il y a le prix du ticket, du billet d’avion et de l’hôtel. Au total je pense que c’est 4000 ou 5000 dollars. Dans un tout autre style j’aimerais bien aussi assister à une non conférence comme <a href="https://socrates-rennes.github.io/">Socrates Rennes</a>. Si ça t’intéresse il y a un chouette <a href="https://medium.com/avalonlab/retour-sur-socrates-day-rennes-23d0d988dec4">compte-rendu </a>sur le blog de Avalon-Lab.</p><p>J’aime beaucoup assister à des conférences. D’une part cela permet de découvrir de nouveaux outils et des nouvelles façons de penser. Je pense qu’une des habitudes importantes en tant que développeur c’est de questionner ses connaissances. Nos connaissances peuvent devenir obsolètes en seulement quelques années. Tout évolue en permanence. Les langages. Les frameworks. Les architectures. Enfin ces événements sont l’occasion de rencontrer des personnes. Parfois les discussions qui suivent sont tout aussi intéressantes que la conférence en elle même. Tous ses avantages sont aussi valables pour les MeetUps. J’essaie d’assister aussi régulièrement que possible aux MeetUps de la région Brestoise. En particulier <a href="https://www.meetup.com/fr-FR/FinistDevs/">FinistDevs</a> et <a href="https://www.meetup.com/fr-FR/BrestJS/">BrestJS</a>.</p><h3>Création de Contenu</h3><p>Enfin le dernier axe sur lequel je veux travailler cette année c’est la création de contenu. J’ai commencé l’année par me focaliser principalement sur ce blog. J’ai donc commencé par écrire <a href="https://medium.com/@jb.leduigou/un-article-par-semaine-pendant-trois-mois-le-bilan-2752f59ebfec">un article par semaine pendant les trois premiers mois de l’année.</a> Cela m’a permis d’expérimenter et de trouver des habitudes. Je vais continuer à alimenter ce blog dans les semaines à venir.</p><p>Je m’intéresse aussi au format vidéo. Je pense qu’il est plus adapté à certains sujets d’une part et d’autre part je pense qu’il permet de capter une audience plus large. Cela demande toutefois plus de travail. Je suis en réflexion actuellement à la fois sur le fond et sur la forme. Je souhaite adopter un format assez dynamique, c’est à dire un assemblage de différentes vues et plans. Je me fais actuellement la main avec des vidéos des enfants que je partage avec la famille pendant ce confinement. Cela me permet d’expérimenter différents cadrages et de me faire la main sur le logiciel de montage.</p><p>Si tu es arrivé jusqu’ici, merci beaucoup d’avoir lu cet article !<br>J’espère qu’il t’a plu ?</p><p>Si l’on résume voici mes quatres objectifs pour 2020 :</p><ul><li>Développer une expertise AWS</li><li>Contribuer plus à l’open-source et en particulier en Go</li><li>Assister à plus de conférences et Meetups</li><li>Créer du contenu : blog et vidéos</li></ul><p>Je t’encourage toi aussi à rédiger une liste d’objectifs. Que ce soit sur douze ou sur trois mois !<br>N’hésite pas à me laisser un commentaire ou une question, directement en bas de cet article ou en m’envoyant un message sur <a href="http://www.linkedin.com/in/jbleduigou/en">LinkedIn</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c03df676560" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Un article par semaine pendant trois mois : le bilan]]></title>
            <link>https://medium.com/@jb.leduigou/un-article-par-semaine-pendant-trois-mois-le-bilan-2752f59ebfec?source=rss-b698ed005d53------2</link>
            <guid isPermaLink="false">https://medium.com/p/2752f59ebfec</guid>
            <category><![CDATA[bilan]]></category>
            <category><![CDATA[cloud]]></category>
            <category><![CDATA[blogging]]></category>
            <category><![CDATA[challenge]]></category>
            <dc:creator><![CDATA[Jean-Baptiste Le Duigou]]></dc:creator>
            <pubDate>Sat, 04 Apr 2020 07:38:38 GMT</pubDate>
            <atom:updated>2020-04-17T13:16:11.045Z</atom:updated>
            <content:encoded><![CDATA[<h3>Un article par semaine pendant trois mois : le bilan</h3><p>J’ai commencé à publier des articles sur Medium il y a un peu moins d’un an. Dix mois en fait. J’avais à l’époque publié un article sur <a href="https://medium.com/p/ac%C3%A9rez-vos-assertions-209dbe62f424">les assertions dans les tests.</a> J’ai continué à publier épisodiquement. En fonction de l’inspiration. Quand je pensais avoir le bon sujet et le bon titre je me posais sur mon clavier et en avant la musique !</p><p>En fin d’année je me suis dit que ça serait une bonne idée d’accélérer la cadence. Plus d’articles. Plus souvent. Je me suis donc lancé dans un challenge : écrire un article par semaine pendant trois mois. Aujourd’hui je te raconte la genèse de ce challenge et ce que j’ai appris en cours de route.</p><h3>Mes inspirations</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*hByg8OeAoufEVTla" /><figcaption>Photo by <a href="https://unsplash.com/@arreyshoghi?utm_source=medium&amp;utm_medium=referral">Shoghi Arrey</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>Ma principale inspiration pour cette aventure est Alexis Minchella et son podcast <a href="https://alexisminchella.com/podcast/">Tribu Indé</a>. J’ai commencé à l’écouter il y a un peu plus de six mois je crois. Un peu par hasard. Puis je me suis abonné sur Apple Podcast et j’ai écouté régulièrement les nouveaux épisodes.</p><p>Un des thèmes récurrents dans ce podcast est la création de contenu. Ce n’est pas surprenant quand on sait que Alexis Minchella est freelance en content marketing et copywriting. La création de contenu offre de multiples avantages, en particulier pour les freelances. Est-ce alors réservé aux freelances ? Non. Je ne le crois pas. J’ai donc voulu m’y mettre à mon tour.</p><h3>Mes objectifs</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*23T1f3Rg1b1gxarB" /><figcaption>Photo by <a href="https://unsplash.com/@dankapeter?utm_source=medium&amp;utm_medium=referral">Danka &amp; Peter</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>Je me suis donc fixé comme objectif de rédiger et publier un article par semaine pendant trois mois. Pourquoi trois mois ? Quand on se lance dans un challenge il y a d’abord une phase d’excitation. Pendant trois à quatre semaines. Puis ça s’estompe. Partir sur trois mois me permet donc de traverser cette période de baisse de motivation.</p><p>Le fait de devoir le faire une fois par semaine me force aussi à publier : même quand je pense ne pas avoir grand-chose à raconter, même quand je ne suis pas parfaitement satisfait de mon article et même quand je ne suis pas extrêmement motivé.</p><p>Tout cela peut sembler contraignant. Pas fun. Sauf que je me suis lancé ce challenge avant tout par que cela m’amusait. Je me suis d’ailleurs inspiré de <a href="https://alexisminchella.com/podcast-anais-jousset/">l’épisode 29 de Tribu Indé</a> pour rédiger mes objectifs pour 2020. Dans le cas du contenu cela se résume à : “J’ai envie de publier un article par semaine”.</p><h3>Quels résultats escomptés ?</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*RWNxlae5x5wUJsQ8" /><figcaption>Photo by <a href="https://unsplash.com/@isaacmsmith?utm_source=medium&amp;utm_medium=referral">Isaac Smith</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>Avec ce challenge je souhaitais obtenir deux résultats : améliorer mon expression écrite et partager avec la communauté des développeurs.</p><p>Je pense que l’écriture est un muscle. En publiant régulièrement je travaille ce muscle. Et c’est un muscle utile ! Il y a beaucoup de stéréotypes qui circulent au sujet des développeurs. Mais être capable de communiquer et s’exprimer efficacement est une compétence cruciale. Au final on passe presque plus de temps à échanger qu’à coder.</p><p>D’autre part je souhaitais apporter ma modeste contribution à la communauté des développeurs. La majeure partie de ce que je connais, je l’ai appris en ligne. Et ce sur une kyrielle de plateformes : <a href="https://stackoverflow.com/users/820729/jbleduigou">StackOverflow</a>, les blogs, <a href="https://dev.to/">Dev.to</a>, etc… Je pense que c’est un juste retour des choses de partager à mon tour mes aventures dans le monde du code. On ne sait jamais, si cela peut aider ne serait-ce qu’une personne par article cela me convient parfaitement !</p><h3>Show Your work</h3><p>Un des livres que j’ai découvert en cours de route est <a href="https://www.amazon.fr/Show-Your-Work-Austin-Kleon/dp/076117897X"><strong>Show Your Work</strong></a>. Encore une fois j’en ai entendu parler dans un des épisodes du podcast. L’idée est qu’il est plus important de partager son travail en cours que d’attendre d’avoir confectionné une œuvre d’art pour le partager.</p><p>Cela peut être un changement de posture salvateur. En effet, au lieu de se positionner en tant qu’expert on se positionne en tant que curieux. Passionné. On documente alors le chemin que l’on suit dans la découverte de cette passion. Il devient dès lors plus aisé de publier du contenu. C’est d’autant plus important pour les personnes souffrant du <a href="https://oclock.io/blog/1054/syndrome-de-limposteur">syndrome de l’imposteur</a>.</p><h3>Résultats obtenus</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*jdBaQ0ChRuBCjkjV" /><figcaption>Photo by <a href="https://unsplash.com/@jentheodore?utm_source=medium&amp;utm_medium=referral">Jen Theodore</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>Un des plus grands avantages à avoir partagé en ligne mes expériences et connaissances c’est les commentaires que je reçois. Cela me permet d’approfondir le sujet traité. De découvrir des alternatives. Certaines questions me permettent aussi de me remettre en question. Parfois c’est aussi un simple bravo ou merci, cela fait toujours plaisir ! Par conséquent je vais essayer de moi-même commenter plus souvent sur les contenus que je consulte.</p><p>Devoir écrire un article sur un sujet en particulier m’oblige aussi à réviser. Ainsi, j’ai souvent besoin de comprendre pourquoi je fais les choses de telle manière afin de pouvoir l’expliquer au mieux. Le simple fait d’écrire me fait progresser dans la maîtrise technique d’un framework, d’un langage ou d’un outil. Je me suis même demandé s’il était possible d’écrire un article sur un sujet que je ne connais pas ? Faire un travail de recherche et ensuite en rédiger une synthèse. Ça pourrait être un challenge fun pour le futur !</p><h3>L’écrit, est-ce un bon média ?</h3><p>Je suis globalement satisfait d’avoir mené à bien ce défi. Je pense que le format article de blog est un bon choix car il permet de se lancer rapidement. Pas besoin de matériel coûteux, un simple laptop avec accès à internet suffit. De plus avec Medium il n’est pas nécessaire de se payer un serveur, d’y installer WordPress et de passer plusieurs heures sur de la configuration. Ceci dit, Medium souffre de quelques défauts. Le paywall en particulier. A moyen terme je pense migrer mes articles vers un blog dédié. Mais pour l’instant je souhaitais me focaliser sur la création de contenu.</p><p>Malgré cette satisfaction globale, je trouve que pour certains articles ce média n’est pas adapté. Par exemple les articles qui traitent de <a href="https://medium.com/@jb.leduigou/int%C3%A9gration-continue-dune-lambda-impl%C3%A9ment%C3%A9e-en-go-33a10bce5f91">la configuration de Jenkins.</a> On remarque d’ailleurs que j’y ai inséré des gifs avec un enregistrement de mon écran. Des vidéos ! Quel intérêt alors de mélanger texte et vidéo ? Limité. D’autant que les gifs ne sont pas d’excellentes qualités. Pour ce genre de ce sujet je pense qu’il est plus intéressant de partir sur un format vidéo dès le départ.</p><p>Et maintenant ? Quelle suite je vais donner à ce challenge ? Je vais assurément continuer à publier des articles. Ceci dit je pense ralentir un peu le tempo. Probablement en tablant sur deux articles par mois. J’envisage aussi de créer des vidéos, en particulier sur les sujets les plus techniques. Mais cela demande de l’organisation. Je vais donc attendre encore un peu.</p><p>Si tu es arrivé jusqu’ici, merci beaucoup d’avoir lu cet article !<br>J’espère qu’il t’a plu.<br>N’hésite pas à me laisser un commentaire ou une question, directement en bas de cet article ou en m’envoyant un message sur <a href="http://www.linkedin.com/in/jbleduigou/en">LinkedIn</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2752f59ebfec" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Réalise facilement ta première contribution open-source]]></title>
            <link>https://medium.com/@jb.leduigou/r%C3%A9alise-facilement-ta-premi%C3%A8re-contribution-open-source-d7e40880d479?source=rss-b698ed005d53------2</link>
            <guid isPermaLink="false">https://medium.com/p/d7e40880d479</guid>
            <category><![CDATA[development]]></category>
            <category><![CDATA[github]]></category>
            <category><![CDATA[logiciel]]></category>
            <category><![CDATA[open-source]]></category>
            <dc:creator><![CDATA[Jean-Baptiste Le Duigou]]></dc:creator>
            <pubDate>Thu, 19 Mar 2020 20:17:40 GMT</pubDate>
            <atom:updated>2020-03-20T14:06:53.598Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*icCdIlL6DCI4vA4v" /><figcaption>Photo by <a href="https://unsplash.com/@yancymin?utm_source=medium&amp;utm_medium=referral">Yancy Min</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>J’ai remarqué que de nombreux développeurs hésitaient à faire leur première contribution open-source. C’est peut-être ton cas ? C’est plus facile que ça en a l’air. Comme pour beaucoup de choses l’étape la plus difficile est d’enclencher la machine. Une fois la première contribution accomplie, puis les deux ou trois suivantes ça devient plus simple. Mon conseil par conséquent est de choisir une première tâche relativement aisée afin de lancer la dynamique.</p><p>A travers mon expérience personnelle, expérience de développeur non expert en open-source, je vais te présenter des exemples de contributions que j’ai effectuées ces derniers mois. Tu trouveras avec ces exemples un lien vers les Pull Requests afin que tu puisses regarder en détail les changements que j’ai proposés.</p><h3>📝 Améliore la Documentation</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*Yab8zK1N6QSwqY1a" /><figcaption>Photo by <a href="https://unsplash.com/@impatrickt?utm_source=medium&amp;utm_medium=referral">Patrick Tomasso</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>Le premier type de contribution qui me semble accessible pour les débutants, c’est la documentation. Les développeurs ont parfois tendance à délaisser les tâches de documentation. Et pourtant c’est important pour la réussite de tout projet open-source. Si les utilisateurs ne trouvent pas de l’aide quand ils rencontrent des problèmes ils risquent d’arrêter d’utiliser l’outil.</p><p>Récemment je me suis aperçu que la documentation de l’image Docker officielle de Golang pouvait être amendée. J’utilise principalement cette image pour faire de <a href="https://medium.com/p/int%C3%A9gration-continue-dune-lambda-impl%C3%A9ment%C3%A9e-en-go-33a10bce5f91">l’intégration continue avec des projets en Go</a>. Il se trouve que les exemples donnés dans la documentation utilisaient le tag d’une image relativement ancienne. J’ai donc mis à jour ces exemples pour qu’ils utilisent la dernière version disponible. Si tu souhaites en savoir plus, consulte la <a href="https://github.com/docker-library/docs/pull/1657">PR sur GitHub.</a></p><h3>🇫🇷 Traduit en Français</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*JwCMJTKCjR_sreT-" /><figcaption>Photo by <a href="https://unsplash.com/@nicnut?utm_source=medium&amp;utm_medium=referral">Nicola Nuttall</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>Un autre besoin sur beaucoup de projets est l’internationalisation. En effet la plupart des projets sont d’abord implémenté avec une interface en anglais. Afin de favoriser une adoption plus large il est courant de vouloir adapter cette interface à d’autres langues.</p><p>Comme je le disais dans le paragraphe précédent j’utilise beaucoup Jenkins au quotidien pour effectuer de l’intégration continue. En préparant l’article sur le <a href="https://medium.com/p/d%C3%A9ployer-jenkins-sur-aws-988191b1a079">déploiement d’un serveur Jenkins sur AWS</a>, je me suis aperçu que certaines parties de l’interface de Jenkins étaient en français et d’autres non. Je me suis donc mis au travail et j’ai proposé plusieurs PRs : <a href="https://github.com/jenkinsci/jenkins/pull/4566">ici</a>, <a href="https://github.com/jenkinsci/jenkins/pull/4505">là</a> ou encore <a href="https://github.com/jenkinsci/cloudbees-folder-plugin/pull/145">ici</a>.</p><p>Il y a un peu plus longtemps j’ai découvert le projet Moment JS. La manipulation de dates est l’un de ces défis que nous devons tous relever à un moment donné de notre carrière de développeur, et l’utilisation du bon outil permet de dompter cette bête sauvage ! La bibliothèque Moment JS est ainsi l’outil de référence pour les développements JavaScript.</p><p>Depuis que je l’ai découvert, je l’utilise régulièrement pour simplifier la validation, l’analyse et la manipulation des dates côté client. Une myriade de langues étaient déjà supportées mais il manquait le support du Breton. J’ai donc rajouté ce support avec <a href="https://github.com/moment/moment/pull/767">cette PR</a>, puis corrigé un certain nombre de bugs avec <a href="https://github.com/moment/moment/pull/4975">cette autre PR.</a></p><h3>🔬 Ajoute des Tests</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*ELU3cxLTG7dnDzs_" /><figcaption>Photo by <a href="https://unsplash.com/@nicolasthomas?utm_source=medium&amp;utm_medium=referral">Nicolas Thomas</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>Enfin la dernière catégorie de missions faciles à accomplir concerne les tests. Personnellement je teste systématiquement mes développements. Soit en mode TDD, en écrivant d’abord les tests puis le code de production. Parfois j’avoue que j’écris mes tests après.</p><p>Sur les projets open-source il est parfois possible de trouver des portions de code qui ne sont pas testées. Concevoir des tests pour ces portions te permet alors de mettre un pied dans le projet. C’est ce que j’ai fait sur le projet Prometheus par exemple avec <a href="https://github.com/prometheus/prometheus/pull/6138">cette PR</a>. J’aurais souhaité en profiter pour contribuer un peu plus sur ce projet, projet que j’utilise constamment, mais pour l’instant je n’ai pas trouvé le temps de le faire.</p><h3>🤝 Un projet que tu utilises</h3><p>Tu as peut-être remarqué une tendance parmi les exemples que je t’ai présentés, il s’agit à chaque fois d’outils que j’utilise au quotidien. Il est en effet plus facile je trouve de contribuer à des projets dont on est utilisateur. Je t’encourage donc à regarder d’abord les projets que tu utilises toi et à rechercher des choses à améliorer ou à corriger. D’une part il te sera plus facile de tester tes modifications car tu connais déjà l’interface ou les commandes. D’autre part cela est un juste retour des choses, si tu profites d’un projet libre il est légitime que tu finances cette utilisation par une contribution.</p><h3>🔎 Identifie des tâches pour débutant</h3><p>Enfin je voulais te parler d’une manière de trouver facilement des tâches pour débutant sur GitHub. J’ai découvert cette astuce lors d’un événement local organisé dans le cadre du Hacktoberfest. Il est courant d’attribuer le tag “Good First Issue” aux tâches accessibles aux débutants. Par exemple en ouvrant cette page <a href="https://github.com/issues?q=label%3A%22good+first+issue%22+is%3Aopen">https://github.com/issues?q=label%3A%22good+first+issue%22+is%3Aopen</a> tu peux consulter toutes les tâches ouvertes. <br>Si tu connais déjà le projet qui t’intéresse tu peux aussi rajouter “contribute” dans l’url. Par exemple en ouvrant la page <a href="https://github.com/vuejs/vue/contribute">https://github.com/vuejs/vue/contribute</a> tu vois toutes les tâches du projet VueJS.</p><p>Pour en savoir plus je t’invite à consulter cette page du blog GitHub : <a href="https://github.blog/2020-01-22-browse-good-first-issues-to-start-contributing-to-open-source/">https://github.blog/2020-01-22-browse-good-first-issues-to-start-contributing-to-open-source/</a></p><p>J’espère que cet article t’a plu et qu’il t’a motivé à faire ta première contribution. N’hésite pas à me laisser un commentaire ou une question, directement en bas de cet article ou en m’envoyant un message sur <a href="http://www.linkedin.com/in/jbleduigou/en">LinkedIn</a>.</p><p>Merci à <a href="https://github.com/zekth">Vincent</a> qui nous a présenté à Genesys il y a quelques semaines son expérience de contributeur. Merci à <a href="https://www.linkedin.com/in/antoine-gannat?lipi=urn%3Ali%3Apage%3Ad_flagship3_profile_view_base_contact_details%3BOPjWaAbOTZqdE26Qp1QMJQ%3D%3D">Antoine</a> pour sa question ce jour là qui a en partie inspirée cet article.<br>Merci également à <a href="https://medium.com/@chemidy">Cyrille</a> avec qui j’ai discuté récemment de mon souhait de contribuer à des projets en Go et dont certains conseils se retrouvent dans cet article.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d7e40880d479" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Retour sur le DevFest du Bout du Monde 2020]]></title>
            <link>https://medium.com/@jb.leduigou/retour-sur-le-devfest-du-bout-du-monde-2020-a6cfc87a64ed?source=rss-b698ed005d53------2</link>
            <guid isPermaLink="false">https://medium.com/p/a6cfc87a64ed</guid>
            <category><![CDATA[development]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[conference]]></category>
            <category><![CDATA[robotics]]></category>
            <dc:creator><![CDATA[Jean-Baptiste Le Duigou]]></dc:creator>
            <pubDate>Thu, 12 Mar 2020 21:10:45 GMT</pubDate>
            <atom:updated>2020-03-13T10:50:17.362Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*X8mzFJIz625Ba8VCBT0kVA.png" /><figcaption><a href="https://devfest.duboutdumonde.bzh/">https://devfest.duboutdumonde.bzh/</a></figcaption></figure><p>Le 28 février dernier a eu lieu le DevFest du Bout du Monde à Brest. Je n’avais pas pu y assister l’année dernière et cette année j’ai donc pris mes billets très en avance. C’est une chance de pouvoir avoir une conférence de cette importance en Basse-Bretagne et surtout pour un prix aussi modique. Il me semble que le ticket est à 40 € et ayant bénéficié du tarif pre-early bird je l’ai eu pour 20 €. Je vous propose donc de faire un résumé de cette journée, résumé qui sera forcément subjectif car je n’ai pas pu assister à tous les talks, il y avait quatre tracks en parallèle.</p><p>Le thème de cette édition était Skynet vs Asimov. J’ai demandé l’aide d’un collègue pour m’expliquer les concepts car ne regardant pas la télévision je ne connaissais pas Asimov et je savais vaguement que Skynet était une référence à Terminator. Heureusement la keynote d’ouverture m’a permis d’y voir plus clair, il s’agissait de réfléchir à la place que l’on souhaite accorder aux robots et plus généralement au code dans notre société. Les développeurs ont une responsabilité dans l’évolution que va suivre notre société, soit une société coercitive et aliénante ou au contraire une société plus libre grâce aux possibilités qu’offre la technologie et les logiciels.</p><p>Au niveau des talks en eux même, j’ai trouvé qu’il y avait une grande variété, certains étant très technique d’autres un peu plus théorique. J’ai particulièrement aimé le premier talk de la journée qui s’intitulait <a href="https://devfest.duboutdumonde.bzh/sessions/et_si_le_design_etait_en_fait_l_affaire_de_tous/">“Et si le design était l’affaire de tous”</a>. Le sujet portait sur l’UX design et la place qu’on y accorde dans les équipes. Cela m’a fait penser au changement qui s’est opéré il y a quelques années où l’on a souhaité rapprocher les développeurs et les testeurs. Il faut maintenant favoriser la collaboration entre les UX designers et le reste de l’équipe. Au-delà de l’aspect purement théorique, de <a href="https://t.co/3E11KmIB3C?amp=1">nombreux outils</a> ont été présentés (6-to-1, moodboard, etc.). Parmi les autres talks que j’ai appréciés il y avait un sur le <a href="https://devfest.duboutdumonde.bzh/sessions/monitorer_ses_apis_a_partir_de_zero__viser_l_au_dela__et_la_dimension_business/">monitoring d’API</a>, un sur <a href="https://devfest.duboutdumonde.bzh/sessions/supercharge_your_builds_with_bazel/">l’utilisation de Bazel</a> et un autre sur <a href="https://devfest.duboutdumonde.bzh/sessions/functional_programming___l_architecture_du_choix/">le functional programming.</a> Toutes ces présentations devraient être disponibles prochainement sur YouTube.</p><p>Au niveau de la logistique j’ai trouvé que c’était extrêmement bien organisé. Le lieu, l’UBO, est particulièrement adapté à ce type d’événement. D’autre part, nous avons eu largement de quoi nous sustenter tout au long de la journée. Mention spéciale pour le choix de ne pas distribuer de goodies cette année et utiliser l’argent ainsi économisé pour soutenir des initiatives telles que la Quadrature du Net. Étant dans une démarche zéro déchet j’apprécie grandement ce type d’initiative. Je pense qu’il est possible d’aller encore plus loin par exemple au niveau des gobelets de type ecocup qui pourrait être loués.</p><p>Enfin la keynote de fermeture nous a présenté le FabLab de l’Université de Brest et toutes les initiatives qui y ont lieu. C’était vraiment passionnant et je n’étais pas au courant de tous ces projets. Nous avons aussi eu une annonce, à savoir l’organisation d’une conférence dans les Côtes-d’Armor en septembre prochain. J’ai très hâte d’y assister !</p><p>Pour conclure et répondre à la problématique de cette journée à savoir Skynet ou Asimov, je suis de nature optimiste alors sans hésiter je choisis Asimov. Je suis convaincu la technologie va nous aider à construire une société plus ouverte et plus juste, mais pour cela il faudra rester vigilant, dénoncer les abus et prendre les bonnes décisions au quotidien !</p><p>J’espère que cet article vous a plu !<br>N’hésitez pas à me faire part de vos commentaires ou questions en bas de cet article ou en m’envoyant un message sur LinkedIn :<br><a href="http://www.linkedin.com/in/jbleduigou/en">http://www.linkedin.com/in/jbleduigou/en</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a6cfc87a64ed" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Ma banque a modifié son UI et ça m’embête !]]></title>
            <link>https://medium.com/@jb.leduigou/ma-banque-a-modifi%C3%A9-son-ui-et-%C3%A7a-memb%C3%AAte-8340c83c5953?source=rss-b698ed005d53------2</link>
            <guid isPermaLink="false">https://medium.com/p/8340c83c5953</guid>
            <category><![CDATA[serverless]]></category>
            <category><![CDATA[api]]></category>
            <category><![CDATA[banking]]></category>
            <category><![CDATA[lambda]]></category>
            <dc:creator><![CDATA[Jean-Baptiste Le Duigou]]></dc:creator>
            <pubDate>Thu, 05 Mar 2020 20:29:36 GMT</pubDate>
            <atom:updated>2020-03-05T20:29:36.008Z</atom:updated>
            <content:encoded><![CDATA[<h3>Ma banque a modifié son UI et ça m’embête !</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*74jNAGrVFUD8XX4v" /><figcaption>Photo by <a href="https://unsplash.com/@christnerfurt?utm_source=medium&amp;utm_medium=referral">Christian Erfurt</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>J’avais prévu de parler d’un tout autre sujet mais ma banque vient de mettre à jour son application de banque à distance et ça m’embête. Il faut dire que l’interface était vieillotte et il était grand temps de faire quelque chose. Dans la nuit de mardi à mercredi elle a déployé une nouvelle version de son application. Je n’ai pas encore eu le temps de tester toutes les fonctionnalités et je ne pourrai donc pas commenter l’ergonomie. Toutefois je trouve que le look est plus moderne et cela donne envie d’utiliser cette application.</p><p>Vous vous demandez donc pourquoi je suis mécontent si je trouve que l’interface est plus jolie ? Il se trouve que j’ai développé une application me permettant de suivre mes dépenses et ainsi mieux gérer mon budget. Pour ce faire j’utilise l’application de banque en ligne afin de télécharger un relevé de mes opérations au format CSV. Avec la mise à jour de l’application le format des données de ce fichier a été modifié. Cela casse la rétrocompatibilité et de ce fait mon application ne fonctionne plus. Si je vous parle de cela aujourd’hui c’est que je trouve que c’est un exemple de ce qu’il faut éviter quand on expose des données via une API ou tout autre méthode.</p><p>Afin que vous compreniez mieux la situation je vais vous présenter rapidement l’architecture de mon application. C’est une architecture serverless déployée sur le Cloud AWS. Après avoir téléchargé mon fichier CSV je le dépose sur un bucket S3, ceci déclenche l’exécution d’une lambda qui parse le fichier et attribue une catégorie à chaque transaction. Les transactions sont ensuite poussées individuellement dans une file d’attente SQS, chaque message déclenche à son tour l’exécution d’une deuxième lambda qui va écrire la transaction dans un fichier Google Sheets. Ceci me permet à la fin du mois d’avoir un listing complet de mes dépenses et de pouvoir vérifier le total par catégorie.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1008/1*cHlMT5JzKtsSQDVuqJkCfA.png" /><figcaption>Architecture du projet</figcaption></figure><p>Venons-en aux modifications du format de données. Tout d’abord il y a l’extension du fichier qui avant était en majuscule et maintenant est en minuscule. Ce n’est pas le problème principal car il suffit de mettre à jour le déclencheur dans la configuration de la lambda pour régler le problème. A l’intérieur du fichier plusieurs surprises, dans la version précédente une ligne de débit contenait quatre champs délimités par un point-virgule tandis qu’une ligne de crédit contenait cinq champs délimités par un point-virgule. Je me basais sur cette différence pour pouvoir faire la différence entre les différents types de ligne. Maintenant toutes les lignes contiennent cinq champs, toujours délimités par un point-virgule. D’autre part le libellé des opérations est maintenant en majuscule alors qu’avant seule la première lettre de chaque mot était en majuscule. Je constate d’ailleurs que sur les applications web et mobile c’est également le cas, je trouve cela dommage car moins lisible. Enfin il y a une chose qui aurait pu être modifiée mais qui ne l’a pas été. Le fichier CSV est au format windows-1252 alors que j’aurais préféré qu’il soit au format UTF-8.</p><p>Au final je devrais pouvoir survivre, j’ai commencé à mettre à jour l’application et le bon découpage des classes au sein cette application me permet d’avancer rapidement. Ce qui m’intéresse le plus c’est d’imaginer comment cela aurait pu être évité. La première des choses c’est que personne n’est probablement au courant de l’utilisation que je fais de cette fonctionnalité d’export. Ensuite cet exemple montre qu’une erreur dans votre API sera parfois exploitée par vos utilisateurs comme une fonctionnalité, ici le fait que certaines lignes n’ont pas le même nombre de champs que les autres. Une fois l’erreur exposée il devient difficile de la corriger car certains clients risquent de s’en plaindre. Enfin l’exposition de données à travers un format CSV aurait pu être remplacée par une API de type REST. Cela permet par exemple mieux sécuriser les échanges en mettant en place une authentification de type Oauth2. De plus l’utilisation du versionning d’API permettrait potentiellement de casser la rétrocompatibilité sur une nouvelle version mais de continuer à exposer l’ancienne version.</p><p>En définitive cette péripétie me donne l’occasion de réfléchir à la conception des APIs et à leurs utilisations. Je pense qu’à l’avenir les clients d’un fournisseur de services en ligne augmenteront les fonctionnalités possibles en passant par des application tierces. C’est déjà le cas dans certains domaines d’activités mais je pense que cela va se généraliser à tous les domaines. Il est donc important de bien concevoir ses APIs afin de catalyser cette utilisation possible.</p><p>J’espère que cet article vous a plu !<br>Le code de mon application est sur GitHub : <a href="https://github.com/jbleduigou/budgetcategorizer">https://github.com/jbleduigou/budgetcategorizer</a><br>La PR qui m’a permis de fixer le problème : <a href="https://github.com/jbleduigou/budgetcategorizer/pull/6">https://github.com/jbleduigou/budgetcategorizer/pull/6</a><br>N’hésitez pas à me faire part de vos commentaires ou questions en bas de cet article ou en m’envoyant un message sur LinkedIn :<br><a href="http://www.linkedin.com/in/jbleduigou/en">http://www.linkedin.com/in/jbleduigou/en</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8340c83c5953" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Design Thinking : le livre de Roger Martin]]></title>
            <link>https://medium.com/@jb.leduigou/design-thinking-le-livre-de-roger-martin-16116964bd86?source=rss-b698ed005d53------2</link>
            <guid isPermaLink="false">https://medium.com/p/16116964bd86</guid>
            <category><![CDATA[business]]></category>
            <category><![CDATA[design]]></category>
            <category><![CDATA[creativity]]></category>
            <category><![CDATA[design-thinking]]></category>
            <dc:creator><![CDATA[Jean-Baptiste Le Duigou]]></dc:creator>
            <pubDate>Wed, 26 Feb 2020 20:10:43 GMT</pubDate>
            <atom:updated>2020-02-26T20:10:43.354Z</atom:updated>
            <content:encoded><![CDATA[<h3>Design Thinking : le livre de Roger Martin</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/300/1*eKn9pjK8K6-qxcmHKu104Q.png" /></figure><p>Le Design Thinking a réussi à se répandre dans le monde du business ces dernières années et en particulier dans les entreprises de la tech. On ne compte plus les billets de blog, les conférences et talks à ce sujet. <br>Enième buzzword ou véritable instrument d’innovation ? J’ai voulu en savoir plus en lisant le livre de Roger Martin : <em>The Design of Business, Why Design Thinking is the Next Competitive Advantage</em>.</p><p>Première surprise, le livre a été publié en 2009. Le Design Thinking n’est donc pas une approche si récente. Cela explique aussi en partie l’aspect théorique du livre, qui traite plus du dilemme qui a poussé à formaliser le Design Thinking que de la mise en pratique de cette discipline.</p><p>Quelle est donc la thèse défendue par l’auteur ? Aujourd’hui, la plupart des entreprises ont l’envie d’innover. C’est même devenu un impératif, quand on sait par exemple que<a href="https://www.innosight.com/wp-content/uploads/2017/11/Innosight-Corporate-Longevity-2018.pdf"> la durée de vie moyenne des entreprises établie au S&amp;P 500 est passée sous les 15 ans</a>. Elles aspirent à proposer une innovation qui change la donne, imaginer le nouvel iPhone ou inventer le prochain Tik Tok. Beaucoup font de réels efforts pour être innovantes, mais elles obtiennent des résultats décevants. D’après Roger Martin l’approche managériale classique dans les entreprises, consistant à favoriser la pensée analytique au détriment de la pensée intuitive, les empêche de se réinventer.</p><p>Il présente alors un concept d’entonnoir de la connaissance comme un processus suivi par les entreprises pour innover plus efficacement. L’entonnoir de la connaissance comporte trois phases différentes :</p><ul><li>Le Mystère (<em>Mystery</em>) : le mystère est un problème qui doit être résolu, un problème que les clients de l’entreprises rencontrent au quotidien.</li><li>L’Heuristique (<em>Heuristic</em>) : l’heuristique est une règle empirique qui propose une solution au problème posé par le mystère.</li><li>L’Algorithme (Algorithm) : pour obtenir l’algorithme l’heuristique est transformée en une formule fixe, favorisant ainsi la simplicité et l’efficacité.</li></ul><p>Le passage du mystère à l’heuristique repose sur la pensée intuitive tandis que le passage de l’heuristique à l’algorithme s’appuie sur la pensée analytique.</p><p>Par conséquent la grande majorité des entreprises suivent une trajectoire commune. L’entreprise naît d’un acte créatif qui convertit un mystère en une heuristique par la pensée intuitive. Elle affine ensuite cette heuristique grâce à la pensée analytique et entre dans une longue phase où la gestion de l’entreprise domine. Au bout d’un moment, un concurrent se penche sur le mystère qui a fourni l’étincelle à cette entreprise, trouve une heuristique plus puissante et supplante l’entreprise d’origine, et ceci malgré l’avantage compétitif que procure l’efficacité de l’algorithme existant.</p><p>D’après Roger Martin il est nécessaire de trouver un équilibre entre pensée analytique et pensée intuitive afin de déceler de nouvelles heuristiques pour les mystères existants et peut-être aussi dénicher des mystères alternatifs. Il prend exemple sur Procter &amp; Gamble, le Cirque du Soleil et RIM afin d’illustrer son propos.</p><p>Néanmoins j’ai été un brin déçu par le côté trop théorique de ce livre. J’aurais apprécié d’avoir plus d’exemples concrets de mise en oeuvre du Design Thinking. J’ai aussi trouvé qu’il y avait beaucoup de répétitions, en particulier le principe de l’entonnoir de la connaissance qui est ressassé tout au long du livre. D’autre part, j’ai trouvé que le langage utilisé était trop littéraire. Ayant passé trois ans dans des pays anglophones je pense maîtriser correctement l’anglais et pourtant j’ai buté sur plusieurs mots tout au long de la lecture. Le fait de devoir rechercher la définition de ces mots casse un peu la dynamique de la lecture et estompe un peu le plaisir de lire.</p><p>Au final je pense que c’est un bon livre pour se mettre sur la voie du Design Thinking et comprendre la genèse de ce paradigme. Il demande toutefois à être complété par une approche plus axée sur la pratique, comme un atelier par exemple.</p><p>J’espère que cet article vous a plu !<br>Si vous avez des ressources à me recommander sur le Design Thinking n’hésitez pas à me l’indiquer en laissant un commentaire en bas de cet article ou en m’envoyant un message sur LinkedIn :<br><a href="http://www.linkedin.com/in/jbleduigou/en">http://www.linkedin.com/in/jbleduigou/en</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=16116964bd86" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Intégration Continue d’une Lambda implémentée en Go ]]></title>
            <link>https://medium.com/@jb.leduigou/int%C3%A9gration-continue-dune-lambda-impl%C3%A9ment%C3%A9e-en-go-33a10bce5f91?source=rss-b698ed005d53------2</link>
            <guid isPermaLink="false">https://medium.com/p/33a10bce5f91</guid>
            <category><![CDATA[golang]]></category>
            <category><![CDATA[testing]]></category>
            <category><![CDATA[jenkins]]></category>
            <category><![CDATA[agile]]></category>
            <category><![CDATA[continuous-integration]]></category>
            <dc:creator><![CDATA[Jean-Baptiste Le Duigou]]></dc:creator>
            <pubDate>Wed, 19 Feb 2020 21:42:38 GMT</pubDate>
            <atom:updated>2020-02-19T21:42:38.750Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*mY6E90BD6B4sYp-4" /><figcaption>Photo by <a href="https://unsplash.com/@alschim?utm_source=medium&amp;utm_medium=referral">Alexander Schimmeck</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>L’intégration continue est une pratique de développement qui nécessite des développeurs qu’ils poussent du code dans un dépôt partagé plusieurs fois par jour. Chaque commit est ensuite vérifié par un build automatisé, ce qui permet aux équipes de détecter les problèmes à un stade précoce. En intégrant régulièrement, il est possible de détecter rapidement les erreurs et de les localiser plus facilement.</p><p>Je vous ai déjà présenté le serveur Jenkins dans d’autres articles : comment <a href="https://medium.com/@jb.leduigou/d%C3%A9ployer-jenkins-sur-aws-988191b1a079?source=friends_link&amp;sk=17a45dc1e5388efa3604646dd77b5fe8">l’installer sur AWS</a> et comment l’utiliser pour <a href="https://medium.com/@jb.leduigou/automatiser-la-d%C3%A9tection-de-vuln%C3%A9rabilit%C3%A9s-%EF%B8%8F-f9a483c1d27e?source=friends_link&amp;sk=667e4f54b3947a4354f968235104dae8">détecter des vulnérabilités</a>. Il existe par ailleurs une multitude d’exemples en ligne pour mettre en place une CI pour des projets en Java ou Javascript.</p><p>Malheureusement les ressources sont plus rares concernant les projets implémentés en Go. Je vous propose donc de regarder dans cet article comment mettre en place un pipeline sous Jenkins pour compiler et tester une lambda implémentée en Go.</p><h3>Golang, une brève introduction</h3><p>Go, également connu sous le nom de Golang, est un langage de programmation compilé et statiquement typé. Le projet est porté par Google, qui l’a open-sourcé en 2009.</p><p>Go présente des similarités avec le C. Cependant, il améliore le C en ajoutant, entre autres, un mécanisme de garbage collection, le typage structurel et la sécurité de la mémoire.</p><p>Le langage de programmation Go a bénéficié d’un soutien croissant de la part des développeurs du monde entier, et il figure désormais en bonne place dans le classement “<a href="https://insights.stackoverflow.com/survey/2019#technology-_-most-loved-dreaded-and-wanted-languages">Most Loved, Dreaded, and Wanted</a>” de StackOverflow :</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/697/1*0qC9Xejzp88Am7Xogl-ZnQ.png" /><figcaption>Extrait de l’étude de StackOverflow</figcaption></figure><p>Si vous souhaitez en savoir plus sur ce langage, j’ai écris un article en début d’année : “<a href="https://medium.com/@jb.leduigou/apprendre-le-langage-go-en-2020-1ad43ecaccb?source=friends_link&amp;sk=b847bdfabe5ceaf3bbf6f6e185661593">Apprendre le langage Go en 2020</a>”</p><h3>Préparation du serveur Jenkins</h3><p>Afin de pouvoir compiler notre lambda nous allons avoir besoin d’une installation de Go. Plusieurs options s’offrent à nous : installer Go sur le serveur Jenkins, créer une nouvelle instance EC2 avec Go et la rattacher en tant que “slave” au serveur Jenkins, installer Docker sur le serveur Jenkins et utiliser une image Go pour notre pipeline. Je préfère partir sur cette dernière option.</p><p>Installer manuellement Go sur le serveur n’est pas forcément compliqué. En revanche avec la multiplication des projets à compiler on risque à la longue de se retrouver avec trop d’outils à installer et à maintenir.</p><p>L’utilisation de slaves est un bonne alternative pour éviter cela, en déployant un slave par type de projet. L’inconvénient est que d’une part cela complexifie le déploiement et d’autre part cela augmente la facture AWS à la fin du mois.</p><p>La dernière solution consiste à installer Docker sur le serveur Jenkins et ensuite à déployer un conteneur comme slave pour la chaque construction du projet. Cela permet de limiter le nombre d’outils installés sur le serveur tout en permettant de construire des projets de types variés. De plus il devient plus facile de construire un même projet sur différents runtimes cibles : Golang 1.13 et 1.14-rc par exemple.</p><p>L’installation de docker se fait à l’aide de ces commandes :</p><pre>yum install docker -y <br>usermod -aG docker jenkins<br>service docker start<br>sudo systemctl enable docker<br>service jenkins restart</pre><p>La première ligne installe Docker depuis le gestionnaire de packets yum. <br>La seconde rajoute le groupe “docker” à l’utilisateur “jenkins”, afin que cet utilisateur puisse lancer des commandes docker. <br>La troisième ligne démarre le service Docker sur la machine.<br>La quatrième ligne indique au système de démarrer le service Docker à chaque redémarrage de la machine.<br>Enfin la dernière ligne redémarre le service Jenkins afin de prendre en compte les modifications de groupes/utilisateurs.</p><p>Si vous avez déjà un serveur Jenkins de déployé vous pouvez vous connecter à votre instance EC2 via SSH et taper ces commandes dans la console.<br>Si vous n’avez pas de serveur de déployé vous pouvez rajouter ces instructions dans le script d’initialisation que j’ai présenté dans <a href="https://medium.com/@jb.leduigou/d%C3%A9ployer-jenkins-sur-aws-988191b1a079?source=friends_link&amp;sk=17a45dc1e5388efa3604646dd77b5fe8">cet article</a>.</p><h3>Première étape : la compilation</h3><p>Nous allons donc créer un nouveau pipeline sur le serveur Jenkins. Cliquez sur “Nouveau Item”, saisissez le nom “budgetcategorizer”, sélectionnez “Pipeline” puis cliquez sur “OK”. Faites défiler le nouvel écran qui s’affiche puis en bas de la page renseignez le script suivant :</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/857daa078fcae0eb03e77da9047efbba/href">https://medium.com/media/857daa078fcae0eb03e77da9047efbba/href</a></iframe><p>Cliquez sur “Sauver” et lancez le pipeline. Vous devriez obtenir un résultat qui ressemble à ceci :</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*2YwaiT4eYh_OsUii4yyZKw.png" /></figure><p>Regardons les instructions du pipeline d’une peu plus près si vous le voulez bien.</p><p>Tout d’abord il y a l’instruction qui déclare l’agent sur lequel va s’exécuter la construction du projet :</p><pre>agent {<br>  docker { image &#39;golang:1.13&#39; }<br>}</pre><p>Ici on déclare que l’on souhaite utiliser un container Docker qui se basera sur l’image “golang:1.13”. On comprend qu’il est possible de basculer vers une autre image en changeant cette ligne, par exemple en remplaçant “1.13” par “1.14-rc”.</p><p>Ensuite il y a trois variables d’environnement :</p><pre>environment {<br>  XDG_CACHE_HOME=&#39;/tmp/.cache&#39;<br>  GOOS=&#39;linux&#39;<br>  GOARCH=&#39;amd64&#39;<br>}</pre><p>XDG_CACHE_HOME permet de spécifier le répertoire où les données mises en cache vont être écrites. Ce répertoire est utilisé lors de la résolution des modules Go. Si on ne le spécifie pas le user du container n’a pas les droit d’écriture et cela perturbe le build.</p><p>GOOS permet de spécifier le système d’exploitation cible pour la compilation. Ici nous choisissons “linux” car c’est la valeur nécessaire pour AWS Lambda.</p><p>GOARCH permet de spécifier l’architecture cible (en gros le type de processeur) pour la compilation. De même nous choisissons la valeur nécessaire pour AWS Lambda.</p><p>Enfin le reste du code permet de récupérer le projet à partir de GitHub, créer un lien symbolique dans le répertoire GOPATH et pour finir de compiler le projet.</p><h3>Deuxième étape : les tests unitaires</h3><p>L’étape suivante de notre pipeline sera de lancer les tests unitaires et d’afficher un rapport des résultats obtenus. En effet pour l’instant la seule chose dont on est sûr c’est que notre code compile, cela ne veut dire qu’il fait ce qu’il est sensé faire !</p><p>Nous allons donc rajouter une étape dans notre Jenkinsfile :</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/c3c84f64685a2df65acc902ffe40af60/href">https://medium.com/media/c3c84f64685a2df65acc902ffe40af60/href</a></iframe><p>Une fois la configuration du pipeline mise à jour et après une nouvelle construction de ce dernier vous devriez voir ceci :</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*eDoIN9vpDn8utKLgfa_pOw.png" /></figure><p>Concernant les instructions de cette étape, elles consistent à installer un outil qui s’appele “go-junit-report” dans un premier temps. Cet outil permet de formater les résultats des tests Go en utilisant le format Junit, ce qui nous permet par la suite d’utiliser le plugin Jenkins associé pour afficher le rapport de tests.</p><p>Ensuite on lance les tests Go en redirigeant la sortie vers l’outil “go-junit-report” qui à son tour écrira le résultat dans le fichier “report.xml”.</p><p>Enfin on a une étape qui permet d’afficher le rapport de tests après l’exécution de l’étape en utilisant le plugin “JUnitResultArchiver”.</p><p>Il peut-être intéressant de vérifier le bon fonctionnement de ces instructions dans le cas où un test échoue. Pour cela il est possible de modifier un test à la volée pour le faire échouer sciemment. Nous utiliserons alors la commande “sed” qui est un éditeur de stream, en remplaçant “???” par “N/A” :</p><pre>sh &quot;sed -i -e &#39;s|???|N/A|g&#39; categorizer/categorizer.go&quot;</pre><p>Si nous relançons le pipeline nous constatons que le test échoue et que le rapport permet de constater cet échec et d’en afficher les détails :</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ziGFjH8BGlCtJhYYxYY0GA.png" /><figcaption>Affichage de l’historique du pipeline</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8RDTgmwOp5bsU82njUdZmA.png" /><figcaption>Détails du test en échec</figcaption></figure><h3>Troisième étape : le linting</h3><p>Qu’est-ce que le linting ? Le linting est la vérification automatisée de votre code source pour détecter des erreurs de programmation et de style. Le linting est important pour améliorer la qualité globale de votre code. A long terme cela peut vous aider à développer plus vite et à réduire les coûts en trouvant les erreurs plus tôt.</p><p>L’écosystème Go propose deux outils de ce type : GoLint et GoVet. Le premier s’attarde principalement sur le style du code source tandis que le second signale les constructions suspectes, telles qu’un Printf dont les arguments ne correspondent pas à la string de formattage.</p><p>Rajoutons un étape supplémentaire à notre pipeline :</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/13fa50e2334d2b6b46f71a05231c1053/href">https://medium.com/media/13fa50e2334d2b6b46f71a05231c1053/href</a></iframe><p>Il vous faudra également installer le plugin <a href="https://plugins.jenkins.io/warnings-ng/">Warnings Next Generation</a>, en allant dans le menu “Administrer Jenkins”, puis dans “Gestion des Plugins”.</p><p>Une fois le plugin installé, la configuration du pipeline mise à jour et après une nouvelle construction de ce dernier vous devriez voir ceci :</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*5gfm7RnpIqa4WI6x1I9bOg.png" /></figure><p>Comme pour les tests unitaires il est possible de modifier les fichiers à la volée afin de s’assurer que les instructions de cette étape font le job :</p><pre>sh &quot;sed -i -e &#39;s|NewBroker will|this will|g&#39; messaging/message.go&quot;</pre><pre>sh &quot;sed -i -e &#39;s|objectKey, bucket|objectKey, 1337|g&#39; config/config.go&quot;</pre><p>Si nous relançons le pipeline nous constatons que des avertissements sont détectés et que le rapport permet d’en afficher les détails :</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*gsIM2Io91aVSDQfNhc3OAw.png" /><figcaption>Affichage de l’historique du pipeline</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Q5KX_J39kBlC4exyTLSglw.png" /><figcaption>Affichage du rapport global de linting</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/946/1*KeJH5687sKQLDLlBY9zcoA.png" /><figcaption>Détail d’un avertissement remonté par GoVet</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/711/1*cfqfLBysRcfrmW62nDIzlA.png" /><figcaption>Détail d’un avertissement remonté par GoLint</figcaption></figure><h3>Améliorations possibles</h3><p>Le pipeline fonctionne parfaitement en l’état, il y a toutefois quelques détails qui me chagrinent.</p><p>Tout d’abord il y a la répétition des commandes :</p><pre>cd $GOPATH/src/github/jbleduigou/budgetcategorizer &amp;&amp;</pre><p>Ces commandes alourdissent le code à mon avis. Cela rend plus difficile la compréhension du pipeline à la première lecture. J’ai essayé de rajouter une variable d’environnement GOPATH afin de pouvoir utiliser la syntaxe :</p><pre>dir(&quot;GOPATH&quot;) {<br> [...]<br>}</pre><p>Malheureusement je n’ai pas réussi à ce que cela fonctionne donc pour l’instant je reste avec la syntaxe de changement de répertoire.</p><p>Autre chose, j’ai voulu zipper le binaire obtenu en sortie de compilation. Malheureusement la commande zip n’est pas présente dans l’image Docker officielle de Golang. Je pourrais construire ma proche image Docker pour cela mais je trouve que c’est beaucoup de travail pour un détail pas si important.</p><p>J’espère que cet article vous a plu ! <br>Le code de la lambda utilisée pour cet article est sur GitHub : <a href="https://github.com/jbleduigou/budgetcategorizer">https://github.com/jbleduigou/budgetcategorizer</a><br>Le pipeline Jenkins complet se trouve dans le répertoire “ci” : <a href="https://github.com/jbleduigou/budgetcategorizer/blob/master/ci/Jenkinsfile.groovy">https://github.com/jbleduigou/budgetcategorizer/blob/master/ci/Jenkinsfile.groovy</a><br>N’hésitez pas à me faire part de vos commentaires ou questions en bas de cet article ou en m’envoyant un message sur LinkedIn :<br><a href="http://www.linkedin.com/in/jbleduigou/en">http://www.linkedin.com/in/jbleduigou/en</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=33a10bce5f91" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>