<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>It-Signal</title>
        <description>A agile developer's blog</description>
        <link>https://maxime.werlen.fr</link>
        <lastBuildDate>Sat, 18 Jul 2026 15:48:32 +0000</lastBuildDate>
        <pubDate>Sat, 18 Jul 2026 15:48:32 +0000</pubDate>
        <language>fr-fr</language>
        <managingEditor>maxime@werlen.fr</managingEditor>
        <ttl>60</ttl>
        
        <item>
            <title>Ma config VIM</title>
            <description>&lt;p&gt;J’utilise beaucoup &lt;a href=&quot;https://fr.wikipedia.org/wiki/Vim&quot; title=&quot;Page wikipedia de VIM&quot;&gt;VIM&lt;/a&gt; pour rédiger de la documentation et pour l’édition de configurations sur les serveurs.
Avoir une configuration personnalisée est vraiment très agréable, 
mais il est complexe de maintenir la configuration identique sur toutes les machines.
J’avais tenté de stocker mon &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.vimrc&lt;/code&gt; avec mes autres dotfiles sur git, 
mais à l’usage ce type de script (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.bashrc&lt;/code&gt;…) est difficile à maintenir sur plusieurs plateformes Ubuntu, Centos, Windows avec Git Bash…&lt;/p&gt;

&lt;p&gt;Suite à la lecture d’un &lt;a href=&quot;http://marcgg.com/blog/2016/03/01/vimrc-example/&quot; title=&quot;Vim Configuration From Scratch in 2016&quot;&gt;article&lt;/a&gt; sur la configuration de &lt;a href=&quot;https://fr.wikipedia.org/wiki/Vim&quot; title=&quot;Page wikipedia de VIM&quot;&gt;VIM&lt;/a&gt; “from scratch” 
j’ai décidé de reprendre ma configuration et de ne versionner que mon dossier &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.vim&lt;/code&gt;.
Le fichier &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.vimrc&lt;/code&gt; est un lien symbolique vers un fichier du répertoire &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.vim&lt;/code&gt;.
L’article est très intéressant et propose des extensions pratiques.
Voici le résultat maintenant que mon &lt;a href=&quot;https://fr.wikipedia.org/wiki/Vim&quot; title=&quot;Page wikipedia de VIM&quot;&gt;VIM&lt;/a&gt; est correctement configuré :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/vimconfig.png&quot; alt=&quot;Ma configuration VIM&quot; /&gt;&lt;/p&gt;

</description>
            <pubDate>Tue, 31 May 2016 00:00:00 +0000</pubDate>
            <link>https://maxime.werlen.fr/blog/tech/2016/05/31/vimConfig.html</link>
            <author>maxime@werlen.fr</author>
            <category>Tech</category>
            <guid isPermaLink="true">https://maxime.werlen.fr/blog/tech/2016/05/31/vimConfig.html</guid>
        </item>
        
        <item>
            <title>Todotxt</title>
            <description>&lt;p&gt;Une petite note rapide pour vous parler de &lt;a href=&quot;http://todotxt.com/&quot; title=&quot;Le site officiel&quot;&gt;todotxt&lt;/a&gt;,
un gestionnaire de tâche universel. Tout l’intérêt tient dans la simplicité du système :
les tâches sont stockées sous forme d’un unique fichier texte. 
Une syntaxe toute simple permet de spécifier la priorité, la catégorie et l’échéance des tâches.
De nombreux clients existent pour manipuler cette liste de tâches : 
des applications pour smartphones, des plugins pour les logiciels de messagerie et aussi
un client en ligne de commande.
C’est ce dernier que j’utilise au quotidien pour gérer ma liste de tâches personnelle et
professionnelle. Le système d’alias de &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bash&lt;/code&gt; me permet d’avoir une commande simple (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;t&lt;/code&gt; par
exemple pour ma liste de tâches professionnelles) qui m’affiche la liste des tâches à réaliser.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/todotxt.png&quot; alt=&quot;Exemple de liste de tâches&quot; title=&quot;(c) Maxime Werlen&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Bref, un outil très pratique qui couplé avec Dropbox permet d’avoir sa liste de tâche 
toujours avec soi. Je vous invite à vous pencher sur &lt;a href=&quot;https://github.com/ginatrapani/todo.txt-cli/wiki/Todo.sh-Add-on-Directory&quot;&gt;la liste des extensions&lt;/a&gt;, 
bien fournie, qui permet d’ajouter plein de fonctionnalités utiles (gestion des répétitions, rapports…)&lt;/p&gt;

</description>
            <pubDate>Sun, 22 May 2016 00:00:00 +0000</pubDate>
            <link>https://maxime.werlen.fr/blog/worktips/2016/05/22/todotxt.html</link>
            <author>maxime@werlen.fr</author>
            <category>WorkTips</category>
            <guid isPermaLink="true">https://maxime.werlen.fr/blog/worktips/2016/05/22/todotxt.html</guid>
        </item>
        
        <item>
            <title>WorkTips</title>
            <description>&lt;p&gt;Depuis plusieurs mois j’écris très peu d’articles.
Le peu de temps que j’investis sur le blog est entièrement consacré à faire avancer une
présentation sur la programmation fonctionnelle.
Je me suis lancé sur cette présentation après avoir suivi un &lt;a href=&quot;https://en.wikipedia.org/wiki/Massive_open_online_course&quot;&gt;MOOC&lt;/a&gt;
sur le sujet. Depuis je n’ai jamais eu d’occasion de mettre en pratique cette formation.&lt;/p&gt;

&lt;p&gt;Mon activité professionnelle m’amène à passer tout mon temps à faire de la gestion de projet,
du support technique, du management, mais très peu de développement.
Plutôt que d’essayer de vous parler de programmation alors que je n’en fais presque plus, 
je vais essayer de vous parler ce que je fais. Je voudrais commencer par une série nommée
&lt;strong&gt;worktips&lt;/strong&gt; dans laquelle je vous présenterais les conseils que je donne autour de moi.
Ces courts articles parleront principalement des outils et des méthodes que j’utilise
pour m’organiser.&lt;/p&gt;

&lt;p&gt;Le management est encore un sujet récent pour moi, mais je m’intéresse beaucoup.
J’essaierai de faire quelques articles pour vous présenter ma vision des choses.&lt;/p&gt;

&lt;p&gt;J’espère être plus assidu cette année sur ce blog &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;:)&lt;/code&gt;&lt;/p&gt;
</description>
            <pubDate>Sat, 09 Jan 2016 00:00:00 +0000</pubDate>
            <link>https://maxime.werlen.fr/blog/worktips/2016/01/09/worktips.html</link>
            <author>maxime@werlen.fr</author>
            <category>WorkTips</category>
            <guid isPermaLink="true">https://maxime.werlen.fr/blog/worktips/2016/01/09/worktips.html</guid>
        </item>
        
        <item>
            <title>Sécurisation des mails</title>
            <description>&lt;p&gt;Ces derniers temps je me suis intéressé à la configuration et à la sécurisation d’un serveur de mail.
Mon but initial était de pouvoir m’envoyer des mails de mon adresse Gmail sur une adresse locale et inversement.
Cette première étape a été rapidement franchie grâce à l’installation d’un &lt;a href=&quot;//en.wikipedia.org/wiki/Postfix_(software)&quot; title=&quot;Postfix MTA&quot;&gt;postfix&lt;/a&gt; et d’un &lt;a href=&quot;//en.wikipedia.org/wiki/Dovecot_(software)&quot; title=&quot;Open-Source IMAP and POP server&quot;&gt;dovecot&lt;/a&gt;, mais Gmail mettait systématiquement mes mails en spam.&lt;/p&gt;

&lt;h2 id=&quot;les-normes-dauthentification&quot;&gt;Les normes d’authentification&lt;/h2&gt;

&lt;p&gt;En creusant j’ai découvert tout un ensemble de systèmes d’authentification des mails : &lt;a href=&quot;//en.wikipedia.org/wiki/Sender_Policy_Framework&quot; title=&quot;Sender Policy Framework&quot;&gt;SPF&lt;/a&gt;, &lt;a href=&quot;//en.wikipedia.org/wiki/DomainKeys_Identified_Mail&quot; title=&quot;DomainKeys Identified Mail&quot;&gt;DKIM&lt;/a&gt; et &lt;a href=&quot;//en.wikipedia.org/wiki/DMARC&quot; title=&quot;Domain-based Message Authentication, Reporting and Conformance&quot;&gt;DMARC&lt;/a&gt;.
Ces normes permettent d’améliorer l’authentification du premier &lt;a href=&quot;//en.wikipedia.org/wiki/Message_transfer_agent&quot; title=&quot;Message Transfert Agent&quot;&gt;MTA&lt;/a&gt;  (le premier relais mail qui a reçu le mail de l’émetteur).
En mettant en place toutes ces normes (principalement des enregistrements DNS et des configurations de &lt;a href=&quot;//en.wikipedia.org/wiki/Postfix_(software)&quot; title=&quot;Postfix MTA&quot;&gt;postfix&lt;/a&gt;) Gmail a accepté mes mails : mission réussie.
Il me restait néanmoins un arrière-gout d’inachevé, pourquoi s’arrêter au premier &lt;a href=&quot;//en.wikipedia.org/wiki/Message_transfer_agent&quot; title=&quot;Message Transfert Agent&quot;&gt;MTA&lt;/a&gt;, pourquoi ne pas authentifier l’émetteur directement ?&lt;/p&gt;

&lt;h2 id=&quot;gpg-et-la-cryptographie&quot;&gt;&lt;a href=&quot;//www.gnupg.org&quot; title=&quot;Gnu Privacy Guard, implémentation libre de openPGP&quot;&gt;GPG&lt;/a&gt; et la cryptographie&lt;/h2&gt;

&lt;p&gt;J’ai toujours été intéressé par la cryptographie et ses domaines annexes comme la gestion de certificat (j’ai ma petite PKI personnelle), la signature électronique (je signe les PDF que je produis) et l’archivage probant (non, ma folie a des limites, je n’ai pas de coffre-fort électronique).
En me renseignant sur l’authentification de l’émetteur je me suis rendu compte que toutes les technologies étaient basées sur de la signature électronique, soit en &lt;a href=&quot;//en.wikipedia.org/wiki/X.509&quot; title=&quot;Standard X.509 de l&apos;ITU&quot;&gt;X.509&lt;/a&gt; avec par exemple Outlook ou &lt;a href=&quot;//www.mozilla.org/fr/thunderbird/&quot; title=&quot;Open-Source MUA&quot;&gt;Thunderbird&lt;/a&gt; soit avec &lt;a href=&quot;//www.gnupg.org&quot; title=&quot;Gnu Privacy Guard, implémentation libre de openPGP&quot;&gt;GPG&lt;/a&gt;.
&lt;a href=&quot;//en.wikipedia.org/wiki/X.509&quot; title=&quot;Standard X.509 de l&apos;ITU&quot;&gt;X.509&lt;/a&gt; souffrant de trop nombreux problèmes pour que j’y fasse réellement confiance, j’ai décidé d’explorer GPG que je n’avais fait que survoler jusque-là.&lt;/p&gt;

&lt;p&gt;J’ai suivi quelques tutoriels pour créer et publier &lt;a href=&quot;https://pgp.mit.edu/pks/lookup?op=vindex&amp;amp;search=0x49E573FA0D70DDA6&quot;&gt;ma clé GPG&lt;/a&gt; (vous la trouverez sur ma page &lt;a href=&quot;/contact.html&quot;&gt;contact&lt;/a&gt;).
J’ai configuré mes clients mail pour signer mes messages sortants.
Tout cela fonctionne parfaitement.&lt;/p&gt;

&lt;h2 id=&quot;un-bbl&quot;&gt;Un BBL&lt;/h2&gt;

&lt;p&gt;Pour ne pas garder le fruit de toutes ces recherches uniquement pour moi (j’ai bien essayé de partager avec ma femme, mais ça ne l’intéresse pas), j’ai décidé d’en faire une présentation dans mon &lt;a href=&quot;//www.sogelink.fr&quot;&gt;entreprise&lt;/a&gt;.
En effet, tous les mois j’organise un &lt;a href=&quot;//www.brownbaglunch.fr/&quot; title=&quot;Brown Bag Lunch&quot;&gt;BBL&lt;/a&gt;  (pour &lt;strong&gt;B&lt;/strong&gt;rown &lt;strong&gt;B&lt;/strong&gt;ag &lt;strong&gt;L&lt;/strong&gt;unch), il s’agit d’un repas où chacun amène son repas (d’où les sacs bruns) et où l’un des participants présente une technologie ou sujet qui l’a intéressé.
Ce mois-ci c’était moi avec &lt;a href=&quot;/presentations/securite-mails.html&quot;&gt;ma présentation sur la sécurisation des mails&lt;/a&gt;.
J’ai beaucoup appris en réalisant cette présentation devant un public exigeant de développeurs et d’administrateurs systèmes et j’espère qu’eux aussi ont appris quelque chose.&lt;/p&gt;

</description>
            <pubDate>Sun, 22 Feb 2015 00:00:00 +0000</pubDate>
            <link>https://maxime.werlen.fr/blog/tech/2015/02/22/securite-mails.html</link>
            <author>maxime@werlen.fr</author>
            <category>Tech</category>
            <guid isPermaLink="true">https://maxime.werlen.fr/blog/tech/2015/02/22/securite-mails.html</guid>
        </item>
        
        <item>
            <title>Microdata</title>
            <description>&lt;p&gt;En faisant un tour sur le service &lt;a href=&quot;//www.google.com/intl/en/webmasters/&quot; title=&quot;Webmaster Tools par Google&quot;&gt;Webmaster Tools&lt;/a&gt; de Google je me suis rendu compte qu’ils avaient ajouté une section sur les &lt;a href=&quot;//en.wikipedia.org/wiki/Microdata_(HTML)&quot; title=&quot;Microdata sur wikipedia&quot;&gt;Microdata&lt;/a&gt;.
Cette norme permet d’ajouter dans une page HTML des informations standardisées permettant un traitement automatisé de l’information.&lt;/p&gt;

&lt;p&gt;Je l’utilise par exemple sur ce site pour indiquer sur chaque page qu’elle fait partie d’un blog personnel s’intitulant “It-Signal” dont je suis l’auteur et que le post de blog est publié sous licence CC-BY-NC-SA.
Ce type d’informations évidentes pour les utilisateurs humains sont plus complexes à obtenir pour un web-crawler.
L’insertion de ces balises Microdata favorisent la compréhension de son site par les moteurs de recherche et permettent la création de résultats de recherche mieux présentés.&lt;/p&gt;

&lt;p&gt;Ce n’est malheureusement pas encore bien au point chez Google puisque seuls certains types d’informations sont pris en compte (comme les revues d’objets ou les recettes par exemple):&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/microdata.png&quot; alt=&quot;Exemple de résultats&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Pour tester la bonne mise en place de vos balises vous pouvez vous aider de l’&lt;a href=&quot;//developers.google.com/structured-data/testing-tool/&quot; title=&quot;Outil de test de Google&quot;&gt;outil de test&lt;/a&gt; de Google (encore).&lt;/p&gt;

</description>
            <pubDate>Tue, 20 Jan 2015 00:00:00 +0000</pubDate>
            <link>https://maxime.werlen.fr/blog/tech/2015/01/20/Microdata.html</link>
            <author>maxime@werlen.fr</author>
            <category>Tech</category>
            <guid isPermaLink="true">https://maxime.werlen.fr/blog/tech/2015/01/20/Microdata.html</guid>
        </item>
        
        <item>
            <title>Always @ Home</title>
            <description>&lt;p&gt;J’ai depuis quelques années un petit serveur chez moi que j’utilise pour plein de choses différentes (hébergement d’un serveur de streaming audio/vidéo, média-player, hébergement de photo, serveur de fichier). J’ai régulièrement besoin de m’y connecter, généralement en SSH, mais ce n’est pas toujours aussi simple.&lt;/p&gt;

&lt;h2 id=&quot;sslh&quot;&gt;SSLH&lt;/h2&gt;

&lt;p&gt;J’ai découvert &lt;a href=&quot;http://www.rutschle.net/tech/sslh.shtml&quot; title=&quot;Page officielle de SSLH&quot;&gt;SSLH&lt;/a&gt; lorsqu’un firewall a bloqué mon accès SSH à mon serveur perso. Pour contourner cette limitation, j’ai installé SSLH qui est multiplexer SSL/SSH. Les deux protocoles peuvent ainsi utiliser le port 443 qui n’est presque jamais fermé. Selon la séquence de handshake, le multiplexer redirige le flux vers le serveur Apache qui prendra en charge le SSL ou vers le serveur SSHD qui prendra en charge la session SSH.
Le service est très simple à installer et très efficace.&lt;/p&gt;

&lt;h2 id=&quot;vpn&quot;&gt;VPN&lt;/h2&gt;

&lt;p&gt;J’utilise depuis quelques mois un serveur VPN (&lt;a href=&quot;https://help.ubuntu.com/community/OpenVPN&quot;&gt;openvpn&lt;/a&gt;) hébergé sur mon serveur perso.
Il me sert principalement à accéder à des services que je ne souhaite pas ouvrir sur internet (backoffice douteux de certains logiciels…).
Toutes les connexions VPN arrivent par sécurité dans une zone IP séparée. Le firewall de mon serveur n’autorise ainsi que quelques services à être accédés depuis cette zone.
J’ai généré les clés nécessaires à partir de ma petite PKI personnelle (avec ma clé root autosignée). 
Les configurations sont installées sur tous mes devices : ordinateurs perso et pro et téléphone portable.&lt;/p&gt;

&lt;p&gt;Tous ces petits outils sont bien utiles pour administrer à distance mon petit serveur perso. Je vous recommande de jeter un oeil à ces outils avant d’être bloqué derrière un firewall trop strict :)&lt;/p&gt;
</description>
            <pubDate>Sun, 05 Oct 2014 00:00:00 +0000</pubDate>
            <link>https://maxime.werlen.fr/blog/2014/10/05/Always-at-home.html</link>
            <author>maxime@werlen.fr</author>
            <category></category>
            <guid isPermaLink="true">https://maxime.werlen.fr/blog/2014/10/05/Always-at-home.html</guid>
        </item>
        
        <item>
            <title>Mon premier ordinateur : un Z88</title>
            <description>&lt;p&gt;Je suis partit récemment à la recherche du nom du premier ordinateur que j’avais eu dans les mains.
La recherche a été longue, ma mémoire de poisson rouge n’aidant pas, mais j’ai réussi à retrouver la trace du &lt;strong&gt;Cambridge Z88&lt;/strong&gt;.&lt;/p&gt;

&lt;h1 id=&quot;cambridge-z88&quot;&gt;Cambridge Z88&lt;/h1&gt;
&lt;p&gt;Cet ordinateur &lt;strong&gt;portable&lt;/strong&gt; disposait d’un processeur 3 Mhz, de 32 Kb de RAM et un disque de 128 Kb (une cartouche EPROM).
L’écran monochrome était limité à 8 lignes. Les batteries étaient tout simplement des piles AA. Ca pesait moins d’un kilo.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/Z88.png&quot; alt=&quot;Cambridge Z88&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Quelques années après la sortie du Z88,
mon père avait ramené de son travail un exemplaire dont l’écran était abimé
(les 3 dernières lignes étaient inutilisables et le stockage n’était plus persistant).
Entre 10 et 15 ans, j’ai régulièrement joué avec cet ordinateur.
J’utilisais l’éditeur de programme en BASIC pour créer des petits jeux pour tromper l’ennui des après-midi pluvieuses.&lt;/p&gt;

&lt;p&gt;Ça m’a fait un petit pincement au cœur de revoir ce cher Z88.&lt;/p&gt;
</description>
            <pubDate>Fri, 19 Sep 2014 00:00:00 +0000</pubDate>
            <link>https://maxime.werlen.fr/blog/autres/2014/09/19/Z88.html</link>
            <author>maxime@werlen.fr</author>
            <category>Autres</category>
            <guid isPermaLink="true">https://maxime.werlen.fr/blog/autres/2014/09/19/Z88.html</guid>
        </item>
        
        <item>
            <title>Un blog tout en markdown</title>
            <description>&lt;p&gt;Ça fait maintenant un an que j’ai mis en ligne ce site.
J’en suis plutôt content.
Toujours basé sur Jekyll, je l’ai fait évoluer récemment en ajoutant du grunt pour gérer le build. J’en suis encore plus content. &lt;em&gt;Petit retour d’expérience…&lt;/em&gt;&lt;/p&gt;

&lt;h2 id=&quot;jekyll&quot;&gt;Jekyll&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;//jekyllrb.com&quot;&gt;Jekyll&lt;/a&gt; n’est pas extraordinaire, mais il a l’avantage d’être hébergé par &lt;a href=&quot;//github.com&quot;&gt;Github&lt;/a&gt;.
Le push-to-deploy est un petit miracle.
C’est tellement agréable de pousser un commit avec un fichier markdown pour voir apparaitre un article joliment mis en forme.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/jekyll.png&quot; alt=&quot;Jekyll logo&quot; style=&quot;height: 100px; background-color: #333&quot; /&gt;&lt;/p&gt;

&lt;p&gt;La mise en place est un peu longue (configuration des &lt;em&gt;layouts&lt;/em&gt;, style, pages annexes…) mais après c’est très efficace pour la publication d’article : on écrit juste le texte en markdown et ça rend bien. La syntaxe markdown est simple à apprendre : c’est très intuitif.&lt;/p&gt;

&lt;h2 id=&quot;grunt&quot;&gt;Grunt&lt;/h2&gt;

&lt;p&gt;J’utilise depuis longtemps Grunt dans le cadre professionnel. Ca permet d’industrialiser la construction des projets Javascript : vérification des scripts javascript avec jshint/jslint, concaténation et minification des fichiers, etc… Ca apporte aussi, très simplement, le live-reload : le rechargement de votre page dans le navigateur lorsque les sources changent.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/grunt.png&quot; alt=&quot;Grunt logo&quot; width=&quot;200px&quot; /&gt;&lt;/p&gt;

&lt;p&gt;C’est lorsque j’ai voulu préparer des présentations que j’ai eu besoin de &lt;em&gt;voir&lt;/em&gt; régulièrement la version web de la présentation. Jekyll met une paire de secondes pour générer le site à chaque changement, il faut ensuite changer de fenêtre pour recharger la version web. Trop long, trop lourd. J’ai mis en place du live-reload et j’en suis content (encore).&lt;/p&gt;

&lt;h2 id=&quot;remarkjs&quot;&gt;Remark.js&lt;/h2&gt;

&lt;p&gt;Pour mes présentations, j’ai décidé d’utiliser un framework javascript : &lt;a href=&quot;//remarkjs.com&quot;&gt;Remark.js&lt;/a&gt;. Il permet d’écrire en markdown (encore) des slides de façon assez simple. Le markdown est parsé par la remarkjs qui créé les slides au runtime. Le rendu est propre et le framework propose des fonctionnalités sympa (gestion des notes, mode présentateur comme PowerPoint avec écran déporté, slides incrémentales, etc…).
J’ai encore un peu de mal à adhérer. Pour des slides très formatée ça fonctionne bien, mais dès que l’on essaie de varier la présentation, c’est plus laborieux. Par exemple, j’aime beaucoup les slides très épurée avec juste une image ou quelques mots, dans ce cadre là, créer les styles CSS nécessaire à chaque fois est très contraignant.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/remarkjs.png&quot; alt=&quot;Remark.js logo&quot; /&gt;&lt;/p&gt;

&lt;p&gt;J’utilise l’outil depuis très peu de temps. Je vais essayer de persévérer encore un peu pour voir si j’arrive à l’utiliser de façon agréable et efficace. Je vous tiendrais au courant.&lt;/p&gt;
</description>
            <pubDate>Thu, 18 Sep 2014 00:00:00 +0000</pubDate>
            <link>https://maxime.werlen.fr/blog/tech/2014/09/18/blog-md.html</link>
            <author>maxime@werlen.fr</author>
            <category>Tech</category>
            <guid isPermaLink="true">https://maxime.werlen.fr/blog/tech/2014/09/18/blog-md.html</guid>
        </item>
        
        <item>
            <title>Scala et la programmation fonctionnelle</title>
            <description>&lt;p&gt;J’ai suivi il y a quelques mois &lt;a href=&quot;https://www.coursera.org/course/progfun&quot; title=&quot;Formation Coursera à la programmation fonctionnelle&quot;&gt;une formation à la programmation fonctionnelle avec Scala sur coursera&lt;/a&gt;.
La formation est assurée par &lt;a href=&quot;https://www.coursera.org/instructor/~275&quot; title=&quot;Profil de MArtin Odersky sur Coursera&quot;&gt;Martin Odersky&lt;/a&gt; de l’&lt;a href=&quot;http://www.epfl.ch/&quot; title=&quot;Le site de l&apos;EPFL&quot;&gt;Ecole Polytechnique Fédérale de Lausanne&lt;/a&gt; (EPFL), créateur du langage &lt;a href=&quot;http://www.scala-lang.org/&quot; title=&quot;Site officiel de Scala&quot;&gt;Scala&lt;/a&gt;.
J’ai adoré la formation et j’ai même rempilé pour une seconde série de &lt;a href=&quot;https://www.coursera.org/course/reactive&quot; title=&quot;Formation Coursera à la programmation réactive&quot;&gt;cours sur la programmation réactive&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/scala.png&quot; alt=&quot;Le logo de la formation FP - Scala sur Coursera&quot; title=&quot;Le logo de la formation FP - Scala sur Coursera&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Avant de me lancer dans ces cours, j’avais entendu parler de programmation fonctionnelle et 
je connaissais vaguement les grands principes  de ce type de langages,
mais je n’avais jamais réellement codé avec un langage fonctionnel.
J’avais envie de découvrir de nouveaux langages sur la JVM, Scala me semblait un bon choix,
malgré les critiques que j’ai pu entendre par-ci par-là (les &lt;a href=&quot;http://lescastcodeurs.com/&quot; title=&quot;Le podcast Java en Français&quot;&gt;Cast Codeurs&lt;/a&gt; ?).&lt;/p&gt;

&lt;h2 id=&quot;lhistoire-des-langages-informatiques&quot;&gt;L’histoire des langages informatiques&lt;/h2&gt;

&lt;p&gt;Les premières vidéo ont abordé l’histoire des langages informatiques et quelque grands concepts de programmation : 
les notions de &lt;a href=&quot;http://en.wikipedia.org/wiki/Evaluation_strategy&quot;&gt;stratégies d’évaluation&lt;/a&gt; (par valeur ou par référence), 
la récursion, les opérateurs fonctionnels, le &lt;a href=&quot;http://en.wikipedia.org/wiki/Currying&quot;&gt;currying&lt;/a&gt;…&lt;/p&gt;

&lt;p&gt;Il  m’a semblé intéressant de sortir du carcan de la programmation objet Java pour aller explorer les paradigmes des autres langages de programmation.
Dans mon travail de tous les jours, Java “classique” est omniprésent, à tel point que j’en oublie qu’il existe d’autres façons de 
modéliser un programme (&lt;a href=&quot;http://fr.wikipedia.org/wiki/Programmation_%C3%A9v%C3%A9nementielle&quot;&gt;programmation évènementielle&lt;/a&gt;,
&lt;a href=&quot;http://fr.wikipedia.org/wiki/Programmation_logique&quot;&gt;programmation logique&lt;/a&gt;…).&lt;/p&gt;

&lt;p&gt;Toutes ces notions sont importantes pour élargir notre vision de l’informatique 
et nous permettre de choisir au quotidien la solution la plus adaptée au problème.
Avec Java on a tendance à &lt;a href=&quot;http://en.wiktionary.org/wiki/if_all_you_have_is_a_hammer,_everything_looks_like_a_nail&quot;&gt;avoir un marteau et à voir tous les problèmes comme des clous&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;la-programmation-fonctionnelle&quot;&gt;La programmation fonctionnelle&lt;/h2&gt;

&lt;p&gt;Pendant les cours sur Coursera, les enseignants ont pris de temps d’expliquer les principes sous-jacents à la programmation fonctionnelle et ça permet de mieux s’approprier les concepts. J’ai beaucoup aimé la simplicité et l’élégance du code fonctionnel écrit en Scala. Une fois le code écrit (ce qui n’est pas simple), tout semble clair et élégant.&lt;/p&gt;

&lt;p&gt;Lors de la conférence MixIt 2014, j’ai assisté à un atelier sur &lt;a href=&quot;http://akka.io/&quot; title=&quot;Page officielle de akka&quot;&gt;Akka&lt;/a&gt; (un framework basé sur des acteurs écrit en Scala).
Il était possible de réaliser l’atelier en Java ou en Scala (j’ai galéré pour réussir à le faire en Scala).
Les réponses étaient beaucoup plus lisibles et élégantes en Scala qu’avec Java.
Faire de la programmation fonctionnelle permet de simplifier l’écriture de son code 
mais il faut avoir les bons outils, 
Java donne l’impression de ne pas être encore bien adapté pour écrire simplement du code fonctionnel élégant.&lt;/p&gt;

&lt;h2 id=&quot;la-programmation-réactive&quot;&gt;La programmation réactive&lt;/h2&gt;

&lt;p&gt;La seconde partie du cours s’attarde sur la programmation réactive qui est à la mode en ce moment.
Il s’agit juste d’utiliser les possibilités offertes par la programmation fonctionnelle pour rendre son application plus rapide et plus efficace possible. 
La gestion évènementielle et asynchrone des opérations à réaliser est bien sûr au coeur de du fonctionnement.
Scala propose de manipuler simplement des Promises et des futures ; on peut construire des Streams de données que l’on agrège en temps réel avec seulement quelques lignes de code.&lt;/p&gt;

&lt;p&gt;Le cours s’est terminé sur un TP très intéressant où l’on a réalisé une base de donnée clé-valeur minimaliste mais répartie sur plusieurs noeuds, avec du failover, de la redondance et de la persistance.
Le tout est construit autour du framework Akka qui apporte le support des acteurs dans Scala.&lt;/p&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;Je n’utilise pas Scala quotidiennement mais ce cours m’a été particulièrement utile pour comprendre le paradigme fonctionnel. Je réutilise mes connaissances sur les patterns fonctionnels lorsque je développe avec Javascript (les promises d’Angular $q n’ont plus de secrets). Dès que mes projets auront migré sur Java 8, je pourrais reprendre la programmation fonctionnelle avec les nouveaux Streams et les lambda.&lt;/p&gt;

&lt;p&gt;En plus de toutes ces connaissances, j’ai reçu les &lt;a href=&quot;/cv.html#certifications&quot; title=&quot;Les certifications de mon CV&quot;&gt;deux certificats Coursera&lt;/a&gt; (avec distinctions) délivré par l’EPFL et Coursera. Pour approfondir encore plus ces connaissances, je prépare en ce moment une présentation théorique et pratique sur la programmation fonctionnelle.&lt;/p&gt;

</description>
            <pubDate>Sat, 02 Aug 2014 00:00:00 +0000</pubDate>
            <link>https://maxime.werlen.fr/blog/news/2014/08/02/scala.html</link>
            <author>maxime@werlen.fr</author>
            <category>news</category>
            <guid isPermaLink="true">https://maxime.werlen.fr/blog/news/2014/08/02/scala.html</guid>
        </item>
        
        <item>
            <title>XBMC on Headless Server</title>
            <description>&lt;p&gt;Un court article pour expliquer comment lancer un serveur X dédié à un processus sur un serveur headless.
Il suffit d’utiliser la commande &lt;a href=&quot;http://manpages.ubuntu.com/manpages/hardy/man1/xinit.1.html&quot; title=&quot;xinit - X Window System initializer&quot;&gt;xinit&lt;/a&gt; disponible dans le package du serveur X : &lt;a href=&quot;http://fr.wikipedia.org/wiki/Xorg&quot; title=&quot;Page wikipedia de Xorg&quot;&gt;xorg&lt;/a&gt;.
J’utilise par exemple cette commande pour lancer un service &lt;a href=&quot;http://xbmc.org/&quot; title=&quot;XBMC mediacenter&quot;&gt;XBMC&lt;/a&gt; (un super media-center) sur mon serveur Ubuntu qui ne dispose pas d’interface graphique.&lt;/p&gt;

&lt;p&gt;Voici, pour l’exemple, le script de lancement du service :&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;#! /bin/sh&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;### BEGIN INIT INFO&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# Provides:          xbmc&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# Required-Start:    $all&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# Required-Stop:     $all&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# Default-Start:     2 3 4 5&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# Default-Stop:      0 1 6&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# Short-Description: starts instance of XBMC&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# Description:       starts instance of XBMC using start-stop-daemon and xinit&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;### END INIT INFO&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;############### EDIT ME ##################&lt;/span&gt;


&lt;span class=&quot;c&quot;&gt;# path to xinit exec&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;DAEMON&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/usr/bin/xinit

&lt;span class=&quot;c&quot;&gt;# startup args&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;#DAEMON_OPTS=&quot; /usr/bin/xbmc --standalone -- :0&quot;&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;DAEMON_OPTS&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot; /usr/bin/xbmc&quot;&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;# script name&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;NAME&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;xbmc

&lt;span class=&quot;c&quot;&gt;# app name&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;DESC&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;XBMC

&lt;span class=&quot;c&quot;&gt;# user&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;RUN_AS&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;xbmc

&lt;span class=&quot;c&quot;&gt;# Path of the PID file&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;PID_FILE&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/var/run/xbmc.pid

&lt;span class=&quot;c&quot;&gt;############### END EDIT ME ##################&lt;/span&gt;

&lt;span class=&quot;nb&quot;&gt;test&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-x&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$DAEMON&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;exit &lt;/span&gt;0

&lt;span class=&quot;nb&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-e&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$1&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;in
  &lt;/span&gt;start&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
     &lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Starting &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$DESC&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
     start-stop-daemon &lt;span class=&quot;nt&quot;&gt;--start&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-c&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$RUN_AS&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--background&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--pidfile&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$PID_FILE&lt;/span&gt;  &lt;span class=&quot;nt&quot;&gt;--make-pidfile&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--exec&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$DAEMON&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$DAEMON_OPTS&lt;/span&gt;
     &lt;span class=&quot;p&quot;&gt;;;&lt;/span&gt;

  stop&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
     &lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Stopping &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$DESC&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
     start-stop-daemon &lt;span class=&quot;nt&quot;&gt;--stop&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--pidfile&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$PID_FILE&lt;/span&gt;
     &lt;span class=&quot;p&quot;&gt;;;&lt;/span&gt;

  restart|force-reload&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
     &lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Restarting &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$DESC&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
     start-stop-daemon &lt;span class=&quot;nt&quot;&gt;--stop&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--pidfile&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$PID_FILE&lt;/span&gt;
     &lt;span class=&quot;nb&quot;&gt;sleep &lt;/span&gt;5
     start-stop-daemon &lt;span class=&quot;nt&quot;&gt;--start&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-c&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$RUN_AS&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--background&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--pidfile&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$PID_FILE&lt;/span&gt;  &lt;span class=&quot;nt&quot;&gt;--make-pidfile&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--exec&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$DAEMON&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$DAEMON_OPTS&lt;/span&gt;
     &lt;span class=&quot;p&quot;&gt;;;&lt;/span&gt;

  &lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
     &lt;span class=&quot;nv&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/etc/init.d/&lt;span class=&quot;nv&quot;&gt;$NAME&lt;/span&gt;
     &lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Usage: &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$N&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; {start|stop|restart|force-reload}&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&amp;amp;2
     &lt;span class=&quot;nb&quot;&gt;exit &lt;/span&gt;1
     &lt;span class=&quot;p&quot;&gt;;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;esac&lt;/span&gt;

&lt;span class=&quot;nb&quot;&gt;exit &lt;/span&gt;0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Une commande utile et simple à utilser qu’il ne faut pas oublier.&lt;/p&gt;

</description>
            <pubDate>Thu, 17 Jul 2014 00:00:00 +0000</pubDate>
            <link>https://maxime.werlen.fr/blog/tech/2014/07/17/XBMC-on-headless-server.html</link>
            <author>maxime@werlen.fr</author>
            <category>Tech</category>
            <guid isPermaLink="true">https://maxime.werlen.fr/blog/tech/2014/07/17/XBMC-on-headless-server.html</guid>
        </item>
        
    </channel>
</rss>
