<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
	<title>JKB.log</title>
	<link>https://blog.jkbockstael.be/</link>
	<description>Mono(b)logue de Jean-Karim Bockstael</description>
	<item>
		<title>Déjà 2026 ?</title>
		<link>https://blog.jkbockstael.be/posts/2026/01/05/deja_2026.html</link>
		<description>&lt;h2 id="déjà-2026-"&gt;Déjà 2026 ?&lt;/h2&gt;
&lt;p&gt;Oh ben dis donc, on est déjà en 2026. Pas vu le temps passer moi. Du coup le truc pour faire partie des gens cools c&amp;#39;est de faire un genre de bilan de l&amp;#39;année 2025, non ?&lt;/p&gt;
&lt;p&gt;En 2025 j&amp;#39;ai fêté mon 41è anniversaire. C&amp;#39;est marrant la quarantaine, on en parle toujours comme d&amp;#39;un genre de cap difficile à franchir qui est censé être accompagné des changements majeurs au point qu&amp;#39;on parle de &amp;quot;crise de la quarantaine&amp;quot; mais j&amp;#39;ai l&amp;#39;impression de ne rien avoir vu de tout ça. Business as usual, avec un peu moins de cheveux et plus de blanc parmi ceux qui restent. J&amp;#39;ai aussi fêté mon premier anniversaire de mariage, et ça c&amp;#39;est cool. Se marier à Halloween donc tout en noir ? Moi du passé lointain serait fier.&lt;/p&gt;
&lt;p&gt;C&amp;#39;est aussi l&amp;#39;année ou j&amp;#39;ai arrêté de prêter attention à l&amp;#39;actualité, aux tendances, et aux réseaux sociaux commerciaux (qui d&amp;#39;ailleurs ont arrêté de faire semblant de nous connecter les uns aux autres et se disent &amp;quot;social media&amp;quot;). À quelques jours près ça fait un an que je n&amp;#39;ai pas touché à Facebook par exemple, et je pense que ça contribue beaucoup à une amélioration de ma santé mentale.&lt;/p&gt;
&lt;h2 id="jeux"&gt;Jeux&lt;/h2&gt;
&lt;p&gt;D&amp;#39;après Steam j&amp;#39;aurai joué à 75 jeux au cours de l&amp;#39;année, 54 d&amp;#39;entre eux étaient pour moi des nouveautés. Le compte est un peu faussé, pour ce récapitulatif les deux dernières semaines de Décembre sont ignorées, mais l&amp;#39;ordre de grandeur est là.&lt;/p&gt;
&lt;p&gt;En particulier je me suis replongé dans les DOOM avec grand plaisir puisque j&amp;#39;y joue depuis littéralement le début (ripping and tearing since 1993 fuck yeah), avec comme idée de tous les faire dans l&amp;#39;ordre de sortie. C&amp;#39;est en cours, rien que la réedition &amp;quot;&lt;a href="https://doom.bethesda.net/en-EU/doom_doomii"&gt;DOOM+DOOM II&lt;/a&gt;&amp;quot; et sa foule d&amp;#39;extensions aura pris &amp;quot;un certain temps&amp;quot;, comme on dit dans le milieu. Et puis quand j&amp;#39;ai lancé DOOM 3 il m&amp;#39;a tout de suite rappelé que c&amp;#39;est la &amp;quot;BFG Edition&amp;quot; donc qu&amp;#39;il contient également les deux premiers en version DOS et avec les extensions &amp;quot;Thy Flesh Consumed&amp;quot; et &amp;quot;No Rest for the Living&amp;quot; donc c&amp;#39;était reparti pour un tour. Et puis est arrivé le coup fourbe : le même traitement de réédition sur nouveau moteur accompagné de nouvelles extensions, &lt;a href="https://bethesda.net/en-US/game/heretic_hexen"&gt;mais appliqué à Heretic et Hexen&lt;/a&gt;, donc il y a un détour par-là en ce moment.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.valheimgame.com/"&gt;Valheim&lt;/a&gt; a également fait un retour. Début 2023 j&amp;#39;avais commencé une nouvelle partie, que j&amp;#39;ai déplacé vers un serveur début 2024 pour y inviter des amis. Il tourne toujours, on peut parler d&amp;#39;un &amp;quot;forever world&amp;quot; je pense. J&amp;#39;y achève ce qui est a ce jour mon projet de construction le plus ambitieux et celui dont je suis le plus fier. Valheim a un système formidable pour la construction, ce qui fait qu&amp;#39;y élaborer des dioramas interactifs est particulièrement plaisant et m&amp;#39;intéresse bien plus que la progression dans le jeu proprement dit. Il n&amp;#39;y a pas de bonne ou de mauvaise manière de jouer à un jeu vidéo, ne laissez personne vous convaincre du contraire (les fans de Dark Souls, c&amp;#39;est pour vous).&lt;/p&gt;
&lt;h2 id="musique"&gt;Musique&lt;/h2&gt;
&lt;p&gt;J&amp;#39;ai une certaine affection pour le label &lt;a href="https://cryochamber.bandcamp.com/"&gt;Cryo Chamber&lt;/a&gt;, qui débusque des talents exceptionnels de la scène dark-ambient dont la musique fonctionne très bien pour noyer les distractions. En particulier j&amp;#39;ai écouté beaucoup de ce que fait &lt;a href="https://dronnydarko.bandcamp.com"&gt;Dronny Darko&lt;/a&gt; et je vous invite à faire de même.&lt;/p&gt;
&lt;p&gt;Les mois d&amp;#39;été ont été passés à m&amp;#39;occuper du jardin (ça compte comme &amp;quot;crise de la quarantaine&amp;quot; ou pas ? en tout cas c&amp;#39;est moins cher qu&amp;#39;une MX-5 rouge) en écoutant absolument tout ce qu&amp;#39;a fait Underworld. Il y a énormément de talent chez Underworld, c&amp;#39;est asez fascinant. Ça l&amp;#39;est encore plus quand on rélise depuis combien de temps ils font ça sans jamais tourner en rond.&lt;/p&gt;
&lt;p&gt;Plus récemment j&amp;#39;ai déterré du black metal de première et seconde vagues. Je conseille l&amp;#39;exercice, sur le style musical de votre choix, pour découvrir quand et comment les codes d&amp;#39;un mouvement sont apparus et se sont fixés.&lt;/p&gt;
&lt;h2 id="écriture"&gt;Écriture&lt;/h2&gt;
&lt;p&gt;En commençant 2025 je pensais pouvoir atteindre 100 articles sur le blog au cours de l&amp;#39;année. Finalement &lt;a href="/posts/2025/"&gt;il y en aura eu 64&lt;/a&gt;, ce qui est quand même mieux que &lt;a href="/posts/2024/"&gt;les 43 de 2024&lt;/a&gt;. Du coup je suis optimiste sur ma capacité à continuer cette amélioration en 2026, et peut-être aussi à mener à bien deux-trois projets un peu plus conséquents que je préfère garder secrets d&amp;#39;ici à ce que ça arrive.&lt;/p&gt;
&lt;p&gt;Non je n&amp;#39;écris pas un livre, et de toute façon si ça arrive ça sera sûrement un livre technique pour contribuer à combler le vide en la matière en langue française.&lt;/p&gt;
&lt;h2 id="lecture"&gt;Lecture&lt;/h2&gt;
&lt;p&gt;Il y a un an j&amp;#39;avais aussi de grandes ambitions de lecture, et finalement le bilan de ce qui a été lu n&amp;#39;est pas du tout à la hauteur de mes attentes. Les raisons sont diverses, mais ça me donne envie de réserver du temps pour de la lecture en 2026. Tant de choses à lire, si peu de temps libre pour le faire.&lt;/p&gt;
&lt;p&gt;J&amp;#39;ai particulièrement apprécié &lt;a href="https://www.oreilly.com/library/view/tidy-first/9798341643932/"&gt;&amp;quot;Tidy First?&amp;quot;&lt;/a&gt; de Kent Beck (le Kent Beck du Extreme Programming). Simple, concis, pratique comme devraient l&amp;#39;être beaucoup plus de libres qui parlent de méthode de programmation. Une chose m&amp;#39;amuse au passage : le souvenir clair d&amp;#39;avoir entendu parler des approches XP quand j&amp;#39;étais étudiant, et en avoir pensé que c&amp;#39;était un peu du délire de doux dingue qui ne marcherait pas en pratique. L&amp;#39;expérience change le regard. Je pense que j&amp;#39;écrirai quelque chose sur ce livre, ou quelque chose sur l&amp;#39;Extreme Programming, ou quelque chose sur ce que les années d&amp;#39;expérience pro m&amp;#39;ont apporté, ou un peu de tout ça qui sait.&lt;/p&gt;
&lt;h2 id="travail"&gt;Travail&lt;/h2&gt;
&lt;p&gt;Et puisqu&amp;#39;on parle de pro : en 2025 s&amp;#39;achevaient six années et demie dans le rôle du consultant et son lot d&amp;#39;apprentissage de machins que je ne veux plus jamais toucher de ma vie, au sein de structures dysfonctionnelles, de projets qui tiennent par des bouts de ficelle et de budgets serrés parce que vous comprenez à force de payer des consultants il ne reste plus rien. Les connaisseurs savent distinguer la réalité de l&amp;#39;exagération, les autres dites-vous que la réalité dépasse votre imagination. C&amp;#39;était enrichissant quand même, entre deux machins Microsoft j&amp;#39;ai quand même appris deux-trois trucs intéressants et consolidé des soft skills utiles, mais bon à un moment c&amp;#39;est pas plus mal de faire des choses sérieuses.&lt;/p&gt;
&lt;p&gt;Je commence donc l&amp;#39;année avec un nouvel emploi où je rejoint une équipe qui déploie en production dix fois par jour et citait Emily Bache quand il s&amp;#39;agissait de m&amp;#39;évaluer. Là aussi les connaisseurs savent, les autres n&amp;#39;ont pas idée de ce qui est possible. Ça va être bien, vertigineux mais bien.&lt;/p&gt;
&lt;p&gt;Allez hop, c&amp;#39;est reparti pour un tour autour de la plus importante des étoiles.&lt;/p&gt;
</description>
		<pubDate>Mon, 05 Jan 2026 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2026/01/05/deja_2026.html</guid>
	</item>
	<item>
		<title>Impressions : The Last Oath</title>
		<link>https://blog.jkbockstael.be/posts/2025/11/03/impressions_the_last_oath.html</link>
		<description>&lt;h1 id="impressions--the-last-oath"&gt;Impressions : The Last Oath&lt;/h1&gt;
&lt;p&gt;Voici ce que j&amp;#39;ai écrit sur Steam à propos de &lt;a href="https://store.steampowered.com/app/3607370/The_Last_Oath/"&gt;The last Oath&lt;/a&gt; :&lt;/p&gt;
&lt;p&gt;Est-ce le plus court des walking simulators ? Certainement.&lt;/p&gt;
&lt;p&gt;En tout cas c&amp;#39;est un walking simulator : on ne peut que se déplacer dans l&amp;#39;environnement et y obtenir des bribes d&amp;#39;informations sur son histoire. La formule est connue.&lt;/p&gt;
&lt;p&gt;Il est extrêmement court, il y a en a pour cinq minutes max.&lt;/p&gt;
&lt;p&gt;Là où il se distingue du lot c&amp;#39;est sur sa direction artistique. Niveau graphisme c&amp;#39;est de toute beauté alors que ça repose sur un choix tranché donc risqué, et l&amp;#39;ambiance sonore soutient parfaitement ça.&lt;/p&gt;
&lt;p&gt;Mon seul reproche serait qu&amp;#39;à certains endroits le texte soit un peu difficile à lire en raison de la palette de couleurs utilisée, mais rien de bien méchant.&lt;/p&gt;
&lt;p&gt;En tout cas je trouve que ça mérite un coup d&amp;#39;œil.&lt;/p&gt;
</description>
		<pubDate>Mon, 03 Nov 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/11/03/impressions_the_last_oath.html</guid>
	</item>
	<item>
		<title>Halloween en quelques jeux</title>
		<link>https://blog.jkbockstael.be/posts/2025/10/31/halloween_en_quelques_jeux.html</link>
		<description>&lt;h1 id="halloween-en-quelques-jeux"&gt;Halloween en quelques jeux&lt;/h1&gt;
&lt;p&gt;C&amp;#39;est Halloween, autrement dit le meilleur jour de l&amp;#39;année chaque année. Déso pas déso, c&amp;#39;est pas moi qui fais les règles.&lt;/p&gt;
&lt;p&gt;Pour célébrer ça comme il se doit, à défaut d&amp;#39;invoquer le cornu par quelques sacrifices, voici mon avis sur quelques jeux vidéo PC de cette année, gratuits ou pas chers, qui sont dans le thème.&lt;/p&gt;
&lt;h2 id="bloodquest-from-hell"&gt;Bloodquest From HELL&lt;/h2&gt;
&lt;p&gt;C&amp;#39;est un projet d&amp;#39;études parmi beaucoup d&amp;#39;autres, gratuit comme c&amp;#39;est toujours le cas avec les projets d&amp;#39;études. On y incarne une employée de fast-food qui se retrouve à devoir traverser un portail vers l&amp;#39;enfer pour rassembler tous les ingrédients nécessaires pour préparer ses hamburgers. Sur cette base simple-mais-amusante le gameplay tourne entièrement autour de la collecte d&amp;#39;objets, pour laquelle il faut parfois compléter une quête qui repose aussi sur de la collecte d&amp;#39;objets.&lt;/p&gt;
&lt;p&gt;C&amp;#39;est très petit, très court, brut de décoffrage à bien des endroits, mais ça m&amp;#39;a fait sourire et cette touche &amp;quot;fait main&amp;quot; fait du bien à cette époque où les studios font des produits de plus en plus soignés mais de moins en moins originaux.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://store.steampowered.com/app/3709160/Bloodquest_From_HELL/"&gt;Bloodquest From HELL sur Steam, gratuit&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="as-expected-of-the-demon-lord"&gt;As Expected of the Demon Lord&lt;/h2&gt;
&lt;p&gt;C&amp;#39;est difficile de faire plus artisanal que As Expected of the Demon Lord, qui est entièrement fait main et n&amp;#39;essaie pas du tout de le cacher.&lt;/p&gt;
&lt;p&gt;Côté gameplay c&amp;#39;est &amp;quot;Sort the Court&amp;quot; ; on incarne un seigneur qui jour après jour enchaîne des audiences avec ses sujets ou des émissaires, prend des décisions, et vit avec les conséquences de ces décisions. Certaines interactions sur plutôt futiles, d&amp;#39;autres s&amp;#39;inscrivent dans une ligne d&amp;#39;évènements interdépendants. Aucun moyen de savoir d&amp;#39;avance quelle seront les conséquences d&amp;#39;un refus ou d&amp;#39;une approbation, c&amp;#39;est là tout le charme de la formule.&lt;/p&gt;
&lt;p&gt;Côté présentation c&amp;#39;est savoureux. Visuellement c&amp;#39;est du dessin épais et un peu maladroit mais rigolo-mignon, les effets sonores sont hilarants, les textes sont pleins d&amp;#39;humour, la musique est un genre de dungeon-synth qui rappelle ce qu&amp;#39;on faisait dans les années 90 quand on voulait des boucles sinistres.&lt;/p&gt;
&lt;p&gt;Le tout est une drôle de bête qui au premier regard semble bâclée mais vous aspire vite dans un vortex temporel où bien des sourires vous attendent.&lt;/p&gt;
&lt;p&gt;(en plus c&amp;#39;est réalisé avec GIMP et Godot, hourra pour les logiciels libres)&lt;/p&gt;
&lt;p&gt;&lt;a href="https://store.steampowered.com/app/3056660/As_expected_of_the_Demon_Lord/"&gt;As Expected of the Demon Lord sur Steam, gratuit&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="dragon-ruins-ii"&gt;Dragon Ruins II&lt;/h2&gt;
&lt;p&gt;&amp;quot;Un dungeon crawler pour les gens fatigués&amp;quot; effectivement c&amp;#39;est exactement ça.&lt;/p&gt;
&lt;p&gt;Dragon Ruins II distille le dungeon crawling à sa plus simple expression. Le combat se fait automatiquement, reste juste l&amp;#39;exploration et la gestion du groupe de héros. Les héros sont équipés avec ce qu&amp;#39;on a trouvé dans les donjons ou acheté en ville, leurs stats augmentent automatiquement à chaque montée de niveau, tous les cinq niveaux on peut choisir une aptitude passive supplémentaire.&lt;/p&gt;
&lt;p&gt;Pour chaque donjon le but est de trouver le boss et le tuer, puis retourner en ville collecter la récompense. Chaque donjon se visite plusieurs fois, ce qui permet de faire progresser ses héros en suivant un chemin qu&amp;#39;on connaît déjà. On est cependant libre d&amp;#39;aller à n&amp;#39;importe quel donjon sans avoir achevé tous les épisodes des précédents, ou même sans les visiter tout court si on se sent vaillant.&lt;/p&gt;
&lt;p&gt;Si un héros tombe au combat il sera remis sur pied de retour en ville. Si tous les héros tombent le groupe perd la moitié de son or et de ses points d&amp;#39;expérience. C&amp;#39;est donc une question de gestion de l&amp;#39;effort, de savoir quand faire demi-tour pour du repos réparateur. Les premiers donjons sont petits, leur taille et leur complexité augmentent au fil de la progression. Simple, efficace.&lt;/p&gt;
&lt;p&gt;Visuellement c&amp;#39;est un hommage aux consoles 16-bit par son interface et sa palette, et l&amp;#39;environnement est présenté dans un style qui rappelle les illustrations des manuels des jeux de l&amp;#39;époque. La direction artistique est franche, et les personnages amis ou ennemis sont magnifiquement dessinés.&lt;/p&gt;
&lt;p&gt;Côté son c&amp;#39;est très économe sur les bruitages pour laisser la place à la musique qui est du dungeon-synth de très bonne qualité qui colle vraiment bien au style visuel.&lt;/p&gt;
&lt;p&gt;Bref, ça vaut clairement plus que son prix.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://store.steampowered.com/app/3293490/Dragon_Ruins_II/"&gt;Dragon Ruins II sur Steam, 9,75€&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="pig"&gt;PIG&lt;/h2&gt;
&lt;p&gt;Prolonger sa vie ou l&amp;#39;arrêter immédiatement, sur quelques jeux de dé ? Comme scénario d&amp;#39;horreur on a fait pire.&lt;/p&gt;
&lt;p&gt;PIG a été créé dans le cadre d&amp;#39;un Game Jam avec des restrictions de moyens, ce qui fait que visuellement c&amp;#39;est simple et ça va droit au but mais avec un certain charme et une patte artisanale tout à fait appréciable. Niveau gameplay c&amp;#39;est également simple et droit au but mais avec efficacité.&lt;/p&gt;
&lt;p&gt;Là où ce jeu brille le plus c&amp;#39;est par sa musique, qui ne se fait pas remarquer mais est implacable et colle parfaitement à l&amp;#39;ambience.&lt;/p&gt;
&lt;p&gt;Jetez-y un œil, ça vaut le coup.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://store.steampowered.com/app/3700140/PIG/"&gt;PIG sur Steam, gratuit&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="final-sentence-demo"&gt;Final Sentence (demo)&lt;/h2&gt;
&lt;p&gt;Un jeu de frappe clavier ? Un jeu de frappe clavier !&lt;/p&gt;
&lt;p&gt;Sur le papier c&amp;#39;est un &amp;quot;Battle Royale&amp;quot; mais en réalité il faut plisser les yeux pour que ce le soit. Mécaniquement c&amp;#39;est plutôt une course, puisque le premier à achever la tâche gagne et les autres sont soit derrière soit éliminés à cause d&amp;#39;une sortie de route.&lt;/p&gt;
&lt;p&gt;La tâche ici est de retranscrire au clavier du texte qui s&amp;#39;affiche à l&amp;#39;écran, plus vite que les adversaires mais surtout avec plus de précision. Chaque erreur oblige à recommencer la ligne sur laquelle on était, toutes les trois erreurs on a une chance de se faire éliminer totalement. Trop de jeux basés sur la frappe clavier penchent fort du côté de la vitesse pure (coucou Boltgun: Words of Vengeance), ça fait plaisir d&amp;#39;en voir un pencher aussi fort du côté de la précision.&lt;/p&gt;
&lt;p&gt;Simple, rapide, curieusement addictif, et avec une atmophère sonore et visuelle glauque à souhait.&lt;/p&gt;
&lt;p&gt;Vivement la sortie de la version complète.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://store.steampowered.com/app/4021860/Final_Sentence_Demo/"&gt;Final Sentence sur Steam, démo gratuite&lt;/a&gt;&lt;/p&gt;
</description>
		<pubDate>Fri, 31 Oct 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/10/31/halloween_en_quelques_jeux.html</guid>
	</item>
	<item>
		<title>Mise en place de certificat SSL wildcard avec Let's Encrypt</title>
		<link>https://blog.jkbockstael.be/posts/2025/10/29/ssl_wildcard_lets_encrypt_apache.html</link>
		<description>&lt;h1 id="mise-en-place-de-certificat-ssl-wildcard-avec-lets-encrypt"&gt;Mise en place de certificat SSL wildcard avec Let&amp;#39;s Encrypt&lt;/h1&gt;
&lt;p&gt;Comment mettre en place un serveur Web pour plusieurs sous-domaines avec un certificat SSL auto-renouvelé ? Ce n&amp;#39;est pas exactement un mystère mais la documentation est dispersée donc un HOWTO pas à pas peut être utile (à au moins une personne, coucou Vincent).&lt;/p&gt;
&lt;p&gt;Voici comment j&amp;#39;ai procédé sur un serveur Ubuntu 24.04 LTS avec Gandi comme fournisseur DNS, mais c&amp;#39;est généralisable à d&amp;#39;autres distributions et registrars.&lt;/p&gt;
&lt;h2 id="prérequis"&gt;Prérequis&lt;/h2&gt;
&lt;p&gt;Une zone DNS a été configurée pour faire pointer son apex &lt;code&gt;domaine.exemple&lt;/code&gt; et un sous-domaine &lt;code&gt;www.domaine.exemple&lt;/code&gt; vers le serveur. On peut généraliser ensuite pour plus de sous-domaines.&lt;/p&gt;
&lt;h2 id="installation-du-serveur-apache"&gt;Installation du serveur Apache&lt;/h2&gt;
&lt;p&gt;J&amp;#39;ai mes habitudes avec Apache, qui s&amp;#39;installe en un tour de main :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;sudo apt install apache2
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="configuration-du-firewall"&gt;Configuration du firewall&lt;/h2&gt;
&lt;p&gt;Sur ce serveur je ne veux laisser passer que le trafic HTTP/HTTPS, et le trafic SSH pour l&amp;#39;administration à distance. Avec &lt;code&gt;ufw&lt;/code&gt; et ses profils c&amp;#39;est grandement simplifié.&lt;/p&gt;
&lt;p&gt;On vérifie quels profils sont effectivement disponibles, on doit avoir au moins les profils &lt;code&gt;OpenSSH&lt;/code&gt; et &lt;code&gt;Apache&lt;/code&gt; qui ont été ajoutés automatiquement pendant l&amp;#39;installation :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;sudo ufw app list
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Il faut activer le profil &lt;code&gt;OpenSSH&lt;/code&gt; pour ne pas se faire jeter une fois le firewall activé, et le profil &lt;code&gt;Apache Full&lt;/code&gt; c&amp;#39;est-à-dire HTTP et HTTPS :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;sudo ufw allow OpenSSH
sudo ufw allow &amp;quot;Apache Full&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ensuite on active le firewall et on confirme qu&amp;#39;il est activé :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;sudo ufw enable
sudo ufw status
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;On peut déjà pointer un navigateur sur &lt;code&gt;http://domaine.exemple&lt;/code&gt; pour avoir la page par défaut d&amp;#39;Apache et confirmer que jusqu&amp;#39;ici tout fonctionne.&lt;/p&gt;
&lt;h2 id="virtual-hosts"&gt;Virtual Hosts&lt;/h2&gt;
&lt;p&gt;&amp;quot;Virtual Hosts&amp;quot; est le terme Apache pour une configuration permettant plusieur (sous-)domaines pour un seul serveur. Chez Nginx on dit &amp;quot;server blocks&amp;quot;, si jamais.&lt;/p&gt;
&lt;p&gt;Créons un répertoire et un fichier de test :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;cd /var/www
sudo mkdir www.domaine.exemple
echo &amp;quot;yay&amp;quot; | sudo tee www.domaine.exemple/index.html
sudo chown --recursive www-data:www-data *
sudo chmod --recursive u-rwX,go=rX *
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;On peut ensuite créer un fichier de configuration pour ce virtual host :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;sudoedit /etc/apache2/sites-available/www.domaine.exemple.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;C&amp;#39;est toujours une bonne idée d&amp;#39;avoir des fichiers logs séparés par virtual host :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-apache"&gt;&amp;lt;VirtualHost *:80&amp;gt;
    ServerName www.domaine.exemple
    ServerAlias domaine.exemple
    DocumentRoot /var/www/www.domaine.exemple
    ErrorLog ${APACHE_LOG_DIR}/www.domaine.exemple_error.log
    CustomLog ${APACHE_LOG_DIR}/www.domaine.exemple_access.log combined
&amp;lt;/VirtualHost&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;On peut ensuite désactiver la configuration Apache par défaut, et activer celle qu&amp;#39;on vient d&amp;#39;ajouter :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;sudo a2dissite 000-default.conf
sudo a2ensite www.domaine.exemple.conf
sudo apache2ctl configtest
sudo systemctl restart apache2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Si maintenant on pointe un navigateur sur &lt;code&gt;http://www.domaine.exemple&lt;/code&gt; on a notre &amp;quot;yay&amp;quot; de test.&lt;/p&gt;
&lt;h2 id="configuration-de-certbot-pour-lobtention-et-le-renouvellement-de-certificats"&gt;Configuration de Certbot pour l&amp;#39;obtention et le renouvellement de certificats&lt;/h2&gt;
&lt;p&gt;On va utiliser l&amp;#39;utilitaire &lt;code&gt;certbot&lt;/code&gt; pour obtenir du projet Let&amp;#39;s Encrypt un certificat SSL pour notre domaine. Si on veut un certificat juste pour un domaine ou un sous-domaine spécifique sa mise en place est très simple, mais comme ici c&amp;#39;est un &amp;quot;wildcard&amp;quot; qu&amp;#39;on veut afin qu&amp;#39;il couvre le domaine et n&amp;#39;importe quel sous-domaine c&amp;#39;est un tout petit peu plus élaboré et ça implique de lui donner un accès à la zone DNS concernée.&lt;/p&gt;
&lt;p&gt;La première étape dans mon cas est donc d&amp;#39;aller chez Gandi y générer un jeton d&amp;#39;accès personnel ayant les droits &amp;quot;voir et renouveler les domaines&amp;quot; et &amp;quot;gérer la configuration technique des domaines&amp;quot;.&lt;/p&gt;
&lt;p&gt;Ensuite sur le serveur on peut installer &lt;code&gt;certbot&lt;/code&gt; et le plugin qui va lui permettre d&amp;#39;utiliser l&amp;#39;API de Gandi :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;sudo apt install certbot
sudo apt install python3-full
sudo apt install python3-certbot-dns-gandi
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;On va ensuite lui renseigner le jeton qu&amp;#39;on vient de générer :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;sudoedit /etc/letsencrypt/gandi.ini
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class="language-ini"&gt;dns_gandi_token=MON_JETON_PERSONNEL
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Un peu de vie privée, ne fut-ce que pour le principe :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;sudo chmod u=rw,go= /etc/letsencrypt/gandi.ini
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="obtention-des-certificats"&gt;Obtention des certificats&lt;/h2&gt;
&lt;p&gt;On peut maintenant utiliser &lt;code&gt;certbot&lt;/code&gt; pour obtenir un certificat qui couvre à la fois &lt;code&gt;domaine.exemple&lt;/code&gt; et &lt;code&gt;*.domaine.exemple&lt;/code&gt; :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;sudo certbot certonly --authenticator dns-gandi --dns-gandi-credentials /etc/letsencrypt/gandi.ini -d domaine.exemple -d \*.domaine.exemple --server https://acme-v02.api.letsencrypt.org/directory
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cette opération va créer deux fichiers sur le serveur :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;le certificat à &lt;code&gt;/etc/letsencrypt/live/domaine.exemple/fullchain.pem&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;sa clé privée à &lt;code&gt;/etc/letsencrypt/live/domaine.exemple/privkey.pem&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Les certificats fournis par Let&amp;#39;s Encrypt expirent en quelques mois, mais l&amp;#39;installation de &lt;code&gt;certbot&lt;/code&gt; ajoute une tâche planifiée pour leur renouvellement automatique.&lt;/p&gt;
&lt;p&gt;On peut vérifier que la tâche est bien planifiée et qu&amp;#39;elle s&amp;#39;exécutera correctement :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;sudo systemctl status certbot.timer
sudo certbot renew --dry-run
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="activation-du-ssl-dans-apache"&gt;Activation du SSL dans Apache&lt;/h2&gt;
&lt;p&gt;Il ne reste plus qu&amp;#39;à activer le SSL dans Apache et adapter sa configuration :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;sudo a2enmod ssl
sudo systemctl restart apache2
sudoedit /etc/apache2/sites-available/www.domaine.exemple.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dans la configuration on ajoute un section pour le HTTPS, qui utilise les fichiers créés par &lt;code&gt;certbot&lt;/code&gt; :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-apache"&gt;&amp;lt;VirtualHost *:443&amp;gt;
    ServerName www.domaine.exemple
    ServerAlias domaine.exemple
    DocumentRoot /var/www/www.domaine.exemple
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/domaine.exemple/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/domaine.exemple/privkey.pem
    ErrorLog ${APACHE_LOG_DIR}/www.domaine.exemple_error.log
    CustomLog ${APACHE_LOG_DIR}/www.domaine.exemple_access.log combined
&amp;lt;/VirtualHost&amp;gt;
&amp;lt;VirtualHost *:80&amp;gt;
    ServerName www.domaine.exemple
    ServerAlias domaine.exemple
    DocumentRoot /var/www/domaine.exemple
    ErrorLog ${APACHE_LOG_DIR}/domaine.exemple_error.log
    CustomLog ${APACHE_LOG_DIR}/domaine.exemple_access.log combined
&amp;lt;/VirtualHost&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Reste à valider ces changements et recharger la configuration pour les activer :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;sudo apache2ctl configtest
sudo systemctl reload apache2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;On peut confirmer le tout en pointant un navigateur sur &lt;code&gt;https://domaine.exemple&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Et voilà, simple et efficace.&lt;/p&gt;
</description>
		<pubDate>Wed, 29 Oct 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/10/29/ssl_wildcard_lets_encrypt_apache.html</guid>
	</item>
	<item>
		<title>Impressions : Lux Delux</title>
		<link>https://blog.jkbockstael.be/posts/2025/10/01/impressions_lux_delux.html</link>
		<description>&lt;h1 id="impressions--lux-delux"&gt;Impressions : Lux Delux&lt;/h1&gt;
&lt;p&gt;Voici ce que j&amp;#39;ai écrit sur Steam à propos de &lt;a href="https://store.steampowered.com/app/341950/Lux_Delux/"&gt;Lux Delux&lt;/a&gt; :&lt;/p&gt;
&lt;p&gt;Vivement recommendé aux fans de Risk.&lt;/p&gt;
&lt;p&gt;Le gameplay est clairement inspiré de Risk, avec la possibilité d&amp;#39;enchaîner des attaques depuis les territoires capturés (ce qui est embêtant ou très sastisfaisant selon qu&amp;#39;on est l&amp;#39;attaquant ou l&amp;#39;attaqué). Les parties se déroulent vite et le jeu respecte votre temps en permettant de ne pas se coltiner des animations superflues ou autres obstacles qui ralentissent la cadence.&lt;/p&gt;
&lt;p&gt;Là où Lux Delux brille c&amp;#39;est par sa communauté et les centaines (littéralement) de cartes et scénarios additionnels qui sont mis à disposition gratuitement directement dans le jeu. Il y en a pour tous les goûts, y compris parfois avec des mécanismes particuliers comme des portails.&lt;/p&gt;
&lt;p&gt;Simple dans sa présentation, rapide dans sa prise en main, très agréable à jouer.&lt;/p&gt;
</description>
		<pubDate>Wed, 01 Oct 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/10/01/impressions_lux_delux.html</guid>
	</item>
	<item>
		<title>Impressions : Boltgun - Words of Vengeance</title>
		<link>https://blog.jkbockstael.be/posts/2025/08/25/impressions_boltgun_words_of_vengeance.html</link>
		<description>&lt;h1 id="impressions--boltgun---words-of-vengeance"&gt;Impressions : Boltgun - Words of Vengeance&lt;/h1&gt;
&lt;p&gt;Voici ce que j&amp;#39;ai écrit sur Steam à propos de &lt;a href="https://store.steampowered.com/app/3533730/Warhammer_40000_Boltgun__Words_of_Vengeance/"&gt;Warhammer 40,000: Boltgun - Words of Vengeance&lt;/a&gt; :&lt;/p&gt;
&lt;p&gt;C&amp;#39;est un jeu court, simple, bien réalisé, et doté d&amp;#39;une bonne rejouabilité. En plus il est gratuit, donc aucune raison d&amp;#39;hésiter.&lt;/p&gt;
&lt;p&gt;On ne va pas se faire d&amp;#39;illusion : ceci est une publicité pour Boltgun 2, en forme de jeu de frappe clavier au gameplay &amp;quot;on-rail shooter&amp;quot; façon &amp;quot;The Typing of the Dead&amp;quot;. Ça ne prétend pas être autre chose.&lt;/p&gt;
&lt;p&gt;Le gameplay est très simple : le personnage se déplace automatiquement d&amp;#39;ennemi en ennemi à mesure qu&amp;#39;on les élimine, chaque ennemi se voit attribuer un mot ou une phrase issue de l&amp;#39;univers de Warhammer 40k qu&amp;#39;il faut taper pour l&amp;#39;éliminer. Une lettre = une balle. Simple, efficace, avec juste ce qu&amp;#39;il faut de variation. Visuellement c&amp;#39;est Boltgun, ça cherche un aspect &amp;quot;boomer shooter&amp;quot; avec des pixels bien croustillants mais sur une esthétique soignée et très colorée qui est vraiment agréable. Le son est à la hauteur, avec un bon feedback puisque une lettre = une balle. Ça a du corps et un chouette style. Une sélection de mots semi-aléaatoire, des niveaux de difficulté, un système de score, et des achievements à décrocher fournissent une bonne rejouabilité. Il y a en tout trois niveaux qui durent cinq minutes chacun, c&amp;#39;est dimensionné pour une pause café.&lt;/p&gt;
&lt;p&gt;Attention par contre : ce n&amp;#39;est pas du tout un guide, il n&amp;#39;y a rien dans Boltgun - WOV pour apprendre à taper correctement. Par contre ça peut servir d&amp;#39;entraînement pour mettre en pratique ce qu&amp;#39;on a appris de façon ludique, tant qu&amp;#39;on ne s&amp;#39;attaque pas aux achievements de pure vitesse ou de haute difficulté qui imposent une frappe moins académique (je n&amp;#39;atteins clairement pas les 100 mots par minute avec les dix doigts).&lt;/p&gt;
&lt;p&gt;Par contre c&amp;#39;est amusant et bien réalisé, et je dois bien admettre que ça remplit bien sa fonction publicitaire puisque y jouer m&amp;#39;a donné envie de tester le vrai Boltgun.&lt;/p&gt;
</description>
		<pubDate>Mon, 25 Aug 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/08/25/impressions_boltgun_words_of_vengeance.html</guid>
	</item>
	<item>
		<title>Impressions : Patron</title>
		<link>https://blog.jkbockstael.be/posts/2025/07/12/impressions_patron.html</link>
		<description>&lt;h1 id="impressions--patron"&gt;Impressions : Patron&lt;/h1&gt;
&lt;p&gt;Voici ce que j&amp;#39;ai écrit sur Steam à propos de &lt;a href="https://store.steampowered.com/app/1538570/Patron/"&gt;Patron&lt;/a&gt; :&lt;/p&gt;
&lt;p&gt;Oui, mais.&lt;/p&gt;
&lt;p&gt;J&amp;#39;ai absolument adoré Banished, et Patron étant clairement inspiré par Banished je l&amp;#39;avais dans mon radar depuis un certain temps. Après l&amp;#39;avoir complété (achevé le &amp;quot;story mode&amp;quot; et ensuite obtenu le reste des achievements en &amp;quot;sandbox mode&amp;quot;) en 25 heures mon avis à son sujet est que c&amp;#39;est un bon jeu qui est effectivement dans la lignée de Banished mais également dans son ombre.&lt;/p&gt;
&lt;p&gt;Niveau gameplay on est sur la même formule : le joueur est placé au rôle de gestionnaire d&amp;#39;une colonie et doit à partir d&amp;#39;une poignée de gens et de quelques maigres ressources construire une colonie qui d&amp;#39;abord survive et ensuite propère jusqu&amp;#39;à devenir une ville de potentiellement plusieurs milliers d&amp;#39;habitants. Déjà là on voit une différence par-rapport à Banished : on a un zéro de plus sur la population, on fonctionne à plus haute échelle et de ce fait on se sent moins investi dans ce que fait et devient chaque habitant. C&amp;#39;est moins une question de microgestion pour tirer un maximum des moyens restreints qu&amp;#39;on a, et plus de la gestion de flux logistiques.&lt;/p&gt;
&lt;p&gt;Il y a un &amp;quot;story mode&amp;quot; qui est juste une série de requêtes d&amp;#39;un royaume dont on est vassal et à qui il faut envoyer des ressources de plus en plus avancées en quantités de plus en plus importantes jusqu&amp;#39;à ce qu&amp;#39;on nous dise &amp;quot;c&amp;#39;est bon on a gagné bravo allez tchao&amp;quot; ; le tout se fait sur une seule carte alors que ça aurait pu être un bon prétexte pour promener le joueur sur plusieurs cartes avec chacune ses contraintes particulières. C&amp;#39;est assez décevant. Et puis il y a cette bizarrerie : parmi les nouveautés par-rapport à Banished il y a un arbre de technologies à débloquer petit à petit au fur et à mesure des recherches, mais ça n&amp;#39;a aucun sens puisque pendant tout ce temps même si on est &amp;quot;isolé&amp;quot; sur une île on reste en contact avec le continent vers lequel on envoie fréquemment des ressources ; assez peu isolé pour servir de vache à lait mais assez isolé pour devoir découvrir indépendamment comment construire des puits en maçonnerie ? Ça n&amp;#39;a aucun sens.&lt;/p&gt;
&lt;p&gt;Les flux de ressources entre les différents bâtiments qui les produisent ou les traitent sont au centre du jeu, et comme mentionné plus haut on est à plus grande échelle que dans Banished donc ils sont encore plus importants. Ça pourrait être bien en soi, mais la production est exprimée par année et les dépôts sont magiquement liés entre eux (ils partagent tous un même inventaire) donc on n&amp;#39;a pas à se soucier des mouvements de ressources d&amp;#39;un endroit à un autre puisque dès qu&amp;#39;une ressource est arrivée à un dépôt qu&amp;#39;on va évidemment placer le plus près possible des lieux de production, elle se retrouve par magie instantanément disponible à des kilomètres de là pour être traitée. L&amp;#39;opposé total de The Settlers, autrement dit.&lt;/p&gt;
&lt;p&gt;C&amp;#39;est de la gestion haut niveau, mais l&amp;#39;interface utilisateur est un obstacle bien plus qu&amp;#39;une aide. J&amp;#39;ai perdu un temps énorme à survoler chaque bouton dans les menus de construction pour trouver le bâtiment que je cherchais à construire ; ils sont trop nombreux, trop similaires, et représentés par leurs miniatures au lieu d&amp;#39;icônes qui seraient sûrement plus claires. C&amp;#39;est aussi assez difficile d&amp;#39;avoir une vue claire sur les interactions entre producteurs et consommateurs pour planifier la croissance future, on n&amp;#39;a pas sous la main des graphiques à long terme comme le propose Banished. Ça manque de tableaux et de rapports, on gouverne mais en étant myope.&lt;/p&gt;
&lt;p&gt;Au niveau des graphismes il faut dire ce qui est : c&amp;#39;est très joli, et la grande variété de constructions purement décoratives permet de faire de bien belles choses. Les modèles sont faits avec soin, les animations aussi, les effets météo ne sont pas en reste. Par contre quand on zoome à fond ça devient un peu flou, comme si on avait tenté un effet &amp;quot;tilt-shift&amp;quot; en se ratant.&lt;/p&gt;
&lt;p&gt;Les sons et la musique ne sont pas à la hauteur par contre, les effets sonores sont vite agaçants et la musique l&amp;#39;est encore plus. Au bout de moins de deux heures de jeu j&amp;#39;avais désactivé la musique et je ne l&amp;#39;ai jamais réactivée.&lt;/p&gt;
&lt;p&gt;Malgré tout ça j&amp;#39;ai complété ce jeu à 100%. Ça a été beaucoup plus facile que le 100% que j&amp;#39;ai obtenu dans Banished puisque les achievements sont presque tous obtenables en jouant la campagne, le reste s&amp;#39;obtient avec une deuxième partie dans un autre biome et en laissant sa population mourir de telle ou telle manière. Pas de challenge de ce côté-là.&lt;/p&gt;
&lt;p&gt;En bref Patron a ses défauts et ne détrône pas Banished, mais il a quand même assez de qualités pour sauver la mise. Je l&amp;#39;ai obtenu en promotion et en ai tiré 25 heures de jeu, prenez-le en promotion si vous aimez le genre city-builder. Par contre ne le prenez pas au prix plein, Banished est moins cher et plus soigné.&lt;/p&gt;
</description>
		<pubDate>Sat, 12 Jul 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/07/12/impressions_patron.html</guid>
	</item>
	<item>
		<title>Trente pochettes d'albums, trentième jour</title>
		<link>https://blog.jkbockstael.be/posts/2025/06/30/trente_pochettes_albums_trentieme_jour.html</link>
		<description>&lt;h1 id="trente-pochettes-dalbums-trentième-jour"&gt;Trente pochettes d&amp;#39;albums, trentième jour&lt;/h1&gt;
&lt;p&gt;Suite et fin du &lt;a href="/posts/2025/06/01/trente_pochettes_albums_premier_jour.html"&gt;challenge trente pochettes d&amp;#39;albums en trente jours&lt;/a&gt;, pour le trentième et dernier jour le thème est &amp;quot;une pochette qui est ta pochette préférée de tous temps&amp;quot;.&lt;/p&gt;
&lt;p&gt;C&amp;#39;est pour moi totalement impossible de répondre à une telle question, de faire un tel choix. Par contre il y a des pochettes qui me plaisent particulièrement fort, je peux en choisir une qui me vienne rapidement en tête. J&amp;#39;ai pensé au &amp;quot;Black Album&amp;quot; de Metallica pour son esthétique noir-sur-noir (ceux qui me connaissent AFK savent), mais ces dernières années Metallica me fait bailler. Prenons-en un autre.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album du jour est &amp;quot;Violator&amp;quot; de Depeche Mode.&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2025/06/30/trente_pochettes_albums_trentieme_jour_attachments/challenge-30.jpg"&gt;&lt;img src="//blog.jkbockstael.be/posts/2025/06/30/trente_pochettes_albums_trentieme_jour_attachments/challenge-30-thumb.png" alt="Violator"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Depeche Mode est un groupe britannique formé en 1980 et absolument essentiel dans la vague de musique électronique new-wave. Ils ont sorti quinze albums au cours de leur carrière, qui est toujours active.&lt;/p&gt;
&lt;p&gt;&amp;quot;Violator&amp;quot; est le septième de ces albums, sorti en 1990 chez Mute. C&amp;#39;est aussi un tournant pour le groupe, qui y explore une formule plus sombre, limite goth, avec des choix artistiques assumés et si la légende dit vrai un processus d&amp;#39;écriture beaucoup plus spontané qu&amp;#39;avant. Le résultat est un ensemble compact de neuf chansons pour 47 minutes, avec un sound design bien tranché et des textures plutôt organiques. On y retrouve les turbo-tubes que sont &amp;quot;Personal Jesus&amp;quot; et &amp;quot;Enjoy the Silence&amp;quot; mais ce serait dommage de snober le reste de l&amp;#39;album en le supposant aussi catchy-pop.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album est &lt;a href="https://www.youtube.com/playlist?list=OLAK5uy_k5Q4z36O34t2LSuB4bt8Zr11TSnDwOnBU"&gt;disponible à l&amp;#39;écoute sur YouTube&lt;/a&gt;, commencez par &amp;quot;Waiting for the Night&amp;quot; pour quelque chose qui plane, &amp;quot;Policy of Truth&amp;quot; pour quelque chose qui tape du pied, ou &amp;quot;Clean&amp;quot; pour de la très grande musique.&lt;/p&gt;
&lt;p&gt;Et voilà qui boucle la série. Je ne regrette pas du tout d&amp;#39;avoir participé au mouvement, ça aura été une occasion de ressortir des albums qui prenaient la poussière et redécouvrir quelques pépites.&lt;/p&gt;
</description>
		<pubDate>Mon, 30 Jun 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/06/30/trente_pochettes_albums_trentieme_jour.html</guid>
	</item>
	<item>
		<title>Trente pochettes d'albums, vingt-neuvième jour</title>
		<link>https://blog.jkbockstael.be/posts/2025/06/29/trente_pochettes_albums_vingt_neuvieme_jour.html</link>
		<description>&lt;h1 id="trente-pochettes-dalbums-vingt-neuvième-jour"&gt;Trente pochettes d&amp;#39;albums, vingt-neuvième jour&lt;/h1&gt;
&lt;p&gt;Suite du &lt;a href="/posts/2025/06/01/trente_pochettes_albums_premier_jour.html"&gt;challenge trente pochettes d&amp;#39;albums en trente jours&lt;/a&gt;, pour le vingt-neuvième jour le thème est &amp;quot;une pochette avec quelque chose qui brûle&amp;quot;.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album du jour est &amp;quot;Celebrity Skin&amp;quot; de Hole.&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2025/06/29/trente_pochettes_albums_vingt_neuvieme_jour_attachments/challenge-29.jpg"&gt;&lt;img src="//blog.jkbockstael.be/posts/2025/06/29/trente_pochettes_albums_vingt_neuvieme_jour_attachments/challenge-29-thumb.png" alt="Celebrity Skin"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Hole est un groupe de rock américain formé en 1989 par Courtney Love (chanteuse-guitariste) et Eric Erlandson (guitariste) qui sont les deux membres constants au fil de l&amp;#39;histoire du groupe. Leur son était initialement très influencé par le punk et le noise, avec les pieds fermements plantés dans le grunge de l&amp;#39;époque, mais a dévié vers quelque chose de plus power-pop au fil du temps.&lt;/p&gt;
&lt;p&gt;&amp;quot;Celebrity Skin&amp;quot; est le troisième album du groupe, sorti en 1998 chez Geffen, et il fait partie de cette transition vers une forme plus carrée et plus propre de rock. C&amp;#39;est moins dans la provocation, plus dans une certaine maturité et des constructions de morceaux plus classiques. C&amp;#39;est aussi l&amp;#39;album de Hole qui a eu le plus de succès commercial, ce que je ne trouve pas surprenant puisque c&amp;#39;est un disque qui non seulement est très bien écrit autant dans les textes que la musique mais implique aussi du beau monde ; on a ainsi Melissa Auf der Maur à la basse et Billy Corgan qui apporte sa patte dans la composition et l&amp;#39;orchestration (il est crédité sur cinq morceaux mais cité comme ayant influencé tout le processus d&amp;#39;enregistrement), donc si ça sonne un peu &amp;quot;Mellon Collie and the Infinite Sadness&amp;quot; par moments (genre sur &amp;quot;Dying&amp;quot;) c&amp;#39;est normal. D&amp;#39;ailleurs sur le son et la musique c&amp;#39;est intéressant, tout est très clair est les compositions sont comme une exploration qui déconstruit le son des grands groupes de la Californie d&amp;#39;où vient Hole. Un genre d&amp;#39;exercice de style mené de main de maître par des gens qui savent vraiment ce qu&amp;#39;ils font et porté par des textes exceptionellement bien écrits par Courtney Love qui n&amp;#39;hésite pas à y citer Eliot ou Shakespeare parce que bon pourquoi pas, sur une trame qui jette un regard en arrière sur le succès de groupe et le prix qu&amp;#39;il a coûté. Un album de pop-rock grungy aux influences avouées et à l&amp;#39;éxécution parfaite, allez-y sans hésiter.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album est &lt;a href="https://www.youtube.com/playlist?list=OLAK5uy_l9UYvuHfSsRNr_1pDij7_VE9sG3yJ9bSk"&gt;disponible à l&amp;#39;écoute sur YouTube&lt;/a&gt;, commencez par &amp;quot;Hit So Hard&amp;quot;, &amp;quot;Use Once &amp;amp; Destroy&amp;quot;, ou &amp;quot;Northern Star&amp;quot; s&amp;#39;il fait trop ensoleillé.&lt;/p&gt;
&lt;p&gt;En ce qui me concerne cet album est arrivé dans ma vie en même temps que le jeu Fallout 2, et j&amp;#39;ai passé beaucoup de temps à écouter l&amp;#39;un en jouant à l&amp;#39;autre. C&amp;#39;est amusant de constater que plus de 25 ans plus tard j&amp;#39;ai toujours des images de Californie post-nucléaire qui me viennent en tête quand j&amp;#39;écoute ce disque. C&amp;#39;est presque approprié.&lt;/p&gt;
</description>
		<pubDate>Sun, 29 Jun 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/06/29/trente_pochettes_albums_vingt_neuvieme_jour.html</guid>
	</item>
	<item>
		<title>Trente pochettes d'albums, vingt-huitième jour</title>
		<link>https://blog.jkbockstael.be/posts/2025/06/28/trente_pochettes_albums_vingt_huitieme_jour.html</link>
		<description>&lt;h1 id="trente-pochettes-dalbums-vingt-huitième-jour"&gt;Trente pochettes d&amp;#39;albums, vingt-huitième jour&lt;/h1&gt;
&lt;p&gt;Suite du &lt;a href="/posts/2025/06/01/trente_pochettes_albums_premier_jour.html"&gt;challenge trente pochettes d&amp;#39;albums en trente jours&lt;/a&gt;, pour le vingt-huitième jour le thème est &amp;quot;une pochette sur laquelle figurent deux personnes&amp;quot;.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album du jour est &amp;quot;Without You I&amp;#39;m Nothing&amp;quot; de Placebo.&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2025/06/28/trente_pochettes_albums_vingt_huitieme_jour_attachments/challenge-28.jpg"&gt;&lt;img src="//blog.jkbockstael.be/posts/2025/06/28/trente_pochettes_albums_vingt_huitieme_jour_attachments/challenge-28-thumb.png" alt="Without You I&amp;#39;m Nothing"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Placebo est un groupe britannique formé en 1994 par Brian Molko (chanteur-guitariste) et Stefan Olsdal (bassiste-guitariste), qui sont les membres constants du groupe depuis (trois batteurs se sont succédés depuis 1994). Ils jouent du rock alternatif et leurs débuts s&amp;#39;inscrivaient dans le courant Britpop.&lt;/p&gt;
&lt;p&gt;&amp;quot;Without You I&amp;#39;m Nothing&amp;quot; est le deuxième album du groupe (et devait s&amp;#39;appeler au départ &amp;quot;Placebo 2&amp;quot;), sorti en 1998 chez Hut et Virgin. C&amp;#39;est un album qui est plus émotionnel et plus personnel que le premier, dont les textes sont autant de fouilles dans le cicatrices et les angoisses de Molko et dont la musique est plus mélancolique, beaucoup moins énervée. Disons que par-rapport au premier c&amp;#39;est beaucoup plus &amp;quot;Lady of the Flowers&amp;quot; que &amp;quot;Nancy Boy&amp;quot;. Ce n&amp;#39;est pas non plus un disque entier de complainte, on y trouve des morceaux pêchus aussi mais c&amp;#39;est disons moins punk et moins abrasif que le premier (alors qu&amp;#39;avec le trio sexe/drogue/trauma qui saupoudre les textes y&amp;#39;a matière) ; dans le son il y a des influences Sonic Youth, et peut-être un peu de Cure dans &amp;quot;You Don&amp;#39;t Care About Us&amp;quot;. L&amp;#39;écriture fait preuve de maturité et de maîtrise, l&amp;#39;orchestration fait dans l&amp;#39;économie de moyens avec du riffage très efficace, la production est impeccable. C&amp;#39;est la bande-son des angoisses adolescentes, c&amp;#39;est l&amp;#39;hymne d&amp;#39;une génération arc-en-ciel, ça se tient droit et ne flanche pas, c&amp;#39;est un bel album.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album est &lt;a href="https://www.youtube.com/playlist?list=OLAK5uy_ndrUUZE3T4QiVh0lnkpv_TP2qFKYQRmmY"&gt;disponible à l&amp;#39;écoute sur YouTube&lt;/a&gt;, commencez par &amp;quot;Scared of Girls&amp;quot; pour du pêchu, &amp;quot;Ask For Answers&amp;quot; pour du melancolique pour amateurs de basse, ou le titulaire &amp;quot;Without You I&amp;#39;m Nothing&amp;quot; dont il existe aussi une belle version avec David Bowie.&lt;/p&gt;
</description>
		<pubDate>Sat, 28 Jun 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/06/28/trente_pochettes_albums_vingt_huitieme_jour.html</guid>
	</item>
	<item>
		<title>Trente pochettes d'albums, vingt-septième jour</title>
		<link>https://blog.jkbockstael.be/posts/2025/06/27/trente_pochettes_albums_vingt_septieme_jour.html</link>
		<description>&lt;h1 id="trente-pochettes-dalbums-vingt-septième-jour"&gt;Trente pochettes d&amp;#39;albums, vingt-septième jour&lt;/h1&gt;
&lt;p&gt;Suite du &lt;a href="/posts/2025/06/01/trente_pochettes_albums_premier_jour.html"&gt;challenge trente pochettes d&amp;#39;albums en trente jours&lt;/a&gt;, pour le vingt-septième jour le thème est &amp;quot;une pochette qui est violette/mauve&amp;quot;.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album du jour est &amp;quot;Eight Arms To Hold You&amp;quot; de Veruca Salt.&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2025/06/27/trente_pochettes_albums_vingt_septieme_jour_attachments/challenge-27.jpg"&gt;&lt;img src="//blog.jkbockstael.be/posts/2025/06/27/trente_pochettes_albums_vingt_septieme_jour_attachments/challenge-27-thumb.png" alt="Eight Arms To Hold You"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Veruca Salt (oui, référence &amp;quot;Charlie et la chocolaterie&amp;quot;) est un groupe américain de rock alternatif, formé en 1992 autour des deux chanteuses/guitaristes Nina Gordon et Louise Post.&lt;/p&gt;
&lt;p&gt;&amp;quot;Eight Arms To Hold You&amp;quot;, sorti en 1997 chez Outpost, est leur deuxième album. Quatorze morceaux pour 51 minutes, donc des longueurs de trois/quatre minutes par morceau, et une formation guitare-guitare-basse-batterie tout ce qu&amp;#39;il y a de plus classique si ce n&amp;#39;est que le chant en duo harmonique féminin les sépare clairement du lot. La musique est rock tendance hard rock, impregnée de grunge avec des notes punk qui peuvent rappeler Pixies ou Breeders, et la production par Bob Rock assure que chaque instrument ait sa place et que tout soit aussi clair que possible. C&amp;#39;est solide, ça danse entre mélancolie et pure énergie, c&amp;#39;est insolent et joyeux, ça s&amp;#39;écoute avec plaisir, c&amp;#39;est estival et adolescent (ou alors c&amp;#39;est moi qui étais estival est insouciant à l&amp;#39;époque ? va savoir, dans mes albums poncés à cette époque il y a &amp;quot;Un jour de rêve&amp;quot; de Dolly donc bon).&lt;/p&gt;
&lt;p&gt;L&amp;#39;album est &lt;a href="https://www.youtube.com/playlist?list=OLAK5uy_lmtVeEdoXCzxviwCsN5CJ_FIz94xARDn4"&gt;disponible à l&amp;#39;écoute sur YouTube&lt;/a&gt;, commencez par &amp;quot;Sound of the Bell&amp;quot;, &amp;quot;Shutterbug&amp;quot; ou &amp;quot;One Last Time&amp;quot; pour laquelle j&amp;#39;ai une affection particulière.&lt;/p&gt;
</description>
		<pubDate>Fri, 27 Jun 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/06/27/trente_pochettes_albums_vingt_septieme_jour.html</guid>
	</item>
	<item>
		<title>Trente pochettes d'albums, vingt-sixième jour</title>
		<link>https://blog.jkbockstael.be/posts/2025/06/26/trente_pochettes_albums_vingt_sixieme_jour.html</link>
		<description>&lt;h1 id="trente-pochettes-dalbums-vingt-sixième-jour"&gt;Trente pochettes d&amp;#39;albums, vingt-sixième jour&lt;/h1&gt;
&lt;p&gt;Suite du &lt;a href="/posts/2025/06/01/trente_pochettes_albums_premier_jour.html"&gt;challenge trente pochettes d&amp;#39;albums en trente jours&lt;/a&gt;, pour le vingt-sixième jour le thème est &amp;quot;une pochette avec quelque chose de rond&amp;quot;.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album du jour est &amp;quot;Beaucoup Fish&amp;quot; d&amp;#39;Underworld.&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2025/06/26/trente_pochettes_albums_vingt_sixieme_jour_attachments/challenge-26.jpg"&gt;&lt;img src="//blog.jkbockstael.be/posts/2025/06/26/trente_pochettes_albums_vingt_sixieme_jour_attachments/challenge-26-thumb.png" alt="Beaucoup Fish"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Underworld est un groupe britannique formé en 1987, faisant de la musique électronique assez éclectique mais principalement techno, qui a changé de composition au cours de son histoire et est actuellement un duo. Le groupe a onze albums studio à son actif (mais certains diront que les deux premiers albums sont tellement différents du reste qu&amp;#39;ils ne devraient pas être comptés).&lt;/p&gt;
&lt;p&gt;&amp;quot;Beaucoup Fish&amp;quot; est le cinquième de ces onze albums, sorti en 1999 chez Junior Boy&amp;#39;s Own. C&amp;#39;est un album à ranger dans les ctégories techno, house, et peut-être trance avec des pétites downtempo. Les compositions d&amp;#39;Underworld sont toujours très atmosphériques, et très progressives ; c&amp;#39;est de la techno qui fonctionne bien sur le dancefloor mais a tout à fait sa place aussi dans le salon. Le sound design est assez chaleureux, plutôt organique, et bien soutenu par le chant qui déroule la poésie impressionniste en flux de conscience de Karl Hyde. Écoutez-le pour l&amp;#39;énergie, les atmosphères, la belle variété dans les morceaux (genre Skym ou Bruce Lee c&amp;#39;est du bel ouvrage).&lt;/p&gt;
&lt;p&gt;L&amp;#39;album est &lt;a href="https://www.youtube.com/playlist?list=OLAK5uy_k6FtgkhiYaqMkZ8b1HcDqjde3LRLtoK34"&gt;disponible à l&amp;#39;écoute sur YouTube&lt;/a&gt;, commencez par &amp;quot;Jumbo&amp;quot; pour le coté prog/atmo ou &amp;quot;Moaner&amp;quot; pour du bon gros banger de salle sombre.&lt;/p&gt;
</description>
		<pubDate>Thu, 26 Jun 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/06/26/trente_pochettes_albums_vingt_sixieme_jour.html</guid>
	</item>
	<item>
		<title>Trente pochettes d'albums, vingt-cinquième jour</title>
		<link>https://blog.jkbockstael.be/posts/2025/06/25/trente_pochettes_albums_vingt_cinquieme_jour.html</link>
		<description>&lt;h1 id="trente-pochettes-dalbums-vingt-cinquième-jour"&gt;Trente pochettes d&amp;#39;albums, vingt-cinquième jour&lt;/h1&gt;
&lt;p&gt;Suite du &lt;a href="/posts/2025/06/01/trente_pochettes_albums_premier_jour.html"&gt;challenge trente pochettes d&amp;#39;albums en trente jours&lt;/a&gt;, pour le vingt-cinquième jour le thème est &amp;quot;une pochette avec une ombre, un reflet, ou une silhouette&amp;quot;.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album du jour est &amp;quot;Deadwing&amp;quot; de Porcupine Tree.&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2025/06/25/trente_pochettes_albums_vingt_cinquieme_jour_attachments/challenge-25.jpg"&gt;&lt;img src="//blog.jkbockstael.be/posts/2025/06/25/trente_pochettes_albums_vingt_cinquieme_jour_attachments/challenge-25-thumb.png" alt="Deadwing"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Porcupine Tree est un groupe britannique de rock progressif fondé en 1987 par Steven Wilson, ils ont à leur actif pas moins de onze albums studio depuis.&lt;/p&gt;
&lt;p&gt;&amp;quot;Deadwing&amp;quot; est le huitième de ces onze albums, sorti en 2005 chez Lava. Il est dans la continuité du précédent, &amp;quot;In Absentia&amp;quot;, qui explorait des influences metal alors qu&amp;#39;auparavant le groupe avait un son plus psychédélique ; il sera suivi deux ans plus tard par le magistral &amp;quot;Fear of a Blank Planet&amp;quot; mais constitue une très bonne porte d&amp;#39;entrée pour aller à la découverte de la musique de Porcupine Tree. On y trouve quelque chose pour presque tous les goûts : des morceaux de plus de dix minutes, des balades lancinantes, des riffs de guitare bien péchus qui s&amp;#39;ancrent bien dans le metal, des progressions ambitieuses avec une belle complexité. Il s&amp;#39;y cache aussi la présence d&amp;#39;invités de marque : Adrian Belew de King Crimson et Mickael Åkerfeldt de Opeth. Rien que ça.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album est &lt;a href="https://kscopemusic.bandcamp.com/album/deadwing-2005-master"&gt;disponible à l&amp;#39;écoute sur Bandcamp&lt;/a&gt;, commencez par &amp;quot;Arriving Somewhere But Not Here&amp;quot; ; oui c&amp;#39;est long, oui ça vaut le coup.&lt;/p&gt;
</description>
		<pubDate>Wed, 25 Jun 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/06/25/trente_pochettes_albums_vingt_cinquieme_jour.html</guid>
	</item>
	<item>
		<title>Trente pochettes d'albums, vingt-quatrième jour</title>
		<link>https://blog.jkbockstael.be/posts/2025/06/24/trente_pochettes_albums_vingt_quatrieme_jour.html</link>
		<description>&lt;h1 id="trente-pochettes-dalbums-vingt-quatrième-jour"&gt;Trente pochettes d&amp;#39;albums, vingt-quatrième jour&lt;/h1&gt;
&lt;p&gt;Suite du &lt;a href="/posts/2025/06/01/trente_pochettes_albums_premier_jour.html"&gt;challenge trente pochettes d&amp;#39;albums en trente jours&lt;/a&gt;, pour le vingt-quatrième jour le thème est &amp;quot;une pochette qui n&amp;#39;utilise que deux ou trois couleurs&amp;quot;.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album du jour est &amp;quot;Stream From The Heavens&amp;quot; de Thergothon.&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2025/06/24/trente_pochettes_albums_vingt_quatrieme_jour_attachments/challenge-24.jpg"&gt;&lt;img src="//blog.jkbockstael.be/posts/2025/06/24/trente_pochettes_albums_vingt_quatrieme_jour_attachments/challenge-24-thumb.png" alt="Streams From The Heavens"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Thergothon était un groupe formé en Finlande en 1990, qui malgré une carrière extrêmement courte (une démo et un album) est cité comme inventeur du genre funeral doom.&lt;/p&gt;
&lt;p&gt;&amp;quot;Streams From The Heavens&amp;quot;, l&amp;#39;unique album du groupe, est sorti sur le label Avantgarde Music en 1994 (et c&amp;#39;est le premier disque de ce label décidément bien nommé). On pourrait ne l&amp;#39;écouter que pour l&amp;#39;intérêt historique, parce que c&amp;#39;est le premier ou pour mesurer son influence sur le funeral doom actuel, mais il a vieilli comme du bon vin et a une grande valeur musicale indépendamment de sa valeur historique. Le groupe est un trio, l&amp;#39;orchestration est épurée : guitare, batterie, clavier, et un chant qui va chercher des influences death metal mais traîne en longues lamentations qui sont autant de menaces. La production est épurée aussi, assez brute de décoffrage même. L&amp;#39;influence lovecraftienne ne se cache pas du tout, bien au contraire. L&amp;#39;album compte six morceaux pour quarante minutes, donc sur des critères modernes les morceaux sont plutôt courts (pour du funeral doom), mais qu&amp;#39;est-ce qu&amp;#39;ils sont pesants ! C&amp;#39;est un bel ouvrage de noirceur lente et lourde, qui réserve de belles pépites de créativité, et à l&amp;#39;écoute on comprend son influence majeure (même si la critique avait totalement loupé le coche à l&amp;#39;époque).&lt;/p&gt;
&lt;p&gt;L&amp;#39;album est &lt;a href="https://www.youtube.com/playlist?list=OLAK5uy_lCvrnEQxjaIUv0ImV0fH4FMw2Hz7OFmFI"&gt;disponible à l&amp;#39;écoute sur YouTube&lt;/a&gt;, moi j&amp;#39;aime particulièrement &amp;quot;Yet The Watchers Guard&amp;quot; et &amp;quot;Elemental&amp;quot;.&lt;/p&gt;
</description>
		<pubDate>Tue, 24 Jun 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/06/24/trente_pochettes_albums_vingt_quatrieme_jour.html</guid>
	</item>
	<item>
		<title>Trente pochettes d'albums, vingt-troisième jour</title>
		<link>https://blog.jkbockstael.be/posts/2025/06/23/trente_pochettes_albums_vingt_troisieme_jour.html</link>
		<description>&lt;h1 id="trente-pochettes-dalbums-vingt-troisième-jour"&gt;Trente pochettes d&amp;#39;albums, vingt-troisième jour&lt;/h1&gt;
&lt;p&gt;Suite du &lt;a href="/posts/2025/06/01/trente_pochettes_albums_premier_jour.html"&gt;challenge trente pochettes d&amp;#39;albums en trente jours&lt;/a&gt;, pour le vingt-troisième jour le thème est &amp;quot;une pochette avec quelqu&amp;#39;un qui regarde ailleurs&amp;quot;.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album du jour est &amp;quot;Mali Denhou&amp;quot; de Boubacar Traoré.&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2025/06/23/trente_pochettes_albums_vingt_troisieme_jour_attachments/challenge-23.jpg"&gt;&lt;img src="//blog.jkbockstael.be/posts/2025/06/23/trente_pochettes_albums_vingt_troisieme_jour_attachments/challenge-23-thumb.png" alt="Mali Denhou"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Boubacar Traoré est un chanteur et guitariste Malien qui joue un blues qui se distingue par un jeu de guitare très inspiré de la &lt;a href="https://fr.wikipedia.org/wiki/Kora"&gt;kora&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;quot;Mali Denhou&amp;quot; est sorti en 2010 chez Lusafrica. Y&amp;#39;en a eu un qui disait &amp;quot;toute la musique que j&amp;#39;aime elle vient de là, elle vient du blues&amp;quot; ; ben voyez-vous le blues il vient d&amp;#39;Africe de l&amp;#39;Ouest, et Boubacar Traoré nous l&amp;#39;illustre bien sur ce disque. Venez pour le blues, restez pour le Sahel. Mes mots ne rendraient pas justice à la justesse de la composition et du jeu de Boubacar Traoré, tendez-y une oreille plutôt.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album est &lt;a href="https://www.youtube.com/playlist?list=PLrc3roRiRWpmq2_TVhw8Kwo0DFZgJzEFV"&gt;disponible à l&amp;#39;écoute sur YouTube&lt;/a&gt;, prenez &amp;quot;Dundobesse M&amp;#39;Bedouniato&amp;quot; pour aller au Sahel ou &amp;quot;Kankan Baro&amp;quot; pour aller faire un tour dans le Delta.&lt;/p&gt;
</description>
		<pubDate>Mon, 23 Jun 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/06/23/trente_pochettes_albums_vingt_troisieme_jour.html</guid>
	</item>
	<item>
		<title>Trente pochettes d'albums, vingt-deuxième jour</title>
		<link>https://blog.jkbockstael.be/posts/2025/06/22/trente_pochettes_albums_vingt-deuxieme_jour.html</link>
		<description>&lt;h1 id="trente-pochettes-dalbums-vingt-deuxième-jour"&gt;Trente pochettes d&amp;#39;albums, vingt-deuxième jour&lt;/h1&gt;
&lt;p&gt;Suite du &lt;a href="/posts/2025/06/01/trente_pochettes_albums_premier_jour.html"&gt;challenge trente pochettes d&amp;#39;albums en trente jours&lt;/a&gt;, pour le vingt-deuxième jour le thème est &amp;quot;une pochette avec un bâtiment ou de l&amp;#39;architecture&amp;quot;.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album du jour est &amp;quot;Eschaton&amp;quot; de Void Stasis.&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2025/06/22/trente_pochettes_albums_vingt-deuxieme_jour_attachments/challenge-22.jpg"&gt;&lt;img src="//blog.jkbockstael.be/posts/2025/06/22/trente_pochettes_albums_vingt-deuxieme_jour_attachments/challenge-22-thumb.png" alt="Eschaton"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Void Stasis est un groupe de dark ambient Américain composé de Kristof Bathory (de Dawn of Ashes) et Marie Ann Hedonia, précédemment il comptait également comme membre Scott Denman de Die Sektor. Le groupe a sorti son premier album en 2022 et travaille entièrement aux synthés hardware et modules Eurorack.&lt;/p&gt;
&lt;p&gt;&amp;quot;Eschaton&amp;quot; est sorti en 2024 chez Cryo Chamber (label à suivre absolument si on s&amp;#39;intéresse au genre dark ambient). C&amp;#39;est le troisième album du groupe, neuf titres pour une heure au total ; on y trouve une collaboration avec Tineidae et une avec Atrium Carceri (tous deux également signés chez Cryo Chamber). Une heure de dark ambient par des gens qui savent ce qui font, qui savent mêler le drone et les sons d&amp;#39;ambiance en appliquant aussi une saine dose de mélodies au synthétiseur avec un son délicieusement rétro. L&amp;#39;ambiance est froide, les structures et mélodies dépeignent des scènes en mouvement avec une certaine urgence et une certaine menace, ça pourrait être la BO d&amp;#39;un film de science-fiction post-apocalyptique.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album est &lt;a href="https://cryochamber.bandcamp.com/album/eschaton"&gt;disponible à l&amp;#39;écoute sur Bandcamp&lt;/a&gt;, j&amp;#39;aime beaucoup &amp;quot;Time Doesn&amp;#39;t Exist Here&amp;quot; et &amp;quot;A Cold Desolate Place&amp;quot;.&lt;/p&gt;
</description>
		<pubDate>Sun, 22 Jun 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/06/22/trente_pochettes_albums_vingt-deuxieme_jour.html</guid>
	</item>
	<item>
		<title>Trente pochettes d'albums, vingt-et-unième jour</title>
		<link>https://blog.jkbockstael.be/posts/2025/06/21/trente_pochettes_albums_vingt_et_unieme_jour.html</link>
		<description>&lt;h1 id="trente-pochettes-dalbums-vingt-et-unième-jour"&gt;Trente pochettes d&amp;#39;albums, vingt-et-unième jour&lt;/h1&gt;
&lt;p&gt;Suite du &lt;a href="/posts/2025/06/01/trente_pochettes_albums_premier_jour.html"&gt;challenge trente pochettes d&amp;#39;albums en trente jours&lt;/a&gt;, pour le vingt-et-unième jour le thème est &amp;quot;une pochette qui est bleue&amp;quot;.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album du jour est &amp;quot;Blood Vaults – The Blazing Gospel of Heinrich Kramer&amp;quot; de The Ruins Of Beverast.&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2025/06/21/trente_pochettes_albums_vingt_et_unieme_jour_attachments/challenge-21.jpg"&gt;&lt;img src="//blog.jkbockstael.be/posts/2025/06/21/trente_pochettes_albums_vingt_et_unieme_jour_attachments/challenge-21-thumb.png" alt="Blood Vaults"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The Ruins Of Beverast est un projet musical solo de l&amp;#39;Allemand Alexander von Meilenwald, de style &amp;quot;blackened doom metal&amp;quot; c&amp;#39;est-à-dire l&amp;#39;intersection entre black metal et doom metal.&lt;/p&gt;
&lt;p&gt;&amp;quot;Blood Vaults&amp;quot; est sorti en 2013 chez Ván. J&amp;#39;étais assez impatient de l&amp;#39;écouter à sa sortie, comme les précédents albums (celui-ci est le quatrième du projet) m&amp;#39;avaient beaucoup plu, et je n&amp;#39;ai pas été déçu du tout. De manière générale les projets solo sont intéressants parce qu&amp;#39;ils font souvent preuve d&amp;#39;une très grande cohérence et d&amp;#39;une vision artistique claire qui s&amp;#39;exécute sans compromis. &amp;quot;Blood Vaults&amp;quot; est un de ces albums, un album-concept où tout est lié dans un tout cohérent, narratif, cinématique même. Von Meilenwald laisse s&amp;#39;exprimer ses influences et navigue avec adresse et précision entre le black et le doom sans rien se refuser niveau orchestration. Le résultat est grandiose, grandiloquent presque, mais d&amp;#39;une manière franche et assurée qui fait toute la différence entre kitsch et théâtral. À écouter d&amp;#39;une traite au casque, idéalement en faisant quelque chose qui n&amp;#39;engage pas le cerveau de manière à laisser toute la place à la musique.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album est &lt;a href="https://theruinsofbeverast.bandcamp.com/album/blood-vaults"&gt;disponible à l&amp;#39;écoute sur Bandcamp&lt;/a&gt;, commencez par le commencement ou goûtez à &amp;quot;Ornaments of Malice&amp;quot; ou à &amp;quot;Monument&amp;quot; pour vous mettre en appétit.&lt;/p&gt;
</description>
		<pubDate>Sat, 21 Jun 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/06/21/trente_pochettes_albums_vingt_et_unieme_jour.html</guid>
	</item>
	<item>
		<title>Trente pochettes d'albums, vingtième jour</title>
		<link>https://blog.jkbockstael.be/posts/2025/06/20/trente_pochettes_albums_vingtieme_jour.html</link>
		<description>&lt;h1 id="trente-pochettes-dalbums-vingtième-jour"&gt;Trente pochettes d&amp;#39;albums, vingtième jour&lt;/h1&gt;
&lt;p&gt;Suite du &lt;a href="/posts/2025/06/01/trente_pochettes_albums_premier_jour.html"&gt;challenge trente pochettes d&amp;#39;albums en trente jours&lt;/a&gt;, pour le vingtième jour le thème est &amp;quot;une pochette avec une fleur ou une plante&amp;quot;.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album du jour est &amp;quot;Bloem&amp;quot; de Fluisteraars.&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2025/06/20/trente_pochettes_albums_vingtieme_jour_attachments/challenge-20.jpg"&gt;&lt;img src="//blog.jkbockstael.be/posts/2025/06/20/trente_pochettes_albums_vingtieme_jour_attachments/challenge-20-thumb.png" alt="Bloem"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Fluisteraars est un groupe de black metal formé aux Pays-Bas en 2009, qui ne s&amp;#39;est presque jamais produit sur scène et a toujours cultivé un certain voile de mystère.&lt;/p&gt;
&lt;p&gt;&amp;quot;Bloem&amp;quot; est sorti en 2020 chez Eisenwald Tonschmiede, et c&amp;#39;est une pépite. Le visuel qui suggère tout sauf du black metal intrigue à juste titre, parce que la musique n&amp;#39;est pas du tout de celles qui s&amp;#39;enferment dans un modèle strict. Le fil rouge est évidemment le black metal, et c&amp;#39;est clarifié dès le premier morceau ; mais ce qui est aussi clarifié dès le premier morceau c&amp;#39;est le son qui n&amp;#39;est pas du tout stéréotypé black metal. Dans ce courant on cherche souvent à avoir un son &amp;quot;froid&amp;quot; qui va chercher dans des aigus stridents ou grinçants ; ici dès les premières notes le son est beaucoup plus chaud, laisse plus de place à la basse, et fait penser aux timbres du post-rock. Et c&amp;#39;est super intéressant, parce que niveau riffs les pieds sont fermements ancrés dans la tradition même s&amp;#39;il y a beaucoup de passages inattendus sans non plus plonger dans l&amp;#39;avant-garde expérimental. Que des bons morceaux qui ne lassent pas, du black metal progressif pour les fans d&amp;#39;Opeth (si si).&lt;/p&gt;
&lt;p&gt;L&amp;#39;album est &lt;a href="https://fluisteraars.bandcamp.com/album/bloem"&gt;disponible à l&amp;#39;écoute sur Bandcamp&lt;/a&gt;, commencez par &amp;quot;Vlek&amp;quot; pour quelque chose de rassurant ou &amp;quot;Eeuwige Ram&amp;quot; pour quelque chose de bien prog.&lt;/p&gt;
</description>
		<pubDate>Fri, 20 Jun 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/06/20/trente_pochettes_albums_vingtieme_jour.html</guid>
	</item>
	<item>
		<title>Trente pochettes d'albums, dix-neuvième jour</title>
		<link>https://blog.jkbockstael.be/posts/2025/06/19/trente_pochettes_albums_dix-neuvieme_jour.html</link>
		<description>&lt;h1 id="trente-pochettes-dalbums-dix-neuvième-jour"&gt;Trente pochettes d&amp;#39;albums, dix-neuvième jour&lt;/h1&gt;
&lt;p&gt;Suite du &lt;a href="/posts/2025/06/01/trente_pochettes_albums_premier_jour.html"&gt;challenge trente pochettes d&amp;#39;albums en trente jours&lt;/a&gt;, pour le dix-neuvième jour le thème est &amp;quot;une pochette qui montre une ou plusieurs mains&amp;quot;.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album du jour est &amp;quot;Zeal &amp;amp; Ardor&amp;quot; de Zeal &amp;amp; Ardor.&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2025/06/19/trente_pochettes_albums_dix-neuvieme_jour_attachments/challenge-19.jpg"&gt;&lt;img src="//blog.jkbockstael.be/posts/2025/06/19/trente_pochettes_albums_dix-neuvieme_jour_attachments/challenge-19-thumb.png" alt="Zeal &amp;amp; Ardor"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Zeal &amp;amp; Ardor est un projet musical de Manuel Gagneux, un artiste Suisse qui baigne dans la musique depuis l&amp;#39;enfance. Il a lancé ce projet en 2013 suite à des défis de composition qu&amp;#39;il s&amp;#39;imposait sur base de suggestions de mélanges de styles sur un forum, en l&amp;#39;occurence ici mélanger du black métal et de la musique noire. Il décrit le résultat mieux que je pourrais le faire : &amp;quot;et si les esclaves Américains s&amp;#39;étaient tournés vers Satan au lieu de Jésus ?&amp;quot;.&lt;/p&gt;
&lt;p&gt;&amp;quot;Zeal &amp;amp; Ardor&amp;quot;, sorti en 2022 chez MVKA, est le troisième album du projet/groupe (à ne pas confondre avec la démo du même nom sortie en 2014). C&amp;#39;est à mes yeux une superbe pépite de créativité et de maîtrise, une belle œuvre qui transpire l&amp;#39;effort et l&amp;#39;intelligence. C&amp;#39;est aussi une drôle de bête qui est assez difficile à décrire puisque c&amp;#39;est de la musique qui puise ses influences dans le blues du Delta, le gospel, le black metal, le post-rock, l&amp;#39;industrial, le shoegaze, le folk, la soul, et bien d&amp;#39;autres (il y a du Meshuggah dans &amp;quot;Erase&amp;quot; par exemple). Le morceau qui ouvre l&amp;#39;album donne bien le ton en moins de deux minutes, et le reste de l&amp;#39;album ne déçoit à aucun moment. C&amp;#39;est de la bien belle musique, qui réussit à être beaucoup plus sombre et quelque part beaucoup plus satanique que celle des groupes qui arborent du corpse-paint et des pochettes à boucs.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album est &lt;a href="https://zealandardor.bandcamp.com/album/zeal-ardor-3"&gt;disponible à l&amp;#39;écoute sur Bandcamp&lt;/a&gt;, commencez par &amp;quot;Hold Your Head Low&amp;quot; ou &amp;quot;Death to the Holy&amp;quot; pour quelque chose d&amp;#39;équilibré entre le blues et la furie.&lt;/p&gt;
</description>
		<pubDate>Thu, 19 Jun 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/06/19/trente_pochettes_albums_dix-neuvieme_jour.html</guid>
	</item>
	<item>
		<title>Trente pochettes d'albums, dix-huitième jour</title>
		<link>https://blog.jkbockstael.be/posts/2025/06/18/trente_pochettes_albums_dix_huitieme_jour.html</link>
		<description>&lt;h1 id="trente-pochettes-dalbums-dix-huitième-jour"&gt;Trente pochettes d&amp;#39;albums, dix-huitième jour&lt;/h1&gt;
&lt;p&gt;Suite du &lt;a href="/posts/2025/06/01/trente_pochettes_albums_premier_jour.html"&gt;challenge trente pochettes d&amp;#39;albums en trente jours&lt;/a&gt;, pour le dix-huitième jour le thème est &amp;quot;une pochette avec un titre en grandes lettres&amp;quot;.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album du jour est &amp;quot;Etherwood&amp;quot; de… Etherwood.&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2025/06/18/trente_pochettes_albums_dix_huitieme_jour_attachments/challenge-18.jpg"&gt;&lt;img src="//blog.jkbockstael.be/posts/2025/06/18/trente_pochettes_albums_dix_huitieme_jour_attachments/challenge-18-thumb.png" alt="Etherwood"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Etherwood (l&amp;#39;artiste) est un musicien qui produit de la liquid drum&amp;#39;n&amp;#39;bass qui inclut fréquemment sa voix ou sa guitare.&lt;/p&gt;
&lt;p&gt;&amp;quot;Etherwood&amp;quot; (l&amp;#39;album) est son premier album, sorti en 2013 chez Med School (le label &amp;quot;jeunes talents&amp;quot; des incontournables Hospital Records). Et c&amp;#39;est costaud comme premier album ! Non seulement on a pas moins de dix-huit morceaux sur ce disque, mais ils font tous preuve d&amp;#39;une maturité artistique déjà bien présente. Le style est résolument &amp;quot;liquid&amp;quot;, on est du côté relax du spectre drum&amp;#39;n&amp;#39;bass ; c&amp;#39;est fortement renforcé par l&amp;#39;utilisation d&amp;#39;instruments analogiques, principalement piano et guitare (joués par l&amp;#39;artiste), et de chant sans effets outranciers (également par l&amp;#39;artiste sur plusieurs morceaux). Le résultat est un disque de musique électronique avec une sonorité très chaleureuse et organisque, pour une atmosphère pleine de douceur et de sérénité. La musique d&amp;#39;Etherwood (l&amp;#39;album et l&amp;#39;artiste) est une après-midi calme passée au bord du lac.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album est &lt;a href="https://etherwood.bandcamp.com/album/etherwood"&gt;disponible à l&amp;#39;écoute sur Bandcamp&lt;/a&gt;, commencez par &amp;quot;Falling Out of Consciousness&amp;quot;, ou par &amp;quot;One Day&amp;quot; pour quelque chose sans chant.&lt;/p&gt;
</description>
		<pubDate>Wed, 18 Jun 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/06/18/trente_pochettes_albums_dix_huitieme_jour.html</guid>
	</item>
	<item>
		<title>Trente pochettes d'albums, dix-septième jour</title>
		<link>https://blog.jkbockstael.be/posts/2025/06/17/trente_pochettes_albums_dix_septieme_jour.html</link>
		<description>&lt;h1 id="trente-pochettes-dalbums-dix-septième-jour"&gt;Trente pochettes d&amp;#39;albums, dix-septième jour&lt;/h1&gt;
&lt;p&gt;Suite du &lt;a href="/posts/2025/06/01/trente_pochettes_albums_premier_jour.html"&gt;challenge trente pochettes d&amp;#39;albums en trente jours&lt;/a&gt;, pour le dix-septième jour le thème est &amp;quot;une pochette qui est verte&amp;quot;.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album du jour est &amp;quot;Interloper&amp;quot; de Carbon Based Lifeforms.&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2025/06/17/trente_pochettes_albums_dix_septieme_jour_attachments/challenge-17.jpg"&gt;&lt;img src="//blog.jkbockstael.be/posts/2025/06/17/trente_pochettes_albums_dix_septieme_jour_attachments/challenge-17-thumb.png" alt="Interloper"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Carbon Based Lifeforms est un duo de musiciens Suédois formé en 1996 qui fait de la musique atmosphérique à base de synthétiseurs sur un beat downtempo.&lt;/p&gt;
&lt;p&gt;&amp;quot;Interloper&amp;quot; est sorti en 2010 chez Ultimae Records, mais la pochette ci-dessus est celle de son remaster paru en 2015 chez Leftfield Records. C&amp;#39;est le troisième album du groupe, et il marque un changement de style puisque les sons acidulés des précédents disques laissent ici la place à quelque chose de plus organique. Je suis tombé sur cet album pile au bon moment puisque c&amp;#39;était en 2020 lors du premier confinement à cause du COVID19, quand on devait tous s&amp;#39;adapter sans préparation à du télétravail complêt et que mes playlists des jours de travail allaient pouvoir comporter moins d&amp;#39;anti-bruit-de-plateau. Sur dix morceaux au tempo calme mais avec un beat clair les mélodies savent être présentes sans voler l&amp;#39;attention, la musique sait rester discrète mais stimuler juste assez pour ne pas plonger dans le brouillard mental. Le sound design ne cache pas ses influences trance et psybient, sans se coincer dans le cliché. Bref, c&amp;#39;est un bel object musical de bien bonne facture. Un super album pour travailler donc, mais qu&amp;#39;on ressort ensuite pour d&amp;#39;autres circonstances.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album est &lt;a href="https://carbonbasedlifeforms.bandcamp.com/album/interloper"&gt;disponible à l&amp;#39;écoute sur Bandcamp&lt;/a&gt;, commencez par &amp;quot;Supersede&amp;quot;.&lt;/p&gt;
</description>
		<pubDate>Tue, 17 Jun 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/06/17/trente_pochettes_albums_dix_septieme_jour.html</guid>
	</item>
	<item>
		<title>Trente pochettes d'albums, seizième jour</title>
		<link>https://blog.jkbockstael.be/posts/2025/06/16/trente_pochettes_albums_seizieme_jour.html</link>
		<description>&lt;h1 id="trente-pochettes-dalbums-seizième-jour"&gt;Trente pochettes d&amp;#39;albums, seizième jour&lt;/h1&gt;
&lt;p&gt;Suite du &lt;a href="/posts/2025/06/01/trente_pochettes_albums_premier_jour.html"&gt;challenge trente pochettes d&amp;#39;albums en trente jours&lt;/a&gt;, pour le seizième jour le thème est &amp;quot;une pochette avec quelqu&amp;#39;un allongé ou assis&amp;quot;.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album du jour est &amp;quot;Underground&amp;quot; de Thelonious Monk.&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2025/06/16/trente_pochettes_albums_seizieme_jour_attachments/challenge-16.jpg"&gt;&lt;img src="//blog.jkbockstael.be/posts/2025/06/16/trente_pochettes_albums_seizieme_jour_attachments/challenge-16-thumb.png" alt="Underground"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Thelonious Monk est un pianiste jazz/bebop Américain dont la carrière s&amp;#39;étend des années 1930 aux années 1970. Sa musique est très rythmée, avec beaucoup de changements qui lui donne un air d&amp;#39;improvisation mais exécutée avec une virtuosité qui ne laisse aucun doute sur l&amp;#39;intention. C&amp;#39;est un peu comme un peintre qui serait bon en figuratif mais choisirait de faire de l&amp;#39;abstrait.&lt;/p&gt;
&lt;p&gt;&amp;quot;Underground&amp;quot; est sorti en 1968 chez Columbia. C&amp;#39;est le septième album de Thelonious Monk et son dernier avec le Thelonious Monk Quartet. On a ici sept morceaux pour 37 minutes, de morceaux enthousiastes et spontanés portés au piano et au saxophone dans une atmosphère très cosy et intimiste. On se laisse emporter par les envolées de Monk, on se laisse envelopper par les volutes de la basse, et le temps file sans laisser de trace. De temps en temps il y a un album qui est parfait dans le sens où retirer l&amp;#39;un ou l&amp;#39;autre morceau ne l&amp;#39;améliorerait pas, &amp;quot;Underground&amp;quot; est un de ces albums-là.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album est &lt;a href="https://www.youtube.com/playlist?list=OLAK5uy_l5D2V8vsDEEnHsvk_K6pasp9UeQWxzNGU"&gt;disponible à l&amp;#39;écoute sur YouTube&lt;/a&gt;, commencez par &amp;quot;Easy Street&amp;quot; pour du particulièrement velouté, ou &amp;quot;Green Chimney&amp;#39;s&amp;quot; pour quelque chose de beaucoup plus enjoué.&lt;/p&gt;
</description>
		<pubDate>Mon, 16 Jun 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/06/16/trente_pochettes_albums_seizieme_jour.html</guid>
	</item>
	<item>
		<title>Trente pochettes d'albums, quinzième jour</title>
		<link>https://blog.jkbockstael.be/posts/2025/06/15/trente_pochettes_albums_quinzieme_jour.html</link>
		<description>&lt;h1 id="trente-pochettes-dalbums-quinzième-jour"&gt;Trente pochettes d&amp;#39;albums, quinzième jour&lt;/h1&gt;
&lt;p&gt;Suite du &lt;a href="/posts/2025/06/01/trente_pochettes_albums_premier_jour.html"&gt;challenge trente pochettes d&amp;#39;albums en trente jours&lt;/a&gt;, pour le quinzième jour le thème est &amp;quot;une pochette au design minimaliste&amp;quot;.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album du jour est &amp;quot;Noire&amp;quot; de VNV Nation.&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2025/06/15/trente_pochettes_albums_quinzieme_jour_attachments/challenge-15.jpg"&gt;&lt;img src="//blog.jkbockstael.be/posts/2025/06/15/trente_pochettes_albums_quinzieme_jour_attachments/challenge-15-thumb.png" alt="Noire"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;VNV Nation est le projet et groupe du musicien Irlandais Ronan Harris, solo en studio la plupart du temps. Le groupe a été formé à Londres en 1994 sur l&amp;#39;idée de faire de la musique électronique orchestrale influencée par le courant EBM (de Front 242 ou Nitzer Ebb) et &amp;quot;1984&amp;quot; d&amp;#39;Orwell. Au fil du temps les racines industrial/EBM ont laissé place à une musique à la rencontre de la futurepop et la trance progressive.&lt;/p&gt;
&lt;p&gt;&amp;quot;Noire&amp;quot; est sorti en 2018 chez Anachron Sounds et Metropolis Records, c&amp;#39;est le dixième album de VNV Nation. Sur treize morceaux on est porté par une musique qui sait allier avec maestro des rythmes martelants et des mélodies aériennes pendant que le chant de Harris se montre plus assuré et solennel que jamais. Sur la musique c&amp;#39;est efficace, sur les sons c&amp;#39;est très intéressant par l&amp;#39;utilisation généralisée de synthétiseurs analogiques des années 1950 à 1970, sur les paroles c&amp;#39;est VNV Nation donc c&amp;#39;est à la fois sombre et lumineux, grave mais plein d&amp;#39;espoir sans verser dans l&amp;#39;optimisme beat. Un disque fait de morceaux parfois durs, parfois mélancoliques, souvent dansants. VNV Nation ne déçoit jamais et est à sa place dans plein de circonstances.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album est &lt;a href="https://vnvnation.bandcamp.com/album/noire-44khz-24bit-version"&gt;disponible à l&amp;#39;écoute sur Bandcamp&lt;/a&gt;, commencez par &amp;quot;All Of Our Sins&amp;quot; pour de la puissance lyrique, &amp;quot;Armour&amp;quot; pour de l&amp;#39;aérien au son bien rétro, ou &amp;quot;Lights Go Out&amp;quot; pour de la futurepop qui fait taper du pied.&lt;/p&gt;
</description>
		<pubDate>Sun, 15 Jun 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/06/15/trente_pochettes_albums_quinzieme_jour.html</guid>
	</item>
	<item>
		<title>Trente pochettes d'albums, quatorzième jour</title>
		<link>https://blog.jkbockstael.be/posts/2025/06/14/trente_pochettes_albums_quatorzieme_jour.html</link>
		<description>&lt;h1 id="trente-pochettes-dalbums-quatorzième-jour"&gt;Trente pochettes d&amp;#39;albums, quatorzième jour&lt;/h1&gt;
&lt;p&gt;Suite du &lt;a href="/posts/2025/06/01/trente_pochettes_albums_premier_jour.html"&gt;challenge trente pochettes d&amp;#39;albums en trente jours&lt;/a&gt;, pour le quatorzième jour le thème est &amp;quot;une pochette avec quelque chose qui vole&amp;quot;.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album du jour est &amp;quot;Rossz Csillag Alatt Született&amp;quot; de Venetian Snares.&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2025/06/14/trente_pochettes_albums_quatorzieme_jour_attachments/challenge-14.jpg"&gt;&lt;img src="//blog.jkbockstael.be/posts/2025/06/14/trente_pochettes_albums_quatorzieme_jour_attachments/challenge-14-thumb.png" alt="Rossz Csillag Alatt Született"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Venetians Snares est un musicien Canadien qui est un grand nom du mouvement breakcore dans lequel il a amené beaucoup de créativité et d&amp;#39;intelligence. Sa musique est toujours expérimentale et explore sans cesse des nouvelles expressions ; ça la rend aussi parfois opaque et souvent peu abordable.&lt;/p&gt;
&lt;p&gt;&amp;quot;Rossz Csillag Alatt Született&amp;quot;, sorti en 2005 chez Planet Mu, est le douzième album de Venetian Snares (dont la discographie donne le vertige). La légende veut que l&amp;#39;artiste se soit demandé ce que ce serait d&amp;#39;être un de ces pigeons qu&amp;#39;il voyait voler près du palais de Budavár, à Budapest. Le résultat ? Un album titré en hongrois (ça veut dire &amp;quot;né sous une mauvaise étoile&amp;quot; pour ceux qui se poseraient la question), de onze titres également titrés en hongrois, comportant une reprise d&amp;#39;un morceau d&amp;#39;un musicien Hongrois, entièrement fait de breakbeats à base de musique classique. Le choix est surprenant, l&amp;#39;exécution profite du vaste savoir-faire de l&amp;#39;artiste. C&amp;#39;est un voyage dans le ciel de Budapest qui est très dynamique, très cinématique, dramatique et mélancolique. Une expérience réussie, qui est un bon premier pas dans l&amp;#39;univers totalement barré de Venetian Snares.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album est &lt;a href="https://venetiansnares.bandcamp.com/album/rossz-csillag-alatt-sz-letett"&gt;disponible à l&amp;#39;écoute sur Bandcamp&lt;/a&gt;, commencez par &amp;quot;Hajnal&amp;quot; pour une introduction en douceur, ou par &amp;quot;Második Galamb&amp;quot; pour goûter rapidement à la frénésie que peut avoir la musique Venetian Snares.&lt;/p&gt;
</description>
		<pubDate>Sat, 14 Jun 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/06/14/trente_pochettes_albums_quatorzieme_jour.html</guid>
	</item>
	<item>
		<title>Trente pochettes d'albums, treizième jour</title>
		<link>https://blog.jkbockstael.be/posts/2025/06/13/trente_pochettes_albums_treizieme_jour.html</link>
		<description>&lt;h1 id="trente-pochettes-dalbums-treizième-jour"&gt;Trente pochettes d&amp;#39;albums, treizième jour&lt;/h1&gt;
&lt;p&gt;Suite du &lt;a href="/posts/2025/06/01/trente_pochettes_albums_premier_jour.html"&gt;challenge trente pochettes d&amp;#39;albums en trente jours&lt;/a&gt;, pour le treizième jour le thème est &amp;quot;une pochette qui est jaune&amp;quot;.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album du jour est &amp;quot;Never Stop Dancing&amp;quot; de Boris Brejcha.&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2025/06/13/trente_pochettes_albums_treizieme_jour_attachments/challenge-13.jpg"&gt;&lt;img src="//blog.jkbockstael.be/posts/2025/06/13/trente_pochettes_albums_treizieme_jour_attachments/challenge-13-thumb.png" alt="Never Stop Dancing"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Boris Brejcha est un artiste Allemand qui depuis 2006 produit de la musique qu&amp;#39;il qualifie de &amp;quot;high tech minimal&amp;quot; ; d&amp;#39;autres diront que c&amp;#39;est de la techno minimale ou de la techno-house.&lt;/p&gt;
&lt;p&gt;&amp;quot;Never Stop Dancing&amp;quot; est sorti en 2021 chez Ultra Music, entre quelques EP et singles (le gars est du genre prolifique). On y retrouve douze morceaux de la techno épurée portée par des basses bien rondes caractéristique de Brejcha, et sur quelques morceaux la voix de Ginger (sa partenaire) pour apporter un peu de chant. Le style est résolument allemand : très carré, sur des morceaux plutôt longs, sans drop forcé, avec beaucoup de clarté et d&amp;#39;intention dans la composition. Sur l&amp;#39;atmosphère et le sound design Boris Brejcha se situe toujours du côté chaleureux et enjoué du spectre ; ne vous attendez donc pas ici à des ambiances de salles obscures en zone industrielle décrépie, ici tout est ensoleillé et joyeux. Il y a dans la musique de Boris Brejcha quelque chose d&amp;#39;entraînant et d&amp;#39;optimiste qui couplé avec les lignes de basses efficaces en font une valeur sûre que ce soit pour les longs trajets sur l&amp;#39;autoroute ou les journées de travail sur déficit de sommeil.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album est &lt;a href="https://www.youtube.com/playlist?list=OLAK5uy_k2xanjYWGEA_993tFHkQq-cOVrtMuwb7g"&gt;disponible à l&amp;#39;écoute sur YouTube&lt;/a&gt;, commencez par &amp;quot;Take a Ride&amp;quot; qui me fait systématiquement monter le son.&lt;/p&gt;
</description>
		<pubDate>Fri, 13 Jun 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/06/13/trente_pochettes_albums_treizieme_jour.html</guid>
	</item>
	<item>
		<title>Trente pochettes d'albums, douzième jour</title>
		<link>https://blog.jkbockstael.be/posts/2025/06/12/trente_pochettes_albums_douzieme_jour.html</link>
		<description>&lt;h1 id="trente-pochettes-dalbums-douzième-jour"&gt;Trente pochettes d&amp;#39;albums, douzième jour&lt;/h1&gt;
&lt;p&gt;Suite du &lt;a href="/posts/2025/06/01/trente_pochettes_albums_premier_jour.html"&gt;challenge trente pochettes d&amp;#39;albums en trente jours&lt;/a&gt;, pour le douzième jour le thème est &amp;quot;une pochette avec de l&amp;#39;eau&amp;quot;.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album du jour est &amp;quot;The Falling Tide&amp;quot; de Woods Of Desolation.&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2025/06/12/trente_pochettes_albums_douzieme_jour_attachments/challenge-12.jpg"&gt;&lt;img src="//blog.jkbockstael.be/posts/2025/06/12/trente_pochettes_albums_douzieme_jour_attachments/challenge-12-thumb.png" alt="The Falling Tide"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Woods of Desolation est un projet de black metal atmopherique d&amp;#39;un artiste multi-instrumentaliste Australien qui signe sobrement &amp;quot;D.&amp;quot; et est actif depuis 2005. Sa musique s&amp;#39;inscrit dans le courant blackgaze, influencé par le post-rock et le shoegaze. On est loin de &amp;quot;Black Metal ist Krieg&amp;quot;.&lt;/p&gt;
&lt;p&gt;&amp;quot;The Falling Tide&amp;quot; est sorti en 2022 chez Season of Mist, huit ans après le précédent album. Contrairement aux précédents, D y joue tous les instruments et fournit le chant ; c&amp;#39;est donc un album particulièrement personnel. Les influences sont présentes sans être évidentes, ce qui contraste avec pas mal d&amp;#39;artistes du courant blackgaze. Le chant en particulier est particulièrement erraillé et douloureux, les guitares sont célestes mais le rythme est globalement assez rapide avec beaucoup de passages à la double pédale. Globalement on a ici une certaine urgence (le disque ne fait que 36 minutes après tout) et quelque chose qui peut sembler assez conventionnel de prime abord mais s&amp;#39;avère très raffiné et surprend encore écoute après écoute. De toute évidence ce fameux D sait très bien ce qu&amp;#39;il fait.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album est &lt;a href="https://woodsofdesolation.bandcamp.com/album/the-falling-tide"&gt;disponible à l&amp;#39;écoute sur Bandcamp&lt;/a&gt;, commencez par &amp;quot;Anew&amp;quot; pour quelque chose de typiquement blackgaze, ou par &amp;quot;The Falling Tide&amp;quot; pour des passages au clavier qui plairont aux vieux goths fans des Cure.&lt;/p&gt;
</description>
		<pubDate>Thu, 12 Jun 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/06/12/trente_pochettes_albums_douzieme_jour.html</guid>
	</item>
	<item>
		<title>Trente pochettes d'albums, onzième jour</title>
		<link>https://blog.jkbockstael.be/posts/2025/06/11/trente_pochettes_albums_onzieme_jour.html</link>
		<description>&lt;h1 id="trente-pochettes-dalbums-onzième-jour"&gt;Trente pochettes d&amp;#39;albums, onzième jour&lt;/h1&gt;
&lt;p&gt;Suite du &lt;a href="/posts/2025/06/01/trente_pochettes_albums_premier_jour.html"&gt;challenge trente pochettes d&amp;#39;albums en trente jours&lt;/a&gt;, pour le onzième jour le thème est &amp;quot;une pochette sans titre&amp;quot;.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album du jour est &amp;quot;Atelier&amp;quot; de Vorare.&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2025/06/11/trente_pochettes_albums_onzieme_jour_attachments/challenge-11.jpg"&gt;&lt;img src="//blog.jkbockstael.be/posts/2025/06/11/trente_pochettes_albums_onzieme_jour_attachments/challenge-11-thumb.png" alt="Atelier"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Vorare est un duo finlandais dont la musique est à l&amp;#39;intersection entre noise, doom, et drone. Ils ont à leur actif depuis 2022 un EP, deux albums, et un split avec Earthflesh.&lt;/p&gt;
&lt;p&gt;&amp;quot;Atelier&amp;quot; est sorti en 2024 de manière indépendante, c&amp;#39;est leur sortie la plus récente qui ne soit pas un split. Selon le groupe tout a été composé en quatre jours dans un atelier délabré caché dans un quartier aisé, au son de la pluie et des bruits de chantier. Les mythes fondateurs sont exactement ça. Toujours est-il que ce dont on est certain c&amp;#39;est qu&amp;#39;il y a comme résultat sept morceaux pour trente-six minutes qui savent articuler la lenteur pesante du doom et des sons caustiques de l&amp;#39;industrial-noise. Le tout est d&amp;#39;une grande cohérence et bénéficie d&amp;#39;un mixage aux petits oignons qui laisse sa place à chaque instrument tout en formant le mur de son que le groupe recherche. Ça pèse de tonnes, c&amp;#39;est étouffant, le chant est intimidant à souhait, ça fait taper du pied et balancer la tête. Parfait pour retrouver son calme après une réunion qui aurait pu être un email.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album est &lt;a href="https://vorare.bandcamp.com/album/atelier"&gt;disponible à l&amp;#39;écoute sur Bandcamp&lt;/a&gt;, commencez par &amp;quot;Boiled Larks&amp;quot; si vous aimez bien Doodseskader ou par &amp;quot;Amber Hum&amp;quot; (mon favori de ce disque) pour de la combustion lente.&lt;/p&gt;
</description>
		<pubDate>Wed, 11 Jun 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/06/11/trente_pochettes_albums_onzieme_jour.html</guid>
	</item>
	<item>
		<title>Trente pochettes d'albums, dixième jour</title>
		<link>https://blog.jkbockstael.be/posts/2025/06/10/trente_pochettes_albums_dixieme_jour.html</link>
		<description>&lt;h1 id="trente-pochettes-dalbums-dixième-jour"&gt;Trente pochettes d&amp;#39;albums, dixième jour&lt;/h1&gt;
&lt;p&gt;Suite du &lt;a href="/posts/2025/06/01/trente_pochettes_albums_premier_jour.html"&gt;challenge trente pochettes d&amp;#39;albums en trente jours&lt;/a&gt;, pour le dixième jour le thème est &amp;quot;une pochette avec de la nourriture ou une boisson&amp;quot;.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album du jour est &amp;quot;Tabula Rasa&amp;quot; de Einstürzende Neubauten.&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2025/06/10/trente_pochettes_albums_dixieme_jour_attachments/challenge-10.jpg"&gt;&lt;img src="//blog.jkbockstael.be/posts/2025/06/10/trente_pochettes_albums_dixieme_jour_attachments/challenge-10-thumb.png" alt="Tabula Rasa"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Einstürzende Neubauten est un groupe allemand formé en 1980 dont la musique est fortement expérimentale, initialement dans la mouvance industrial/noise mais en constante évolution. Ils n&amp;#39;ont cure des structures, des conventions, et même des instruments puisqu&amp;#39;ils utilisent partout des instruments fabriqués par leurs membres à partir de matériel récupéré. Ils sont un ornithorynque de la musique qu&amp;#39;il faut absolument voir sur scène pour prendre la mesure de leur non-conformisme.&lt;/p&gt;
&lt;p&gt;&amp;quot;Tabula Rasa&amp;quot; est sorti en 1993 sur le label Potomak (label propre du groupe) et chez Mute Records. C&amp;#39;est le sixième album du groupe et son nom est assez approprié parce qu&amp;#39;il marque un moment pivot dans la discographie du groupe, qui y délaisse l&amp;#39;agression bruitiste des premiers albums pour y développer des morceaux plus conventionnels (mais pas trop, faut pas déconner), et ça en fait le bon album pour goûter à la fois au côté caustique et au côté suave de leur musiquwe. Ne fut-ce que un morceau comme &amp;quot;Sie&amp;quot; qui accomplit l&amp;#39;exploit d&amp;#39;être une chanson lente et lancinante alors qu&amp;#39;elle est portée par une frénétique percussion sur tuyaux de PVC, écouter &amp;quot;Tabula Rasa&amp;quot; est un must.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album est &lt;a href="https://www.youtube.com/playlist?list=OLAK5uy_ntzP1L1E9aVjXS2Ca3DLItgmrNUJAEzIY"&gt;disponible à l&amp;#39;écoute sur YouTube&lt;/a&gt;, commencez par &amp;quot;Headcleaner&amp;quot; pour la facette caustique, &amp;quot;Blume&amp;quot; pour le diamétralement opposé, &amp;quot;Die Interimsliebenden&amp;quot; ou &amp;quot;12305(te) Nacht&amp;quot; pour quelque chose entre les deux.&lt;/p&gt;
</description>
		<pubDate>Tue, 10 Jun 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/06/10/trente_pochettes_albums_dixieme_jour.html</guid>
	</item>
	<item>
		<title>Trente pochettes d'albums, neuvième jour</title>
		<link>https://blog.jkbockstael.be/posts/2025/06/09/trente_pochettes_albums_neuvieme_jour.html</link>
		<description>&lt;h1 id="trente-pochettes-dalbums-neuvième-jour"&gt;Trente pochettes d&amp;#39;albums, neuvième jour&lt;/h1&gt;
&lt;p&gt;Suite du &lt;a href="/posts/2025/06/01/trente_pochettes_albums_premier_jour.html"&gt;challenge trente pochettes d&amp;#39;albums en trente jours&lt;/a&gt;, pour le neuvième jour le thème est &amp;quot;une pochette qui orange&amp;quot;.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album du jour est &amp;quot;Saturnz Return&amp;quot; de Goldie.&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2025/06/09/trente_pochettes_albums_neuvieme_jour_attachments/challenge-09.jpg"&gt;&lt;img src="//blog.jkbockstael.be/posts/2025/06/09/trente_pochettes_albums_neuvieme_jour_attachments/challenge-09-thumb.png" alt="Saturnz Return"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Goldie est un artiste Britannique pionnier qui fait partie des pionniers des mouvements drum&amp;#39;n&amp;#39;bass, jungle, et breakbeat. À côté de ça il est co-fondateur du label Metalheadz, s&amp;#39;est fait un nom dans le graffiti, et a été acteur dans des broutilles inconnues comme &amp;quot;The World Is Not Enough&amp;quot; ou &amp;quot;Snatch&amp;quot;.&lt;/p&gt;
&lt;p&gt;&amp;quot;Saturnz Return&amp;quot; est sorti en 1998 sur le label FFRR et c&amp;#39;est un monument dans tous les sens du terme. D&amp;#39;abord par sa taille, puisque dans sa version CD il totalise 149 minutes de musique qui commencent par le morceau &amp;quot;Mother&amp;quot; qui dure une heure et implique un orchestre et une chorale ; ensuite par sa richesse musicale. Le morceau d&amp;#39;ouverture &amp;quot;Mother&amp;quot; est un voyage à lui seul, mi-ambient mi-jungle, qui va et vient et nous emmène dans des rythmes qu&amp;#39;on n&amp;#39;avait pas senti venir. Ensuite vient la suite qui est à l&amp;#39;opposé de &lt;a href="/posts/2025/06/03/trente_pochettes_albums_troisieme_jour.html"&gt;ce que je disais de Metrik l&amp;#39;autre jour&lt;/a&gt; : onze morceaux (ou douze puisqu&amp;#39;il y a un caché à la fin du premier disque) qui ne sont clairement ancrés dans les styles de prédilection de Goldie que sont la drum&amp;#39;n&amp;#39;bass, le jungle, et le breakbeat, mais qui sont surtout des morceaux qui explorent intelligemment en puisant dans le jazz et le trip-hop pour former un album qui n&amp;#39;a pas sa place sur un dancefloor mais plutôt dans son salon. De la grande musique qui est du côté de l&amp;#39;art beaucoup plus que de celui du divertissement, avec des guests qui claquent pas mal puisqu&amp;#39;on y croise David Bowie, Noel Gallagher, et KRS One. Bim !&lt;/p&gt;
&lt;p&gt;L&amp;#39;album est &lt;a href="https://www.youtube.com/playlist?list=OLAK5uy_kw6A2dRieYZMFOUx6t2HGSkKpQfUWG18U"&gt;disponible à l&amp;#39;écoute sur YouTube&lt;/a&gt;, commencez par &amp;quot;Crystal Clear&amp;quot; pour du jazzy, &amp;quot;Dragonfly&amp;quot; pour de la jungle aérienne, ou &amp;quot;Fury - The Origin&amp;quot; pour du break sombre.&lt;/p&gt;
</description>
		<pubDate>Mon, 09 Jun 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/06/09/trente_pochettes_albums_neuvieme_jour.html</guid>
	</item>
	<item>
		<title>Trente pochettes d'albums, huitième jour</title>
		<link>https://blog.jkbockstael.be/posts/2025/06/08/trente_pochettes_albums_huitieme_jour.html</link>
		<description>&lt;h1 id="trente-pochettes-dalbums-huitième-jour"&gt;Trente pochettes d&amp;#39;albums, huitième jour&lt;/h1&gt;
&lt;p&gt;Suite du &lt;a href="/posts/2025/06/01/trente_pochettes_albums_premier_jour.html"&gt;challenge trente pochettes d&amp;#39;albums en trente jours&lt;/a&gt;, pour le huitième jour le thème est &amp;quot;une pochette qui comporte un animal&amp;quot;.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album du jour est &amp;quot;Trampled Under Hoof&amp;quot; de Goatsnake.&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2025/06/08/trente_pochettes_albums_huitieme_jour_attachments/challenge-08.jpg"&gt;&lt;img src="//blog.jkbockstael.be/posts/2025/06/08/trente_pochettes_albums_huitieme_jour_attachments/challenge-08-thumb.png" alt="Trampled Under Hoof"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Goatsnake est un groupe de stoner/doom Américain formé suite à la dissolution de The Obsessed. Ils font partie d&amp;#39;une vague de stoner moderne qui a défini un nouveau son qui va de l&amp;#39;avant sans renier pour autant l&amp;#39;influence de Black Sabbath.&lt;/p&gt;
&lt;p&gt;&amp;quot;Trampled Under Hoof&amp;quot; est sorti en 2004 chez Southern Lord après quelques années un peu mouvementées pour le groupe. Sur ce disque on retrouve Pete Stahl au chant, Greg Anderson (de Thorr&amp;#39;s Hammer, Sunn O))), et Burning Witch) à la guitare, Scott Reeder (de The Obsessed et Kyuss) à la basse, et JR Conners (de Cave In) à la batterie sur certains morceaux tandis que d&amp;#39;autres sont joués par Greg Rogers (de The Obsessed). Du beau monde avec de bien beaux CV, rien que ça suffit pour savoir qu&amp;#39;on peut avoir affaire à de la bonne musique. C&amp;#39;est un EP cinq titres d&amp;#39;une demi-heure qui sent bon la moto dans le désert, rappelle Black Sabbath et Kyuss, et devrait plaire aussi à ceux qui aiment Queens of the Stone Age. Simple, efficace, sans superflu.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album est &lt;a href="https://goatsnakesl.bandcamp.com/album/trampled-under-hoof"&gt;disponible à l&amp;#39;écoute sur Bandcamp&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Sun, 08 Jun 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/06/08/trente_pochettes_albums_huitieme_jour.html</guid>
	</item>
	<item>
		<title>Trente pochettes d'albums, septième jour</title>
		<link>https://blog.jkbockstael.be/posts/2025/06/07/trente_pochettes_albums_septieme_jour.html</link>
		<description>&lt;h1 id="trente-pochettes-dalbums-septième-jour"&gt;Trente pochettes d&amp;#39;albums, septième jour&lt;/h1&gt;
&lt;p&gt;Suite du &lt;a href="/posts/2025/06/01/trente_pochettes_albums_premier_jour.html"&gt;challenge trente pochettes d&amp;#39;albums en trente jours&lt;/a&gt;, pour le septième jour le thème est &amp;quot;une pochette qui montre beaucoup de ciel&amp;quot;.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album du jour est &amp;quot;Melody A.M.&amp;quot; de Röyksopp.&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2025/06/07/trente_pochettes_albums_septieme_jour_attachments/challenge-07.jpg"&gt;&lt;img src="//blog.jkbockstael.be/posts/2025/06/07/trente_pochettes_albums_septieme_jour_attachments/challenge-07-thumb.png" alt="Melody A.M."&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Röyksopp est un duo de musiciens Norvégiens actifs dans les styles électroniques downtempo, chill-out, trip-hop, des fois un peu house voire techno. Ils ont sorti dix albums au cours des vingt-cinq dernières années.&lt;/p&gt;
&lt;p&gt;&amp;quot;Melody A.M.&amp;quot;, sorti en 2001 sur le label Wall Of Sound, est le premier album de Röyksopp. Sur dix morceaux on est promenés dans un univers majoritairement trip-hop et downtempo mais pas que ; avec la bonne blague que le single extrait de l&amp;#39;album dont a été fait un clip vidéo pour la promotion, &amp;quot;Poor Leno&amp;quot;, est résolument house en contraste marqué par-rapport au reste. Oh et sur ce morceau (et sur &amp;quot;Remind Me&amp;quot;) on retrouve la douceur absolue de la voix d&amp;#39;Erlend Øye, plus connu pour être la moitié du duo Kings Of Convenience. Rien que ça. En tout Melody A.M. est un bon disque de trip-hop léger et aérien qui se laisse écouter et ré-écouter.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album est &lt;a href="https://www.youtube.com/playlist?list=OLAK5uy_nWbm1n0nx7GV9PMjwqdoF9a5MJuA_JBuI"&gt;disponible à l&amp;#39;écoute sur YouTube&lt;/a&gt;, commencez par &amp;quot;Sparks&amp;quot; si vous aimez Portishead, ou &amp;quot;In Space&amp;quot; si vous aimez la drum&amp;#39;n&amp;#39;bass relax.&lt;/p&gt;
</description>
		<pubDate>Sat, 07 Jun 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/06/07/trente_pochettes_albums_septieme_jour.html</guid>
	</item>
	<item>
		<title>Trente pochettes d'albums, sixième jour</title>
		<link>https://blog.jkbockstael.be/posts/2025/06/06/trente_pochettes_albums_sixieme_jour.html</link>
		<description>&lt;h1 id="trente-pochettes-dalbums-sixième-jour"&gt;Trente pochettes d&amp;#39;albums, sixième jour&lt;/h1&gt;
&lt;p&gt;Suite du &lt;a href="/posts/2025/06/01/trente_pochettes_albums_premier_jour.html"&gt;challenge trente pochettes d&amp;#39;albums en trente jours&lt;/a&gt;, pour le sixième jour le thème est &amp;quot;une pochette dessinée ou illustrée&amp;quot;.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album du jour est &amp;quot;Innervisions&amp;quot; de Stevie Wonder.&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2025/06/06/trente_pochettes_albums_sixieme_jour_attachments/challenge-06.jpg"&gt;&lt;img src="//blog.jkbockstael.be/posts/2025/06/06/trente_pochettes_albums_sixieme_jour_attachments/challenge-06-thumb.png" alt="Innervisions"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Stevie Wonder est un chanteur et musicien Américain, monument du R&amp;amp;B, de la soul et du funk (entre autres selon à qui on pose la question). Sa carrière a commencé au début des années 1960 et il a accumulé depuis pas moins de vingt-trois albums studio.&lt;/p&gt;
&lt;p&gt;&amp;quot;Innervisions&amp;quot; est sorti en 1973 chez Tamla (filiale de Motown) et est le seizième album de Stevie Wonder. Pour une carrière qui n&amp;#39;avait commencé que onze ans plus tôt c&amp;#39;est impressionnant mais ce qui l&amp;#39;est encore plus c&amp;#39;est que c&amp;#39;est loin d&amp;#39;être une énième resucée sans âme ni saveur. Stevie Wonder y poursuit ses expériences avec le synthétiseur TONTO et explore un son qui avec le recul est précurseur de ce qui va suivre dans les scènes R&amp;amp;B et soul, avec la grande cohérence qu&amp;#39;on peut attendre d&amp;#39;un artiste qui compose et joue (presque) tous les instruments présents sur le disque. Comme sur les précédents albums on a droit à des balades romantiques, mais on a aussi des sujets bien plus sérieux et plus sombres que ce qu&amp;#39;on aurait pu attendre de celui qui s&amp;#39;est fait connaître avec du 100% eau de rose ; l&amp;#39;album s&amp;#39;ouvre sur une chanson qui parle de toxicomanie, et deux morceaux plus loin on a droit à une critique brutale du racisme omniprésent à New York à l&amp;#39;époque (avec interludes et enregistrements d&amp;#39;ambiances histoire d&amp;#39;être bien en avance sur son temps). Neuf morceaux qui passent crème comme disent les gens cool.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album est &lt;a href="https://www.youtube.com/playlist?list=OLAK5uy_lhH2tH_BEiKMkDmYqfFQqzNTo7C_qf0FE"&gt;disponible à l&amp;#39;écoute sur YouTube&lt;/a&gt;, commencez par &amp;quot;Higher Ground&amp;quot; si vous êtes fan des Red Hot Chili Peppers.&lt;/p&gt;
</description>
		<pubDate>Fri, 06 Jun 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/06/06/trente_pochettes_albums_sixieme_jour.html</guid>
	</item>
	<item>
		<title>Trente pochettes d'albums, cinquième jour</title>
		<link>https://blog.jkbockstael.be/posts/2025/06/05/trente_pochettes_albums_cinquieme_jour.html</link>
		<description>&lt;h1 id="trente-pochettes-dalbums-cinquième-jour"&gt;Trente pochettes d&amp;#39;albums, cinquième jour&lt;/h1&gt;
&lt;p&gt;Suite du &lt;a href="/posts/2025/06/01/trente_pochettes_albums_premier_jour.html"&gt;challenge trente pochettes d&amp;#39;albums en trente jours&lt;/a&gt;, pour le cinquième jour le thème est &amp;quot;une pochette qui est rouge&amp;quot;.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album du jour est &amp;quot;Sound Patrol&amp;quot; de Zenzile.&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2025/06/05/trente_pochettes_albums_cinquieme_jour_attachments/challenge-05.jpg"&gt;&lt;img src="//blog.jkbockstael.be/posts/2025/06/05/trente_pochettes_albums_cinquieme_jour_attachments/challenge-05-thumb.png" alt="Sound Patrol"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Zenzile est un groupe Français qui évolue sur la scène dub depuis un peu plus de 25 ans avec au passage plusieurs collaborations avec High Tone.&lt;/p&gt;
&lt;p&gt;&amp;quot;Sound Patrol&amp;quot; est sorti en 2001 chez Crash Disques et fait certainement partie des disques qui ont le plus tourné chez moi depuis. Seize morceaux de pur bonheur, un voyage dans une belle diversité de morceaux qui gardent cependant un son caractéristique porté par des guitares aériennes. Une foule d&amp;#39;instruments font le trajet, plusieurs voix nous accompagnent, le tout donne envie de revenir au départ et recommencer. C&amp;#39;est la bande-son d&amp;#39;une après-midi d&amp;#39;été paresseuse comme ça peut être celle d&amp;#39;un retour de soirée sur des routes vides. Du pur bonheur je vous dis.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album est &lt;a href="https://zenzile.bandcamp.com/album/sound-patrol"&gt;disponible à l&amp;#39;écoute sur Bandcamp&lt;/a&gt;, commencez par &amp;quot;Access Denied&amp;quot; si vous aimez les guitares, &amp;quot;Chain Lettah&amp;quot; si vous aimez le reggae, ou &amp;quot;Sampling DNA&amp;quot; pour une touche délicieusement soul.&lt;/p&gt;
</description>
		<pubDate>Thu, 05 Jun 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/06/05/trente_pochettes_albums_cinquieme_jour.html</guid>
	</item>
	<item>
		<title>Trente pochettes d'albums, quatrième jour</title>
		<link>https://blog.jkbockstael.be/posts/2025/06/04/trente_pochettes_albums_quatrieme_jour.html</link>
		<description>&lt;h1 id="trente-pochettes-dalbums-quatrième-jour"&gt;Trente pochettes d&amp;#39;albums, quatrième jour&lt;/h1&gt;
&lt;p&gt;Suite du &lt;a href="/posts/2025/06/01/trente_pochettes_albums_premier_jour.html"&gt;challenge trente pochettes d&amp;#39;albums en trente jours&lt;/a&gt;, pour le quatrième jour le thème est &amp;quot;une pochette avec un véhicule&amp;quot;.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album du jour est &amp;quot;Ah si j&amp;#39;étais grand et beau&amp;quot; de Monsieur Roux.&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2025/06/04/trente_pochettes_albums_quatrieme_jour_attachments/challenge-04.jpg"&gt;&lt;img src="//blog.jkbockstael.be/posts/2025/06/04/trente_pochettes_albums_quatrieme_jour_attachments/challenge-04-thumb.png" alt="Ah si j&amp;#39;étais grand et beau"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Monsieur Roux est un chanteur Français (et par extension son groupe) qui fait de la chanson française légère et insolente mais critique, il a partagé la scène avec Odelaf entre autres.&lt;/p&gt;
&lt;p&gt;&amp;quot;Ah si j&amp;#39;étais grand et beau&amp;quot; est sorti en 2005 sur le label indépendant Atmosphériques et nous offre treize chansons qui se laissent écouter, font sourire, et des fois font réfléchir. La plage titulaire est un concentré de ce que le reste de l&amp;#39;album propose, dans un crescendo de fond et de forme qui est magistralement exécuté dans une économie de moyens. C&amp;#39;est frais, c&amp;#39;est simple, ça ne prétend pas être autre chose, et je trouve que c&amp;#39;est injustement méconnu.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album est &lt;a href="https://monsieurroux1.bandcamp.com/album/lp-ah-si-j-tais-grand-et-beau"&gt;disponible à l&amp;#39;écoute sur Bandcamp&lt;/a&gt;, commencez par &amp;quot;La Poche&amp;quot; ou &amp;quot;Norredine&amp;quot;.&lt;/p&gt;
</description>
		<pubDate>Wed, 04 Jun 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/06/04/trente_pochettes_albums_quatrieme_jour.html</guid>
	</item>
	<item>
		<title>Trente pochettes d'albums, troisième jour</title>
		<link>https://blog.jkbockstael.be/posts/2025/06/03/trente_pochettes_albums_troisieme_jour.html</link>
		<description>&lt;h1 id="trente-pochettes-dalbums-troisième-jour"&gt;Trente pochettes d&amp;#39;albums, troisième jour&lt;/h1&gt;
&lt;p&gt;Suite du &lt;a href="/posts/2025/06/01/trente_pochettes_albums_premier_jour.html"&gt;challenge trente pochettes d&amp;#39;albums en trente jours&lt;/a&gt;, pour le troisième jour le thème est &amp;quot;une pochette avec un design futuriste&amp;quot;.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album du jour est &amp;quot;Ex Machina&amp;quot; de Metrik.&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2025/06/03/trente_pochettes_albums_troisieme_jour_attachments/challenge-03.jpg"&gt;&lt;img src="//blog.jkbockstael.be/posts/2025/06/03/trente_pochettes_albums_troisieme_jour_attachments/challenge-03-thumb.png" alt="Ex Machina"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Metrik est un artiste Britannique qui produit de la drum&amp;#39;n&amp;#39;bass moderne qui peut rappeler celle de Pendulum ou de Sub Focus (on reconnaît d&amp;#39;ailleurs un DJ-set de Sub Focus au fait qu&amp;#39;il comporte beaucoup de morceaux de Metrik, et un de Metrik au fait qu&amp;#39;il comporte beaucoup de morceaux de Sub Focus).&lt;/p&gt;
&lt;p&gt;&amp;quot;Ex Machina&amp;quot; est sorti en 2020 chez Hospital (très bon label qui mérite d&amp;#39;être largement exploré). Sur treize pistes pour 55 minutes on a droit à des bons gros tubes qui ont bien plus leur place en festival que dans un salon, des bons gros &amp;quot;bangers&amp;quot; aux riffs entêtants avec un peu de chant sans que ce soit l&amp;#39;élément central (ceci n&amp;#39;est pas un album de Fred V &amp;amp; Grafix). De la bonne énergie qui donne la pêche à grands coups de mélodies qu&amp;#39;on sifflotera après et par un sound design d&amp;#39;une propreté impeccable.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album est &lt;a href="https://metrikmusic.bandcamp.com/album/ex-machina"&gt;disponible à l&amp;#39;écoute sur Bandcamp&lt;/a&gt;, commencez par &amp;quot;Closer&amp;quot; si vous aimez les guitares ou Pendulum (ou les deux) ou par &amp;quot;Ex Machina&amp;quot; pour des bonnes vibes bien sci-fi.&lt;/p&gt;
</description>
		<pubDate>Tue, 03 Jun 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/06/03/trente_pochettes_albums_troisieme_jour.html</guid>
	</item>
	<item>
		<title>Trente pochettes d'albums, deuxième jour</title>
		<link>https://blog.jkbockstael.be/posts/2025/06/02/trente_pochettes_albums_deuxieme_jour.html</link>
		<description>&lt;h1 id="trente-pochettes-dalbums-deuxième-jour"&gt;Trente pochettes d&amp;#39;albums, deuxième jour&lt;/h1&gt;
&lt;p&gt;Suite du &lt;a href="/posts/2025/06/01/trente_pochettes_albums_premier_jour.html"&gt;challenge trente pochettes d&amp;#39;albums en trente jours&lt;/a&gt;, pour le deuxième jour le thème est &amp;quot;une pochette en noir et blanc&amp;quot;.&lt;/p&gt;
&lt;p&gt;Hier je mentionnais la collaboration de Chelsea Wolfe avec Converge, aujourd&amp;#39;hui l&amp;#39;album du jour est &amp;quot;All We Love We Leave Behind&amp;quot; de Converge justement.&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2025/06/02/trente_pochettes_albums_deuxieme_jour_attachments/challenge-02.jpg"&gt;&lt;img src="//blog.jkbockstael.be/posts/2025/06/02/trente_pochettes_albums_deuxieme_jour_attachments/challenge-02-thumb.png" alt="All We Love We Leave Behind"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Converge est un groupe de metalcore américain fondé par son chanteur Jacob Bannon (qui est également graphiste et créateur des visuels utilisés par le groupe, dont cette pochette-ci). Ils sont pionniers du genre et reconnus pour la richesse artistique de leur musique et leur influence sur beaucoup d&amp;#39;autres groupes. Avec un pied dans le punk hardcore et l&amp;#39;autre dans le heavy metal, la musique de Converge est aggressive et débordante d&amp;#39;énergie.&lt;/p&gt;
&lt;p&gt;&amp;quot;All We Love We Leave Behind&amp;quot; est sorti en 2012 chez Epitaph et je pense que ce disque est le meilleur point d&amp;#39;entrée pour ceux qui seraient intrigués par Converge mais intimidés par la longueur de leur discographie.&lt;/p&gt;
&lt;p&gt;C&amp;#39;est un album qui est plus accessibles que les précédents sur deux aspects : le chant y est beaucoup plus distinct et compréhensible (ne me dites pas que vous avez compris un mot des chansons qui sont sur &amp;quot;Jane Doe&amp;quot; par contre), et la musique y est beaucoup plus &amp;quot;organique&amp;quot; par l&amp;#39;absence de distortions. De la musique d&amp;#39;énervés influencée par le métal mais en guitare claire, oui oui ; d&amp;#39;ailleurs ça donne des riffs qui seraient à leur place sur un album de Mastodon a bien des moments, ce qui n&amp;#39;est pas désagréable du tout. On a des morceaux qui sont aussi rapides et furieux qu&amp;#39;on peut l&amp;#39;attendre de Converge (&amp;quot;Aimless Arrow&amp;quot; ou &amp;quot;Sparrow&amp;#39;s Fall&amp;quot;) mais aussi des morceaux plus lancinants, angoissants, étouffants (&amp;quot;Coral Blue&amp;quot;, le titulaire &amp;quot;All We Love We Leave Behind&amp;quot;, ou l&amp;#39;instrumental &amp;quot;Precipice&amp;quot; qui le précède). La production est impeccable, et Decibel a même conclu que c&amp;#39;était l&amp;#39;album de l&amp;#39;année 2012.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album est &lt;a href="https://convergecult.bandcamp.com/album/all-we-love-we-leave-behind"&gt;disponible à l&amp;#39;écoute sur Bandcamp&lt;/a&gt;, commencez par la plage titulaire &amp;quot;All We Love We Leave Behind&amp;quot; puis &amp;quot;Empty On The Inside&amp;quot; pour ne pas prendre de plein fouet la pleine puissance ballistique de Converge.&lt;/p&gt;
</description>
		<pubDate>Mon, 02 Jun 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/06/02/trente_pochettes_albums_deuxieme_jour.html</guid>
	</item>
	<item>
		<title>Trente pochettes d'albums, premier jour</title>
		<link>https://blog.jkbockstael.be/posts/2025/06/01/trente_pochettes_albums_premier_jour.html</link>
		<description>&lt;h1 id="trente-pochettes-dalbums-premier-jour"&gt;Trente pochettes d&amp;#39;albums, premier jour&lt;/h1&gt;
&lt;p&gt;J&amp;#39;ai vu passer ces derniers jours sur le Fediverse un petit challenge rigolo consistant à partager chaque jour pendant trente jours une pochette d&amp;#39;albums en suivant des instructions qui sont assez relax :&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2025/06/01/trente_pochettes_albums_premier_jour_attachments/challenge-prompt.png"&gt;&lt;img src="//blog.jkbockstael.be/posts/2025/06/01/trente_pochettes_albums_premier_jour_attachments/challenge-prompt-thumb.png" alt="Challenge Prompt"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Le mois de juin compte trente jours, c&amp;#39;est idéal.&lt;/p&gt;
&lt;p&gt;Pour le premier jour le thème est &amp;quot;une pochette sur laquelle figure l&amp;#39;artiste&amp;quot;. L&amp;#39;album du jour est &amp;quot;Pain is Beauty&amp;quot; de Chelsea Wolfe.&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2025/06/01/trente_pochettes_albums_premier_jour_attachments/challenge-01.jpg"&gt;&lt;img src="//blog.jkbockstael.be/posts/2025/06/01/trente_pochettes_albums_premier_jour_attachments/challenge-01-thumb.png" alt="Pain is Beauty"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Chelsea Wolfe est une artiste Américaine qui fait une musique folk teintée de rock gothique et de doom metal. Tout un programme ? Tout un programme ! Elle a collaboré avec Converge et Russian Circles, ça devrait être suffisant pour attiser la curiosité.&lt;/p&gt;
&lt;p&gt;&amp;quot;Pain is Beauty&amp;quot; est sorti chez Sargent House en 2013. Après le folk lo-fi à basse production de &amp;quot;The Grime and the Glow&amp;quot; et les influences drone et doom de &amp;quot;Apokalypsis&amp;quot; on a ici l&amp;#39;arrivée de synthés et de beats qui marquent le début d&amp;#39;une nouvelle ère pour la musique de Chelsea Wolfe.&lt;/p&gt;
&lt;p&gt;Sur douze morceaux pour un total de 55 minutes on est emportés par le chant envoûtant qui étale sa poésie d&amp;#39;une noirceur totale, mais sur une musique qui fait taper du pied. Si on ne prête pas attention aux paroles c&amp;#39;est un bon disque pour se motiver le matin, si on les écoute c&amp;#39;est une bonne bande-son pour un jour pluvieux d&amp;#39;angoisse existentielle.&lt;/p&gt;
&lt;p&gt;Vivement recommandé.&lt;/p&gt;
</description>
		<pubDate>Sun, 01 Jun 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/06/01/trente_pochettes_albums_premier_jour.html</guid>
	</item>
	<item>
		<title>GoToSocial auto-hébergé, deux mois plus tard</title>
		<link>https://blog.jkbockstael.be/posts/2025/06/01/gotosocial_deux_mois.html</link>
		<description>&lt;h1 id="gotosocial-auto-hébergé-deux-mois-plus-tard"&gt;GoToSocial auto-hébergé, deux mois plus tard&lt;/h1&gt;
&lt;p&gt;Début avril &lt;a href="/posts/2025/04/06/migration_de_mastodon_a_gotosocial.html"&gt;je mettais en place ma propre instance GoToSocial&lt;/a&gt; pour prendre en main ma présence sur le Fediverse. Deux mois plus tard le retour d&amp;#39;expérience est très positif.&lt;/p&gt;
&lt;h2 id="migration-du-compte"&gt;Migration du compte&lt;/h2&gt;
&lt;p&gt;La migration du compte s&amp;#39;est bien passée, même si j&amp;#39;ai perdu des abonnements et des abonnés au passage. Le processus se fait en relançant des demandes d&amp;#39;abonnement, donc ce n&amp;#39;est pas si surprenant qu&amp;#39;on en perde quelques-uns dans la bataille ne fut-ce que parce que certains comptes sont peu actifs voire totalement inactifs.&lt;/p&gt;
&lt;p&gt;Considérons ça comme la perte d&amp;#39;une partie qui était inerte de toute façon.&lt;/p&gt;
&lt;h2 id="gestion-du-cache"&gt;Gestion du cache&lt;/h2&gt;
&lt;p&gt;Dans mes notes d&amp;#39;installation je disais ne pas toucher à la configuration du cache des médias puisque je n&amp;#39;avais à ce stade aucune idée du volume qui allait se présenter. Depuis j&amp;#39;ai changé ces paramètres pour garder l&amp;#39;utilisation du disque sur le serveur sous les 60% (sur un total de 50 Go).&lt;/p&gt;
&lt;p&gt;Ma configuration actuelle pour le cache des médias est :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-yaml"&gt;media-remote-cache-days: 2
media-cleanup-from: &amp;quot;00:00&amp;quot;
media-cleanup-every: &amp;quot;8h&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Trois fois par jour (à 8h, 16h, et minuit) on élimine du cache des médias distants les éléments qui datent de plus de deux jours. Ça marche bien puisque je suis seul sur cette instance et il m&amp;#39;est très rare de remonter ma timeline au-delà de la veille.&lt;/p&gt;
&lt;h2 id="client-web"&gt;Client Web&lt;/h2&gt;
&lt;p&gt;Je mentionnais avoir essayé Pinafore et lui reprocher l&amp;#39;absence de paramètre pour la langue des posts. J&amp;#39;écris en français et en anglais donc j&amp;#39;avais besoin d&amp;#39;un client Web qui soit capable de l&amp;#39;indiquer au cas par cas.&lt;/p&gt;
&lt;p&gt;J&amp;#39;ai opté pour &lt;a href="https://github.com/cheeaun/phanpy"&gt;Phanpy&lt;/a&gt;, qui est vraiment bien fait et a comme Pinafore l&amp;#39;avantage d&amp;#39;être une application statique qui conserve toutes ses données dans le navigateur. On peut donc très facilement l&amp;#39;héberger soi-même, ou l&amp;#39;utiliser en ligne à &lt;a href="https://phanpy.social/"&gt;phanpy.social&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="en-bref"&gt;En bref&lt;/h2&gt;
&lt;p&gt;L&amp;#39;expérience est très positive jusqu&amp;#39;ici et je suis assez content de pouvoir prendre en main un aspect de plus de ma vie en ligne. On est loin des histoires d&amp;#39;horreurs que racontent ceux qui auto-hébergent du Mastodon, bravo à l&amp;#39;équipe de développement de GoToSocial, et au niveau des coûts impliqués on est bien en-dessous de l&amp;#39;équivalent d&amp;#39;une pizza par mois donc c&amp;#39;est tout à fait abordable.&lt;/p&gt;
&lt;p&gt;Ça va donc tenir longtemps.&lt;/p&gt;
</description>
		<pubDate>Sun, 01 Jun 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/06/01/gotosocial_deux_mois.html</guid>
	</item>
	<item>
		<title>Impressions : The Flayed Man</title>
		<link>https://blog.jkbockstael.be/posts/2025/04/23/impressions_the_flayed_man.html</link>
		<description>&lt;h1 id="impressions--the-flayed-man"&gt;Impressions : The Flayed Man&lt;/h1&gt;
&lt;p&gt;Voici ce que j&amp;#39;ai écrit sur Steam à propos de &lt;a href="https://store.steampowered.com/app/3471670/The_Flayed_Man/"&gt;The Flayed Man&lt;/a&gt; :&lt;/p&gt;
&lt;p&gt;The Flayed Man est un jeu point-and-click dans l&amp;#39;esprit de pas mal de jeux de chez Sierra ou LucasArts des années 1990, avec un graphisme qui rappelle aussi cette époque.&lt;/p&gt;
&lt;p&gt;C&amp;#39;est une histoire de purgatoire. Le joueur incarne un homme dépecé privé de parole et n&amp;#39;ayant aucune idée de qui il est ou ce qu&amp;#39;il a fait. Pour s&amp;#39;en sortir il faut résoudre quelques énigmes plutôt simples (disposant d&amp;#39;indices optionnels si on le souhaite) et juger d&amp;#39;autres âmes sur leurs actes. C&amp;#39;est une histoire d&amp;#39;horreur baignée dans le sang mais sans le moindre jump-scare, ce qui est toujours appréciable.&lt;/p&gt;
&lt;p&gt;Le jeu est plutôt court, il faut compter une demi-heure pour arriver au bout. Il y a plusieurs fins possibles, selon les choix qu&amp;#39;on fait en cours de partie, ce qui donne une certaine rejouabilité. Des achievements viennent compléter cette rejouabilité.&lt;/p&gt;
&lt;p&gt;Là où ce jeu brille c&amp;#39;est par son atmosphère et son écriture, qui elles aussi ramènent aux années 1990 en rappellant des monuments de l&amp;#39;horreurs tels que Hellraiser. Le graphisme en basse résolution laisse juste assez de place à l&amp;#39;imagination, le design général colle parfaitement à l&amp;#39;histoire. La musique est aussi rétro qu&amp;#39;on pourrait s&amp;#39;y attendre, atmosphérique sans trop de cliché. Le déroulement de l&amp;#39;histoire se fait de main de maître sans exposition au pied de biche, c&amp;#39;est de la belle écriture.&lt;/p&gt;
&lt;p&gt;C&amp;#39;est une expérience courte mais très bien faite, qui me rend assez curieux de voir ce que ses développeurs vont nous préparer comme prochain titre. En tout cas ça fait plaisir de voir un hommage à l&amp;#39;âge d&amp;#39;or du point-and-click d&amp;#39;horreur executé avec autant de brio.&lt;/p&gt;
&lt;p&gt;Et pour ne rien gâcher c&amp;#39;est gratuit, donc n&amp;#39;hésitez pas un instant.&lt;/p&gt;
</description>
		<pubDate>Wed, 23 Apr 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/04/23/impressions_the_flayed_man.html</guid>
	</item>
	<item>
		<title>Impressions : The Children of Clay</title>
		<link>https://blog.jkbockstael.be/posts/2025/04/14/impressions_the_children_of_clay.html</link>
		<description>&lt;h1 id="impressions--the-children-of-clay"&gt;Impressions : The Children of Clay&lt;/h1&gt;
&lt;p&gt;Voici ce que j&amp;#39;ai écrit sur Steam à propos de &lt;a href="https://store.steampowered.com/app/3478700/The_Children_of_Clay/"&gt;The Children of Clay&lt;/a&gt; :&lt;/p&gt;
&lt;p&gt;Beaucoup de jeux essaient de faire de l&amp;#39;horreur mais en se reposant sur des sursauts &amp;quot;jump-scare&amp;quot; parce que c&amp;#39;est facile, ça marche, ça installe de l&amp;#39;anxiété et ça fait des vues chez les streamers. Ce n&amp;#39;est pas le cas de ce jeu-ci.&lt;/p&gt;
&lt;p&gt;The Children of Clay est un de ces jeux d&amp;#39;horreur qui savent que ce n&amp;#39;est pas le sursaut qui compte mais l&amp;#39;inquiétude, que l&amp;#39;horreur n&amp;#39;est pas une question de choc mais une question de pression. L&amp;#39;exécution est impeccable, il y a exactement ZÉRO jump-scare mais l&amp;#39;atmosphère se fait de plus en plus étouffante sans qu&amp;#39;on sache vraiment pourquoi.&lt;/p&gt;
&lt;p&gt;Le jeu vous place à un bureau, à étudier une figurine d&amp;#39;argile. Voilà, débrouillez-vous. Vous disposez de quelques objets sur le bureau pour vous aider, en particulier des livres de référence. Observez, tournez, notez, cherchez… il y a bien quelque chose à savoir sur cet objet. Tout se passe au rythme du joueur, on a le temps.&lt;/p&gt;
&lt;p&gt;Il est plutôt court mais ce n&amp;#39;est pas un tort, et ça se comprend quand on lit qu&amp;#39;il a été créé dans le cadre d&amp;#39;un GameJam. Pas trop, pas trop peu.&lt;/p&gt;
&lt;p&gt;Une petite pépite issue d&amp;#39;un GameJam lointain offerte à prix zéro et recommandée à tous les amateurs d&amp;#39;ambiances lovecraftiennes.&lt;/p&gt;
</description>
		<pubDate>Mon, 14 Apr 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/04/14/impressions_the_children_of_clay.html</guid>
	</item>
	<item>
		<title>Impressions : Cobble: The Stone Forager</title>
		<link>https://blog.jkbockstael.be/posts/2025/04/11/impressions_cobble_the_stone_forager.html</link>
		<description>&lt;h1 id="impressions--cobble-the-stone-forager"&gt;Impressions : Cobble: The Stone Forager&lt;/h1&gt;
&lt;p&gt;Voici ce que j&amp;#39;ai écrit sur Steam à propos de &lt;a href="https://store.steampowered.com/app/3386700/Cobble_The_Stone_Forager/"&gt;Cobble: The Stone Forager&lt;/a&gt; :&lt;/p&gt;
&lt;p&gt;Soyons bien clairs sur un point essentiel : si c&amp;#39;est distribué par &amp;quot;DigiPen Institute of Technology&amp;quot; c&amp;#39;est qu&amp;#39;il s&amp;#39;agit d&amp;#39;un projet réalisé par des étudiants. C&amp;#39;est un point à garder en tête quand on évalue ces jeux.&lt;/p&gt;
&lt;p&gt;Donc, Cobble.&lt;/p&gt;
&lt;p&gt;Niveau contexte / prémisse / prétexte c&amp;#39;est assez classique : des gens s&amp;#39;échouent sur un petit archipel et ont besoin d&amp;#39;un coup de pouce pour se remettre sur pied. Ce coup de pouce est apporté par le joueur qui incarne un… golem de pierre couvert de mousse et gentil ? &amp;quot;Le château dans le ciel&amp;quot; ? Difficile de ne pas y penser.&lt;/p&gt;
&lt;p&gt;Niveau ambiance c&amp;#39;est très JRPG, ça rappelle un peu les premiers Zelda ce qui est un point positif. Look pixel-art rétro bien lisible, on apprécie.&lt;/p&gt;
&lt;p&gt;Niveau gameplay c&amp;#39;est de la pure collecte de ressources, il n&amp;#39;y a aucun combat ni dialogue ni autre mécanisme. Des naufragés vont demander d&amp;#39;aller collecter des choses dans la nature, à certains endroits il y a des chantiers qui nécessitent certaines ressources pour construire un accès vers une autre île, si on cherche bien il y a une quête isolée quelque part. Bref, c&amp;#39;est du fetch-quest.&lt;/p&gt;
&lt;p&gt;Le tout est plutôt court, je l&amp;#39;ai complété en 35 minutes. Par contre c&amp;#39;était 35 minutes plutôt sympathiques, donc jetez-y un œil à l&amp;#39;occasion. C&amp;#39;est gratuit, il n&amp;#39;y a rien à perdre si ce n&amp;#39;est un peu de temps qu&amp;#39;on aurait passé à scroller des YouTube Shorts de toute manière.&lt;/p&gt;
</description>
		<pubDate>Fri, 11 Apr 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/04/11/impressions_cobble_the_stone_forager.html</guid>
	</item>
	<item>
		<title>CSS Naked Day</title>
		<link>https://blog.jkbockstael.be/posts/2025/04/09/css_naked_day.html</link>
		<description>&lt;h1 id="css-naked-day"&gt;CSS Naked Day&lt;/h1&gt;
&lt;p&gt;Nous sommes le 9 avril, le &amp;quot;CSS Naked Day&amp;quot;, donc il n&amp;#39;y a pas de CSS sur le site aujourd&amp;#39;hui.&lt;/p&gt;
&lt;p&gt;J&amp;#39;avoue, j&amp;#39;avais oublié. C&amp;#39;est &lt;a href="https://chagratt.site/informatique/2025/%C3%A0-pwal-les-css/"&gt;un post&lt;/a&gt; dans mes flux RSS qui me l&amp;#39;a rappellé. Je ferai mieux l&amp;#39;année prochaine. Merci Chagratt !&lt;/p&gt;
&lt;p&gt;Le principe du &lt;a href="https://css-naked-day.org/"&gt;CSS Naked Day&lt;/a&gt; est de désactiver toute mise en forme CSS sur son site pendant une journée (internationale donc de bien plus que 24 heures). Pourquoi ? Pourquoi pas ! Tout simplement pour promouvoir l&amp;#39;utilisation des standards du Web au travers de cet exercice de contrôle : si une page utilise les bons éléments sémantiques HTML et amène son contenu dans le bon ordre, elle est parfaitement utilisable avec la mise en forme qu&amp;#39;applique le navigateur (mise en forme qui peut être totalement absente dans le cas des navigateurs en mode texte, d&amp;#39;ailleurs). C&amp;#39;est à la fois un test, une sensibilisation, et un petit quelque chose rigolo. Donc pourquoi pas.&lt;/p&gt;
&lt;p&gt;Dans mon cas c&amp;#39;est un peu facile : ce site est conçu dès le départ pour fonctionner sans CSS, ma sensibilisation est faite.&lt;/p&gt;
&lt;p&gt;À vous, maintenant.&lt;/p&gt;
</description>
		<pubDate>Wed, 09 Apr 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/04/09/css_naked_day.html</guid>
	</item>
	<item>
		<title>Bloguidien : domotique</title>
		<link>https://blog.jkbockstael.be/posts/2025/04/08/bloguidien_domotique.html</link>
		<description>&lt;h1 id="bloguidien--domotique"&gt;Bloguidien : domotique&lt;/h1&gt;
&lt;p&gt;Le sujet &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt; du jour est : &amp;quot;Dans quelle mesure ton habitation est équipée en domotique ?&amp;quot;&lt;/p&gt;
&lt;p&gt;Aucune.&lt;/p&gt;
&lt;p&gt;Il faut bien avouer que la domotique peut avoir des aspects attirants. L&amp;#39;idée d&amp;#39;avoir une maison partiellement automatisée peut être séduisante. Par exemple j&amp;#39;aimerais bien que l&amp;#39;éclairage s&amp;#39;allume progressivement le soir au fur et à mesure que le soleil se couche, ou que des stores occultent automatiquement les fenêtres les jours de grand soleil et de hautes températures. Et qui n&amp;#39;a pas rêvé de se reveiller avec l&amp;#39;odeur du café préparé automatiquement à la bonne heure ?&lt;/p&gt;
&lt;p&gt;Le problème c&amp;#39;est que je suis un professionnel de l&amp;#39;informatique, plus particulièrement du développement de logiciels. Comme beaucoup de mes collègues, mon métier implique de mettre les mains dans toutes sortes de systèmes qui présentent toutes sortes de défauts et défaillances. Combiné avec une connaissance directe des problèmes au niveau de la gestion des projets informatiques, ça nous donne une vision horriblement claire d&amp;#39;à quel point un système informatique peut être mal fait. Nous savons que tout est bancal, nous aimons nous appeler &amp;quot;software engineer&amp;quot; mais c&amp;#39;est extrêmement rare que des logiciels soient développés avec le genre de rigeur et de méthode qu&amp;#39;on attend d&amp;#39;un ingénieur. Bref, nous savons à quel point c&amp;#39;est la merde (si vous me passez le jargon technique) et de ce fait beaucoup d&amp;#39;entre-nous ont une grande méfiance vis-à-vis des logiciels en général et de ceux qui pilotent du matériel en particulier. J&amp;#39;en fais partie.&lt;/p&gt;
&lt;p&gt;Ce qui n&amp;#39;aide pas c&amp;#39;est aussi que beaucoup des systèmes proposés pour de la domotique sont propriétaires. Pas mal de contrôleurs ne communiquent qu&amp;#39;avec des protocoles fermés et ne fonctionnent donc qu&amp;#39;entre eux, ce qui force à ne s&amp;#39;équiper qu&amp;#39;auprès d&amp;#39;un seul fournisseur et donc d&amp;#39;être à la merci de sa politique tarifaire et de son catalogue. Et que se passe-t-il quand la gamme qu&amp;#39;on utilise est retirée du catalogue, ou que le fournisseur dépose le bilan ou pivote vers une autre activité ? On se retrouve avec autant de briques inutilisables, ou au moins irremplaçables donc vouées à poser des problèmes.&lt;/p&gt;
&lt;p&gt;C&amp;#39;est encore pire quand le système dépend d&amp;#39;un service cloud parce que tout doit être &amp;quot;connecté&amp;quot; pour être cool de nos jours. Que se passe-t-il quand la connexion à Internet tombe ? Ou quand le service s&amp;#39;arrête ? Des histoires d&amp;#39;horreurs sur ce fil-là on en a déjà eu via des pannes de Nest ou la mort de startups surévaluées, il ne faut pas chercher loin ou longtemps.&lt;/p&gt;
&lt;p&gt;Voilà pourquoi quand on me pose la question je dirige vers la gamme proposée par IKEA. Oui. Leurs machins communiquent en ZigBee, ont des piles donc survivent aux coupures de courant, et surtout ne communiquent jamais avec l&amp;#39;extérieur. IKEA propose une application mobile pour la domotique, mais elle ne fonctionne qu&amp;#39;en LAN. Il y a aussi les initiatives libres, comme Home Assistant, qui permettent dans une certaine mesure de faire abstraction des incompatibilités et de reprendre le contrôle sur ses systèmes domotiques. C&amp;#39;est bien, mais ça reste quand même un exercice coûteux en temps et en argent qui rajoute des modes de défaillance possibles là où les choses juste-marchaient. Donc non, pas de ça chez moi.&lt;/p&gt;
&lt;p&gt;En vrai, à strictement parler, j&amp;#39;ai un élément domotique chez moi : le thermostat du chauffage. Pas besoin d&amp;#39;aller à la chaudière, j&amp;#39;ai un contrôleur dans le salon qui me permet de la régler et même de la programmer. Wow, high-tech. Ne manque qu&amp;#39;un chatbot dedans et on est refaits.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ce post fait partie d&amp;#39;une &lt;a href="/tags/bloguidien/"&gt;série&lt;/a&gt; dans le cadre du &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt;, une inspiration à l&amp;#39;écriture quotidienne à l&amp;#39;initiative de &lt;a href="https://lord.re"&gt;Lord&lt;/a&gt; et &lt;a href="https://dryusdan.space/"&gt;Dryusdan&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Tue, 08 Apr 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/04/08/bloguidien_domotique.html</guid>
	</item>
	<item>
		<title>Migration depuis Mastodon vers GoToSocial auto-hébergé (en split-domain)</title>
		<link>https://blog.jkbockstael.be/posts/2025/04/06/migration_de_mastodon_a_gotosocial.html</link>
		<description>&lt;h1 id="migration-depuis-mastodon-vers-gotosocial-auto-hébergé-en-split-domain"&gt;Migration depuis Mastodon vers GoToSocial auto-hébergé (en split-domain)&lt;/h1&gt;
&lt;p&gt;Cette semaine j&amp;#39;ai installé ma propre instance GoToSocial pour avoir le contrôle total sur ma présence sur le Fediverse.&lt;/p&gt;
&lt;p&gt;J&amp;#39;ai rejoint le Fediverse il y a huit ans, le 5 avril 2017. C&amp;#39;était sur &lt;code&gt;octodon.social&lt;/code&gt;, une instance Mastodon lancée deux jours auparavant par cette personne fascinante qu&amp;#39;est &lt;a href="https://a.void.dog/"&gt;Alice&lt;/a&gt;. Je ne savais pas trop à quoi m&amp;#39;attendre et j&amp;#39;y ai trouvé une espèce de revival du Twitter d&amp;#39;avant les influenceurs, par et pour toutes sortes de nerds et de weirdos, et sans trop voir le temps passer un jour est arrivée la mauvaise nouvelle : au jour de ses huit ans &lt;code&gt;octodon.social&lt;/code&gt; allait fermer ses portes définitivement.&lt;/p&gt;
&lt;p&gt;Il me fallait donc déménager vers une autre instance, et tant qu&amp;#39;à faire pourquoi pas ne pas héberger moi-même quelque chose qui soit mon coin perso du Fediverse et qui ne se dérobera pas sous mes pieds ? J&amp;#39;ai donc opté pour &lt;a href="https://gotosocial.org/"&gt;GoToSocial&lt;/a&gt; et voici comment j&amp;#39;ai procédé pour le mettre en place :&lt;/p&gt;
&lt;h2 id="préparation"&gt;Préparation&lt;/h2&gt;
&lt;p&gt;C&amp;#39;est une instance pour moi uniquement, donc le domaine &lt;code&gt;jkbockstael.be&lt;/code&gt; est tout indiqué. Le protocole ActivityPub permet le &amp;quot;split-domain&amp;quot;, où le domaine d&amp;#39;un compte est différent du domaine sur lequel tourne le serveur qui gère ce compte. Concrètement ça me permet d&amp;#39;avoir le compte &lt;code&gt;jkb@jkbockstael.be&lt;/code&gt; alors qu&amp;#39;il y a déjà un site Web à la racine du domaine &lt;code&gt;jkbockstael.be&lt;/code&gt;. Le serveur utilisera le sous-domaine &lt;code&gt;gotosocial.jkbockstael.be&lt;/code&gt; qui est un &lt;code&gt;CNAME&lt;/code&gt; vers &lt;code&gt;jkbockstael.be&lt;/code&gt; puisqu&amp;#39;il n&amp;#39;y a pas de raison de le faire tourner ailleurs que mes autres machins Web.&lt;/p&gt;
&lt;p&gt;Parenthèse serveur au passage pour se faire une idée de ce dont on dispose comme muscle : c&amp;#39;est un serveur virtuel que j&amp;#39;ai gonflé pour l&amp;#39;occasion afin d&amp;#39;avoir 1 CPU, 2 Go de RAM, et 50 Go d&amp;#39;espace disque. Pas exactement un monstre, moins cher qu&amp;#39;un menu au McDo, héberge déjà tout le reste.&lt;/p&gt;
&lt;p&gt;ActivityPub se fait en HTTPS, et il y a déjà un certificat SSL wildcard pour &lt;code&gt;*.jkbockstael.be&lt;/code&gt; via &lt;a href="https://letsencrypt.org/"&gt;Let&amp;#39;s Encrypt&lt;/a&gt;. Rien à faire de ce côté-là. Comme GoToSocial tournera sur un serveur où Apache écoute déjà sur les ports 80 (HTTP) et 443 (HTTPS), il sera accessible au-travers d&amp;#39;un proxy. C&amp;#39;est ce proxy qui se chargera de la couche SSL.&lt;/p&gt;
&lt;p&gt;Sur Octodon on va dans &amp;quot;Preferences&amp;quot; puis &amp;quot;Import and export&amp;quot; pour y obtenir son archive. Ce qui nous intéresse surtout c&amp;#39;est :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Les comptes suivis, les comptes bloqués, et les bookmarks de posts&lt;/li&gt;
&lt;li&gt;L&amp;#39;archive de tous les posts publics ou non, et des médias qui vont avec&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Les comptes qui me suivent seront pris en charge par le mécanisme de migration, je n&amp;#39;ai pas à m&amp;#39;en soucier.&lt;/p&gt;
&lt;h2 id="installation-de-gotosocial"&gt;Installation de GoToSocial&lt;/h2&gt;
&lt;p&gt;L&amp;#39;installation se fera dans &lt;code&gt;/var/www/gotosocial.jkbockstael.be&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;GoToSocial est distribué en binaire exécutable, ça simplifie pas mal le processus d&amp;#39;installation :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;sudo mkdir -p /var/www/gotosocial.jkbockstael.be
cd /var/www/gotosocial.jkbockstael.be/
sudo wget https://github.com/superseriousbusiness/gotosocial/releases/download/v0.18.3/gotosocial_0.18.3_linux_amd64.tar.gz
sudo tar -xzf gotosocial_0.18.3_linux_amd64.tar.gz
sudo rm gotosocial_0.18.3_linux_amd64.tar.gz
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;On va utiliser le disque du serveur comme espace pour le cache et les médias locaux, donc on crée un répertoire sur place :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;sudo mkdir storage
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;On peut maintenant passer à la configuration.&lt;/p&gt;
&lt;h2 id="configuration"&gt;Configuration&lt;/h2&gt;
&lt;p&gt;Un fichier de configuration complet est fourni comme base de travail, on le copie et l&amp;#39;édite :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;sudo cp example/config.yaml config.yaml
sudoedit config.yaml
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Seules quelques valeurs dévient de la configuration par défaut :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-yaml"&gt;host: &amp;quot;gotosocial.jkbockstael.be&amp;quot;
# On est derrière un proxy, qui tourne sur la même machine
bind-address: &amp;quot;localhost&amp;quot;
port: 8080
# SQLite comme base de données, dans le répertoire courant
db-type: &amp;quot;sqlite&amp;quot;
db-address: &amp;quot;sqlite.db&amp;quot;
# Le répertoire de médias et cache créé précédemment
storage-local-base-path: &amp;quot;/var/www/gotosocial.jkbockstael.be/storage&amp;quot;
# C&amp;#39;est le proxy qui se charge du SSL, pas GoToSocial
letsencrypt-enabled: false
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Il y a une palanquée de paramètres en plus de ceux-ci. Leur ajustement se fera (ou pas) sur la durée, quand l&amp;#39;usage prolongé aura clarifié les idées autour de ce qui devrait changer ou pas.&lt;/p&gt;
&lt;p&gt;Les paramètres d&amp;#39;invalidation du cache des médias, par exemple, dépendent des contraintes d&amp;#39;espace mais surtout du rythme auquel ces médias s&amp;#39;accumulent donc du volume d&amp;#39;activité fédérée. Difficile de deviner d&amp;#39;avance quel serait le &amp;quot;sweet spot&amp;quot; donc on n&amp;#39;y touche pas dans l&amp;#39;immédiat.&lt;/p&gt;
&lt;h2 id="reverse-proxy"&gt;Reverse proxy&lt;/h2&gt;
&lt;p&gt;GoToSocial peut prendre en charge les requêtes HTTP, mais sur ce serveur il y a déjà Apache qui prend les ports 80 et 443 pour d&amp;#39;autres services (site web, blog, FreshRSS, WebDAV) donc on va le configurer en reverse proxy pour le sous-domaine &lt;code&gt;gotosocial.jkbockstael.be&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Avant tout, s&amp;#39;assurer que tous les modules Apache requis sont bien actifs. En particulier on va avoir besoin de pouvoir prendre des requêtes WebSocket puisque certains clients ouvrent un WebSocket pour rafraîchir le flux en direct.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;sudo a2enmod proxy_http ssl headers rewrite proxy proxy_http proxy_wstunnel
sudo systemctl restart apache2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;On peut à présent créer et éditer une nouvelle config VHost pour Apache :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;sudoedit /etc/apache2/sites-available/gotosocial.jkbockstael.be.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dans cette configuration :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;tout se passe en HTTPS&lt;/li&gt;
&lt;li&gt;c&amp;#39;est le proxy qui prend en charge le SSL&lt;/li&gt;
&lt;li&gt;tout part vers GoToSocial qui écoute en HTTP sur le port &lt;code&gt;8080&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;les connexions WebSocket sont prises en charge&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class="language-apache"&gt;&amp;lt;VirtualHost *:80 &amp;gt;
  ServerName gotosocial.jkbockstael.be
&amp;lt;/VirtualHost&amp;gt;

&amp;lt;VirtualHost *:443&amp;gt;
  ServerName gotosocial.jkbockstael.be

  SSLEngine On
  SSLCertificateFile /etc/letsencrypt/live/jkbockstael.be/fullchain.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/jkbockstael.be/privkey.pem
  
  ProxyPreserveHost On
  ProxyPass / http://127.0.0.1:8080/ upgrade=websocket
  ProxyPassReverse / http://127.0.0.1:8080/

  RequestHeader set &amp;quot;X-Forwarded-Proto&amp;quot; expr=https

  RewriteEngine On
  RewriteCond %{HTTP:Upgrade} =websocket [NC]
  RewriteRule &amp;quot;^/ws/(.*)&amp;quot; &amp;quot;wss://127.0.0.1:8080/ws/$1&amp;quot; [P,L]

  CustomLog /var/log/apache2/gotosocial.jkbockstael.be_access.log combined
  ErrorLog /var/log/apache2/gotosocial.jkbockstael.be_error.log
&amp;lt;/VirtualHost&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Reste à l&amp;#39;activer :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;sudo a2ensite gotosocial.jkbockstael.be.conf
sudo systemctl reload apache2
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="split-domain"&gt;Split-domain&lt;/h2&gt;
&lt;p&gt;Je pourrais très bien me contenter de ça et utiliser le sous-domaine &lt;code&gt;gotosocial.jkbockstael.be&lt;/code&gt;, mais le protocole ActivityPub permet le &amp;quot;split-domain&amp;quot;, c&amp;#39;est-à-dire de présenter au monde un domaine différent de celui sur lequel le serveur tourne. Concrètement ça se fait en distinguant dans les messages le &lt;code&gt;host domain&lt;/code&gt; où joindre le serveur du &lt;code&gt;account domain&lt;/code&gt; à indiquer après le nom de l&amp;#39;utilisateur.&lt;/p&gt;
&lt;p&gt;Dans mon cas je veux que mon &lt;code&gt;account domain&lt;/code&gt; soit &lt;code&gt;jkbockstael.be&lt;/code&gt; tout court afin que mon identifiant sur le Fediverse soit identique à mon adresse e-mail : &lt;code&gt;jkb@jkbockstael.be&lt;/code&gt;. Je trouve ça cool, et puis c&amp;#39;est plus court que &lt;code&gt;jkb@gotosocial.jkbockstael.be&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Donc on édite la config de GoToSocial :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;sudoedit config.yaml
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Et on y change un seul paramètre :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-yaml"&gt;account-domain: &amp;quot;jkbockstael.be&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Les autres instances vont utiliser le protocole WebFinger pour obtenir des informations sur mon compte, il faut donc que sur le domaine &lt;code&gt;jkbockstael.be&lt;/code&gt; on soit prêt à les traiter. Ça va passer par des redirections qu&amp;#39;on va définir dans le VHost correspondant :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;sudoedit /etc/apache2/sites-available/www.jkbockstael.be.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;On ajoute trois directives &lt;code&gt;RewriteRule&lt;/code&gt; qui transmettent les paramètres de requêtes :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-apache"&gt;RewriteEngine On
RewriteRule &amp;quot;\.well-known/webfinger&amp;quot; &amp;quot;https://gotosocial.jkbockstael.be/.well-known/webfinger&amp;quot; [R=301,L,QSA]
RewriteRule &amp;quot;\.well-known/host-meta&amp;quot; &amp;quot;https://gotosocial.jkbockstael.be/.well-known/host-meta&amp;quot; [R=301,L,QSA]
RewriteRule &amp;quot;\.well-known/nodeinfo&amp;quot; &amp;quot;https://gotosocial.jkbockstael.be/.well-known/nodeinfo&amp;quot; [R=301,L,QSA]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Et on rafraîchit Apache pour les prendre en compte :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;sudo systemctl reload apache2
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="service-systemd"&gt;Service systemd&lt;/h2&gt;
&lt;p&gt;Maintenant qu&amp;#39;on a configuré le serveur et le reverse proxy il reste à ajouter une définition de service pour que &lt;code&gt;systemd&lt;/code&gt; le lance automatiquement au démarrage. Ça commence par la création d&amp;#39;un utilisateur système dédié, comme il se doit :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;sudo useradd --system gotosocial
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ça va en même temps lui créer un groupe dédié. On peut maintenant réaffecter la propriété de tous le répertoire de travail du serveur GoToSocial :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;sudo chown -R gotosocial:gotosocial /var/www/gotosocial.jkbockstael.be
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;On a une base de travail pour le fichier de définition de service dans les exemples fournis par GoToSocial :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;sudo cp example/gotosocial.service /etc/systemd/system/
sudoedit /etc/systemd/system/gotosocial.service
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Seules deux directives y sont à changer :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-ini"&gt;ExecStart=/var/www/gotosocial.jkbockstael.be/gotosocial --config-path config.yaml server start
WorkingDirectory=/var/www/gotosocial.jkbockstael.be
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="activation-du-service"&gt;Activation du service&lt;/h2&gt;
&lt;p&gt;On peut maintenant activer ce service, ce qui va dans les faits démarrer immédiatement le serveur GoToSocial :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;sudo systemctl enable --now gotosocial.service
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Et voilà j&amp;#39;ai ma propre instance sur le Fediverse !&lt;/p&gt;
&lt;h2 id="création-du-compte-administrateur"&gt;Création du compte administrateur&lt;/h2&gt;
&lt;p&gt;Bon par contre une instance sans personne dessus ça ne rime à rien, donc on va créer un compte utilisateur et le promouvoir comme administrateur, au moyen de l&amp;#39;interface ligne de commande de GoToSocial :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;sudo -u gotosocial ./gotosocial --config-path config.yaml admin account create --username jkb --email jkb@jkbockstael.be --password &amp;#39;SuperMotDePasse&amp;#39;
sudo -u gotosocial ./gotosocial --config-path config.yaml admin account promote --username jkb
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ceci conclut les opérations en ligne de commande sur le serveur. Le reste va se dérouler dans un navigateur Web ou sur un poste de travail.&lt;/p&gt;
&lt;h2 id="profil-de-lutilisateur"&gt;Profil de l&amp;#39;utilisateur&lt;/h2&gt;
&lt;p&gt;On peut maintenant s&amp;#39;identifier avec ce compte fraichement créé en navigant à &lt;code&gt;https://gotosocial.jkbockstael.be/settings&lt;/code&gt;, où on a accès aux paramètres du compte utilisateur ainsi qu&amp;#39;aux paramètres de l&amp;#39;instance (puisque c&amp;#39;est un administrateur).&lt;/p&gt;
&lt;p&gt;On en profite pour passer dans &lt;code&gt;Administration &amp;gt; Instance&lt;/code&gt; pour donner un nom et une description à l&amp;#39;instance, qui apparaîtront à l&amp;#39;adresse &lt;code&gt;https://gotosocial.jkbockstael.be&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="blocklists"&gt;Blocklists&lt;/h2&gt;
&lt;p&gt;Dans cette interface de configuration, sous &lt;code&gt;Moderation &amp;gt; Domain Permissions&lt;/code&gt; se trouvent les outils pour bloquer certains domaines avec lesquels ne pas fédérer. J&amp;#39;y ai importé des listes provenant de &lt;a href="https://seirdy.one/posts/2023/05/02/fediverse-blocklists/"&gt;Seirdy&lt;/a&gt; et &lt;a href="https://gardenfence.github.io/"&gt;Garden Fence&lt;/a&gt;, ainsi que le fichier &lt;code&gt;blocked_domains.csv&lt;/code&gt; précédemment exporté depuis Octodon.&lt;/p&gt;
&lt;p&gt;De cette manière je n&amp;#39;ai pas à me soucier de la partie putride du Fediverse, dont vous pouvez très bien totalement ignorer l&amp;#39;existence si les admins des instances par lesquelles vous êtes passé ont bien fait leur boulot.&lt;/p&gt;
&lt;p&gt;On peut à présent effectuer la migration.&lt;/p&gt;
&lt;h2 id="migration-depuis-octodon"&gt;Migration depuis Octodon&lt;/h2&gt;
&lt;p&gt;Une migration de compte se fait en deux temps :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;indiquer sur l&amp;#39;instance de destination que le compte qui s&amp;#39;y trouve est un alias du compte qu&amp;#39;on va y migrer&lt;/li&gt;
&lt;li&gt;initier la migration depuis l&amp;#39;instance de départ&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sur l&amp;#39;instance de départ le compte va être indiqué comme migré, et les visiteurs du profil y verront un lien clair menant vers l&amp;#39;instance de destination. Tous les followers seront automatiquement abonnés au compte de l&amp;#39;instance de destination.&lt;/p&gt;
&lt;p&gt;Donc premièrement dans GoToSocial, toujours dans l&amp;#39;interface de configuration, on va dans &lt;code&gt;User &amp;gt; Migration&lt;/code&gt; et on y ajoute &lt;code&gt;https://octodon.social/@jkb&lt;/code&gt; comme alias, sans oublier d&amp;#39;enregistrer ce changement.&lt;/p&gt;
&lt;p&gt;Ensuite sur Octodon (qui tourne sous Glitch-Soc et a donc l&amp;#39;interface utilisateur de Mastodon), on va dans &lt;code&gt;Preferences &amp;gt; Account &amp;gt; Move to a different account&lt;/code&gt; y indiquer qu&amp;#39;on migre vers &lt;code&gt;jkb@jkbockstael.be&lt;/code&gt; et on lance le processus.&lt;/p&gt;
&lt;p&gt;Ce processus de migration n&amp;#39;importe que les followers. Le contenu posté, les bookmarks, les comptes suivis (follows), et les comptes bloqués ne sont pas importés. &lt;/p&gt;
&lt;p&gt;Pour les follows et les bloqués on peut importer directement les fichiers CSV qu&amp;#39;on avait exportés auparavant, en allant dans &lt;code&gt;User &amp;gt; Export &amp;amp; Import &amp;gt; Import Data&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="importation-des-posts"&gt;Importation des posts&lt;/h2&gt;
&lt;p&gt;Parmi les données exportées depuis l&amp;#39;instance Octodon se trouve l&amp;#39;archive de toute l&amp;#39;activité du compte. Sur un poste de travail et au moyen de l&amp;#39;outil en ligne de commande &lt;a href="https://catgirl.codes/slurp/"&gt;slurp&lt;/a&gt; on peut l&amp;#39;importer dans le compte nouvellement crée, en tout cas les posts publics qui ne sont pas des réponses et ne mentionnent aucun compte qui n&amp;#39;existerait plus. Ces posts importés seront datés avec la date et heure d&amp;#39;origine, et publiés de manière à ne provoquer aucune notification chez les followers.&lt;/p&gt;
&lt;p&gt;L&amp;#39;outil &lt;code&gt;slurp&lt;/code&gt; est en Go et distribué en source, il faut installer Go dans sa version la plus récente pour le compilers. Sur mon poste sous Ubuntu 22.04 ça passe par un PPA :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;sudo add-apt-repository ppa:longsleep/golang-backports
sudo apt install golang
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;On peut à présent compiler &lt;code&gt;slurp&lt;/code&gt; :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;git clone https://github.com/VyrCossont/slurp.git
cd slurp
go mod download
go build .
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Une fois &lt;code&gt;slurp&lt;/code&gt; compilé, on va l&amp;#39;autoriser à poster sur notre nouveau compte :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;./slurp --user jkb@jkbockstael.be auth login
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ça ouvre un formulaire d&amp;#39;identification dans un navigateur Web, et une fois identifié on reçoit un token à coller dans &lt;code&gt;slurp&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Maintenant que c&amp;#39;est fait on peut importer l&amp;#39;archive, qui a dans ce cas-ci été décompressée dans &lt;code&gt;../archive/&lt;/code&gt; (vu du répertoire de &lt;code&gt;slurp&lt;/code&gt;) :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;  ./slurp --user jkb@jkbockstael.be archive import \
  --file ../archive \
  --status-map-file ../archive/status-map.json \
  --attachment-map-file ../archive/attachment-map.json \
  --allow-missing-custom-emojis
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Les fichiers &lt;code&gt;status-map.json&lt;/code&gt; et &lt;code&gt;attachment-map.json&lt;/code&gt; n&amp;#39;existent pas encore. Ce sont des fichiers que &lt;code&gt;slurp&lt;/code&gt; va remplir en important, ce qui lui permet de reprendre une importation interrompue. Toujours bon à savoir.&lt;/p&gt;
&lt;p&gt;L&amp;#39;option &lt;code&gt;--allow-missing-custom-emojis&lt;/code&gt; indique d&amp;#39;importer les posts qui utilisent des emojis particuliers à l&amp;#39;instance de départ dont on ne disposerait pas sur l&amp;#39;instance d&amp;#39;arrivée. Ils seront remplacés dans le texte par leur nom entre deux points &lt;code&gt;:comme_ceci:&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Dans mon cas il a fallu vaguement une heure pour importer un peu plus de 2000 posts et tous leurs médias attachés.&lt;/p&gt;
&lt;h2 id="importation-des-bookmarks"&gt;Importation des bookmarks&lt;/h2&gt;
&lt;p&gt;Les bookmarks qu&amp;#39;on a exporté en CSV peuvent aussi être importés à l&amp;#39;aide de &lt;code&gt;slurp&lt;/code&gt; :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;./slurp bookmarks import --user jkb@jkbockstael.be --file ../bookmarks.csv
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Là aussi il faut un peu de patience, et ne pas s&amp;#39;étonner que &lt;code&gt;slurp&lt;/code&gt; soit silencieux pendant le processus.&lt;/p&gt;
&lt;h2 id="client-web"&gt;Client Web&lt;/h2&gt;
&lt;p&gt;GoToSocial ne fournit pas de front-end Web. Certes il y a bien mon profil utilisateur à &lt;code&gt;https://gotosocial.jkbockstael.be/@jkb&lt;/code&gt;, mais rien pour consulter mon flux d&amp;#39;abonnements ou poster quoi que ce soit.&lt;/p&gt;
&lt;p&gt;Pour ce faire j&amp;#39;utilise &lt;a href="https://pinafore.social/"&gt;Pinafore&lt;/a&gt; qui est un front-end très léger et simple, qui a le mérite de tout enregistrer dans le navigateur. Ça fait le boulot mais c&amp;#39;est un tout petit peu trop simple sur un aspect : aucun moyen de choisir la langue dans laquelle on écrit. Oui c&amp;#39;est développé par un Américain, pourquoi ?&lt;/p&gt;
&lt;h2 id="client-mobile"&gt;Client mobile&lt;/h2&gt;
&lt;p&gt;Sur Android j&amp;#39;utilise &lt;a href="https://tusky.app/"&gt;Tusky&lt;/a&gt; que je connais bien, y ajouter mon nouveau compte s&amp;#39;est passé sans problème.&lt;/p&gt;
&lt;h2 id="client-tui"&gt;Client TUI&lt;/h2&gt;
&lt;p&gt;Et puisqu&amp;#39;on n&amp;#39;est pas à une geekerie près, dans le terminal j&amp;#39;utilise &lt;a href="https://toot.bezdomni.net/introduction.html"&gt;Toot&lt;/a&gt; qui a un processus d&amp;#39;identification via token obtenu par un login dans navigateur Web comme pour &lt;code&gt;slurp&lt;/code&gt; auparavant :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;sudo apt install pipx
pipx install toot
toot login
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Une fois le token collé, on peut parcourir son flux avec &lt;code&gt;toot&lt;/code&gt; :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;toot tui
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="et-voilà"&gt;Et voilà&lt;/h2&gt;
&lt;p&gt;Voilà qui conclut le processus de mon indépendance sur le Fediverse, j&amp;#39;espère que ces notes rassemblées seront utiles à quelqu&amp;#39;un un jour à qui ça épargnera pas mal de lecture de documentation.&lt;/p&gt;
&lt;p&gt;Par la nature de la fédération le processus de migration est loin d&amp;#39;être instantané, mais j&amp;#39;ai retrouvé mes marques et mes têtes connues et je dois bien avouer être impressionné par la facilité du machin. On verra à l&amp;#39;usage quels réglages il faudra faire côté serveur, principalement en matière de cache. À un moment je prendrai peut-être aussi le temps d&amp;#39;éditer les CSS de la page de description de l&amp;#39;instance et de ma page de profil utilisateur pour qu&amp;#39;elles soient cohérentes avec le reste du domaine &lt;code&gt;jkbockstael.be&lt;/code&gt;, mais ce n&amp;#39;est pas au sommet de mes priorités.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://gotosocial.jkbockstael.be/@jkb"&gt;On est bien chez soi&lt;/a&gt;&lt;/p&gt;
</description>
		<pubDate>Sun, 06 Apr 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/04/06/migration_de_mastodon_a_gotosocial.html</guid>
	</item>
	<item>
		<title>Impressions : FlatOut 3: Chaos &amp; Destruction</title>
		<link>https://blog.jkbockstael.be/posts/2025/03/06/impressions_flatout_3.html</link>
		<description>&lt;h1 id="impressions--flatout-3-chaos--destruction"&gt;Impressions : FlatOut 3: Chaos &amp;amp; Destruction&lt;/h1&gt;
&lt;p&gt;Voici ce que j&amp;#39;ai écrit sur Steam à propos de &lt;a href="https://store.steampowered.com/app/201510/FlatOut_3_Chaos__Destruction/"&gt;FlatOut 3: Chaos &amp;amp; Destruction&lt;/a&gt; :&lt;/p&gt;
&lt;p&gt;Ce n&amp;#39;est pas le plus mauvais jeu sur Steam. Ce n&amp;#39;est pas non plus le plus mauvais jeu de course, sérieux ou non.&lt;/p&gt;
&lt;p&gt;Par contre c&amp;#39;est clairement le plus mauvais FlatOut. C&amp;#39;est un genre de FlatOut de Wish (c&amp;#39;est d&amp;#39;ailleurs un FlatOut qui n&amp;#39;est pas fait par Bugbear) qui propose tout ce qu&amp;#39;on peut attendre d&amp;#39;un FlatOut mais en moins bien fait, en plus &amp;quot;brouillon&amp;quot;, en plus fadasse. Je dis ça en ayant testé tous les modes de jeu pour savoir de quoi il retourne, sauf le multijoueur puisqu&amp;#39;il n&amp;#39;y a plus personne avec qui jouer.&lt;/p&gt;
&lt;p&gt;Jouez plutôt à FlatOut: Ultimate Carnage, qui est un bon remaster de FlatOut 2. Ou jouez à Wreckfest, qui est totalement dans le même esprit en bien plus moderne.&lt;/p&gt;
</description>
		<pubDate>Thu, 06 Mar 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/03/06/impressions_flatout_3.html</guid>
	</item>
	<item>
		<title>Agrégation de flux avec FreshRSS</title>
		<link>https://blog.jkbockstael.be/posts/2025/03/03/aggregation_de_flux_avec_freshrss.html</link>
		<description>&lt;h1 id="agrégation-de-flux-avec-freshrss"&gt;Agrégation de flux avec FreshRSS&lt;/h1&gt;
&lt;p&gt;Ce weekend j&amp;#39;ai installé une instance &lt;a href="https://www.freshrss.org/"&gt;FreshRSS&lt;/a&gt; pour faire de l&amp;#39;agrégation de flux à consulter ensuite via l&amp;#39;interface Web, une application Android, ou une application TUI.&lt;/p&gt;
&lt;p&gt;Le principe est simple : FreshRSS relève des flux RSS/Atom, enregistre les articles dans une base de données (SQLite par défaut mais d&amp;#39;autres options sont prises en charge), et ensuite des clients se connectent à FreshRSS en utilisant une API GReader et obtiennent les articles à lire. L&amp;#39;avantage d&amp;#39;utiliser un agrégateur de la sorte est que je peux utiliser plusieurs clients différents sur plusieurs appareils et les lectures sont synchronisées (ainsi que les favoris).&lt;/p&gt;
&lt;p&gt;Le processus était simple, mais les documentations sont dispersées donc faisons un récapitulatif (pour Ubuntu Server 22.04 mais ça devrait fonctionner dans la plupart des Linux à base Debian).&lt;/p&gt;
&lt;h2 id="préparation"&gt;Préparation&lt;/h2&gt;
&lt;p&gt;J&amp;#39;ai déjà un serveur à disposition, et un nom de domaine. J&amp;#39;ai donc crée un sous-domaine &lt;code&gt;freshrss.jkbockstael.be&lt;/code&gt; en &lt;code&gt;CNAME&lt;/code&gt; vers &lt;code&gt;jkbockstael.be&lt;/code&gt;, sur ce serveur j&amp;#39;ai un certificat SSL wildcard via &lt;a href="https://letsencrypt.org/"&gt;Let&amp;#39;s Encrypt&lt;/a&gt; donc pour avoir du HTTPS c&amp;#39;est déjà bon.&lt;/p&gt;
&lt;h2 id="installation-de-freshrss"&gt;Installation de FreshRSS&lt;/h2&gt;
&lt;p&gt;L&amp;#39;installation se fera dans &lt;code&gt;/var/www/freshrss.jkbockstael.be&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;D&amp;#39;abord les prérequis ; c&amp;#39;est une application PHP qui a besoin de quelques modules additionnels et j&amp;#39;utilise Apache comme serveur Web :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install php libapache2-mod-php php-curl php-gmp php-intl php-mbstring php-sqlite3 php-xml php-zip
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Quelques modules Apache doivent d&amp;#39;ailleurs être activés :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo a2enmod headers expires rewrite ssl
sudo systemctl restart apache2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Il faut maintenant une configuration VHost dans &lt;code&gt;/etc/apache2/sites-available/freshrss.jkbockstael.be.conf&lt;/code&gt; :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;VirtualHost *:443&amp;gt;
    ServerName freshrss.jkbockstael.be
    DocumentRoot /var/www/freshrss.jkbockstael.be/freshrss/p/
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/jkbockstael.be/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/jkbockstael.be/privkey.pem
    &amp;lt;Directory /var/www/freshrss.jkbockstael.be/freshrss/p&amp;gt;
        Options -Indexes
        AllowOverride AuthConfig FileInfo Indexes Limit
        Order allow,deny
        Allow from all
        Require all granted
    &amp;lt;/Directory&amp;gt;
    CustomLog /var/log/apache2/freshrss.jkbockstael.be_access.log combined
    ErrorLog /var/log/apache2/freshrss.jkbockstael.be_error.log
    LogLevel warn
    ServerSignature on
    AllowEncodedSlashes on
&amp;lt;/VirtualHost&amp;gt;
&amp;lt;VirtualHost *:80&amp;gt;
    ServerName freshrss.jkbockstael.be
    ServerAdmin admin@jkbockstael.be
    DocumentRoot /var/www/freshrss.jkbockstael.be/freshrss/p/
    &amp;lt;Directory /var/www/freshrss.jkbockstael.be/freshrss/p&amp;gt;
        Options -Indexes
        AllowOverride AuthConfig FileInfo Indexes Limit
        Order allow,deny
        Allow from all
        Require all granted
    &amp;lt;/Directory&amp;gt;
    CustomLog /var/log/apache2/freshrss.jkbockstael.be_access.log combined
    ErrorLog /var/log/apache2/freshrss.jkbockstael.be_error.log
    LogLevel warn
    ServerSignature on
    AllowEncodedSlashes on
&amp;lt;/VirtualHost&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Par sécurité vu que le processus de configuration se fait via une interface Web exposée à Internet on peut remplacer chaque bloc&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Order allow,deny
Allow from all
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;par un bloc&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Order deny,allow
Deny from all
Allow from IP_DEPUIS_LAQUELLE_ON_VA_CONFIGURER
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;On peut maintenant télécharger le programme et l&amp;#39;installer :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wget https://github.com/FreshRSS/FreshRSS/archive/latest.zip
unzip latest.zip
sudo mv FreshRSS-latest /var/www/freshrss.jkbockstael.be/freshrss
sudo chown -R www-data:www-data /var/www/freshrss.jkbockstael.be/freshrss/
sudo chmod -R u+w /var/www/freshrss.jkbockstael.be/freshrss/data/
rm latest.zip
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Puis le configurer en pointant son navigateur sur &lt;code&gt;https://freshrss.jkbockstael.be&lt;/code&gt; où le processus est extrêmement simple.&lt;/p&gt;
&lt;h2 id="interface-web"&gt;Interface Web&lt;/h2&gt;
&lt;p&gt;Et voilà. Il me suffit donc d&amp;#39;aller sur &lt;code&gt;https://freshrss.jkbockstael.be&lt;/code&gt;, me connecter avec le nom d&amp;#39;utilisateur et le mot de passe que j&amp;#39;ai créés pendant la configuration juste avant, et d&amp;#39;ajouter des flux RSS. Je peux ensuite les consulter directement avec n&amp;#39;importe quel navigateur capable d&amp;#39;exécuter du JavaScript, en desktop ou en mobile. Les flux sont rafraîchis à chaque visite ou manuellement, avec un minimum de 20 minutes entre deux rafraîchissements.&lt;/p&gt;
&lt;h2 id="permettre-lutilisation-de-clients"&gt;Permettre l&amp;#39;utilisation de clients&lt;/h2&gt;
&lt;p&gt;Ce qui m&amp;#39;intéresse surtout c&amp;#39;est de pouvoir utiliser des clients natifs pour consulter mes flux en les connectant à FreshRSS comme agrégateur.&lt;/p&gt;
&lt;p&gt;Pour ça dans l&amp;#39;interface Web de FreshRSS il faut aller dans les réglages (en haut à droite). D&amp;#39;abord on va dans &amp;quot;Authentification&amp;quot; dans la section Administration pour y cocher &amp;quot;Allow API Access&amp;quot;, puis dans &amp;quot;Profile&amp;quot; dans la section Account y créer un nouveau mot de passe dédié aux clients sous &amp;quot;External access via API&amp;quot;.&lt;/p&gt;
&lt;p&gt;Maintenant j&amp;#39;ai mes paramètres pour les clients :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;URL de l&amp;#39;agrégateur : &lt;code&gt;https://freshrss.jkbockstael.be&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Mot de passe : disons &lt;code&gt;motDePasseClients&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="client-android"&gt;Client Android&lt;/h2&gt;
&lt;p&gt;Pour Android deux clients libres compatibles se distinguent du lot : &lt;a href="https://f-droid.org/packages/com.readrops.app/"&gt;Readrops&lt;/a&gt;, et &lt;a href="https://f-droid.org/en/packages/com.capyreader.app/"&gt;Capy Reader&lt;/a&gt; que je préfère parce qu&amp;#39;il colle mieux à mes goûts esthétiques (et puis les capybaras c&amp;#39;est super chouette). Les deux proposent dès le lancement une configuration guidée pour se connecter à FreshRSS et ça fonctionne directement ; les flux sont bien tous ramenés, et quand on lit un article on voit dans l&amp;#39;interface Web de FreshRSS qu&amp;#39;il est bien marqué comme lu. Exactement ce que je veux.&lt;/p&gt;
&lt;h2 id="client-tui"&gt;Client TUI&lt;/h2&gt;
&lt;p&gt;Je passe pas mal de temps dans un terminal sous Linux, je veux donc un client en u texte qui soit compatible FreshRSS. Ici aussi deux choix se distinguent du lot : &lt;a href="https://github.com/guyfedwards/nom"&gt;nom&lt;/a&gt; et &lt;a href="https://newsboat.org/"&gt;Newsboat&lt;/a&gt;. Je connais déjà Newsboat donc c&amp;#39;est celui-là que je choisis.&lt;/p&gt;
&lt;p&gt;Newsboat est compatible avec FreshRSS depuis sa version 2.24, or la version distribuée dans Ubuntu 22.04 est le 2.18 et celle distribuée dans Debian 12 est la 2.21. Ubuntu 24.10 et Debian 13 fournissent une version assez récente, mais dans l&amp;#39;immédiat j&amp;#39;opte pour une installation Snap.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo snap install newsboat
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Le fichier de configuration est donc à créer dans &lt;code&gt;~/snap/newsboat/current/.newsboat/config&lt;/code&gt; :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;urls-source &amp;quot;freshrss&amp;quot;
freshrss-url &amp;quot;https://freshrss.jkbockstael.be/api/greader.php&amp;quot;
freshrss-login &amp;quot;jkb&amp;quot;
freshrss-password &amp;quot;motDePasseClients&amp;quot;
freshrss-flag-star &amp;quot;s&amp;quot;
freshrss-min-items 100
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Les deux dernières options indiquent quel flag utiliser pour mettre en favori un article et qu&amp;#39;il apparaisse dans la catégorie &amp;quot;Starred items&amp;quot; ensuite, et de ramener 100 articles par flux au lieu des 20 par défaut.&lt;/p&gt;
&lt;h2 id="rafraîchissement-automatique"&gt;Rafraîchissement automatique&lt;/h2&gt;
&lt;p&gt;J&amp;#39;ai à présent de quoi lire mes flux RSS depuis plusieurs clients ou via une interface Web et le tout est synchronisé. Très bien. Cependant les clients ne provoquent pas de refraîchissement de ces flux, seule une consultation via l&amp;#39;interface Web le fait.&lt;/p&gt;
&lt;p&gt;Pour pallier à ça j&amp;#39;ajoute sur le serveur une tache &lt;code&gt;cron&lt;/code&gt; dans &lt;code&gt;/etc/cron.d/freshrss&lt;/code&gt; :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;0 6,12,18 * * * www-data php -f /var/www/freshrss.jkbockstael.be/freshrss/app/actualize_script.php &amp;gt; /tmp/FreshRSS.log 2&amp;gt;&amp;amp;1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Les flux RSS seront donc rafraîchis trois fois par jour à 6h, 12h, et 18h (UTC) quoi qu&amp;#39;il arrive, et les clients profiteront ensuite des nouveaux articles.&lt;/p&gt;
&lt;h2 id="et-voilà"&gt;Et voilà&lt;/h2&gt;
&lt;p&gt;Les flux RSS c&amp;#39;est bien, ne fut-ce que parce que ça donne de la liberté aux lecteurs quant à la manière dont ils lisent ce qu&amp;#39;on publie. Mettez à disposition des flux RSS pour vos blogs, abonnez-vous à des flux RSS, lisez du Web qui soit écrit par des humains pour des humains.&lt;/p&gt;
&lt;p&gt;Le mien est &lt;a href="https://blog.jkbockstael.be/rss.xml"&gt;par ici&lt;/a&gt; si jamais. Tout l&amp;#39;historique du blog y est, et les articles n&amp;#39;y sont pas tronqués ; une fois qu&amp;#39;on s&amp;#39;y abonne on n&amp;#39;a même plus besoin de visiter le blog. Vous voyez ce qui arrive quand on s&amp;#39;en fiche du nombre de pages vues parce qu&amp;#39;on n&amp;#39;a pas de revenus publicitaires ? C&amp;#39;est bien, hein ?&lt;/p&gt;
</description>
		<pubDate>Mon, 03 Mar 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/03/03/aggregation_de_flux_avec_freshrss.html</guid>
	</item>
	<item>
		<title>Impressions : Relentless Expanse</title>
		<link>https://blog.jkbockstael.be/posts/2025/02/28/impressions_relentless_expanse.html</link>
		<description>&lt;h1 id="impressions--relentless-expanse"&gt;Impressions : Relentless Expanse&lt;/h1&gt;
&lt;p&gt;Voici ce que j&amp;#39;ai écrit sur Steam à propos de &lt;a href="https://store.steampowered.com/app/3229480/Relentless_Expanse/"&gt;Relentless Expanse&lt;/a&gt; :&lt;/p&gt;
&lt;p&gt;En voilà une belle surprise !&lt;/p&gt;
&lt;p&gt;Relentless Expanse est un jeu de stratégie militaire en temps réel qui rappellera certainement Galcon, Eufloria, ou si vous êtes un vieux con comme moi Spaceward Ho.&lt;/p&gt;
&lt;p&gt;Le but est de conquérir le monde planète après planète, ce que cherchent aussi à faire les autres joueurs. Chaque planète produit de l&amp;#39;énergie, utilisée pour acheter des améliorations, et des vaisseaux qu&amp;#39;on peut envoyer au combat. Le combat est très Risk : si on a au moins un vaisseau de plus que l&amp;#39;adversaire, on gagne la bataille. Si cette bataille a lieu à une planète, on garde la planète et elle se met aussi à produire de l&amp;#39;énergie et des vaisseaux. Avec assez d&amp;#39;énergie on peut acheter des améliorations pour les planètes : meilleure production d&amp;#39;énergie, meilleure production de vaisseaux, ou défenses qui tirent sur tout ce qui passe à portée.&lt;/p&gt;
&lt;p&gt;Le gameplay est donc basé sur des flux de troupes, et les contrôlent en jeu viennent soutenir cette approche. La prise en main est très rapide, et la variété de réglages pour les parties donnent une bonne rejouabilité. Le tout est présenté avec des graphismes simples mais lisibles.&lt;/p&gt;
&lt;p&gt;Je ne peux pas m&amp;#39;exprimer sur le multijoueur, si ce n&amp;#39;est pour dire que je n&amp;#39;ai jamais réussi à achever une partie avant que la connexion avec le serveur tombe. Par contre en solo c&amp;#39;est que du bonheur. Comptez une demi-heure par partie.&lt;/p&gt;
&lt;p&gt;Relentless Expense vous veut du bien, et ne coûte rien. N&amp;#39;hésitez pas.&lt;/p&gt;
</description>
		<pubDate>Fri, 28 Feb 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/02/28/impressions_relentless_expanse.html</guid>
	</item>
	<item>
		<title>Impressions : Hidden Tomatoes 3</title>
		<link>https://blog.jkbockstael.be/posts/2025/02/26/impressions_hidden_tomatoes_3.html</link>
		<description>&lt;h1 id="impressions--hidden-tomatoes-3"&gt;Impressions : Hidden Tomatoes 3&lt;/h1&gt;
&lt;p&gt;Voici ce que j&amp;#39;ai écrit sur Steam à propos de &lt;a href="https://store.steampowered.com/app/3463460/Hidden_Tomatoes_3/"&gt;Hidden Tomatoes 3&lt;/a&gt; :&lt;/p&gt;
&lt;p&gt;Troisième dose de la même formule, et ça fonctionne toujours aussi bien. On cherche des tomates dans une scène en 3D, qu&amp;#39;on peut déplacer mais pas tourner, et il y a des objets particuliers supplémentaires à débusquer pour les collectionneurs d&amp;#39;achievements.&lt;/p&gt;
&lt;p&gt;La scène est dans ce cas-ci un peu plus exotique, on est sorti de la banlieue à l&amp;#39;américaine stéréotypée pour entrer dans un village médiéval stéréotypé. Qu&amp;#39;importe, on n&amp;#39;est là ni pour l&amp;#39;originalité ni pour l&amp;#39;exactitude mais bien pour chercher des tomates low-poly. Ça fait le boulot.&lt;/p&gt;
&lt;p&gt;Les objets bonus à trouver se détachent mieux du fouilli ambiant que dans les deux premiers Hidden Tomatoes, c&amp;#39;est toujours appréciable.&lt;/p&gt;
&lt;p&gt;Sinon ben disons que pour un total de zéro balles toutes taxes comprises ça constitue dix minutes de divertissement bon marché. Prenez.&lt;/p&gt;
</description>
		<pubDate>Wed, 26 Feb 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/02/26/impressions_hidden_tomatoes_3.html</guid>
	</item>
	<item>
		<title>Impressions : Hidden Tomatoes et Hidden Tomatoes 2</title>
		<link>https://blog.jkbockstael.be/posts/2025/02/09/impressions_hidden_tomatoes_et_hidden_tomatoes_2.html</link>
		<description>&lt;h1 id="impressions--hidden-tomatoes-et-hidden-tomatoes-2"&gt;Impressions : Hidden Tomatoes et Hidden Tomatoes 2&lt;/h1&gt;
&lt;p&gt;Voici ce que j&amp;#39;ai écrit sur Steam à propos de &lt;a href="https://store.steampowered.com/app/3367590/Hidden_Tomatoes/?curator_clanid=45282050"&gt;Hidden Tomatoes&lt;/a&gt; et &lt;a href="https://store.steampowered.com/app/3397510/Hidden_Tomatoes_2/"&gt;Hidden Tomatoes 2&lt;/a&gt; :&lt;/p&gt;
&lt;p&gt;C&amp;#39;est un jeu de recherche d&amp;#39;éléments cachés dans une scène, comme il y en a des dizaines sur Steam.&lt;/p&gt;
&lt;p&gt;Deux aspects viennent ici rafraîchir cette formule : d&amp;#39;abord on ne cherche pas des chats mais des tomates, ensuite on les cherche dans une scène en 3D plutôt que dans une image 2D. C&amp;#39;est bien, ça change.&lt;/p&gt;
&lt;p&gt;Là où les tomates à la place des chats facilite la vie avec le contraste de couleurs, la présentation en 3D complique les choses. La vue est telle qu&amp;#39;on peut juste déplacer la scène, pas la faire tourner, et le développeur a cru bon de profiter des effets de parallaxe que ça entraîne pour cacher certaines tomates à des endroits qu&amp;#39;on ne peut voir que si on est exactement au bon angle. Vous me direz que ça fait partie du principe de ces jeux, mais ça peut être un peu frustrant. Heureusement il y a la possibilité de se faire aider pour débusquer les quelques dernières fourbes, mais l&amp;#39;existence de cette aide est le symptôme d&amp;#39;un problème de conception.&lt;/p&gt;
&lt;p&gt;Bonus sympathique : les achievements proposent une série d&amp;#39;autres objets à trouver dans la scène, c&amp;#39;est un peu de rejouabilité en plus et c&amp;#39;est toujours sympathique.&lt;/p&gt;
&lt;p&gt;Au prix défiant toute concurrence de zéro balles taxes comprises on n&amp;#39;a rien à perdre.&lt;/p&gt;
</description>
		<pubDate>Sun, 09 Feb 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/02/09/impressions_hidden_tomatoes_et_hidden_tomatoes_2.html</guid>
	</item>
	<item>
		<title>Monétisation, je chie ton nom</title>
		<link>https://blog.jkbockstael.be/posts/2025/01/24/monetisation_je_chie_ton_nom.html</link>
		<description>&lt;h1 id="monétisation-je-chie-ton-nom"&gt;Monétisation, je chie ton nom&lt;/h1&gt;
&lt;p&gt;Hier ce cher Nithou &lt;a href="https://nithou.net/blog/single.php?id=2025-01-23"&gt;poussait une râlante&lt;/a&gt; sur le sujet de la monétisation trop répandue dans les blogs et les newsletters, et je dois bien admettre que ça m&amp;#39;a parlé. Malheureusement.&lt;/p&gt;
&lt;p&gt;Je pense que le problème est double.&lt;/p&gt;
&lt;p&gt;D&amp;#39;abord il y a des plateformes qui vivent du temps qu&amp;#39;on passe dessus, qui ont besoin de contenu pour nous faire passer beaucoup de temps dessus, mais qui ne veulent surtout pas dépenser pour produire ce contenu. Donc ces plateformes font croire à leurs utilisateurs qu&amp;#39;ils peuvent &amp;quot;monétiser leur contenu&amp;quot;, à commencer par un &amp;quot;partage&amp;quot; des revenus publicitaires. Beaucoup plongent dans ce piège pour devenir &amp;quot;créateur de contenu à plein temps&amp;quot; (on pourrait parler de cette dénomination, ce sera une autre fois), mais au fil des années la proportion du &amp;quot;partage de revenus&amp;quot; s&amp;#39;est réduite et ces auteurs se retrouvent à devoir rendre une partie de leur travail exclusif derrière un paiement ; les exclusivités Patreon sont tellement légion que des plateformes comme YouTube mettent en place directement le même genre de système d&amp;#39;abonnement pour pouvoir prendre leur part du gâteau.&lt;/p&gt;
&lt;p&gt;Ensuite vient la &amp;quot;hustle culture&amp;quot;, qui voudrait que &lt;em&gt;tout&lt;/em&gt; ce qu&amp;#39;on fait ait un but lucratif. Tu aimes faire du crochet ? Tu devrais vendre des machins crochetés ! Tu devrais faire du yoga le matin, ça te rendrait plus productif ensuite ! Qu&amp;#39;on ne me fasse pas dire ce que je ne dis pas : chercher d&amp;#39;autres sources de revenus ça se comprend, et ce n&amp;#39;est pas ce dont je parle ici. Je parle de ne pas envisager qu&amp;#39;on puisse faire quelque chose pour le plaisir, sans chercher soit à le vendre directement soit à l&amp;#39;utiliser comme moyen de mieux vendre ou comme appât pour vendre autre chose (par exemple je pourrais terminer chaque article par &amp;quot;je suis disponible pour du travail de consultance, écrivez-moi&amp;quot;).&lt;/p&gt;
&lt;p&gt;En ce sens ça se rapproche du &amp;quot;personal branding&amp;quot;, la construction d&amp;#39;une marque-soi qui a aussi une finalité lucrative. J&amp;#39;en ai été victime dans une certaine mesure. Le nom de domaine &lt;code&gt;jkbockstael.be&lt;/code&gt; date de la fin de mes études, quand je voulais une présence Web et une adresse e-mail qui &amp;quot;fassent professionel&amp;quot;. Personal branding. À l&amp;#39;époque on pouvait choisir la couleur de fond de son profil Twitter, j&amp;#39;ai choisi la même que celle de mon site. Personal branding. Plus tard je n&amp;#39;osais plus publier sur mon blog quoi que ce soit qui ne soit pas technique, parce que vous comprenez je suis un professionnel de l&amp;#39;informatique donc mon blog doit parler d&amp;#39;informatique ; du coup je ne publiais presque plus rien, et ça a duré &lt;em&gt;dix ans&lt;/em&gt;. Personal branding. Pure saloperie.&lt;/p&gt;
&lt;p&gt;Voilà pourquoi je refuse de monétiser mon expression, même si on n&amp;#39;a jamais &lt;em&gt;trop&lt;/em&gt; de revenus. Je refuse d&amp;#39;entrer dans cette logique où tout a un prix mais plus rien n&amp;#39;a de valeur. Je refuse de devenir un produit et de ce fait cesser d&amp;#39;être une personne.&lt;/p&gt;
&lt;p&gt;Donc il n&amp;#39;y aura jamais ici d&amp;#39;articles payants, je n&amp;#39;aurai jamais de newsletter à abonnement, ni même de &amp;quot;contenu sponsorisé&amp;quot;, de lien affilié, ou quoi que ce soit d&amp;#39;autre du même ordre. Tout au plus je peux accepter l&amp;#39;idée d&amp;#39;une urne dans laquelle chacun est &lt;em&gt;libre&lt;/em&gt; de déposer quelque chose &lt;em&gt;ou pas&lt;/em&gt;. Ce serait l&amp;#39;équivalent asynchrone et longue-distance de me tendre un café, et ça ne fait pas entrer dans un lieu ou un groupe exclusifs.&lt;/p&gt;
&lt;p&gt;Pour ceux qui veulent voir leur nom dans une liste de &amp;quot;Gold Tier Patreons&amp;quot; : vous n&amp;#39;êtes pas à la bonne adresse.&lt;/p&gt;
</description>
		<pubDate>Fri, 24 Jan 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/01/24/monetisation_je_chie_ton_nom.html</guid>
	</item>
	<item>
		<title>Impressions : Fleshbound</title>
		<link>https://blog.jkbockstael.be/posts/2025/01/22/impressions_fleshbound.html</link>
		<description>&lt;h1 id="impressions--fleshbound"&gt;Impressions : Fleshbound&lt;/h1&gt;
&lt;p&gt;Voici ce que j&amp;#39;ai écrit sur Steam à propos de &lt;a href="https://store.steampowered.com/app/3374390/FleshBound/"&gt;Fleshbound&lt;/a&gt; :&lt;/p&gt;
&lt;p&gt;C&amp;#39;est… intéressant.&lt;/p&gt;
&lt;p&gt;Le style visuel est vraiment pas mal du tout, la musique est top.&lt;/p&gt;
&lt;p&gt;Par contre il faut aimer le gameplay en parkour, tout tourne autour de ça et les ennemis cognent en one-shot donc entre la navigation et les ennemis il n&amp;#39;y a absolument aucun droit à l&amp;#39;erreur. On recommence la séquence au lieu de revenir au début du niveau, mais j&amp;#39;ai quand même trouvé l&amp;#39;expérience assez frustrante.&lt;/p&gt;
&lt;p&gt;Clairement pas un jeu pour moi, mais jetez-y un œil si Mirror&amp;#39;s Edge ou Ghostrunner vous parlent.&lt;/p&gt;
</description>
		<pubDate>Wed, 22 Jan 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/01/22/impressions_fleshbound.html</guid>
	</item>
	<item>
		<title>Filtrer des fichiers logs qui contiennent du JSON et du texte avec jq</title>
		<link>https://blog.jkbockstael.be/posts/2025/01/21/filtrer_logs_json_et_texte_avec_jq.html</link>
		<description>&lt;h1 id="filtrer-des-fichiers-logs-qui-contiennent-du-json-et-du-texte-avec-jq"&gt;Filtrer des fichiers logs qui contiennent du JSON et du texte avec jq&lt;/h1&gt;
&lt;p&gt;Comment extraire un champ particulier des lignes de log en JSON venant d&amp;#39;un fichier qui contient aussi des lignes qui ne sont &lt;em&gt;pas&lt;/em&gt; du JSON ?&lt;/p&gt;
&lt;p&gt;C&amp;#39;est la question que posait quelqu&amp;#39;un sur le Fediverse hier. Enfin pas tout de suite, sa question initiale était &amp;quot;quelqu&amp;#39;un a un guide de jq pour les idiots ?&amp;quot; et ça m&amp;#39;a titillé parce que &lt;a href="https://jqlang.github.io/jq/"&gt;jq&lt;/a&gt; est un outil que j&amp;#39;utilise pas mal dans mon travail.&lt;/p&gt;
&lt;p&gt;C&amp;#39;est un cas d&amp;#39;usage très &amp;quot;vraie vie&amp;quot; avec des pièges qui sont aussi très &amp;quot;vraie vie&amp;quot;. Donc faisons l&amp;#39;exercice ensemble.&lt;/p&gt;
&lt;p&gt;D&amp;#39;abord, des données dans un fichier &lt;code&gt;input.log&lt;/code&gt; :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Ceci n&amp;#39;est pas du JSON
{&amp;quot;log-level&amp;quot;: &amp;quot;info&amp;quot;, &amp;quot;log-type&amp;quot;: &amp;quot;foo&amp;quot;, &amp;quot;message&amp;quot;: &amp;quot;Ceci par contre c&amp;#39;est du JSON&amp;quot;}
{&amp;quot;log-level&amp;quot;: &amp;quot;warning&amp;quot;, &amp;quot;log-type&amp;quot;: &amp;quot;bar&amp;quot;, &amp;quot;message&amp;quot;: &amp;quot;Ceci aussi est du JSON&amp;quot;}
Oh non, du pas-JSON !
Quelle horreur
{&amp;quot;log-level&amp;quot;: &amp;quot;warning&amp;quot;, &amp;quot;log-type&amp;quot;: &amp;quot;foo&amp;quot;, &amp;quot;message&amp;quot;: &amp;quot;Pfiou, quel soulagement&amp;quot;}
{&amp;quot;log-level&amp;quot;: &amp;quot;error&amp;quot;, &amp;quot;log-type&amp;quot;: &amp;quot;bar&amp;quot;, &amp;quot;message&amp;quot;: &amp;quot;C&amp;#39;est tellement mieux&amp;quot;}
Horreur !
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Tentons de donner ça à manger à &lt;code&gt;jq&lt;/code&gt; :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ cat input.log | jq
parse error: Invalid numeric literal at line 1, column 5
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sans surprise il s&amp;#39;étrangle sur la première ligne, puisqu&amp;#39;il s&amp;#39;attend à du JSON.&lt;/p&gt;
&lt;p&gt;Dans le manuel on mentionne l&amp;#39;option &lt;code&gt;--raw-input&lt;/code&gt; qui désactive purement le parsing JSON et transmet chaque ligne au filtre en tant que chaîne.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ cat input.log | jq --raw-input
&amp;quot;Ceci n&amp;#39;est pas du JSON&amp;quot;
&amp;quot;{\&amp;quot;log-level\&amp;quot;: \&amp;quot;info\&amp;quot;, \&amp;quot;log-type\&amp;quot;: \&amp;quot;foo\&amp;quot;, \&amp;quot;message\&amp;quot;: \&amp;quot;Ceci par contre c&amp;#39;est du JSON\&amp;quot;}&amp;quot;
&amp;quot;{\&amp;quot;log-level\&amp;quot;: \&amp;quot;warning\&amp;quot;, \&amp;quot;log-type\&amp;quot;: \&amp;quot;bar\&amp;quot;, \&amp;quot;message\&amp;quot;: \&amp;quot;Ceci aussi est du JSON\&amp;quot;}&amp;quot;
&amp;quot;Oh non, du pas-JSON !&amp;quot;
&amp;quot;Quelle horreur&amp;quot;
&amp;quot;{\&amp;quot;log-level\&amp;quot;: \&amp;quot;warning\&amp;quot;, \&amp;quot;log-type\&amp;quot;: \&amp;quot;foo\&amp;quot;, \&amp;quot;message\&amp;quot;: \&amp;quot;Pfiou, quel soulagement\&amp;quot;}&amp;quot;
&amp;quot;{\&amp;quot;log-level\&amp;quot;: \&amp;quot;error\&amp;quot;, \&amp;quot;log-type\&amp;quot;: \&amp;quot;bar\&amp;quot;, \&amp;quot;message\&amp;quot;: \&amp;quot;C&amp;#39;est tellement mieux\&amp;quot;}&amp;quot;
&amp;quot;Horreur !&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Du coup on peut confier le parsing au filtre lui-même en utilisant le builtin &lt;code&gt;fromjson&lt;/code&gt; :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ cat input.log | jq --raw-input &amp;#39;fromjson&amp;#39;
jq: error (at &amp;lt;stdin&amp;gt;:1): Invalid numeric literal at line 1, column 5 (while parsing &amp;#39;Ceci n&amp;#39;est pas du JSON&amp;#39;)
{
    &amp;quot;log-level&amp;quot;: &amp;quot;info&amp;quot;,
    &amp;quot;log-type&amp;quot;: &amp;quot;foo&amp;quot;,
    &amp;quot;message&amp;quot;: &amp;quot;Ceci par contre c&amp;#39;est du JSON&amp;quot;
}
{
    &amp;quot;log-level&amp;quot;: &amp;quot;warning&amp;quot;,
    &amp;quot;log-type&amp;quot;: &amp;quot;bar&amp;quot;,
    &amp;quot;message&amp;quot;: &amp;quot;Ceci aussi est du JSON&amp;quot;
}
jq: error (at &amp;lt;stdin&amp;gt;:4): Invalid numeric literal at line 1, column 3 (while parsing &amp;#39;Oh non, du pas-JSON !&amp;#39;)
jq: error (at &amp;lt;stdin&amp;gt;:5): Invalid numeric literal at line 1, column 7 (while parsing &amp;#39;Quelle horreur&amp;#39;)
{
    &amp;quot;log-level&amp;quot;: &amp;quot;warning&amp;quot;,
    &amp;quot;log-type&amp;quot;: &amp;quot;foo&amp;quot;,
    &amp;quot;message&amp;quot;: &amp;quot;Pfiou, quel soulagement&amp;quot;
}
{
    &amp;quot;log-level&amp;quot;: &amp;quot;error&amp;quot;,
    &amp;quot;log-type&amp;quot;: &amp;quot;bar&amp;quot;,
    &amp;quot;message&amp;quot;: &amp;quot;C&amp;#39;est tellement mieux&amp;quot;
}
jq: error (at &amp;lt;stdin&amp;gt;:8): Invalid numeric literal at line 1, column 8 (while parsing &amp;#39;Horreur !&amp;#39;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ajoutons-y l&amp;#39;opérateur &lt;code&gt;?&lt;/code&gt; pour la suppression d&amp;#39;erreur (qui est un raccourci pour un &lt;code&gt;try ... catch&lt;/code&gt; avec clause &lt;code&gt;catch&lt;/code&gt; vide :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ cat input.log | jq --raw-input &amp;#39;fromjson?&amp;#39;
{
    &amp;quot;log-level&amp;quot;: &amp;quot;info&amp;quot;,
    &amp;quot;log-type&amp;quot;: &amp;quot;foo&amp;quot;,
    &amp;quot;message&amp;quot;: &amp;quot;Ceci par contre c&amp;#39;est du JSON&amp;quot;
}
{
    &amp;quot;log-level&amp;quot;: &amp;quot;warning&amp;quot;,
    &amp;quot;log-type&amp;quot;: &amp;quot;bar&amp;quot;,
    &amp;quot;message&amp;quot;: &amp;quot;Ceci aussi est du JSON&amp;quot;
}
{
    &amp;quot;log-level&amp;quot;: &amp;quot;warning&amp;quot;,
    &amp;quot;log-type&amp;quot;: &amp;quot;foo&amp;quot;,
    &amp;quot;message&amp;quot;: &amp;quot;Pfiou, quel soulagement&amp;quot;
}
{
    &amp;quot;log-level&amp;quot;: &amp;quot;error&amp;quot;,
    &amp;quot;log-type&amp;quot;: &amp;quot;bar&amp;quot;,
    &amp;quot;message&amp;quot;: &amp;quot;C&amp;#39;est tellement mieux&amp;quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Bien ! Maintenant il reste à filtrer et extraire le champ qu&amp;#39;on veut. Disons qu&amp;#39;on veut ne garder que les entrées qui ont leur &lt;code&gt;log-level&lt;/code&gt; à &lt;code&gt;warning&lt;/code&gt; :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ cat input.log | jq --raw-input &amp;#39;fromjson? | select (.&amp;quot;log-level&amp;quot; == &amp;quot;warning&amp;quot;)&amp;#39;
{
    &amp;quot;log-level&amp;quot;: &amp;quot;warning&amp;quot;,
    &amp;quot;log-type&amp;quot;: &amp;quot;bar&amp;quot;,
    &amp;quot;message&amp;quot;: &amp;quot;Ceci aussi est du JSON&amp;quot;
}
{
    &amp;quot;log-level&amp;quot;: &amp;quot;warning&amp;quot;,
    &amp;quot;log-type&amp;quot;: &amp;quot;foo&amp;quot;,
    &amp;quot;message&amp;quot;: &amp;quot;Pfiou, quel soulagement&amp;quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Les guillemets autour de &lt;code&gt;log-level&lt;/code&gt; dans le filtre sont nécessaires à cause du trait d&amp;#39;union. Sans ça ce serait interprété comme une soustraction.&lt;/p&gt;
&lt;p&gt;Reste maintenant à ne garder que le champ &lt;code&gt;message&lt;/code&gt; :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ cat input.log | jq --raw-input &amp;#39;fromjson? | select (.&amp;quot;log-level&amp;quot; == &amp;quot;warning&amp;quot;) | .message&amp;#39;
&amp;quot;Ceci aussi est du JSON&amp;quot;
&amp;quot;Pfiou, quel soulagement&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Et ça fait le boulot.&lt;/p&gt;
</description>
		<pubDate>Tue, 21 Jan 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/01/21/filtrer_logs_json_et_texte_avec_jq.html</guid>
	</item>
	<item>
		<title>20 janvier 2025</title>
		<link>https://blog.jkbockstael.be/posts/2025/01/20/20_janvier_2025.html</link>
		<description>&lt;h1 id="20-janvier-2025"&gt;20 janvier 2025&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Fool me once, shame on you; fool me twice, shame on me.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Voilà.&lt;/p&gt;
</description>
		<pubDate>Mon, 20 Jan 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/01/20/20_janvier_2025.html</guid>
	</item>
	<item>
		<title>Impressions : Wood and Flesh: A Candleforth Short Story</title>
		<link>https://blog.jkbockstael.be/posts/2025/01/19/impressions_wood_and_flesh.html</link>
		<description>&lt;h1 id="impressions--wood-and-flesh-a-candleforth-short-story"&gt;Impressions : Wood and Flesh: A Candleforth Short Story&lt;/h1&gt;
&lt;p&gt;Voici ce que j&amp;#39;ai écrit sur Steam à propos de &lt;a href="https://store.steampowered.com/app/3411660/Wood_and_Flesh_A_Candleforth_Short_Story/"&gt;Wood and Flesh: A Candleforth Short Story&lt;/a&gt; :&lt;/p&gt;
&lt;p&gt;En effet c&amp;#39;est &amp;quot;a short story&amp;quot;.&lt;/p&gt;
&lt;p&gt;Wood and Flesh se traverse de part en part en une dizaine de minutes. Il s&amp;#39;agit plus d&amp;#39;une démo ce que les développeurs nous réservent dans leurs prochaines sorties que d&amp;#39;un jeu à part entière. Mais au prix imbattable de zéro brouzoufs le rapport qualité-prix tend vers l&amp;#39;infini quoi qu&amp;#39;on fasse donc on ne va pas se plaindre.&lt;/p&gt;
&lt;p&gt;On a droit ici à deux classiques des jeux de puzzle, qui ne devraient pas poser de problème à qui que ce soit. C&amp;#39;est servi dans une ambiance graphique et sonore simple mais soignée qui me donne envie de garder un œil sur ces développeurs et me rend assez curieux de voir ce que ça sera.&lt;/p&gt;
&lt;p&gt;Simple, efficace, soigné, gratuit, annonciateur de bonnes nouvelles. C&amp;#39;est oui.&lt;/p&gt;
</description>
		<pubDate>Sun, 19 Jan 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/01/19/impressions_wood_and_flesh.html</guid>
	</item>
	<item>
		<title>Adieu FOSDEM</title>
		<link>https://blog.jkbockstael.be/posts/2025/01/17/adieu_fosdem.html</link>
		<description>&lt;h1 id="adieu-fosdem"&gt;Adieu FOSDEM&lt;/h1&gt;
&lt;p&gt;Je n&amp;#39;irai plus au FOSDEM.&lt;/p&gt;
&lt;p&gt;Le FOSDEM m&amp;#39;a au fil des années fait découvrir plein de projets chouettes, offert des conversations avec une foule de gens vraiment intéressants, insufflé de l&amp;#39;enthousiasme et de la motivation, et laissé des bons souvenirs à la pelle. Je me considère chanceux d&amp;#39;habiter dans le bon pays pour pouvoir y aller facilement, et je trouve formidable qu&amp;#39;une telle conférence puisse se tenir gratuitement depuis maintenant 25 ans.&lt;/p&gt;
&lt;p&gt;Ça faisait quelques années que je n&amp;#39;y allais plus en personne, trop frustré de ne pas pouvoir assister aux présentations qui m&amp;#39;intéressent faute de place et pour m&amp;#39;éviter la grippe de conférence (certains appellent le FOSDEM &amp;quot;Plague Camp&amp;quot;). Ça faisait aussi quelques années que j&amp;#39;étais déçu par des choix de l&amp;#39;organisation, c&amp;#39;est bien beau les slogans &amp;quot;free software, free community&amp;quot; mais quand on est sponsorisé par Google ça sonne creux.&lt;/p&gt;
&lt;p&gt;Cette année le dernier clou du cercueil a pour forme une keynote par Jack fucking Dorsey dont la boîte de bullshit-à-blockchain &lt;a href="https://fosdem.org/2025/about/sponsors/#block"&gt;est sponsor&lt;/a&gt; de l&amp;#39;événement parce que le capitalisme de surveillance ce n&amp;#39;était pas assez (vivement le stand Palantir), mais l&amp;#39;organisation nous assure que &lt;a href="https://fosdem.org/2025/news/2025-01-16-protests/"&gt;ce n&amp;#39;est pas pour ça qu&amp;#39;on lui file la grande scène, c&amp;#39;est juste qu&amp;#39;on l&amp;#39;aime vraiment beaucoup&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Pour ceux qui veulent un récapitulatif de pourquoi parmi tous les gens qui n&amp;#39;ont vraiment pas leur place là-bas Jack Dorsey n&amp;#39;a particulièrement pas sa place là-bas je vous invite à lire &lt;a href="https://drewdevault.com/2025/01/16/2025-01-16-No-Billionares-at-FOSDEM-please.html"&gt;ce que Drew DeVault&lt;/a&gt; a écrit sur le sujet.&lt;/p&gt;
&lt;p&gt;C&amp;#39;était bien, ça ne l&amp;#39;est plus. Adieu.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Mise à jour 22/01/2025 : la keynote de Dorsey n&amp;#39;est plus au programme. L&amp;#39;organisation semble avoir entendu raison.&lt;/p&gt;
</description>
		<pubDate>Fri, 17 Jan 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/01/17/adieu_fosdem.html</guid>
	</item>
	<item>
		<title>Joyeux anniversaire Wikipedia</title>
		<link>https://blog.jkbockstael.be/posts/2025/01/15/joyeux_anniversaire_wikipedia.html</link>
		<description>&lt;h1 id="joyeux-anniversaire-wikipedia"&gt;Joyeux anniversaire Wikipedia&lt;/h1&gt;
&lt;p&gt;Wikipedia a 24 ans aujourd&amp;#39;hui.&lt;/p&gt;
&lt;p&gt;Bon OK, vu que j&amp;#39;écris en français : Wikipedia en français n&amp;#39;aura 24 ans que &lt;a href="https://fr.wikipedia.org/wiki/Wikip%C3%A9dia:Journ%C3%A9e_de_Wikip%C3%A9dia"&gt;le 21 mars&lt;/a&gt;, mais bon on n&amp;#39;est pas à quelques semaines près quand l&amp;#39;échelle déborde de deux décennies.&lt;/p&gt;
&lt;p&gt;Quand Wikipedia a démarré en 2001 l&amp;#39;ambition folle était d&amp;#39;atteindre 100 000 articles. &lt;em&gt;Cent mille articles!&lt;/em&gt; Pour se faire une idée de l&amp;#39;ampleur de cette ambition : la &amp;quot;Global Edition&amp;quot; de la prestigieuse encyclopédie Britannica compte 40 000 articles. La francophone et non moins prestigieuse Universalis compte 30 000 articles. Autant dire que quand une bande de doux idéalistes affirment qu&amp;#39;on va &lt;em&gt;de manière entièrement bénévole&lt;/em&gt; écrire plus du double de ce que font les géants du secteur, ça fait bien rigoler.&lt;/p&gt;
&lt;p&gt;Fast-forward et non seulement Wikipedia a dépassé son objectif (presque 7 &lt;em&gt;millions&lt;/em&gt; d&amp;#39;articles en anglais, et 2,6 &lt;em&gt;millions&lt;/em&gt; d&amp;#39;articles en français) mais le projet est plus vivant que jamais et est devenu le réflexe en matière de première recherche. En bonus on a l&amp;#39;avantage de la bibliographie sous chaque article, qui permet facilement de poursuivre ses recherches en sachant sur quoi se base ce qu&amp;#39;on vient de lire.&lt;/p&gt;
&lt;p&gt;Et puis il y a l&amp;#39;aspect que je préfère : contrairement à une encyclopédie papier écrite par des gens rémunérés et donc pour laquelle il faut faire des choix éditoriaux drastiques, ajouter un article à Wikipedia est pour ainsi dire gratuit. On peut donc écrire sur bien plus de sujets qui seraient jugés trop niche ou trop futiles pour mériter une place dans Britannica ou Universalis. Il reste le critère de notoriété, bien sûr, mais il reste assez souple pour qu&amp;#39;on ait droit à un article sur &lt;a href="https://fr.wikipedia.org/wiki/Fexhe-le-Haut-Clocher"&gt;Fexhe-le-Haut-Clocher&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Voilà pourquoi je cite encore et toujours Wikipedia comme exemple de ce qu&amp;#39;il est possible d&amp;#39;accomplir juste pour la beauté du geste. Wikipedia est à mes yeux un magnifique exemple de la capacité de l&amp;#39;humanité de s&amp;#39;attaquer à des chantiers à première vue insurmontables, et un bel exemple de ce qui devient viable quand on retire de l&amp;#39;équation la recherche de profit.&lt;/p&gt;
&lt;p&gt;C&amp;#39;est toujours bon de se mettre ça en tête, par les temps qui courent.&lt;/p&gt;
</description>
		<pubDate>Wed, 15 Jan 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/01/15/joyeux_anniversaire_wikipedia.html</guid>
	</item>
	<item>
		<title>Impressions : Mizi NO!</title>
		<link>https://blog.jkbockstael.be/posts/2025/01/13/impressions_mizi_no.html</link>
		<description>&lt;h1 id="impressions--mizi-no"&gt;Impressions : Mizi NO!&lt;/h1&gt;
&lt;p&gt;Voici ce que j&amp;#39;ai écrit sur Steam à propos de &lt;a href="https://store.steampowered.com/app/2654860/Mizi_NO/"&gt;Mizi NO!&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;C&amp;#39;est un jeu de puzzle, assez littéralement.&lt;/p&gt;
&lt;p&gt;En général le tag &amp;quot;puzzle&amp;quot; sur Steam ne nous apprend pas grand chose si ce n&amp;#39;est qu&amp;#39;à un moment où l&amp;#39;autre il va falloir plus ou moins réfléchir, ça peut aller du machin tordu qui nécéssite d&amp;#39;avoir fait des études et de prendre des notes jusqu&amp;#39;au bidule insultant du type &amp;quot;cliquez sur cette chose qui clignote&amp;quot;.&lt;/p&gt;
&lt;p&gt;Ici c&amp;#39;est littéralement du puzzle puisqu&amp;#39;il s&amp;#39;agit de placer correctement des morceaux d&amp;#39;une image, enfin d&amp;#39;un object fragile poussé hors de la table par un chat taquin. Pas de fioritures, pas de pénalités. C&amp;#39;est de la pure détente qui ne prétend pas être autre chose (mais qui aurait pu faire un choix différent au niveau de la musique, que j&amp;#39;ai trouvé un peu agaçante).&lt;/p&gt;
&lt;p&gt;Le jeu est gratuit et propose 15 puzzles de difficulté croissante. Des DLC payants proposent chacun 20 puzzles thématiques de plus.&lt;/p&gt;
&lt;p&gt;Mignon, coloré, doux, simple, sans stress.&lt;/p&gt;
</description>
		<pubDate>Mon, 13 Jan 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/01/13/impressions_mizi_no.html</guid>
	</item>
	<item>
		<title>Bloguidien : déconnexion</title>
		<link>https://blog.jkbockstael.be/posts/2025/01/08/bloguidien_deconnexion.html</link>
		<description>&lt;h1 id="bloguidien--déconnexion"&gt;Bloguidien : Déconnexion&lt;/h1&gt;
&lt;p&gt;Le sujet &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt; du jour est : &amp;quot;Qu&amp;#39;est-ce que tu fais de vraiment débile quand tu as besoin de déconnecter de la normalité ?&amp;quot;&lt;/p&gt;
&lt;p&gt;Je conduis des camions, ou je fais des dioramas virtuels.&lt;/p&gt;
&lt;p&gt;On peut se demander qui comment et de quel droit jugerait de la débilité d&amp;#39;une activité de déconnexion, mais ceci est un autre sujet. Soyons toutefois d&amp;#39;accord sur un point : tant qu&amp;#39;ils ne portent atteinte à personne, tous vos hobbies sont légitimes. Faire des abat-jours en peau humaine c&amp;#39;est une autre histoire.&lt;/p&gt;
&lt;p&gt;Sur le sujet : pendant pas mal de temps j&amp;#39;ai plongé pas mal de temps dans les jeux &lt;a href="https://eurotrucksimulator2.com/"&gt;Euro Truck Simulator 2&lt;/a&gt; et &lt;a href="https://americantrucksimulator.com/"&gt;American Truck Simulator&lt;/a&gt;. C&amp;#39;était une expérience particulière. Un jour j&amp;#39;ai découvert l&amp;#39;existence de Euro Truck Simulator, rigolé, téléchargé une version pirate pour voir moi-même si c&amp;#39;était bien ce que j&amp;#39;imaginais, rigolé de nouveau… et soudain trois heures s&amp;#39;étaient écoulées.&lt;/p&gt;
&lt;p&gt;Il y a &lt;em&gt;quelque chose&lt;/em&gt; qui est très bien fait dans Euro Truck Simulator (et son pendant américain), même si je n&amp;#39;arrive pas vraiment à mettre le doigt dessus. C&amp;#39;est très relaxant de conduire des camions virtuels sur des routes virtuelles (à l&amp;#39;échelle 1/20) pendant parfois des heures. Peut-être parce que l&amp;#39;échelle permet de &amp;quot;voir&amp;quot; du pays plutôt vite ? Peut-être parce que même si les véhicules non-joueurs font parfois de la merde on est très loin du stress et du chaos de la vraie route ? Peut-être que le rythme d&amp;#39;une boîte 18 vitesses est satisfaisant ? Peut-être parce que comme dans beaucoup de jeux vidéo on est systématiquement récompensé pour ses efforts ? Je ne sais pas. Ce que je sais c&amp;#39;est qu&amp;#39;un lever du jour sur une route d&amp;#39;Arizona au son d&amp;#39;une &lt;a href="https://hpr.org/"&gt;radio country&lt;/a&gt; a quelque chose d&amp;#39;émerveillant, en particulier quand c&amp;#39;est en VR. Ce que je sais aussi c&amp;#39;est que j&amp;#39;ai passé un total de 363 heures sur des routes virtuelles européennes ou américains.&lt;/p&gt;
&lt;p&gt;On pourrait considérer que c&amp;#39;est &amp;quot;vraiment débile&amp;quot; comme passe-temps.&lt;/p&gt;
&lt;p&gt;L&amp;#39;autre activité potentiellement &amp;quot;vraiment débile&amp;quot; sur laquelle je passe beaucoup de temps est la construction d&amp;#39;environnements de jeu qui sacrifient totalement le côté pratique et l&amp;#39;optimisation gameplay en faveur de l&amp;#39;esthétique. J&amp;#39;aime les jeux qui proposent de la construction ; c&amp;#39;est peut-être pour ça que j&amp;#39;ai passé autant de temps dans &lt;a href="https://playark.com/ark-survival-evolved/"&gt;ARK&lt;/a&gt; malgré ses nombreux défaut, et c&amp;#39;est certainement pour ça que ma progression dans mes parties à &lt;a href="https://www.spaceengineersgame.com/home/"&gt;Space Engineers&lt;/a&gt; est si lente à force de construire des bases et véhicules beaucoup plus élaborés et détaillés que nécessaire. Dans &lt;a href="https://www.valheimgame.com/"&gt;Valheim&lt;/a&gt; j&amp;#39;ai un serveur que je partage avec des amis et sur lequel j&amp;#39;ai construit des bases et villages entiers qui auraient pu être fait beaucoup plus vite et pour beaucoup moins de ressources en s&amp;#39;en tenant au nécessaire. Que voulez-vous j&amp;#39;aime évoluer dans des environnements complets et détaillés qui ont l&amp;#39;air vivant, donc quand on me donne la possibilité de les créer moi-même c&amp;#39;est encore mieux.&lt;/p&gt;
&lt;p&gt;Y&amp;#39;a pire comme passe-temps je pense.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ce post fait partie d&amp;#39;une &lt;a href="/tags/bloguidien/"&gt;série&lt;/a&gt; dans le cadre du &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt;, une inspiration à l&amp;#39;écriture quotidienne à l&amp;#39;initiative de &lt;a href="https://lord.re"&gt;Lord&lt;/a&gt; et &lt;a href="https://dryusdan.space/"&gt;Dryusdan&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Wed, 08 Jan 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/01/08/bloguidien_deconnexion.html</guid>
	</item>
	<item>
		<title>Impressions : Hellblade: Senua's Sacrifice</title>
		<link>https://blog.jkbockstael.be/posts/2025/01/07/impressions_hellblade.html</link>
		<description>&lt;h1 id="impressions-hellblade-senuas-sacrifice"&gt;Impressions: Hellblade: Senua&amp;#39;s Sacrifice&lt;/h1&gt;
&lt;p&gt;Maintenant que j&amp;#39;ai achevé un playthrough complet six ans après le précédent, je peux confirmer ce que je disais de ce jeu après l&amp;#39;avoir achevé en 2018 : c&amp;#39;est une belle claque vidéoludique que je conseille vivement.&lt;/p&gt;
&lt;p&gt;Côté gameplay c&amp;#39;est un jeu en vue tierce personne qui combine des puzzles de l&amp;#39;environnement et du combat au corps à corps. On alterne ces phases au fur et à mesure qu&amp;#39;on progresse dans l&amp;#39;environnement toujours en avant, le tout entrecoupés de cinématiques in-game qui font avancer l&amp;#39;histoire.&lt;/p&gt;
&lt;p&gt;Le combat est exactement ce à quoi on peut s&amp;#39;attendre : attaque rapide, attaque lourde, blocage/parade, esquive, verrouillage automatique sur un ennemi à la fois. Un mécanisme de concentration qui récompense le fait de ne pas prendre de dégats ou d&amp;#39;en provoquer permet d&amp;#39;activer un bullet-time qui est indispensable pour certains types d&amp;#39;ennemis. Par défaut la difficulté est dynamique selon comment on s&amp;#39;en sort, mais on peut la choisir entre trois niveaux. C&amp;#39;est vite pris en main et plutôt satisfaisant.&lt;/p&gt;
&lt;p&gt;Les puzzles sont plus intéressants mais ne font pas exploser le cerveau non plus. La plupart sont basés sur le fait d&amp;#39;aligner des objets pour qu&amp;#39;une fois vus depuis le bon angle ils forment un symbole, ce qui colle bien avec le thème du jeu. Il y a bien d&amp;#39;autres mécanismes que je ne vais pas spoiler ici pour ne pas gâcher la découverte, mais ils sont tous basés sur la navigation dans l&amp;#39;environnement et sa manipulation. Là aussi c&amp;#39;est vite pris en main et plutôt satisfaisant.&lt;/p&gt;
&lt;p&gt;Là où le jeu brille vraiment c&amp;#39;est sur la narration. On joue Senua, une jeune guerrière Picte qui est atteinte de psychose et trimballe un fameux lot de traumatismes qui se manifestent de toutes sortes de manières à commencer par les voix qui sont présentes dès le début du jeu. L&amp;#39;histoire est racontée façon &amp;quot;walking simualtor&amp;quot; au travers d&amp;#39;élements de l&amp;#39;environnement, de flashbacks, de souvenirs et pensées parmi les voix. C&amp;#39;est difficile de mettre le doigt sur un point précis qui fait le succès de la narration, mais quoi que Ninja Theory aient fait ils l&amp;#39;ont bien fait, on a droit à un personnage attachant et une histoire captivante. Peu de jeux m&amp;#39;ont provoqué une réaction émotionnelle aussi intense que Hellblade, c&amp;#39;est du bel ouvrage.&lt;/p&gt;
&lt;p&gt;À jouer à la manette idéalement, et au casque pour bien profiter des indices sonores. Comptez six ou sept heures de jeu si vous n&amp;#39;êtes pas complétionniste.&lt;/p&gt;
</description>
		<pubDate>Tue, 07 Jan 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/01/07/impressions_hellblade.html</guid>
	</item>
	<item>
		<title>Impressions : ARK: Survival Evolved</title>
		<link>https://blog.jkbockstael.be/posts/2025/01/06/impressions_ark_survival_evolved.html</link>
		<description>&lt;h1 id="impressions--ark-survival-evolved"&gt;Impressions : ARK: Survival Evolved&lt;/h1&gt;
&lt;p&gt;Non.&lt;/p&gt;
&lt;p&gt;ARK est la raison pour laquelle les mots &amp;quot;early access open world survival craft&amp;quot; proquent en moi une méfiance immédiate.&lt;/p&gt;
&lt;p&gt;Le jeu est beau, ça il faut le reconnaître. C&amp;#39;est ce qui fait son charme initialement, le côté &amp;quot;wow je suis dans Jurassic Park&amp;quot; avec une atmosphère au top. J&amp;#39;aime particulièrement l&amp;#39;ambiance des forêts et les nuits vraiment noires. Mais très vite on se heurte à tous ses défauts et on déchante.&lt;/p&gt;
&lt;p&gt;Mon impression est que le studio avait juste cette vague idée &amp;quot;Minecraft mais avec des dinosaures&amp;quot; sans trop savoir où aller avec ça, et n&amp;#39;ont pas eu d&amp;#39;autre idée que de la surenchère pendant des années de early-access. Du coup on se retrouve avec un machin qui n&amp;#39;a pas de finalité, dans lequel chaque mise à jour a ajouté des équipements totalement OP et des adveraires encore plus OP mais sans jamais toucher au moindre bug aussi irritant ou bloquant soit-il. Le résultat est un bug-fest qui a la qualité de game design qu&amp;#39;on pourrait attendre d&amp;#39;un enfant de cinq ans.&lt;/p&gt;
&lt;p&gt;Je lui ai plusieurs fois donné sa chance. En solo plusieurs fois, en multijoueurs privé avec des amis, en multijoueurs en communauté plus large, et en multijoueurs ouvert avec de parfaits inconnus (ne faites pas ça, c&amp;#39;est l&amp;#39;enfer). À chaque fois c&amp;#39;est pareil : le début de partie est excitant, mais dès qu&amp;#39;on arrive à plus haut niveau ou à plus grande échelle tout devient pénible et incontrôlable.&lt;/p&gt;
&lt;p&gt;Après des années de early-access sans direction claire ils ont collé un gros &amp;quot;1.0&amp;quot; arbitraire, décidé que ça y est c&amp;#39;est bon le jeu est fait, et gonflé le prix. C&amp;#39;est si commode.&lt;/p&gt;
&lt;p&gt;Maintenant le studio moissonne de nouveau ceux qui lui laisseraient le bénéfice du doute avec une version qui n&amp;#39;est qu&amp;#39;un remaster du même gameplay bancal. Quelque part on devait s&amp;#39;y attendre venant de gens qui vendraient des DLC pendant la période early-access.&lt;/p&gt;
</description>
		<pubDate>Mon, 06 Jan 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/01/06/impressions_ark_survival_evolved.html</guid>
	</item>
	<item>
		<title>Impressions : Baldur's Gate 3</title>
		<link>https://blog.jkbockstael.be/posts/2025/01/05/impressions_baldurs_gate_3.html</link>
		<description>&lt;h1 id="impressions--baldurs-gate-3"&gt;Impressions : Baldur&amp;#39;s Gate 3&lt;/h1&gt;
&lt;p&gt;Presque parfait.&lt;/p&gt;
&lt;p&gt;De tous les jeux de rôle sur PC auxquels j&amp;#39;ai joué Baldur&amp;#39;s Gate est celui qui offre le niveau de liberté et de créativité qui s&amp;#39;approche le plus de ce qu&amp;#39;on peut avoir autour d&amp;#39;une table. On est ici à l&amp;#39;opposé du spectre par-rapport à des &amp;quot;RPG&amp;quot; dont le seul aspect &amp;quot;rôle&amp;quot; est de choisir de quelle manière on va frapper plus fort les pas-beaux (coucou Skyrim, je t&amp;#39;aime mais tu n&amp;#39;es pas exactement un jeu de rôle).&lt;/p&gt;
&lt;p&gt;C&amp;#39;est aussi un jeu qui est magistralement à l&amp;#39;opposé des &amp;quot;open-world&amp;quot; qui sont immenses mais surtout vides. L&amp;#39;environnement est entièrement fait main et extrêmement soigné, avec des détails à foison et une foule d&amp;#39;éléments interconnectés qui forment un très haute densité de choses à voir et à faire. Tout est fait pour encourager l&amp;#39;exploration et l&amp;#39;expérimentation, il y a systématiquement plusieurs approches possibles pour chaque situation, et l&amp;#39;ordre dans lequel on fait les choses (ou les ignore) n&amp;#39;est pas du tout forcé.&lt;/p&gt;
&lt;p&gt;Le monde est riche et détaillé, l&amp;#39;histoire se déroule au rythme du jeu, les personnages sont mémorables (même si comme partout ailleurs il y en a qui versent dans la caricature), les dialogues ont la bonne dose d&amp;#39;humour… globalement l&amp;#39;écriture est au niveau de la réalisation technique : le meilleur qui soit.&lt;/p&gt;
&lt;p&gt;Le seul bémol que je mettrais est sur le combat, qui peut par moments être frustrant (mais beaucoup moins que dans Pillars of Eternity par exemple). On peut heureusement changer la difficulté à tout moment, mais je trouve dommage que le &amp;quot;Story Mode&amp;quot; implique quand même du combat.&lt;/p&gt;
&lt;p&gt;Baldur&amp;#39;s Gate 3 est un jeu à essayer absolument, qu&amp;#39;on ait ou pas joué à D&amp;amp;D ou à d&amp;#39;autres jeux basés sur D&amp;amp;D.&lt;/p&gt;
</description>
		<pubDate>Sun, 05 Jan 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/01/05/impressions_baldurs_gate_3.html</guid>
	</item>
	<item>
		<title>Impressions : Space Engineers</title>
		<link>https://blog.jkbockstael.be/posts/2025/01/04/impressions_space_engineers.html</link>
		<description>&lt;h1 id="impressions--space-engineers"&gt;Impressions : Space Engineers&lt;/h1&gt;
&lt;p&gt;Dernièrement j&amp;#39;ai décidé d&amp;#39;écrire mes impressions sur les jeux vidéo auxquels je joue, c&amp;#39;est pour Steam mais autant le mettre ici aussi.&lt;/p&gt;
&lt;p&gt;Aujourd&amp;#39;hui : Space Engineers&lt;/p&gt;
&lt;p&gt;La courbe d&amp;#39;apprentissage est un peu rude, mais une fois franchie ce jeu n&amp;#39;est que du bonheur. C&amp;#39;est en quelque sorte le Vim des jeux vidéo.&lt;/p&gt;
&lt;p&gt;Beaucoup de jeux forcent un passage au travers d&amp;#39;un tutoriel tellement basique qu&amp;#39;il en devient insultant, Space Engineers a l&amp;#39;approche opposée : le joueur est plongé dans le grand bassin avant même qu&amp;#39;on lui explique le moindre principe de nage. Il y a un tutoriel mais il n&amp;#39;est pas vraiment pas-à-pas et il est littéralement possible de s&amp;#39;y perdre ou d&amp;#39;y coincer sa progression, il y a un scénario &amp;quot;Learning to survive&amp;quot; pour mettre en pratique ce qu&amp;#39;on aurait appris dans le tutoriel dans un cadre un peu plus facile mais là aussi il est tout à fait possible de se bloquer toatlement. En bref le meilleur et presque seul moyen d&amp;#39;apprendre les complexités de Space Engineers sans sortir du jeu est d&amp;#39;y passer des heures à expérimenter et apprendre de ses erreurs.&lt;/p&gt;
&lt;p&gt;Jusqu&amp;#39;à récemment un aspect reprochable et reproché était la quasi-absence d&amp;#39;activités PvE et la totale absence de PvE &amp;quot;end-game&amp;quot;. Le DLC &amp;quot;Contact&amp;quot; a solidement redressé la barre sur ce plan-là, il y a maintenant de quoi se mettre sous la dent et surtout de quoi se casser les dents sans installer le moindre mod.&lt;/p&gt;
&lt;p&gt;Niveau mods justement c&amp;#39;est chaque jour le matin de Noël. Le jeu est extrêmement modifiable et la communauté regorge de moddeurs talentueux. Les mods sont activés ou désactivés pour chaque save, on peut très bien avoir une partie totalement &amp;quot;vanilla&amp;quot; et un autre moddée à l&amp;#39;extrême en même temps. Vous voulez de nouveaux blocs, des nouvelles planètes, des mécanismes gameplay en plus ? Il y a des mods pour ça. Du PvE face à des factions qui ont des comportements propres et réagissent chacune à sa manière à la progression du joueur ? Il y a des mods pour ça. De l&amp;#39;aérodynamique ? Il y a des mods pour ça. Des bateaux ? Il y a des mods pour ça. Même sans mod le jeu de base est bien riche et plein de challenges, même sans DLC.&lt;/p&gt;
&lt;p&gt;Côté DLC l&amp;#39;approche de Keen est intéressante : à chaque DLC les changements gameplay sont inclus dans le jeu de base pour tout le monde, et acheter le DLC n&amp;#39;ajoute que des éléments cosmétiques (nouveaux blocs statiques ou variations de blocs existants).&lt;/p&gt;
&lt;p&gt;Le combat à pied est l&amp;#39;enfant pauvre. Le combat en véhicules est satisfaisant, mais Space Engineers est certainement le plus fade des FPS qui soit. Pas grave, c&amp;#39;est beaucoup plus amusant de construire une machine de destruction de toute façon.&lt;/p&gt;
&lt;p&gt;Space Engineers a ses défauts, l&amp;#39;UX pourrait être améliorée et comme tout sandbox qui dépend de simulation de physique il y a parfois des bizarreries qui peuvent tout faire échouer de manière spectaculaire et hilarante (ou très frustrante, c&amp;#39;est selon). On appelle ça &amp;quot;Clang&amp;quot;, c&amp;#39;est un peu notre dieu protecteur mais farceur. L&amp;#39;auto-save vous veut du bien.&lt;/p&gt;
&lt;p&gt;Vivement recommandé.&lt;/p&gt;
</description>
		<pubDate>Sat, 04 Jan 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/01/04/impressions_space_engineers.html</guid>
	</item>
	<item>
		<title>Le bug du 31/12/2024, disponible également sur OneWeb</title>
		<link>https://blog.jkbockstael.be/posts/2025/01/03/bug_oneweb.html</link>
		<description>&lt;h1 id="le-bug-du-31122024-disponible-également-sur-oneweb"&gt;Le bug du 31/12/2024, disponible également sur OneWeb&lt;/h1&gt;
&lt;p&gt;Le service OneWeb d&amp;#39;Eutelsat a été inopérant pendant deux jours à cause d&amp;#39;une mauvaise prise en compte des années bissextiles.&lt;/p&gt;
&lt;p&gt;J&amp;#39;avais mentionné sur ce blog &lt;a href="/posts/2009/01/01/bug_zune.html"&gt;un bug sûrement similaire&lt;/a&gt; qui avait plongé les Zune 30 de Microsoft dans une boucle infinie à partir du 31 décembre puisqu&amp;#39;il a la sale caractéristique d&amp;#39;être le 366ème jour de l&amp;#39;année. À l&amp;#39;époque on a très vite eu accès au &lt;a href="https://web.archive.org/web/20091229210220/http://pastie.org/349916"&gt;code du driver fautif&lt;/a&gt; développé par Freescale pour Microsoft, dans lequel se trouvait la boucle en question.&lt;/p&gt;
&lt;p&gt;Il est peu probable qu&amp;#39;Eutelsat nous livre une telle transparence, mais son &lt;a href="https://www.eutelsat.com/en/news/press.html#/pressreleases/eutelsat-statement-on-oneweb-temporary-outage-3362232"&gt;communiqué&lt;/a&gt; laisse penser qu&amp;#39;on est face au même genre de situation. Heureusement le problème était au sol, c&amp;#39;est plus simple à patcher qu&amp;#39;une boucle infinie en orbite basse.&lt;/p&gt;
&lt;p&gt;J&amp;#39;aime bien ces moments, ils font du bien à mon syndrome de l&amp;#39;imposteur.&lt;/p&gt;
</description>
		<pubDate>Fri, 03 Jan 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/01/03/bug_oneweb.html</guid>
	</item>
	<item>
		<title>Ce blog et les LLM</title>
		<link>https://blog.jkbockstael.be/posts/2025/01/02/ce_blog_et_les_llm.html</link>
		<description>&lt;h1 id="ce-blog-et-les-llm"&gt;Ce blog et les LLM&lt;/h1&gt;
&lt;p&gt;Rien de ce qui est accessible sur ce domaine ne peut être utilisé pour alimenter des LLM, simplement parce que je le refuse.&lt;/p&gt;
&lt;p&gt;On est en janvier et comme je le disais hier j&amp;#39;ai l&amp;#39;intention de continuer sur la trajectoire de resurrection de ce blog entamée en 2024, donc d&amp;#39;écrire beaucoup plus. Seulement voilà : j&amp;#39;écris pour des gens, pas pour du capital. Or s&amp;#39;il y a bien quelque chose qui excite le capital ces dernières années c&amp;#39;est les LLM, les annonces sont grandioses et les valorisations encore plus.&lt;/p&gt;
&lt;p&gt;Je suis propriétaire de tout ce que j&amp;#39;écris, par la simple vertu d&amp;#39;en être l&amp;#39;auteur. Je publie moi-même donc nous ne sommes pas ici dans un situation où en utilisant une plateforme j&amp;#39;aurais cédé mes droits à Facebook ou similaire.&lt;/p&gt;
&lt;p&gt;Comme je suis l&amp;#39;auteur et que je détiens les droits je suis libre de décider au cas par cas comment on peut utiliser mes textes. C&amp;#39;est ainsi que j&amp;#39;ai décidé que certains articles seraient sous license Creative Commons, en particulier &lt;a href="/tags/ccby/"&gt;CC-BY&lt;/a&gt; (tu peux l&amp;#39;utiliser dans ton travail mais il faut me citer), &lt;a href="/tags/ccbysa/"&gt;CC-BY-SA&lt;/a&gt; (la même mais en plus ton dérivé devra porter la même license), ou &lt;a href="/tags/ccbync/"&gt;CC-BY-NC&lt;/a&gt; (la même mais je t&amp;#39;interdis un usage commercial).&lt;/p&gt;
&lt;p&gt;Tout le reste est sous license &amp;quot;VA CHIER C&amp;#39;EST À MOI&amp;quot;.&lt;/p&gt;
&lt;p&gt;Ça devrait être l&amp;#39;évidence mais le monde est devenu con donc on va le répéter : ce n&amp;#39;est pas parce que c&amp;#39;est publié que c&amp;#39;est libre de droits. Je suis le détenteur des droits, je me les réserve. Si tu as besoin de droits sur mon travail je suis joignable et nous pouvons discuter.&lt;/p&gt;
&lt;p&gt;Il y a beaucoup de choses qu&amp;#39;on peut reprocher aux LLM en tous genres, même s&amp;#39;ils peuvent éventuellement avoir une utilité dans l&amp;#39;un ou l&amp;#39;autre usage de niche. Il y a l&amp;#39;impact environnemental, la merdification du Web accélérée par ces générateurs de textes plausibles, les dangers de la prolifération de textes plausibles dans la forme mais incorrects dans le fond, l&amp;#39;amplification de biais, et bien entendu les problèmes éthiques.&lt;/p&gt;
&lt;p&gt;Là où je deviens particulièrement tendu c&amp;#39;est quand je vois des OpenAI et consorts faire du scraping massif à très grande échelle pour fabriquer leurs perroquets stochastiques, au mépris le plus total du droit d&amp;#39;auteur et des &lt;code&gt;robots.txt&lt;/code&gt;. Ils pompent littéralement &lt;em&gt;tout le Web&lt;/em&gt; pour en faire des machins qu&amp;#39;ils vendent, et quand on leur dit que c&amp;#39;est quand même pas cool de ne pas rémunérer les auteurs qui rendent possible tout ça ils répliquent que les LLM ne peuvent pas être commercialement rentables si on rémunère les auteurs. Tout simplement. &lt;/p&gt;
&lt;p&gt;Donc demain je vais aller voler une Ferrari, dire que je ne peux pas la payer parce que je n&amp;#39;en ai pas les moyens donc je la vole, et on va me dire &amp;quot;ah oui OK, ben fais donc&amp;quot; au nom d&amp;#39;une prétendue innovation. Non, c&amp;#39;est pas comme ça que ça marche ? En effet, ce n&amp;#39;est pas comme ça que ça marche.&lt;/p&gt;
&lt;p&gt;Donc pour clarifier :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Je suis l&amp;#39;unique détenteur des droits sur l&amp;#39;entièreté de ce qui est accessible sur ce domaine&lt;/li&gt;
&lt;li&gt;J&amp;#39;en autorise la récupération par des moyens automatiques, entre autres pour l&amp;#39;indexation effectée par des moteurs de recherche&lt;/li&gt;
&lt;li&gt;Je n&amp;#39;en autorise PAS l&amp;#39;usage à des fins commerciales quelles qu&amp;#39;elles soient&lt;/li&gt;
&lt;li&gt;En particulier je n&amp;#39;autorise personne à utiliser quoi que ce soit de ce domaine afin d&amp;#39;alimenter un LLM&lt;/li&gt;
&lt;li&gt;Je peux accorder une license non-exclusive, révocable, et non-transférable pour la modique somme de 1000€ par caractère par lecture (à payer dans les 30 jours calendriers qui suivent la lecture)&lt;/li&gt;
&lt;li&gt;Récupérer automatiquement du contenu depuis ce domaine afin d&amp;#39;alimenter un LLM revient à accepter ces conditions (et le paiement qui va avec)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Comme ça c&amp;#39;est clair.&lt;/p&gt;
</description>
		<pubDate>Thu, 02 Jan 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/01/02/ce_blog_et_les_llm.html</guid>
	</item>
	<item>
		<title>C'est reparti pour un tour</title>
		<link>https://blog.jkbockstael.be/posts/2025/01/01/reparti_pour_un_tour.html</link>
		<description>&lt;h1 id="cest-reparti-pour-un-tour"&gt;C&amp;#39;est reparti pour un tour&lt;/h1&gt;
&lt;p&gt;Subitement nous voilà en janvier, pas eu le temps de voir venir tout ça.&lt;/p&gt;
&lt;p&gt;2024 était une bonne année, finalement, même si beaucoup d&amp;#39;idées et de projets ne se sont pas réalisés. De toute évidence je n&amp;#39;ai pas (encore) achevé mes solutions détaillées aux problèmes Advent Of Code entamées il y a exactement un an, mais j&amp;#39;ai remis en activité le blog alors qu&amp;#39;il était devenu dormant et ça c&amp;#39;est quand même pas mal. Il y aura eu une quarantaine de posts au cours de l&amp;#39;année, ça aussi c&amp;#39;est pas mal.&lt;/p&gt;
&lt;p&gt;Une quarantaine c&amp;#39;est aussi le nombre d&amp;#39;années qui se sont écoulées depuis ma naissance. On dit &amp;quot;monsieur&amp;quot; maintenant, merci.&lt;/p&gt;
&lt;p&gt;Pour la peine j&amp;#39;ai aussi cet automne repris une pratique sportive bien que légère en intégrant avec ma moitié un groupe de Baskin, une variante inclusive du basketball dont &lt;a href="https://baskin.fr/comprendre/les-regles-du-baskin/"&gt;les règles et l&amp;#39;équipement&lt;/a&gt; permettent d&amp;#39;intégrer au sein d&amp;#39;une même équipe des joueurs de tous genres, âges, et capacités. La discipline &lt;a href="https://www.baskin.it/"&gt;vient d&amp;#39;Italie&lt;/a&gt; et se propage de plus en plus même si à ma connaisance il n&amp;#39;y a à ce jour que deux clubs en Wallonie qui la proposent.&lt;/p&gt;
&lt;p&gt;On va donc essayer de continuer sur cette voie pour 2025, sans promesse mais avec bonne volonté.&lt;/p&gt;
&lt;p&gt;D&amp;#39;abord faire du nettoyage dans les onglets ouverts, littéralement et non, puis mettre en place de l&amp;#39;organisation pour avoir une vue plus claire jusqu&amp;#39;aux horizons. Ensuite profiter de cette clarté pour reprendre en main des projets laissés sur le côté. No spoilers, ça verra le jour quand ça verra le jour.&lt;/p&gt;
&lt;p&gt;Une chose à la fois.&lt;/p&gt;
</description>
		<pubDate>Wed, 01 Jan 2025 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2025/01/01/reparti_pour_un_tour.html</guid>
	</item>
	<item>
		<title>Bloguidien : science approximative</title>
		<link>https://blog.jkbockstael.be/posts/2024/11/15/bloguidien_science_approximative.html</link>
		<description>&lt;h1 id="bloguidien--science-approximative"&gt;Bloguidien : science approximative&lt;/h1&gt;
&lt;p&gt;Le sujet &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt; du jour est : &amp;quot;[science approximative] Sans te renseigner, explique comment fonctionne la photosynthése (pas sûr du concept)&amp;quot;&lt;/p&gt;
&lt;p&gt;Houlà ça va chercher loin dans les souvenirs ça.&lt;/p&gt;
&lt;p&gt;En gros : l&amp;#39;énergie de la lumière du soleil provoque une réaction d&amp;#39;oxydoréduction qui prend du CO2 et de l&amp;#39;eau en entrée et donne de l&amp;#39;oxygène et des composés carbonés en sortie. En gros. Ne me citez pas.&lt;/p&gt;
&lt;p&gt;Et évitez de faire de la science approximative en général. Dans notre époque où l&amp;#39;immédiat est roi la tentation est grande de faire des approximations à tous étages, mais je pense que c&amp;#39;est là la source de bien des problèmes commun auxquels nos sociétés font face. Prenons le temps de comprendre, d&amp;#39;aller jusqu&amp;#39;au bout. Quel que soit le sujet.&lt;/p&gt;
&lt;p&gt;Savoir, au lieu de seulement croire.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ce post fait partie d&amp;#39;une &lt;a href="/tags/bloguidien/"&gt;série&lt;/a&gt; dans le cadre du &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt;, une inspiration à l&amp;#39;écriture quotidienne à l&amp;#39;initiative de &lt;a href="https://lord.re"&gt;Lord&lt;/a&gt; et &lt;a href="https://dryusdan.space/"&gt;Dryusdan&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Fri, 15 Nov 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/11/15/bloguidien_science_approximative.html</guid>
	</item>
	<item>
		<title>Bloguidien : artiste</title>
		<link>https://blog.jkbockstael.be/posts/2024/11/14/bloguidien_artiste.html</link>
		<description>&lt;h1 id="bloguidien--artiste"&gt;Bloguidien : artiste&lt;/h1&gt;
&lt;p&gt;Le sujet &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt; du jour est : &amp;quot;Un artiste que tu adores, pourquoi ?&amp;quot;&lt;/p&gt;
&lt;p&gt;Je vis avec.&lt;/p&gt;
&lt;p&gt;Ma meilleure moitié est photographe d&amp;#39;art (ce qui fait clairement partie des moins lucratives des carrières possibles). Elle travaille entièrement en argentique, sur du matériel qu&amp;#39;on pourrait qualifier de vintage, toujours sans préparation ou mise en scène, et fréquemment avec des techniques qui ajoutent un bonne dose d&amp;#39;imprévisible (films préparés, double exposition, …). Elle a le don de trouver le beau dans l&amp;#39;ordinaire, de porter son regard sur ce qu&amp;#39;on ne remarque habituellement pas, de plonger dans le flou tout le reste pour faire d&amp;#39;un fragment de banal une image pleine de poésie qui au lieu de raconter une histoire laisse le lecteur l&amp;#39;écrire.&lt;/p&gt;
&lt;p&gt;Vous pouvez aller voir ses photos &lt;a href="https://www.instagram.com/leon.analog/"&gt;sur Instagram&lt;/a&gt;, et si ce qui s&amp;#39;y trouve vous parle il y a certaines de ses photos qui sont &lt;a href="https://paa.ge/leonanalog/en"&gt;disponibles à la vente&lt;/a&gt; en tirages d&amp;#39;art de divers formats.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ce post fait partie d&amp;#39;une &lt;a href="/tags/bloguidien/"&gt;série&lt;/a&gt; dans le cadre du &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt;, une inspiration à l&amp;#39;écriture quotidienne à l&amp;#39;initiative de &lt;a href="https://lord.re"&gt;Lord&lt;/a&gt; et &lt;a href="https://dryusdan.space/"&gt;Dryusdan&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Thu, 14 Nov 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/11/14/bloguidien_artiste.html</guid>
	</item>
	<item>
		<title>Bloguidien : rencontre</title>
		<link>https://blog.jkbockstael.be/posts/2024/11/13/bloguidien_rencontre.html</link>
		<description>&lt;h1 id="bloguidien--rencontre"&gt;Bloguidien : rencontre&lt;/h1&gt;
&lt;p&gt;Le sujet &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt; du jour est : &amp;quot;Une rencontre avec une/des personnes qui ont changé ton orientation de vie ou amener à faire ou réaliser un métier ou une activité que tu n&amp;#39;osais jusqu&amp;#39;alors pas faire.&amp;quot;&lt;/p&gt;
&lt;p&gt;Je vais tricher un peu et considérer que &amp;quot;être&amp;quot; est une activité.&lt;/p&gt;
&lt;p&gt;C&amp;#39;était les années glorieuses et insouciantes de l&amp;#39;adolescence. Enfin non, c&amp;#39;était le fiasco et le stress constant de l&amp;#39;adolescence. Naviguer au sein des dynamiques de groupe, du désir d&amp;#39;appartenance et de reconnaissance, du besoin de réalisation de soi sans même vraiment savoir à quoi &amp;quot;soi&amp;quot; ressemble… ouais c&amp;#39;est pas exactement une promenade de santé. C&amp;#39;est sûrement pour ça que même si vu de l&amp;#39;extérieur l&amp;#39;adolescence semble faite entièrement de rebellion et d&amp;#39;anticonformisme, vu de l&amp;#39;intérieur j&amp;#39;en garde plutôt le souvenir d&amp;#39;un effort constant pour adopter l&amp;#39;apparence et l&amp;#39;attitude du groupe au sein duquel on veut être considéré. Tout pouvait être un critère de définition, en pratique les grandes lignes de division dont je me souviens étaient surtout au niveau des divertissements culturels ou actifs: les gens qui écoutent du rock par opposition à ceux qui écoutent du rap, les gens qui font du sport ou ceux qui poncent des jeux vidéo, les joueurs sur PC contre les joueurs sur console… Ça pourrait marcher si les humains entraient proprement dans des catégories ainsi définies, mais nous sommes tous plus ou moins flous et débordons des cases dans tous les sens. J&amp;#39;ai donc caché beaucoup de choses parce qu&amp;#39;elles ne correspondaient pas au stéréotype que je voulais adopter, avec toute la frustration que ça implique.&lt;/p&gt;
&lt;p&gt;Et puis j&amp;#39;ai fait la connaissance de Gilles, qui est certainement la personne la plus sincèrement non-conforme qu&amp;#39;il m&amp;#39;ait été donné de rencontrer. Nous sommes restés amis jusqu&amp;#39;à son décès et presque vingt ans plus tard je sens encore l&amp;#39;influence qu&amp;#39;il a eu sur mon acceptation de la diversité de ce qui m&amp;#39;intéresse et me parle. Pour faire bref c&amp;#39;est traîner avec ce type qui m&amp;#39;a appris que si on est catégorisé &amp;quot;metalleux&amp;quot; d&amp;#39;abord ça n&amp;#39;implique que ceux qui ont prononcé cette catégorisation et ensuite ça n&amp;#39;interdit en rien d&amp;#39;apprécier autre chose et dire en public qu&amp;#39;on l&amp;#39;apprécie. Il jouait de la basse. À la fin de sa vie il jouait à la fois dans un groupe de death metal, un groupe de blues, et un groupe de dub. Il m&amp;#39;a amené à faire quelque chose que je n&amp;#39;osais pas faire avant qu&amp;#39;on traîne ensemble : accepter qui je suis et accepter de le dire, en entier, même ce qui semble contradictoire au reste (il dirait sûrement &amp;quot;surtout&amp;quot; au lieu de &amp;quot;même&amp;quot;).&lt;/p&gt;
&lt;p&gt;Stay true, stay weird.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ce post fait partie d&amp;#39;une &lt;a href="/tags/bloguidien/"&gt;série&lt;/a&gt; dans le cadre du &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt;, une inspiration à l&amp;#39;écriture quotidienne à l&amp;#39;initiative de &lt;a href="https://lord.re"&gt;Lord&lt;/a&gt; et &lt;a href="https://dryusdan.space/"&gt;Dryusdan&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Wed, 13 Nov 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/11/13/bloguidien_rencontre.html</guid>
	</item>
	<item>
		<title>Bloguidien : repas préféré</title>
		<link>https://blog.jkbockstael.be/posts/2024/11/12/bloguidien_repas_prefere.html</link>
		<description>&lt;h1 id="bloguidien--repas-préféré"&gt;Bloguidien : repas préféré&lt;/h1&gt;
&lt;p&gt;Le sujet &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt; du jour est : &amp;quot;Quel est ton repas préféré de la journée, si tu n&amp;#39;en avais qu&amp;#39;un à prendre ?&amp;quot;&lt;/p&gt;
&lt;p&gt;Ce serait celui du soir.&lt;/p&gt;
&lt;p&gt;Dans mes habitudes actuelles je ne prends presque jamais le temps de manger le matin. Je travaille à temps plein donc à midi c&amp;#39;est soit en en vitesse au bureau soit en vitesse en télétravail, donc pas exactement quelque chose que j&amp;#39;apprécie ou souhaite. Partager un repas à midi permet des chouettes conversations avec les collègues, mais le cadre rend le tout bien moins plaisant qu&amp;#39;un repas à domicile.&lt;/p&gt;
&lt;p&gt;Le soir c&amp;#39;est une toute autre ambiance. Le repas du soir est dans le confort du foyer, en bonne compagnie, sans limite de temps. Tous les ingrédients (haha) sont réunis pour composer un moment agréable de partage, au lieu d&amp;#39;être une étape utilitaire pour continuer la journée. C&amp;#39;est bien mieux.&lt;/p&gt;
&lt;p&gt;Et puis le soir je peux comater dans le canapé pendant deux heures sous prétexte de digestion.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ce post fait partie d&amp;#39;une &lt;a href="/tags/bloguidien/"&gt;série&lt;/a&gt; dans le cadre du &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt;, une inspiration à l&amp;#39;écriture quotidienne à l&amp;#39;initiative de &lt;a href="https://lord.re"&gt;Lord&lt;/a&gt; et &lt;a href="https://dryusdan.space/"&gt;Dryusdan&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Tue, 12 Nov 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/11/12/bloguidien_repas_prefere.html</guid>
	</item>
	<item>
		<title>Bloguidien : télévision</title>
		<link>https://blog.jkbockstael.be/posts/2024/11/11/bloguidien_television.html</link>
		<description>&lt;h1 id="bloguidien--télévision"&gt;Bloguidien : télévision&lt;/h1&gt;
&lt;p&gt;Le sujet &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt; du jour est : &amp;quot;Quel rapport entretenez-vous avec la télévision ?&amp;quot;&lt;/p&gt;
&lt;p&gt;Aucun.&lt;/p&gt;
&lt;p&gt;Je ne regarde presque jamais la télévision. Il y a une TV (l&amp;#39;objet) dans le salon et elle est souvent allumée mais ne diffuse presque jamais une programme d&amp;#39;une chaîne de TV en direct. Beaucoup de vidéos à la demande, ça oui, même si peu de films ou de séries. Des fois je regarde des rencontres sportives pour l&amp;#39;aspect social. Je n&amp;#39;entretien aucun rapport avec la télévision.&lt;/p&gt;
&lt;p&gt;Un rapport de dégoût tout au plus.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ce post fait partie d&amp;#39;une &lt;a href="/tags/bloguidien/"&gt;série&lt;/a&gt; dans le cadre du &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt;, une inspiration à l&amp;#39;écriture quotidienne à l&amp;#39;initiative de &lt;a href="https://lord.re"&gt;Lord&lt;/a&gt; et &lt;a href="https://dryusdan.space/"&gt;Dryusdan&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Mon, 11 Nov 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/11/11/bloguidien_television.html</guid>
	</item>
	<item>
		<title>Bloguidien : logiciel idéal</title>
		<link>https://blog.jkbockstael.be/posts/2024/11/10/bloguidien_logiciel_ideal.html</link>
		<description>&lt;h1 id="bloguidien--logiciel-idéal"&gt;Bloguidien : logiciel idéal&lt;/h1&gt;
&lt;p&gt;Le sujet &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt; du jour est : &amp;quot;Quel logiciel aimeriez vous qu&amp;#39;il existe ?&amp;quot;&lt;/p&gt;
&lt;p&gt;Un logiciel pour créer des sites Web en autonomie.&lt;/p&gt;
&lt;p&gt;Qu&amp;#39;on se comprenne bien : je parle ici d&amp;#39;un logiciel libre qui s&amp;#39;exécute localement et qui permette à des utilisateurs non-techniciens de créer un site Web sans assistance, le modifier à leur guise, et surtout l&amp;#39;héberger soi-même sans dépendre d&amp;#39;un prestataire tiers. Tant qu&amp;#39;on n&amp;#39;aura pas réglé ce dernier point il y a aura toujours la dépendance à un fournisseur et des étapes techniques intimidantes ou pénibles qui rendront plus attrayante l&amp;#39;option de juste faire une page Facebook.&lt;/p&gt;
&lt;p&gt;Le Web a été mangé par le capitalisme de surveillance et la merdification des plateformes (ou leur décès). Nous devons le recapturer pour rendre à ses usagers ce qui en est l&amp;#39;essence la plus fondamentale : la possibilité d&amp;#39;y publier ce qu&amp;#39;on veut, en gardant le contrôle. C&amp;#39;était un peu la promesse mensongère du &amp;quot;Web 2.0&amp;quot; où chaque visiteur serait également auteur, on aurait du se méfier quand ils se sont mis à parler de &amp;quot;contenu&amp;quot; et limiter les liens sortants. Il n&amp;#39;est peut-être pas trop tard.&lt;/p&gt;
&lt;p&gt;Le Web est à nous, pas aux GAFAM.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ce post fait partie d&amp;#39;une &lt;a href="/tags/bloguidien/"&gt;série&lt;/a&gt; dans le cadre du &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt;, une inspiration à l&amp;#39;écriture quotidienne à l&amp;#39;initiative de &lt;a href="https://lord.re"&gt;Lord&lt;/a&gt; et &lt;a href="https://dryusdan.space/"&gt;Dryusdan&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Sun, 10 Nov 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/11/10/bloguidien_logiciel_ideal.html</guid>
	</item>
	<item>
		<title>Bloguidien : Noël</title>
		<link>https://blog.jkbockstael.be/posts/2024/11/09/bloguidien_noel.html</link>
		<description>&lt;h1 id="bloguidien--noël"&gt;Bloguidien : Noël&lt;/h1&gt;
&lt;p&gt;Le sujet &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt; du jour est : &amp;quot;Qu&amp;#39;est ce que tu détestes dans la période de noël ?&amp;quot;&lt;/p&gt;
&lt;p&gt;Ce n&amp;#39;est pas la frénésie commerciale, ni les musiques en boucle partout, ni l&amp;#39;esthétique rouge-vert-doré partout, et curieusement pas le jour du pull moche au bureau. Non. C&amp;#39;est l&amp;#39;injonction aux rassemblement familiaux.&lt;/p&gt;
&lt;p&gt;C&amp;#39;est &lt;em&gt;le&lt;/em&gt; moment de l&amp;#39;année où on ne pense même pas qu&amp;#39;il soit possible de faire autrement. Il &lt;em&gt;faut&lt;/em&gt; rassembler toute la famille à un même endroit et il &lt;em&gt;faut&lt;/em&gt; passer du temps tous ensemble à faire semblant d&amp;#39;être contents d&amp;#39;être là parce qu&amp;#39;il &lt;em&gt;faut&lt;/em&gt; ne surtout pas &amp;quot;gâcher la fête&amp;quot;. Même sans l&amp;#39;intervention de l&amp;#39;oncle raciste tendance alcoolique c&amp;#39;est pénible.&lt;/p&gt;
&lt;p&gt;Je pourrais parler de l&amp;#39;injonction que représente le concept même de &amp;quot;famille&amp;quot;, du caractère indiscutable de cette structure, d&amp;#39;à quel point on est un monstre si on a l&amp;#39;outrecuidance de remettre tout ça en question. C&amp;#39;est un autre sujet.&lt;/p&gt;
&lt;p&gt;En ce qui me concerne j&amp;#39;ai réduit &lt;em&gt;ma&lt;/em&gt; définition de &amp;quot;famille&amp;quot; au cercle immédiat qui vit sous le même toît que moi. Oui c&amp;#39;est peu, mais au moins c&amp;#39;est composé à 100% de gens que j&amp;#39;aime et dont je recherche la compagnie. Vu comme ça c&amp;#39;est presque la même chose que mes amis : le choix est important.&lt;/p&gt;
&lt;p&gt;Il paraît qu&amp;#39;on choisit ses amis mais pas sa famille ; ben en fait si, on peut. Ça a été un long chemin en ce qui me concerne pour arriver à cette réalisation, mais ça vaut le coup.&lt;/p&gt;
&lt;p&gt;Ne vous forcez pas.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ce post fait partie d&amp;#39;une &lt;a href="/tags/bloguidien/"&gt;série&lt;/a&gt; dans le cadre du &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt;, une inspiration à l&amp;#39;écriture quotidienne à l&amp;#39;initiative de &lt;a href="https://lord.re"&gt;Lord&lt;/a&gt; et &lt;a href="https://dryusdan.space/"&gt;Dryusdan&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Sat, 09 Nov 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/11/09/bloguidien_noel.html</guid>
	</item>
	<item>
		<title>Bloguidien : film à budget illimité</title>
		<link>https://blog.jkbockstael.be/posts/2024/11/08/bloguidien_film_a_budget_illimite.html</link>
		<description>&lt;h1 id="bloguidien--film-à-budget-illimité"&gt;Bloguidien : film à budget illimité&lt;/h1&gt;
&lt;p&gt;Le sujet &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt; du jour est : &amp;quot;Budget illimité et on vous fait confiance avec une équipe avec de l&amp;#39;expérience : quel film vous réalisez ?&amp;quot;&lt;/p&gt;
&lt;p&gt;Déjà je fais réaliser, je ne pense pas que je serais un bon réalisateur.&lt;/p&gt;
&lt;p&gt;Ensuite ce serait certainement quelque chose sur les oubliées de l&amp;#39;informatique, parce que ça m&amp;#39;agace que ce domaine soit devenu un tel boys&amp;#39; club alors qu&amp;#39;il repose sur les travaux de femmes illustres. Le disparité de genre est un non-sens quel que soit le métier, la façon dont on l&amp;#39;amplifie en informatique est un scandale. Donc je pense qu&amp;#39;il est important de mettre en lumières celles qui ont été importantes dans l&amp;#39;histoire et dans le présent de l&amp;#39;informatique. Moins d&amp;#39;Alan Turing, plus de Margaret Hamilton.&lt;/p&gt;
&lt;p&gt;Allez lire &lt;a href="https://nowebwithoutwomen.com/"&gt;No Web Without Women&lt;/a&gt;, déjà.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ce post fait partie d&amp;#39;une &lt;a href="/tags/bloguidien/"&gt;série&lt;/a&gt; dans le cadre du &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt;, une inspiration à l&amp;#39;écriture quotidienne à l&amp;#39;initiative de &lt;a href="https://lord.re"&gt;Lord&lt;/a&gt; et &lt;a href="https://dryusdan.space/"&gt;Dryusdan&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Fri, 08 Nov 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/11/08/bloguidien_film_a_budget_illimite.html</guid>
	</item>
	<item>
		<title>Bloguidien : refonder sur une autre planète</title>
		<link>https://blog.jkbockstael.be/posts/2024/11/07/bloguidien_refonder_sur_une_autre_planete.html</link>
		<description>&lt;h1 id="bloguidien--refonder-sur-une-autre-planète"&gt;Bloguidien : refonder sur une autre planète&lt;/h1&gt;
&lt;p&gt;Le sujet &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt; du jour est : &amp;quot;Si demain on cherchait des passagers pour refonder la civilisation sur une autre planète, tu es partant ?&amp;quot;&lt;/p&gt;
&lt;p&gt;Formulé de la sorte c&amp;#39;est la garantie d&amp;#39;une mort horrible après des mois de pénitence, donc non.&lt;/p&gt;
&lt;p&gt;Parce que bon la science-fiction c&amp;#39;est beau et je ne suis pas le dernier à l&amp;#39;apprécier, tout comme je ne suis pas le dernier à apprécier des jeux de gestion sur cette formule de colonisation interplanétaire, mais une contrainte se dégage même des représentations les plus optimistes : une colonie sur Terre fonctionne sous perfusion pendant des décennies avant d&amp;#39;être auto-suffisante, une colonie sur une autre planète ne serait potentiellement &lt;em&gt;jamais&lt;/em&gt; auto-suffisante (par exemple pour des broutilles comme l&amp;#39;absence d&amp;#39;une magnétosphère digne de ce nom, au hasard). Dans le pire des cas on n&amp;#39;a pas le soutien logistique qu&amp;#39;il faut au rythme qu&amp;#39;il faut pour garantir la survie des colons, dans le meilleur des cas ces colons se retrouvent à avoir le train de vie le plus inefficient qu&amp;#39;il soit possible d&amp;#39;imaginer. On est d&amp;#39;accord que ce serait une aberration énergétique d&amp;#39;importer un kilogramme de sucre par avion depuis un autre continent, hein ? Ça reste très loin de ce que ça coûterait de l&amp;#39;envoyer sur une autre planète.&lt;/p&gt;
&lt;p&gt;Plus jeune j&amp;#39;aurais dit oui, sans doute ; j&amp;#39;étais plein de rêves et d&amp;#39;illusions techno-optimistes, je n&amp;#39;avais pas d&amp;#39;attache. À présent c&amp;#39;est certain que je dirais non même si j&amp;#39;en avais la possibilité. On ne commencerait pas par réparer cette planète-ci avant de penser à en détruire une autre ? Comme l&amp;#39;a bien dit je ne sais plus qui : on n&amp;#39;arrivera jamais à terraformer Mars, mais on est en bonne voie pour vénusformer la Terre. Concentrons nos efforts sur l&amp;#39;unique planète qui ait été colonisée par des humains. Merci.&lt;/p&gt;
&lt;p&gt;Alors oui ça n&amp;#39;envoie pas du rêve, mais ça a le mérite d&amp;#39;exister.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ce post fait partie d&amp;#39;une &lt;a href="/tags/bloguidien/"&gt;série&lt;/a&gt; dans le cadre du &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt;, une inspiration à l&amp;#39;écriture quotidienne à l&amp;#39;initiative de &lt;a href="https://lord.re"&gt;Lord&lt;/a&gt; et &lt;a href="https://dryusdan.space/"&gt;Dryusdan&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Thu, 07 Nov 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/11/07/bloguidien_refonder_sur_une_autre_planete.html</guid>
	</item>
	<item>
		<title>Bloguidien : chat ou chien</title>
		<link>https://blog.jkbockstael.be/posts/2024/11/06/bloguidien_chat_ou_chien.html</link>
		<description>&lt;h1 id="bloguidien--chat-ou-chien"&gt;Bloguidien : chat ou chien&lt;/h1&gt;
&lt;p&gt;Le sujet &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt; du jour est : &amp;quot;Chat ou Chien, quelle est ta préférence et pourquoi ?&amp;quot;&lt;/p&gt;
&lt;p&gt;Ah les bonnes vieilles guerres de religion. Toujours subjectif, toujours stérile.&lt;/p&gt;
&lt;p&gt;Au cours de ma vie j&amp;#39;ai eu les deux (des chats et des chiens, mais ça marche aussi avec du subjectif et du stérile) et je trouve que les deux se valent (là aussi). Quand on adopte un animal de compagnie ce n&amp;#39;est pas juste parce qu&amp;#39;on aime nettoyer, payer cher de la bouffe qui pue, ou être en peine au moment inévitable de son décès. Non, ce qu&amp;#39;on cherche est dans le nom : de la compagnie. Et pour ça les chats comme les chiens font preuve d&amp;#39;attachement et on peut établir une relation avec eux bien que les modes d&amp;#39;expression des uns soient très différents de ceux des autres.&lt;/p&gt;
&lt;p&gt;Par contre là où dans mon expérience il y a une grande différence c&amp;#39;est sur l&amp;#39;enthousiasme. Le chat est content d&amp;#39;être là, il apprécie et cherche ta compagnie, il a des gestes d&amp;#39;affection. Le chien c&amp;#39;est pareil, mais avec l&amp;#39;enthousiasme qu&amp;#39;on peut attendre d&amp;#39;un petit enfant dans un magasin de jouets qui y croiserait par surprise son grand-parent préféré, un gâteau au chocolat, et un poney. Le chat est content et le montre, le chien est explosivement joyeux. Quelque part c&amp;#39;est cohérent avec d&amp;#39;autres aspects plus canins que félins : la curiosité de tout, la tendance à aller vers l&amp;#39;inconnu et les inconnus, l&amp;#39;invitation au jeu à tout bout de champ, un certain optimisme je dirais.&lt;/p&gt;
&lt;p&gt;Soyons un peu plus comme les chiens.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ce post fait partie d&amp;#39;une &lt;a href="/tags/bloguidien/"&gt;série&lt;/a&gt; dans le cadre du &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt;, une inspiration à l&amp;#39;écriture quotidienne à l&amp;#39;initiative de &lt;a href="https://lord.re"&gt;Lord&lt;/a&gt; et &lt;a href="https://dryusdan.space/"&gt;Dryusdan&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Wed, 06 Nov 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/11/06/bloguidien_chat_ou_chien.html</guid>
	</item>
	<item>
		<title>Bloguidien : side project</title>
		<link>https://blog.jkbockstael.be/posts/2024/11/05/bloguidien_side_project.html</link>
		<description>&lt;h1 id="bloguidien--side-project"&gt;Bloguidien : side project&lt;/h1&gt;
&lt;p&gt;Le sujet &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt; du jour est : &amp;quot;Donne nous un de tes sides project méconnu mais que t&amp;#39;aimerais bien partager ?&amp;quot;&lt;/p&gt;
&lt;p&gt;Au diable les side projects.&lt;/p&gt;
&lt;p&gt;Si on parle bien de la définition habituelle de side-projects qu&amp;#39;on a dans le milieu tech, à savoir des projets de développements qu&amp;#39;on publie en open-source sur GitHub la plupart du temps, ce n&amp;#39;est jamais que du travail gratuit. Notons au passage que la question est posée au pluriel. Ce n&amp;#39;est pas tout d&amp;#39;avoir un projet pour travailler quand on ne travaille pas, il faut en avoir plusieurs ! Et puis il y a un côté obsessionnel qui me chatouille : je produis du logiciel pendant mon temps de travail, est-ce vraiment une bonne uilisation de mon temps libre que d&amp;#39;y faire encore plus de la même chose ?&lt;/p&gt;
&lt;p&gt;Il y a aussi cette pression dans le milieu du recrutement pour avoir des side-projects. Apparemment avoir une formation ou de l&amp;#39;expérience professionnelle ne suffit plus, il faut aussi &amp;quot;contribuer à des projets open-source&amp;quot; dans son temps libre et c&amp;#39;est encore mieux si on &lt;em&gt;initie&lt;/em&gt; des projets open-source dans son temps libre. Je reste persuadé que cette injonction est à l&amp;#39;origine d&amp;#39;une proportion non négligeable de &amp;quot;l&amp;#39;écosystème JavaScript&amp;quot;. On m&amp;#39;a déjà reproché en entretien d&amp;#39;embauche que le code que je publie sur GitHub est &amp;quot;surtout des puzzles&amp;quot; ; j&amp;#39;aurais dû deviner bien sûr quand on te fait suer sur un problème de chez LeetCode pendant l&amp;#39;entretien c&amp;#39;est waw trop bien Google le fait hashtag talent management emoji bras costaud emoji fusée, par contre si tu le fait spontanément comme vague hobby c&amp;#39;est mal et tu devrais plutôt créer un machin qui récolte plein d&amp;#39;étoiles.&lt;/p&gt;
&lt;p&gt;Donc je refuse d&amp;#39;avoir des side-projects. Je refuse de gâcher mon temps libre à effectuer une danse de plus pour entrer dans le moule de ce que des recruteurs imaginent être un programmeur. Excusez-moi d&amp;#39;avoir des intérêts variés, excusez-moi d&amp;#39;avoir une vie sociale, excusez-moi de prendre du repos.&lt;/p&gt;
&lt;p&gt;Par contre je fais des trucs, ça oui. Peut-être que j&amp;#39;en parlerai un jour.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ce post fait partie d&amp;#39;une &lt;a href="/tags/bloguidien/"&gt;série&lt;/a&gt; dans le cadre du &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt;, une inspiration à l&amp;#39;écriture quotidienne à l&amp;#39;initiative de &lt;a href="https://lord.re"&gt;Lord&lt;/a&gt; et &lt;a href="https://dryusdan.space/"&gt;Dryusdan&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Tue, 05 Nov 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/11/05/bloguidien_side_project.html</guid>
	</item>
	<item>
		<title>Bloguidien : fun fact</title>
		<link>https://blog.jkbockstael.be/posts/2024/11/04/bloguidien_fun_fact.html</link>
		<description>&lt;h1 id="bloguidien--fun-fact"&gt;Bloguidien : fun fact&lt;/h1&gt;
&lt;p&gt;Le sujet &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt; du jour est : &amp;quot;Donnez un fun fact aléatoire.&amp;quot;&lt;/p&gt;
&lt;p&gt;Ah oui je sais, j&amp;#39;en ai un qui est super rigolo : un bug de concurrence a provoqué la mort de quatre personnes et des séquelles à vie pour deux autres. &lt;a href="https://fr.wikipedia.org/wiki/Therac-25"&gt;Oui, pour de vrai&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Ça calme, hein ?&lt;/p&gt;
&lt;p&gt;Les logiciels ne sont pas anodins. Même sans aller jusqu&amp;#39;à des logiciels contrôlant des machines qui peuvent tuer, comme celui évoqué ici, nous sommes entourés d&amp;#39;un grand nombre de programmes en permanence. Ils ont plus ou moins d&amp;#39;importance, leur impact est plus ou moins significatif, leur absence serait plus ou moins remarquée… mais il sont là. Ils sont nombreux, ils sont pour certains interconnectés, ils ont de l&amp;#39;influence sur notre vie minute après minute. Pourtant on les considère habituellement comme un &amp;quot;ailleurs&amp;quot;, comme on parle de ce qui se passe en ligne en le mettant en opposition à &amp;quot;la vraie vie&amp;quot;. L&amp;#39;écran est une frontière, semble-t-il.&lt;/p&gt;
&lt;p&gt;Le problème c&amp;#39;est que quand on considère que les logiciels composent une catégorie &amp;quot;virtuelle&amp;quot; qui ne ferait pas partie de &amp;quot;la vraie vie&amp;quot; on s&amp;#39;empêche de penser à l&amp;#39;impact qu&amp;#39;ils peuvent avoir sur les vies bien réelles de gens bien réels, et en conséquence on s&amp;#39;interdit d&amp;#39;accorder à la conception et la réalisation de ces logiciels la rigueur nécessaire pour garantir leur qualité. En bref : si on construisait les ponts de la même manière qu&amp;#39;on construit les logiciels, les fleuves seraient autant des frontières infranchissables.&lt;/p&gt;
&lt;p&gt;Après quinze ans en tant que professionnel du murmure à l&amp;#39;oreille des ordinateurs je suis très tendu quand je vois des gens se présenter comme &amp;quot;software engineer&amp;quot;, alors qu&amp;#39;on ne cesse de bricoler des machins à partir d&amp;#39;éléments récupérés de source louche ou inventés sur un coin de table sans la moindre vérification (si ça compile c&amp;#39;est que tout va bien, hein) et qu&amp;#39;on blague sur le fait qu&amp;#39;il ne faut pas déployer en production un vendredi parce que &lt;em&gt;évidemment&lt;/em&gt; une mise en production ne peut que révéler des problèmes qu&amp;#39;il va falloir résoudre avec autant de bricolages hâtifs encore moins vérifiés. Prenez un instant pour faire un inventaire mental du nombre de bugs rencontrés au cours d&amp;#39;une journée ; prenez un instant pour mesurer à quel point on a internalisé que c&amp;#39;est &lt;em&gt;normal&lt;/em&gt; que les logiciels défaillent tout le temps dans tous les sens, au point que ça devient un réflexe de juste relancer le machin à partir de zéro. Ensuite pensez à l&amp;#39;absence totale de prise de responsabilité par toute la chaîne humaine qui a mené à ce gros tas de merde. C&amp;#39;est de l&amp;#39;ingénierie ça ?&lt;/p&gt;
&lt;p&gt;Nous ne sommes pas des ingénieurs, mais nous gagnerions tous à essayer de nous comporter comme des ingénieurs.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ce post fait partie d&amp;#39;une &lt;a href="/tags/bloguidien/"&gt;série&lt;/a&gt; dans le cadre du &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt;, une inspiration à l&amp;#39;écriture quotidienne à l&amp;#39;initiative de &lt;a href="https://lord.re"&gt;Lord&lt;/a&gt; et &lt;a href="https://dryusdan.space/"&gt;Dryusdan&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Mon, 04 Nov 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/11/04/bloguidien_fun_fact.html</guid>
	</item>
	<item>
		<title>Bloguidien : destination en France</title>
		<link>https://blog.jkbockstael.be/posts/2024/11/03/bloguidien_destination_en_france.html</link>
		<description>&lt;h1 id="bloguidien--destination-en-france"&gt;Bloguidien : destination en France&lt;/h1&gt;
&lt;p&gt;Le sujet &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt; du jour est : &amp;quot;Une destination de vacance en France que tu as beaucoup apprécié (en évitant l’avion)&amp;quot;&lt;/p&gt;
&lt;p&gt;Ah ben on voit que l&amp;#39;initiative vient de Français hein, bravo les chauvins c&amp;#39;est du propre ! Non, en vrai on s&amp;#39;en fout, la question a sa pertinence et ce serait mentir de dire qu&amp;#39;il n&amp;#39;y a pas des endroits en France qui m&amp;#39;ont laissé un bon souvenir.&lt;/p&gt;
&lt;p&gt;Donc je dirais : l&amp;#39;Alsace.&lt;/p&gt;
&lt;p&gt;J&amp;#39;ai un fameux biais (mais bon la question est totalement subjective donc ça va) vu que j&amp;#39;ai habité à Strasbourg pendant une partie de mes études (Louis Pasteur ma gueule) et gardé des amis dans le coin, mais cette région combine des aspects qui me plaisent : ce n&amp;#39;est pas loin de la Belgique, le climat est cool, la bouffe est du genre simple et gras, les braseurs savent ce qu&amp;#39;ils font, l&amp;#39;architecture a vraiment de la gueule, et si on veut de la forêt et du relief on y est bien mieux servi qu&amp;#39;en Ardenne.&lt;/p&gt;
&lt;p&gt;Tout pour plaire.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ce post fait partie d&amp;#39;une &lt;a href="/tags/bloguidien/"&gt;série&lt;/a&gt; dans le cadre du &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt;, une inspiration à l&amp;#39;écriture quotidienne à l&amp;#39;initiative de &lt;a href="https://lord.re"&gt;Lord&lt;/a&gt; et &lt;a href="https://dryusdan.space/"&gt;Dryusdan&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Sun, 03 Nov 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/11/03/bloguidien_destination_en_france.html</guid>
	</item>
	<item>
		<title>Bloguidien : vertige</title>
		<link>https://blog.jkbockstael.be/posts/2024/11/02/bloguidien_vertige.html</link>
		<description>&lt;h1 id="bloguidien--vertige"&gt;Bloguidien : vertige&lt;/h1&gt;
&lt;p&gt;Le sujet &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt; du jour est : &amp;quot;Quel type de vertige as-tu ?&amp;quot;&lt;/p&gt;
&lt;p&gt;Alors la question m&amp;#39;a intrigué. J&amp;#39;ai cherché un peu, lu un peu, réfléchi un peu. Le fruit de ma très exhaustive, très académique, et très pertinente quête de savoir exact est donc :&lt;/p&gt;
&lt;p&gt;Aucun.&lt;/p&gt;
&lt;p&gt;Voilà, merci d&amp;#39;être venu à mon TED talk.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ce post fait partie d&amp;#39;une &lt;a href="/tags/bloguidien/"&gt;série&lt;/a&gt; dans le cadre du &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt;, une inspiration à l&amp;#39;écriture quotidienne à l&amp;#39;initiative de &lt;a href="https://lord.re"&gt;Lord&lt;/a&gt; et &lt;a href="https://dryusdan.space/"&gt;Dryusdan&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Sat, 02 Nov 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/11/02/bloguidien_vertige.html</guid>
	</item>
	<item>
		<title>Bloguidien : quoi changer sur le blog</title>
		<link>https://blog.jkbockstael.be/posts/2024/11/01/bloguidien_quoi_changer_sur_le_blog.html</link>
		<description>&lt;h1 id="bloguidien--quoi-changer-sur-le-blog"&gt;Bloguidien : quoi changer sur le blog&lt;/h1&gt;
&lt;p&gt;Le sujet &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt; du jour est : &amp;quot;Quelle chose voudrais-tu changer sur ton blog ?&amp;quot;&lt;/p&gt;
&lt;p&gt;Le temps que je peux y accorder.&lt;/p&gt;
&lt;p&gt;J&amp;#39;aimerais beaucoup pouvoir publier des articles qui vont plus en profondeur, qui prennent le temps d&amp;#39;aller dans les détails, qui sont documentés. Le problème c&amp;#39;est que c&amp;#39;est le genre d&amp;#39;article qui demande beaucoup de travail, donc beaucoup de temps. Je n&amp;#39;ai pas ce genre de temps à consacrer à l&amp;#39;écriture, c&amp;#39;est d&amp;#39;ailleurs la raison pour laquelle la série sur les problèmes Advent Of Code stagne.&lt;/p&gt;
&lt;p&gt;J&amp;#39;aimerais aussi pouvoir augmenter la fréquence d&amp;#39;écriture (indépendamment de cette expérience-ci), faire ma part pour renormaliser le blog personnel loin des plateformes. Dans cette époque où tout est sur l&amp;#39;une ou l&amp;#39;autre plateforme à vocation lucrative qui juge ce qui mérite de l&amp;#39;intérêt ou pas, ou noyé dans un océan de &amp;quot;contenu&amp;quot; qui s&amp;#39;il n&amp;#39;est pas généré automatiquement est tellement formaté qu&amp;#39;il pourrait l&amp;#39;être, publier chez soi ce qu&amp;#39;on veut quand on le veut est un acte militant.&lt;/p&gt;
&lt;p&gt;Oh, et une meilleure CSS avec un thème sombre.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ce post fait partie d&amp;#39;une &lt;a href="/tags/bloguidien/"&gt;série&lt;/a&gt; dans le cadre du &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt;, une inspiration à l&amp;#39;écriture quotidienne à l&amp;#39;initiative de &lt;a href="https://lord.re"&gt;Lord&lt;/a&gt; et &lt;a href="https://dryusdan.space/"&gt;Dryusdan&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Fri, 01 Nov 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/11/01/bloguidien_quoi_changer_sur_le_blog.html</guid>
	</item>
	<item>
		<title>Bloguidien : conseil cinéma</title>
		<link>https://blog.jkbockstael.be/posts/2024/10/31/bloguidien_conseil_cinema.html</link>
		<description>&lt;h1 id="bloguidien--conseil-cinéma"&gt;Bloguidien : conseil cinéma&lt;/h1&gt;
&lt;p&gt;Le sujet &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt; du jour est : &amp;quot;Un autre film qui n’a pas été cité qui t’as marqué·e, retourné·e, ému·e et que tu souhaites absolument partager.&amp;quot;&lt;/p&gt;
&lt;p&gt;C&amp;#39;est &amp;quot;Dark City&amp;quot; (Alex Proyas, 1998).&lt;/p&gt;
&lt;p&gt;Pour aller dans le vif du sujet : c&amp;#39;est un peu l&amp;#39;allégorie de la caverne de Platon, dans un contexte vaguement science-fiction, et une esthétique qui emprunte beaucoup au film noir et à l&amp;#39;expressionisme allemand. Il explore l&amp;#39;idée de l&amp;#39;individu et celle de l&amp;#39;emprisonnement, avec un rythme impeccable et des images captivantes. Je l&amp;#39;ai adoré. Jetez-vous dessus si vous avez aimé &amp;quot;Brazil&amp;quot;, &amp;quot;Metropolis&amp;quot; ou &amp;quot;La cité des enfants perdus&amp;quot;.&lt;/p&gt;
&lt;p&gt;Si vous n&amp;#39;en avez jamais entendu parler c&amp;#39;est peut-être parce qu&amp;#39;il est sorti à peine un an avant &amp;quot;The Matrix&amp;quot; qui aborde le même genre de thèmes, avec le même genre d&amp;#39;esthétique, mais avec plus du double comme budget (et de façon amusante, des studios et décors en commun).&lt;/p&gt;
&lt;p&gt;Le succès tient à tant et si peu à la fois.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ce post fait partie d&amp;#39;une &lt;a href="/tags/bloguidien/"&gt;série&lt;/a&gt; dans le cadre du &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt;, une inspiration à l&amp;#39;écriture quotidienne à l&amp;#39;initiative de &lt;a href="https://lord.re"&gt;Lord&lt;/a&gt; et &lt;a href="https://dryusdan.space/"&gt;Dryusdan&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Thu, 31 Oct 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/10/31/bloguidien_conseil_cinema.html</guid>
	</item>
	<item>
		<title>Bloguidien : red flags</title>
		<link>https://blog.jkbockstael.be/posts/2024/10/30/bloguidien_red_flags.html</link>
		<description>&lt;h1 id="bloguidien--red-flags"&gt;Bloguidien : red flags&lt;/h1&gt;
&lt;p&gt;Le sujet &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt; du jour est : &amp;quot;Quel défaut chez une personne te fait fuir ?&amp;quot;&lt;/p&gt;
&lt;p&gt;Sans surprise c&amp;#39;est vaguement l&amp;#39;opposé du green flag : ce qui me fait fuir c&amp;#39;est le manque d&amp;#39;humilité. Concrètement c&amp;#39;est ces gens qui ont toujours un ton péremptoire, n&amp;#39;expriment jamais de toute, ne reconnaissent jamais avoir commis une erreur, ont toujours une excuse, rejettent toujours la faute sur les autres.&lt;/p&gt;
&lt;p&gt;Autrement dit, ceux qui ne disent jamais &amp;quot;j&amp;#39;ai merdé&amp;quot;.&lt;/p&gt;
&lt;p&gt;En milieu professionnel j&amp;#39;en ai rencontré un certain nombre, sans erreur. Je n&amp;#39;ai jamais rencontré quelqu&amp;#39;un qui ait une telle attitude mais se soit finalement avéré être une bonne personne. Là où c&amp;#39;est particulièrement sournois c&amp;#39;est que ce genre d&amp;#39;attitude est pris pour de la confiance en soi qui est elle-même prise pour une preuve de compétence. Si en plus on y ajoute du cynisme alors c&amp;#39;est bingo. C&amp;#39;est le genre de profil dont le comportement va impressionner au recrutement mais ensuite pourrir la dynamique de l&amp;#39;équipe, faire couler le projet, faire fuir ses meilleurs contributeurs, puis les blâmer pour l&amp;#39;échec du projet.&lt;/p&gt;
&lt;p&gt;C&amp;#39;est aussi le genre de profil qui est mis en avant par les algorithmes des réseaux sociaux, avec le même effet. &lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ce post fait partie d&amp;#39;une &lt;a href="/tags/bloguidien/"&gt;série&lt;/a&gt; dans le cadre du &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt;, une inspiration à l&amp;#39;écriture quotidienne à l&amp;#39;initiative de &lt;a href="https://lord.re"&gt;Lord&lt;/a&gt; et &lt;a href="https://dryusdan.space/"&gt;Dryusdan&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Wed, 30 Oct 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/10/30/bloguidien_red_flags.html</guid>
	</item>
	<item>
		<title>Bloguidien : longs trajets</title>
		<link>https://blog.jkbockstael.be/posts/2024/10/29/bloguidien_longs_trajets.html</link>
		<description>&lt;h1 id="bloguidien--longs-trajets"&gt;Bloguidien : longs trajets&lt;/h1&gt;
&lt;p&gt;Le sujet &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt; du jour est : &amp;quot;Vous démarrez un voyage de 7h en train, que faites vous ?&amp;quot;&lt;/p&gt;
&lt;p&gt;Premier élément totalement non-négociable : de la musique. Idéalement quelque chose qui couvre le bruit environnant, en particulier les conversations qui peuvent très vite me distraire. Je n&amp;#39;ai pas encore passé le cap du casque à réduction active, mon fidèle allié dans ces situations est une paire d&amp;#39;écouteurs intra-auriculaires &lt;a href="https://soundmagicheadphones.com/products/soundmagic-e10-in-ear-isolating-earphones"&gt;SoundMagic E10&lt;/a&gt; qui est certainement le meilleur rapport qualité-prix du marché dans ce segment. Il y a toujours de la musique dans mes oreilles quand je veux pouvoir me concentrer sur quelque chose.&lt;/p&gt;
&lt;p&gt;Ensuite la concentration ira vers de la lecture. Le train c&amp;#39;est parfait pour ça, quand je le prenais quotidiennement pour mes trajets professionnels j&amp;#39;y ai atteint mon record personnel de 82 livres lus sur une année. Côté support je n&amp;#39;ai pas de préférence particulière ; je lis soit sur papier au format poche le plus souvent, soit sur une tablette Lenovo Tab 7 (pour avoir la possibilité de lire des PDF, ce pour quoi les liseuses dédiées ont encore du mal).&lt;/p&gt;
&lt;p&gt;Ce qui est sûr c&amp;#39;est que s&amp;#39;il y a un PC dans le sac il y restera le plus longtemps possible. Ce genre de moment &amp;quot;bulle&amp;quot; est devenu trop rare pour être gâché.&lt;/p&gt;
&lt;p&gt;Beaucoup trop rare.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ce post fait partie d&amp;#39;une &lt;a href="/tags/bloguidien/"&gt;série&lt;/a&gt; dans le cadre du &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt;, une inspiration à l&amp;#39;écriture quotidienne à l&amp;#39;initiative de &lt;a href="https://lord.re"&gt;Lord&lt;/a&gt; et &lt;a href="https://dryusdan.space/"&gt;Dryusdan&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Tue, 29 Oct 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/10/29/bloguidien_longs_trajets.html</guid>
	</item>
	<item>
		<title>Bloguidien : bodymod souhaité</title>
		<link>https://blog.jkbockstael.be/posts/2024/10/28/bloguidien_bodymod_souhaite.html</link>
		<description>&lt;h1 id="bloguidien--bodymod-souhaité"&gt;Bloguidien : bodymod souhaité&lt;/h1&gt;
&lt;p&gt;Le sujet &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt; du jour est : &amp;quot;Y a-t-il une modification corporelle (tatouage, piercing, …) que tu souhaiterais faire mais que tu n’oses pas ?&amp;quot;&lt;/p&gt;
&lt;p&gt;Comme je le disais hier, j&amp;#39;aime bien les tatouages. Ils ont un côté fascinant, et les artistes tatoueurs talentueux sont légion. Je me souviens de cette scène dans &amp;quot;Dragon Rouge&amp;quot;, quand l&amp;#39;antagoniste joué par Ralph Fiennes retire son peignoir et révèle la reproduction du dragon de William Blake qui s&amp;#39;étale sur tout son dos. Depuis cette époque je garde l&amp;#39;envie d&amp;#39;avoir sur moi une pièce aussi magistrale.&lt;/p&gt;
&lt;p&gt;Je ne l&amp;#39;ai pas encore fait. J&amp;#39;ai des idées pour des tatouages plus petits qui restent constantes depuis assez longtemps pour que ce soit raisonnable de me les faire encrer, mais je ne l&amp;#39;ai pas encore fait. Le budget se retrouve toujours alloué à un autre usage, par exemple des voyages ou des disques ou plus récemment cette broutille futile qu&amp;#39;est une maison.&lt;/p&gt;
&lt;p&gt;Un jour, peut-être.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ce post fait partie d&amp;#39;une &lt;a href="/tags/bloguidien/"&gt;série&lt;/a&gt; dans le cadre du &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt;, une inspiration à l&amp;#39;écriture quotidienne à l&amp;#39;initiative de &lt;a href="https://lord.re"&gt;Lord&lt;/a&gt; et &lt;a href="https://dryusdan.space/"&gt;Dryusdan&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Mon, 28 Oct 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/10/28/bloguidien_bodymod_souhaite.html</guid>
	</item>
	<item>
		<title>Bloguidien : bodymod préféré</title>
		<link>https://blog.jkbockstael.be/posts/2024/10/27/bloguidien_bodymod_prefere.html</link>
		<description>&lt;h1 id="bloguidien--bodymod-préféré"&gt;Bloguidien : bodymod préféré&lt;/h1&gt;
&lt;p&gt;Le sujet &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt; du jour est : &amp;quot;Quelle est ta modification corporelle (tatouage, piercing, …) préférée que tu as sur toi ?&amp;quot;&lt;/p&gt;
&lt;p&gt;J&amp;#39;ai sur le pouce droit une cicatrice d&amp;#39;une brûlure par du plastique fondu, c&amp;#39;est un souvenir d&amp;#39;une période bénie de l&amp;#39;insouciante enfance durant laquelle je bricolais des structures en soudant des pailles ensemble à l&amp;#39;aide d&amp;#39;un briquet. Que celui qui n&amp;#39;a jamais fait ça me jette la première pierre.&lt;/p&gt;
&lt;p&gt;Blague à part, je n&amp;#39;ai aucune modification corporelle volontaire. J&amp;#39;aime bien les tatouages, cela dit. Ma moitié en a plein, du coup en moyenne dans le couple chacun en a pas mal. Ça compte ?&lt;/p&gt;
&lt;p&gt;Un jour, peut-être.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ce post fait partie d&amp;#39;une &lt;a href="/tags/bloguidien/"&gt;série&lt;/a&gt; dans le cadre du &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt;, une inspiration à l&amp;#39;écriture quotidienne à l&amp;#39;initiative de &lt;a href="https://lord.re"&gt;Lord&lt;/a&gt; et &lt;a href="https://dryusdan.space/"&gt;Dryusdan&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Sun, 27 Oct 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/10/27/bloguidien_bodymod_prefere.html</guid>
	</item>
	<item>
		<title>Bloguidien : green flags</title>
		<link>https://blog.jkbockstael.be/posts/2024/10/26/bloguidien_green_flags.html</link>
		<description>&lt;h1 id="bloguidien--green-flags"&gt;Bloguidien : green flags&lt;/h1&gt;
&lt;p&gt;Le sujet &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt; du jour est : &amp;quot;C&amp;#39;est quoi les green flags qui t’attirent chez une personne ?&amp;quot;&lt;/p&gt;
&lt;p&gt;L&amp;#39;humilité, clairement.&lt;/p&gt;
&lt;p&gt;Qu&amp;#39;on s&amp;#39;entende bien : l&amp;#39;humilité ne veut pas dire la servilité. Je ne parle pas d&amp;#39;être une carpette, je parle de demander le respect qui est dû et la reconnaissance qu&amp;#39;on mérite tout en ne pétant pas plus haut que son cul (pour utiliser le jargon scientifique). Je pense que l&amp;#39;humilité est un pilier essentiel dans les relations interpersonnelles, qu&amp;#39;elles soient professionnelles ou non, et que pourant c&amp;#39;est une qualité qui est mise à mal voire ouvertement dévaluée à l&amp;#39;époque du &amp;quot;personal branding&amp;quot; et de la surenchère.&lt;/p&gt;
&lt;p&gt;Autrement formulé : ce qui va allumer un très vif voyant vert à propos de quelqu&amp;#39;un, c&amp;#39;est de l&amp;#39;entendre dire quelque chose comme &amp;quot;je ne sais pas&amp;quot;.&lt;/p&gt;
&lt;p&gt;Soyez attentifs, c&amp;#39;est des mots qu&amp;#39;on n&amp;#39;entend que trop rarement autour de soi. Qui ne les prononce &lt;em&gt;jamais&lt;/em&gt; ?&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ce post fait partie d&amp;#39;une &lt;a href="/tags/bloguidien/"&gt;série&lt;/a&gt; dans le cadre du &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt;, une inspiration à l&amp;#39;écriture quotidienne à l&amp;#39;initiative de &lt;a href="https://lord.re"&gt;Lord&lt;/a&gt; et &lt;a href="https://dryusdan.space/"&gt;Dryusdan&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Sat, 26 Oct 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/10/26/bloguidien_green_flags.html</guid>
	</item>
	<item>
		<title>Bloguidien : conseil littéraire</title>
		<link>https://blog.jkbockstael.be/posts/2024/10/25/bloguidien_conseil_litteraire.html</link>
		<description>&lt;h1 id="bloguidien--conseil-littéraire"&gt;Bloguidien : conseil littéraire&lt;/h1&gt;
&lt;p&gt;Le sujet &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt; du jour est : &amp;quot;Un livre qui t’as marqué·e, retourné·e, ému·e et que tu souhaites absolument partager.&amp;quot;&lt;/p&gt;
&lt;p&gt;Sans hésiter je dirais que c&amp;#39;est &amp;quot;Des fleurs pour Algernon&amp;quot; de Daniel Keyes (&amp;quot;Flowers for Algernon&amp;quot;, mais je l&amp;#39;ai lu en français), que j&amp;#39;ai trouvé magistral. Apparemment je ne suis pas le seul, puisque ce roman a été récompensé par le prix Nebula du meilleur roman à sa parution et la nouvelle du même auteur à partir de laquelle il a été développé a reçu le prix Hugo de la meilleure histoire courte. Ça pose les bases.&lt;/p&gt;
&lt;p&gt;L&amp;#39;histoire peut être décrite le temps d&amp;#39;attendre que la machine à café ait fini sa préparation : Algernon est une souris de laboratoire sur laquelle on expérimente avec succès un protocole de démultiplication des facultés mentale, l&amp;#39;histoire est racontée sous la forme de journal épistolaire par la voix d&amp;#39;un adulte mentalement handicapé qui accepte d&amp;#39;être le premier sujet humain sur lequel ce protocole sera testé également avec succès ; dans la seconde partie de l&amp;#39;histoire Algernon décline rapidement et perd toutes ses facultés acquises jusqu&amp;#39;à mourir, le narrateur y voit son destin qu&amp;#39;il racontera au fur et à mesure dans une immense angoisse existentielle.&lt;/p&gt;
&lt;p&gt;C&amp;#39;est poignant, captivant. Ce livre m&amp;#39;a fait découvrir une empathie que j&amp;#39;ignorais avoir (pour un personnage de fiction, pourtant). C&amp;#39;est aussi un solide commentaire social, qui jette un regard critique sur l&amp;#39;attide qu&amp;#39;on a vis-à-vis du handicap. Donc oui, c&amp;#39;est mon conseil littéraire même si ce n&amp;#39;est pas exactement un ouvrage obscur (on y fait référence dans World Of Warcraft, c&amp;#39;est dire).&lt;/p&gt;
&lt;p&gt;En bonus je conseille aussi &amp;quot;Ham on Rye&amp;quot; de Charles Bukowksi (&amp;quot;Souvenirs d&amp;#39;un pas grand-chose&amp;quot;, mais je l&amp;#39;ai lu en anglais), un quasi-autobiographie rédigée également à la première personne sous la forme de journal et dont le style d&amp;#39;écriture change également pour suivre l&amp;#39;évolution du narrateur. Lui aussi est un solide commentaire social, une franche destruction du rêve américain.&lt;/p&gt;
&lt;p&gt;Je n&amp;#39;avais pas jusqu&amp;#39;ici pris conscience des similarités entre ces deux livres que j&amp;#39;ai pourtant souvent séparement conseillés autour de moi. Il y a peut-être quelque chose à en conclure, je ne sais pas.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ce post fait partie d&amp;#39;une &lt;a href="/tags/bloguidien/"&gt;série&lt;/a&gt; dans le cadre du &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt;, une inspiration à l&amp;#39;écriture quotidienne à l&amp;#39;initiative de &lt;a href="https://lord.re"&gt;Lord&lt;/a&gt; et &lt;a href="https://dryusdan.space/"&gt;Dryusdan&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Fri, 25 Oct 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/10/25/bloguidien_conseil_litteraire.html</guid>
	</item>
	<item>
		<title>Bloguidien : hommage</title>
		<link>https://blog.jkbockstael.be/posts/2024/10/24/bloguidien_hommage.html</link>
		<description>&lt;h1 id="bloguidien--hommage"&gt;Bloguidien : hommage&lt;/h1&gt;
&lt;p&gt;Le sujet &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt; du jour est : &amp;quot;À quelle personne (vivante ou non) tu voudrais rendre hommage ?&amp;quot;&lt;/p&gt;
&lt;p&gt;On va faire un tir groupé, dans le thème &amp;quot;informatique, apprendre en s&amp;#39;amusant&amp;quot; :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://jvns.ca/"&gt;Julia Evans&lt;/a&gt;, dont le blog est un délice et qui publie de nombreux &lt;em&gt;zines&lt;/em&gt; qui démystifient des sujets qui peuvent être obscurs ;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://vkc.sh/"&gt;Veronica Explains&lt;/a&gt;, dont les vidéos valent le détour en particulier si on aime le retrocomputing ;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://anjana.dev/"&gt;Anjana Vakil&lt;/a&gt;, dont les talk sur le JavaScript et la programmation fonctionnelle sont un pur délice.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Il y en a tant d&amp;#39;autres à mentionner, ce sera pour d&amp;#39;autres fois.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ce post fait partie d&amp;#39;une &lt;a href="/tags/bloguidien/"&gt;série&lt;/a&gt; dans le cadre du &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt;, une inspiration à l&amp;#39;écriture quotidienne à l&amp;#39;initiative de &lt;a href="https://lord.re"&gt;Lord&lt;/a&gt; et &lt;a href="https://dryusdan.space/"&gt;Dryusdan&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Thu, 24 Oct 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/10/24/bloguidien_hommage.html</guid>
	</item>
	<item>
		<title>Bloguidien : record perso</title>
		<link>https://blog.jkbockstael.be/posts/2024/10/23/bloguidien_record_perso.html</link>
		<description>&lt;h1 id="bloguidien--record-perso"&gt;Bloguidien : record perso&lt;/h1&gt;
&lt;p&gt;Le sujet &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt; du jour est : &amp;quot;Quel est ton record perso que tu as envie de partager.&amp;quot;&lt;/p&gt;
&lt;p&gt;Alors ça c&amp;#39;est un sujet très difficile parce que je combine deux traits qui le sabotent : une mémoire hasardeuse et un tendance à sous-estimer mes accomplissements. Ajoutons à ça mon approche presque militante du droit à l&amp;#39;ordinaire, totalement à contre-courant du &amp;quot;hustle mindset&amp;quot; à la mode sur les réseaux, et j&amp;#39;ai bien du mal à me vanter de quoi que ce soit. Est-ce ça l&amp;#39;humilité ? Je ne sais pas, ça sonne vachement involontaire quand même.&lt;/p&gt;
&lt;p&gt;Du coup je choisis quelque chose qui est en cours : actuellement je travaille chez un opérateur de transports en commun que je ne nommerai pas (mais il est wallon et aime le jaune), sur un projet d&amp;#39;information voyageurs embarquée. Mais oui tu sais, les écrans qui indiquent où on en est dans le trajet (et bien plus). Je suis seul sur ce projet parce que les budgets des services publics sont ce qu&amp;#39;ils sont, depuis la phase du proof-of-concept. Ça veut dire que j&amp;#39;ai fait le POC, convaincu les décideurs, pris en main la gestion de projet, effectué l&amp;#39;analyse et le développement de tout le logiciel, mis en place le déploiement continu, écrit toute la documentation… mais également évalué du matériel, installé des prototypes dans des véhicules, coordonné du développement avec d&amp;#39;autres équipes. Je suis une équipe à moi tout seul, je me fends la gueule. La mise en production s&amp;#39;est faite sans problème et je travaille déjà sur les prochaines amélioration qui vont voir le terrain. Pas de quoi rougir, je pense.&lt;/p&gt;
&lt;p&gt;Oh et après-demain ça fera &lt;em&gt;quarante ans&lt;/em&gt; que je suis en vie, ça compte comme record perso?&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ce post fait partie d&amp;#39;une &lt;a href="/tags/bloguidien/"&gt;série&lt;/a&gt; dans le cadre du &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt;, une inspiration à l&amp;#39;écriture quotidienne à l&amp;#39;initiative de &lt;a href="https://lord.re"&gt;Lord&lt;/a&gt; et &lt;a href="https://dryusdan.space/"&gt;Dryusdan&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Wed, 23 Oct 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/10/23/bloguidien_record_perso.html</guid>
	</item>
	<item>
		<title>Bloguidien : tâche ménagère</title>
		<link>https://blog.jkbockstael.be/posts/2024/10/22/bloguidien_tache_menagere.html</link>
		<description>&lt;h1 id="bloguidien--tâche-ménagère"&gt;Bloguidien : tâche ménagère&lt;/h1&gt;
&lt;p&gt;Le sujet &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt; du jour est : &amp;quot;Quelle tâche ménagère détestes-tu faire ?&amp;quot;&lt;/p&gt;
&lt;p&gt;Pas que j&amp;#39;aime ça mais j&amp;#39;ai une plutôt bonne tolérance aux tâches ménagères, ce qui n&amp;#39;est pas le cas de beaucoup pour qui c&amp;#39;est toujours une épreuve à repousser au plus tard possible. Par contre il y a une catégorie qui me semble vite pénible et à peu près tout ce qui implique une salle de bain en fait partie : les tâches à faire directement à la main dans des positions inconfortables. Par exemple : nettoyer une baignoire.&lt;/p&gt;
&lt;p&gt;Sérieusement, ça ne choque personne le manque d&amp;#39;ergonomie du machin ? Je peux ajuster la longueur du manche de l&amp;#39;aspirateur pour ne pas devoir me pencher, les éviers de cuisine sont placés à la bonne hauteur pour faire la vaisselle sans se casser le dos, je peux poser mon linge sur une tablette escamotable au moment de charger le sèche-linge, etc… mais &lt;em&gt;rien&lt;/em&gt; n&amp;#39;est prévu pour nettoyer une douche ou des chiottes sans devoir se mettre à genoux. On s&amp;#39;en balance des commandes vocales dans les bagnoles, on veut un outil pour frotter le fond de la baignoire !&lt;/p&gt;
&lt;p&gt;C&amp;#39;est comme si le ménage était habituellement fait par des gens dont on n&amp;#39;a rien à foutre.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ce post fait partie d&amp;#39;une &lt;a href="/tags/bloguidien/"&gt;série&lt;/a&gt; dans le cadre du &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt;, une inspiration à l&amp;#39;écriture quotidienne à l&amp;#39;initiative de &lt;a href="https://lord.re"&gt;Lord&lt;/a&gt; et &lt;a href="https://dryusdan.space/"&gt;Dryusdan&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Tue, 22 Oct 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/10/22/bloguidien_tache_menagere.html</guid>
	</item>
	<item>
		<title>Bloguidien : musique chargée</title>
		<link>https://blog.jkbockstael.be/posts/2024/10/21/bloguidien_musique_chargee.html</link>
		<description>&lt;h1 id="bloguidien--musique-chargée"&gt;Bloguidien : musique chargée&lt;/h1&gt;
&lt;p&gt;Le sujet &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt; du jour est : &amp;quot;Une musique qui t’as marqué·e, retourné·e, ému·e et que tu souhaites absolument partager.&amp;quot;&lt;/p&gt;
&lt;p&gt;Une seule ? Misère, il va falloir piocher au hasard dans le lot sinon on est encore là demain… J&amp;#39;ai envie de dire &lt;a href="https://www.youtube.com/watch?v=5GJWxDKyk3A"&gt;&amp;quot;Happier Than Ever&amp;quot; de Billie Eilish&lt;/a&gt; pour son impact et sa perfection dans le texte, dans la musique, et surtout dans le chant. Ou alors &lt;a href="https://www.youtube.com/watch?v=TUzs5xsG75g"&gt;&amp;quot;Where The Birds Always Sing&amp;quot; des Cure&lt;/a&gt;, qui était un des favoris de mon ami Gilles qui aurait fêté ses 42 ans il y a deux semaines s&amp;#39;il n&amp;#39;avait pas décidé d&amp;#39;en avoir 23 à jamais. Ou bien &lt;a href="https://explosionsinthesky.bandcamp.com/track/your-hand-in-mine"&gt;&amp;quot;Your Hand in Mine&amp;quot; d&amp;#39;Explosions In The Sky&lt;/a&gt; à l&amp;#39;autre bout du spectre, pour son côté chaleureux et plein d&amp;#39;espoir et son lot de souvenirs.&lt;/p&gt;
&lt;p&gt;Ça fait bien plus qu&amp;#39;une seule, tant pis.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ce post fait partie d&amp;#39;une &lt;a href="/tags/bloguidien/"&gt;série&lt;/a&gt; dans le cadre du &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt;, une inspiration à l&amp;#39;écriture quotidienne à l&amp;#39;initiative de &lt;a href="https://lord.re"&gt;Lord&lt;/a&gt; et &lt;a href="https://dryusdan.space/"&gt;Dryusdan&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Mon, 21 Oct 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/10/21/bloguidien_musique_chargee.html</guid>
	</item>
	<item>
		<title>Bloguidien : qualité dissonnante</title>
		<link>https://blog.jkbockstael.be/posts/2024/10/20/bloguidien_qualite_dissonnante.html</link>
		<description>&lt;h1 id="bloguidien--qualité-dissonnante"&gt;Bloguidien : qualité dissonnante&lt;/h1&gt;
&lt;p&gt;Le sujet &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt; du jour est : &amp;quot;Quelle qualité possèdes-tu que tu as du mal à reconnaître ou accepter ? Pourquoi ?&amp;quot;&lt;/p&gt;
&lt;p&gt;On me dit sociable, je ne me trouve pas sociable du tout. Des collègues m&amp;#39;ont déjà dit ne pas comprendre comment je peux discuter de n&amp;#39;importe quoi avec n&amp;#39;importe qui, alors qu&amp;#39;eux prétexteraient n&amp;#39;importe quoi pour s&amp;#39;enfuir d&amp;#39;une telle situation. Mes amis diraient la même chose je pense. Ma moitié dirait &amp;quot;mais non, t&amp;#39;aimes pas les gens&amp;quot;.&lt;/p&gt;
&lt;p&gt;Mettons-y une nuance : ce n&amp;#39;est pas que je n&amp;#39;aime pas les gens, c&amp;#39;est que j&amp;#39;aime être tranquille. J&amp;#39;aime être seul, je peux faire beaucoup de choses seul, je ne cherche pas à me tenir au courant de ce qui se passe parmi mes amis, ma notion de famille se limite à &amp;quot;gens qui vivent dans le même foyer que moi&amp;quot; ; bref j&amp;#39;aime les gens mais uniquement ceux que je choisis et uniquement quand je le veux. On dit qu&amp;#39;il faut aimer quelque chose pour y être bon, apparemment on peut aussi être bon dans ce qu&amp;#39;on n&amp;#39;aime pas.&lt;/p&gt;
&lt;p&gt;Débrouille-toi avec ça, LinkedIn.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ce post fait partie d&amp;#39;une &lt;a href="/tags/bloguidien/"&gt;série&lt;/a&gt; dans le cadre du &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt;, une inspiration à l&amp;#39;écriture quotidienne à l&amp;#39;initiative de &lt;a href="https://lord.re"&gt;Lord&lt;/a&gt; et &lt;a href="https://dryusdan.space/"&gt;Dryusdan&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Sun, 20 Oct 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/10/20/bloguidien_qualite_dissonnante.html</guid>
	</item>
	<item>
		<title>Bloguidien : sport inaccessible</title>
		<link>https://blog.jkbockstael.be/posts/2024/10/19/bloguidien_sport_inaccessible.html</link>
		<description>&lt;h1 id="bloguidien--sport-inaccessible"&gt;Bloguidien : sport inaccessible&lt;/h1&gt;
&lt;p&gt;Le sujet &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt; du jour est : &amp;quot;Quel sport t&amp;#39;attire même si tu sais que tu ne le pratiqueras jamais ?&amp;quot;&lt;/p&gt;
&lt;p&gt;Vaste sujet. Je ne suis pas le gars le plus athlétique du monde et le sport à l&amp;#39;école n&amp;#39;a pas du tout aidé à ce que je le devienne ; je n&amp;#39;ai pas pratiqué beaucoup de sports différents, du coup beaucoup m&amp;#39;intriguent. Puis il y a la pratique très occasionnelle : j&amp;#39;ai à plusieurs occasions pu faire du golf, je ne pourrais pas affirmer que &amp;quot;je fais du golf&amp;quot; pour autant. Il y a aussi la pratique partielle, celle où on touche la surface d&amp;#39;une activité en sachant qu&amp;#39;on ne pourra pas aller plus loin.&lt;/p&gt;
&lt;p&gt;C&amp;#39;est le cas pour ce que considèrerais être mon sport inaccessible : la plongée sous-marine. Je suis né en bord de mer (du genre qui donne envie d&amp;#39;aller dedans, pas Ostende) et j&amp;#39;aime m&amp;#39;y baigner, j&amp;#39;ai eu quelques occasions de faire de la &amp;quot;petite&amp;quot; plongée (du &amp;quot;snorkeling&amp;quot; comme disent ceux qui devraient arrêter d&amp;#39;essayer de prononcer des mots anglais) et c&amp;#39;était à chaque fois une expérience très agréable ; par contre à plus grande profondeur je sais que j&amp;#39;aurai des montées de thalassophobie qui vont me paralyser et tout gâcher. Pour faire simple : à partir du moment où je ne vois pas jusqu&amp;#39;au fond c&amp;#39;est terrifiant. C&amp;#39;est moins intense dans de l&amp;#39;eau très claire comme on peut en avoir dans les régions tropicales, mais quand même. Donc même si j&amp;#39;aimerais bien je pense que ne mettrai jamais une bonbonne de plongée sur mon dos.&lt;/p&gt;
&lt;p&gt;Fin 2017 j&amp;#39;ai acheté un casque VR &lt;a href="https://en.wikipedia.org/wiki/Oculus_Rift_CV1"&gt;Oculus Rift&lt;/a&gt;. En janvier 2018 le jeu &lt;a href="https://store.steampowered.com/app/264710/Subnautica/"&gt;Subnautica&lt;/a&gt; est sorti de sa phase early-access, moment que j&amp;#39;attendais pour m&amp;#39;y lancer après m&amp;#39;être soigneusement isolé de toute information à son sujet. Je me suis donc plongé (héhé) dans l&amp;#39;inconnu d&amp;#39;un jeu classé &amp;quot;survie/horreur&amp;quot; qui se déroule entièrement dans l&amp;#39;océan… en VR. Jamais un jeu vidéo ne m&amp;#39;avait provoqué de réactions physiques aussi vives, en même temps qu&amp;#39;il m&amp;#39;accrochait avec un gameplay et surtout un environnement qui me donnaient envie d&amp;#39;aller toujours plus loin malgré les sueurs froides et les palpitations. C&amp;#39;est un très bon jeu vidéo que je recommande vivement, en grande partie pour cet environnement entièrement fait à la main et qui sait avec brio rythmer la narration par l&amp;#39;exploration. C&amp;#39;est du grand art qui serait impossible avec des techniques procédurales. Subnautica est ridicule par-rapport à disons Far Cry si on parle des dimensions de l&amp;#39;environnement de jeu, mais c&amp;#39;est justement là que se trouve son avantage.&lt;/p&gt;
&lt;p&gt;Le fait-main c&amp;#39;est bien, faites à la main.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ce post fait partie d&amp;#39;une &lt;a href="/tags/bloguidien/"&gt;série&lt;/a&gt; dans le cadre du &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt;, une inspiration à l&amp;#39;écriture quotidienne à l&amp;#39;initiative de &lt;a href="https://lord.re"&gt;Lord&lt;/a&gt; et &lt;a href="https://dryusdan.space/"&gt;Dryusdan&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Sat, 19 Oct 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/10/19/bloguidien_sport_inaccessible.html</guid>
	</item>
	<item>
		<title>Bloguidien : un objet d'enfance</title>
		<link>https://blog.jkbockstael.be/posts/2024/10/18/bloguidien_objet_enfance.html</link>
		<description>&lt;h1 id="bloguidien--un-objet-denfance"&gt;Bloguidien : un objet d&amp;#39;enfance&lt;/h1&gt;
&lt;p&gt;Le sujet &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt; du jour est : &amp;quot;Quel objet de ton enfance et qui n&amp;#39;est plus utilisé aujourd&amp;#39;hui, regrettes-tu ?&amp;quot;&lt;/p&gt;
&lt;p&gt;Alors il faudrait qu&amp;#39;on se mette d&amp;#39;accord sur le critère &amp;quot;et qui n&amp;#39;est plus utilisé aujourd&amp;#39;hui&amp;quot; parce que, outre les amateurs de machins rétros qui ont un Amstrad CPC à la maison ou une Deux-Chevaux garée devant, il y une grosse disparité entre les lieux. Va voir au bled, frère. Du coup je ferme le périmètre (comme on dit dans les présentations PowerPoint) : mon enfance c&amp;#39;est de 1984 à 1994, et l&amp;#39;utilisation est définie par moi et mon entourage direct.&lt;/p&gt;
&lt;p&gt;Même avec ça c&amp;#39;est pas simple. Certains souvenirs me baignent de nostalgie, mais c&amp;#39;est quand même mieux maintenant. On ne se promène plus avec un petit carnet pour laisser une note dans la boîte aux lettres de quelqu&amp;#39;un lui disant qu&amp;#39;on est passé le voir mais qu&amp;#39;il n&amp;#39;était pas là, on n&amp;#39;a plus le rite de passage du pliage de carte routière, on n&amp;#39;utilise plus de bottin téléphonique, etc… parce qu&amp;#39;on a des moyens bien plus pratiques pour accomplir la même chose. On parlait de voyages l&amp;#39;autre jour, je n&amp;#39;ai pas &lt;em&gt;du tout&lt;/em&gt; envie d&amp;#39;organiser un voyage dans un pays dont je ne maîtrise pas du tout la langue avec les moyens techniques des années 1980.&lt;/p&gt;
&lt;p&gt;Donc je dirais : les gros téléphones à cadran en bakélite. C&amp;#39;est super pas pratique pour passer des appels, le cadran est une torture, le son est dégueulasse, la sonnerie l&amp;#39;est encore plus ; par contre qu&amp;#39;est-ce que c&amp;#39;est satisfaisant de raccrocher au nez de quelqu&amp;#39;un avec un combiné aussi lourd.&lt;/p&gt;
&lt;p&gt;Oh, et les ordinateurs qui font tout leur processus de démarrage en moins de dix secondes.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ce post fait partie d&amp;#39;une &lt;a href="/tags/bloguidien/"&gt;série&lt;/a&gt; dans le cadre du &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt;, une inspiration à l&amp;#39;écriture quotidienne à l&amp;#39;initiative de &lt;a href="https://lord.re"&gt;Lord&lt;/a&gt; et &lt;a href="https://dryusdan.space/"&gt;Dryusdan&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Fri, 18 Oct 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/10/18/bloguidien_objet_enfance.html</guid>
	</item>
	<item>
		<title>Bloguidien : setup pour écrire</title>
		<link>https://blog.jkbockstael.be/posts/2024/10/17/bloguidien_setup_pour_ecrire.html</link>
		<description>&lt;h1 id="bloguidien--setup-pour-écrire"&gt;Bloguidien : setup pour écrire&lt;/h1&gt;
&lt;p&gt;Le sujet &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt; du jour est : &amp;quot;Quel est ton setup pour écrire ? logiciel / matériel spécifique / lieu / musique / ambiance / isolement / parsemé de pauses&amp;quot;&lt;/p&gt;
&lt;p&gt;Ça dépend, mais ça change finalement peu.&lt;/p&gt;
&lt;p&gt;Quand c&amp;#39;est à titre personnel je suis fidèle à &lt;a href="https://www.vim.org/"&gt;Vim&lt;/a&gt; depuis plus de quinze ans, sans plugin mais avec &lt;a href="https://github.com/jkbockstael/dotfiles/blob/master/vimrc"&gt;une configuration que je peaufine au fil des années&lt;/a&gt;, que ce soit pour du code ou de la prose. Quand j&amp;#39;utilise Vim c&amp;#39;est toujours dans un terminal opaque en plein écran, ce que les gens cool appellent &amp;quot;distraction-free&amp;quot; ou &amp;quot;zen mode&amp;quot;. Je prends pas mal de notes dans &lt;a href="https://joplinapp.org/"&gt;Joplin&lt;/a&gt; que ce soit sur desktop ou sur mobile, et ce post-ci est écrit dans Joplin. Pour le blog j&amp;#39;édite des fichiers Markdown directement sur le serveur dans Vim et la compilation et publication se font au moyen d&amp;#39;un script Bash, ça me donne l&amp;#39;option bonus de tout pouvoir faire avec mon smartphone si je veux ne rien embarquer d&amp;#39;autre (&lt;a href="https://termux.dev/en/"&gt;Termux&lt;/a&gt; vous veut du bien).&lt;/p&gt;
&lt;p&gt;Quand c&amp;#39;est dans un cadre professionnel comme je n&amp;#39;ai pas le choix d&amp;#39;utiliser Windows j&amp;#39;utilise depuis cinq ans &lt;a href="https://code.visualstudio.com/"&gt;VisualStudio Code&lt;/a&gt; configuré pour être mon IDE à tout faire qui reste en plein écran toute la journée. Bien entendu j&amp;#39;y ai collé &lt;a href="https://marketplace.visualstudio.com/items?itemName=vscodevim.vim"&gt;une extension pour avoir un mode Vim&lt;/a&gt;, ça va de soi. En-dehors du code je fais toute ma prise de notes dans cet environnement, au moyen des extensions &lt;a href="https://marketplace.visualstudio.com/items?itemName=pajoma.vscode-journal"&gt;Journal&lt;/a&gt; pour le suivi quotidien et &lt;a href="https://marketplace.visualstudio.com/items?itemName=dionmunk.vscode-notes"&gt;Notes&lt;/a&gt; pour la prise de note générale.&lt;/p&gt;
&lt;p&gt;Ça fait quelques années que j&amp;#39;ai tout basculé sur une disposition clavier ANSI (QWERTY US) qui me semble un peu plus pratique et n&amp;#39;étale pas sa touche entrée sur deux lignes (sérieusement… &lt;em&gt;pourquoi&lt;/em&gt; ces touches entrée immenses ?). La touche verrouillage majuscule ne me sert à rien et j&amp;#39;utilise Vim, donc je la remappe en escape au moyen de &lt;a href="https://github.com/jkbockstael/dotfiles/blob/master/Xmodmap"&gt;XModmap&lt;/a&gt; sur Linux et &lt;a href="https://github.com/susam/uncap"&gt;uncap&lt;/a&gt; sur Windows. Pour les caractères accentués et autres particularités je passe par la touche contrôle droite pour de la composition au moyen de &lt;a href="https://wiki.debian.org/XCompose"&gt;XCompose&lt;/a&gt; sur Linux et &lt;a href="http://wincompose.info/"&gt;WinCompose&lt;/a&gt; sur Windows. Côté matériel je tape sur un &lt;a href="https://www.keychron.com/pages/keychron-v3-custom-mechanical-keyboard"&gt;Keychron V3&lt;/a&gt; avec switches Keychron K Pro Red à la maison et un Matias FK308PCBB (qui n&amp;#39;est plus en vente mais est presque identique à &lt;a href="https://matias.store/products/fk408btb"&gt;son successeur&lt;/a&gt;) en open-space où le mécanique ne serait pas le bienvenu. En version mobile c&amp;#39;est sur le clavier d&amp;#39;un Lenovo X220, plus rarement sur un OnePlus Nord.&lt;/p&gt;
&lt;p&gt;Quand je ne suis pas sur l&amp;#39;open-space du client je travaille sur un bureau assis ou debout en fonction de l&amp;#39;humeur. Dans tous les cas l&amp;#39;important pour la concentration est de pouvoir bloquer les bruits ambiants, la plupart du temps c&amp;#39;est en écoutant au casque de la musique instrumentale (ou dont les paroles ne peuvent pas attirer mon attention). À l&amp;#39;instant présent c&amp;#39;est l&amp;#39;album &lt;a href="https://cryochamber.bandcamp.com/album/futuristic-dereliction"&gt;&amp;quot;Futuristic Dereliction&amp;quot; de Alphaxone et Onasander&lt;/a&gt;, tout ce qui sort chez Cryo Chamber est efficace dans ce rôle.&lt;/p&gt;
&lt;p&gt;Un certain minimalisme sans le pousser à l&amp;#39;extrême, en somme.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ce post fait partie d&amp;#39;une &lt;a href="/tags/bloguidien/"&gt;série&lt;/a&gt; dans le cadre du &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt;, une inspiration à l&amp;#39;écriture quotidienne à l&amp;#39;initiative de &lt;a href="https://lord.re"&gt;Lord&lt;/a&gt; et &lt;a href="https://dryusdan.space/"&gt;Dryusdan&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Thu, 17 Oct 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/10/17/bloguidien_setup_pour_ecrire.html</guid>
	</item>
	<item>
		<title>Bloguidien : salaire à vie</title>
		<link>https://blog.jkbockstael.be/posts/2024/10/16/bloguidien_salaire_a_vie.html</link>
		<description>&lt;h1 id="bloguidien--salaire-à-vie"&gt;Bloguidien : salaire à vie&lt;/h1&gt;
&lt;p&gt;Le sujet &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt; du jour est : &amp;quot;Salaire à vie, tu n&amp;#39;es pas obligé·e d&amp;#39;avoir un travail subordonné. Tu fais quoi de tes journées ?&amp;quot;&lt;/p&gt;
&lt;p&gt;Vous avez du entendre parler de l&amp;#39;idée de &lt;a href="https://fr.wikipedia.org/wiki/Revenu_de_base"&gt;revenu de base&lt;/a&gt; qui consiste en gros à verser à chacun un revenu sans condition ni contrepartie. Si ce revenu est suffisant pour couvrir tous les besoins du quotidien on se retrouverait alors avec une population qui peut choisir à quoi elle consacre son temps et son énergie au lieu de devoir les consacrer à du travail rémunéré ne fut-ce que pour s&amp;#39;alimenter et se loger. Il y a une foule de variante de ce raisonnement et pas mal de projets pilotes qui montrent un certain succès. À titre personnel je trouve que c&amp;#39;est une idée à creuser, et l&amp;#39;idée de &amp;quot;payer les gens à ne rien foutre&amp;quot; me met des étoiles dans les yeux.&lt;/p&gt;
&lt;p&gt;Pour ce qui est d&amp;#39;imaginer comment j&amp;#39;occuperais mes journées dans une telle situation c&amp;#39;est assez simple, je l&amp;#39;ai vécu pendant un temps. En janvier 2018 j&amp;#39;ai quitté mon boulot et n&amp;#39;ai pas repris le travail avant mars 2019. Entre les deux je ne me suis pas inscrit au chômage et ai vécu entièrement sur mes économies (les salaires de l&amp;#39;informatique facilitent la chose). Pendant plus d&amp;#39;un an j&amp;#39;avais 24 heures de temps libre par jour, sept jours par semaine. J&amp;#39;ai beaucoup lu, poncé quelques jeux vidéo, &lt;a href="https://www.youtube.com/c/JeanKarimBockstael"&gt;été youtubeur pendant un temps&lt;/a&gt;, visité plein d&amp;#39;endroits, passé la plupart de mon temps à découvrir un foule de choses (c&amp;#39;était avant l&amp;#39;empoisonnement du Web par des LLM, on pouvait facilement trouver ce qu&amp;#39;on cherchait). Bref j&amp;#39;ai fait un peu de tout de mon temps &lt;em&gt;sauf&lt;/em&gt; de l&amp;#39;informatique. Si ça reproduisait aujourd&amp;#39;hui je pense que je ferais la même chose qu&amp;#39;à cette époque, avec peut-être une plus grande partie de tranfert de connaissance.&lt;/p&gt;
&lt;p&gt;Vivement la retraite.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ce post fait partie d&amp;#39;une &lt;a href="/tags/bloguidien/"&gt;série&lt;/a&gt; dans le cadre du &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt;, une inspiration à l&amp;#39;écriture quotidienne à l&amp;#39;initiative de &lt;a href="https://lord.re"&gt;Lord&lt;/a&gt; et &lt;a href="https://dryusdan.space/"&gt;Dryusdan&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Wed, 16 Oct 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/10/16/bloguidien_salaire_a_vie.html</guid>
	</item>
	<item>
		<title>Bloguidien : regret de voyage</title>
		<link>https://blog.jkbockstael.be/posts/2024/10/15/bloguidien_regret_de_voyage.html</link>
		<description>&lt;h1 id="bloguidien--regret-de-voyage"&gt;Bloguidien : regret de voyage&lt;/h1&gt;
&lt;p&gt;Le sujet &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt; du jour est : &amp;quot;Un voyage que tu regrettes ? Pourquoi ?&amp;quot;&lt;/p&gt;
&lt;p&gt;Dans mon cas il s&amp;#39;agit d&amp;#39;un city-trip à Bucharest, en Roumanie. L&amp;#39;endroit est très bien, par contre nous étions un groupe de dix amis, et outre les difficultés logistiques que ça implique (dix personnes ça nécessite trois taxis, par exemple) c&amp;#39;était surtout pénible pour se mettre d&amp;#39;accord sur quoi faire. On aura perdu beaucoup de temps à tergiverser pour trop peu de temps passé à profiter de la ville.&lt;/p&gt;
&lt;p&gt;Cette explosion du coût de communication au sein d&amp;#39;un groupe est observée depuis un fameux bail, et documentée dans &lt;a href="https://fr.wikipedia.org/wiki/Le_Mythe_du_mois-homme"&gt;The Mythical Man-Month&lt;/a&gt;. C&amp;#39;est un résultat empirique qui se comprend intuitivement : trois personnes impliquent trois voies de communication, quatre personnes impliquent six voies de communication, cinq personnes dix voies, et ainsi de suite. La complexité de la communication croît bien plus vite que la taille de l&amp;#39;équipe, ce qui tend vers une paralysie totale du groupe.&lt;/p&gt;
&lt;p&gt;C&amp;#39;est pour ça qu&amp;#39;on conseille de plus en plus de limiter la taille des équipes projet. Jeff Sutherland (auteur de The Scrum Guide) conseille de &lt;a href="https://www.scruminc.com/scrum-keep-team-size-under-7/"&gt;ne pas dépasser sept personnes&lt;/a&gt;, Jason Fried (fondateur et CEO de Basecamp) relate que la plupart du travail dans son entreprise est accompli par &lt;a href="https://signalvnoise.com/svn3/threes-company/"&gt;des équipes de trois personnes&lt;/a&gt;, tandis que Jeff Bezos (à la tête d&amp;#39;une petite PME qui s&amp;#39;appelle Amazon) dit que la taille idéale d&amp;#39;une équipe est quand &lt;a href="https://www.fastcompany.com/50106/inside-mind-jeff-bezos-5"&gt;deux pizzas suffissent à la nourrir&lt;/a&gt; donc en comptant large on parle de deux à cinq personnes. Ça résonne avec mon expérience, parmi les projets de développement logiciel auxquels j&amp;#39;ai participé ceux qui avaient le plus de succès comptaient cinq personnes ou moins. À l&amp;#39;inverse j&amp;#39;ai vu piétiner des projets pourtant largement staffés, et j&amp;#39;en vois encore.&lt;/p&gt;
&lt;p&gt;Keep it simple, keep it small.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Ce post fait partie d&amp;#39;une &lt;a href="/tags/bloguidien/"&gt;série&lt;/a&gt; dans le cadre du &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt;, une inspiration à l&amp;#39;écriture quotidienne à l&amp;#39;initiative de &lt;a href="https://lord.re"&gt;Lord&lt;/a&gt; et &lt;a href="https://dryusdan.space/"&gt;Dryusdan&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Tue, 15 Oct 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/10/15/bloguidien_regret_de_voyage.html</guid>
	</item>
	<item>
		<title>Bloguidien, jour zéro</title>
		<link>https://blog.jkbockstael.be/posts/2024/10/14/bloguidien_jour_zero.html</link>
		<description>&lt;h1 id="bloguidien-jour-zéro"&gt;Bloguidien, jour zéro&lt;/h1&gt;
&lt;p&gt;Je m&amp;#39;embarque dans l&amp;#39;initiative &lt;a href="https://bloguidien.fr/"&gt;Bloguidien&lt;/a&gt;, et vais faire mon possible pour chaque jour écrire quelque chose sur base de l&amp;#39;inspiration fournie.&lt;/p&gt;
&lt;p&gt;L&amp;#39;initiative me plaît parce qu&amp;#39;il n&amp;#39;y a pas d&amp;#39;incitation au volume, on ne parle pas ici d&amp;#39;écrire un livre. Elle me plaît parce que les graines d&amp;#39;inspiration envisagées vont un peu dans tous les sens au lieu de forcer un thème et de ce fait exclure ceux qui ne sont pas experts de ce thème (on me souffle que l&amp;#39;absence d&amp;#39;expertise ne freine que ceux qui se sentent imposteurs, pas les vrais imposteurs). Et puis elle me plaît parce qu&amp;#39;elle est francophone, bien que lancée par des gens qui eux aussi baignent dans un milieu qui est normé anglophone.&lt;/p&gt;
&lt;p&gt;Le sujet proposé aujourd&amp;#39;hui me fait sourire parce qu&amp;#39;il est réflexif : &amp;quot;Quel est l&amp;#39;article / la série de ton blog que tu apprécies le plus ?&amp;quot;&lt;/p&gt;
&lt;p&gt;Après mûre réflexion (ou pas du tout) je choisis &lt;a href="/posts/2011/03/17/pentes_glissantes.html"&gt;&amp;quot;Pentes glissantes&amp;quot;&lt;/a&gt; parce que c&amp;#39;est un billet que j&amp;#39;avais écrit pour un podcast qui ne se prenait pas trop au sérieux. C&amp;#39;était une chouette expérience, que je ne renouvellerai peut-être pas faute d&amp;#39;affinités pour le format radio mais qui valait tout à fait le coup. C&amp;#39;est aussi un billet qui ne parle ni de musique ni d&amp;#39;informatique, ça lui donne une saveur supplémentaire.&lt;/p&gt;
&lt;p&gt;Pour compenser, deux mentions honorables pour relativement récemment mon travail d&amp;#39;archéologie et de reverse-engineering (en tout cas c&amp;#39;est le ressenti) pour &lt;a href="/posts/2020/04/09/pimp_my_gnu_screen.html"&gt;former GNU Screen à mon image&lt;/a&gt;, ainsi que plus anciennement &lt;a href="/posts/2010/12/05/php_dot2array.html"&gt;un post qui m&amp;#39;a valu une offre d&amp;#39;emploi&lt;/a&gt;. Faudrait pas non plus se montrer trop humain.&lt;/p&gt;
</description>
		<pubDate>Mon, 14 Oct 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/10/14/bloguidien_jour_zero.html</guid>
	</item>
	<item>
		<title>OpenAI in name only</title>
		<link>https://blog.jkbockstael.be/posts/2024/09/30/openai_in_name_only.html</link>
		<description>&lt;h1 id="openai-in-name-only"&gt;OpenAI in name only&lt;/h1&gt;
&lt;p&gt;Il y a &lt;a href="https://gotosocial.jkbockstael.be/@jkb/statuses/01EKEX0M5RH1CZHG4GMTB3T1MC"&gt;exactement quatre ans&lt;/a&gt; j&amp;#39;écrivais &amp;quot;OpenAI in name only, for it is neither&amp;quot; (référence rincée, aucune honte).&lt;/p&gt;
&lt;p&gt;Aujourd&amp;#39;hui ce qui se dit c&amp;#39;est que Sam Altman &lt;a href="https://www.reuters.com/technology/artificial-intelligence/openai-remove-non-profit-control-give-sam-altman-equity-sources-say-2024-09-25/"&gt;souhaite changer la gouvernance d&amp;#39;OpenAI&lt;/a&gt; pour retirer l&amp;#39;aspect non-lucratif, et recevoir des parts de la structure résultante. Le même Sam Altman qui &lt;a href="https://arstechnica.com/tech-policy/2024/09/openai-asked-us-to-approve-energy-guzzling-5gw-data-centers-report-says/"&gt;drague le régulateur&lt;/a&gt; en agitant l&amp;#39;épouvantail chinois pour pouvoir ouvrir plusieurs datacenters d&amp;#39;une capacité de 5GW chacun (oui giga, pas mega), ce qui impliquerait certainement de nouvelles centrales nucléaires et il se trouve que par un heureux hasard Altman &lt;a href="https://www.fastcompany.com/91136574/oklo-ipo-spac-sam-altman"&gt;a investi gros dans une société active dans le domaine nucléaire&lt;/a&gt; (qui n&amp;#39;a jamais dégagé le moindre bénéfice). Le même qui avec la bouche en cœur demande à TSMC de s&amp;#39;embarquer dans un projet de construction de &lt;em&gt;trente-six&lt;/em&gt; nouvelles fonderies, ce qui lui a valu un refus et &lt;a href="https://www.digitaltrends.com/computing/tsmc-rejects-podcasting-bro-sam-altman-openai/"&gt;paraît il un surnom de &amp;quot;podcasting bro&amp;quot;&lt;/a&gt;. Ouch.&lt;/p&gt;
&lt;p&gt;Faut dire qu&amp;#39;il a besoin de faire rentrer des thunes le bougre, son cheval de bataille OpenAI &lt;a href="https://www.nytimes.com/2024/09/25/technology/mira-murati-openai.html"&gt;brûle de l&amp;#39;argent bien plus vite qu&amp;#39;il en engrange&lt;/a&gt;. Dans un monde normal on en tirerait la conclusion que l&amp;#39;entreprise n&amp;#39;est pas rentable (OpenAI existe depuis presque dix ans, on a franchi les douleurs de croissance depuis longtemps), mais tout ce qui touche de près ou de loin à l&amp;#39;informatique n&amp;#39;est pas soumis à la logique dans le capitalisme moribond, donc à la place on va lever des investissements et des crédits.&lt;/p&gt;
&lt;p&gt;Sam Altman est un investisseur, du pur produit Y Combinator, donc il sait que le seul moyen de sauver les meubles à ce stade est de redoubler d&amp;#39;enthousiasme et espérer que la hype machine attire des investissements à court terme. Du coup les &amp;quot;plans&amp;quot; deviennent ambitieux, les promesses encore plus grandioses. Sur son blog il nous annonce &amp;quot;de la superintelligence dans quelques milliers de jours&amp;quot;, même s&amp;#39;il admet que &amp;quot;ça pourrait prendre plus de temps&amp;quot;. Mais bon il &amp;quot;est confiant&amp;quot; et il &amp;quot;croit&amp;quot; que le futur sera brillant. Merci Sam, ceci est un business plan vraiment solide.&lt;/p&gt;
&lt;p&gt;The hype must go on. Faster.&lt;/p&gt;
</description>
		<pubDate>Mon, 30 Sep 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/09/30/openai_in_name_only.html</guid>
	</item>
	<item>
		<title>Zéros</title>
		<link>https://blog.jkbockstael.be/posts/2024/08/19/zeros.html</link>
		<description>&lt;h1 id="zéros"&gt;Zéros&lt;/h1&gt;
&lt;p&gt;Allez lire &lt;a href="https://vinclusif.substack.com/p/eloge-des-zeros"&gt;&amp;quot;Éloge des zéros&amp;quot;&lt;/a&gt;, la dernière petite bafouille de cette chère Sand dont les idées et les mots me font bien souvent hocher la tête avec sourire.&lt;/p&gt;
&lt;p&gt;J&amp;#39;insiste. Ce qui est écrit là me parle beaucoup, et en grande partie elle y écrit des choses que j&amp;#39;aimerais dire mais elle le fait bien mieux que moi.&lt;/p&gt;
&lt;p&gt;J&amp;#39;ai moi aussi grandi dans un milieu hyper-compétitif où faire des choses sans y exceller était &amp;quot;une fantaisie&amp;quot;, où il ne suffit pas d&amp;#39;être content il faut être admiré, où la validité d&amp;#39;une approche ne tient pas du tout à ce qu&amp;#39;on en retire soi-même mais bien à ce qu&amp;#39;on en perçoit de l&amp;#39;extérieur. Sans grande surprise cette pression venue du dessus n&amp;#39;a pas engendré un multi-champion mais plutôt un multi-couillon qui n&amp;#39;ose pas faire grand chose. La peur de se ridiculiser prend la plupart du temps le dessus, parce que faire quelque chose c&amp;#39;est s&amp;#39;exposer au jugement. Quand le pilier moral de ton enfance c&amp;#39;est le qu&amp;#39;en-dira-t-on tu apprends vite que le meilleur moyen de ne pas se ridiculiser c&amp;#39;est de ne rien faire.&lt;/p&gt;
&lt;p&gt;Heureusement j&amp;#39;ai pu m&amp;#39;en sortir partiellement avec un mélange de refus et de furtivité. Ayant grandi gringalet les compétitions sportives m&amp;#39;étaient inaccessibles, quand plus tard mon corps n&amp;#39;était plus un obstacle et que j&amp;#39;ai pu pratiquer du sport régulièrement j&amp;#39;ai toujours refusé de prendre part aux tournois inter-clubs. Si je ramenais un 18/20 à la maison mes parents trouvaient toujours un moyen de me demander quel score avait obtenu Machin dont on sait d&amp;#39;avance qu&amp;#39;il claque toujours des 20, du coup j&amp;#39;ai fini mon secondaire en maîtrisant l&amp;#39;art d&amp;#39;obtenir pile poil la note qu&amp;#39;il faut pour ne pas être recalé (et je n&amp;#39;ai jamais achevé mes études supérieures).&lt;/p&gt;
&lt;p&gt;La furtivité c&amp;#39;est plus simple : quand on ne parle pas de ce qu&amp;#39;on fait et qu&amp;#39;on le fait loin des regards il est peu probable qu&amp;#39;on finisse par se ridiculiser. L&amp;#39;inconvénient c&amp;#39;est qu&amp;#39;on se prive du soutien ou des conseils qui rendraient la chose plus aisée, en plus de se priver de la satisfaction du partage. Mes amis disent de moi que je suis &amp;quot;discret&amp;quot;.&lt;/p&gt;
&lt;p&gt;Enfin bon je m&amp;#39;en suis sorti dans le sens où je suis encore en vie, je pratique un métier qui n&amp;#39;est pas le dernier choix de la liste, je vis avec quelqu&amp;#39;un qui n&amp;#39;a pas été choisi par mes parents… mais il y a encore une foule de choses que je n&amp;#39;essaie même pas, paralysé par l&amp;#39;idée que ne pouvant pas y consacrer beaucoup de temps j&amp;#39;y serai mauvais. Mes guitares peuvent en témoigner.&lt;/p&gt;
&lt;p&gt;Là où je m&amp;#39;en tire pas trop mal c&amp;#39;est que je suis barbu dans une société où les hommes ont tous droit à l&amp;#39;erreur et sont même félicités pour leurs échecs. On ne dit pas &amp;quot;j&amp;#39;ai planté six tentatives d&amp;#39;entreprises&amp;quot;, on dit &amp;quot;je suis serial-entrepreneur&amp;quot;. Pas certain que ça marche aussi facilement en version &amp;quot;entrepreneuse&amp;quot;, mais sur cet aspect je préfère laisser la parole à celles qui savent.&lt;/p&gt;
&lt;p&gt;Pour ma part j&amp;#39;en reste à ceci : clamons le droit à la médiocrité, soyons ordinaires avec la tête haute. Parce que ce qui compte ce n&amp;#39;est pas ce qu&amp;#39;on va laisser, ce n&amp;#39;est pas comment on est perçu. Ce qui compte c&amp;#39;est ce qu&amp;#39;on vit.&lt;/p&gt;
</description>
		<pubDate>Mon, 19 Aug 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/08/19/zeros.html</guid>
	</item>
	<item>
		<title>Fini de jouer</title>
		<link>https://blog.jkbockstael.be/posts/2024/08/12/fini_de_jouer.html</link>
		<description>&lt;h1 id="fini-de-jouer"&gt;Fini de jouer&lt;/h1&gt;
&lt;p&gt;Ça y est les jeux olympiques sont finis. Pfiou.&lt;/p&gt;
&lt;p&gt;En règle générale je me fiche un peu du sport. Ayant grandi du côté chétif de la force je n&amp;#39;ai pas développé de goût personnel pour la pratique sportive, et la plupart du temps regarder d&amp;#39;autres gens faire du sport c&amp;#39;est chiant comme la pluie. J&amp;#39;apprécie certaines valeurs véhiculées – la persévérance et le respect mutuel semblent bien développés chez tous ces athlètes – par contre les compétitions à grands renforts de drapeaux et les relents nationalistes qu&amp;#39;elles laisent une fois les confettis retombés me filent un peu la gerbe. Donc on va pas se mentir : ce que j&amp;#39;ai vu des ceux jeux olympiques c&amp;#39;était involontairement ou indirectement.&lt;/p&gt;
&lt;p&gt;Concrètement ça veut dire que ce que j&amp;#39;en ai perçu c&amp;#39;est avant tout les acclamations devant certains exploits, les moments plutôt amusants, et les polémiques. Ah les polémiques, tant de polémiques ! C&amp;#39;est une grande diversion par les élites de ce monde, qui sont plus ou moins reptiliens et plus ou moins sataniques selon qui parle. Il y a du blasphème mais en fait non mais en fait si mais de toute façon ceux qui hurlent au blasphème feraient crucifier Jésus s&amp;#39;ils le croisaient maintenant, comme toujours. Les femmes sont des femmes tant qu&amp;#39;elles sont minces et belles, dès qu&amp;#39;elles ont l&amp;#39;outrecuidance d&amp;#39;avoir de la force elles deviennent des hommes et il faut les punir (on devrait avoir l&amp;#39;habitude avec les Williams pourtant). La liste est longue et ridicule.&lt;/p&gt;
&lt;p&gt;Vu d&amp;#39;ici ce qui aura fait le plus de bruit c&amp;#39;est encore une fois des conservateurs blancs douillets qui ne supportent pas la moindre déviation par-rapport à leur norme et n&amp;#39;hésitent pas du tout à inventer des déviations sur lesquelles hurler. Par contre leur silence est assourdissant face à la présence d&amp;#39;un violeur parmi les candidats, face aux réquisitions de logements étudiants, face aux sans-abris qui font désordre et sont donc jetés hors de la ville, face à la situation des Parisiens enfermés chez eux, face à l&amp;#39;interdiction de voile pour les athlètes Françaises, à la présence d&amp;#39;athlètes Israëliens alors que les Russes sont persona non grata, aux dépenses illimitées par un gouvernement qui ne cesse de répéter qu&amp;#39;il n&amp;#39;y a pas d&amp;#39;argent, la liste est longue…&lt;/p&gt;
&lt;p&gt;Enfin bon, c&amp;#39;est passé. La prochaine fois ça sera mieux. Ça se passera à Los Angeles donc on ne verra rien de tout ça.&lt;/p&gt;
</description>
		<pubDate>Mon, 12 Aug 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/08/12/fini_de_jouer.html</guid>
	</item>
	<item>
		<title>Not-so-old man yells at clouds</title>
		<link>https://blog.jkbockstael.be/posts/2024/08/05/not_so_old_man_yells_at_clouds.html</link>
		<description>&lt;h1 id="not-so-old-man-yells-at-cloud"&gt;Not-so-old man yells at cloud&lt;/h1&gt;
&lt;p&gt;En mai j&amp;#39;ai constaté que mon compte &lt;a href="https://setiathome.berkeley.edu/"&gt;SETI@home&lt;/a&gt; date de mai 1999. Vingt-cinq ans de contributions de temps CPU (et plus récemment GPU) à du calcul scientifique distribué, le temps passe vite. Ça fout le vertige un peu, mais pas autant que quand je vois la quantité de ressources qu&amp;#39;ont englouti les divers délires à base de blockchain au cours des seize dernières années. Je n&amp;#39;ose même pas imaginer ce qu&amp;#39;on pourrait accomplir en mettant tous ces clusters à disposition de la recherche scientifique au lieu de chasser des billets de Monopoly virtuels.&lt;/p&gt;
&lt;p&gt;Il y a quelques années j&amp;#39;aurais dit que les cryptomonnaies étaient une mauvaise application des blockchains, qui sont une technologie intéressantes. Le temps m&amp;#39;a prouvé que j&amp;#39;avais tort, il n&amp;#39;existe pas de bonne application des blockchains. Chaque contre-exemple qu&amp;#39;on m&amp;#39;a avancé serait plus efficace, plus robuste, plus économe avec à peu près n&amp;#39;importe quelle autre technologie. On est totalement face à une solution à la recherche de problème, massivement adoptée par des escrocs de tous poils et des idiots utiles.&lt;/p&gt;
&lt;p&gt;Même chose pour l&amp;#39;engouement de ces dernières années pour tout ce qui est &amp;quot;intelligence artificielle&amp;quot; (pire terme possible pour une notion on ne peut plus nébuleuse). Comme pour les blockchains le problème est surtout dans les promesses des techbros : on présente ça comme étant The Next Big Thing qui changera absolument tout (sans jamais préciser comment) et les investisseurs sont partagés entre ceux qui ne comprennent rien mais embarquent par peur de louper le coche, et ceux qui ont compris que le seul coche à ne pas louper est une bulle spéculative sur laquelle surfer tant qu&amp;#39;elle dure. Au diable l&amp;#39;impact, y&amp;#39;a du fric à se faire. &lt;a href="https://www.datacenterknowledge.com/sustainability/google-s-emissions-shot-up-48-over-five-years-due-to-ai"&gt;Le bilan carbone de Google a bondi de 48% en cinq ans&lt;/a&gt; alors qu&amp;#39;on vit dans une époque où la réduction drastique devrait être le maître mot, c&amp;#39;est du délire total.&lt;/p&gt;
&lt;p&gt;Pendant ce temps je vois dans mon métier des juniors (et tristement des moins juniors) se reposer sur ChatGPT pour ne surtout pas réfléchir, et s&amp;#39;en vanter au nom du &amp;quot;temps gagné&amp;quot;. Il y a deux-trois vérités que les vendeurs de générateurs, leurs utilisateurs enthousiastes, et les managers lassés des salaires des devs refusent d&amp;#39;accepter : dans le développement de logiciels la partie difficile n&amp;#39;est pas d&amp;#39;écrire du code, et dans le développement logiciel la majeure partie du travail n&amp;#39;a même pas à impliquer un ordinateur. Il n&amp;#39;y a rien de révolutionnaire dans un autocomplete inefficace qui génère des défauts qui ne seront pas détectés avant qu&amp;#39;il soit trop tard (&lt;a href="https://dl.acm.org/doi/pdf/10.1145/3613904.3642596"&gt;malgré la perception positive qu&amp;#39;on peut avoir de leur output&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Peut-être que le carnage récent par CrowdStrike sera un rappel de l&amp;#39;importance de la correction des logiciels. Peut-être. En tout cas ce qui est certain c&amp;#39;est que je ne manquerai jamais de boulot.&lt;/p&gt;
</description>
		<pubDate>Mon, 05 Aug 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/08/05/not_so_old_man_yells_at_clouds.html</guid>
	</item>
	<item>
		<title>Mercredi 8 mai</title>
		<link>https://blog.jkbockstael.be/posts/2024/05/08/mercredi_8_mai.html</link>
		<description>&lt;h1 id="mercredi-8-mai"&gt;Mercredi 8 mai&lt;/h1&gt;
&lt;p&gt;Internet c&amp;#39;est formidable parce qu&amp;#39;on peut y lire ce que tout le monde y met, Internet c&amp;#39;est formidable parce que n&amp;#39;importe qui peut y mettre n&amp;#39;importe quoi.&lt;/p&gt;
&lt;p&gt;C&amp;#39;est une bonne source de divertissement, il y a de tout et ces gens ont une imagination débordante. J&amp;#39;ai une certaine fascination par ce que toute la complosphère y produit de délirant et parmi les théories fumeuses celle de la Terre plate fournit à elle seule des heures d&amp;#39;amusement.&lt;/p&gt;
&lt;p&gt;Les platistes ont ceci de très drôle qu&amp;#39;ils se réclament de la remise en question fondamentale à toute recherche scientifique, mais n&amp;#39;hésitent pas à balayer du revers de la main tout résultat expérimental qui n&amp;#39;irait pas dans leur sens. Demandez à un platistes pourquoi les étoiles dans le ciel ne se déplacent pas suivant la même courbe selon la latitude où on se trouve, rares sont ceux qui tentent même de répondre. C&amp;#39;est la même pour les résultats mathématiques aussi cela dit. Dans le monde des platistes la gravité n&amp;#39;existe pas et les objets tombent parce qu&amp;#39;ils sont plus denses que l&amp;#39;air, mais il n&amp;#39;y a rien pour définir ce qu&amp;#39;est la densité puisque la gravité n&amp;#39;existe pas. Qu&amp;#39;importe, l&amp;#39;art du complotiste tient en une capacité infaillible à ne voir que ce qu&amp;#39;il veut voir et ignorer tout ce qui pourrait contredire son intuition.&lt;/p&gt;
&lt;p&gt;Quelque part le complotisme c&amp;#39;est comme la gestion d&amp;#39;entreprise.&lt;/p&gt;
&lt;p&gt;Il y a quelques années je travaillais dans une boîte qui avait au centre de son activité un processus d&amp;#39;évaluation de risque très élaboré impliquant plus de 200 variables. C&amp;#39;était un processus très compliqué mais aussi très efficace, les risques évalués en amont étaient très proches des résultats observés en aval. Mais c&amp;#39;était aussi un processus coûteux en temps et en effort, donc quand un étudiant en mathématiques à demander à faire un stage auprès de nous nous avons sauté sur l&amp;#39;occasion pour lui demander une analyse statistique de ce processus pour chercher des pistes de simplification.&lt;/p&gt;
&lt;p&gt;Au bout de six mois son verdict était clair : sur les 200 variables impliquées il n&amp;#39;y en avait que 17 qui étaient fortement correllées au résultat, on pouvait drastiquement simplifier le processus et donc grandement augmenter le rendement de l&amp;#39;entreprise. Formidable ! On implémente ça quand ? Comment ça &amp;quot;jamais&amp;quot; ? Pourquoi ? Parce que &amp;quot;c&amp;#39;est correct au niveau mathématique, mais ça n&amp;#39;a pas de sens au niveau business de retirer tout ça&amp;quot;. Le résultat était contraire à l&amp;#39;intuition du décideur, donc il n&amp;#39;existait pas. Au moins il ne l&amp;#39;a pas accusé d&amp;#39;avoir menti, alors qu&amp;#39;on sait tous qu&amp;#39;Ératosthène est une invention de la NASA !&lt;/p&gt;
&lt;p&gt;Plus sérieusement, regardez &lt;a href="https://www.youtube.com/watch?v=JTfhYyTuT44"&gt;In Search Of A Flat Earth&lt;/a&gt; de Dan Olson. Il y prend le temps de chercher à comprendre d&amp;#39;où viennent les délires platistes et comment ils s&amp;#39;inscrivent dans un contexte politique et social.&lt;/p&gt;
</description>
		<pubDate>Wed, 08 May 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/05/08/mercredi_8_mai.html</guid>
	</item>
	<item>
		<title>Mardi 7 mai</title>
		<link>https://blog.jkbockstael.be/posts/2024/05/07/mardi_7_mai.html</link>
		<description>&lt;h1 id="mardi-7-mai"&gt;Mardi 7 mai&lt;/h1&gt;
&lt;p&gt;Pour ceux qui aiment Dongeons &amp;amp; Dragons, ceux qui aiment les jeux de rôle sur PC qui ne se résument pas à frapper et piller, et ceux qui aiment les choses vraiment bien faites : jouez à &lt;a href="https://baldursgate3.game/"&gt;Baldur&amp;#39;s Gate 3&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Malheureusement je n&amp;#39;ai pas encore pu en parcourir autant que ce que j&amp;#39;aimerais, la vie ça prend du temps, mais tout ce que j&amp;#39;ai pu voir est tout simplement parfait. On sent que c&amp;#39;est un ouvrage d&amp;#39;art, un projet passion, quelque chose d&amp;#39;ambitieux pour lequel les auteurs ont pu disposer des moyens et de la liberté qu&amp;#39;ils voulaient. Si on met de côté l&amp;#39;échelle immense du projet et le budget immense que ça implique, c&amp;#39;est finalement des caractéristiques qu&amp;#39;on retrouve dans beaucoup de jeux sortis par des studios indépendants et c&amp;#39;est ce qui me fait préférer la scène &amp;quot;indie&amp;quot; depuis des années : ces jeux ont de la personnalité, on y sent que des choix marqués ont été faits pour suivre une vision claire, on sent que le but premier était de sortir un bel ouvrage quitte à prendre le risque que ce soit un flop commercial.&lt;/p&gt;
&lt;p&gt;Je suis loin d&amp;#39;être le seul à dire du bien de Baldur&amp;#39;s Gate. Outre les chiffres de vente il y a la presse qui ne tarit aucun éloge, les nombreux prix remportés, et les commentaires extrêmement positifs des joueurs. Il y en a un qui m&amp;#39;a marqué en particulier : le joueur y soulignait qu&amp;#39;absolument toutes les actions du jeu peuvent être faites à la souris, ce qui lui permettait d&amp;#39;en profiter pleinement malgré son hémiplégie. Un bel exemple d&amp;#39;accessibilité en plus!&lt;/p&gt;
&lt;p&gt;Ça semble peu mais c&amp;#39;est beaucoup. Un autre aspect qui améliore l&amp;#39;accessibilité de Baldur&amp;#39;s Gate 3 est l&amp;#39;absence totale d&amp;#39;action minutée, on a tout le temps qu&amp;#39;on veut pour faire toute action. Ça aussi c&amp;#39;est quelque chose qui change tout, si on ne peut pas compter sur des la coordination rapide. Tous les dialogues sont sous-titrés, y compris la narration, les malentendants apprécieront. La palette des couleurs peut être changée pour de nombreux éléments de l&amp;#39;interface, les daltoniens apprécieront. La taille des textes peut être agrandie, on peut passer en mode tour par tour quand on le veut, toutes les commandes clavier peuvent être changées, et les rageux rageront mais il y a un mode facile qui rend le combat presque trivial.&lt;/p&gt;
&lt;p&gt;J&amp;#39;ai envie de dire : faites comme pour Baldur&amp;#39;s Gate 3. Faites des jeux soignés avec une attention à la qualité technique et à l&amp;#39;accessibilité, ne chassez pas les modes de la surenchère (tout le monde n&amp;#39;a pas besoin de ray-tracing ou de poils de barbe qu&amp;#39;on peut compter).&lt;/p&gt;
&lt;p&gt;Oh, et faites comme Larian Studios. Ne soyez pas cotés en bourse.&lt;/p&gt;
</description>
		<pubDate>Tue, 07 May 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/05/07/mardi_7_mai.html</guid>
	</item>
	<item>
		<title>Lundi 6 mai</title>
		<link>https://blog.jkbockstael.be/posts/2024/05/06/lundi_6_mai.html</link>
		<description>&lt;h1 id="lundi-6-mai"&gt;Lundi 6 mai&lt;/h1&gt;
&lt;p&gt;Le lundi on travaille en présentiel chez le client. Concrètement ça veut dire que j&amp;#39;arrive au bureau juste à temps pour un daily stand-up (parce que l&amp;#39;agilité c&amp;#39;est important) à la fin duquel je mets mon casque sans lequel le bruit incessant sur le plateau m&amp;#39;empêcherait d&amp;#39;accomplir quoi que ce soit. C&amp;#39;est la norme, mais il ne faudrait surtout pas changer quoi que ce soit aux open-spaces surpeuplés parce que ça favorise la communication. Ou truc du genre.&lt;/p&gt;
&lt;p&gt;Aujourd&amp;#39;hui ce que j&amp;#39;aurai écouté est plutôt sur l&amp;#39;axe doom metal, plutôt lent plutôt lourd. La découverte du jour c&amp;#39;est les Portugais de &lt;a href="https://processofguilt.bandcamp.com/album/slaves-beneath-the-sun"&gt;Process of Guilt&lt;/a&gt; dont l&amp;#39;album le plus récent me fait beaucoup penser à Cult of Luna période pré-Vertikal. C&amp;#39;est grand, c&amp;#39;est épais, ça souffre dans la colère. J&amp;#39;aime bien.&lt;/p&gt;
&lt;p&gt;Des fois je repense à mes premiers contacts avec de la musique qui n&amp;#39;était pas choisie par la radio ou par mes parents. Un cousin m&amp;#39;avait laissé seul avec sa caisse de vinyles, une platine, et une collection de bandes dessinées ; c&amp;#39;est de ce jour-là que me reste une certaine affection pour UK Subs, The Exploited, Motörhead, Metallica, Slayer, et bien d&amp;#39;autres. Je ne sais plus exactement quand ni comment mais j&amp;#39;ai accroché assez tôt avec les riffs plus lents ; mon morceau préféré sur &amp;quot;Master of Puppets&amp;quot; de Metallica était &amp;quot;The Thing That Should Not Be&amp;quot;, sur &amp;quot;1916&amp;quot; de Motörhead c&amp;#39;était &amp;quot;Nightmare/The Dreamtime&amp;quot;.&lt;/p&gt;
&lt;p&gt;C&amp;#39;est toujours amusant de voir que trente ans plus tard certaines choses n&amp;#39;ont pas changé.&lt;/p&gt;
</description>
		<pubDate>Mon, 06 May 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/05/06/lundi_6_mai.html</guid>
	</item>
	<item>
		<title>Advent of Code 2023, jour 2</title>
		<link>https://blog.jkbockstael.be/posts/2024/03/13/advent_of_code_2023_jour_2.html</link>
		<description>&lt;h1 id="advent-of-code-2023-jour-2"&gt;Advent of Code 2023, jour 2&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://adventofcode.com/2023/day/2"&gt;Deuxième jour&lt;/a&gt; du &lt;a href="https://adventofcode/2023"&gt;calendrier Advent of Code de décembre dernier&lt;/a&gt; : une liste de séries de tirages avec remise, dans le cas présent des cubes de couleur qu&amp;#39;on tire d&amp;#39;un sac. Il faut déterminer lesquelles de ces séries sont possibles étant donné une répartition donnée de cubes dans le sac duquel on fait les tirages, et additioner les numéros des séries possibles.&lt;/p&gt;
&lt;p&gt;C&amp;#39;est plus simple à comprendre avec un exemple :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green
Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue
Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red
Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red
Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dans cet exemple et avec la contrainte &lt;code&gt;{red: 12, green: 13, blue: 14}&lt;/code&gt; seules les séries 1, 2, et 5 sont possibles.&lt;/p&gt;
&lt;p&gt;Comme pour &lt;a href="/posts/2024/01/01/advent_of_code_2023_jour_1.html"&gt;le premier jour&lt;/a&gt; on va commencer par lire les données du problème depuis l&amp;#39;entrée standard, la contrainte quant à elle est indiquée en dur :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;const fs = require(&amp;#39;fs&amp;#39;);
const STDIN = 0;

// STDIO → [string]
const input = () =&amp;gt; fs
    .readFileSync(STDIN, &amp;#39;UTF-8&amp;#39;)
    .split(&amp;#39;\n&amp;#39;)
    .filter(line =&amp;gt; line.length &amp;gt; 0);

const inputData = input();

const constraint = {
    red: 12,
    green: 13,
    blue: 14
};
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Et établissons les étapes de traitement :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;parser chaque ligne de texte en une structure simple&lt;/li&gt;
&lt;li&gt;filtrer pour ne garder que les jeux qui répondent à la contrainte&lt;/li&gt;
&lt;li&gt;prendre l&amp;#39;identifiant de ces jeux&lt;/li&gt;
&lt;li&gt;en retourner la somme&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;// Part 1
const part1 = inputData
    .map(parseGameLine)
    .filter(isGamePossibleUsing(constraint))
    .map(property(&amp;#39;id&amp;#39;))
    .reduce(add, 0);

console.log(part1);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Les données du problème sont de la forme suivante :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;On va les parser vers cette forme :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
    id: 1,
    sets: [
        {red: 4, green: 0, blue: 3},
        {red: 1, green: 2, blue: 6},
        {red: 0, green: 2, blue: 0}
    ]
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Prenons le temps de préciser un peu de vocabulaire pour tout le code. Chaque ligne représente une partie (&amp;quot;game&amp;quot;) qui porte un numéro (&amp;quot;id&amp;quot;) et comporte un certain nombre de tirages (&amp;quot;set&amp;quot;) chacun comprenant un certain nombre de mains (&amp;quot;hand&amp;quot;) qui sont chacune un certain nombre de cubes d&amp;#39;une même couleur.&lt;/p&gt;
&lt;p&gt;Niveau implémentation on y va à grands coups de &lt;code&gt;split&lt;/code&gt; parce que c&amp;#39;est simple et ça fonctionne. Pour chaque partie on sépare l&amp;#39;identifiant des tirages, et pour chaque tirage on va normaliser les valeurs pour que la suite soit plus simple :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// string → integer
const toInteger = item =&amp;gt; parseInt(item, 10);

// string → set
// set := {red: integer, green: integer, blue: integer}
const parseSet = set =&amp;gt; {
    const hands = set
        .split(&amp;#39;, &amp;#39;)
        .map(hand =&amp;gt; hand.trim().split(&amp;#39; &amp;#39;));
    const parsed = {
        red: 0,
        green: 0,
        blue: 0
    }
    let color, count;
    for (hand of hands) {
        [count, color] = hand;
        parsed[color] = toInteger(count);
    }
    return parsed;
};

// string → game
// game := {id: integer, sets: [{red: integer, green: integer, blue: integer}]
const parseGameLine = line =&amp;gt; {
    const [idPart, setsPart] = line.split(&amp;#39;: &amp;#39;);
    return {
        id: toInteger(idPart.slice(5)),
        sets: setsPart.split(&amp;#39;;&amp;#39;).map(parseSet)
    };
};
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Maintenant qu&amp;#39;on a les données sous une forme traitable, passons au filtrage. On a une contrainte &lt;code&gt;{red: 12, green: 13, blue: 14}&lt;/code&gt; qui représente l&amp;#39;ensemble duquel on est censé effectuer les tirages. Une partie n&amp;#39;est possible que si chacun de ses tirages est possible, et un tirage n&amp;#39;est possible que si aucune couleur n&amp;#39;est tirée en plus grand nombre que ce qui est présent dans l&amp;#39;ensemble de départ. Concrètement :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// constraint → set → boolean
// constraint := {red: integer, green: integer, blue: integer}
// set := {red: integer, green: integer, blue: integer}
const isSetPossibleUsing = constraint =&amp;gt; set =&amp;gt; 
    set.red &amp;lt;= constraint.red
    &amp;amp;&amp;amp; set.green &amp;lt;= constraint.green
    &amp;amp;&amp;amp; set.blue &amp;lt;= constraint.blue;

// constraint → game → boolean
// constraint := {red: integer, green: integer, blue: integer}
// game := {id: integer, sets: [{red: integer, green: integer, blue: integer}]
const isGamePossibleUsing = constraint =&amp;gt; game =&amp;gt; 
    game.sets.every(isSetPossibleUsing(constraint));
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ensuite il faut prendre uniquement l&amp;#39;identifiant de chaque partie, et c&amp;#39;est le genre de chose qui sera certainement réutilisé dans d&amp;#39;autres problèmes :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// string → object → any
const property = name =&amp;gt; object =&amp;gt; object.hasOwnProperty(name)
    ? object[name]
    : undefined;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;D&amp;#39;ailleurs pour l&amp;#39;étape finale on réutilise une fonction définie pour le jour 1 :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// (integer, integer) → integer
const add = (a, b) =&amp;gt; a + b;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sur l&amp;#39;exemple cité plus haut le programme donne bien &lt;code&gt;8&lt;/code&gt; comme valeur de sortie, et son résultat sur l&amp;#39;entrée grandeur nature (une centaine de parties) est accepté. C&amp;#39;est bon pour la première partie.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;La deuxième partie nous demande de faire l&amp;#39;exercice inverse : pour chaque partie donnée, déterminer la contrainte minimale satisfaite par tous les tirages. Ensuite on doit multiplier ensemble les valeurs de contrainte minimale de chaque partie, et retourner la somme de ces produits. La séquence est claire :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;parser l&amp;#39;entrée exactement comme pour la première partie&lt;/li&gt;
&lt;li&gt;pour chaque partie en entrée, déterminer la contrainte minimale&lt;/li&gt;
&lt;li&gt;calculer le produit des valeurs de chaque contrainte (l&amp;#39;énoncé appelle ça &amp;quot;power&amp;quot;)&lt;/li&gt;
&lt;li&gt;en retourner la somme&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;// Part 2
const part2 = inputData
    .map(parseGameLine)
    .map(getMinimalConstraint)
    .map(constraintPower)
    .reduce(add, 0);

console.log(part2);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Pour obtenir la contrainte minimale il faut déterminer pour chaque couleur la plus grande valeur tirée :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// [integer] → integer
const max = list =&amp;gt; list.reduce((a,b) =&amp;gt; a &amp;gt; b ? a : b, 0);

// game → constraint
// game := {id: integer, sets: [{red: integer, green: integer, blue: integer}]
// constraint := {red: integer, green: integer, blue: integer}
const getMinimalConstraint = game =&amp;gt; ({
    red: max(game.sets.map(property(&amp;#39;red&amp;#39;))),
    green: max(game.sets.map(property(&amp;#39;green&amp;#39;))),
    blue: max(game.sets.map(property(&amp;#39;blue&amp;#39;))),
});
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Je n&amp;#39;aurais pas cru réutiliser &lt;code&gt;property&lt;/code&gt; dans le même problème, merci moi du passé.&lt;/p&gt;
&lt;p&gt;Comme on travaille ici uniquement avec des entiers positifs la fonction &lt;code&gt;max&lt;/code&gt; fait sa réduction à partir de zéro. Si ça devait fonctionner aussi avec des nombres négatifs il suffirait de partir de &lt;code&gt;-Infinity&lt;/code&gt; :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// [integer] → integer
const max = list =&amp;gt; list.reduce((a,b) =&amp;gt; a &amp;gt; b ? a : b, -Infinity);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Maintenant qu&amp;#39;on a la contrainte minimale pour chaque partie, il faut en calculer la &amp;quot;puissance&amp;quot; en multipliant ses termes ensemble :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// constraint → integer
// constraint := {red: integer, green: integer, blue: integer}
const constraintPower = constraint =&amp;gt; 
    constraint.red * constraint.green * constraint.blue;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Les données de l&amp;#39;énoncé ne donnent aucune partie pour laquelle une couleur serait totalement absente et aurait donc sa contrainte à zéro, si ce n&amp;#39;était pas le cas on devrait s&amp;#39;en protéger :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// constraint → integer
// constraint := {red: integer, green: integer, blue: integer}
const constraintPower = constraint =&amp;gt; 
    (constraint.red &amp;gt; 0 ? constraint.red : 1)
    * (constraint.green &amp;gt; 0 ? constraint.green : 1)
    * (constraint.blue &amp;gt; 0 ? constraint.blue : 1);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;C&amp;#39;est accepté sur les données de test, c&amp;#39;est accepté sur les données réelles, voilà qui est fait.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Pour récapituler, le programme entier :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// Advent of Code 2023 - Day 2
const fs = require(&amp;#39;fs&amp;#39;);
const STDIN = 0;

// STDIO → [string]
const input = () =&amp;gt; fs
    .readFileSync(STDIN, &amp;#39;UTF-8&amp;#39;)
    .split(&amp;#39;\n&amp;#39;)
    .filter(line =&amp;gt; line.length &amp;gt; 0);

// string → integer
const toInteger = item =&amp;gt; parseInt(item, 10);

// string → set
// set := {red: integer, green: integer, blue: integer}
const parseSet = set =&amp;gt; {
    const hands = set
        .split(&amp;#39;, &amp;#39;)
        .map(hand =&amp;gt; hand.trim().split(&amp;#39; &amp;#39;));
    const parsed = {
        red: 0,
        green: 0,
        blue: 0
    }
    let color, count;
    for (hand of hands) {
        [count, color] = hand;
        parsed[color] = toInteger(count);
    }
    return parsed;
};

// string → game
// game := {id: integer, sets: [{red: integer, green: integer, blue: integer}]
const parseGameLine = line =&amp;gt; {
    const [idPart, setsPart] = line.split(&amp;#39;: &amp;#39;);
    return {
        id: toInteger(idPart.slice(5)),
        sets: setsPart.split(&amp;#39;;&amp;#39;).map(parseSet)
    };
};

// constraint → set → boolean
// constraint := {red: integer, green: integer, blue: integer}
// set := {red: integer, green: integer, blue: integer}
const isSetPossibleUsing = constraint =&amp;gt; set =&amp;gt; 
    set.red &amp;lt;= constraint.red
    &amp;amp;&amp;amp; set.green &amp;lt;= constraint.green
    &amp;amp;&amp;amp; set.blue &amp;lt;= constraint.blue;

// constraint → game → boolean
// constraint := {red: integer, green: integer, blue: integer}
// game := {id: integer, sets: [{red: integer, green: integer, blue: integer}]
const isGamePossibleUsing = constraint =&amp;gt; game =&amp;gt; 
    game.sets.every(isSetPossibleUsing(constraint));

// string → object → any
const property = name =&amp;gt; object =&amp;gt; object.hasOwnProperty(name)
    ? object[name]
    : undefined;

// (integer, integer) → integer
const add = (a, b) =&amp;gt; a + b;

const inputData = input();

const constraint = {
    red: 12,
    green: 13,
    blue: 14
};

// Part 1
const part1 = inputData
    .map(parseGameLine)
    .filter(isGamePossibleUsing(constraint))
    .map(property(&amp;#39;id&amp;#39;))
    .reduce(add, 0);

console.log(part1);


// ---

// [integer] → integer
const max = list =&amp;gt; list.reduce((a,b) =&amp;gt; a &amp;gt; b ? a : b, 0);

// game → constraint
// game := {id: integer, sets: [{red: integer, green: integer, blue: integer}]
// constraint := {red: integer, green: integer, blue: integer}
const getMinimalConstraint = game =&amp;gt; ({
    red: max(game.sets.map(property(&amp;#39;red&amp;#39;))),
    green: max(game.sets.map(property(&amp;#39;green&amp;#39;))),
    blue: max(game.sets.map(property(&amp;#39;blue&amp;#39;))),
});

// constraint → integer
// constraint := {red: integer, green: integer, blue: integer}
const constraintPower = constraint =&amp;gt; 
    constraint.red * constraint.green * constraint.blue;

// Part 2
const part2 = inputData
    .map(parseGameLine)
    .map(getMinimalConstraint)
    .map(constraintPower)
    .reduce(add, 0);

console.log(part2);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;C&amp;#39;est disponible avec les entrées &lt;a href="https://github.com/jkbockstael/adventofcode-2023"&gt;sur GitHub&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Wed, 13 Mar 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/03/13/advent_of_code_2023_jour_2.html</guid>
	</item>
	<item>
		<title>Construire pour durer</title>
		<link>https://blog.jkbockstael.be/posts/2024/02/22/construire_pour_durer.html</link>
		<description>&lt;h1 id="construire-pour-durer"&gt;Construire pour durer&lt;/h1&gt;
&lt;p&gt;Pour mettre un peu d&amp;#39;ordre dans mes bookmarks et notes accumulés au fil des années je suis récemment passé à &lt;a href="https://joplinapp.org/"&gt;Joplin&lt;/a&gt; et j&amp;#39;y ai importé dix ans d&amp;#39;archives &lt;a href="https://evernote.com/"&gt;Evernote&lt;/a&gt;. La conversion de HTML vers Markdown n&amp;#39;est pas parfaite, mais qu&amp;#39;importe puique dans Evernote chaque page Web enregistrée est accompagnée de l&amp;#39;URL d&amp;#39;origine.&lt;/p&gt;
&lt;p&gt;Sauf que :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;un quart des ces URL renvoient HTTP 404 (ou HTTP 200 avec &amp;quot;404&amp;quot; dans le body parce que le Web est un monde cruel sans foi ni loi)&lt;/li&gt;
&lt;li&gt;un vingtième n&amp;#39;arrive pas à la couche HTTP puisque se heurte à NXDOMAIN&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On parle de pages qui étaient en ligne il y a moins de dix ans. C&amp;#39;est un problème parce que ça casse le côté &amp;quot;toile&amp;quot; du Web, on ne peut pas explorer un réseau dont les liens sont cassés. Sans compter l&amp;#39;utilité décroissante des moteurs de recherche à mesure que leurs résultats sont innondés de SEO-spam et maintenant de contenu bidon vomi par des LLM, il manque au milieu de Web une culture de pérrenité.&lt;/p&gt;
&lt;p&gt;Ce blog existe &lt;a href="/posts/2008/10/20/et_voila.html"&gt;depuis octobre 2008&lt;/a&gt;, initialement hébergé chez Blogger. En juillet 2009 j&amp;#39;ai pris le domaine &lt;code&gt;jkbockstael.be&lt;/code&gt; et ai fait pointer &lt;code&gt;blog.jkbockstael.be&lt;/code&gt; vers mon espace Blogger.&lt;/p&gt;
&lt;p&gt;Depuis ce jour les URL des articles de ce blog sont actifs. Si quelqu&amp;#39;un dans la deuxième moitié de 2009 a crée un lien vers un de ces articles, il fonctionne encore.&lt;/p&gt;
&lt;p&gt;Janvier 2014 j&amp;#39;ai quitté Blogger vers de l&amp;#39;auto-hébergement, cette fois &lt;a href="/posts/2014/01/22/diantre.html"&gt;en mode statique avec un générateur fait maison&lt;/a&gt; pour lequel j&amp;#39;ai fait le choix d&amp;#39;avoir une autre structure d&amp;#39;URL que celle de Blogger dans un soucis de découvrabilité. Pour faire la transition il y a dans la configuration du serveur une longue liste de redirections (HTTP 301) qui renvoient des anciens URLs format Blogger vers les nouveaux. Les liens de 2009 fonctionnent toujours presque 15 ans plus tard.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Redirect 301 /2008/10/et-voil.html https://blog.jkbockstael.be/posts/2008/10/20/et_voila.html
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Comme tout le site est statique dans les deux sens du terme (pas de génération à la demande et aucun code exécuté côté client) aucune mise à jour de PHP ou de JavaScript ne peut le casser. C&amp;#39;est du HTML standard et du CSS standard servis en HTTPS standard par un serveur qui existe depuis plus de 20 ans, autant dire qu&amp;#39;il n&amp;#39;y aura jamais d&amp;#39;événement de type &lt;code&gt;left-pad&lt;/code&gt;. On peut même le télécharger pour le lire hors-ligne.&lt;/p&gt;
&lt;p&gt;Bien sûr son existence en ligne dépend du domaine et du serveur, qui dépendent de moi pour rester actifs (ne fut-ce que pour continuer de les payer). Quand je serai mort il sera hors-ligne. C&amp;#39;est pourquoi désormais à chaque nouvelle publication je demande son archivage &lt;a href="https://web.archive.org/web/20240000000000*/https://blog.jkbockstael.be"&gt;sur Archive.org&lt;/a&gt;, et comme les URL ne changent pas il suffit d&amp;#39;archiver le nouvel article pour s&amp;#39;assurer que l&amp;#39;ensemble du blog soit correctement archivé (OK le précédent aussi pour que les liens précédent/suivant en bas de page soient à jour). C&amp;#39;est peut-être prétentieux de penser que quelqu&amp;#39;un voudrait lire mes textes après ma mort, mais au moins si c&amp;#39;est le cas ça sera possible.&lt;/p&gt;
&lt;p&gt;Finalement ce n&amp;#39;est pas un gros effort, je pense qu&amp;#39;on gagnerait collectivements à adopter de telles approches :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;avoir son propre domaine&lt;/li&gt;
&lt;li&gt;ne pas dépendre d&amp;#39;une plateforme mais héberger soi-même&lt;/li&gt;
&lt;li&gt;ne pas changer les URL, ou s&amp;#39;assurer d&amp;#39;un fallback&lt;/li&gt;
&lt;li&gt;avoir du statique autant que possible&lt;/li&gt;
&lt;li&gt;utiliser des technologies standard et éprouvées&lt;/li&gt;
&lt;li&gt;archiver si possible (donc faire du léger pour réduire le coût collectif de l&amp;#39;archivage)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Construisons pour l&amp;#39;avenir.&lt;/p&gt;
</description>
		<pubDate>Thu, 22 Feb 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/02/22/construire_pour_durer.html</guid>
	</item>
	<item>
		<title>Advent of Code 2023, jour 1</title>
		<link>https://blog.jkbockstael.be/posts/2024/01/01/advent_of_code_2023_jour_1.html</link>
		<description>&lt;h1 id="advent-of-code-2023-jour-1"&gt;Advent of Code 2023, jour 1&lt;/h1&gt;
&lt;p&gt;Premier jour de l&amp;#39;année, on sait ce que ça veut dire : tous les compteurs sont à zéro et on a envie d&amp;#39;entamer plein de choses, de prendre des bonnes résolutions, ou de dépoussiérer des projets délaissés. Donc je dépoussière le blog et je dépoussière le compte GitHub (fuck Microsoft et fuck Copilot mais j&amp;#39;y garde une présence pour l&amp;#39;exacte même raison que je garde une présence sur l&amp;#39;autre endroit maudit de Microsoft qu&amp;#39;est LinkedIn).&lt;/p&gt;
&lt;p&gt;Pour ce faire je vais (tenter de) compléter &lt;a href="https://adventofcode.com/2023"&gt;le calendrier Advent of Code de décembre dernier&lt;/a&gt;, en détaillant les obstacles intéressants pour que ça profite aux éventuels lecteurs, en JavaScript parce que pourquoi pas. Pas forcément un problème par jour par contre, j&amp;#39;ai une vie.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://adventofcode.com/2023/day/1"&gt;Premier jour&lt;/a&gt; : on demande de repérer dans chaque ligne de l&amp;#39;entrée le premier et le dernier chiffre, de les combiner afin d&amp;#39;obtenir un nombre à deux chiffre, et de renvoyer la somme des nombres ainsi formés.&lt;/p&gt;
&lt;p&gt;L&amp;#39;exemple fourni met en évidence un piège possible, le premier et le dernier chiffre peuvent très bien être le meme :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1abc2
pqr3stu8vwx
a1b2c3d4e5f
treb7uchet
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;On peut commencer par lire l&amp;#39;input et l&amp;#39;avoir à disposition sous forme de liste de lignes, un pattern qui sera répété dans les autres katas :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;const fs = require(&amp;#39;fs&amp;#39;);
const STDIN = 0;

// STDIO → [string]
const input = () =&amp;gt; fs
    .readFileSync(STDIN, &amp;#39;UTF-8)
    .split(&amp;#39;\n&amp;#39;)
    .filter(line =&amp;gt; line.length &amp;gt; 0);

const inputData = input();
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ensuite le plan est simple (c&amp;#39;est le premier jour après tout), pour chaque ligne de l&amp;#39;input on va :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;extraire les caractères qui sont des chiffres&lt;/li&gt;
&lt;li&gt;en prendre le premier et le dernier (qui sont éventuellement le même)&lt;/li&gt;
&lt;li&gt;les concaténer&lt;/li&gt;
&lt;li&gt;convertir ce résultat en nombre&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;puis additioner le tout.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;const part1 = inputData
    .map(takeDigits)
    .map(firstAndLast)
    .map(combine)
    .map(toInteger)
    .reduce(add, 0);

console.log(part1);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ça nous fait des fonctions plutôt triviale à implémenter :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// string → boolean
const isDigit = character =&amp;gt; &amp;#39;0123456789&amp;#39;.includes(character);

// string → [string]
const takeDigits = line =&amp;gt; Array.from(line).filter(isDigit);

// [string] → [string]
const firstAndLast = list =&amp;gt; [list[0], list[list.length - 1]];

// [string] → string
const combine = list =&amp;gt; list[0] + list[1];

// string → integer
const toInteger = item =&amp;gt; parseInt(item, 10);

// (integer, integer) → integer
const add = (a, b) =&amp;gt; a + b;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Effectivement ça marche sur l&amp;#39;input donné en exemple, et sur l&amp;#39;input réel le résultat est accepté comme réponse correcte.&lt;/p&gt;
&lt;p&gt;La deuxième partie est une variation sur la première (c&amp;#39;est habituel dans Advent of Code). Cette fois-ci la différence est qu&amp;#39;il faut aussi prendre en compte les chiffres qui sont écris en toutes lettres (one, two, three…). Voici l&amp;#39;input donné en exemple :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;two1nine
eightwothree
abcone2threexyz
xtwone3four
4nineeightseven2
zoneight234
7pqrstsixteen
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;En toute logique ça revient donc à trouver ces mots-chiffres et les remplacer par leur équivalent en chiffre, le reste du processus reste le même :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;const part2 = inputData
    .map(parseNumbers)
    .map(takeDigits)
    .map(firstAndLast)
    .map(combine)
    .map(toInteger)
    .reduce(add, 0);

console.log(part2);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;On voit dans l&amp;#39;exemple qu&amp;#39;il peut y avoir une intersection, dans &lt;code&gt;eightwothree&lt;/code&gt; on a un &lt;code&gt;eight&lt;/code&gt; comme premier mot-chiffre, un &lt;code&gt;three&lt;/code&gt; comme dernier mot-chiffre, mais un &lt;code&gt;two&lt;/code&gt; au milieu qui serait invisible si on remplaçait le &lt;code&gt;eight&lt;/code&gt; par &lt;code&gt;8&lt;/code&gt;. Exemple qui serait plus embêtant : &lt;code&gt;eighttwone&lt;/code&gt; où si on remplace les mots par des chiffres au fur et à mesure on se retrouve avec &lt;code&gt;82ne&lt;/code&gt; et on a loupé le &lt;code&gt;one&lt;/code&gt; qui serait le dernier chiffre. Il faut donc parcourir à partir de la gauche et remplacer uniquement le premier mot-chiffre qu&amp;#39;on rencontre, et faire de même en parcourant depuis la droite. Parcourir depuis la droite revient à parcourir depuis la gauche sur la chaîne retournée, en y cherchant des mots également retournés (eno, owt, eerht…).&lt;/p&gt;
&lt;p&gt;L&amp;#39;implémentation de &lt;code&gt;parseNumbers&lt;/code&gt; est un peu verbeuse, mais reste simple à raisonner :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// (string, string) → string
const concatenate = (a,b) =&amp;gt; `${a}${b}`;

// string → string
const reverse = word =&amp;gt; Array.from(word)
.reverse()
.reduce(concatenate, &amp;#39;&amp;#39;);

// string → string
const parseNumbers = word =&amp;gt; {
    const tokens = [&amp;#39;zero&amp;#39;, &amp;#39;one&amp;#39;, &amp;#39;two&amp;#39;, &amp;#39;three&amp;#39;, &amp;#39;four&amp;#39;, &amp;#39;five&amp;#39;, &amp;#39;six&amp;#39;, &amp;#39;seven&amp;#39;, &amp;#39;eight&amp;#39;, &amp;#39;nine&amp;#39;];

    const findToken = word =&amp;gt; token =&amp;gt; ({
        token: token,
        position: word.indexOf(token)
    });

    const found = match =&amp;gt; match.position !== -1;

    const matches = tokens =&amp;gt; word =&amp;gt; tokens
        .map(findToken(word))
        .filter(found)
        .sort((a,b) =&amp;gt; a.position - b.position)

    const parseFirstNumber = tokens =&amp;gt; word =&amp;gt; {
        const tokenMatches = matches(tokens)(word);
        if (tokenMatches.length === 0) {
            return word;
        }
        const firstToken = tokenMatches[0].token;
        return word.replace(firstToken, tokens.indexOf(firstToken));
    };

    const firstParsed = parseFirstNumber(tokens)(word);
    const lastParsed = parseFirstNumber(tokens.map(reverse))(reverse(firstParsed));

    return reverse(lastParsed);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ça fonctionne sur l&amp;#39;input donné en test, mais le résultat sur l&amp;#39;input réel est refusé.&lt;/p&gt;
&lt;p&gt;Le problème de cet input de test est qu&amp;#39;il montre le cas problématique où deux mots-chiffres se croisent, mais pas celui où un tel croisement est précédé ou suivi d&amp;#39;un chiffre. Par exemple dans &lt;code&gt;1twone&lt;/code&gt; le premier chiffre est &lt;code&gt;1&lt;/code&gt; et le dernier chiffre est &lt;code&gt;one&lt;/code&gt; mais l&amp;#39;algorithme ci-dessus consomme &lt;code&gt;two&lt;/code&gt; et rend &lt;code&gt;one&lt;/code&gt; invisible. Il faut donc le modifier pour repérer si un token trouvé est précédé d&amp;#39;un chiffre, et dans ce cas l&amp;#39;ignorer :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// string → string
const parseNumbers = word =&amp;gt; {
    const tokens = [&amp;#39;zero&amp;#39;, &amp;#39;one&amp;#39;, &amp;#39;two&amp;#39;, &amp;#39;three&amp;#39;, &amp;#39;four&amp;#39;, &amp;#39;five&amp;#39;, &amp;#39;six&amp;#39;, &amp;#39;seven&amp;#39;, &amp;#39;eight&amp;#39;, &amp;#39;nine&amp;#39;];

    const digits = [&amp;#39;0&amp;#39;, &amp;#39;1&amp;#39;, &amp;#39;2&amp;#39;, &amp;#39;3&amp;#39;, &amp;#39;4&amp;#39;, &amp;#39;5&amp;#39;, &amp;#39;6&amp;#39;, &amp;#39;7&amp;#39;, &amp;#39;8&amp;#39;, &amp;#39;9&amp;#39;];

    const findToken = word =&amp;gt; token =&amp;gt; {
        token: token,
        position: word.indexOf(token)
    });

    const found = match =&amp;gt; match.position !== -1;

    const matches = tokens =&amp;gt; word =&amp;gt; tokens
        .map(findToken(word))
        .filter(found)
        .sort((a,b) =&amp;gt; a.position - b.position)

    const parseFirstNumber = tokens =&amp;gt; word =&amp;gt; {
        const tokenMatches = matches(tokens)(word);
        if (tokenMatches.length === 0) {
            return word;
        }
        // ignore the matched token if there&amp;#39;s a digit before
        const digitMatches = matches(digits)(word);
        if (digitMatches.length &amp;gt; 0
            &amp;amp;&amp;amp; digitMatches[0].position &amp;lt; tokenMatches[0].position) {
            return word;
        }
        const firstToken = tokenMatches[0].token;
        return word.replace(firstToken, tokens.indexOf(firstToken));
    };

    const firstParsed = parseFirstNumber(tokens)(word);
    const lastParsed = parseFirstNumber(tokens.map(reverse))(reverse(firstParsed));

    return reverse(lastParsed);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Et là ça fonctionne ! Belle entrée en matière, c&amp;#39;est abordable mais pas non plus totalement trivial. Je ne sais pas si l&amp;#39;omission de ce cas &amp;quot;tricky&amp;quot; dans l&amp;#39;exemple est volontaire, mais si c&amp;#39;est le cas c&amp;#39;est bien joué.&lt;/p&gt;
&lt;p&gt;Mis bout à bout on a donc ceci pour les deux parties :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// Advent of Code 2023 - Day 01
const fs = require(&amp;#39;fs&amp;#39;);
const STDIN = 0;

// STDIO → [string]
const input = () =&amp;gt; fs
    .readFileSync(STDIN, &amp;#39;UTF-8&amp;#39;)
    .split(&amp;#39;\n&amp;#39;)
    .filter(line =&amp;gt; line.length &amp;gt; 0);

// string → boolean
const isDigit = character =&amp;gt; &amp;#39;0123456789&amp;#39;.includes(character);

// string → [string]
const takeDigits = line =&amp;gt; Array.from(line).filter(isDigit);

// [string] → [string]
const firstAndLast = list =&amp;gt; [list[0], list[list.length - 1]];

// [string] → string
const combine = list =&amp;gt; list[0] + list[1];

// string → integer
const toInteger = item =&amp;gt; parseInt(item, 10);

// (integer, integer) → integer
const add = (a, b) =&amp;gt; a + b;

const inputData = input();

const part1 = inputData
    .map(takeDigits)
    .map(firstAndLast)
    .map(combine)
    .map(toInteger)
    .reduce(add, 0);

console.log(part1);


// (string, string) → string
const concatenate = (a,b) =&amp;gt; `${a}${b}`;

// string → string
const reverse = word =&amp;gt; Array.from(word)
    .reverse()
    .reduce(concatenate, &amp;#39;&amp;#39;);

// string → string
const parseNumbers = word =&amp;gt; {
    const tokens = [&amp;#39;zero&amp;#39;, &amp;#39;one&amp;#39;, &amp;#39;two&amp;#39;, &amp;#39;three&amp;#39;, &amp;#39;four&amp;#39;, &amp;#39;five&amp;#39;, &amp;#39;six&amp;#39;, &amp;#39;seven&amp;#39;, &amp;#39;eight&amp;#39;, &amp;#39;nine&amp;#39;];

    const digits = [&amp;#39;0&amp;#39;, &amp;#39;1&amp;#39;, &amp;#39;2&amp;#39;, &amp;#39;3&amp;#39;, &amp;#39;4&amp;#39;, &amp;#39;5&amp;#39;, &amp;#39;6&amp;#39;, &amp;#39;7&amp;#39;, &amp;#39;8&amp;#39;, &amp;#39;9&amp;#39;];

    const findToken = word =&amp;gt; token =&amp;gt; ({
        token: token,
        position: word.indexOf(token)
    });

    const found = match =&amp;gt; match.position !== -1;

    const matches = tokens =&amp;gt; word =&amp;gt; tokens
        .map(findToken(word))
        .filter(found)
        .sort((a,b) =&amp;gt; a.position - b.position)

    const parseFirstNumber = tokens =&amp;gt; word =&amp;gt; {
        const tokenMatches = matches(tokens)(word);
        if (tokenMatches.length === 0) {
            return word;
        }
        // ignore the matched token if there&amp;#39;s a digit before
        const digitMatches = matches(digits)(word);
        if (digitMatches.length &amp;gt; 0
            &amp;amp;&amp;amp; digitMatches[0].position &amp;lt; tokenMatches[0].position) {
            return word;
        }
        const firstToken = tokenMatches[0].token;
        return word.replace(firstToken, tokens.indexOf(firstToken));
    };

    const firstParsed = parseFirstNumber(tokens)(word);
    const lastParsed = parseFirstNumber(tokens.map(reverse))(reverse(firstParsed));

    return reverse(lastParsed);
}

const part2 = inputData
    .map(parseNumbers)
    .map(takeDigits)
    .map(firstAndLast)
    .map(combine)
    .map(toInteger)
    .reduce(add, 0);

console.log(part2);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;C&amp;#39;est disponible avec les inputs &lt;a href="https://github.com/jkbockstael/adventofcode-2023"&gt;sur GitHub&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Mon, 01 Jan 2024 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2024/01/01/advent_of_code_2023_jour_1.html</guid>
	</item>
	<item>
		<title>Pimp my GNU Screen</title>
		<link>https://blog.jkbockstael.be/posts/2020/04/09/pimp_my_gnu_screen.html</link>
		<description>&lt;h1 id="pimp-my-gnu-screen"&gt;Pimp my GNU Screen&lt;/h1&gt;
&lt;p&gt;J&amp;#39;utilise le vénérable &lt;a href="https://www.gnu.org/software/screen/"&gt;GNU Screen&lt;/a&gt; depuis… un certain temps. J&amp;#39;ai perdu le compte exact mais &lt;code&gt;tmux&lt;/code&gt; n&amp;#39;existait pas encore et &lt;code&gt;tmux&lt;/code&gt; existe depuis 2007.&lt;/p&gt;
&lt;p&gt;C&amp;#39;est du GNU donc c&amp;#39;est spartiate et obscur mais ça a le mérite d&amp;#39;être là, d&amp;#39;être partout, et de fonctionner partout de la même manière. Par contre on sent que ça a perdu en popularité au fil des années, par exemple si on cherche des informations d&amp;#39;usage précises qui ne sont pas du copier-coller qui circule sans qu&amp;#39;on sache d&amp;#39;où ça vient ni comment ça marche. Demandez comment on change le &lt;code&gt;hardstatus&lt;/code&gt;, vous verrez.&lt;/p&gt;
&lt;p&gt;Signe des temps : quand je pose une question sur GNU Screen on me répond d&amp;#39;utiliser &lt;code&gt;tmux&lt;/code&gt;. D&amp;#39;accord. Donc à la place j&amp;#39;ai attendu d&amp;#39;avoir le temps de lire toute la documentation de GNU Screen de bout en bout pour savoir en détails ce qu&amp;#39;on peut en faire et comment on peut le configurer. Et là il s&amp;#39;avère que c&amp;#39;est plus flexible qu&amp;#39;on l&amp;#39;imagine au premier abord mais qu&amp;#39;il faut se coltiner des pages et des pages de documentation écrites par et pour des barbus d&amp;#39;avant le Web, donc je vous épargne ça et je partage mon fichier de configuration &lt;code&gt;screenrc&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Fonctionnalités en vrac dans cette config :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;un thème de couleurs en tons de gris pour la ligne &lt;code&gt;hardstatus&lt;/code&gt;, les messages, les séparateurs de régions (le blanc me brûlait les yeux)&lt;/li&gt;
&lt;li&gt;une ligne &lt;code&gt;hardstatus&lt;/code&gt; épurée et lisible, avec à gauche la liste des fenêtres et à droite le nom de la session et une horloge (bonus: les commentaires qui expliquent champ par champ comment elle fonctionne)&lt;/li&gt;
&lt;li&gt;des commandes clavier inspirées de Vim pour la navigation entre les régions (pourquoi il n&amp;#39;y en a pas par défaut reste un mystère à mes yeux)&lt;/li&gt;
&lt;li&gt;huit dispositions de régions créées d&amp;#39;avance, et une commande clavier pour passer de l&amp;#39;une à l&amp;#39;autre&lt;/li&gt;
&lt;li&gt;des commandes clavier pour redimensionner les régions&lt;/li&gt;
&lt;li&gt;des commandes clavier pour échanger les fenêtres, et les renuméroter&lt;/li&gt;
&lt;li&gt;des commandes plus simples à retenir pour le monitoring (&lt;code&gt;m&lt;/code&gt;) et le silence monitoring (&lt;code&gt;s&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;un effacement correct de l&amp;#39;affichage quand on quitte un programme interactif, par exemple Vim&lt;/li&gt;
&lt;li&gt;la désactivation du message au lancement, on se fiche bien du pédigrée et de la license du machin&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Deux points sont à garder à l&amp;#39;esprit avant de copier-coller sans lire : d&amp;#39;abord c&amp;#39;est ma configuration et le plus clair de mon temps est passé dans Vim dans un terminal plein écran, donc j&amp;#39;utilise un layout en trois colonnes dont la colonne centrale me permet d&amp;#39;afficher 80 caractères et les numéros de lignes et la colonne de gauche est dimensionnée pour que la colonne centrale soit effectivement centrée sur mon écran. C&amp;#39;est à adapter à votre situation bien sûr, pour savoir vite quelle est la largeur d&amp;#39;un terminal : &lt;code&gt;tput cols&lt;/code&gt;. Ensuite c&amp;#39;est testé avec GNU Screen en version 4.06.02, y&amp;#39;a pas de raison que ça ne fonctionne pas avec des versions plus récentes mais je ne suis pas du tout certain que ça fonctionne avec des versions plus anciennes.&lt;/p&gt;
&lt;p&gt;C&amp;#39;est disponible &lt;a href="https://github.com/jkbockstael/dotfiles/blob/master/screenrc"&gt;sur GitHub&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Thu, 09 Apr 2020 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2020/04/09/pimp_my_gnu_screen.html</guid>
	</item>
	<item>
		<title>Retour sur le tri à gobelets</title>
		<link>https://blog.jkbockstael.be/posts/2020/03/03/retour_sur_le_tri_a_gobelets.html</link>
		<description>&lt;h1 id="retour-sur-le-tri-à-gobelets"&gt;Retour sur le tri à gobelets&lt;/h1&gt;
&lt;p&gt;Au détour d&amp;#39;une conversation au boulot un collègue parlait d&amp;#39;algorithmes absurdes et en arrivait à mentionner l&amp;#39;idée folle d&amp;#39;un tri qui se ferait en permutant des éléments au hasard, ce qui m&amp;#39;a beaucoup amusé puisque c&amp;#39;est quelque chose que &lt;a href="/posts/2009/12/13/pataprogrammation_le_tri_a_gobelets.html" title="Exercice de &amp;#39;pataprogrammation: le tri à gobelets"&gt;j&amp;#39;ai déjà mentionné ici&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Et c&amp;#39;est bien de ça qu&amp;#39;il s&amp;#39;agit : étant donnée une liste d&amp;#39;entier, les trier par ordre croissant en permutant au hasard des éléments deux à deux jusqu&amp;#39;à ce que la liste soit triée. C&amp;#39;est idiot, c&amp;#39;est absurde, et ça prend un temps qu&amp;#39;on ne peut pas déterminer d&amp;#39;avance et qui peut même être infini.&lt;/p&gt;
&lt;p&gt;Du coup j&amp;#39;ai réimplémenté ça sous forme de petit programme CLI pour qu&amp;#39;on puisse le précéder de &lt;code&gt;time&lt;/code&gt; pour mesurer l&amp;#39;ampleur du désastre et les grands écarts entre plusieurs exécutions sur exactement la même liste en entrée. C&amp;#39;est en Python comme la dernière fois, mais aussi en PHP et en JavaScript (via NodeJS).&lt;/p&gt;
&lt;p&gt;Et comme on est en 2020, le code &lt;a href="https://github.com/jkbockstael/beakersort"&gt;est sur GitHub&lt;/a&gt;&lt;/p&gt;
</description>
		<pubDate>Tue, 03 Mar 2020 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2020/03/03/retour_sur_le_tri_a_gobelets.html</guid>
	</item>
	<item>
		<title>FOSDEM 2016</title>
		<link>https://blog.jkbockstael.be/posts/2016/02/08/fosdem_2016.html</link>
		<description>&lt;h1 id="fosdem-2016"&gt;FOSDEM 2016&lt;/h1&gt;
&lt;p&gt;Le &lt;a href="https://fosdem.org"&gt;FOSDEM&lt;/a&gt; s&amp;#39;est achevé il y a une semaine et cette année je le faisais en entier, petit vrac de ce que m&amp;#39;a laissé cette édition du pélérinage annuel de la geekitude libre :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;L&amp;#39;événement s&amp;#39;est enfin doté d&amp;#39;un &lt;a href="https://fosdem.org/2016/practical/conduct/"&gt;code de conduite&lt;/a&gt;, l&amp;#39;année dernière son absence &lt;a href="https://twitter.com/mleibovic/status/561468696028524544/photo/1"&gt;a été relevée&lt;/a&gt; et l&amp;#39;organisation a &lt;a href="https://twitter.com/fosdem/status/561885201383821312"&gt;vaguement promis de s&amp;#39;y pencher&lt;/a&gt; pendant que certains criaient un mélange de &amp;quot;ça ne sert à rien&amp;quot; et &amp;quot;ça va faire fuir les gens&amp;quot; &lt;a href="https://mail.kde.org/pipermail/kde-community/2014q4/001132.html"&gt;voire plus idiot encore&lt;/a&gt;. On a bien vu cette année qu&amp;#39;il en faut bien plus pour faire fuir le geek, tout majoritairement mâle et barbu soit-il.&lt;/li&gt;
&lt;li&gt;Première fois que j&amp;#39;allais me perdre au &lt;a href="https://fosdem.org/2016/beerevent/"&gt;Friday Beer Event&lt;/a&gt;, où une armée de geek surpeuplait joyeusement les deux niveaux du Delirium Cafe qui lui étaient réservés. Chouette atmosphère qui donne bien le ton : pendant deux jours on va boire des bières et discuter des geekeries en même temps alors que le reste de l&amp;#39;année ce sont deux activités plutôt mutuellement exclusives. Si un Norvégien super saoul ne t&amp;#39;a jamais parlé de Perl 6 t&amp;#39;as raté ta vie.&lt;/li&gt;
&lt;li&gt;Firefox OS 2.5 est assez stable pour un usage quotidien et permet d&amp;#39;avoir des add-ons sous forme de scripts chargés et exécutés automatiquement sur certains URLs (qui peuvent être en &lt;code&gt;app://&lt;/code&gt;), c&amp;#39;est souple et puissant. Bien sûr c&amp;#39;est moins excitant après l&amp;#39;annonce à la fin de l&amp;#39;année dernière de l&amp;#39;arrêt des collaborations avec des opérateurs et des producteurs de smartphones. C&amp;#39;est encore moins excitant depuis la semaine dernière puisque Mozilla a annoncé assez platement qu&amp;#39;il n&amp;#39;y aurait pas de Firefox OS au-delà de 2.6, et parle d&amp;#39;ailleurs de &lt;a href="http://mozopenhard.mozillafactory.org/"&gt;&amp;quot;Boot to Gecko OS&amp;quot;&lt;/a&gt; depuis. Après le fiasco du Tablet Contribution Program on comprend une certaine amertume dans la communauté qui apprend que maintenant qu&amp;#39;on a enfin un produit solide il cesse d&amp;#39;être un produit.&lt;/li&gt;
&lt;li&gt;Sur le même sujet il y a eu une chouette présentation sur l&amp;#39;automatisation des tests d&amp;#39;interface utilisateur dans Firefox OS, au moyen de &lt;a href="https://developer.mozilla.org/en-US/docs/Mozilla/QA/Marionette"&gt;Marionette&lt;/a&gt;, une implémentation de l&amp;#39;API WebDriver, elle-même inspirée de Selenium. Intégré dans WebIDE ça semble très puissant.&lt;/li&gt;
&lt;li&gt;Au détour d&amp;#39;une présentation atour de Python et XMPP dans le cadre de &lt;a href="https://salut-a-toi.org/"&gt;Salut à toi&lt;/a&gt; je découvre &lt;a href="http://urwid.org/"&gt;Urwid&lt;/a&gt; le &lt;code&gt;curse&lt;/code&gt; qui ne rend pas fou, et &lt;a href="http://www.brython.info/"&gt;http://www.brython.info/&lt;/a&gt; une implémentation de Python 3 en JavaScript.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.bbc.co.uk/opensource/"&gt;BBC Open Source&lt;/a&gt; avait des &lt;a href="https://www.microbit.co.uk"&gt;micro:bit&lt;/a&gt;, le BBC Micro au goût du jour sous la forme d&amp;#39;un tout petit circuit qui contient quand même une boussole, un accéléromètre, des GPIO, deux boutons, du Bluetooth, du micro USB, une grille de 25 LED, ... autant dire qu&amp;#39;il y a largement de quoi s&amp;#39;éclater avec ça. Enfin ça c&amp;#39;est si on est un enfant scolarisé au Royaume-Uni.&lt;/li&gt;
&lt;li&gt;Je devrais prendre le temps de jouer un peu avec &lt;a href="http://www.babylonjs.com/"&gt;Babylon.js&lt;/a&gt;, un framework JavaScript qui utilise WebGL et WebAudio qui fait tout pour être simple et clair.&lt;/li&gt;
&lt;li&gt;PHP asynchrone : &lt;a href="http://gearman.org/"&gt;Gearman&lt;/a&gt; pour des job queues sans prise de tête, &lt;a href="http://docs.guzzlephp.org/en/latest/"&gt;Guzzle&lt;/a&gt; pour de l&amp;#39;HTTP au moyen de promises, reactive programming qui fait plaisir avec &lt;a href="http://reactphp.org/"&gt;ReactPHP&lt;/a&gt; surtout avec des promises pour éviter un callback hell. Bon à côté de ça la communication inter-processus en PHP c&amp;#39;est toujours pas gagné.&lt;/li&gt;
&lt;li&gt;Je découvre &lt;a href="http://pecl.php.net/package/xhprof"&gt;XHProf&lt;/a&gt;, un profileur pondu par Facebook.&lt;/li&gt;
&lt;li&gt;Du côté d&amp;#39;HTTP/2 et PHP c&amp;#39;est amusant. En gros PHP est paré, la plupart des clients aussi, les serveurs aussi sauf pour le push (ah ben zut alors c&amp;#39;est avec ça qu&amp;#39;on voulait jouer). Là où HTTP/2 va être drôle c&amp;#39;est qu&amp;#39;au mieux ça rend obsolète certaines techniques &amp;quot;smart&amp;quot; qu&amp;#39;on utilise actuellement pour contourner les faiblesses d&amp;#39;HTTP/1.1, au pire ça le rend pire que de ne rien faire.&lt;/li&gt;
&lt;li&gt;PHP 7 est deux fois plus rapide et deux fois moins gourmand en mémoire que PHP 5.x. Ça fait toujours plaisir. Le gros point qui fait plaisir aussi c&amp;#39;est que la compilation produit enfin un AST du coup l&amp;#39;analyse statique devient possible, d&amp;#39;ailleurs on a droit à des type hints et il est possible d&amp;#39;avoir du typage strict sur les scalaires. C&amp;#39;est un début. Les erreurs fatales produisent à présent des &lt;code&gt;Error&lt;/code&gt; (qui implémentent &lt;code&gt;Throwable&lt;/code&gt; donc c&amp;#39;est pas une &lt;code&gt;Exception&lt;/code&gt; mais ça fonctionne pareil). Une paire de nouveaux opérateurs, des assertions qu&amp;#39;on peut désactiver en un seul paramètre pour la production, le parsing de nombres qui se plaint enfin à voix haute au lieu de produire n&amp;#39;importe quoi, et de l&amp;#39;évaluation de variables dans l&amp;#39;ordre (ça commençait à faire long). Par contre un jour je comprendrai la raison pour laquelle on gagne aussi des classes anonymes. Un jour. Peut-être.&lt;/li&gt;
&lt;li&gt;La présentation de cloture couvrait la cartographie collaborative comme outil dans la gestion de crise, avec des exemples totalement bluffants produits par quelques bénévoles formés sur le tas et équipés d&amp;#39;à peu près rien. Le genre de présentation qui donne foi, si on arrive encore à tout suivre un dimanche soir dans un auditoire surpeuplé.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Et bien sûr un FOSDEM implique du butin (amour éternel à celui ou celle qui a déposé tout un rouleau d&amp;#39;autocollants Bernie Sanders au job corner):&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2016/02/08/fosdem_2016_attachments/fosdem_2016_loot.jpg" title="Butin du FOSDEM 2016 - haute résolution"&gt;&lt;img src="//blog.jkbockstael.be/posts/2016/02/08/fosdem_2016_attachments/fosdem_2016_loot_thumb.jpg" alt="Butin du FOSDEM 2016 - miniature"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Vivement le FOSDEM 2017.&lt;/p&gt;
</description>
		<pubDate>Mon, 08 Feb 2016 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2016/02/08/fosdem_2016.html</guid>
	</item>
	<item>
		<title>Advent of Code 2015</title>
		<link>https://blog.jkbockstael.be/posts/2015/12/07/advent_of_code.html</link>
		<description>&lt;h1 id="advent-of-code-2015"&gt;Advent of Code 2015&lt;/h1&gt;
&lt;p&gt;Oyez, programmeurs qui aiment les puzzles/énigmes/jeux et qui aimeraient utiliser &amp;quot;la magie des fêtes&amp;quot; comme prétexte pour écrire du code ! &lt;a href="http://was.tl/"&gt;Eric Wastl&lt;/a&gt; a mis en ligne il y a quelques jours son calendrier de l&amp;#39;avent sous forme de jeux de programmation, deux puzzles par jours dont le deuxième est lié au premier donc devient visible une fois qu&amp;#39;on a résolu le premier. Le démarrage a été gentil mais on arrive déjà à quelque chose qui implique de se gratter un peu le crâne et ça fait toujours du bien, surtout que les sujets ne sont pas totalement abstraits et sont de l&amp;#39;ordre de ce qu&amp;#39;on peut croiser au boulot.&lt;/p&gt;
&lt;p&gt;Ça s&amp;#39;appelle &lt;a href="http://adventofcode.com"&gt;Advent of Code&lt;/a&gt; tout simplement, et si quelqu&amp;#39;un bloque je mets en ligne mes solutions au fur et à mesure &lt;a href="https://github.com/jkbockstael/adventofcode-2015"&gt;sur GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoyez-moi ça bien comme il faut !&lt;/p&gt;
</description>
		<pubDate>Mon, 07 Dec 2015 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2015/12/07/advent_of_code.html</guid>
	</item>
	<item>
		<title>In spaaace!</title>
		<link>https://blog.jkbockstael.be/posts/2015/10/05/in_spaaace.html</link>
		<description>&lt;h1 id="in-spaaace"&gt;In spaaace!&lt;/h1&gt;
&lt;p&gt;En bon geek croisé avec un bon nerd j&amp;#39;ai plutôt hyperventilé à l&amp;#39;annonce de Elite: Dangerous, et bondi dessus dès sa sortie. On aime ou on n&amp;#39;aime pas, moi j&amp;#39;aime beaucoup. Jeu chronophage et beaux graphismes ont évidemment entraîné une longue liste de captures d&amp;#39;écran, certaines partagées sur Twitter, qui devenait un peu triste à parcourir via l&amp;#39;index par défaut que fournit Apache.&lt;/p&gt;
&lt;p&gt;Du coup j&amp;#39;ai écrit une petite bricole en PHP pour transformer une liste d&amp;#39;images en quelque chose qui ressemble presque à une galerie, en me basant uniquement sur mon côté maniaque quant aux noms de fichiers. La programmation est un gaz, du coup j&amp;#39;ai ajouté des descriptions pour avoir de quoi fournir un peu plus de contexte qu&amp;#39;un simple titre. C&amp;#39;est minimal mais ça fait le boulot, et ça permet de facilement partager ces images en pleine résolution au lieu de voir l&amp;#39;eye-candy fondre au travers de la compression de Twitter.&lt;/p&gt;
&lt;p&gt;C&amp;#39;est &lt;a href="http://files.jkbockstael.be/elite/"&gt;en action ici&lt;/a&gt;, et pour les curieux &lt;a href="https://github.com/jkbockstael/elite-gallery"&gt;le code est disponible&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Mon, 05 Oct 2015 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2015/10/05/in_spaaace.html</guid>
	</item>
	<item>
		<title>Attaque des clones</title>
		<link>https://blog.jkbockstael.be/posts/2015/02/13/attaque_des_clones.html</link>
		<description>&lt;h1 id="attaque-des-clones"&gt;Attaque des clones&lt;/h1&gt;
&lt;p&gt;J&amp;#39;ai hérité au boulot d&amp;#39;une base de données sans la moindre contrainte d&amp;#39;intégrité (unicité, valeurs par défaut, clés étrangères, valeurs exclusives... rien), donc j&amp;#39;ai du les ajouter, donc j&amp;#39;ai du commencer par nettoyer les données aberrantes qui ne respectaient pas ces nouvelles contraintes.&lt;/p&gt;
&lt;p&gt;Nettoyer les clés étrangères ? Facile, une contrainte comme&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;alter table `tableA` add constraint `tableA_fk_tableB` foreign key (`tblA_keyA`) references `tableB` (`tblB_keyA`) on update cascade on delete set null;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;implique quelque chose comme&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;update `tableA` set `tblA_keyA` = NULL where `tblA_keyA` not in (select `tblB_keyA` from `tableB`);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ou en version plus stricte avec suppression en cascade :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;alter table `tableA` add constraint `tableA_fk_tableB` foreign key (`tblA_keyA`) references `tableB` (`tblB_keyA`) on update cascade on delete cascade;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;qu&amp;#39;on précèdera d&amp;#39;un beau nettoyage par le vide&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;delete from `tableA` where `tblA_keyA` not in (select `tblB_keyA` from `tableB`);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Simple et intuitif, beaucoup moins quand on ajoute une règle d&amp;#39;unicité et que pour chaque ensemble de doublons trouvés on veut quand même garder le premier :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;alter table `tableA` add constraint `tableA_unique_composite_key` unique (`keyA`, `keyB`, `keyC`);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Allez, on s&amp;#39;épargne une hausse peu raisonnable de tension artérielle, et du temps perdu :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;delete from `tableA`
where id in (select id from (select tbl.id from 
`tabelA` tbl,
(select id, name, keyA, keyB, keyC, count(*) from `tableA` group by keyA, keyB, keyC having count(*) &amp;gt; 1) dupes
where
tbl.id &amp;lt;&amp;gt; dupes.id and
((tbl.keyA = dupes.keyA) or (tbl.keyA is null and dupes.keyA is null)) and
((tbl.keyB = dupes.keyB) or (tbl.keyB is null and dupes.keyB is null)) and
((tbl.keyC = dupes.keyC) or (tbl.keyC is null and dupes.keyC is null))
) toremove);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;
</description>
		<pubDate>Fri, 13 Feb 2015 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2015/02/13/attaque_des_clones.html</guid>
	</item>
	<item>
		<title>One True Password</title>
		<link>https://blog.jkbockstael.be/posts/2014/06/25/onetruepassword.html</link>
		<description>&lt;h1 id="one-true-password"&gt;One True Password&lt;/h1&gt;
&lt;p&gt;Un peu silencieux ces temps-ci il faut bien l&amp;#39;avouer, avant tout parce que j&amp;#39;ai largement de quoi m&amp;#39;occuper au boulot, mais ça ne m&amp;#39;a quand même pas empêché d&amp;#39;écrire un petit biscuit moelleux de code simple mais efficace à la faveur d&amp;#39;un train pas trop bondé. Il s&amp;#39;agit de fonctions et alias pour bash qui implémentent un système de stockage de texte chiffré afin de pouvoir y déposer des informations confidentielles comme (absolument au hasard) les nombreux mots de passe générés pour des services en ligne. En bref et en gros il s&amp;#39;agit d&amp;#39;un 1Password ultra basique, qui a le mérite de tenir en quelques lignes de Bash et ne dépendre de rien qui soit propriétaire.&lt;/p&gt;
&lt;p&gt;Le code et sa documentation sont disponibles sous licence MIT sur &lt;a href="https://github.com/jkbockstael/onetruepassword"&gt;GitHub&lt;/a&gt; et pour les curieux/impatients ça tient en ceci :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/bash

# One True Password - Basic encrypted password storage and retrieval
#
# These bash functions allow a quick and easy way to store and retrieve
# passwords from a safe encrypted storage, making it a basic 1Password.
#
# 2014 Jean-Karim Bockstael &amp;lt;jkb@jkbockstael.be&amp;gt;

# Encrypted password storage file
ONETRUEPASSWORD_STORE=~/.onetruepassword_store.enc

# Encrypt function, can be used either as a filter or a command
# $ cat cleartext_file | encrypt &amp;gt; encrypted_file
# $ encrypt cleartext_file &amp;gt; encrypted_file
# $ encrypt cleartext_file encrypted_file
encrypt () {
    if [ $# -eq 0 ] ; then
        openssl des3 -salt
    elif [ $# -eq 1 ] ; then
        openssl des3 -salt -in &amp;quot;$1&amp;quot;
    else
        openssl des3 -salt -in &amp;quot;$1&amp;quot; -out &amp;quot;$2&amp;quot;
    fi
}

# Decrypt function, can be used either as a filter or a command
# $ cat encrypted_file | decrypt | vim -
# $ decrypt encrypted_file &amp;gt; cleartext_file
# $ decrypt encrypted_file cleartext_file
decrypt () {
    if [ $# -eq 0 ] ; then
        openssl des3 -salt -d
    elif [ $# -eq 1 ] ; then
        openssl des3 -salt -d -in &amp;quot;$1&amp;quot;
    else
        openssl des3 -salt -d -in &amp;quot;$1&amp;quot; -out &amp;quot;$2&amp;quot;
    fi
}

# One True Password - lookup, search for a term in the encrypted storage
# $ onetruepassword-look search_term
onetruepassword-look () {
    if [ $# -eq 0 ] ; then
        echo &amp;quot;1TP: provide a lookup term&amp;quot;
    else
        decrypt ${ONETRUEPASSWORD_STORE} | grep -i --color=auto $1
    fi
}

# One True Password - edit, edit the encrypted storage
# $ onetruepassword-edit
onetruepassword-edit () {
    TEMP=$(mktemp -t otp)
    decrypt ${ONETRUEPASSWORD_STORE} ${TEMP} \
    &amp;amp;&amp;amp; ${EDITOR} ${TEMP} \
    &amp;amp;&amp;amp; clear \
    &amp;amp;&amp;amp; encrypt ${TEMP} ${ONETRUEPASSWORD_STORE} \
    &amp;amp;&amp;amp; rm ${TEMP}
}

# Lazyness is a virtue
alias otpl=&amp;quot;onetruepassword-look&amp;quot;
alias otpe=&amp;quot;onetruepassword-edit&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;À l&amp;#39;usage c&amp;#39;est simple aussi, on utilise &lt;code&gt;otpe&lt;/code&gt; pour ouvrir le fichier chiffré dans son éditeur favori (celui qu&amp;#39;on a indiqué dans la variable d&amp;#39;environnement &lt;code&gt;$EDITOR&lt;/code&gt; quoi), et &lt;code&gt;otpl&lt;/code&gt; pour afficher les lignes de ce fichier qui correspondent à un mot-clé :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ otpe
$ otpl mot_cle
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Évidemment comme la sortie se fait en clair dans le terminal il ne faut pas croire que ça va protéger des regards indiscrets par-dessus l&amp;#39;épaule, mais c&amp;#39;est quand même nettement plus sûr que de noter ses accès sur un post-it.&lt;/p&gt;
</description>
		<pubDate>Wed, 25 Jun 2014 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2014/06/25/onetruepassword.html</guid>
	</item>
	<item>
		<title>FOSDEM 2014</title>
		<link>https://blog.jkbockstael.be/posts/2014/02/05/fosdem.html</link>
		<description>&lt;h1 id="fosdem-2014"&gt;FOSDEM 2014&lt;/h1&gt;
&lt;p&gt;Ce week-end c&amp;#39;était le &lt;a href="https://fosdem.org/" title="Free and Open-Source Developer&amp;#39;s European Meeting"&gt;FOSDEM&lt;/a&gt;, le pélérinage annuel bruxellois des gens qui font ou utilisent le libre. Pas exactement le genre d&amp;#39;événement qui bénéficie d&amp;#39;une folle couverture médiatique (ce n&amp;#39;est ni le &lt;a href="http://cebit.de" title="CeBIT"&gt;CeBIT&lt;/a&gt;, ni le &lt;a href="http://www.cesweb.org/" title="Consumer Electronics Show"&gt;CES&lt;/a&gt;, ni l&amp;#39;&lt;a href="http://www.e3expo.com/" title="Electronic Entertainment Expo"&gt;E3&lt;/a&gt; on est bien plus là pour discuter que pour vendre) donc ne te sens pas inculte si tu n&amp;#39;en as jamais entendu parler. En bref c&amp;#39;est deux jours de conférences, stands, ateliers et rencontres autour du libre sous toutes ses formes.&lt;/p&gt;
&lt;p&gt;Le programme était solidement touffu comme à son habitude, pour ma part ce que j&amp;#39;ai retenu de ces deux jours, dans le désordre c&amp;#39;est :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mozilla monte en popularité sans grande surprise, avant tout via &lt;a href="http://www.mozilla.org/en-US/firefox/os/" title="Firefox OS"&gt;Firefox OS&lt;/a&gt; qui a atteint la maturité suffisante pour être utilisé au quotidien et est livré sur plusieurs modèles. Un OS mobile où tout est HTML/CSS/JS il faut bien avouer que c&amp;#39;est bien excitant, et à l&amp;#39;usage c&amp;#39;est étonnant de performance. Firefox OS se dirige aussi vers les tablettes, stay tuned.&lt;/li&gt;
&lt;li&gt;Aussi chez Mozilla le très chouette projet &lt;a href="https://webmaker.org/" title="Mozilla Webmaker"&gt;Webmaker&lt;/a&gt; qui facilite l&amp;#39;enseignement et l&amp;#39;apprentissage des standards du Web et de la culture du libre en encourageant à apprendre comment faire en modifiant l&amp;#39;existant. Le projet fournit les outils Popcorn (création multimédia), Thimble (éditeur HTML/CSS/JS avec prévisualisation directe) et X-Ray Goggles (analyse et modification de sites Web hors de la plateforme) et des ressources pour enseignant. C&amp;#39;est vraiment bien foutu et c&amp;#39;est exactement la bonne approche : n&amp;#39;enseignons pas des outils, enseignons des standards.&lt;/li&gt;
&lt;li&gt;De la musique polyphonique sur Arduino avec une facilité déconcertante, ça s&amp;#39;appelle &lt;a href="http://marquisdegeek.com/code_armstrong.php" title="Armstrong"&gt;Armstrong&lt;/a&gt; et c&amp;#39;est assez fifou.&lt;/li&gt;
&lt;li&gt;Des algorithmes génétiques en JavaScript pour Node (ou pas), &lt;a href="https://github.com/JJ/nodeo" title="GitHub - nodeo"&gt;nodeo&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.doudoulinux.org" title="DoudouLinux"&gt;DoudouLinux&lt;/a&gt;, une distribution légère mais bien fournie conçue pour les enfants à partir de 2 ans avec tout ce qu&amp;#39;il faut de la familiarisation avec le clavier et la souris à l&amp;#39;aprentissage de la programmation, le tout en totale autonomie.&lt;/li&gt;
&lt;li&gt;La floue communauté Libre Graphics, son &lt;a href="http://libregraphicsmag.com/" title="Libre Graphics Magazine"&gt;magazine&lt;/a&gt;, son &lt;a href="http://libregraphicsmeeting.org" title="Libre Graphics Meeting"&gt;meeting annuel&lt;/a&gt;, son &lt;a href="http://libregraphicsworld.org/" title="Libre Graphics World"&gt;wiki&lt;/a&gt;, et &lt;a href="http://lgru.net/info" title="Libre Graphics Research Unit"&gt;bien&lt;/a&gt; &lt;a href="http://www.graphicsplanet.org/" title="Graphics Planet"&gt;plus&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;L&amp;#39;ordinateur/console portable &lt;a href="http://boards.openpandora.org/page/homepage.html" title="OpenPandora Boards"&gt;OpenPandora&lt;/a&gt; a un successeur en préparation, ça s&amp;#39;appelle &lt;a href="http://pyra-handheld.com/" title="DragonBox Pyra"&gt;Pyra&lt;/a&gt; et c&amp;#39;est du matériel qui fait baver.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://commonsmachinery.se" title="Commons Machinery"&gt;Commons Machinery&lt;/a&gt;, un projet visant à fournir l&amp;#39;infrastructure et les outils pour gérer automatiquement les métadonnées d&amp;#39;oeuvres publiées en ligne.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://epfsug.eu" title="European Parliament Free Software User Group"&gt;EPFSUG&lt;/a&gt; qui milite auprès du parlement européen pour un usage de logiciels libres, de formats ouverts, et l&amp;#39;ouverture de données au public.&lt;/li&gt;
&lt;li&gt;La &lt;a href="http://fsfe.org/" title="Free Software Foundation Europe"&gt;Free Software Foundation Europe&lt;/a&gt; dont le boulot est similaire mais étendu à tous les niveaux, entre autre par des initiatives sympathiques comme &lt;a href="http://ilovefs.org" title="I Love FS"&gt;profiter de la Saint Valentin pour exprimer son amour du libre&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Allez, plus qu&amp;#39;un an avant le FOSDEM 2015 :)&lt;/p&gt;
</description>
		<pubDate>Wed, 05 Feb 2014 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2014/02/05/fosdem.html</guid>
	</item>
	<item>
		<title>Diantre, ça a bien changé ici !</title>
		<link>https://blog.jkbockstael.be/posts/2014/01/22/diantre.html</link>
		<description>&lt;h1 id="diantre-ça-a-bien-changé-ici-"&gt;Diantre, ça a bien changé ici !&lt;/h1&gt;
&lt;p&gt;Ça faisait maintenant deux ans que je laissais traîner, que je remettais au lendemain. Une sorte de boucle de rétroaction qui faisait que j&amp;#39;écrivais plus sur mon blog parce qu&amp;#39;il me semblait lourd, encombrant, pas adapté au mobile, peu pratique... et que je ne faisais rien pour y remédier puisque de toute façon je n&amp;#39;y écrivais plus. Finalement c&amp;#39;est &lt;a href="http://motherfuckingwebsite.com"&gt;Motherfucking Website&lt;/a&gt; qui a été le déclencheur de fou-rire et d&amp;#39;un retroussage de manches.&lt;/p&gt;
&lt;p&gt;Exit Blogger donc, de toute façon ça fait des années que je ne me touchais plus la bite sur les rapport d&amp;#39;Analytics et les commentaires autour d&amp;#39;un post se font de nos jours bien plus dans des réseaux sociaux que sous l&amp;#39;article lui-même. Donc : un générateur statique qui sorte le résultat le plus épuré qui soit.&lt;/p&gt;
&lt;p&gt;Du côté des détails sordides c&amp;#39;est du code maison, du JavaScript pour Node.js qui mange des fichiers Markdown et JSON et produit de l&amp;#39;HTML qu&amp;#39;il est bien. C&amp;#39;est simple, c&amp;#39;est rapide à l&amp;#39;utilisation et à la génération, ça peut être hébergé sur n&amp;#39;importe quel serveur web (pas de rewrite, pas de symlink), le résultat est utilisable sur une connexion mobile au Bénin ou avec Lynx, que demande le peuple ? Du contenu ? Ah mais c&amp;#39;est pour ça que j&amp;#39;ai veillé à ce que ce soit simple à utiliser hein, si l&amp;#39;outil ne m&amp;#39;encombre plus je n&amp;#39;aurai plus la flemme de l&amp;#39;utiliser.&lt;/p&gt;
&lt;p&gt;Ça finira bien par être libre à un moment ou l&amp;#39;autre, quand j&amp;#39;aurais pris le temps de convertir le prototype actuel en quelque chose d&amp;#39;assez élégant, robuste et documenté pour être lâché sans casque dans le monde sauvage. Patience, patience.&lt;/p&gt;
</description>
		<pubDate>Wed, 22 Jan 2014 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2014/01/22/diantre.html</guid>
	</item>
	<item>
		<title>Un peu de mouvement autour du hacker-howto-fr</title>
		<link>https://blog.jkbockstael.be/posts/2013/11/20/un_peu_de_mouvement_autour_du_hacker_howto_fr.html</link>
		<description>&lt;h1 id="un-peu-de-mouvement-autour-du-hacker-howto-fr"&gt;Un peu de mouvement autour du hacker-howto-fr&lt;/h1&gt;
&lt;p&gt;Ça faisait un bon bout de temps que je n&amp;#39;avais pas mis à jour ce blog, faute d&amp;#39;avoir quelque chose à y raconter il faut bien l&amp;#39;admettre. Commençons donc par une petite annonce sur une mise à jour de ma traduction de &lt;a href="http://catb.org/~esr/faqs/hacker-howto.html" title="How To Become A Hacker"&gt;&amp;quot;How To Become A Hacker&amp;quot;&lt;/a&gt;. La &lt;a href="http://files.jkbockstael.be/hacker-howto-fr.html" title="Comment devenir un hacker"&gt;version française en ligne&lt;/a&gt; est à présent conforme à la révision 1.46 de l&amp;#39;original, et dispose maintenant d&amp;#39;un &lt;a href="https://github.com/jkbockstael/hacker-howto-fr" title="dépôt GitHub hacker-howto-fr"&gt;dépôt GitHub&lt;/a&gt; pour que chacun puisse facilement proposer une modification.&lt;/p&gt;
&lt;p&gt;Une précision s&amp;#39;impose par contre : la dernière révision comporte un lien vers le compte Gittip de l&amp;#39;auteur au sein d&amp;#39;un paragraphe réclamant clairement des dons en argent. Je l&amp;#39;ai inclus par soucis d&amp;#39;exactitude mais il va de soi que je n&amp;#39;approuve en rien cette démarche, encore moins quand on la justifie en disant que les dons d&amp;#39;argent permettent aux hackers de &amp;quot;donner&amp;quot; plus de leur travail. A mon avis ça revient à se constituer bénévole puis à réclamer un salaire. ESR vante dans son texte depuis des années la &amp;quot;culture du don&amp;quot; des hackers, selon laquelle on atteint réputation et respect en donnant son temps et son travail, cet appel aux dons est d&amp;#39;autant plus décevant.&lt;/p&gt;
</description>
		<pubDate>Wed, 20 Nov 2013 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2013/11/20/un_peu_de_mouvement_autour_du_hacker_howto_fr.html</guid>
	</item>
	<item>
		<title>Quelques nouvelles en vrac</title>
		<link>https://blog.jkbockstael.be/posts/2012/10/26/quelques_nouvelles_en_vrac.html</link>
		<description>&lt;h1 id="quelques-nouvelles-en-vrac"&gt;Quelques nouvelles en vrac&lt;/h1&gt;
&lt;p&gt;Ça fait un petit temps que je n&amp;#39;ai pas publié quoi que ce soit ici donc ce serait bien de corriger le tir par un petit post de nouvelles en vrac. Donc, depuis la dernière fois, en vrac…&lt;/p&gt;
&lt;p&gt;J&amp;#39;ai mis à jour ce matin ma traduction de &lt;a href="http://www.catb.org/~esr/faqs/hacker-howto.html" title="How To Become A Hacker"&gt;&amp;quot;How To Become A Hacker&amp;quot;&lt;/a&gt; pour qu&amp;#39;elle colle de nouveau à la dernière version de l&amp;#39;original et confirme son statut d&amp;#39;unique traduction française à jour de ce texte depuis maintenant quatre ans. Olé ! Pour ceux que ça intéresse : &lt;a href="http://files.jkbockstael.be/hacker-howto-fr.html" title="Comment devenir un hacker"&gt;Comment devenir un hacker&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;J&amp;#39;ai bricolé un intérprèteur brainfuck en JavaScript, et comme c&amp;#39;est quelque chose de totalement trivial j&amp;#39;ai ajouté la possibilité de mettre des breakpoints pour interrompre le programme et obtenier un dump de mémoire. &lt;a href="https://github.com/jkbockstael/Brainfunk" title="Dépôt GitHub de brainfunk"&gt;Ça s&amp;#39;appelle Brainfunk et c&amp;#39;est sur GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Aussi en JavaScript j&amp;#39;ai pondu un remake de &lt;a href="http://thecolourclock.co.uk/" title="The Colour Clock"&gt;The Colour Clock&lt;/a&gt;. C&amp;#39;est simple, c&amp;#39;est libre, et &lt;a href="https://github.com/jkbockstael/Colorclock" title="Dépôt GitHub de colorclock"&gt;ça aussi c&amp;#39;est sur GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Ceux qui s&amp;#39;ennuient ce weekend du côté de Huy peuvent aller jeter une oreille au festival caritatif qui s&amp;#39;organise à l&amp;#39;&lt;a href="http://www.atelierrock.be/" title="Atelier Rock"&gt;Atelier Rock&lt;/a&gt; et dont l&amp;#39;affiche comporte des noms bien sympas. J&amp;#39;annonce mais je n&amp;#39;y serai pas, faisant partie du staff technique de &lt;a href="http://www.getyoo.com/" title="Getyoo"&gt;Getyoo&lt;/a&gt; sur le salon &lt;a href="http://www.interieur.be/" title="Interieur 2012"&gt;Interieur 2012&lt;/a&gt; (où on croise décidément de bien beaux objets).&lt;/p&gt;
</description>
		<pubDate>Fri, 26 Oct 2012 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2012/10/26/quelques_nouvelles_en_vrac.html</guid>
	</item>
	<item>
		<title>Werchter "boutique", indeed.</title>
		<link>https://blog.jkbockstael.be/posts/2012/06/01/werchter_boutique_indeed.html</link>
		<description>&lt;h1 id="werchter-boutique-indeed"&gt;Werchter &amp;quot;boutique&amp;quot;, indeed.&lt;/h1&gt;
&lt;p&gt;Lundi c&amp;#39;était le fetival Werchter Boutique (cherche pas, j&amp;#39;ai pas non plus pigé le nom), auquel je ne serais pas allé si une bonne tête que je ne vois pas assez souvent ne m&amp;#39;avait pas dit avoir une place de trop. Ghost, Gojira, Channel Zero, Mastodon, Soundgarden, Metallica ? OK d&amp;#39;accord, allons affronter la plaine de Werchter après 8 ans sans y avoir foutu les pieds.&lt;/p&gt;
&lt;p&gt;C&amp;#39;est marrant ces gros festivals, le temps passe mais pas l&amp;#39;ambiance ; même le prix des bières n&amp;#39;augmente pas. À Werchter ce qui frappe quand on arrive c&amp;#39;est l&amp;#39;herbe encore verte et l&amp;#39;absence d&amp;#39;ombre. Bien sûr y&amp;#39;a deux-trois arbres et quelques tables ombragées, mais tu sens bien qu&amp;#39;on a optimisé la surface devant la scène pour y caler un maximum de monde.&lt;/p&gt;
&lt;p&gt;On entre sur fond de Ghost qui a déjà commencé et ne lève pas vraiment les foules, les files aux tickets ou aux bars ne sont pas encore trop suantes, on pose son cul, ça va c&amp;#39;est bon c&amp;#39;est festival. Niveau son ils n&amp;#39;ont pas forcé sur la dose, des tours suppémentaires l&amp;#39;amènent à ceux qui sont vraiment loin de la scène. Sympa, ça évite de se flinguer les esgourdes en s&amp;#39;approchant assez pour voir un bout de scène (toi je ne sais pas, mais moi payer un entrée de fest pour le passer à regarder des écrans c&amp;#39;est pas mon kif). Bonne intention, mais aucun gain de clarté sonore pour autant. Allez, dans dix ans peut-être qu&amp;#39;on cessera de compresser à outrance et en attendant ferme ta gueule et va acheter un peu de merch&amp;#39;.&lt;/p&gt;
&lt;p&gt;Gojira est en forme, même s&amp;#39;ils jouent devant un public à la frange de l&amp;#39;hostilité et en tout cas assez imperméable à leurs rythmiques de rhinocéros en charge. Les t-shirts à logo et les cheveux gris le confirment : les gens sont là pour Metallica avant tout. D&amp;#39;ailleurs le festival est formaté pour eux aussi, y compris dans le retour du snake pit pour ceux qui veulent être tout devant mais pas dans un vrai pit. Marrant.&lt;/p&gt;
&lt;p&gt;Arrive Channel Zero, en terrain théoriquement conquis et avec un disque d&amp;#39;or à fêter. Le set est sympa tout plein, surtout pour son effet madeleine. Channel Zero pour moi c&amp;#39;est l&amp;#39;adolescence des headbangs sur les percus de &amp;quot;Black Fuel&amp;quot;, et un peu la frustration de les avoir découvert après leur split ; cela dit vu le phénix ils ont bien fait de se mettre au vert au lieu de s&amp;#39;enliser dans de mauvais disques. Par contre le son un peu miteux ne les aide pas, pas plus qu&amp;#39;il n&amp;#39;aide à profiter des subtilités de la musique de Mastodon, au point que je m&amp;#39;accorde la sieste au soleil (mauvaise idée, faites pas ça).&lt;/p&gt;
&lt;p&gt;Le désastre de la journée c&amp;#39;est Soundgarden. Soundgarden, ceux qui ont fait &amp;quot;Black Hole Sun&amp;quot;, même toi tu connais. Ben ça c&amp;#39;était il y a vingt ans, c&amp;#39;était grunge, créatif, puissant. Depuis il y a eu Audioslave et les albums solo de Cornell, tout est devenu plus plat et plus lisse. Imagine un instant le gugusse, cheveux au vent, t-shirt blanc moulant, entouré d&amp;#39;un Ben Sheperd et un Kim Thayil qui ont l&amp;#39;air de se faire solidement chier de la première à la dernière minute. C&amp;#39;est propre et bien exécuté mais sans aucune âme, tout l&amp;#39;inverse de ce qu&amp;#39;on attend d&amp;#39;un concert de Soundgarden donc. C&amp;#39;est l&amp;#39;heure de manger gras.&lt;/p&gt;
&lt;p&gt;Metallica. Metallica quoi. C&amp;#39;est grand, c&amp;#39;est suréquipé, y&amp;#39;a des flammes et des feux d&amp;#39;artifices et des… des lasers ? Ouais moi non plus j&amp;#39;ai pas trop pigé le délire mais ça va c&amp;#39;était bref et ça m&amp;#39;aura permi de rire à autre chose qu&amp;#39;aux blagues de biker d&amp;#39;Hetfield. À chaque fois que je vois Metallica le constat est le même : ces gars savent ce qu&amp;#39;est une scène, comment la remplir et comment tenir un public en haleine pendant deux heures. C&amp;#39;est formaté à souhait hein (j&amp;#39;entends encore ce &amp;quot;mais ouais les gars faites semblant de quitter la scène sans jouer Seek And Destroy, on va vous croire&amp;quot; dans le public) mais on aime ça. En plus ce soir c&amp;#39;est un set spécial, le Black Album en entier mais pas dans l&amp;#39;ordre (ça non plus j&amp;#39;ai pas trop pigé le concept), tout bonheur.&lt;/p&gt;
&lt;p&gt;Après deux heures de scène ce bon Lars se sent obligé de sortir son laïus devant un public qui pourtant va déjà cramer ses derniers tickets boissons en tenant fermement un gros ballon noir, un onglet qui n&amp;#39;aura pas servi, une baguette anonyme, qu&amp;#39;importe le butin. Allez c&amp;#39;est l&amp;#39;heure, sortez tous, marchez en silence retrouver vos bagnoles, soyez pas trop pressés sur la sortie du parking et ne klaxonnez pas, les flamands n&amp;#39;aiment pas le bruit après 22h.&lt;/p&gt;
&lt;p&gt;La prochaine fois j&amp;#39;irai à un festival moins cher et avec camping, les ados bourrés et leur enthousiasme débordant manquaient au paysage.&lt;/p&gt;
</description>
		<pubDate>Fri, 01 Jun 2012 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2012/06/01/werchter_boutique_indeed.html</guid>
	</item>
	<item>
		<title>Le Sonisphère à la française, c'est chaud mais c'est bon</title>
		<link>https://blog.jkbockstael.be/posts/2011/07/14/le_sonisphere_a_francaise.html</link>
		<description>&lt;h1 id="le-sonisphère-à-la-française-cest-chaud-mais-cest-bon"&gt;Le Sonisphère à la française, c&amp;#39;est chaud mais c&amp;#39;est bon&lt;/h1&gt;
&lt;p&gt;Quand on m&amp;#39;a dit &amp;quot;y&amp;#39;a un Sonisphere en France cette année et le Big Four y vient et c&amp;#39;est dans le nord&amp;quot; j&amp;#39;ai du pousser un cri de l&amp;#39;ordre de &amp;quot;WHOUPUTAINONYVAONYVAONYVA&amp;quot; et, avec trois vikings de mes amis, j&amp;#39;y vais.&lt;/p&gt;
&lt;p&gt;Nous étions quelques centaines à ne pas avoir été mis au courant assez tôt de la nécessité de réserver le camping, du coup on se retrouve devant le parc Walygator, à quelques kilomètres du site du festival, dans une plaine dure et sans la moindre ombre mais dotée quand même de douches et toilettes. Des navettes sont organisées pour nous mener au site et nous en ramener ; si l&amp;#39;attente est longue à l&amp;#39;aller, au retour c&amp;#39;est peine perdue et presque tous se tapent le trajet à pied dans la nuit noire Lorraine.&lt;/p&gt;
&lt;p&gt;Le site est étonnant, c&amp;#39;est... un parking ? En tout cas c&amp;#39;est en trois niveaux et couvert de béton, de bitume, et de gravier bitumé qui laisse des chouettes traces noires sur le pantalon à force de s&amp;#39;y asseoir. Le niveau supérieur accueille les deux scènes du festival, l&amp;#39;une face à l&amp;#39;autre, ça surprend mais comme les concerts se font en alternance c&amp;#39;est cohérent. Au niveau intermédiaire une grande surface de restauration est couverte de bancs entourés par des stands à bouffe et un bar à Guinness et Grimbergen qui est le bienvenu (sérieusement amis Français, faut faire quelque chose parce que votre Kronenbourg là ça ne peut pas durer). Au niveau inférieur se trouve l&amp;#39;entrée du site, une petite scène pour les concerts off, un shop, et une autre série de bancs mais couverts donc ombragé. Profitez-en, c&amp;#39;est la seule zone d&amp;#39;ombre de tout le site ; entre le soleil de plomb et le sol en goudron, faites le calcul.&lt;/p&gt;
&lt;p&gt;Les concerts s&amp;#39;enchaînent bien, un peu trop bien même, on n&amp;#39;a pas le temps de bien se placer d&amp;#39;un concert à un autre, surtout quand c&amp;#39;est un set court. L&amp;#39;avantage c&amp;#39;est que comme les deux scènes sont proches l&amp;#39;une de l&amp;#39;autre on a quand même un peu de vue et du son dès le départ.&lt;/p&gt;
&lt;p&gt;Le son. Parlons-en. Je ne sais pas qui est ingénieur son pour ce festival, mais il devrait sérieusement songer à changer de métier. Les façades sont peu fournies mais distribuent des basses à ne plus savoir qu&amp;#39;en faire, ce qui fait que dès que ça devient enthousiaste sur la double pédale ou sur la basse (autant dire &amp;quot;tout le temps sauf pendant les solos&amp;quot;) on se fait violer les oreilles par une grosse pâte de laquelle les guitares ont bien du mal à se dégager. Moi qui porte des earplugs qui atténuent moins les basses que le reste, vous imaginez ma joie de découvrir cette particularité de l&amp;#39;acoustique locale.&lt;/p&gt;
&lt;p&gt;Malgré cela les groupes nous offrent des superbes shows. Une mention toute particulière à Bukowski qui est pour moi la belle découverte du festival, surprise pour Bring Me The Horizon dont les fans ont du adorer la prestation puisque je suisscotché par leur présence de scène sans aimer leur musique. Ma grosse claque du samedi est sans hésiter Gojira, les basses abusives collent quand même bien à leur musique, ou alors c&amp;#39;est qu&amp;#39;ils ont un putain de talent, je ne sais pas trop. Slipknot dans une formation amputée et en couleurs des débuts nous sert un set qui tire vers ses origines et doit avoir un effet &amp;quot;madeleine de Proust&amp;quot; sur bien d&amp;#39;autres que moi, puissant mais teinté d&amp;#39;émotion.&lt;/p&gt;
&lt;p&gt;Les Big Four, fidèles à leur réputation, savent faire honneur à leur rang : Slayer sert une belle déferlante de puissance pure sans la moindre pause, la foule vibre au groove d&amp;#39;Anthrax, Megadeth est d&amp;#39;une perfection virtuose presque froide mais impressionnante de précision ; quant à Metallica... METALLICA quoi, deux heures de thrash bien trempé dans les gencives, old-school puissant et rapide devant une foule nombreuse qui apprécie à sa juste valeur l&amp;#39;écran géant (tout le fond de scène en fait) et la juste dose de pyrotechnie.&lt;/p&gt;
&lt;p&gt;Des bons souvenirs, des pieds douloureux, un fameux coup de soleil, mais l&amp;#39;envie certaine qu&amp;#39;il y ait un Sonisphere France en 2012, voilà ce que j&amp;#39;en ramène. Il faut souffrir pour avoir des beaux concerts, semble-t-il.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;(cet article a été rédigé pour &lt;a href="http://leplus.nouvelobs.com/contribution/172020;le-sonisphere-a-la-francaise-c-est-chaud-mais-c-est-bon.html" title="Article publié sur LePlus"&gt;Le Plus&lt;/a&gt;, blog du Nouvel Observateur ; ceci est la version que je leur ai soumis, sans édition de leur part)&lt;/p&gt;
</description>
		<pubDate>Thu, 14 Jul 2011 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2011/07/14/le_sonisphere_a_francaise.html</guid>
	</item>
	<item>
		<title>PHP : for() mieux que foreach(), un mythe ?</title>
		<link>https://blog.jkbockstael.be/posts/2011/07/11/php_for_mieux_que_foreach_un_mythe.html</link>
		<description>&lt;h1 id="php--for-mieux-que-foreach-un-mythe-"&gt;PHP : for() mieux que foreach(), un mythe ?&lt;/h1&gt;
&lt;p&gt;Dans mon boulot je dois fournir pas mal de PHP, qui sera parfois mis à mal et donc doit être un peu performant. Un jour au détour d&amp;#39;un backlog IRC je vois passer un argument du type &amp;quot;il faut remplacer les &lt;code&gt;foreach()&lt;/code&gt; par des &lt;code&gt;for()&lt;/code&gt; sinon ça consomme trop de mémoire&amp;quot;.&lt;/p&gt;
&lt;p&gt;Ah bon ?&lt;/p&gt;
&lt;p&gt;Deux coups de googlage et voilà d&amp;#39;autres commentaires du même ordre, mais aucun n&amp;#39;est soutenu par des mesures, du coup faut que j&amp;#39;essaie.&lt;/p&gt;
&lt;p&gt;Pour tester, j&amp;#39;ai le petit script suivant :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
$largearray = array();
for ($i = 0, $max = 1000; $i &amp;lt; $max; $i++) {
    for ($j = 0, $max = 100; $j &amp;lt; $max; $j++) {
        $largearray[$i][$j] = rand(0, 100000);
    }   
}

$base = memory_get_usage();
foreach ($largearray as $value) {
    $foo = $value; // oui, ca ne sert a rien
}
print &amp;quot;foreach : &amp;quot;.(memory_get_peak_usage() - $base).&amp;quot;\n&amp;quot;;

$base = memory_get_usage();
for ($i = 0, $max = count($largearray); $i &amp;lt; $max; $i++) {
    $foo = $largearray[$i];
}
print &amp;quot;for : &amp;quot;.(memory_get_peak_usage() - $base).&amp;quot;\n&amp;quot;;
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;C&amp;#39;est d&amp;#39;une simplicité criminelle : d&amp;#39;abord on se remplit un array bidimensionnel avec des valeurs aléatoires, ensuite on va boucler dessus et bêtement copier chaque sous-tableau dans une variable qui ne sert à rien. Avant de boucler on obtient l&amp;#39;usage mémoire, pour mieux distinguer ce que génère le parcours.&lt;/p&gt;
&lt;p&gt;Seulement voilà, moi on me parlait de &amp;quot;deux fois moins de mémoire&amp;quot; et j&amp;#39;obtiens ceci à l&amp;#39;exécution (valeurs en octets) :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;foreach : 1540
for : 1496
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Quelqu&amp;#39;un a pu observer un grand écart de consommation mémoire entre un &lt;code&gt;for()&lt;/code&gt; et un &lt;code&gt;foreach()&lt;/code&gt; sur les mêmes données ?&lt;/p&gt;
</description>
		<pubDate>Mon, 11 Jul 2011 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2011/07/11/php_for_mieux_que_foreach_un_mythe.html</guid>
	</item>
	<item>
		<title>Du pouvoir de la ponctuation</title>
		<link>https://blog.jkbockstael.be/posts/2011/07/03/du_pouvoir_de_la_ponctuation.html</link>
		<description>&lt;h1 id="du-pouvoir-de-la-ponctuation"&gt;Du pouvoir de la ponctuation&lt;/h1&gt;
&lt;p&gt;Parce que &lt;a href="https://twitter.com/#!/jkbockstael/status/84309207783972864" title="Tweet relatif à ce post"&gt;j&amp;#39;aime enfoncer le clou&lt;/a&gt; :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In his house at R&amp;#39;lyeh, dead Cthulhu waits dreaming.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;(&amp;quot;The Call of Cthulhu&amp;quot;, Howard Philips Lovercraft)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Dans sa demeure de R&amp;#39;lyeh la morte, Cthulhu attend en rêvant.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;(&amp;quot;L&amp;#39;appel de Cthulhu&amp;quot;, traduction française de Jacques Papy et Simone Lamblin)&lt;/p&gt;
&lt;p&gt;Selon la transcription, il y a une virgule ou pas avant &amp;quot;dead Cthulhu&amp;quot;, mais dans les deux cas l&amp;#39;outrage est le même, &amp;quot;dead&amp;quot; se rapporte évidemment à &amp;quot;Cthulhu&amp;quot;, pas à &amp;quot;R&amp;#39;lyeh&amp;quot;.&lt;/p&gt;
</description>
		<pubDate>Sun, 03 Jul 2011 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2011/07/03/du_pouvoir_de_la_ponctuation.html</guid>
	</item>
	<item>
		<title>De la déchéance de l'enseignement</title>
		<link>https://blog.jkbockstael.be/posts/2011/05/12/de_la_decheance_de_l_enseignement.html</link>
		<description>&lt;h1 id="de-la-déchéance-de-lenseignement"&gt;De la déchéance de l&amp;#39;enseignement&lt;/h1&gt;
&lt;p&gt;Avant-hier, ce cher Mallox &lt;a href="https://twitter.com/Mallox/status/67961017606471682" title="Tweet relatif à ce post"&gt;twittait une question piège&lt;/a&gt; :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;6÷2(1+2)= ?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;C&amp;#39;est fourbe, hein ?&lt;/p&gt;
&lt;p&gt;Ce qui est un peu amer, c&amp;#39;est les réponses qu&amp;#39;il a reçu. Pour une raison qui m&amp;#39;échappe, des francophones qui admettent le sens de lecture de gauche à droite l&amp;#39;oublient quand il s&amp;#39;agit d&amp;#39;évaluer des opérations de même niveau. Chouette.&lt;/p&gt;
&lt;p&gt;Si vous voulez vous faire encore plus mal, il y a un fil &lt;a href="http://answers.yahoo.com/question/index?qid=20110428210248AA7we0U"&gt;Yahoo!Answers&lt;/a&gt; sur le sujet, où certaines justifications deviennent hilarantes tellement elles partent dans le &amp;quot;ça dépend&amp;quot; teinté de mysticisme. Sérieusement, WTF ?&lt;/p&gt;
&lt;p&gt;Ça remonte à si loin que ça &amp;quot;PEMDAS&amp;quot; ? C&amp;#39;est si incompréhensible ? Loin de moi l&amp;#39;envie de cracher sur les joyeux hippies qui voudraient que nos têtes blondes ne travaillent plus, n&amp;#39;apprennent plus rien par coeur, ne soient jamais évalués... enfin si, en fait j&amp;#39;ai envie de leur cracher dessus avec force et véhémence. Tu vois ce qui arrive, quand on cesse de driller sur des choses élémentaires ? Hein ? HEIN ? HEIN LARRY, TU VOIS CE QUI ARRIVE ? Z&amp;#39;êtes mignons tout plein, mais là on se retrouve cernés de bras cassés qui doivent sortir une calculatrice pour diviser par 10, elle est belle la civilisation.&lt;/p&gt;
&lt;p&gt;Putain de branquignolles.&lt;/p&gt;
</description>
		<pubDate>Thu, 12 May 2011 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2011/05/12/de_la_decheance_de_l_enseignement.html</guid>
	</item>
	<item>
		<title>Afficher les albums par ordre chronologique sur un iPod</title>
		<link>https://blog.jkbockstael.be/posts/2011/05/07/afficher_les_albums_par_ordre_chronologique_sur_un_ipod.html</link>
		<description>&lt;h1 id="afficher-les-albums-par-ordre-chronologique-sur-un-ipod"&gt;Afficher les albums par ordre chronologique sur un iPod&lt;/h1&gt;
&lt;p&gt;J&amp;#39;utilise iTunes pour la gestion de ma librairie musicale, et &lt;a href="http://www.pixiapps.com/ecoute/" title="Pixiapps - Ecoute"&gt;Ecoute&lt;/a&gt; pour la lecture. Ecoute a une interface légère, disponible de partout, et a la chouette possibilité d&amp;#39;afficher les albums d&amp;#39;un même artiste par ordre chronologique. Par contre, sur mon iPod, les albums d&amp;#39;un même artiste sont affichés dans l&amp;#39;ordre alphabétique, ce qui franchement n&amp;#39;a aucun sens.&lt;/p&gt;
&lt;p&gt;Aucune option de présentation sur l&amp;#39;iPod ne permet de changer cela, par contre en sachant que l&amp;#39;iPod trie ses morceaux comme iTunes, je peux utiliser les champs &amp;quot;sort machin&amp;quot; pour forcer un critère de tri qui soit différent du champs affiché. Si dans le champs &amp;quot;sort album&amp;quot; je mets l&amp;#39;année de sortie suivie du nom de l&amp;#39;album, j&amp;#39;arrive à un tri d&amp;#39;abord par année de sortie, ensuite par ordre alphabétique au sein d&amp;#39;une même année. Exactement ce qu&amp;#39;il me faut.&lt;/p&gt;
&lt;p&gt;Par contre c&amp;#39;est fastidieux, donc j&amp;#39;ai écrit un petit AppleScript, à placer dans &lt;code&gt;~/Library/iTunes/Scripts&lt;/code&gt; pour pouvoir l&amp;#39;appeler depuis le menu Script d&amp;#39;iTunes quand on a sélectionné les morceaux d&amp;#39;un même album :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;-- Fix albums display order
-- Changes the &amp;quot;sort album&amp;quot; field, to ensure that albums get displayed in chronological order on iPods.
-- CC-BY-NC 2011, Jean-Karim Bockstael, 
tell application &amp;quot;iTunes&amp;quot;
    -- input checking
    if selection is {} then
        display dialog &amp;quot;You must select at least a track&amp;quot;
        return
    else
        set selected_tracks to selection
        repeat with a_track in selected_tracks
            if a_track&amp;#39;s album = &amp;quot;&amp;quot; then
                display dialog &amp;quot;All tracks must have their Album field filled&amp;quot;
                return
            end if
            if a_track&amp;#39;s year = &amp;quot;&amp;quot; then
                display dialog &amp;quot;All tracks must have their Year field filled&amp;quot;
                return
            end if
        end repeat
        if length of selected_tracks &amp;gt; 1 then
            set cur_album to album of item 1 of selected_tracks
            set cur_year to year of item 1 of selected_tracks
            repeat with a_track in selected_tracks
                if a_track&amp;#39;s album is not equal to cur_album then
                    display dialog &amp;quot;All tracks must share the same album name&amp;quot;
                    return
                end if
                if a_track&amp;#39;s year is not equal to cur_year then
                    display dialog &amp;quot;All tracks must share the same release year&amp;quot;
                    return
                end if
                set cur_album to a_track&amp;#39;s album
                set cur_year to a_track&amp;#39;s year
            end repeat
        end if
        -- actual work
        repeat with a_track in selected_tracks
            set a_track&amp;#39;s sort album to (a_track&amp;#39;s year as string) &amp;amp; &amp;quot; &amp;quot; &amp;amp; (a_track&amp;#39;s album as string)
        end repeat
    end if
end tell
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Hope this helps :-)&lt;/p&gt;
</description>
		<pubDate>Sat, 07 May 2011 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2011/05/07/afficher_les_albums_par_ordre_chronologique_sur_un_ipod.html</guid>
	</item>
	<item>
		<title>PHP : Déterminer la langue d'un visiteur</title>
		<link>https://blog.jkbockstael.be/posts/2011/04/17/php_determiner_la_langue_d_un_visiteur.html</link>
		<description>&lt;h1 id="php--déterminer-la-langue-dun-visiteur"&gt;PHP : Déterminer la langue d&amp;#39;un visiteur&lt;/h1&gt;
&lt;p&gt;C&amp;#39;est dimanche, il fait beau, et je me dis que je publierais bien un truc que j&amp;#39;avais codé pour le boulot vendredi : la détermination, parmi des possibilités de langue, de la langue la plus appropriée au visiteur. Ça casse rien, mais c&amp;#39;est un problème courant donc une solution peut faire gagner du temps à pas mal de monde ;-)&lt;/p&gt;
&lt;p&gt;Niveau implémentation, on se base sur le header HTTP &lt;code&gt;Accept-Language&lt;/code&gt; et une liste de langues possibles fournies par l&amp;#39;appelant :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
// get_prefered_language : renvoie la langue que le visiteur prefere
// en fonction de ce qu&amp;#39;il renseigne via sa requete HTTP
// et de ce qu&amp;#39;on indique comme disponible, ou null si rien ne va
// $available_langs est un array, par exemple array(&amp;#39;it&amp;#39;,&amp;#39;fr&amp;#39;, &amp;#39;en&amp;#39;)
function get_preferred_language($available_langs) {
    // Parse du header HTTP Accept-Language
    $langs = array();
    // Cet en-tete HTTP est de la forme en-US,en;q=0.8,fr;q=0.6
    foreach (explode(&amp;#39;,&amp;#39;, $_SERVER[&amp;#39;HTTP_ACCEPT_LANGUAGE&amp;#39;]) as $httplang) {
        $rawlang = explode(&amp;#39;;q=&amp;#39;, $httplang);
        if (strpos($rawlang[0], &amp;#39;-&amp;#39;) !== FALSE) {
            // On ne garde que la partie &amp;quot;langue&amp;quot; de la locale, si jamais
            $rawlang[0] = substr($rawlang[0], 0, strpos($rawlang[0], &amp;#39;-&amp;#39;));
        }
        if (count($rawlang) == 1) {
            $rawlang[1] = 1.0; // Si aucun poids n&amp;#39;est precise, c&amp;#39;est que le poids vaut 1
        }
        $langs[$rawlang[1]] = $rawlang[0]; // Z&amp;#39;avez qu&amp;#39;a mettre des poids distincts :p
    }
    krsort($langs, SORT_NUMERIC);
    // Choix de la meilleure langue disponible
    foreach($langs as $weight =&amp;gt; $code) {
        if (in_array($code, $available_langs)) {
        return $code;
        }
    }
    // Ah ben zut alors, pas de bol
    return null;
}
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Sun, 17 Apr 2011 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2011/04/17/php_determiner_la_langue_d_un_visiteur.html</guid>
	</item>
	<item>
		<title>"Comment devenir un hacker" en version 1.03</title>
		<link>https://blog.jkbockstael.be/posts/2011/04/14/comment_devenir_un_hacker_en_version_103.html</link>
		<description>&lt;h1 id="comment-devenir-un-hacker-en-version-103"&gt;&amp;quot;Comment devenir un hacker&amp;quot; en version 1.03&lt;/h1&gt;
&lt;p&gt;Il y a de cela déjà &amp;quot;un certain temps&amp;quot;, j&amp;#39;avais traduit le &lt;a href="http://catb.org/~esr/faqs/hacker-howto.html" title="How To Become A Hacker"&gt;&amp;quot;How to become a Hacker&amp;quot; d&amp;#39;Eric Raymond&lt;/a&gt; en français, déçu par la piètre qualité ou l&amp;#39;obsolescence des traductions existantes (en passant ça m&amp;#39;a valu une menace de poursuite judiciaire, mais ça m&amp;#39;a permis de découvrir &lt;a href="http://jean-marc.manach.net/" title="Site de Jean-Marc Manach"&gt;Jean-Marc Manach&lt;/a&gt; donc j&amp;#39;y gagne au change). L&amp;#39;original a évolué, &lt;a href="http://files.jkbockstael.be/hacker-howto-fr.html" title="Comment devenir un hacker"&gt;la traduction&lt;/a&gt; évolue aussi.&lt;/p&gt;
&lt;p&gt;En fait j&amp;#39;avais loupé deux versions de l&amp;#39;original, la 1.42 et la 1.43, donc il y a eu un peu plus de boulot que simplement retirer la mention selon laquelle Perl est plus populaire que Python. Voilà ce qui arrive quand on n&amp;#39;est pas assez attentif à ce qui est publié. Enfin bon, c&amp;#39;est en ligne, et ça constitue donc la version française du hacker-howto la plus à jour qui soit, même si ESR doit avoir quelque chose contre le français, ça fait trois ans qu&amp;#39;il ignore mes mails et refuse de mentionner l&amp;#39;existence de la moindre traductions française dans l&amp;#39;original. Ah, les égos enflés...&lt;/p&gt;
&lt;p&gt;Voilà, &lt;a href="http://files.jkbockstael.be/hacker-howto-fr.html" title="Comment devenir un hacker"&gt;&amp;quot;Comment devenir un Hacker&amp;quot;&lt;/a&gt; est plus à jour que jamais. Enjoy :)&lt;/p&gt;
</description>
		<pubDate>Thu, 14 Apr 2011 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2011/04/14/comment_devenir_un_hacker_en_version_103.html</guid>
	</item>
	<item>
		<title>Pentes glissantes</title>
		<link>https://blog.jkbockstael.be/posts/2011/03/17/pentes_glissantes.html</link>
		<description>&lt;h1 id="pentes-glissantes"&gt;Pentes glissantes&lt;/h1&gt;
&lt;p&gt;Chez nous aut&amp;#39; en Belgique, on aime bien créer des organismes publics, ça nous évite de devoir effectivement agir. Parmi ces belles inventions se trouve le &amp;quot;Centre pour l&amp;#39;égalité des chances et la lutte contre le racisme&amp;quot; dont le titre explicite ne cache pas la mission, qui est de lutter contre les discriminations en général et le racisme en particulier. En fait il ne fait qu&amp;#39;appliquer un contexte légal qui interdit les propos racistes, antisémites, xénophobes. Nos amis Français ont le même genre de loi, la loi Gayssot par exemple.&lt;/p&gt;
&lt;p&gt;Je vous épargne le texte de loi, mais en gros ça dit qu&amp;#39;on ne peut pas parler ou agir en raciste, antisémite, xénophobe, et même négationniste. La volonté derrrière étant clairement d&amp;#39;éviter des dérives extrêmes en empêchant les extrémistes d&amp;#39;haranguer la foule. C&amp;#39;est sûr que clamer &amp;quot;si on avait laisser Hitler finir le travail, on n&amp;#39;en serait pas là&amp;quot; ce n&amp;#39;est pas exactement le genre de discours qui donne envie de se métamorphoser en bisounours mignon.&lt;/p&gt;
&lt;p&gt;Du coup, les propos nazis, ça incite à la haine, c&amp;#39;est mal, on ne peut pas. Tout le monde approuve, ça applaudit dans les chaumières. Encore une belle victoire face à la haine humaine.&lt;/p&gt;
&lt;p&gt;Dans la lignée évidemment, tous les propos racistes sont haineux aussi. J&amp;#39;ai jamais eu envie de faire des bisous en entendant &amp;quot;je suis au chômage mais c&amp;#39;est à cause de tous ces étrangers hein ! Ces marloufs qui débarquent ici nous piquer nos jobs et qui engrossent leurs Fatmas pour choper des allocs en masse avec cette marmaille qu&amp;#39;ils ne sauront pas tenir après et qui vont agresse des gens dans le métro au point qu&amp;#39;on doive envisager d&amp;#39;y envoyer l&amp;#39;armée...&amp;quot;. OK, le racisme c&amp;#39;est la haine, du coup c&amp;#39;est interdit, normal.&lt;/p&gt;
&lt;p&gt;Bon tant qu&amp;#39;à faire, les homophobes on ferait pas pareil ? &amp;quot;Ouais moi ces grandes zazas qui se roulent des patins devant nos enfants avant d&amp;#39;aller se faire emmancher par de parfaits inconnus dans des backrooms sordides ça me dégoûte ! Les enverrai bien sucer des pissenlits par la racine, au lieu de pomper des joncs !&amp;quot; Houlà c&amp;#39;est de l&amp;#39;incitation au meurtre ça ! Interdisons les propos homophobe, ils incitent à la haine !&lt;/p&gt;
&lt;p&gt;D&amp;#39;ailleurs, entre racisme et homophobie, on arrive doucement à l&amp;#39;archétype du fan de foot non ? Gueuler &amp;quot;enculé&amp;quot; à tout bout de champs par exemple, c&amp;#39;est un peu de l&amp;#39;homophobie ça ? D&amp;#39;ailleurs remarquez qu&amp;#39;on assiste fréquemment à des altercations violentes entre fanatiques d&amp;#39;une couleur et fanatiques de l&amp;#39;autre. Le foot en soi c&amp;#39;est bien, les fans de foot haineux c&amp;#39;est mal. On peut laisser le foot, mais il faut interdire les stades et les rassemblements dans les bistrots pendant les matches. Pas de direct à la TV, juste les résultats dans la presse le lendemain.&lt;/p&gt;
&lt;p&gt;Mouais, moi je remarque qu&amp;#39;ils sont agressifs et violents les soirs de matches mais ces soirs-là ils se sont aussi rincés le gosier de multiples litres de mauvaise bière. Et constatez les bagarres dans les cafés une fois les abrutis suffisamment avinés... mais c&amp;#39;est bien sûr ! Le problème c&amp;#39;est l&amp;#39;alcool ! Cet alcool infâme qui change l&amp;#39;homme en bête ! INTERDISONS L&amp;#39;ALCOOL !&lt;/p&gt;
&lt;p&gt;J&amp;#39;entends d&amp;#39;ici les esprits chagrins dire que la prohibition de l&amp;#39;alcool avait réussi aux USA à transformer de petits groupes de voyous anecdotiques en puissantes mafias dont les ramifications tiraient les ficelles de l&amp;#39;économie et de la politique, et ce en quelques années à peine. L&amp;#39;efficacité à l&amp;#39;américaine, en quelque sorte. Nous le savons, et nous savons en tirer les leçons, nous. Parce que bon hein, faut dire ce qui est, on est pas des amerloques non plus, on sait tirer des leçons du passé et ne pas refaire les mêmes erreurs, nous. Nous ne sommes pas comme ces gens-là.&lt;/p&gt;
&lt;p&gt;Tiens, c&amp;#39;était pas un tout petit peu du racisme ça, d&amp;#39;ailleurs ?&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;(Retrouvez cette chronique et d&amp;#39;autres stupidités dans &lt;a href="http://www.onatoujoursraison.be/" title="OATR"&gt;On a toujours raison&lt;/a&gt;, en direct le jeudi soir et en podcast tout le temps.)&lt;/p&gt;
</description>
		<pubDate>Thu, 17 Mar 2011 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2011/03/17/pentes_glissantes.html</guid>
	</item>
	<item>
		<title>PHP : dot2array, une couche d'abstraction pour utiliser facilement des tableaux à plusieurs dimensions.</title>
		<link>https://blog.jkbockstael.be/posts/2010/12/05/php_dot2array.html</link>
		<description>&lt;h1 id="php--dot2array-une-couche-dabstraction-pour-utiliser-facilement-des-tableaux-à-plusieurs-dimensions"&gt;PHP : dot2array, une couche d&amp;#39;abstraction pour utiliser facilement des tableaux à plusieurs dimensions.&lt;/h1&gt;
&lt;p&gt;Des fois on a du temps à tuer, du coup on entame un projet de programmation mais en avançant dedans on se retrouve à avoir besoin de code utilitaire réutilisable... et une fois que c&amp;#39;est fait on se dit qu&amp;#39;en fait c&amp;#39;est pratique et ça servirait bien à d&amp;#39;autres, donc que ce serait bien de le publier quelque part. Ici, je suis dans un train de retour de Strasbourg, et j&amp;#39;avais besoin d&amp;#39;un moyen simple et lisible de parcourir des tableaux multi-dimentionnels.&lt;/p&gt;
&lt;p&gt;Sans plus attendre, voici le résultat de cette petite session improvisée, un exemple d&amp;#39;utilisation concrete de ces fonctions (en fait, leur raison d&amp;#39;être à la base) suit plus bas &lt;a href="http://files.jkbockstael.be/code/dot2array.tgz" title="Téléchargement direct de dot2array"&gt;(et est disponible ici)&lt;/a&gt; : &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
// dot2array
// Abstraction layer allowing to get and set values from a multidimentional array
// by using a dot notation. Can be quite useful when working with configuration arrays.
// 2010, Jean-Karim Bockstael &amp;lt;jkb@jkbockstael.be&amp;gt;


// getValue : getter accessor
// Example : getValue($items, &amp;#39;foo.bar.baz&amp;#39;) = $items[&amp;#39;foo&amp;#39;][&amp;#39;bar&amp;#39;][&amp;#39;baz&amp;#39;]
function getValue($items, $itempath) {
    if (empty($items)) {
        throw new Exception(&amp;quot;Could not get value: Empty items argument.&amp;quot;);
    }
    if (empty($itempath)) {
        throw new Exception(&amp;quot;Could not get value: Empty itempath argument.&amp;quot;);
    }
    $names = explode(&amp;#39;.&amp;#39;,$itempath);
    $names = array_reverse($names);
    $item = &amp;amp;$items;
    while (count($names) &amp;gt; 0) {
        $name = array_pop($names);
        if (!isset($item[$name])) {
            throw new Exception(&amp;quot;Could not get value: no value at this path.&amp;quot;);
        }
        $item = &amp;amp;$item[$name];
    }
    return $item;
}

// setValue: setter accessor
// Example : setValue($items, &amp;#39;foo.bar.baz&amp;#39;, 42) =&amp;gt; $items[&amp;#39;foo&amp;#39;][&amp;#39;bar&amp;#39;][&amp;#39;baz&amp;#39;] = 42
function setValue(&amp;amp;$items, $itempath, $value) {
    if (empty($items)) {
        throw new Exception(&amp;quot;Could not set value: Empty items argument.&amp;quot;);
    }
    if (empty($itempath)) {
        throw new Exception(&amp;quot;Could not set value: Empty itempath argument.&amp;quot;);
    }
    if (empty($value)) {
        throw new Exception(&amp;quot;Could not set value: Empty value argument.&amp;quot;);
    }
    $names = explode(&amp;#39;.&amp;#39;,$itempath);
    $names = array_reverse($names);
    $item = &amp;amp;$items;
    while (count($names) &amp;gt; 0) {
        $name = array_pop($names);
        if (!isset($item[$name])) {
            $item[$name] = array();
        }
        $item = &amp;amp;$item[$name];
    }
    $item = $value;
}
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Les attentifs auront remarqué que le setter vérifie si un élement existe et le crée si besoin est. Maintenant, le pourquoi ! J&amp;#39;ai un fichier de configuration qui est de cette forme-là :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
$configuration[&amp;#39;database&amp;#39;][&amp;#39;host&amp;#39;] = &amp;#39;localhost&amp;#39;;
$configuration[&amp;#39;database&amp;#39;][&amp;#39;name&amp;#39;] = &amp;#39;DB-exemple&amp;#39;;
$configuration[&amp;#39;database&amp;#39;][&amp;#39;user&amp;#39;] = &amp;#39;user-exemple&amp;#39;;
$configuration[&amp;#39;database&amp;#39;][&amp;#39;password&amp;#39;] = &amp;#39;5up3r53cr37&amp;#39;;
$configuration[&amp;#39;platform&amp;#39;][&amp;#39;language&amp;#39;] = &amp;#39;french&amp;#39;;
$configuration[&amp;#39;platform&amp;#39;][&amp;#39;admin&amp;#39;][&amp;#39;name&amp;#39;] = &amp;#39;Jean-Karim Bockstael&amp;#39;;
$configuration[&amp;#39;platform&amp;#39;][&amp;#39;admin&amp;#39;][&amp;#39;email&amp;#39;] = &amp;#39;jkb@jkbockstael.be&amp;#39;;
// ...
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Doté de ceci, j&amp;#39;aimerais pouvoir faire quelque chose de ce goût-là : &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
// ...
$link = mysql_connect(getConfig(&amp;#39;database.host&amp;#39;), getConfig(&amp;#39;database.user&amp;#39;), getConfig(&amp;#39;database.password&amp;#39;));
// ...
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;En utilisant dot2array c&amp;#39;est possible, moyennant une fonction wrapper (allez, deux, c&amp;#39;est le même prix) : &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
require(&amp;quot;dot2array.php&amp;quot;);
require(&amp;quot;configuration.php&amp;quot;);

// Getter
function getConfig($itempath) {
    global $configuration;
    return getValue($configuration, $itempath);
}

// Setter
function setConfig($itempath, $value) {
    global $configuration;
    setValue($configuration, $itempath, $value);
}
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Elle n&amp;#39;est pas belle, la vie ? Allez hop, c&amp;#39;est cadeau (CC-BY, faut juste reconnaître que je suis un mec génial) donc profitez-en bien ;-) &lt;a href="http://files.jkbockstael.be/code/dot2array.tgz" title="Téléchargement direct de dot2array"&gt;Téléchargement ici.&lt;/a&gt;&lt;/p&gt;
</description>
		<pubDate>Sun, 05 Dec 2010 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2010/12/05/php_dot2array.html</guid>
	</item>
	<item>
		<title>The Drums - The Drums</title>
		<link>https://blog.jkbockstael.be/posts/2010/07/31/the_drums_the_drums.html</link>
		<description>&lt;h1 id="the-drums---the-drums"&gt;The Drums - The Drums&lt;/h1&gt;
&lt;p&gt;Il y a peu j&amp;#39;ai vu passer un tweet de &lt;a href="http://twitter.com/ylebout" title="Twitter - @ylebout"&gt;Yann Lebout&lt;/a&gt; (garçon intéressant, il parle peu mais parle bien, tout le contraire de moi) qui s&amp;#39;interrogeait rhétoriquement sur la similarité entre &lt;em&gt;The Drums&lt;/em&gt; et The Cure. Etant moi-même assez friand de l&amp;#39;oeuvre des décoiffés en noir, j&amp;#39;ai tiqué et il me fallait écouter ce premier album des Drums dont beaucoup disent qu&amp;#39;il est bien parti pour être disque de l&amp;#39;année. Je ne sais pas pour vous, mais pour moi &amp;quot;disque de l&amp;#39;année&amp;quot; c&amp;#39;est péjoratif. Ce n&amp;#39;est pas dans mes habitudes de parler de ce qui ne me plait pas, mais je vais faire une exception, tiens...&lt;/p&gt;
&lt;p&gt;The Drums est un groupe fondé en 2008 des cendres de Elkland (un truc électronique, rien à voir, splitté en 2006) par quatre garçons dans le vent, américains mais gentils. En 2009 ils sont shortlistés pour &amp;quot;BBC Sound Acts of 2010&amp;quot;, classés 5èmes dans cette même liste en janvier 2010, matraquent les esprits à grands renforts de MTV (être signé chez Island ça aide), du coup se hissent dans les votes de lecteurs et font une entrée dans les charts pas trop mauvaise (16èmes chez les britons). Ouais. C&amp;#39;est un groupe qui a deux ans mais fait de la première partie de Kings of Leon, c&amp;#39;est-y pas beau l&amp;#39;entertainment moderne ? Et pendant ce temps plein de talentueux rament comme des dingues...&lt;/p&gt;
&lt;p&gt;C&amp;#39;est pas tout ça, que cache ce disque qui est une &amp;quot;révélation&amp;quot; pour tant ? D&amp;#39;emblée on est accueilli par des relents d&amp;#39;élctronique cheap qui laissent vite la place à du bon gros rythme bien pop, le genre conçu pour bien péter sur toutes les radios. D&amp;#39;ailleurs un rapide coup d&amp;#39;oeil révèle qu&amp;#39;ils sont pour la plupart très proches du fameux 3 minutes 40 de la radio, comme c&amp;#39;est curieux. C&amp;#39;est pop, en 4/4, y&amp;#39;a du reverb, on fait péter le couplet-refrain sans risquer autre chose, et à première vue la production n&amp;#39;a pas été faite par des sourds. Deuxième morceau, même recette... &lt;/p&gt;
&lt;p&gt;Mais dites-moi... la guitare me rappelle les deux tiers du répertoire des Cure, c&amp;#39;est normal ? A vrai dire la batterie et la basse pareil. Le chant beaucoup moins, c&amp;#39;est de la voix de puceau qui se donne un genre hipster, ça agace, mais le reste c&amp;#39;est pas possible quoi c&amp;#39;est du voulu on me vend un cover-band camouflé en révélation ! Le groupe cite comme influences The Smith et Joy Division (entre autres), faut croire que c&amp;#39;est normal... enfin ceci dit, quand au fil des morceaux les références se font aussi flagrantes, on ne doit plus dire &amp;quot;influences&amp;quot; mais &amp;quot;fournisseurs&amp;quot;, non ? Ou alors c&amp;#39;est moi qui râle. &lt;/p&gt;
&lt;p&gt;Vient ensuite l&amp;#39;horriblement agaçant &amp;quot;Let&amp;#39;s go surfing&amp;quot; qui a le mérite de durer moins de 3 minutes, et la même recette est réchauffée, resservie ad nauseum toujours dans un format très pratique pour les radios qui n&amp;#39;aiment pas prendre de risque. Comme c&amp;#39;est commode. Comme c&amp;#39;est lassant.&lt;/p&gt;
&lt;p&gt;Ah ben quoi, c&amp;#39;est déjà fini ? C&amp;#39;était pas si long que ça finalement. Ah. 43 minutes. Tout s&amp;#39;explique...&lt;/p&gt;
&lt;p&gt;En bref, pas de quoi fouetter un chat, ceci est un n-ième disque de pop dont la production est techniquement impeccable ; quelques tubes efficaces à court terme qui exploitent comme ils peuvent les sons, rythmes, et mélodies d&amp;#39;une période brittanique et d&amp;#39;une période surf dont les plus jeunes ignorent jusqu&amp;#39;à l&amp;#39;existence. Sûrement sympathique sur scène. Ils vont en vendre des disques, ça c&amp;#39;est sûr. Mais, demain, qui se souviendra ? Sur ces bonnes paroles, je vous laisse en compagnie de l&amp;#39;influence flagrante...&lt;/p&gt;
&lt;iframe width="420" height="315" src="http://www.youtube.com/embed/F-L9_IDjtH0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;

&lt;hr&gt;
&lt;p&gt;(Cet article a été publié sur &lt;a href="http://leblogdelafougere.wordpress.com/" title="La Fougère"&gt;La Fougère&lt;/a&gt;, blog musical sans restriction.)&lt;/p&gt;
</description>
		<pubDate>Sat, 31 Jul 2010 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2010/07/31/the_drums_the_drums.html</guid>
	</item>
	<item>
		<title>Dans ton lit, dans ton cul</title>
		<link>https://blog.jkbockstael.be/posts/2010/07/07/dans_ton_lit_dans_ton_cul.html</link>
		<description>&lt;h1 id="dans-ton-lit-dans-ton-cul"&gt;Dans ton lit, dans ton cul.&lt;/h1&gt;
&lt;p&gt;Pour ceux qui me connaissent, ou qui me lisent régulièrement, ce n&amp;#39;est en aucun cas une nouveauté que je ne suis pas un sinistre. Donc j&amp;#39;aime les conneries, et avec Internet et ses memes je ne suis jamais en reste. Pourtant aujourd&amp;#39;hui ce n&amp;#39;est pas d&amp;#39;un meme à la 4chan que je me suis amusé, mais d&amp;#39;un délire de fin de soirée arrosée entre amis (mes soirées sont trop branchées, vous n&amp;#39;y entrerez pas). L&amp;#39;idée est simple et tient en 6 lettres : &amp;quot;DTLDTC&amp;quot;, ou &amp;quot;dans ton lit, dans ton cul&amp;quot;. Pas exactement une proposition indécente mais un appel au détournement de maximes, titres, et autres phrases connues. Lancé l&amp;#39;idée sur Twitter ce matin pour voir si ça marche aussi bien sur les geeks que sur les amateurs de Corsendonk brune, et ça marche plutôt bien !&lt;/p&gt;
&lt;p&gt;Quelques morceaux choisis, sans ordre particulier, pour la totale faites confiance à &lt;a href="http://twitter.com/#search?q=%23dtldtc" title="Twitter Search - DTLDTC"&gt;la recherche Twitter&lt;/a&gt; :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Robert Mailleux dans ton lit, c&amp;#39;est du sérieux dans ton cul. #spécialpourlesbelges (&lt;a href="http://twitter.com/shirineouldamer"&gt;@shirineouldamer&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;L&amp;#39;union dans ton lit fait la force dans ton cul&amp;quot; ou encore &amp;quot;Le respect dans ton lit garanti dans ton cul&amp;quot; #dtldtc #slogans #be1306 (&lt;a href="http://twitter.com/vertbruxelles"&gt;@vertbruxelles&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;le Brompton de @emich dans ton lit est l&amp;#39;attraction du jour dans ton cul #dtldtc (&lt;a href="http://twitter.com/pakal_vision"&gt;@pakal_vision&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Que le premier qui n&amp;#39;a jamais été dans ton lit, te jette la première pierre dans ton cul (&lt;a href="http://twitter.com/avaveen"&gt;@avaveen&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;L&amp;#39;hirondelle dans ton lit ne fait pas le printemps dans ton cul (&lt;a href="http://twitter.com/batmrou"&gt;@batmrou&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Le gland dans ton lit ne tombe jamais bien loin du chêne dans ton cul (&lt;a href="http://twitter.com/Mcflee13"&gt;@Mcflee13&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Jamais deux dans ton lit sans trois dans ton cul (&lt;a href="http://twitter.com/jdek_twit"&gt;@jdek_twit&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Dans mon lit il y a des cactus dans mon cul (&lt;a href="http://twitter.com/3nJ0y"&gt;@3nJ0y&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;@_klf Je t&amp;#39;en prie #danstonlit c&amp;#39;était un plaisir #danstoncul (&lt;a href="http://twitter.com/frenchfigaro"&gt;@FrenchFigaro&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Jean qui rit dans ton lit Jean qui pleure dans ton cul. (&lt;a href="http://twitter.com/Blahypocondriac"&gt;@Blahypocondriac&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Et le Prix du Pisse-Froid revient à &lt;a href="http://twitter.com/Le_Velu"&gt;@Le_Velu&lt;/a&gt; pour son superbe cri contre l&amp;#39;humour de merde :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;#dtldtc c pour recycler toutes les blagues déjà faites avec &amp;quot;entre les draps, entre les cuisses&amp;quot;? On se fait chier un peu non?&lt;/p&gt;
&lt;/blockquote&gt;
</description>
		<pubDate>Wed, 07 Jul 2010 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2010/07/07/dans_ton_lit_dans_ton_cul.html</guid>
	</item>
	<item>
		<title>Qu'est-ce qu'on peut écrire en hexadécimal ?</title>
		<link>https://blog.jkbockstael.be/posts/2010/07/06/qu_est_ce_qu_on_peut_ecrire_en_hexadecimal.html</link>
		<description>&lt;h1 id="quest-ce-quon-peut-écrire-en-hexadécimal-"&gt;Qu&amp;#39;est-ce qu&amp;#39;on peut écrire en hexadécimal ?&lt;/h1&gt;
&lt;p&gt;Pour l&amp;#39;instant au boulot je travaille avec un gentil &lt;strike&gt;morveux&lt;/strike&gt; étudiant fort sympathique qui assume une certaine geekitude nécessaire pour ce genre de métier. Par exemple, au lieu de glander totalement sur ToiTuyau, il a codé un petit bout de C, un programme qui vérifie quels mot on peut écrire uniquement avec des caractères hexadécimaux. Amusant. Et puis ça peut servir si on manque d&amp;#39;inspiration pour une IPv6 ou un magic number. Moi je l&amp;#39;ai refait mais en Python. Parce que Python, c&amp;#39;est bien.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/usr/bin/python

# Filtre sur les mots qu&amp;#39;on peut exprimer en hexadecimal
# Input: liste de mots sur STDIN, un mot par ligne
# Output: les mots valides, en hexadecimal, avec la version lisible
# Jean-Karim Bockstael - jkb@jkbockstael.be

import sys
import string

HEXCHARS = (&amp;#39;0&amp;#39;,&amp;#39;1&amp;#39;,&amp;#39;2&amp;#39;,&amp;#39;3&amp;#39;,&amp;#39;4&amp;#39;,&amp;#39;5&amp;#39;,&amp;#39;6&amp;#39;,&amp;#39;7&amp;#39;,&amp;#39;8&amp;#39;,&amp;#39;9&amp;#39;,&amp;#39;a&amp;#39;,&amp;#39;b&amp;#39;,&amp;#39;c&amp;#39;,&amp;#39;d&amp;#39;,&amp;#39;e&amp;#39;,&amp;#39;f&amp;#39;)

for line in sys.stdin:
    word = line[:-1].lower().translate(string.maketrans(&amp;#39;tioslg&amp;#39;,&amp;#39;710519&amp;#39;))
    for letter in word:
        hexable = letter in HEXCHARS
        if not hexable:
            break
    if hexable:
        print word + &amp;#39; &amp;#39; + line,
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Moi, le Python, j&amp;#39;aime bien.&lt;/p&gt;
</description>
		<pubDate>Tue, 06 Jul 2010 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2010/07/06/qu_est_ce_qu_on_peut_ecrire_en_hexadecimal.html</guid>
	</item>
	<item>
		<title>Grinderman - Grinderman</title>
		<link>https://blog.jkbockstael.be/posts/2010/07/03/grinderman_grinderman.html</link>
		<description>&lt;h1 id="grinderman---grinderman"&gt;Grinderman - Grinderman&lt;/h1&gt;
&lt;p&gt;Si j&amp;#39;annonce un side-project mené par des quinquagénaires qui se séparent du calme de leur musique habituelle pour faire du rock garage bien gras, que les chansons sont écrites pour la guitare mais par un chanteur qui a toujours délaissé cet instrument, que l&amp;#39;album a été enregistré en quatre jours, ça vous fait peur ? Y&amp;#39;a de quoi, tous les ingrédients sont réunis pour générer un bon gros disque pour papy-hasbeen qui veut jouer au jeunot. Sauf qu&amp;#39;ici l&amp;#39;idée vient d&amp;#39;un certain Nick Cave.&lt;/p&gt;
&lt;p&gt;Grinderman est né au cours de la tournée de promotion de &lt;em&gt;&amp;quot;Abattoir blues / The lyre of Orpheus&amp;quot;&lt;/em&gt; de Nick Cave and the Bad Seeds. Ce cher Mr Cave s&amp;#39;est mis à écrire des chansons en composant pour la guitare (alors que ceux qui suivent savent que Nick Cave n&amp;#39;est pas exactement un guitariste). Le voici avec quelques chansons sur de la musique simple mais efficace, il embarque des amis des Bad Seeds (Warren Ellis, Jim Sclavunos, et Martin Casey) et ils partent enregistrer ça comme démo.&lt;/p&gt;
&lt;p&gt;Ces quelques chansons ont formé la base de ce qui sera le premier album de Grinderman, intitulé sobrement &lt;em&gt;&amp;quot;Grinderman&amp;quot;&lt;/em&gt;. De leur propre aveu, les quatre compères n&amp;#39;ont pas du tout cherché à produire quelque chose qui ait du succès mais quelque chose qui les défoule, qui les libère. Après tout, ils ont les Bad Seeds comme source de revenus presque garantie, et ont tous largement passé l&amp;#39;âge d&amp;#39;aller faire la catin sur MTV. Et poum, en 2007 voici enregistré (en quatre jours de studio selon la légende) le premier album de Grinderman.&lt;/p&gt;
&lt;p&gt;Mais que dit-il se disque ? Eh bien d&amp;#39;entrée de jeu avec un gros gras &lt;em&gt;Get it on&lt;/em&gt; on annonce la couleur. Pas question d&amp;#39;ochestration complexe et raffinée comme dans les Bad Seeds, l&amp;#39;heure est au défoulement, au brut de décoffrage. Un retour aux tendances de The Birthday Party (groupe post-punk dans lequel Cave a officié quelques temps, qui mérite une écoute aussi) peut-être, mais en tout cas de la pêche et du rentre-dedans bien couillu. Continuons avec &lt;em&gt;No pussy blues&lt;/em&gt; aux paroles tordantes, &lt;em&gt;Electric Alice&lt;/em&gt; et &lt;em&gt;Grinderman&lt;/em&gt; hypnotiques, ... mais c&amp;#39;est qu&amp;#39;ils savent faire quelque chose de simple aux accents de garage sans pour autant tomber dans la facilité du bourrin en plus ! Des artistes moi je vous dis ! On repart dans des endiablées plus rock&amp;#39;n&amp;#39;roll le temps d&amp;#39;un &lt;em&gt;Depth Charge Ethel&lt;/em&gt; avant de revenir à de la bonne chanson de texte avec le magistral &lt;em&gt;Go tell the women&lt;/em&gt; mais c&amp;#39;est vite reparti pour le duo pêchu &lt;em&gt;I don&amp;#39;t need you (to set me free)&lt;/em&gt; et &lt;em&gt;Honey Bee (let&amp;#39;s fly to Mars)&lt;/em&gt;. &lt;em&gt;Man on the moon&lt;/em&gt; d&amp;#39;une émotion déchirante, où Nick Cave rappelle quel bon chanteur il est, &lt;em&gt;When my love comes down&lt;/em&gt; tendu à souhait, et enfin &lt;em&gt;Love bomb&lt;/em&gt; pour cloturer comme il se doit ce disque un peu trop court en fait. 40 minutes de bonheur ça fait jamais que 40 minutes...&lt;/p&gt;
&lt;p&gt;Un disque mené de main de maître, où Nick Cave sait rappeler une fois de plus que son succès n&amp;#39;est pas volé, et qu&amp;#39;il sait s&amp;#39;entourer de musiciens d&amp;#39;exception. Comme l&amp;#39;ont dit d&amp;#39;autres avant moi : il n&amp;#39;y a rien à jeter de ce disque. Un délice à découvrir ou redécouvrir avant la sortie du deuxième album, prévue pour septembre 2010.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;(Cet article a été publié sur &lt;a href="http://leblogdelafougere.wordpress.com/" title="La Fougère"&gt;La Fougère&lt;/a&gt;, blog musical sans restriction.)&lt;/p&gt;
</description>
		<pubDate>Sat, 03 Jul 2010 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2010/07/03/grinderman_grinderman.html</guid>
	</item>
	<item>
		<title>Black Sun Empire - Cruel And Unusual</title>
		<link>https://blog.jkbockstael.be/posts/2010/07/01/black_sun_empire_cruel_and_unusual.html</link>
		<description>&lt;h1 id="black-sun-empire---cruel-and-unusual"&gt;Black Sun Empire - Cruel and Unusual&lt;/h1&gt;
&lt;p&gt;Le mouvement drum&amp;#39;n&amp;#39;bass a eu son espèce d&amp;#39;époque de grande gloire, on ne parlait que de ça et pour être un mec cool il fallait forcement s&amp;#39;être fait réveiller par la police la tête dans la boue d&amp;#39;une freeparty dont le mur de son martèle depuis des heures. Maintenant c&amp;#39;est plus trop ça, c&amp;#39;est plutôt les pop acidulées ou à tendance revival qui ont la cote, donc je peux parler de drum&amp;#39;n&amp;#39;bass. De drum&amp;#39;n&amp;#39;bass hollandaise. Paie ton stéréotype.&lt;/p&gt;
&lt;p&gt;Black Sun Empire est une bête à trois têtes, nommées Rene Verdult, Milan Heyboer, et Micha Heyboer. Venus d&amp;#39;Utrecht dans la plate mais charmante Hollande, ils sont comme leurs compatriotes de Noisia des hommes à tout faire qui ont évolué dans les styles et les vagues, mixé, remixé, collaboré avec plus d&amp;#39;artistes qu&amp;#39;on pourrait en citer, ... et continuent encore de produire via leurs deux labels et d&amp;#39;organiser des soirées. C&amp;#39;est bon là on a rangé au placard le stéréotype du hollandais avec sa meule de gouda et son joint au bec qui regarde passer une péniche ?&lt;/p&gt;
&lt;p&gt;Comme souvent dans ce milieu, et à l&amp;#39;inverse des stars MTV, Black Sun Empire a du beaucoup tourner, mixer, faire danser et se faire connaître avant d&amp;#39;avoir l&amp;#39;occasion d&amp;#39;enregistrer un album full-length. Ce premier album est sorti en 2005, soit après dix ans d&amp;#39;activité donc, et s&amp;#39;intitule &lt;em&gt;Cruel and Unusual&lt;/em&gt;. Huit titres qui curieusement n&amp;#39;essaient pas de s&amp;#39;enchaîner. Chacun a droit à son introduction, à son développement, à sa conclusion. Ceci est un album, un vrai.&lt;/p&gt;
&lt;p&gt;C&amp;#39;est plaisant d&amp;#39;ailleurs, dès le début l&amp;#39;auditeur est accueilli dans un paysage sonore qui sait s&amp;#39;installer à son aise malgré l&amp;#39;urgence qui est imposée par le rythme drum&amp;#39;n&amp;#39;bass, l&amp;#39;énergie vient par vagues plutôt qu&amp;#39;en une grosse baffe et on se laisse emmener. &lt;em&gt;The Cooler&lt;/em&gt;, &lt;em&gt;Everything&lt;/em&gt;, &lt;em&gt;Bitemark&lt;/em&gt;, ... Chaque titre prend son temps mais amène son beat typé, racé, plus &amp;quot;drum&amp;quot; que &amp;quot;bass&amp;quot;. Et ça y va sur les featurings qui passent de Noisia à Corrupt Souls en passant par SKC et Illy Emcee. Les sons sont travaillés, les rythmes entêtants, on a bien vite envie de se retrouver devant les mêmes dans une salle obscure au milieu de centaines de gens &lt;strike&gt;défoncés à l&amp;#39;exta&lt;/strike&gt; bien partis pour danser pendant des heures. &lt;em&gt;Hideous&lt;/em&gt;, &lt;em&gt;Sideways&lt;/em&gt;, &lt;em&gt;Future Frame&lt;/em&gt;, ... mouais en fait il manque un tout petit quelque chose. C&amp;#39;est du bon son, mais des fois ça manque un peu de structure, on ne sait pas exactement où ils vont par moments. Dommage, sans ça ce serait parfait. &lt;em&gt;Breathe&lt;/em&gt; à l&amp;#39;introduction relaxante à souhait, au déroulement narratif qui ferait presque penser à de la musique de film. Et puis plus rien. Boh. C&amp;#39;est court, 55 minutes.&lt;/p&gt;
&lt;p&gt;Black Sun Empire nous a servi là un album qui souffre ça et là de marques de jeunesse, qui seront rattrapées dans les galettes suivantes. Ça n&amp;#39;empêche absolument pas &lt;em&gt;Cruel and Unusual&lt;/em&gt; d&amp;#39;être un moment de plaisir qui se laisse autant écouter en musique de fond qu&amp;#39;à fond les ballons. De la drum&amp;#39;n&amp;#39;bass comme on en fait peu, trop peu.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;(Cet article a été publié sur &lt;a href="http://leblogdelafougere.wordpress.com/" title="La Fougère"&gt;La Fougère&lt;/a&gt;, blog musical sans restriction.)&lt;/p&gt;
</description>
		<pubDate>Thu, 01 Jul 2010 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2010/07/01/black_sun_empire_cruel_and_unusual.html</guid>
	</item>
	<item>
		<title>Soman - Mask</title>
		<link>https://blog.jkbockstael.be/posts/2010/06/09/soman_mask.html</link>
		<description>&lt;p&gt;Soman - Mask&lt;/p&gt;
&lt;p&gt;L&amp;#39;Allemagne est un beau pays. En tout cas, en matière de musiques électronique, elle a été gestatrice de grands précurseurs et continue de porter en son sein des scènes électroniques non négligeables parce qu&amp;#39;influentes de par le monde (les adeptes de house music me contrediront). Parmi toutes ces perles trop souvent méconnues, une est particulièrement discrète mais vaut vraiment de tendre l&amp;#39;oreille : Soman.&lt;/p&gt;
&lt;p&gt;Soman est un projet à une seule tête, en la personne de Kolja Trelle, qui fut en son temps ingénieur son pour Absurd Minds ou Hocico, qui a remixé pour VNV Nation, et a quand même été signé chez Out Of Line ce qui n&amp;#39;est pas rien. Stylistiquement on lui colle souvent une étiquette EBM / powernoise, mais Soman est un mélange bien particulier de genre noise, electro, techno avec des incursions industrial, minimal, ... bref une drôle de bête qu&amp;#39;on a du mal à classer alors qu&amp;#39;elle a une personnalité bien propre.&lt;/p&gt;
&lt;p&gt;Soman a sorti trois albums et un EP depuis 2003, celui qui m&amp;#39;intresse dans le cas présent est l&amp;#39;album &lt;em&gt;Mask&lt;/em&gt; sorti en 2007 sur le label indépendant Infacted (oui, c&amp;#39;est allemand ;-)).&lt;/p&gt;
&lt;p&gt;Mask s&amp;#39;ouvre avec &lt;em&gt;Descent&lt;/em&gt;, une introduction déconstruite qui fait penser à l&amp;#39;effondrement d&amp;#39;un vaisseau au travers de plusieurs épaisseurs de baton ; c&amp;#39;est bruyant, brutal, dissonant et ça casse tout repère qu&amp;#39;on pourrait garder. &lt;em&gt;Descent&lt;/em&gt; n&amp;#39;est qu&amp;#39;une ouverture vers le premier vrai morceau, &lt;em&gt;Mask&lt;/em&gt;, qui annonce sans détour la couleur que prennent les oeuvres de Soman : des basses lourdes et nettes, des mélodies qui filent dans des aigus entêtants, une voix se pose dessus avec un chant en anglais qu&amp;#39;on n&amp;#39;entendra presque plus sur le reste du disque. La ligne de basse est omniprésente, elle martèle sans pitié l&amp;#39;auditeur qui est balancé au rythme de mélodies qui se déroulent lentement, progressivement. Simple et sans compromis, Soman sait ce qu&amp;#39;il veut, et il le fait.&lt;/p&gt;
&lt;p&gt;Tout ceci peut paraître agressif, violent, un peu trop rentre-dedans pour ne pas céder aux plus vils stéréotypes du boum-boum, mais en fait il n&amp;#39;en est rien. Morceau après morceau on se laisse prendre par ces 4/4 entêtants, ces sonorités qui savent faire planer, cette voix sur &lt;em&gt;Eye to eye&lt;/em&gt; qui n&amp;#39;est pas sans rappeler Pzychobitch, et surtout la production impeccable qui emballe le tout. L&amp;#39;artiste est ingénieur son et ça s&amp;#39;entend, tout est impeccable, les effets sont pertinents et subtils (ou, comme sur &lt;em&gt;Detail&lt;/em&gt; deviennent part entière de la mélodie), le mixage laisse sa part à chaque voix. Mettez ce disque en musique de fond et avant de vous en rendre compte un pied battra, une tête balancera, ... c&amp;#39;est ça, l&amp;#39;effet de Soman. Du beau boulot.&lt;/p&gt;
&lt;p&gt;En bref, un disque qui n&amp;#39;est pas forcément le plus accessible de tous, mais qui sait convaincre ceux qui lui laisse le temps de les séduire. Brut sans être brutal, net mais en finesse.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;(Cet article a été publié sur &lt;a href="http://leblogdelafougere.wordpress.com/" title="La Fougère"&gt;La Fougère&lt;/a&gt;, blog musical sans restriction.)&lt;/p&gt;
</description>
		<pubDate>Wed, 09 Jun 2010 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2010/06/09/soman_mask.html</guid>
	</item>
	<item>
		<title>Maybeshewill - Not For Want Of Trying</title>
		<link>https://blog.jkbockstael.be/posts/2010/06/03/maybeshewill_not_for_want_of_trying.html</link>
		<description>&lt;h1 id="maybeshewill---not-for-want-of-trying"&gt;Maybeshewill - Not for want of trying&lt;/h1&gt;
&lt;p&gt;Au royaume du post-rock et assimilés, il y a les mastodontes Mogwai, Godspeed You! Black Emperor, God is an astronaut, ou autres Explosions in the sky ... et puis il y a les nouveaux venus, les moins connus, ceux qui pour l&amp;#39;une ou l&amp;#39;autre raison ne sont pas des noms qu&amp;#39;on a déjà entendus mais qui valent vraiment le détour. Maybeshewill est très clairement de ceux-là.&lt;/p&gt;
&lt;p&gt;Maybeshewill est un groupe britannique, originaire de Leicester, un trio au studio (James Collins, Robin Southby, John Helps), quatuor sur scène (Jamie Ward les rejoint armé de sa basse); Maybeshewill est indépendant, Maybeshewill est même un de ces groupes DIY (Do It Yourself) ; preuve vivante que tout s&amp;#39;apprend et qu&amp;#39;un artiste peut assurer sa production, enregistrement, mastering et distribution lui-même. Maybeshewill c&amp;#39;est donc un groupe de musiciens, un label, une agence de booking, un studio d&amp;#39;enregistrement et une structure de promotion. Je ne sais pas si vous avez idée du travail de bénédictin que ça représente, mais ces garçons en ont, et en veulent !&lt;/p&gt;
&lt;p&gt;L&amp;#39;album &lt;em&gt;&amp;quot;Not for want of trying&amp;quot;&lt;/em&gt; est leur premier, sorti en 2008. C&amp;#39;est d&amp;#39;ailleurs là que ça devient impressionnant, ce premier album est d&amp;#39;une maturité, d&amp;#39;un aboutissement qui laissent coi. Mélodies, orchestration, enregistrement, mixage ... tout est impeccable, d&amp;#39;un professionnalisme qui donnerait à rougir à bien des professionnels. L&amp;#39;album s&amp;#39;ouvre sur &lt;em&gt;&amp;quot;Ixnay on the autoplay&amp;quot;&lt;/em&gt;, une introduction en 102 secondes portée au piano et samples aux sonorités réminescentes de 65daysofstatic. Et là, on entre dans le vif du sujet avec &lt;em&gt;&amp;quot;Seraphim &amp;amp; Cherubim&amp;quot;&lt;/em&gt; où la batterie arrive, insistante et obsédante, soutenue par une guitare saturée. la force est là, l&amp;#39;émotion est là, le piano revient vite la rejoindre pour ce qui est vite un entrelac de passages léger en dialogue de piano et d&amp;#39;arpèges aériens, et de passages plus lourds qui forcent presque à se lever et courir le poing en avant.&lt;/p&gt;
&lt;p&gt;Effectivement comme ouverture ça rappelle tellement 65daysofstatic que beaucoup ont certainement lâché ici en collant une étiquette &amp;quot;YA65DOS&amp;quot; avant d&amp;#39;aller voir ailleurs.&lt;/p&gt;
&lt;p&gt;Grave erreur.&lt;/p&gt;
&lt;p&gt;Le disque continue avec l&amp;#39;énergique &lt;em&gt;&amp;quot;The Paris Hilton sex tape&amp;quot;&lt;/em&gt; et déjà l&amp;#39;alchimie de Maybeshewill fait son effet. Ici il n&amp;#39;y a pas d&amp;#39;usage abusif du contretemps ou d&amp;#39;une boîte à rythme qui flirterait avec le breakcore comme le ferait 65daysofstatic ; ici tout semble s&amp;#39;articuler de façon très naturelle, l&amp;#39;instrumental déroule son histoire tout en sincérité et sans faux artifices, toujours porté par une batterie mise en avant, on se surprend à battre la mesure et il faut bien l&amp;#39;admettre, c&amp;#39;est puissant. Vient &lt;em&gt;&amp;quot;I&amp;#39;m in awe, Amadeus&amp;quot;&lt;/em&gt; où un deuxième clavier se joint au premier, les frontières entre musiques électroniques et post-rock se gomment avec un naturel déconcertant, et c&amp;#39;est tellement bon ... et toujours ces crescendo qui savent aller jusqu&amp;#39;à l&amp;#39;instant climactique où les émotions explosent en un paysage sonore terriblement beau. L&amp;#39;émotion se mèle tout aussi bien à la force dans le souple mais énergique &lt;em&gt;&amp;quot;We called for an ambulance but a fire engine came&amp;quot;&lt;/em&gt;, à ce stade-ci il est bien clair que les comparaisons avec 65daysofstatic n&amp;#39;ont pas lieu d&amp;#39;être, Maybeshewill sait mener un voyage sonore de main de maître.&lt;/p&gt;
&lt;p&gt;Du chant à deux voix sur &lt;em&gt;&amp;quot;Heartflusters&amp;quot;&lt;/em&gt;, le retour de l&amp;#39;urgence, de la détresse sur &lt;em&gt;&amp;quot;C.N.T.R.C.K.T.&amp;quot;&lt;/em&gt;, la terrible mélancolie de &lt;em&gt;&amp;quot;He films the clouds pt. 2&amp;quot;&lt;/em&gt; et comme duo final la plage titulaire &lt;em&gt;&amp;quot;Not for want of trying&amp;quot;&lt;/em&gt; et la berceuse &lt;em&gt;&amp;quot;Takotsubo&amp;quot;&lt;/em&gt; qui à deux sont comme une preuve que Maybeshewill sait en deux morceau nous promener dans toutes les émotions, tous les paysage qui ont fait de cet album un plaisir dont on ne voit pas passer le temps.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;quot;Not for want of trying&amp;quot;&lt;/em&gt; est un album qui sait se faire abordable sans sombrer dans les stéréotype, une belle porte d&amp;#39;entrée vers les expérimentations que la niche post-rock réserve. Je le recommande vivement.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;(Cet article a été publié sur &lt;a href="http://leblogdelafougere.wordpress.com/2010/06/01/maybeshewill-not-for-want-of-trying/" title="La Fougère"&gt;La Fougère&lt;/a&gt;, blog musical sans restriction.)&lt;/p&gt;
</description>
		<pubDate>Thu, 03 Jun 2010 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2010/06/03/maybeshewill_not_for_want_of_trying.html</guid>
	</item>
	<item>
		<title>Où l'auteur annonce qu'il publie ailleurs (déjà)</title>
		<link>https://blog.jkbockstael.be/posts/2010/06/02/ou_l_auteur_annonce_qu_il_publie_ailleurs_deja.html</link>
		<description>&lt;h1 id="où-lauteur-annonce-quil-publie-ailleurs-déjà"&gt;Où l&amp;#39;auteur annonce qu&amp;#39;il publie ailleurs (déjà)&lt;/h1&gt;
&lt;p&gt;J&amp;#39;ai mentionné il y a peu le fait qu&amp;#39;on m&amp;#39;a embrigadé pour participer à un blog musical de tous genres et toutes époques. Le blog est en ligne, il s&amp;#39;appelle &lt;a href="http://leblogdelafougere.wordpress.com/" title="La Fougère"&gt;La Fougère&lt;/a&gt;, et j&amp;#39;y ai publié aujourd&amp;#39;hui &lt;a href="http://leblogdelafougere.wordpress.com/2010/06/01/maybeshewill-not-for-want-of-trying/" title="La Fougere - Not For Want Of Trying"&gt;ma première chronique&lt;/a&gt;. La machine est lancée :-)&lt;/p&gt;
&lt;p&gt;Comme annoncé le projet a été lancé et sera entretenu par des passionnés pour d&amp;#39;autres passionnés. L&amp;#39;objectif n&amp;#39;est pas de faire du trafic pour s&amp;#39;en mettre plein les fouilles avec de la pub, d&amp;#39;ailleurs on ne se prend pas trop au sérieux (je dis ça je dis rien, faut pas attendre d&amp;#39;un blog qui s&amp;#39;appelle &amp;quot;La Fougère&amp;quot; qu&amp;#39;il soit particulièrement sinistre). Le but est de partager, de faire découvrir, et de découvrir. Tout simplement.&lt;/p&gt;
&lt;p&gt;Ma première contribution porte sur &lt;em&gt;&amp;quot;Not for want of trying&amp;quot;&lt;/em&gt;, le très bon premier album de Maybeshewill, &lt;a href="http://leblogdelafougere.wordpress.com/2010/06/01/maybeshewill-not-for-want-of-trying/" title="La Fougère - Not For Want Of Trying"&gt;lisible ici&lt;/a&gt;.&lt;/p&gt;
</description>
		<pubDate>Wed, 02 Jun 2010 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2010/06/02/ou_l_auteur_annonce_qu_il_publie_ailleurs_deja.html</guid>
	</item>
	<item>
		<title>Microsoft Internet Explorer et les fichiers CSV générés par PHP</title>
		<link>https://blog.jkbockstael.be/posts/2010/06/02/msie_et_les_fichiers_csv_generes_par_php.html</link>
		<description>&lt;h1 id="microsoft-internet-explorer-et-les-fichiers-csv-générés-par-php"&gt;Microsoft Internet Explorer et les fichiers CSV générés par PHP&lt;/h1&gt;
&lt;p&gt;Je ne sais pas si je l&amp;#39;ai mentionné, mais dans la vraie vie j&amp;#39;ai un vrai métier, et ce vrai métier implique (entre autres choses passionante) pas mal de développement sur-mesure en PHP. Aujourd&amp;#39;hui un client m&amp;#39;a fait (re)découvrir une triste vérité : dans la vie, il y a les standards, il y a Microsoft Internet Explorer, et l&amp;#39;intersection entre les deux ensemble est pour ainsi dire inexistante. Pourtant je ne lui parlais pas de haute technologie, je lui parlais de fichiers CSV (comma-separated values), un format bien plus vieux que moi.&lt;/p&gt;
&lt;p&gt;Le contexte est assez simple : soit une plateforme d&amp;#39;e-learning (basée sur le logiciel libre Chamilo), le commanditaire souhaitait pouvoir fournir au client final un moyen simple d&amp;#39;obtenir les données de suivi de ses apprenants dans un format pratique. Nous avons donc convenu des champs de données à fournir, de leur format, et d&amp;#39;un modus operandi. Le plus simple pour le client étant de disposer d&amp;#39;une URL lui fournissant directement un fichier CSV avec des données à jour, j&amp;#39;ai concoté un script PHP qui va chercher à la demande les données qu&amp;#39;il faut, les formatte en CSV, et les sert en tant que tel au client. En pratique, le client ouvre une URL dans son navigateur, le fichier est téléchargé, et comme c&amp;#39;est bien fait le navigateur lui propose directement d&amp;#39;ouvrir son fichier dans Excel (ou équivalent). Pratique.&lt;/p&gt;
&lt;p&gt;Pour ce faire la recette est simple : les en-têtes HTTP permettent de définir un &lt;code&gt;Content-type&lt;/code&gt; donc de dire clairement au navigateur &amp;quot;ce que je te donne là, c&amp;#39;est des données de tel type, pas du texte brut dénué de sens&amp;quot;. Un petit tour dans les textes normatifs me disent que le MIME-type pour du CSV est &lt;code&gt;text/mime&lt;/code&gt;, j&amp;#39;ai donc codé la fonction suivante :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;function serve_as_csv($csvdata) {
    $date = date(&amp;quot;Y-m-d&amp;quot;);
    $filename = &amp;quot;tracking-$date.csv&amp;quot;;
    header(&amp;quot;Content-length: &amp;quot;.strlen($csvdata));
    header(&amp;quot;Content-type: text/csv&amp;quot;);
    header(&amp;quot;Content-Disposition: attachment; filename=$filename&amp;quot;);
    ob_start();
    echo $csvdata;
    ob_end_flush();
    exit;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Jusqu&amp;#39;ici tout va bien, tous les navigateurs s&amp;#39;en sortent. Sauf IE. Ce brave petit n&amp;#39;est pas foutu de reconnaître un MIME-type défini il y a une quinzaine d&amp;#39;années, on n&amp;#39;est pas sorti de l&amp;#39;auberge. La documentation de Microsoft conseille de le servir en tant que &lt;code&gt;application/download&lt;/code&gt; mais évidemment ça ne marche pas plus. On ne va quand même pas imaginer que de la documentation Microsoft pour contourner un défaut d&amp;#39;un logiciel Microsoft soit fiable ...&lt;/p&gt;
&lt;p&gt;J&amp;#39;ai donc du passer en revue tous les MIME-types plus ou moins délirants qui pourraient vaguement être associés à un CSV. Aucun n&amp;#39;est bon. On vise à côté, il faut d&amp;#39;abord expliquer à cette andouille comment on gère du cache, ensuite on voit. Arrive donc la combinaison gagnante:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;function serve_as_csv($csvdata) {
    $date = date(&amp;quot;Y-m-d&amp;quot;);
    $filename = &amp;quot;tracking-$date.csv&amp;quot;;
    header(&amp;quot;Content-length: &amp;quot;.strlen($csvdata));
    header(&amp;quot;Pragma: must-revalidate&amp;quot;);
    header(&amp;quot;Cache-Control: must-revalidate&amp;quot;);
    header(&amp;quot;Content-type: application/vnd.ms-excel&amp;quot;);
    header(&amp;quot;Content-Disposition: attachment; filename=$filename&amp;quot;);
    ob_start();
    echo $csvdata;
    ob_end_flush();
    exit;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Là ça fonctionne avec Internet Explorer. Le souci vient par contre pour le reste du monde, qui ne sait absolument pas que faire de ce &lt;code&gt;application/vnd.ms-excel&lt;/code&gt; défini dans aucune RFC et du coup propose tout au plus de télécharger le fichier, en tout cas pas de l&amp;#39;ouvrir avec un logiciel aapproprié. Génial. Donc il faut effectuer une vérification sur le User-Agent, quelque chose du goût de :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;if (strpos($_SERVER[&amp;#39;HTTP_USER_AGENT&amp;#39;], &amp;#39;MSIE&amp;#39;) !== false) {
    // Ceci n&amp;#39;est pas un navigateur
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Mais pour une raison qui doit certainement ne regarder que le jardinier du sultan du Brunei, Opera se déclare comme &amp;quot;Compatible MSIE&amp;quot; donc ce check est borké, puisqu&amp;#39;Opera ne sait pas trop (à juste titre) quoi faire de &lt;code&gt;application/vnd.ms-excel&lt;/code&gt;, ce n&amp;#39;est pas assez. Mais ce qui est bon c&amp;#39;est que ce n&amp;#39;est que la dernière particularité foireuse à prendre en compte. Donc, au bout de 30 minutes d&amp;#39;essais-erreurs, ça, ça marche :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;function serve_as_csv($csvdata) {
    $date = date(&amp;quot;Y-m-d&amp;quot;);
    $filename = &amp;quot;tracking-$date.csv&amp;quot;;
    header(&amp;quot;Content-length: &amp;quot;.strlen($csvdata));
    if ((strpos($_SERVER[&amp;#39;HTTP_USER_AGENT&amp;#39;], &amp;#39;MSIE&amp;#39;) !== false) &amp;amp;&amp;amp; (strpos($_SERVER[&amp;#39;HTTP_USER_AGENT&amp;#39;], &amp;#39;Opera&amp;#39;) == false)) { 
        header(&amp;quot;Pragma: must-revalidate&amp;quot;);
        header(&amp;quot;Cache-Control: must-revalidate&amp;quot;);
        header(&amp;quot;Content-type: application/vnd.ms-excel&amp;quot;);
    }
    else {
        header(&amp;quot;Content-type: text/csv&amp;quot;);
    }
    header(&amp;quot;Content-Disposition: attachment; filename=$filename&amp;quot;);
    ob_start();
    echo $csvdata;
    ob_end_flush();
    exit;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Pfiou ! Donc voilà, ici pour la postérité.&lt;/p&gt;
</description>
		<pubDate>Wed, 02 Jun 2010 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2010/06/02/msie_et_les_fichiers_csv_generes_par_php.html</guid>
	</item>
	<item>
		<title>Quit Facebook Day</title>
		<link>https://blog.jkbockstael.be/posts/2010/05/31/quit_facebook_day.html</link>
		<description>&lt;h1 id="quit-facebook-day"&gt;Quit Facebook Day&lt;/h1&gt;
&lt;p&gt;Aujourd&amp;#39;hui nous sommes les 31 mai 2010, jour choisi pour l&amp;#39;accomplissement de leur croisade par les organisateurs du &lt;a href="http://www.quitfacebookday.com/"&gt;Quit Facebook Day&lt;/a&gt;. Je suis le seul qui s&amp;#39;étonne de voir qu&amp;#39;on ait besoin d&amp;#39;un meneur pour choisir de ne pas suivre un autre meneur ?&lt;/p&gt;
&lt;p&gt;Le principe de Quit Facebook Day est celui que sous-entend son nom : à date fixée, les participants quittent Facebook en supprimant leurs comptes. Tous ensemble, le même jour ; portée symbolique, message fort, tout ça tout ça ... La raison invoquée est un peu la même que d&amp;#39;habitude : &amp;quot;Facebook is Evil&amp;quot;, collecte de données personnelles à l&amp;#39;insu de notre plein gré (enfin c&amp;#39;était quand même écrit, mais passons), termes et conditions à géométrie variable, rétention de données. &lt;/p&gt;
&lt;p&gt;En fait, il faut bien l&amp;#39;admettre, dire du mal de Facebook en 2010 c&amp;#39;est un peu comme dire du mal de George W Bush en 2005 ; avant tout une question de bien-penseance, ensuite éventuellement des convictions personnelles. On n&amp;#39;aime pas les termes et conditions de Facebook parce qu&amp;#39;un blogger influent en a dit du mal. Pourraient être légion les sites qui collectent des données de profilage et en font de la publicité personnalisée (donc qui vaut cher, faut pas avoir fait HEC pour comprendre ça), mais tant qu&amp;#39;on ne les pointe pas du doigt tout le monde s&amp;#39;en fout. Vous lisez les termes et conditions avant de cliquer sur &amp;quot;j&amp;#39;approuve&amp;quot; vous ? Moi non plus.&lt;/p&gt;
&lt;p&gt;Passons, sinon on va penser que j&amp;#39;approuve complêtement le caractère changeant de la politique de confidentialité de Facebook (à qui de toute façon je ne confie que des choses que j&amp;#39;accepte de voir portées sur la place publique). Voyons voir l&amp;#39;ampleur du bras vengeur symbolique que Quit Facebook Day va abattre sur Mark et ses potes, c&amp;#39;est d&amp;#39;autant plus aisé que la page du projet indique un compteur des e-activites 2.0 qui se sont e-engagés à e-agir en cliquant sur un bouton. Bon bon bon ... alors ... 25865 promesses. Pas mal ! Tiens, en proportion du total ça fait combien ? Facebook compte aux alentours de 400 millions d&amp;#39;utilisateurs. Clairement, Mark tremble.&lt;/p&gt;
&lt;p&gt;Le plus rigolo ? L&amp;#39;événement est vanté &lt;a href="http://www.facebook.com/may31quitfbday"&gt;par&lt;/a&gt; &lt;a href="http://www.facebook.com/pages/Quit-Facebook-Day/114738051901418"&gt;trois&lt;/a&gt; &lt;a href="http://www.facebook.com/pages/May-31st-Quit-Facebook-Day/128167190529610"&gt;pages&lt;/a&gt; sur Facebook. Halala l&amp;#39;activisme 2.0 ...&lt;/p&gt;
</description>
		<pubDate>Mon, 31 May 2010 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2010/05/31/quit_facebook_day.html</guid>
	</item>
	<item>
		<title>Où l'auteur annonce qu'il va publier ailleurs (aussi)</title>
		<link>https://blog.jkbockstael.be/posts/2010/05/26/ou_l_auteur_annonce_qu_il_va_publier_ailleurs_aussi.html</link>
		<description>&lt;h1 id="où-lauteur-annonce-quil-va-publier-ailleurs-aussi"&gt;Où l&amp;#39;auteur annonce qu&amp;#39;il va publier ailleurs (aussi)&lt;/h1&gt;
&lt;p&gt;Tiens on dirait que, quoique tardif, le printemps est arrivé bel et bien avec son regain d&amp;#39;énergie, de motivation, et de coups de bit^W^W^Wprojets enthousiastes. Bien ça ! Il était presque temps. Vous l&amp;#39;avez déjà fait à plusieurs ? Moi pas, donc je m&amp;#39;y essaie et nous verrons bien ce que ça donne.&lt;/p&gt;
&lt;p&gt;L&amp;#39;idée a germé dans l&amp;#39;esprit d&amp;#39;Antoine &amp;quot;FrenchFigaro&amp;quot; Berbineau, &lt;a href="http://considerationssansimportance.wordpress.com/" title="Considérations sans importance"&gt;dont la plume vaut vraiment le détour&lt;/a&gt;, et consiste en un blog de chroniques musicales par et pour des passionnés. Aucun limite de style ou d&amp;#39;époque, pas d&amp;#39;écho de ce que les grands médias crient tous en choeur (donc pas de chronique du dernier Lady Gaga ou Christophe Maé), mais une poignée de mélomanes aux goût aussi variés et eccléctiques que possible qui vont faire de leur mieux pour vous fournir un flux constant de chroniques sincères. Evidemment, si j&amp;#39;en parle c&amp;#39;est que je fais partie de ceux qui ont été embrigadés pour participer à la chose, et ce que j&amp;#39;y publierai sera sûrement publié ici aussi.&lt;/p&gt;
&lt;p&gt;L&amp;#39;idée ce n&amp;#39;est pas de faire des pageviews par milliers en se la jouant démago, encore moins de faire du fric. On parle de blog comme ils auraient toujours du le rester: sincères, désintéressés, pour le plaisir de partager une découverte ou une opinion. On dira ce qu&amp;#39;on voudra mais des fois ça manque, de ne pas se demander en lisant une critique positive si son auteur a été payé pour ne dire que du bien.&lt;/p&gt;
&lt;p&gt;Voilà voilà, plus de détails quand ça passe en concret, mais dans l&amp;#39;immédiat je suis joie et enthousiasme :-)&lt;/p&gt;
</description>
		<pubDate>Wed, 26 May 2010 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2010/05/26/ou_l_auteur_annonce_qu_il_va_publier_ailleurs_aussi.html</guid>
	</item>
	<item>
		<title>Splits België !</title>
		<link>https://blog.jkbockstael.be/posts/2010/04/23/splits_belgie.html</link>
		<description>&lt;h1 id="splits-belgië-"&gt;Splits België !&lt;/h1&gt;
&lt;p&gt;Ça y est, on y est revenu. A nouveau ça s&amp;#39;insulte dans tous les sens en se rejetant la faute. Ça titre gros, ça résume à l&amp;#39;emporte-pièce, ça ne comprend pas dans la presse étrangère, ça ne sait plus quoi dire pour ne pas se répéter dans la presse nationale, ça crée des solutions aux comptoirs des troquets.&lt;/p&gt;
&lt;p&gt;Non je ne vais pas rejoindre les politiciens de comptoir qui vous trouvent des solutions à des dossiers épineux à grands coups de &amp;quot;yaka ceci&amp;quot; et &amp;quot;yakapa cela&amp;quot;. Je n&amp;#39;ai pas cette prétention. Je suis juste attristé.&lt;/p&gt;
&lt;p&gt;Vous ne trouveriez pas ça triste, vous, qu&amp;#39;un pays qui était parmi les pionniers du gommage de frontières internationales en vienne à se déchirer autour d&amp;#39;une frontière intranationale qu&amp;#39;il a réussi à se créer lui-même ?&lt;/p&gt;
&lt;p&gt;Moi si.&lt;/p&gt;
</description>
		<pubDate>Fri, 23 Apr 2010 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2010/04/23/splits_belgie.html</guid>
	</item>
	<item>
		<title>"Comment devenir un hacker" mis à jour</title>
		<link>https://blog.jkbockstael.be/posts/2010/04/02/comment_devenir_un_hacker_mis_a_jour.html</link>
		<description>&lt;h1 id="comment-devenir-un-hacker-mis-à-jour"&gt;&amp;quot;Comment devenir un hacker&amp;quot; mis à jour&lt;/h1&gt;
&lt;p&gt;Il y à un peu plus de deux ans d&amp;#39;ici, j&amp;#39;annonçais la mise en ligne de ma traduction de &lt;a href="http://catb.org/~esr/faqs/hacker-howto.html" title="How To Become A Hacker"&gt;&amp;quot;How to become a hacker&amp;quot;&lt;/a&gt; (Eric Steven Raymond) en français. Depuis, ce post est lu de manière régulière, j&amp;#39;ose en conclure que cette traduction est utile à au moins quelques personnes. L&amp;#39;original ayant été mis à jour, une mise à jour s&amp;#39;imposait.&lt;/p&gt;
&lt;p&gt;De plus, ma traduction était hébergée sur un espace d&amp;#39;hébergement fourni par mon FAI donc dépendant d&amp;#39;un contrat avec ce dernier et portant une URL pas forcément élégante. D&amp;#39;une pierre deux coups, j&amp;#39;en ai profité pour créer un espace de stockage digne de ce nom pour ce document et quelques autres choses qui tôt ou tard mériteront d&amp;#39;y prendre place. Il va de soi qu&amp;#39;un travail de relecture assez conséquent a été effectué aussi, pas mal de coquilles subsistaient et des formulations sentait un peu le Babelfish. Nul n&amp;#39;est parfait ;-)&lt;/p&gt;
&lt;p&gt;Vous pouvez donc dès à présent profiter de la toute nouvelle toute belle version de &lt;a href="http://files.jkbockstael.be/hacker-howto-fr.html" title="Comment devenir un hacker"&gt;&amp;quot;Comment devenir un hacker&amp;quot;&lt;/a&gt;, et les commentaires pour améliorer cette traduction sont toujours les bienvenus :-)&lt;/p&gt;
&lt;p&gt;Un grand merci à Dari pour son coup de main sur la relecture, il s&amp;#39;est fendu avec enthousiasme d&amp;#39;un travail pourtant pénible.&lt;/p&gt;
</description>
		<pubDate>Fri, 02 Apr 2010 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2010/04/02/comment_devenir_un_hacker_mis_a_jour.html</guid>
	</item>
	<item>
		<title>Exercice de 'pataprogrammation: le tri à gobelets</title>
		<link>https://blog.jkbockstael.be/posts/2009/12/13/pataprogrammation_le_tri_a_gobelets.html</link>
		<description>&lt;h1 id="exercice-de-pataprogrammation-le-tri-à-gobelets"&gt;Exercice de &amp;#39;pataprogrammation: le tri à gobelets&lt;/h1&gt;
&lt;p&gt;Tiens et si on parlait d&amp;#39;informatique, pour changer un peu, et pour rappeler aux moins attentifs de l&amp;#39;assistance que votre serviteur est avant toute chose ce qu&amp;#39;il convient d&amp;#39;appeller un &amp;quot;computer geek&amp;quot;? Mais bon, ne parlons pas d&amp;#39;informatique trop sérieuse quand même, ça s&amp;#39;écarterait du sujet ;-)&lt;/p&gt;
&lt;p&gt;Un mien ami, qui fut mien camarade de cours quand nous usions les bancs de la fac d&amp;#39;info de Namur, est il me semble l&amp;#39;instigateur de la &amp;#39;pataprogrammation, qui est à la programmation ce que la &amp;#39;pataphysique est à la physique. Je pense que l&amp;#39;amie Wikipedia saura mieux que moi vous expliquer ce qu&amp;#39;est cette fameuse &amp;#39;pataphysique, retenez surtout que son inventeur est le père de Ubu, ça donne le ton.&lt;/p&gt;
&lt;p&gt;Ce joyeux farfelu a donc déliré un jour et inventé le &amp;quot;tri à gobelets&amp;quot; qui est sans aucun doute le moins efficace des algorithmes de tri. L&amp;#39;idée est simple: permutons deux éléments du tableau à trier, choisis au hasard, et répétons l&amp;#39;opération jusqu&amp;#39;à ce que le tableau soit effectivement trié.&lt;/p&gt;
&lt;p&gt;Bon, intuitivement c&amp;#39;est une atrocité cet algorithme, mais en fait c&amp;#39;est une atrocité à quel point? Comme le dit son auteur, il s&amp;#39;exécute de façon pas trop péniblement lente pour des tableaux de petite taille, mais avec peu de chance on peut y perdre beaucoup de temps. De plus, l&amp;#39;algorithme n&amp;#39;a aucune garantie de terminaison autre que la fin des temps. Brillant! Donc pour avoir une mesure, j&amp;#39;ai pondu le programme suivant:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    #! /usr/bin/python
# Implementation de l&amp;#39;algorithme de tri par gobelets, invente par Benoit Vleminckx
# http://www.javafr.com/codes/TRI-GOBELET-BEAKER-SORT_48639.aspx

import random

def is_sorted(tab):
    &amp;quot;&amp;quot;&amp;quot; renvoie True ssi tab est trie par ordre croisant &amp;quot;&amp;quot;&amp;quot;
    for i in range (0,len(tab)-1):
        if tab[i] &amp;gt; tab[i+1]:
            return False
    return True

def beakersort(tab):
    &amp;quot;&amp;quot;&amp;quot;Trie le tableau tab par l&amp;#39;algorithme du tri a gobelets&amp;quot;&amp;quot;&amp;quot;
    # pour la science
    iterations = 0
    while not is_sorted(tab):
        iterations += 1
        # determination de deux indices aleatoires differents
        index1 = -1
        index2 = -1
        while (index1 == index2):
            index1 = random.randint(0,len(tab)-1)
            index2 = random.randint(0,len(tab)-1)
        # permutation des elements a ces indices
        tab[index1],tab[index2] = tab[index2],tab[index1]
    print len(tab), iterations
    return tab

# Mesures hautement scientifiques!
for tablength in range (3,11):
    for testnum in range (0,100):
        testtab = range(0,tablength)
        random.shuffle(testtab)
        beakersort(testtab)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Remarquons que j&amp;#39;y suis optimiste puisque je suppose que chaque application de l&amp;#39;algorithme va effectivement se terminer un jour. Il faut savoir vivre dangereusement parfois...&lt;/p&gt;
&lt;p&gt;Conclusion? Pas brillantes du tout. En résumé pour des tailles de tableau allant de 3 à 10 on obtient ceci (valeurs exprimées en nombre de permutations avant achèvement):&lt;/p&gt;
&lt;table border="1"&gt;
    &lt;thead&gt;
        &lt;th&gt;Longueur&lt;/th&gt;&lt;th&gt;Minimum&lt;/th&gt;&lt;th&gt;Maximum&lt;/th&gt;&lt;th&gt;Moyenne&lt;/th&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
        &lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;30&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;105&lt;/td&gt;&lt;td&gt;22&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;659&lt;/td&gt;&lt;td&gt;117&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;3779&lt;/td&gt;&lt;td&gt;917&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;81&lt;/td&gt;&lt;td&gt;23892&lt;/td&gt;&lt;td&gt;5096&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;330&lt;/td&gt;&lt;td&gt;199540&lt;/td&gt;&lt;td&gt;38792&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;11321&lt;/td&gt;&lt;td&gt;1791937&lt;/td&gt;&lt;td&gt;339068&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;21080&lt;/td&gt;&lt;td&gt;17668142&lt;/td&gt;&lt;td&gt;4145666&lt;/td&gt;&lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Magnifiquement inefficace, n&amp;#39;est-ce pas?&lt;/p&gt;
</description>
		<pubDate>Sun, 13 Dec 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/12/13/pataprogrammation_le_tri_a_gobelets.html</guid>
	</item>
	<item>
		<title>Première tentative de jardinage miniature, une semaine après</title>
		<link>https://blog.jkbockstael.be/posts/2009/11/23/premiere_tentative_de_jardinage_miniature_une_semaine_apres.html</link>
		<description>&lt;h1 id="première-tentative-de-jardinage-miniature-une-semaine-après"&gt;Première tentative de jardinage miniature, une semaine après&lt;/h1&gt;
&lt;p&gt;Dimanche dernier &lt;a href="http://blog.jkbockstael.be/posts/2009/11/16/premiere_tentative_de_jardinage_miniature.html" title="Première tentative de jardinage miniature"&gt;j&amp;#39;avais succombé&lt;/a&gt; à l&amp;#39;envie subite de reproduire une idée glanée au cours d&amp;#39;une séance de glandage-surfage. C&amp;#39;est une première tentative, je ne sais absolument pas où je vais, d&amp;#39;autant plus que les plantes transplantées ont changé de conditions de lumière, de température, d&amp;#39;humidité...&lt;/p&gt;
&lt;p&gt;Finalement je pense ne pas m&amp;#39;en tirer trop mal pour un début. Les brins d&amp;#39;herbe ont un peu poussé, mais aussi un peu jauni. Je soupçonne un léger manque de lumière, l&amp;#39;éclairage a été adapté en fonction. L&amp;#39;éclairage du bureau sur lequel repose ce mini-jardin risque fort de changer dans un plus ou moins court terme, mais de toute façon on reste en intérieur donc si une plante ou l&amp;#39;autre ne sait pas se contenter de la lumière disponible il me restera juste à en trouver une de remplacement.&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2009/11/23/premiere_tentative_de_jardinage_miniature_une_semaine_apres_attachments/20091123_minimossgarden.jpg" title="Jardin miniature - haute résolution"&gt;&lt;img src="//blog.jkbockstael.be/posts/2009/11/23/premiere_tentative_de_jardinage_miniature_une_semaine_apres_attachments/20091123_minimossgarden_thumb.jpg" alt="Jardin miniature" title="Jardin miniature - miniature"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Jusqu&amp;#39;ici, ça va plutôt bien. Nous verrons bien la suite.&lt;/p&gt;
</description>
		<pubDate>Mon, 23 Nov 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/11/23/premiere_tentative_de_jardinage_miniature_une_semaine_apres.html</guid>
	</item>
	<item>
		<title>Première tentative de jardinage miniature</title>
		<link>https://blog.jkbockstael.be/posts/2009/11/16/premiere_tentative_de_jardinage_miniature.html</link>
		<description>&lt;h1 id="première-tentative-de-jardinage-miniature"&gt;Première tentative de jardinage miniature&lt;/h1&gt;
&lt;p&gt;Je suis tombé tout à l&amp;#39;heure sur &lt;a href="http://lifehacker.com/5404522/make-a-moss-terrarium-for-low+maintenance-greenery" title="Lifehacker - Make a Moss Terrarium for Low-Maintenance Greenery"&gt;un post assez intéressant du blog Lifehacker&lt;/a&gt; à propos de la robustesse de la mousse et de ce fait son adaptation à des mini-jardins d&amp;#39;intérieur. L&amp;#39;idée est que la mousse nécessite pas ou peu de terre, et aucune forme de soin au-delà de l&amp;#39;arrosage. Ça faisait un bout de temps que je voulais mettre de la verdure sur mon bureau, donc allons-y!&lt;/p&gt;
&lt;p&gt;Petite expédition pour obtenir de la matière première, laquelle n&amp;#39;a pas été particulièrement pénible; ça aide d&amp;#39;avoir un grand jardin deux étages plus bas. Me voilà donc avec un peu de mousse décrochée du sol, que j&amp;#39;ai retirée en découpant autour d&amp;#39;elle et en glissant une spatule dessous pour la soulever sans l&amp;#39;arracher. La terre supplémentaire était sous la mousse prélevée, ainsi je suis sûr qu&amp;#39;elle est appropriée. Les cailloux sont du gravier qui servait à mettre un couche de drainage dans le fond des pots de fleur. Réutilisons!&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2009/11/16/premiere_tentative_de_jardinage_miniature_attachments/20091116_minimossgarden_0.jpg" title="Jardin miniature - etape 0 - haute résolution"&gt;&lt;img src="//blog.jkbockstael.be/posts/2009/11/16/premiere_tentative_de_jardinage_miniature_attachments/20091116_minimossgarden_0_thumb.jpg" alt="Jardin miniature - etape 0 - miniature"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Le conteneur quant à lui est un verre d&amp;#39;une certaine variété d&amp;#39;une certaine marque de gueuse, certainement subtilisé lors d&amp;#39;une bacchusienne expédition entre amis, qu&amp;#39;importe. Les audacieux font ce genre de jardin miniature dans le fond d&amp;#39;une bouteille de vin... heu... un autre jour! Je le remplis de terre jusqu&amp;#39;à atteindre presque l&amp;#39;endroit le plus large du ballon, ça me donnera de la marge de manœuvre.&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2009/11/16/premiere_tentative_de_jardinage_miniature_attachments/20091116_minimossgarden_1.jpg" title="Jardin miniature - etape 1 - haute résolution"&gt;&lt;img src="//blog.jkbockstael.be/posts/2009/11/16/premiere_tentative_de_jardinage_miniature_attachments/20091116_minimossgarden_1_thumb.jpg" alt="Jardin miniature - etape 1 - miniature"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;J&amp;#39;y place les plus beaux morceaux, découpés au couteau, les pierres prennent place pour former un arrière-plan sympathique. Il faudra certainement un peu de temps avant que la croissance de la mousse ne remplisse les interstices, mais je sais être patient :)&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2009/11/16/premiere_tentative_de_jardinage_miniature_attachments/20091116_minimossgarden_2.jpg" title="Jardin miniature - etape 2 - haute résolution"&gt;&lt;img src="//blog.jkbockstael.be/posts/2009/11/16/premiere_tentative_de_jardinage_miniature_attachments/20091116_minimossgarden_2_thumb.jpg" alt="Jardin miniature - etape 2 - miniature"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Le surplus a trouvé sa place dans un autre pot de format différent. Les gourmands attentifs auront reconnu qu&amp;#39;il a contenu dans une autre vie une délicieuse crème brûlée.&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2009/11/16/premiere_tentative_de_jardinage_miniature_attachments/20091116_minimossgarden_3.jpg" title="Jardin miniature - etape 3 - haute résolution"&gt;&lt;img src="//blog.jkbockstael.be/posts/2009/11/16/premiere_tentative_de_jardinage_miniature_attachments/20091116_minimossgarden_3_thumb.jpg" alt="Jardin miniature - etape 3 - miniature"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Voilà, reste à voir comment le temps fera son office, et si l&amp;#39;expérience s&amp;#39;avère concluante je pourrai semer de la verdure miniature un peu partout.&lt;/p&gt;
</description>
		<pubDate>Mon, 16 Nov 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/11/16/premiere_tentative_de_jardinage_miniature.html</guid>
	</item>
	<item>
		<title>Un peu de mathématiques d'amateur qui ne se prend pas au sérieux...</title>
		<link>https://blog.jkbockstael.be/posts/2009/11/01/nombres_outrants.html</link>
		<description>&lt;h1 id="un-peu-de-mathématiques-damateur-qui-ne-se-prend-pas-au-sérieux"&gt;Un peu de mathématiques d&amp;#39;amateur qui ne se prend pas au sérieux...&lt;/h1&gt;
&lt;p&gt;Un illustre collègue adepte de l&amp;#39;adjectif &amp;quot;outrant&amp;quot; et moi-même avons décidé que la somme d&amp;#39;un entier et de son carré serait un nombre &amp;quot;outrant&amp;quot;, ce qu&amp;quot;on peut presque-formaliser:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;n + n^2 , où n est un entier positif
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Qu&amp;#39;on peut exprimer comme le produit de deux entier consécutifs:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;n(n + 1)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Les premiers nombres outrants sont 0, 2, 6, 12, 20, 30, 42, 56, 72, 90, 110, 132, 156, 182, 210, 240, 272, 306, 342, 380, 420, 462, 506, 552, 600, 650...&lt;/p&gt;
&lt;p&gt;On appelle &amp;quot;puissance outrante&amp;quot; le nombre outrant de base &lt;code&gt;n&lt;/code&gt;, 5 à la puissance outrante vaut 30. On note la puissance outrante par un exposant &lt;code&gt;O&lt;/code&gt; (la lettre, pas le chiffre), comme dans &lt;code&gt;11^O = 132&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;En fait en cherchant un peu, ces braves petiots n&amp;#39;ont aucune propriété amusante, si ce n&amp;#39;est que 42 en fait partie (puisque c&amp;#39;est 6 à la puissance outrante), ce qui est un fait qui a été accueilli avec beaucoup de joie puisque l&amp;#39;outrant compagnon de mathématiques du dimanche est presque aussi fan de l&amp;#39;humour d&amp;#39;H2G2 que moi-même. 42 est un nombre outrant, et ça c&amp;#39;est vraiment outrant!&lt;/p&gt;
&lt;p&gt;L&amp;#39;avantage est aussi qu&amp;#39;un nombre outrant n&amp;#39;est pas fonction des précédents, ce qui facilite la tâche quand pour l&amp;#39;une ou l&amp;#39;autre outrante raison on a besoin de nombres outrants quelconques éventuellement très grands. De la même manière, si on veut obtenir le plus petit nombre outrant qui soit supérieur à un nombre donné, il suffit d&amp;#39;élever sa racine à la puissance outrante. Pratique.&lt;/p&gt;
&lt;p&gt;Allez, plus sérieusement, le produit de deux entiers consécutifs a été déjà baptisé et ausculté. On appelle ces nombres les &amp;quot;nombres oblongs&amp;quot;, &amp;quot;nombres proniques&amp;quot;, ou encore &amp;quot;nombre hétéroméciques&amp;quot;. Pourquoi oblong? Parce qu&amp;#39;exprimés figurativement ça donne quelque chose comme ceci:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;**

***
***

****
****
****

*****
*****
*****
*****
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Un certain John Conway en a parlé en long et en large, d&amp;#39;ailleurs. Oui, le même John Conway que le jeu de la vie.&lt;/p&gt;
&lt;p&gt;Je sais, ça ne sert à rien, c&amp;#39;est d&amp;#39;ailleurs pour ça que c&amp;#39;est indispensable.&lt;/p&gt;
</description>
		<pubDate>Sun, 01 Nov 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/11/01/nombres_outrants.html</guid>
	</item>
	<item>
		<title>Deux ans de statistiques LastFM</title>
		<link>https://blog.jkbockstael.be/posts/2009/08/29/deux_ans_de_lastfm.html</link>
		<description>&lt;h1 id="deux-ans-de-statistiques-lastfm"&gt;Deux ans de statistiques LastFM&lt;/h1&gt;
&lt;p&gt;Ah tiens, ça fait deux ans aujourd&amp;#39;hui. Deux ans que je suis inscrit à LastFM et que son brave petit scrobbler collecte avec patience et méthode mes habitudes musicales. Enfin presque, il manquait jusqu&amp;#39;il y a peu tout ce que j&amp;#39;écoute sur mon iPod, puisque le scrobbling d&amp;#39;iPod n&amp;#39;était pas exactement au point.&lt;/p&gt;
&lt;p&gt;Bref...&lt;/p&gt;
&lt;p&gt;Pour ceux qui ne connaissent pas encore LastFM, le principe est plutôt simple. Les utilisateurs laissent un logiciel/plug-in collecter des données statistiques sur les morceaux de musique qu&amp;#39;ils écoutent et envoient tout ça sur le site pour se constituer un profil de mélomane. Sur base de ce profil et de folksonomie, le système établit des corrélations de style entre différents artistes; au final ça lui permêt de conseiller à l&amp;#39;utilisateur des découvertes musicales qui devraient lui plaire (et croyez-moi c&amp;#39;est la partie impressionnante, ils se trompent rarement) et lui présenter d&amp;#39;autres utilisateurs aux goûts similaires.&lt;/p&gt;
&lt;p&gt;Evidemment, plus on écoute, plus les statistiques sont parlantes, et plus les déductions sont fiables. Avant 500 titres écoutés le système n&amp;#39;essaie même pas de proposer quoi que ce soit, d&amp;#39;ailleurs. Par contre quand on dépasse les 10000 titres il devient d&amp;#39;un précision presque effrayante.&lt;/p&gt;
&lt;p&gt;Je me suis inscrit à LastFM le 28 août 2007. Depuis cette date j&amp;#39;ai écouté 37058 titres de 1196 artistes différents et s&amp;#39;il fallait résumer mes goûts à quelques étiquettes elles seraient &amp;quot;industrial, electronic, rock, metal et ebm&amp;quot;, amusant pour quelqu&amp;#39;un qu&amp;#39;on appelle &amp;quot;le métalleux&amp;quot; quand même ;). Pas si simplement métalleux que ça finalement, l&amp;#39;homme en noir.&lt;/p&gt;
&lt;p&gt;D&amp;#39;ailleurs quand on classe les artistes par nombre d&amp;#39;écoutes ça devient encore plus amusant. En partant du plus écouté ça donne:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Amon Tobin - 819 écoutes&lt;/li&gt;
&lt;li&gt;Nine Inch Nails - 808 écoutes&lt;/li&gt;
&lt;li&gt;Metallica - 736 écoutes&lt;/li&gt;
&lt;li&gt;Combichrist - 547 écoutes&lt;/li&gt;
&lt;li&gt;The Chemical Brothers - 544 écoutes&lt;/li&gt;
&lt;li&gt;Johnny Cash - 529 écoutes&lt;/li&gt;
&lt;li&gt;Suzanne Vega - 510 écoutes&lt;/li&gt;
&lt;li&gt;Punish Yourself - 483 écoutes&lt;/li&gt;
&lt;li&gt;Caliban - 464 écoutes&lt;/li&gt;
&lt;li&gt;System of a Down - 432 écoutes&lt;/li&gt;
&lt;li&gt;Lofofora - 412 écoutes&lt;/li&gt;
&lt;li&gt;Converge - 382 écoutes&lt;/li&gt;
&lt;li&gt;Heaven Shall Burn - 378 écoutes&lt;/li&gt;
&lt;li&gt;Tori Amos - 365 écoutes&lt;/li&gt;
&lt;li&gt;65daysofstatic - 354 écoutes&lt;/li&gt;
&lt;li&gt;Walls of Jericho - 344 écoutes&lt;/li&gt;
&lt;li&gt;Slipknot - 316 écoutes&lt;/li&gt;
&lt;li&gt;Baroness - 297 écoutes&lt;/li&gt;
&lt;li&gt;Alchemik Babylon Beats - 285 écoutes&lt;/li&gt;
&lt;li&gt;The Cinematic Orchestra - 284 écoutes&lt;/li&gt;
&lt;li&gt;Ultra Vomit - 269 écoutes&lt;/li&gt;
&lt;li&gt;Depeche Mode - 267 écoutes&lt;/li&gt;
&lt;li&gt;As I Lay Dying - 264 écoutes&lt;/li&gt;
&lt;li&gt;The Faint - 257 écoutes&lt;/li&gt;
&lt;li&gt;VNV Nation - 255 écoutes&lt;/li&gt;
&lt;li&gt;Creedence Clearwater Revival - 245 écoutes&lt;/li&gt;
&lt;li&gt;Cat Power - 243 écoutes&lt;/li&gt;
&lt;li&gt;The Cure - 242 écoutes&lt;/li&gt;
&lt;li&gt;Tom Waits - 230 écoutes&lt;/li&gt;
&lt;li&gt;Aerosmith - 224 écoutes&lt;/li&gt;
&lt;li&gt;IAMX - 214 écoutes&lt;/li&gt;
&lt;li&gt;Autechre - 211 écoutes&lt;/li&gt;
&lt;li&gt;Korn - 210 écoutes&lt;/li&gt;
&lt;li&gt;Tamtrum - 207 écoutes&lt;/li&gt;
&lt;li&gt;The Dillinger Escape Plan - 202 écoutes&lt;/li&gt;
&lt;li&gt;Peter Pan Speedrock - 201 écoutes&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Soyons arbitraires et disons qu&amp;#39;au-délà ce n&amp;#39;est plus forcément représentatit, mais on y croise entre autres Renan Luce, Kings of Convenience, Motörhead, Spiritual Beggars, Björk, Nick Cave, Portishead, Leonard Cohen, Crass, Oi Polloi, Jeff Buckley, P!nk, Neil Young, Birdy Nam Nam, Popa Chubby, Mark Knopfler, Einstürzende Neubauten, Elle Fitzgerald, Zenzile et Anthrax ... j&amp;#39;ose m&amp;#39;autoriser à dire que j&amp;#39;ai des goûts variés ;)&lt;/p&gt;
&lt;p&gt;Allez, je ferai un état des lieux dans un an alors. En attendant les très curieux peuvent aller par ici.&lt;/p&gt;
&lt;p&gt;Music!&lt;/p&gt;
</description>
		<pubDate>Sat, 29 Aug 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/08/29/deux_ans_de_lastfm.html</guid>
	</item>
	<item>
		<title>Réparation d'un jack de guitare</title>
		<link>https://blog.jkbockstael.be/posts/2009/08/24/reparation_jack_guitare.html</link>
		<description>&lt;h1 id="réparation-dun-jack-de-guitare"&gt;Réparation d&amp;#39;un jack de guitare&lt;/h1&gt;
&lt;p&gt;J&amp;#39;avais il y a quelques temps racheté du matériel (ampli, V-Amp, câbles) à un ami généreux qui préférait confier tout ça à mes mains débutantes plutôt que de le laisser prendre la poussière. Remy, si tu me lis, grand merci à toi ;-) Mais bon, dans le tout il y avait un câble jack qui souffrait de quelques petits faux contacts qui étaient assez désagréables (si vous n&amp;#39;avez pas encore entendu le son d&amp;#39;un contact qui se refait, amplifié... ça vaut le détour). Donc une intervention était de mise.&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2009/08/24/reparation_jack_guitare_attachments/20090813-diy-00.jpg" title="Réparation - étape 0 - haute résolution"&gt;&lt;img src="//blog.jkbockstael.be/posts/2009/08/24/reparation_jack_guitare_attachments/20090813-diy-00_thumb.jpg" alt="Réparation - étape 0 - miniature"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;C&amp;#39;est le genre d&amp;#39;intervention qui peut faire peur quand on ne sait pas par où chercher, et qui est souvent facturé scandaleusement cher en magasin de musique. En fait le cas extrêmement fréquent c&amp;#39;est qu&amp;#39;à forcé de manipuler le câble sans délicatesse le fil s&amp;#39;arrache du jack. Vérification faite, d&amp;#39;un côté tout va pour le mieux dans le meilleur des mondes:&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2009/08/24/reparation_jack_guitare_attachments/20090813-diy-01.jpg" title="Réparation - étape 1 - haute résolution"&gt;&lt;img src="//blog.jkbockstael.be/posts/2009/08/24/reparation_jack_guitare_attachments/20090813-diy-01_thumb.jpg" alt="Réparation - étape 1 - miniature"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;... mais de l&amp;#39;autre les soupçons sont confirmés (et le petit isolant supplémentaire me laisse supposer qu&amp;#39;il n&amp;#39;en est pas à sa première réparation):&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2009/08/24/reparation_jack_guitare_attachments/20090813-diy-02.jpg" title="Réparation - étape 2 - haute résolution"&gt;&lt;img src="//blog.jkbockstael.be/posts/2009/08/24/reparation_jack_guitare_attachments/20090813-diy-02_thumb.jpg" alt="Réparation - étape 2 - miniature"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Allons-y alors, d&amp;#39;abord dénuder un peu du câble, pour pouvoir dénuder un peu du fil allant à la pointe et ainsi en avoir assez à nu pour le ressouder:&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2009/08/24/reparation_jack_guitare_attachments/20090813-diy-03.jpg" title="Réparation - étape 3 - haute résolution"&gt;&lt;img src="//blog.jkbockstael.be/posts/2009/08/24/reparation_jack_guitare_attachments/20090813-diy-03_thumb.jpg" alt="Réparation - étape 3 - miniature"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ce faisant je remarque que l&amp;#39;isolant a cassé, un point de colle salvateur remettra le morceau tombé (qu&amp;#39;on voit à l&amp;#39;arrière-plan près de la pince):&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2009/08/24/reparation_jack_guitare_attachments/20090813-diy-04.jpg" title="Réparation - étape 4 - haute résolution"&gt;&lt;img src="//blog.jkbockstael.be/posts/2009/08/24/reparation_jack_guitare_attachments/20090813-diy-04_thumb.jpg" alt="Réparation - étape 4 - miniature"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Paré à retirer l&amp;#39;ancienne soudure (oui madame, à la pompe, oui je suis un bourrin):&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2009/08/24/reparation_jack_guitare_attachments/20090813-diy-05.jpg" title="Réparation - étape 5 - haute résolution"&gt;&lt;img src="//blog.jkbockstael.be/posts/2009/08/24/reparation_jack_guitare_attachments/20090813-diy-05_thumb.jpg" alt="Réparation - étape 5 - miniature"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;C&amp;#39;est-y-pas propre ça madame?&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2009/08/24/reparation_jack_guitare_attachments/20090813-diy-06.jpg" title="Réparation - étape 6 - haute résolution"&gt;&lt;img src="//blog.jkbockstael.be/posts/2009/08/24/reparation_jack_guitare_attachments/20090813-diy-06_thumb.jpg" alt="Réparation - étape 6 - miniature"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Le fil entré dans son petit trou, prêt à être ressoudé:&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2009/08/24/reparation_jack_guitare_attachments/20090813-diy-07.jpg" title="Réparation - étape 7 - haute résolution"&gt;&lt;img src="//blog.jkbockstael.be/posts/2009/08/24/reparation_jack_guitare_attachments/20090813-diy-07_thumb.jpg" alt="Réparation - étape 7 - miniature"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;... et soudé:&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2009/08/24/reparation_jack_guitare_attachments/20090813-diy-08.jpg" title="Réparation - étape 8 - haute résolution"&gt;&lt;img src="//blog.jkbockstael.be/posts/2009/08/24/reparation_jack_guitare_attachments/20090813-diy-08_thumb.jpg" alt="Réparation - étape 8 - miniature"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;On referme le tout, oui il y a un sens bande de brutes:&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2009/08/24/reparation_jack_guitare_attachments/20090813-diy-09.jpg" title="Réparation - étape 9 - haute résolution"&gt;&lt;img src="//blog.jkbockstael.be/posts/2009/08/24/reparation_jack_guitare_attachments/20090813-diy-09_thumb.jpg" alt="Réparation - étape 9 - miniature"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Et voilà, ready to rock!&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2009/08/24/reparation_jack_guitare_attachments/20090813-diy-10.jpg" title="Réparation - étape 10 - haute résolution"&gt;&lt;img src="//blog.jkbockstael.be/posts/2009/08/24/reparation_jack_guitare_attachments/20090813-diy-10_thumb.jpg" alt="Réparation - étape 10 - miniature"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;L&amp;#39;opération aura duré quelque chose comme un quart d&amp;#39;heure sans se presser. Et avec ça j&amp;#39;ai cinq mètres de liberté au lieu de deux. Ça valait la peine donc ;-)&lt;/p&gt;
</description>
		<pubDate>Mon, 24 Aug 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/08/24/reparation_jack_guitare.html</guid>
	</item>
	<item>
		<title>Project Euler : solution au problème 24, en Python</title>
		<link>https://blog.jkbockstael.be/posts/2009/07/03/project_euler_24_python.html</link>
		<description>&lt;h1 id="project-euler-solution-au-problème-24-en-python"&gt;Project Euler: solution au problème 24, en Python&lt;/h1&gt;
&lt;p&gt;On commence les deux mois d&amp;#39;été par le suivant des problèmes eulériens, à savoir le Problème 24. Sachant ce qu&amp;#39;est une permutation, on précise qu&amp;#39;on veut obtenir les permutations d&amp;#39;une suite de nombres dans l&amp;#39;ordre lexicographique (ce qui revient à la relation d&amp;#39;ordre du plus petit au plus grand), et on demande quelle est la 1000000ème permutation de la liste 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.&lt;/p&gt;
&lt;p&gt;L&amp;#39;algorithme est plutôt évident, et j&amp;#39;utilise ici le copain &lt;code&gt;yield&lt;/code&gt; qui me permet d&amp;#39;avoir un générateur itérable plutôt de devoir générer toutes les permutations avant d&amp;#39;en prendre la millionnième.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#! /usr/bin/python

# 2009/07/03 - euler024.py
# Solution au Probleme 24 de Project Euler
# http://projecteuler.net/index.php?section=problems&amp;amp;id=24
# Jean Karim Bockstael - jkb@jkbockstael.be


def permutations_gen(string):
    if (len(string) == 1):
        yield string
    else:
        for i in range(len(string)):
            for subperm in permutations_gen(string[:i] + string[i+1:]):
                yield string[i] + subperm

def euler24(string, num):
    cnt = 0
    for perm in permutations_gen(string):
        cnt += 1
        if cnt == num:
            return perm

print euler24(&amp;quot;0123456789&amp;quot;, 1000000)
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Fri, 03 Jul 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/07/03/project_euler_24_python.html</guid>
	</item>
	<item>
		<title>Project Euler : solution au problème 28, en Python</title>
		<link>https://blog.jkbockstael.be/posts/2009/06/26/project_euler_26_python.html</link>
		<description>&lt;h1 id="project-euler-solution-au-problème-28-en-python"&gt;Project Euler: solution au problème 28, en Python&lt;/h1&gt;
&lt;p&gt;Ça faisait longtemps que je n&amp;#39;avais pas gratifié mon blog d&amp;#39;un des si particulièrement passionnants problèmes de Project Euler. Il était grand temps d&amp;#39;y remédier, donc voici une solution au problème 28.&lt;/p&gt;
&lt;p&gt;L&amp;#39;idée est de remplir une grille carrée de nombres, de dimension impaire, qui est remplie des entiers successifs en spirale partant du centre et allant vers la droite et le bas. Aga? En gros, ayant ce genre de chose:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;21 22 23 24 25
20  7  8  9 10
19  6  1  2 11
18  5  4  3 12
17 16 15 14 13
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;La somme des éléments de deux diagonales de ce carré de dimension 5 vaut 101. Que vaut la somme pour un carré de dimension 1001?&lt;/p&gt;
&lt;p&gt;Je vous avais présenté mon pote Récursion?&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#! / usr/bin/python

# 2009/06/26 - euler028.py
# Solution au Probleme 28 de Project Euler
# http://projecteuler.net/index.php?section=problems&amp;amp;id=28
# Jean Karim Bockstael - jkb@jkbockstael.be

def sum_of_diagonals(dimension):
    if (dimension == 1):
        return 1
    else:
        corner_tr = dimension ** 2
        corner_tl = corner_tr - dimension + 1
        corner_bl = corner_tl - dimension + 1
        corner_br = corner_bl - dimension + 1
        corner_sum = corner_tr + corner_tl + corner_bl + corner_br
        return corner_sum + sum_of_diagonals(dimension - 2)

print sum_of_diagonals(1001)
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Fri, 26 Jun 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/06/26/project_euler_26_python.html</guid>
	</item>
	<item>
		<title>Codechef : Petit déjeuner de l'autre côté du miroir</title>
		<link>https://blog.jkbockstael.be/posts/2009/06/24/codechef_mirror.html</link>
		<description>&lt;h1 id="codechef--petit-déjeuner-de-lautre-côté-du-miroir"&gt;Codechef : Petit déjeuner de l&amp;#39;autre côté du miroir&lt;/h1&gt;
&lt;p&gt;&lt;a href="http://codechef.com/" title="CodeChef"&gt;The Codechef&lt;/a&gt;, le concours de programmation organisé par Directi, propose depuis peu deux problèmes par jour [via Twitter](&lt;a href="http://twitter.com/codechef"&gt;http://twitter.com/codechef&lt;/a&gt; &amp;quot;Twitter @codechef). Ce matin, le problème est de compter le nombre d&amp;#39;entiers inférieurs à 1000 qui, quand on les ajoute à leur image miroir, forment un entier qui n&amp;#39;est composé que de chiffres impairs.&lt;/p&gt;
&lt;p&gt;Exemple simple:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;...
20 + 02 = 22 NON
21 + 12 = 33 OUI
22 + 22 = 44 NON
...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Et comme d&amp;#39;habitude, j&amp;#39;ai sorti l&amp;#39;ami Python, celui qui nous veut du bien.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#! /usr/bin/python
# Codechef Twitter Daily 2009/06/24
# How many numbers below 1000 which when added with their respective mirror 
# images result in a number with entirely odd digits?
# 2009/06/24 - Jean Karim Bockstael - jkb@jkbockstael.be


def reverse_number(num):
    return int(str(num)[::-1])

def is_all_odds(num):
    for digit in str(num):
        if (int(digit) % 2 == 0):
            return False
    return True

def count_mirrors(max):
    n_mirrors = 0
    for num in range(1, max):
        if is_all_odds(num + reverse_number(num)):
           n_mirrors += 1
    return n_mirrors

print count_mirrors(1000)
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Wed, 24 Jun 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/06/24/codechef_mirror.html</guid>
	</item>
	<item>
		<title>Tiens j'avais oublié ça...</title>
		<link>https://blog.jkbockstael.be/posts/2009/06/16/diy_bureau.html</link>
		<description>&lt;h1 id="tiens-javais-oublié-ça"&gt;Tiens j&amp;#39;avais oublié ça...&lt;/h1&gt;
&lt;p&gt;Il est un fait établi qu&amp;#39;il m&amp;#39;arrive souvent de perdre de vue quelque chose tant mes occupations et projets sont nombreux et variés. Il est également un fait établi qu&amp;#39;il m&amp;#39;arrive dans ma distraction d&amp;#39;effectuer du nettoyage par le vide et de le regretter après, bien que ça ne porte pas à conséquences (sinon il y aurait une copie de sauvegarde, c&amp;#39;est évident).&lt;/p&gt;
&lt;p&gt;Ainsi, dans mon tout premier post sur le présent blog, je donnais un petit teaser d&amp;#39;un projet personnel qui approchait de la fin et que je m&amp;#39;apprêtais à vous dévoiler. J&amp;#39;avais juste montré ceci:&lt;/p&gt;
&lt;p&gt;&lt;img src="//blog.jkbockstael.be/posts/2009/06/16/diy_bureau_attachments/20081020-teaser.jpg" alt="Teaser"&gt;&lt;/p&gt;
&lt;p&gt;Et, comme un distrait que je suis, non content d&amp;#39;avoir oublié de donner suite à cette promesse je me suis permis d&amp;#39;éradiquer par un bon vieux rm des familles le répertoire où je conservais les photos des différentes étapes de la réalisation dudit projet, qui s&amp;#39;étalait sur quelques mois de temps libre trop sporadique.&lt;/p&gt;
&lt;p&gt;Bon tant pis, vous n&amp;#39;aurez droit qu&amp;#39;au produit fini alors:&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2009/06/16/diy_bureau_attachments/20090616_tablefinie.jpg" title="Finie - haute résolution"&gt;&lt;img src="//blog.jkbockstael.be/posts/2009/06/16/diy_bureau_attachments/20090616_tablefinie_thumb.jpg" alt="Finie - miniature"&gt;&lt;/a&gt;&lt;/p&gt;
</description>
		<pubDate>Tue, 16 Jun 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/06/16/diy_bureau.html</guid>
	</item>
	<item>
		<title>Mastermind, a little more refined...</title>
		<link>https://blog.jkbockstael.be/posts/2009/05/28/mastermind_refined.html</link>
		<description>&lt;h1 id="mastermind-a-little-more-refined"&gt;Mastermind, a little more refined...&lt;/h1&gt;
&lt;p&gt;J&amp;#39;avais posté ici &lt;a href="http://blog.jkbockstael.be/posts/2009/01/08/mastermind_quick_and_dirty.html"&gt;un petit jeu de Mastermind&lt;/a&gt;, un furieux premier jet né d&amp;#39;un film trop peu intéressant à la TV et d&amp;#39;une envie de coder &amp;quot;quelque chose&amp;quot;. D&amp;#39;une manière ou d&amp;#39;une autre ça valait la peine de faire quelque chose d&amp;#39;un peu plus peaufiné un jour.&lt;/p&gt;
&lt;p&gt;Voici qui est un peu mieux. Toujours une interface textuelle sans fioritures, mais le jeu est paramétrable (voir le menu options) et offre le mode de jeu classique et le mode de jeu facile qu&amp;#39;implémentait ma version &amp;quot;quick and dirty&amp;quot;.&lt;/p&gt;
&lt;p&gt;Au niveau du code c&amp;#39;est du plus propre sans pour autant être de l&amp;#39;objet-pour-faire-de-l&amp;#39;objet. Hack away, have fun!&lt;/p&gt;
&lt;p&gt;Ah oui, pour que ce soit un peu plus lisible il n&amp;#39;y a pas de contrôle aux entrées clavier. Si on tape n&amp;#39;importe quoi ça plante de façon insultante, soyez prévenu :)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#! /usr/bin/env python

# Game of Mastermind, with some niceties
# Jean Karim Bockstael - jkb@jkbockstael.be


# Import
from random import randint

# Gameplay constants
CODE_LENGTH = 4   # Length of the code (1-16)
CODE_COLORS = 10  # Number of different colors in the code (2-10)
MAX_GUESSES = 5   # Max number of guesses to find the correct code (1-50)
SHOW_MENU = True  # Show main menu before playing a first game
EASY_MODE = True  # Braindead mode

# String constants
STR_GUESS_PROMPT = &amp;#39;Guess&amp;#39;
STR_WHITE_PEG = &amp;#39;o&amp;#39;
STR_BLACK_PEG = &amp;#39;x&amp;#39;
STR_EMPTY_PEG = &amp;#39;_&amp;#39;
STR_OUTCOME_WIN = &amp;#39;Won!&amp;#39;
STR_OUTCOME_LOSS = &amp;#39;Lost!&amp;#39;
STR_OUTCOME_REVEAL = &amp;#39;The secret code was: &amp;#39;
STR_HELP = &amp;quot;&amp;quot;&amp;quot;
{codelength} digits long code, each between 0 and {codecolors} included, you have a maximum of {maxguesses} guesses to find it.
    {whitepeg} : right digit, right position
    {blackpeg} : right digit, wrong position
    {emptypeg} : wrong digit
&amp;quot;&amp;quot;&amp;quot;
STR_OPT_CODELENGTH = &amp;#39;Number of digits in code (min 1 max 16): &amp;#39;
STR_OPT_CODECOLORS = &amp;#39;Number of possible digits in code (min 2 max 10): &amp;#39;
STR_OPT_MAXGUESSES = &amp;#39;Maximum number of guesses before giving up (min 1 max 50): &amp;#39;
STR_OPT_SHOWMENU = &amp;#39;Show main menu on program startup? (False/True): &amp;#39;
STR_OPT_EASYMODE = &amp;#39;Play in easy mode? (False/True): &amp;#39;
STR_MENU_MAIN  = &amp;quot;&amp;quot;&amp;quot;
----------------
-- Mastermind --
----------------
   A)bout
   O)ptions
   P)lay
   Q)uit
&amp;quot;&amp;quot;&amp;quot;
STR_MENU_MAINPROMPT = &amp;quot;Choice: &amp;quot;
STR_MENU_OPTIONS	 = &amp;quot;&amp;quot;&amp;quot;
------------------
-- Game Options --
------------------
&amp;quot;&amp;quot;&amp;quot;
STR_ABOUT = &amp;quot;&amp;quot;&amp;quot;
----------------------
-- About Mastermind --

A simple and time-honored game, brought to your console using Python.

2009 - Jean Karim Bockstael - jkb@virus1984.com
&amp;quot;&amp;quot;&amp;quot;


# And now, let the fun begin!
# (__)
# ( @@
# /\_| MOOH!


# Create a code of set length and number of colors, as a list of ints
def set_secret_code():
    tmp_code = []
    for i in range(0, CODE_LENGTH):
        tmp_code.append(randint(0, CODE_COLORS - 1))
    return tmp_code


# Read a code from the user
def get_guess_code():
    tmp_guess = []
    padding_spaces = &amp;#39;&amp;#39;
    if (len(STR_GUESS_PROMPT) &amp;lt; CODE_LENGTH):
        padding_spaces = &amp;quot; &amp;quot; * (CODE_LENGTH - len(STR_GUESS_PROMPT))
    guess_prompt = STR_GUESS_PROMPT + padding_spaces + &amp;quot; : &amp;quot;
    str_guess = raw_input(guess_prompt)
    for i in range(0, CODE_LENGTH):
        tmp_guess.append(int(str_guess[i]))
    return tmp_guess


# Print a help message
def print_help():
    print STR_HELP.format(codelength=CODE_LENGTH, codecolors=(CODE_COLORS-1), \
      maxguesses=MAX_GUESSES, whitepeg=STR_WHITE_PEG, blackpeg=STR_BLACK_PEG, \
      emptypeg=STR_EMPTY_PEG)
    

# Returns a code formatted for printing
def format_code(code):
    formatted_code = &amp;#39;&amp;#39;
    for i in range(0, CODE_LENGTH):
        formatted_code += str(code[i])
    return formatted_code


# Print a hint based on the player&amp;#39;s guess
def print_hint(secret_code, guess_code):
    hint = &amp;#39;&amp;#39;
    if (EASY_MODE):
        for i in range(0, CODE_LENGTH):
            if (guess_code[i] == secret_code[i]):
                hint += STR_WHITE_PEG
            elif (guess_code[i] in secret_code):
                hint += STR_BLACK_PEG
            else:
                hint += STR_EMPTY_PEG
    else: # Badass mode
        white_pegs = 0
        black_pegs = 0
        dupes = [False] * CODE_LENGTH
        for i in range(0, CODE_LENGTH):
            if (guess_code[i] == secret_code[i]):
                white_pegs += 1
                dupes[i] = True
            else:
                for j in range(0, CODE_LENGTH):
                    if (secret_code[j] == guess_code[i] and not dupes[j]):
                        black_pegs += 1
        if (white_pegs != 0):
            hint += str(white_pegs) + &amp;#39; &amp;#39; + STR_WHITE_PEG + &amp;#39; &amp;#39;
        if (black_pegs != 0):
            hint += str(black_pegs) + &amp;#39; &amp;#39; + STR_BLACK_PEG
        if (white_pegs == 0 and black_pegs == 0):
            hint += STR_EMPTY_PEG
    padding_spaces = &amp;#39;&amp;#39;
    if (CODE_LENGTH &amp;lt; len(STR_GUESS_PROMPT)):
        padding_spaces = &amp;quot; &amp;quot; * (len(STR_GUESS_PROMPT) - CODE_LENGTH)
    print format_code(guess_code), padding_spaces + &amp;#39;:&amp;#39;, hint


# Print the game outcome
def print_outcome(code_found, secret_code):
    if (code_found):
        print STR_OUTCOME_WIN
    else:
        print STR_OUTCOME_LOSS
        print STR_OUTCOME_REVEAL, format_code(secret_code)
   
   
# Play a game of Mastermind
def play_game():
    print_help()
    secret_code = set_secret_code()
    guess_num = 0
    code_found = False
    while (guess_num &amp;lt; MAX_GUESSES):
        guess_code = get_guess_code()
        guess_num += 1
        code_found = (guess_code == secret_code)
        if (code_found):
            break	   # Avoid printing a hint if the code is found
        print_hint(secret_code, guess_code)
    print_outcome(code_found, secret_code)
        
    
# Options menu
def menu_options():
    global CODE_LENGTH
    global CODE_COLORS
    global MAX_GUESSES
    global SHOW_MENU
    global EASY_MODE
    print STR_MENU_OPTIONS
    print STR_OPT_CODELENGTH
    CODE_LENGTH = int(input(&amp;quot;[&amp;quot; + str(CODE_LENGTH) + &amp;quot;] &amp;quot;))
    print STR_OPT_CODECOLORS
    CODE_COLORS = int(input(&amp;quot;[&amp;quot; + str(CODE_COLORS) + &amp;quot;] &amp;quot;))
    print STR_OPT_MAXGUESSES
    MAX_GUESSES = int(input(&amp;quot;[&amp;quot; + str(MAX_GUESSES) + &amp;quot;] &amp;quot;))
    print STR_OPT_SHOWMENU
    SHOW_MENU = input(&amp;quot;[&amp;quot; + str(SHOW_MENU) + &amp;quot;] &amp;quot;)
    print STR_OPT_EASYMODE
    EASY_MODE = input(&amp;quot;[&amp;quot; + str(EASY_MODE) + &amp;quot;] &amp;quot;)
    

# Main menu
def menu_main():
    menu_main_choices = { &amp;quot;A&amp;quot; : show_about,
                          &amp;quot;O&amp;quot; : menu_options,
                          &amp;quot;P&amp;quot; : play_game,
                          &amp;quot;Q&amp;quot; : None }
    usr_choice = &amp;#39;&amp;#39;
    while (True):
        print STR_MENU_MAIN
        while (not usr_choice in menu_main_choices):
            usr_choice = raw_input(STR_MENU_MAINPROMPT)
        if (usr_choice == &amp;#39;Q&amp;#39;):
            return None
        else:
            menu_main_choices[usr_choice]()
            usr_choice = &amp;#39;&amp;#39;

  
# Show &amp;quot;about&amp;quot; screen
def show_about():
    print STR_ABOUT
    raw_input()


# Main
if (SHOW_MENU):
    menu_main()
else:
    play_game()

# End
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Thu, 28 May 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/05/28/mastermind_refined.html</guid>
	</item>
	<item>
		<title>"I know the pieces fit"</title>
		<link>https://blog.jkbockstael.be/posts/2009/05/14/tool_lateralus.html</link>
		<description>&lt;h1 id="i-know-the-pieces-fit"&gt;&amp;quot;I know the pieces fit&amp;quot;&lt;/h1&gt;
&lt;p&gt;Houlà ça fait un furieux bail que je n&amp;#39;ai rien posté ici, on va finir par croire que j&amp;#39;ai vraiment une vie hyperactive de jeune cadre dynamique, ou que je me suis fait emporter par H1N1, au choix. Il est temps d&amp;#39;y remédier! Et histoire de varier les plaisirs je vais parler musique et mathématiques (légères, ne pas stresser), plus particulièrement de Tool.&lt;/p&gt;
&lt;p&gt;Il y a quelques jours a surgi sur &lt;a href="http://www.reddit.com/r/math/comments/8gfuo/the_fibonacci_sequence_in_tools_lateralus/"&gt;Reddit&lt;/a&gt; un lien vers &lt;a href="http://www.youtube.com/watch?v=wS7CZIJVxFY"&gt;une vidéo&lt;/a&gt; d&amp;#39;un fan de Tool montrant les curiosités mathématiques de leur morceau &lt;em&gt;&amp;quot;Lateralus&amp;quot;&lt;/em&gt; extrait de l&amp;#39;album du même nom. La vidéo en question ne date pas d&amp;#39;hier et avait même été diggée quelques fois, mais le morceau est une pièce d&amp;#39;exception et il est toujours intéressant d&amp;#39;en découvrir les particularités.&lt;/p&gt;
&lt;p&gt;Tool est un de ces groupes un peu monstrueux parce que chaque élément est une montagne de talent et de créativité à lui seul, mais qu&amp;#39;en plus une fois mis ensemble une curieuse alchimie fait que le groupe est supérieur à la somme de ses membres. En presque vingt ans d&amp;#39;activité ils ont sorti 4 albums (en 1993, 1996, 2001 et 2006), chacun étant clairement réfléchi, mûri et peaufiné pour atteindre un degré de perfection presque monstrueux. Leur chef-d&amp;#39;oeuvre incontesté reste à ce jour l&amp;#39;album &lt;em&gt;Lateralus&lt;/em&gt;, sorti en 2001, catapulé en première place des ventes US dès sa sortie, et vainqueur d&amp;#39;un Grammy Award, et album de l&amp;#39;année selon Kerrang!, rien que ça...&lt;/p&gt;
&lt;p&gt;La chanson &lt;em&gt;Lateralus&lt;/em&gt;, 9 minutes et 24 secondes de bonheur, se fait un peu plus remarquer que le reste. La chanson parle de la quête de connaissance, de la libération de l&amp;#39;esprit sur le corps (on entendait déjà &amp;quot;This body holding me reminds me of my own mortality&amp;quot; sur &lt;em&gt;Parabola&lt;/em&gt;) et culmine en la répétition de &amp;quot;Spiral out, keep going...&amp;quot;. Pas grand-chose, mais si on est attentif aux pauses qui sont mises dans le chant du premier couplets, on observe ceci:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Black
then
white are
all I see
in my infancy.
Red and yellow then came to be,
reaching out to me.
Lets me see&lt;/p&gt;
&lt;p&gt;As below, so above and beyond, I imagine.
Drawn beyond the lines of reason.
Push the envelope.
Watch it bend.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Soit en syllabes: 1, 1, 2, 3, 5, 8, 5, 3 puis 13, 8, 5, 3.&lt;/p&gt;
&lt;p&gt;Après le refrain on reprend le même couplet mais avec un morceau qui manquait, et qui rend la structure nettement plus évidente:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Black
then
white are
all I see
in my infancy.
Red and yellow then came to be,
reaching out to me.
Lets me see&lt;/p&gt;
&lt;p&gt;There is
so
much
more and
beckons me
to look through to these
infinite possibilities.&lt;/p&gt;
&lt;p&gt;As below, so above and beyond, I imagine.
Drawn beyond the lines of reason.
Push the envelope.
Watch it bend.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Soit 1, 1, 2, 3, 5, 8, 5, 3, 2, 1, 1, 2, 3, 5, 8, 13, 8, 5, 3. Autrement dit, la suite de Fibonnaci dans le sens croissant puis décroissant sur ses premiers termes, deux fois. Ce qui, au vu du thème de la chanson et de la mentalité de son auteur, n&amp;#39;est absolument pas à attribuer au hasard. Un autre détail amusant? Le chant commence après 97 secondes de musique, soit après 1,618 minutes, 1,618 est le nombre d&amp;#39;or.&lt;/p&gt;
&lt;p&gt;Waw.&lt;/p&gt;
&lt;p&gt;Le refrain est sur une base rythmique de 9/8, puis 8/8, puis 7/8. 987 est un des termes de la suite de Fibonacci, mais le batteur Danny Carey a démenti que ce soit intentionnel, bien qu&amp;#39;il soit fasciné par les questions de numérologies et des géométries et que cela se ressente très nettement dans la complexité de son jeu.&lt;/p&gt;
&lt;p&gt;L&amp;#39;album comporte 13 pistes, le terme de la série de Fibonnaci le plus grand du jeu rythmique de la plage titulaire. Une rumeur voulait que les pistes de l&amp;#39;album ne soient pas dans le &amp;quot;bon&amp;quot; ordre, et à cette question un fan a répondu en proposant un ordre de lecture différent et étonnament agréable. Son idée est que &lt;em&gt;Parabol&lt;/em&gt; est un prélude à &lt;em&gt;Parabola&lt;/em&gt; et sont respectivement 6ème et 7èmes pistes, donc au milieu du disque. Son arrangement commence par 6 et 7, puis continue par paires de nombres dont la somme vaut 13, le premier étant d&amp;#39;abord décroissant, puis croissant. Soit 6 et 7, 5 et 8, 4 et 9, 13, 1 et 12, 2 et 11, 3 et 10. L&amp;#39;ordre 6, 7, 5, 8, 4, 9, 13, 1, 12, 2, 11, 3, 10, baptisé &lt;em&gt;The Holy Gift&lt;/em&gt; par son auteur, est effectivement troublant tellement il &amp;quot;coule&amp;quot; bien, mais il présente un petit hic: Tool joue toujours les morceaux &lt;em&gt;Disposition&lt;/em&gt;, &lt;em&gt;Reflection&lt;/em&gt;, et &lt;em&gt;Triad&lt;/em&gt; ensemble et dans cet ordre, qui est l&amp;#39;ordre dans lequel ils apparaissent sur &lt;em&gt;Lateralus&lt;/em&gt;, aux positions 10, 11, et 12. &lt;em&gt;The Holy Gift&lt;/em&gt; casse ce triptique abruptement, ce qui peut laisser supposer que s&amp;#39;il existe un ordre parfait ce n&amp;#39;est pas celui-ci.&lt;/p&gt;
&lt;p&gt;C&amp;#39;est tout de même troublant.&lt;/p&gt;
</description>
		<pubDate>Thu, 14 May 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/05/14/tool_lateralus.html</guid>
	</item>
	<item>
		<title>Exercices de Michel Couprie : solutions aux séries 1 et 2, en Python</title>
		<link>https://blog.jkbockstael.be/posts/2009/04/16/exercices_michel_couprie_python.html</link>
		<description>&lt;h1 id="exercices-de-michel-couprie-solutions-aux-séries-1-et-2-en-python"&gt;Exercices de Michel Couprie: solutions aux séries 1 et 2, en Python&lt;/h1&gt;
&lt;p&gt;Eh oui, c&amp;#39;est la semaine de congé, du coup j&amp;#39;ai un peu levé le pied en matières informatiques. Mais pour ne pas laisser les choses en désuétude, voici quelque chose que j&amp;#39;avais fait avant le début du congé, partagé avec quelques favorisés, et qui pourrait être utile à d&amp;#39;autres.&lt;/p&gt;
&lt;p&gt;Quand on veut apprendre à programmer, ou qu&amp;#39;on veut se faire la main sur un langage en particulier, on apprécie d&amp;#39;avoir à disposition des petits problèmes d&amp;#39;algorithmique de difficulté et de complexité croissantes. Pour ma part, quand je m&amp;#39;ennuie j&amp;#39;aime beaucoup avoir un problème que je peux résoudre en moins d&amp;#39;une heure, une sorte de &amp;quot;one-shot&amp;quot; pour se changer les idées.&lt;/p&gt;
&lt;p&gt;En fouillant un peu j&amp;#39;ai trouvé &lt;a href="http://www.esiee.fr/~coupriem/Exos/exos/exos.html"&gt;cette liste de problèmes&lt;/a&gt;, proposé par Michel Couprie. ces problèmes (34 en tout) sont classés par difficulté croissante en quatre paliers. Voici mes solutions pour les problèmes des deux premiers paliers (les deux suivants suivront si je m&amp;#39;ennuie ce soir).&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Solutions aux exercices proposes par Michel Couprie a l&amp;#39;adresse:
# http://www.esiee.fr/~coupriem/Exos/exos/exos.html
#
# Il peut y avoir d&amp;#39;autres approches, evidemment, je ne fournis celles-ci qu&amp;#39;a
# titre d&amp;#39;exemples.
# 2009/04/08, 2009-04-09 - Jean Karim Bockstael - jkb@jkbockstael.be



#------------------------------------------------------------------------------
# DIFFICULTE 1
#------------------------------------------------------------------------------

#------------------------------------------------------------------------------
# 01 - Factorielle
# http://www.esiee.fr/~coupriem/Exos/Enonces/fact

def factorielle_iterative(n):
    res = 1
    while (n &amp;gt; 1):
        res *= n
        n -= 1
    return res
    
def factorielle_recursive(n):
    if n &amp;lt; 2:
        return 1
    else:
        return n * factorielle_recursive(n - 1)
    
    
#------------------------------------------------------------------------------
# 02 - Inversion d&amp;#39;un tableau
# http://www.esiee.fr/~coupriem/Exos/Enonces/inverse

def inversion_tableau_iterative(tab):
    tmp = []
    if len(tab) &amp;lt; 2:
        return tab
    for i in (len(tab), 0, -1):
        tmp.append(tab[i - 1])
    return tmp

def inversion_tableau_recursive(tab):
    if len(tab) &amp;lt; 2:
        return tab
    else:
        return inversion_tableau_recursive(tab[1:]) + [tab[0]]

def inversion_tableau_pythonienne(tab):
    return tab[-1::-1]


#------------------------------------------------------------------------------
# 03 - Minimum et maximum sur un tableau en une seule passe
# http://www.esiee.fr/~coupriem/Exos/Enonces/minmax

def min_et_max(tab):
    if len(tab) &amp;lt; 1:
        return {}
    res = {&amp;#39;min&amp;#39; : tab[0], &amp;#39;max&amp;#39; : tab[0]}
    for i in range(1, len(tab)):
        if (tab[i] &amp;lt; res[&amp;#39;min&amp;#39;]):
            res[&amp;#39;min&amp;#39;] = tab[i]
        if (tab[i] &amp;gt; res[&amp;#39;max&amp;#39;]):
            res[&amp;#39;max&amp;#39;] = tab[i]
    return res


#------------------------------------------------------------------------------
# 04 - Palindrome ou non, en ignorant les espaces
# http://www.esiee.fr/~coupriem/Exos/Enonces/palindrome

def est_palindrome(texte):
    if len(texte) &amp;lt; 2:
        return True
    tmp = texte.replace(&amp;#39; &amp;#39;, &amp;#39;&amp;#39;)
    return (tmp == tmp[-1::-1])


#------------------------------------------------------------------------------
# 05 - Solution d&amp;#39;un polynome par Horner
# http://www.esiee.fr/~coupriem/Exos/Enonces/polynome

def solution_horner(poly, value):
    # avec poly de la forme [coeff, ...] sans vide, poids fort au debut
    # donc on note explicitement les coefficiens nuls
    result = poly[0]
    for i in range(1, len(poly)):
        result *= value
        result += poly[i]
    return result


#------------------------------------------------------------------------------
# 06 - Estimation de Pi
# http://www.esiee.fr/~coupriem/Exos/Enonces/calculpi

from random import random
from math import sqrt
def estimation_pi(nb_points):
    def radius(x_coord, y_coord):
        return sqrt(x_coord ** 2 + y_coord ** 2)
    cnt = 0.0
    for i in range(0, nb_points):
        if radius(random(), random()) &amp;lt; 1:
            cnt += 1
    return cnt / nb_points * 4


#------------------------------------------------------------------------------
# 07 - Suite &amp;quot;cube de chiffres du terme precedent&amp;quot;
# http://www.esiee.fr/~coupriem/Exos/Enonces/cubes

def suite_cube_chiffres(depart):
    def somme_cubes_chiffres(nombre):
        tmp = str(nombre)
        res = 0
        for i in range(0, len(tmp)):
            res += int(tmp[i]) ** 3
        return res
    if (depart % 3 != 0) or (depart &amp;lt; 0):
        return &amp;quot;Le premier element doit etre un multiple positif de 3.&amp;quot;
    res = [depart]
    while res[-1] != somme_cubes_chiffres(res[-1]):
        res.append(somme_cubes_chiffres(res[-1]))
    return res[-1]


#------------------------------------------------------------------------------
# 08 - Crible d&amp;#39;Eratosthene
# http://www.esiee.fr/~coupriem/Exos/Enonces/eratos

def crible_eratosthene(limite):
    res_bool = [False, False]
    for i in range(2, limite + 1):
        res_bool.append(True)
    for i in range(2, limite + 1):
        for j in range(2, i / 2 + 1):
            if (i % j == 0) and (i / j != 1):
                res_bool[i] = False
    res_num = []
    for i in range(2, limite + 1):
        if res_bool[i]:
            res_num.append(i)
    return res_num


#------------------------------------------------------------------------------
# 09 - Test de la primalite d&amp;#39;un entier
# http://www.esiee.fr/~coupriem/Exos/Enonces/premier

def est_premier(nombre):
    if (nombre &amp;lt; 2):
        return False
    premiers = crible_erathosthene(nombre / 2 + 1)
    for i in premiers:
        if (nombre % i == 0):
            return False
    return True


#------------------------------------------------------------------------------
# 10 - Produit scalaire de deux vecteurs
# http://www.esiee.fr/~coupriem/Exos/Enonces/prodscal

def produit_scalaire(vec1, vec2):
    if (len(vec1) != len(vec2)) or \
        (len(vec1) &amp;lt; 1) or \
        (len(vec2) &amp;lt; 1):
        return &amp;quot;Arguments incorrects&amp;quot;
    tmp = 0
    for i in range(0, len(vec1)):
        tmp += vec1[i] * vec2[i]
    return tmp


#------------------------------------------------------------------------------
# 11 - Puissance N d&amp;#39;un nombre, en effectuant moins de N-1 multiplications
# http://www.esiee.fr/~coupriem/Exos/Enonces/puissance

def puissance(base, expo):
    if (expo &amp;lt; 0):
        return &amp;quot;L&amp;#39;exposant doit etre positif ou nul&amp;quot;
    tmp = 1
    while (expo &amp;gt; 1):
        tmp *= (base * base)
        expo -= 2
    if (expo == 1):
        tmp *= base
    return tmp


#------------------------------------------------------------------------------
# 12 - Calcul de la racine carree
# http://www.esiee.fr/~coupriem/Exos/Enonces/raccar
   
def racine_carree(nbr, precision):
    # Estimation a la louche 
    rac = 0
    while (nbr &amp;gt; rac ** 2):
        rac += 1
    if (nbr == rac ** 2):
        return rac
    # Affinement
    for i in range(0, precision):
        rac = (rac + nbr / rac) / 2.0
    return rac
    


#------------------------------------------------------------------------------
# 13 - Calcul de la racine cubique
# http://www.esiee.fr/~coupriem/Exos/Enonces/raccube

def racine_cubique(nbr, precision):
    # Estimation a la louche 
    rac = 0
    while (nbr &amp;gt; rac ** 3):
        rac += 1
    if (nbr == rac ** 3):
        return rac
    # Affinement
    for i in range(0, precision):
        rac = (2 * rac + nbr / (rac ** 2)) / 3.0
    return rac


#------------------------------------------------------------------------------
# 14 - Recherche sequentielle sur un tableau
# http://www.esiee.fr/~coupriem/Exos/Enonces/rechseq
# Meme chose que l&amp;#39;exercice 03


#------------------------------------------------------------------------------
# 15 - Fonction sin(x)
# http://www.esiee.fr/~coupriem/Exos/Enonces/sinus

def sinus(x, precision):
    def factorielle(n):
        return factorielle_iterative(n)
    result = 0.0
    for n in range(0, precision):
        result += ((-1) ** n) * ((x ** (2 * n + 1)) / (factorielle(2 * n + 1)))
    return result


#------------------------------------------------------------------------------
# 16 - Symetrie d&amp;#39;une matrice
# http://www.esiee.fr/~coupriem/Exos/Enonces/symetrique

def est_symetrique(matrice):
    if (len(matrice) != len(matrice[0])):
        return False # Une matrice doit etre carree pour etre symetrique
    for i in range(0, len(matrice)):
        for j in range(0, i):
            if matrice[i][j] != matrice[j][i]:
                return False
    return True


#------------------------------------------------------------------------------
# 17 - Affichage du triangle de Pascal
# http://www.esiee.fr/~coupriem/Exos/Enonces/trpascal

def triangle_de_pascal(rangees):
    print &amp;quot;1&amp;quot;
    print &amp;quot;1 1&amp;quot;
    prevline = [1, 1]
    for i in range(3, rangees + 1):
        thisline = [1]
        for j in range(1, i - 1):
            thisline.append(prevline[j] + prevline[j - 1])	  
        thisline.append(1)
        for j in range(0, i - 1):
            print str(thisline[j]) + &amp;quot; &amp;quot;,
        print str(thisline[-1])
        prevline = thisline




#------------------------------------------------------------------------------
# DIFFICULTE 2
#------------------------------------------------------------------------------

#------------------------------------------------------------------------------
# 18 - Determiner si deux chaines sont anagrammes
# http://www.esiee.fr/~coupriem/Exos/Enonces/anagrame

def sont_anagrammes(chaine1, chaine2):
    chaine1 = chaine1.strip(&amp;quot; ,.;:?!&amp;#39;\&amp;quot;-_&amp;quot;).lower()
    chaine2 = chaine2.strip(&amp;quot; ,.;:?!&amp;#39;\&amp;quot;-_&amp;quot;).lower()
    return (list(chaine1).sort() == list(chaine2).sort())


#------------------------------------------------------------------------------
# 19 - Convolution
# http://www.esiee.fr/~coupriem/Exos/Enonces/convolution

def convolution(tabA, tabH):
    # A de taille 100x100, H de taille 7x7
    tabB = [[0] * 100] * 100
    for i in range(0, 100):
        for j in range(0, 100):
            if ((i in range(0, 3) or i in range(97, 100)) or \
                (j in range(0, 3) or j in range(97, 100))):
                tabB[i][j] = tabA[i][j]
            else: # i,j in (4, 97)
                for m in range(0, 7):
                    for n in range(0, 7):
                        tabB[i][j] += tabA[i + m - 3][j + n - 3] * tabH[m][n]
    return tabB


#------------------------------------------------------------------------------
# 20 - Fusion de deux tableaux tries
# http://www.esiee.fr/~coupriem/Exos/Enonces/fusion

def fusion_tableaux_tries(tab1, tab2):
    cur1 = 0
    cur2 = 0
    tab3 = []
    while (cur1 &amp;lt; len(tab1)) and (cur2 &amp;lt; len(tab1)):
        if tab1[cur1] &amp;lt; tab2[cur2]:
            tab3.append(tab1[cur1])
            cur1 += 1
        else:
            tab3.append(tab2[cur2])
            cur2 +=1
    # Un des deux tableaux a ete entierement copie, reste a vider l&amp;#39;autre
    while (cur1 &amp;lt; len(tab1)):
        tab3.append(tab1[cur1])
        cur1 += 1
    while (cur2 &amp;lt; len(tab2)):
        tab3.append(tab2[cur2])
        cur2 += 1   
    return tab3


#------------------------------------------------------------------------------
# 21 - Conjecture Hongroise (note: on l&amp;#39;appelle aussi &amp;quot;probleme de Collatz&amp;quot;)
# http://www.esiee.fr/~coupriem/Exos/Enonces/hongrois

def hongroise(depart):
    if (depart == 1):
        print &amp;quot;1 4 2 1 4 2 ...&amp;quot;
    else:
        print str(depart),
        if (depart % 2 == 0):
            hongroise(depart / 2)
        else:
            hongroise(3 * depart + 1)


#------------------------------------------------------------------------------
# 22 - Regroupement des valeurs paires et impaires
# http://www.esiee.fr/~coupriem/Exos/Enonces/pairimpair

def paires_impaires(tab):
    res = []
    for i in range(0, len(tab)):
        if (tab[i] % 2 == 0):
            res.append(tab[i])
    for i in range(0, len(tab)):
        if (tab[i] % 2 != 0):
            res.append(tab[i])
    return res
    
    
#------------------------------------------------------------------------------
# 23 - Afficher les nombres parfaits compris entre 1 et N
# http://www.esiee.fr/~coupriem/Exos/Enonces/parfaits

def nombres_parfaits(limite):
    res = []
    for nb in range(1, limite + 1):
        sommediv = 0
        for di in range(1, nb / 2 + 1):
            if (nb % di == 0):
                sommediv += di
        if (sommediv == nb):
            res.append(nb)
    return res


#------------------------------------------------------------------------------
# 24 - Determiner la periode d&amp;#39;un signal digital
# http://www.esiee.fr/~coupriem/Exos/Enonces/periode

def periode_signal(tab):
    per = 0
    fini = False
    while (not fini) and (per &amp;lt; len(tab) - 1):
        per +=1
        # Verification de cette hypothese
        for cur in range(0, per):
            fini = (tab[cur] == tab[cur + per])
    if (fini):
        return per
    else:
        return 0


#------------------------------------------------------------------------------
# 25 - Plus grand plateau dans le graphique d&amp;#39;une fonction monotone
# http://www.esiee.fr/~coupriem/Exos/Enonces/plateau

def plus_grand_plateau(tab):
    plat_max = 1
    plat_tmp = 0
    for i in range(1, len(tab)):
        if tab[i] == tab[i - 1]:
            plat_tmp += 1
        else:
            plat_tmp = 1
        if plat_tmp &amp;gt; plat_max:
            plat_max = plat_tmp
    return plat_max


#------------------------------------------------------------------------------
# 26 - Calcul de la racine carree entiere d&amp;#39;un entier
# http://www.esiee.fr/~coupriem/Exos/Enonces/racent

def racine_carree_entiere(nbr):
    rac = 0
    while (nbr &amp;gt; rac ** 2):
        rac += 1
    if (nbr == rac ** 2):
        return rac
    else:
        return rac - 1


#------------------------------------------------------------------------------
# 27 - Conversion Romain-arabe
# http://www.esiee.fr/~coupriem/Exos/Enonces/romains

def romain_vers_arabe(romannumber):
    romandigits = { &amp;#39;I&amp;#39;: 1, &amp;#39;V&amp;#39;: 5, &amp;#39;X&amp;#39;: 10, &amp;#39;L&amp;#39;: 50 }
    number = 0
    for i in range(1, len(romannumber)):
        if (romandigits[romannumber[i]] &amp;gt; romandigits[romannumber[i - 1]]):
            number -= romandigits[romannumber[i - 1]]
        else:
            number += romandigits[romannumber[i - 1]]
    number += romandigits[romannumber[-1]]
    return digit


#------------------------------------------------------------------------------
# 28 - Transcodage octal-decimal
# http://www.esiee.fr/~coupriem/Exos/Enonces/transcodage

def octal_vers_decimal(octnum):
    number = 0
    octalnumber = str(octnum)
    for i in range(0, len(octalnumber)):
        number += int(octalnumber[i]) * (8 ** (len(octalnumber) - i - 1))
    return number
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Thu, 16 Apr 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/04/16/exercices_michel_couprie_python.html</guid>
	</item>
	<item>
		<title>Project Euler : solution au problème 23, en Python</title>
		<link>https://blog.jkbockstael.be/posts/2009/04/06/project_euler_23_python.html</link>
		<description>&lt;h1 id="project-euler--solution-au-problème-23-en-python"&gt;Project Euler : solution au problème 23, en Python&lt;/h1&gt;
&lt;p&gt;Un dernier pour aujourd&amp;#39;hui, vu que je ne serai sûrement pas vraiment généreux en code cette semaine, ni la semaine prochaine. Disons que je prends un peu d&amp;#39;avance.&lt;/p&gt;
&lt;p&gt;Le problème 23 est une question de nombres abondants. Connaissant la somme des diviseurs propres d&amp;#39;un nombre, on dit que ce nombre est déficient si cette somme est inférieure à lui-même (c&amp;#39;est le cas du nombre 10), parfait si cette somme lui est égale (28 l&amp;#39;est), abondant si elle est supérieure à lui-même (12 est abondant).&lt;/p&gt;
&lt;p&gt;Il est un fait établi que tous les nombres supérieurs à 28123 peuvent être écrits comme la somme de deux nombre abondants. Les entiers qui ne sont pas exprimables comme somme de deux abondants forment donc un ensemble fini. On en demande la somme.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#! /usr/bin/env python

# 2009/04/06 - euler023.py
# Solution au Probleme 23 de Project Euler
# http://projecteuler.net/index.php?section=problems&amp;amp;id=23
# Jean Karim Bockstael - jkb@jkbockstael.be

def getproperdivisors(num):
    res = []
    for i in range(1, num / 2 + 1):
        if (num % i == 0):
            res.append(i)
    return res

def sumofproperdivisors(num):
    return sum(getproperdivisors(num))
    
def isabundant(num):
    return (sumofproperdivisors(num) &amp;gt; num)

def getabundantnumbers(lim):
    res = []
    for i in range(1, lim + 1):
        if isabundant(i):
            res.append(i)
    return res

def issumofabundants(num, abundants):
    res = False
    for i in abundants:
        if ((num - i) in abundants):
            res = True
            break
    return res

def euler23(lim):
    abundants = getabundantnumbers(lim)
    res = []
    for i in range(1, lim + 1):
        if not (issumofabundants(i, abundants)):
            res.append(i)
    return sum(res)

print euler23(28123)
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Mon, 06 Apr 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/04/06/project_euler_23_python.html</guid>
	</item>
	<item>
		<title>Project Euler : solution au problème 22, en Python</title>
		<link>https://blog.jkbockstael.be/posts/2009/04/06/project_euler_22_python.html</link>
		<description>&lt;h1 id="project-euler-solution-au-problème-22-en-python"&gt;Project Euler: solution au problème 22, en Python&lt;/h1&gt;
&lt;p&gt;Premier post du mois d&amp;#39;avril tiens, d&amp;#39;une certaine manière il était temps, nous sommes déjà le six! D&amp;#39;ici à ce qu&amp;#39;on dise que je laisse mon blog en désuétude, il n&amp;#39;y a qu&amp;#39;un pas!&lt;/p&gt;
&lt;p&gt;Je continue dans les joyeusetés de Project Euler, avec le problème 22. L&amp;#39;idée est assez amusante, à savoir qu&amp;#39;on définit le &amp;quot;score&amp;quot; d&amp;#39;un mot comme la somme de ses lettres (avec A = 1, B = 2, ...), multiplié par la position de ce mot dans une liste. La liste en question est une liste de plus de 5000 prénoms, qu&amp;#39;on doit d&amp;#39;abord classer par ordre alphabétique. But: obtenir la somme des scores de tous ces noms, une fois triés.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#! /usr/bin/env python

# 2009/04/06 - euler022.py
# Solution au Probleme 22 de Project Euler
# http://projecteuler.net/index.php?section=problems&amp;amp;id=22
# Jean Karim Bockstael - jkb@jkbockstael.be

import re

letters = { &amp;#39;A&amp;#39; : 1,
            &amp;#39;B&amp;#39; : 2,
            &amp;#39;C&amp;#39; : 3,
            &amp;#39;D&amp;#39; : 4,
            &amp;#39;E&amp;#39; : 5,
            &amp;#39;F&amp;#39; : 6,
            &amp;#39;G&amp;#39; : 7,
            &amp;#39;H&amp;#39; : 8,
            &amp;#39;I&amp;#39; : 9,
            &amp;#39;J&amp;#39; : 10,
            &amp;#39;K&amp;#39; : 11,
            &amp;#39;L&amp;#39; : 12,
            &amp;#39;M&amp;#39; : 13,
            &amp;#39;N&amp;#39; : 14,
            &amp;#39;O&amp;#39; : 15,
            &amp;#39;P&amp;#39; : 16,
            &amp;#39;Q&amp;#39; : 17,
            &amp;#39;R&amp;#39; : 18,
            &amp;#39;S&amp;#39; : 19,
            &amp;#39;T&amp;#39; : 20,
            &amp;#39;U&amp;#39; : 21,
            &amp;#39;V&amp;#39; : 22,
            &amp;#39;W&amp;#39; : 23,
            &amp;#39;X&amp;#39; : 24,
            &amp;#39;Y&amp;#39; : 25,
            &amp;#39;Z&amp;#39; : 26 }

def filetolist(filename):
    f = open(filename)
    inp = f.readline()
    names = re.split(&amp;#39;\W+&amp;#39;,inp)
    f.close()
    return names[1:-1]

def letterscore(letter):
    return letters[letter]

def namescore(name):
    score = 0
    for i in range(0, len(name)):
        score += letterscore(name[i])
    return score

def euler22(filename):
    names = sorted(filetolist(filename))
    scoresum = 0
    for i in range(0, len(names)):
        scoresum += (i + 1) * namescore(names[i])
    return scoresum

print euler22(&amp;quot;names.txt&amp;quot;)
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Mon, 06 Apr 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/04/06/project_euler_22_python.html</guid>
	</item>
	<item>
		<title>Quelques chiffres...</title>
		<link>https://blog.jkbockstael.be/posts/2009/03/31/quelques_chiffres.html</link>
		<description>&lt;h1 id="quelques-chiffres"&gt;Quelques chiffres...&lt;/h1&gt;
&lt;p&gt;La semaine dernière, le présent blog a franchi le cap des 1000 visites. J&amp;#39;avoue, ça fait tout chose, puisque je pensais être anecdotique au-delà de l&amp;#39;imagination humaine. Finalement il semble que mon blog est plus populaire que je ne l&amp;#39;aurais cru.&lt;/p&gt;
&lt;p&gt;Quelques chiffre donc, pour les curieux...&lt;/p&gt;
&lt;p&gt;JKB.log a été ouvert le &lt;a href="http://blog.jkbockstael.be/posts/2008/10/20/et_voila.html"&gt;20 octobre 2008&lt;/a&gt;, un système de statistiques (Google Analytics) a été mis en place le 27 du même mois. Les données qui suivent portent donc sur la période du 27 octobre 2008 au 27 mars 2009, soit 5 mois d&amp;#39;activité.&lt;/p&gt;
&lt;p&gt;En cinq mois, j&amp;#39;ai commis 65 posts, ce qui fait un poil plus de 3 par semaine en moyenne; une plutôt bonne performance, puisque je m&amp;#39;interdis un peu les posts niais qui n&amp;#39;ont absolument aucun contenu et qui rangeraient JKB.log dans le même sac que les skyblogs de tous poils qui sont soit une liste de liens vers des vidéos mille fois vues, soit des collections de gags éculés, ou images de cartes postales bon marché accompagnées de poésie au moins aussi bon marché. Ici il y a du contenu original, du contenu qui n&amp;#39;est pertinent qu&amp;#39;à un certain sous-ensemble des internautes, mais un contenu original tout de même.&lt;/p&gt;
&lt;p&gt;Les visiteurs ont été au nombre de 718, pour 1067 visites qui ont consisté en 2189 pageviews. Sur une visite d&amp;#39;une durée moyenne de 2 minutes 30, un visiteur a demandé 2 pages. Je pense qu&amp;#39;on peut en déduire sans trop d&amp;#39;audace que la première est la page d&amp;#39;index, la deuxième la page complète d&amp;#39;un post donné. Le post le plus populaire est &lt;a href="http://blog.jkbockstael.be/posts/2008/12/03/comment_devenir_un_hacker.html"&gt;celui qui annonce la mise en ligne de ma traduction de &amp;quot;How to become a hacker&amp;quot;&lt;/a&gt; d&amp;#39;Eric S. Raymond, post demandé 117 fois, le deuxième (85 visites) est &lt;a href="http://blog.jkbockstael.be/posts/2008/11/11/project_euler_6_c.html"&gt;ma solution au problème n°6 de Project Euler, implémentée en C&lt;/a&gt;; le troisième (47 visites) mon petit mot sur &lt;a href="http://blog.jkbockstael.be/posts/2008/11/25/censure_msn.html"&gt;la censure en temps réel sur le service MSN Messenger&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;J&amp;#39;avoue être assez touché de voir que mes visiteurs ne correspondent pas exactement aux données démographiques générales. A savoir qu&amp;#39;il est un fait établi que le navigateur le plus populaire au monde est Internet Explorer, or seuls 19,31% de mes visiteurs l&amp;#39;utilisent; 66,54% d&amp;#39;entre eux sont venus aux commandes de Firefox. De la même manière, Windows est l&amp;#39;écrasant dominant, mais ne fait subir son joug qu&amp;#39;à 50,52% de mes visiteurs; 37,11% d&amp;#39;entre eux utilisent Mac OS, 11,81% utilisent Linux.&lt;/p&gt;
&lt;p&gt;13,31% des visiteurs sont venus directement (la coupable est sûrement ma mailsig), 38,80% sont venus par un lien sur un autre site (un gros merci à &lt;a href="http://www.sterpin.net/"&gt;André Sterpin&lt;/a&gt;, qui est mon plus généreux donateurs de visites, le deuxième étant mon profil Twitter), le reste (soit 47,89%) provient de moteurs de recherche.&lt;/p&gt;
&lt;p&gt;Il est donc intéressant de jeter un oeil aux critères de recherche qui les ont envoyés ici. En tête, avec 49 visites, &amp;quot;Jean Karim Bockstael&amp;quot;, ça tombe bien, c&amp;#39;est moi! D&amp;#39;ailleurs je constate avec joie qu&amp;#39;une recherche Google sur mon nom donne pour premiers résultats mon profil Twitter, mon profil Facebook, mon blog, et mon site personnel. En matière de publicité personnelle je m&amp;#39;en tire plutôt bien. Ça aide de ne pas avoir d&amp;#39;homonyme.&lt;/p&gt;
&lt;p&gt;Après ceux qui me cherchent viennent ceux qui cherchent de l&amp;#39;aide concernant Project Euler. La recherche &amp;quot;project euler&amp;quot; est en deuxième position et à l&amp;#39;origine de 42 visites. Plus bas dans la liste se trouvent une quantité folle de recherche mentionnant les mots &amp;quot;project euler&amp;quot; et un numéro de problème ou un nom de langage particulier. Ici aussi il s&amp;#39;agit de visiteurs contents, puisqu&amp;#39;effectivement je parle beaucoup du Project Euler et qu&amp;#39;effectivement je fournis &lt;a href="http://blog.jkbockstael.be/tags/projecteuler/"&gt;des solutions à certains de ses problèmes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;De la même manière, celui qui cherchait &amp;quot;litanie peur herbert&amp;quot; a &lt;a href="http://blog.jkbockstael.be/posts/2009/02/23/litanie_contre_la_peur.html"&gt;trouvé son bonheur en deux langues&lt;/a&gt;. Par contre celui qui cherchait à se renseigner sur les &amp;quot;problemes de mue chez les python&amp;quot; aura vite compris que je ne parle pas de ce genre de &lt;a href="http://blog.jkbockstael.be/tags/codepython/"&gt;python&lt;/a&gt;. Il faudra que les deux qui cherchaient &amp;quot;comment devenir gros&amp;quot; et celui qui cherchait &amp;quot;comment devenir poilu&amp;quot; m&amp;#39;explique le fond de leur question et les raisons profondes derrière elle, ma curiosité est piquée.&lt;/p&gt;
&lt;p&gt;Curieusement, j&amp;#39;attire les pyromanes aussi, 5 voulaient &amp;quot;bouter le feu&amp;quot;, un voulait &amp;quot;bouter au feu&amp;quot;, un &amp;quot;bouter du feu&amp;quot;, et un vraisemblable acquéreur de nouvelle casserole se demandait &amp;quot;tous feux sauf induction ca veut dire quoi&amp;quot;. &lt;a href="http://blog.jkbockstael.be/posts/2008/10/31/howto_bouter_le_feu_a_sa_cuisine.html"&gt;Le post coupable est ici&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;J&amp;#39;avoue, ça m&amp;#39;a bien amusé. En route pour les 5 prochains mois d&amp;#39;activité, maintenant. Et merci à toutes et tous, c&amp;#39;est vraiment gratifiant de savoir que ce qu&amp;#39;on écrit est lu.&lt;/p&gt;
</description>
		<pubDate>Tue, 31 Mar 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/03/31/quelques_chiffres.html</guid>
	</item>
	<item>
		<title>Project Euler : solution au problème 21, en Python</title>
		<link>https://blog.jkbockstael.be/posts/2009/03/30/project_euler_21_python.html</link>
		<description>&lt;h1 id="project-euler-solution-au-problème-21-en-python"&gt;Project Euler: solution au problème 21, en Python&lt;/h1&gt;
&lt;p&gt;Dans l&amp;#39;enchaînement, tant que mon mal de crâne ne m&amp;#39;empêche pas trop de réfléchir et que mon mal de doigt ne m&amp;#39;empêche pas trop de taper, la solution au problème suivant qu&amp;#39;il me reste à résoudre: le problème 21.&lt;/p&gt;
&lt;p&gt;On parle ici de nombres amicaux. Des nombres amicaux sont des nombres dont l&amp;#39;un est la somme des diviseurs propres de l&amp;#39;autre. Encore une bizarrerie mathématique amusante.&lt;/p&gt;
&lt;p&gt;Problème: calculer la somme de tous les nombres amicaux inférieurs à 10000.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#! /usr/bin/env python

# 2009/03/30 - euler021.py
# Solution au Probleme 21 de Project Euler
# http://projecteuler.net/index.php?section=problems&amp;amp;id=21
# Jean Karim Bockstael - jkb@jkbockstael.be

def sumofproperdivisors(n):
    s = 0
    for i in range (1, n / 2 + 1):
        if (n % i == 0):
            s += i
    return s
    
def euler21(maxnum):
    s = 0
    for i in range(1, maxnum):
        j = sumofproperdivisors(i)
        k = sumofproperdivisors(j)
        if k == i and k != j:
            s += j
    return s
    
print euler21(10000)
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Mon, 30 Mar 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/03/30/project_euler_21_python.html</guid>
	</item>
	<item>
		<title>Project Euler: solution au problème 19, en Python</title>
		<link>https://blog.jkbockstael.be/posts/2009/03/30/project_euler_19_python.html</link>
		<description>&lt;h1 id="project-euler--solution-au-problème-19-en-python"&gt;Project Euler : solution au problème 19, en Python&lt;/h1&gt;
&lt;p&gt;On dira ce qu&amp;#39;on voudra, finalement résoudre les problèmes dans le désordre ça fait quand même un peu négligé; et les résoudre en commençant par les plus faciles ça fait un peu tire-au-flanc. Donc je reprends dans l&amp;#39;ordre là où j&amp;#39;avais arrêté: au problème 19.&lt;/p&gt;
&lt;p&gt;La question est simple: combien de 1er du mois étaient un dimanche, pendant le vingtième siècle?&lt;/p&gt;
&lt;p&gt;La solution est simple, si on a le bon sens de laisser les complications de calcul de date aux librairies bien faites. Ricanez, mais un bon programmeur doit savoir ne pas réinventer la roue, non? :-)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#! /usr/bin/env python

# 2009/03/30 - euler019.py
# Solution au Probleme 19 de Project Euler
# http://projecteuler.net/index.php?section=problems&amp;amp;id=19
# Jean Karim Bockstael - jkb@jkbockstael.be
from datetime import *

def euler19(beginyear, endyear):
    count = 0
    for year in range(beginyear, endyear + 1):
        for month in range (1, 13):
            if date(year, month, 1).weekday() == 6:
                count += 1
    return count
    
print euler19(1901, 2000)
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Mon, 30 Mar 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/03/30/project_euler_19_python.html</guid>
	</item>
	<item>
		<title>Project Euler : solution au problème 48, en Python</title>
		<link>https://blog.jkbockstael.be/posts/2009/03/29/project_euler_48_python.html</link>
		<description>&lt;h1 id="project-euler--solution-au-problème-48-en-python"&gt;Project Euler : solution au problème 48, en Python&lt;/h1&gt;
&lt;p&gt;Effectivement, quand on demande à avoir la liste des problèmes par ordre croissant de difficulté, on remarque vite que certains sont d&amp;#39;une brutalité basique à la limite du criminel. Ajouté à un langage s&amp;#39;en sortant très bien avec les grands nombres et un processeur vieillissant mais pas tout à fait obsolète, et vive la force brute!&lt;/p&gt;
&lt;p&gt;Le problème 48 demande les dix derniers chiffres de la somme des 1000 premiers entiers élevés à leur propre puissance, soit:
1^1 + 2^2 + 3^3 + ... + 1000^1000&lt;/p&gt;
&lt;p&gt;Résultat en une demi-seconde...&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#! /usr/bin/env python

# 2009/03/29 - euler048.py
# Solution au Probleme 48 de Project Euler
# http://projecteuler.net/index.php?section=problems&amp;amp;id=48
# Jean Karim Bockstael - jkb@jkbockstael.be
def euler48(n):
    sum = 0
    for i in range(1, n + 1):
        sum = sum + (i ** i)
    return str(sum)[-10:]

print euler48(1000)
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Sun, 29 Mar 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/03/29/project_euler_48_python.html</guid>
	</item>
	<item>
		<title>Project Euler : solution au problème 25, en Python</title>
		<link>https://blog.jkbockstael.be/posts/2009/03/26/project_euler_25_python.html</link>
		<description>&lt;h1 id="project-euler--solution-au-problème-25-en-python"&gt;Project Euler : solution au problème 25, en Python&lt;/h1&gt;
&lt;p&gt;Pas bu de café ce matin, donc je me réserve les problèmes réputés plus simples, histoire d&amp;#39;avoir quand même la satisfaction d&amp;#39;avancer. Quand on voit du PHP toute la matinée on a forcément envie de souffler un peu, c&amp;#39;est compréhensible ;)&lt;/p&gt;
&lt;p&gt;Le problème 25 ressort notre ami Fibonacci et sa suite mondialement connue:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Fibo(1) = 1
Fibo(2) = 1
Fibo(n) = Fibo(n-1) + Fibo(n-2)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Le problème étant de trouver &lt;code&gt;n&lt;/code&gt; tel que &lt;code&gt;Fibo(n)&lt;/code&gt; soit un nombre de 1000 chiffre. A la grosse moulinette donc, mais c&amp;#39;est terriblement rapide quand même.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#! /usr/bin/env python

# 2009/03/26 - euler025.py
# Solution au Probleme 25 de Project Euler
# http://projecteuler.net/index.php?section=problems&amp;amp;id=25
# Jean Karim Bockstael - jkb@jkbockstael.be
def euler25(num):
    fibo1 = 1
    fibo2 = 1
    rank = 2
    while (len(str(fibo2)) &amp;lt; num):
        fibo1, fibo2 = fibo2, fibo1 + fibo2
        rank += 1
    return rank
    
print euler25(1000)
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Thu, 26 Mar 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/03/26/project_euler_25_python.html</guid>
	</item>
	<item>
		<title>Project Euler : solution au problème 20, en Python</title>
		<link>https://blog.jkbockstael.be/posts/2009/03/25/project_euler_20_python.html</link>
		<description>&lt;h1 id="project-euler--solution-au-problème-20-en-python"&gt;Project Euler : solution au problème 20, en Python&lt;/h1&gt;
&lt;p&gt;Tiens du code pour Project Euler, ça faisait un petit temps non?&lt;/p&gt;
&lt;p&gt;Le problème 19 ne m&amp;#39;attirait pas des masses, avec ses histoires de calendrier (j&amp;#39;ai une espèce de hantise primaire des problèmes de calcul de date) du coup je suis passé directement au problème 20. Parce que je le peux.&lt;/p&gt;
&lt;p&gt;Ce problème a une sale tête de punition disciplinaire de prof de maths désabusé. Effrayant et sans solution &amp;quot;maline&amp;quot; ou &amp;quot;élégante&amp;quot;, il faut sortir la grosse artillerie, pas le choix.&lt;/p&gt;
&lt;p&gt;Tout le monde se souvient de la fonction factorielle? Celle qu&amp;#39;on note &lt;code&gt;n!&lt;/code&gt;. Celle-là même:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fact(n) = n*(n-1)*(n-2)*(n-3)*...*3*2*1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Genre elle est la victime idéale du premier contact avec la récursivité:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fact(n) = n*fact(n-1) avec fact(0) = 1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Mais là n&amp;#39;est pas tout à fait la question. L&amp;#39;objectif de ce problème est de fournir la somme des chiffres du nombre 100! sans étouffer au passage. Pour les curieux, 100! est un nombre de 158 chiffres. Rien que ça.&lt;/p&gt;
&lt;p&gt;Dieu merci, Python s&amp;#39;en sort très bien avec les grands nombres.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#! /usr/bin/env python

# 2009/03/25 - euler020.py
# Solution au Probleme 20 de Project Euler
# http://projecteuler.net/index.php?section=problems&amp;amp;id=20
# Jean Karim Bockstael - jkb@jkbockstael.be

from math import factorial

def euler20(n):
    num = str(factorial(n))
    sum = 0
    for i in range(0, len(num)):
        sum = sum + int(num[i])
    return sum

print euler20(100)
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Wed, 25 Mar 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/03/25/project_euler_20_python.html</guid>
	</item>
	<item>
		<title>Un interprète PHP, en PHP</title>
		<link>https://blog.jkbockstael.be/posts/2009/03/24/interprete_php_en_php.html</link>
		<description>&lt;h1 id="un-interprète-php-en-php"&gt;Un interprète PHP, en PHP&lt;/h1&gt;
&lt;p&gt;Pour l&amp;#39;instant je pars à la découverte du PHP. Découvrir un nouveau langage implique de beaucoup &amp;quot;jouer&amp;quot; avec, de tester des petites choses, d&amp;#39;exécuter pas mal de &amp;quot;one-liners&amp;quot;. Oui mais quand ces &amp;quot;one-liners&amp;quot;, pour bien faire, doivent être dans du markup correct et être exécutés par un serveur, on se retrouve vite à faire beaucoup d&amp;#39;aller-retours entre l&amp;#39;éditeur et le navigateur.&lt;/p&gt;
&lt;p&gt;Donc j&amp;#39;ai fait un interprète PHP, en PHP, qui se présente sous la forme d&amp;#39;un &lt;code&gt;textarea&lt;/code&gt; dans lequel entrer son code source, et d&amp;#39;un bouton exécutant le code entré. Le résultat de l&amp;#39;exécution est affiché au-dessus du &lt;code&gt;textarea&lt;/code&gt; qui reprend le code exécuté, ce qui permet de s&amp;#39;amuser sans devoir taper à nouveau tout le code.&lt;/p&gt;
&lt;p&gt;Disons que ça peut servir...&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.1//EN&amp;quot;
 &amp;quot;http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd&amp;quot;&amp;gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;Interprete PHP&amp;lt;/title&amp;gt;
    &amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html;charset=utf-8&amp;quot; /&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;?php
if (!isset($_POST[&amp;quot;submit&amp;quot;])) {
    // COMMANDE
    $code = &amp;quot;Entrez du code PHP ici&amp;quot;;
    }
else {
    // RESULTAT
    $code = $_POST[&amp;quot;code&amp;quot;];
    $code = ereg_replace(&amp;#39;[\][&amp;quot;]&amp;#39;,&amp;#39;&amp;quot;&amp;#39;,$code);
    $code = ereg_replace(&amp;quot;[\][&amp;#39;]&amp;quot;,&amp;quot;&amp;#39;&amp;quot;,$code);
    echo eval($code);
    }
print &amp;#39;&amp;lt;form action=&amp;quot;./interprete.php&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&amp;#39;;
print &amp;#39;&amp;lt;p&amp;gt;&amp;#39;;
print &amp;#39;&amp;lt;textarea name=&amp;quot;code&amp;quot; rows=&amp;quot;25&amp;quot; cols=&amp;quot;80&amp;quot;&amp;gt;&amp;#39; . $code . &amp;#39;&amp;lt;/textarea&amp;gt;&amp;lt;br /&amp;gt;&amp;#39;;
print &amp;#39;&amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;submit&amp;quot; value=&amp;quot;Executer&amp;quot; /&amp;gt;&amp;#39;;
print &amp;#39;&amp;lt;/p&amp;gt;&amp;#39;;
print &amp;#39;&amp;lt;/form&amp;gt;&amp;#39;;
?&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&amp;lt;!-- 2009-03-24 Jean Karim Bockstael - license CC-BY-SA --&amp;gt; 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dans une page XHTML valide, parce que c&amp;#39;est quand même plus sympa :)&lt;/p&gt;
</description>
		<pubDate>Tue, 24 Mar 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/03/24/interprete_php_en_php.html</guid>
	</item>
	<item>
		<title>Les messages des poubelles</title>
		<link>https://blog.jkbockstael.be/posts/2009/03/17/les_messages_des_poubelles.html</link>
		<description>&lt;h1 id="les-messages-des-poubelles"&gt;Les messages des poubelles&lt;/h1&gt;
&lt;p&gt;Vu sur une poubelle, quai Van Beneden à Liège, en face de l&amp;#39;Aquarium, pour ceux qui connaissent:&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2009/03/17/les_messages_des_poubelles_attachments/20090317_poubelle.jpg" title="Citation de Gandhi sur une poubelle - haute résolution"&gt;&lt;img src="//blog.jkbockstael.be/posts/2009/03/17/les_messages_des_poubelles_attachments/20090317_poubelle_thumb.jpg" alt="Citation de Gandhi sur une poubelle - miniature"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A vrai dire la citation est un peu inexacte, elle devrait être &amp;quot;nous devons être le changement que nous désirons voir dans le monde&amp;quot;. Le Mahatma a en fait été cité par Arun Gandhi, qui disait (en anglais, du coup) &amp;quot;we need to be the change we wish to see in the world&amp;quot;.&lt;/p&gt;
&lt;p&gt;Il est au passage assez amusant de voir combien de sagesses populaires sont attribuées à Gandhi. Quand elles ne sont pas attribuées à John Lennon.&lt;/p&gt;
</description>
		<pubDate>Tue, 17 Mar 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/03/17/les_messages_des_poubelles.html</guid>
	</item>
	<item>
		<title>Changer l'icône de barre de menu de Path Finder 4</title>
		<link>https://blog.jkbockstael.be/posts/2009/03/11/changer_icone_barre_de_menu_path_finder_4.html</link>
		<description>&lt;h1 id="changer-licône-de-barre-de-menu-de-path-finder-4"&gt;Changer l&amp;#39;icône de barre de menu de Path Finder 4&lt;/h1&gt;
&lt;p&gt;C&amp;#39;est vrai, je n&amp;#39;ai pas souvent tendance à parler de Mac-itude et des considérations sur l&amp;#39;harmonie de la GUI qui vont avec chaque fan de Mac. Mais une fois n&amp;#39;est pas coutume, ça faisait longtemps que je n&amp;#39;avais pas fait de personnalisation qui implique d&amp;#39;un peu plus soulever le capot, c&amp;#39;est donc l&amp;#39;occasion de partager un petit hack de moins de cinq minutes qui peut être utile à d&amp;#39;autres.&lt;/p&gt;
&lt;p&gt;La victime: &lt;a href="http://www.cocoatech.com/"&gt;Path Finder&lt;/a&gt;, version 4 (Tiger oblige), ou plus exactement l&amp;#39;icône qu&amp;#39;il place dans la barre de menu globale.&lt;/p&gt;
&lt;p&gt;J&amp;#39;aime beaucoup Path Finder, c&amp;#39;est vraiment un exemple à suivre en matière de logiciel bien fait. Mais un petit détail m&amp;#39;agace. On reproche souvent à Apple d&amp;#39;avoir cassé sa propre règle en matière d&amp;#39;icônes de barre de menu (silhouette monochrome presque noire) en ajoutant l&amp;#39;icône Spotlight dans un bleu on ne peut plus visible. Je trouve que c&amp;#39;est cohérent avec le menu-pomme qui est du même bleu. Par contre quand une application fait ça, ça casse l&amp;#39;harmonie :&lt;/p&gt;
&lt;p&gt;&lt;img src="//blog.jkbockstael.be/posts/2009/03/11/changer_icone_barre_de_menu_path_finder_4_attachments/0-menubar-before.png" alt="Barre de menu avant transformation"&gt;&lt;/p&gt;
&lt;p&gt;Du coup, je me dis qu&amp;#39;il faudrait remplacer cette icône par une plus adaptée. Un petit tour dans &lt;code&gt;Path Finder.app/Contents/Resources/&lt;/code&gt; et je trouve &lt;code&gt;smallPathFinder.tiff&lt;/code&gt; :&lt;/p&gt;
&lt;p&gt;&lt;img src="//blog.jkbockstael.be/posts/2009/03/11/changer_icone_barre_de_menu_path_finder_4_attachments/1-original.png" alt="Icône original"&gt;&lt;/p&gt;
&lt;p&gt;Image en couleur, 21 pixels de côté, avec couche alpha. OK. Google image à la rescousse, puisque c&amp;#39;est pour mon usage personnel, et je dégotte ceci :&lt;/p&gt;
&lt;p&gt;&lt;img src="//blog.jkbockstael.be/posts/2009/03/11/changer_icone_barre_de_menu_path_finder_4_attachments/2-scavenged.png" alt="Image trouvée en ligne"&gt;&lt;/p&gt;
&lt;p&gt;On gonfle un peu le contraste, on change un brin l&amp;#39;orientation :&lt;/p&gt;
&lt;p&gt;&lt;img src="//blog.jkbockstael.be/posts/2009/03/11/changer_icone_barre_de_menu_path_finder_4_attachments/3-rotate+contrast.png" alt="Image retravaillée"&gt;&lt;/p&gt;
&lt;p&gt;La même chose en inversé, puisque ce sera une couche alpha, et redimensionné :&lt;/p&gt;
&lt;p&gt;&lt;img src="//blog.jkbockstael.be/posts/2009/03/11/changer_icone_barre_de_menu_path_finder_4_attachments/5-redim.png" alt="Image redimensionnée"&gt;&lt;/p&gt;
&lt;p&gt;Je la met en place dans &lt;code&gt;smallPathFinder.tiff&lt;/code&gt;, qu&amp;#39;en passant je remplis d&amp;#39;un monochrome &lt;code&gt;#303030&lt;/code&gt; :&lt;/p&gt;
&lt;p&gt;&lt;img src="//blog.jkbockstael.be/posts/2009/03/11/changer_icone_barre_de_menu_path_finder_4_attachments/6-newicon.png" alt="Couches de l&amp;#39;image finale"&gt;&lt;/p&gt;
&lt;p&gt;Et une fois l&amp;#39;application relancée, joie, bonheur, harmonie:&lt;/p&gt;
&lt;p&gt;&lt;img src="//blog.jkbockstael.be/posts/2009/03/11/changer_icone_barre_de_menu_path_finder_4_attachments/7-menubar-after.png" alt="Barre de menu après transformation"&gt;&lt;/p&gt;
&lt;p&gt;Voilà, vite fait, bien fait :)&lt;/p&gt;
</description>
		<pubDate>Wed, 11 Mar 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/03/11/changer_icone_barre_de_menu_path_finder_4.html</guid>
	</item>
	<item>
		<title>CodeChef: Solution au problème A4 du concours de mars 2009</title>
		<link>https://blog.jkbockstael.be/posts/2009/03/02/codechef_solution_probleme_a4_concours_mars_2009.html</link>
		<description>&lt;h1 id="codechef-solution-au-problème-a4-du-concours-de-mars-2009"&gt;CodeChef: Solution au problème A4 du concours de mars 2009&lt;/h1&gt;
&lt;p&gt;Tiens, le premier concours CodeChef a commencé hier, et se déroule pendant deux semaines. Une occasion pour les programmeurs de tous poils de mesurer leur ardeur algorithmique et de se mesurer les uns aux autres.&lt;/p&gt;
&lt;p&gt;Mouais.&lt;/p&gt;
&lt;p&gt;Toujours est-il que ce sont des problèmes amusants à résoudre, donc autant le faire. Le problème A4, &lt;a href="http://www.codechef.com/MARCH09/problems/A4/" title="CodeChef - The Rise and Fall of Power"&gt;&amp;quot;The Rise and Fall of Power&amp;quot;&lt;/a&gt;, avait été retiré du concours pour une obscure raison technique; le voici revenu mais l&amp;#39;exigence en temps d&amp;#39;exécution a fait échouer ma solution.&lt;/p&gt;
&lt;p&gt;Je peux donc vous en faire profiter sans troubler le bon déroulement du concours ;-)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#! /usr/bin/env python

# 2009/03/02 - codechef-0903-A4.py
# Solution au Probleme A4 du concours Codechef de mars 2009
# http://www.codechef.com/MARCH09/problems/A4/
# Jean Karim Bockstael - jkb@jkbockstael.be

def parseline(raw):
    i = 0
    while raw[i] != &amp;#39; &amp;#39;:
        i = i + 1
    return int(raw[0:i]), int(raw[i+1:])

numberofcases = input()
for i in range(0, numberofcases):
    n, k = parseline(raw_input())
    num = str(n**n)
    print num[:k], num[-k:]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;En plus à ce tarif-là vous avez droit à mon moche parser pas du tout bâclé.&lt;/p&gt;
</description>
		<pubDate>Mon, 02 Mar 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/03/02/codechef_solution_probleme_a4_concours_mars_2009.html</guid>
	</item>
	<item>
		<title>CodeChef/SPOJ: un doute m'habite (problème "ORDERS")</title>
		<link>https://blog.jkbockstael.be/posts/2009/02/27/codechef_probleme_orders.html</link>
		<description>&lt;h1 id="codechefspoj-un-doute-mhabite-problème-orders"&gt;CodeChef/SPOJ: un doute m&amp;#39;habite (problème &amp;quot;ORDERS&amp;quot;)&lt;/h1&gt;
&lt;p&gt;Comme je le disais hier, afin de me libérer un peu la tête des considérations mathématiques un peu trop empreintes de considérations sur les grands ensembles, je me distrais plutôt du côté des problèmes de SPOJ/CodeChef, qui ont un aspect plus &amp;quot;vraie vie&amp;quot; plutôt amusant. Oui bon, je me suis pas mal distrait du côté d&amp;#39;&lt;a href="http://www.openttd.org/en/" title="OpenTTD"&gt;OpenTTD&lt;/a&gt;, mais ceci est une autre histoire, comme disait le fabricant de sacs.&lt;/p&gt;
&lt;p&gt;Dans la catégorie des entraînements &amp;quot;difficiles&amp;quot; (comme &amp;quot;à l&amp;#39;heure à laquelle je tape ceci, la seule solution correcte proposée à ce problème-ci vient d&amp;#39;un certain &amp;#39;Directi Admin&amp;#39;, mais on voit beaucoup de propositions rejetées chaque minute&amp;quot;), on trouve le problème &amp;quot;&lt;a href="http://www.codechef.com/problems/ORDERS/" title="CodeChef - Ordering the Soldiers"&gt;ORDERS&lt;/a&gt;&amp;quot;, ou &amp;quot;&lt;a href="http://www.codechef.com/problems/ORDERS/" title="CodeChef - Ordering the Soldiers"&gt;Ordering the Soldiers&lt;/a&gt;&amp;quot;.&lt;/p&gt;
&lt;p&gt;Le problème est sympa, est pourrait se résumer par: sachant quels ont été les déplacements effectués au cours d&amp;#39;un tri, comment retrouver quelle était la situation initiale?&lt;/p&gt;
&lt;p&gt;J&amp;#39;ai donc concocté une solution qui me semblait sympathique, en Python parce que ce langage m&amp;#39;est sympathique. Je la teste sur les exemples donnés, je constate qu&amp;#39;elle fonctionne effectivement comme prévu, je la propose en ligne, et là bardaf! &lt;code&gt;NZEC&lt;/code&gt;! Comme &amp;quot;non-zero exit code&amp;quot;. Comme &amp;quot;pendant l&amp;#39;exécution, une exception a été soulevée&amp;quot;.&lt;/p&gt;
&lt;p&gt;Et là j&amp;#39;avoue que je reste pantois, parce que j&amp;#39;ai beau lire et relire mon code, je ne vois absolument pas où ça pourrait échouer.&lt;/p&gt;
&lt;p&gt;Quelqu&amp;#39;un a une idée?&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#! /usr/bin/env python

# 2009/02/27 - spoj0227.py
# Solution au Probleme 227 de SPOJ
# http://www.spoj.pl/problems/ORDERS/
# Jean Karim Bockstael - jkb@jkbockstael.be

def swap(ary,idx1,idx2):
    tmp = ary[idx1]
    ary[idx1] = ary[idx2]
    ary[idx2] = tmp

def mkranks(size):
    tmp = []
    for i in range(1, size + 1):
        tmp = tmp + [i]
    return tmp

def permutations(ordered, movements):
    size = len(ordered)
    for i in range(1, size): # The leftmost one never moves
        for j in range(0, int(movements[i])):
            swap(ordered, i-j, i-j-1)
    return ordered
    
numberofcases = input()
for i in range(0, numberofcases):
    sizeofcase = input()
    tmp = raw_input()
    movements = &amp;quot;&amp;quot;
    for i in range(0, len(tmp)):
        if i % 2 != 1:
            movements = movements + tmp[i]
    ordered = mkranks(sizeofcase)
    ordered = permutations(ordered, movements)
    output = &amp;quot;&amp;quot;
    for i in range(0, sizeofcase - 1):
        output = output + str(ordered[i]) + &amp;quot; &amp;quot;
    output = output + str(ordered[sizeofcase - 1])
    print output
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Fri, 27 Feb 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/02/27/codechef_probleme_orders.html</guid>
	</item>
	<item>
		<title>Project Euler : solution au problème 18, en Python</title>
		<link>https://blog.jkbockstael.be/posts/2009/02/26/project_euler_18_python.html</link>
		<description>&lt;h1 id="project-euler--solution-au-problème-18-en-python"&gt;Project Euler : solution au problème 18, en Python&lt;/h1&gt;
&lt;p&gt;Le problème 18 est un peu traître par son exemple. &lt;/p&gt;
&lt;p&gt;En effet, la question est de déterminer quelle est la somme maximale qu&amp;#39;on peut obtenir en parcourant un triangle d&amp;#39;entiers positifs au départ de sa pointe et en ne se déplaçant que vers les 2 entiers situés &amp;quot;sous&amp;quot; celui où on se trouve.&lt;/p&gt;
&lt;p&gt;Une approche gloutonne fonctionne bien sur l&amp;#39;exemple fourni; en se déplaçant à chaque étape vers le plus grand des suivants, on obtient bien la somme maximale de 23 dans le triangle suivant:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;   3
  7 5
 2 4 6
8 5 9 3
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Malheureusement, cette approche gloutonne n&amp;#39;est pas la bonne, et ne fonctionne pas sur les données du problème.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;                            75
                          95  64
                        17  47  82
                      18  35  87  10
                    20  04  82  47  65
                  19  01  23  75  03  34
                88  02  77  73  07  63  67
              99  65  04  28  06  16  70  92
            41  41  26  56  83  40  80  70  33
          41  48  72  33  47  32  37  16  94  29
        53  71  44  65  25  43  91  52  97  51  14
      70  11  33  28  77  73  17  78  39  68  17  57
    91  71  52  38  17  14  91  43  58  50  27  29  48
  63  66  04  68  89  53  67  30  73  16  69  87  40  31
04  62  98  27  23  09  70  98  73  93  38  53  60  04  23
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;J&amp;#39;ai donc opté pour une solution récursive exhaustive, qui est viable étant donnée la petite taille du problème, mais ne le sera pas pour le problème 67. C&amp;#39;est le matin.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#! /usr/bin/env python

# 2009/02/26 - euler018.py
# Solution au Probleme 18 de Project Euler
# http://projecteuler.net/index.php?section=problems&amp;amp;id=18
# Jean Karim Bockstael - jkb@jkbockstael.be

def recsum(tri,row,col):
    if row &amp;lt; len(tri) - 1:
        return tri[row][col] + max(recsum(tri,row+1,col),recsum(tri,row+1,col+1))
    else:
        return tri[row][col]
    
def euler18(triangle):
    return recsum(triangle,0,0)

tri = \
[[75],
[95,64],
[17,47,82],
[18,35,87,10],
[20,4,82,47,65],
[19,1,23,75,3,34],
[88,2,77,73,7,63,67],
[99,65,4,28,6,16,70,92],
[41,41,26,56,83,40,80,70,33],
[41,48,72,33,47,32,37,16,94,29],
[53,71,44,65,25,43,91,52,97,51,14],
[70,11,33,28,77,73,17,78,39,68,17,57],
[91,71,52,38,17,14,91,43,58,50,27,29,48],
[63,66,4,68,89,53,67,30,73,16,69,87,40,31],
[4,62,98,27,23,9,70,98,73,93,38,53,60,4,23]]

print euler18(tri)
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Thu, 26 Feb 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/02/26/project_euler_18_python.html</guid>
	</item>
	<item>
		<title>CodeChef/SPOJ: solution au problème "ONP", en Python</title>
		<link>https://blog.jkbockstael.be/posts/2009/02/26/codechef_probleme_onp_python.html</link>
		<description>&lt;h1 id="codechefspoj-solution-au-problème-onp-en-python"&gt;CodeChef/SPOJ: solution au problème &amp;quot;ONP&amp;quot;, en Python&lt;/h1&gt;
&lt;p&gt;Pour changer un peu des considérations mathématiques qui sous-tendent les problèmes de Project Euler, je m&amp;#39;attaque à ceux qui sont proposés chez &lt;a href="http://www.spoj.pl/" title="SPOJ"&gt;Sphere Online Judge&lt;/a&gt;, dont certains sont repris tels quels chez CodeChef (la système de vérification de CodeChef est celui de SPOJ).&lt;/p&gt;
&lt;p&gt;Je vous épargne le &amp;quot;TEST&amp;quot;, intitulé &amp;quot;&lt;a href="http://www.codechef.com/problems/TEST/" title="CodeChef - Life, the Universe and Everything"&gt;Life, the Universe and Everything&lt;/a&gt;&amp;quot;, qui est un écho jusqu&amp;#39;à atteindre le sacro-saint quarante-deux.&lt;/p&gt;
&lt;p&gt;Par contre &amp;quot;ONP&amp;quot;, ou &amp;quot;Transform the Expression&amp;quot;, énoncé &lt;a href="http://www.codechef.com/problems/ONP/" title="CodeChef - Transform the Expression"&gt;ici&lt;/a&gt; et &lt;a href="http://www.spoj.pl/problems/ONP/" title="SPOJ - Transform the Expression"&gt;là&lt;/a&gt;, est un peu plus intéressant puisqu&amp;#39;il s&amp;#39;agit de transformer une expression arithmétique en notation infixe en la même expression mais en notation postfixe.&lt;/p&gt;
&lt;p&gt;Mon programme est une implémentation du &lt;a href="http://en.wikipedia.org/wiki/Shunting_yard_algorithm" title="Wikipedia - Shunting Yard Algorithm"&gt;Shunting Yard Algorithm&lt;/a&gt;, du vénérable &lt;a href="http://en.wikipedia.org/wiki/Edsger_Dijkstra" title="Wikipedia - Edsger Dijkstra"&gt;Edsger Dijkstra&lt;/a&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#! /usr/bin/env python

# 2009/02/26 - spoj0004.py
# Solution au Probleme 4 de SPOJ
# http://www.spoj.pl/problems/ONP/
# Jean Karim Bockstael - jkb@jkbockstael.be

operators = {   &amp;#39;+&amp;#39; : 0,
                &amp;#39;-&amp;#39; : 0,
                &amp;#39;*&amp;#39; : 1,
                &amp;#39;/&amp;#39; : 1,
                &amp;#39;^&amp;#39; : 2, }
                
def infixtorpn(infixexp):
    rpnexp = &amp;quot;&amp;quot;
    opstack = []
    for i in range(0, (len(infixexp) - 1)):
        token = infixexp[i]
        # Operands
        if token &amp;gt;= &amp;#39;a&amp;#39; and token &amp;lt;= &amp;#39;z&amp;#39;:
            rpnexp = rpnexp + token
            continue
        # Operators
        if token in operators:
            while len(opstack) &amp;gt; 0 and \
            opstack[-1] in operators and \
            operators[opstack[-1]] &amp;gt; operators[token]:
                rpnexp = rpnexp + opstack.pop()
            opstack.append(token)
            continue
        # Parenthesis
        if token == &amp;#39;(&amp;#39;:
            opstack.append(token)
            continue
        if token == &amp;#39;)&amp;#39;:
            while opstack[-1] != &amp;#39;(&amp;#39;:
                rpnexp = rpnexp + opstack.pop()
            opstack.pop()
            continue
    # Pop remaining operators into output
    while len(opstack) &amp;gt; 0 and opstack[-1] != &amp;#39;(&amp;#39;:
        rpnexp = rpnexp + opstack.pop()
    return rpnexp


# Number of test cases
testcases = input()
# Process each testcase
for testcase in range(0, testcases):
    print infixtorpn(raw_input())
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Thu, 26 Feb 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/02/26/codechef_probleme_onp_python.html</guid>
	</item>
	<item>
		<title>The Geek Cred</title>
		<link>https://blog.jkbockstael.be/posts/2009/02/25/the_geek_cred.html</link>
		<description>&lt;h1 id="the-geek-creed"&gt;The Geek Creed&lt;/h1&gt;
&lt;p&gt;Déniché sur &lt;a href="http://swedishcampground.com/this-is-my-compiler" title="Swedish Campground - The Geek Cred"&gt;Swedish Campground&lt;/a&gt;, The Geek Creed, sur le rythme du Marine Creed rendu célèbre par &lt;a href="http://www.youtube.com/watch?v=Ar0_um--LDQ" title="Full Metal Jacket, The Marine Cred"&gt;Full Metal Jacket&lt;/a&gt;. Du plein bonheur.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This is my compiler.&lt;br /&gt;
There are many like it, but this one is MINE.&lt;br /&gt;
My compiler is my best friend. It is my life.&lt;br /&gt;
I must master it as I must master my life.&lt;br /&gt;
My compiler without me is useless. Without my compiler, I am useless.&lt;br /&gt;
I must run my compiler true.&lt;br /&gt;
I must run faster than my bug who is trying to kill me.&lt;br /&gt;
I must squash him before he squashes me. I will...&lt;br /&gt;
My compiler and myself know that what counts in war is not the warnings we squash,&lt;br /&gt;
the builds we create, nor the optimisations we make.&lt;br /&gt;
We know it is the build errors fixed that count. We will fix...&lt;br /&gt;
My compiler is human, even as I, because it is my life.&lt;br /&gt;
Thus, I will learn it as a brother.&lt;br /&gt;
I will learn its weaknesses, its strengths, its output, its code,&lt;br /&gt;
its quirks, and its errors.&lt;br /&gt;
I will ever guard it against the ravages of virii and disk failures.&lt;br /&gt;
I will keep my compiler clean and ready, even as I am clean and ready.&lt;br /&gt;
We will become part of each other. We will...&lt;br /&gt;
Before Assembler I swear this creed.&lt;br /&gt;
My compiler and myself are the defenders of good code.&lt;br /&gt;
We are the masters of our bugs.&lt;br /&gt;
We are the saviors of our code.&lt;br /&gt;
So be it, until code is compiling and there are no bugs, but compiled code.&lt;br /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ben quoi?&lt;/p&gt;
</description>
		<pubDate>Wed, 25 Feb 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/02/25/the_geek_cred.html</guid>
	</item>
	<item>
		<title>Project Euler : solution au problème 17, en Python</title>
		<link>https://blog.jkbockstael.be/posts/2009/02/25/project_euler_17_python.html</link>
		<description>&lt;h1 id="project-euler--solution-au-problème-17-en-python"&gt;Project Euler : solution au problème 17, en Python&lt;/h1&gt;
&lt;p&gt;Le problème 17 est de la catégorie &amp;quot;bête et méchant à priori, mais qui se fait se gratter la tête avec vigueur pour obtenir une solution un peu élégante&amp;quot;. Il s&amp;#39;agit de calculer le nombre de caractères que représente l&amp;#39;énumération de tous les nombres de 1 à 1000 en toutes lettres, en anglais, en ignorant les espaces et les traits d&amp;#39;union.&lt;/p&gt;
&lt;p&gt;Distrayant :-)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#! /usr/bin/env python

# 2009/02/25 - euler017.py
# Solution au Probleme 17 de Project Euler
# http://projecteuler.net/index.php?section=problems&amp;amp;id=17
# Jean Karim Bockstael - jkb@jkbockstael.be

numbers = {
0:  &amp;quot;&amp;quot;,
    1:  &amp;quot;one&amp;quot;,
    2:  &amp;quot;two&amp;quot;,
    3:  &amp;quot;three&amp;quot;,
    4:  &amp;quot;four&amp;quot;,
    5:  &amp;quot;five&amp;quot;,
    6:  &amp;quot;six&amp;quot;,
    7:  &amp;quot;seven&amp;quot;,
    8:  &amp;quot;eight&amp;quot;,
    9:  &amp;quot;nine&amp;quot;,
    10: &amp;quot;ten&amp;quot;,
    11: &amp;quot;eleven&amp;quot;,
    12: &amp;quot;twelve&amp;quot;,
    13: &amp;quot;thirteen&amp;quot;,
    14: &amp;quot;fourteen&amp;quot;,
    15: &amp;quot;fifteen&amp;quot;,
    16: &amp;quot;sixteen&amp;quot;,
    17: &amp;quot;seventeen&amp;quot;,
    18: &amp;quot;eighteen&amp;quot;,
    19: &amp;quot;nineteen&amp;quot;,
    20: &amp;quot;twenty&amp;quot;,
    30: &amp;quot;thirty&amp;quot;,
    40: &amp;quot;forty&amp;quot;,
    50: &amp;quot;fifty&amp;quot;,
    60: &amp;quot;sixty&amp;quot;,
    70: &amp;quot;seventy&amp;quot;,
    80: &amp;quot;eighty&amp;quot;,
    90: &amp;quot;ninety&amp;quot;,
    100: &amp;quot;hundred&amp;quot;,
    1000: &amp;quot;thousand&amp;quot;
}

def spellout(num):
    if num &amp;lt; 21:
    return numbers[num]
    if num &amp;lt; 100:
    return numbers[num - (num % 10)] + numbers[num % 10]
    if num &amp;lt; 1000:
    if num % 100 == 0:
    return numbers[(num - (num % 100)) / 100] + numbers[100]
    else:
    return spellout(num - (num % 100)) + &amp;quot;and&amp;quot; + spellout(num % 100)
    if num == 1000:
    return numbers[1] + numbers[1000]

    def euler17(num):
        sum = 0
        for i in range(1, num+1):
            sum = sum + len(spellout(i))
            return sum
   
print euler17(1000)
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Wed, 25 Feb 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/02/25/project_euler_17_python.html</guid>
	</item>
	<item>
		<title>Project Euler : solution au problème 16, en Python</title>
		<link>https://blog.jkbockstael.be/posts/2009/02/25/project_euler_16_python.html</link>
		<description>&lt;h1 id="project-euler--solution-au-problème-16-en-python"&gt;Project Euler : solution au problème 16, en Python&lt;/h1&gt;
&lt;p&gt;Le problème 16 est un petit coquin, qui ressort le joker récurrent des problèmes de Project Euler: la très grande dimension du problème. En soi la question est bête comme chou: il s&amp;#39;agit de calculer la somme des chiffres d&amp;#39;une nombre.&lt;/p&gt;
&lt;p&gt;Facile! On voit d&amp;#39;elle-même sortir la boucle du genre:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;tant que nombre &amp;gt; base:
    somme = somme + nombre mod base
    nombre = nombre div base
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;D&amp;#39;ailleurs j&amp;#39;ai commencé par implémenter cet algorithme somme toute fort naturel. Je le teste sur l&amp;#39;exemple (2^15), il fonctionne bien, je l&amp;#39;applique au problème demandé. Et bardaf.&lt;/p&gt;
&lt;p&gt;Faut dire que ce qu&amp;#39;on demande c&amp;#39;est de donner la somme des chiffres du nombre 2^1000. Pour ceux qui n&amp;#39;auraient pas suivi, 2^1000 est un grand nombre. Genre grand. Genre 302 chiffres. Genre les types de base s&amp;#39;étranglent un peu face à ce genre de grandes valeurs.&lt;/p&gt;
&lt;p&gt;Donc il va falloir opérer de façon plus &amp;quot;école primaire&amp;quot;, chiffre par chiffre.&lt;/p&gt;
&lt;p&gt;En partant de ce principe-là:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;2^n = 2 * 2^n-1
    = 2 * 2 * 2^n-2
    = 2 * 2 * 2 * 2^n-3
    = ...
    = 2 * 2 * ... * 2 * 2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;C&amp;#39;est bien la définition d&amp;#39;un exposant non?&lt;/p&gt;
&lt;p&gt;Et:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;2^n = 2^n-1 + 2^n-1
    = (2^n-2 + 2^n-2) + (2^n-2 + 2^n-2)
    = ...
    = 2 + 2 + 2 + ... + 2 + 2 + 2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Donc mon algorithme commence par calculer 2^1000 par doubles successifs en partant de 2^1, en n&amp;#39;effectuant que des sommes, en gardant les chiffres dans une liste pour ne pas souffrir des problèmes de dimension; puis effectue le plus naïvement possible la somme de ces chiffres.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#! /usr/bin/env python

# 2009/02/24 - euler016.py
# Solution au Probleme 16 de Project Euler
# http://projecteuler.net/index.php?section=problems&amp;amp;id=16
# Jean Karim Bockstael - jkb@jkbockstael.be

def sumofdigits(num):
    sum = 0
    for i in range(0, len(num)):
        sum = sum + num[i]
    return sum

def doubleof(num):
    sum = []
    carry = 0
    for i in range(len(num) - 1, -1, -1):
        tmp = (num[i] * 2) + carry
        lastdigit = tmp % 10
        carry = (tmp - lastdigit) / 10
        sum = [lastdigit] + sum
    if carry != 0:
        sum = [carry] + sum
    return sum

def euler16(expo):
    bignum = [2]
    for i in range(1, expo):
        bignum = doubleof(bignum)
    return sumofdigits(bignum)
    
print euler16(1000)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Et un joli résultat en 3 secondes!&lt;/p&gt;
</description>
		<pubDate>Wed, 25 Feb 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/02/25/project_euler_16_python.html</guid>
	</item>
	<item>
		<title>Litanie contre la peur</title>
		<link>https://blog.jkbockstael.be/posts/2009/02/23/litanie_contre_la_peur.html</link>
		<description>&lt;h1 id="litanie-contre-la-peur"&gt;Litanie contre la peur&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Je ne connaîtrai pas la peur, car la peur tue l&amp;#39;esprit. La peur est la petite mort qui conduit à l&amp;#39;oblitération totale. J&amp;#39;affronterai ma peur. Je lui permettrai de passer sur moi, au travers de moi. Et lorsqu&amp;#39;elle sera passée, je tournerai mon œil intérieur sur son chemin. Et là où elle sera passée, il n&amp;#39;y aura plus rien. Rien que moi.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Je dévore ces temps-ci la saga de Dune (oui, le même Dune que le film de David Lynch ou que le jeu d&amp;#39;aventure/stratégie). C&amp;#39;est assez impressionnant de voir la quantité de sagesses qu&amp;#39;Herbert y distille, mais l&amp;#39;une des plus marquantes est bien cette litanie contre la peur, du Bene Gesserit.&lt;/p&gt;
&lt;p&gt;Allez, en anglais dans le texte:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. And when it has gone past I will turn the inner eye to see its path. Where the fear has gone there will be nothing. Only I will remain.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Pour ceux qui n&amp;#39;auraient pas encore lu Dune, faites-le. C&amp;#39;est sans doute l&amp;#39;ouvrage de science-fiction qui accorde le plus de place à la spiritualité et le moins à la science. De la science-fiction pour ceux qui n&amp;#39;aiment pas la science-fiction.&lt;/p&gt;
</description>
		<pubDate>Mon, 23 Feb 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/02/23/litanie_contre_la_peur.html</guid>
	</item>
	<item>
		<title>Project Euler : solution au problème 15, en Python</title>
		<link>https://blog.jkbockstael.be/posts/2009/02/20/project_euler_15_python.html</link>
		<description>&lt;h1 id="project-euler--solution-au-problème-15-en-python"&gt;Project Euler : solution au problème 15, en Python&lt;/h1&gt;
&lt;p&gt;Dans l&amp;#39;enchaînement, ou presque, une solution au problème 15. Le problème 15 est un peu effrayant puisqu&amp;#39;il a un énoncé du genre qui déroute à priori, à savoir &amp;quot;Il y a 6 chemins (sans retour en arrière) pour aller du coin supérieur gauche au coin inférieur droit dans une grille de 2x2; combien y a-t-il de chemins dans une grille de 20x20?&amp;quot;.&lt;/p&gt;
&lt;p&gt;Ouch.&lt;/p&gt;
&lt;p&gt;Papier, crayon...&lt;/p&gt;
&lt;p&gt;Sur une grille de dimension 1, il y a 2 chemins possibles.
Sur une grille de dimension 2, il y a 6 chemins possibles.
Sur une grille de dimension 3, il y a 20 chemins possibles.
Sur une grille de dimension 4, il y a 70 chemins possibles (non je ne les ai pas énumérés sur papier ceux-là).
...&lt;/p&gt;
&lt;p&gt;Ces valeurs ne sont forcément pas innocentes. Plus précisément, ce sont les valeurs centrales du triangle de Pascal, pour les lignes où &amp;quot;valeur centrale&amp;quot; a un sens.&lt;/p&gt;
&lt;p&gt;Mon algorithme se base là-dessus.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#! /usr/bin/env python

# 2009/02/20 - euler015.py
# Solution au Probleme 15 de Project Euler
# http://projecteuler.net/index.php?section=problems&amp;amp;id=15
# Jean Karim Bockstael - jkb@jkbockstael.be

def pascaltrirow(row):
    if row == 1:
        return [1]
    else:
        upper = pascaltrirow(row - 1)
        current = [1]
        for i in range(1, len(upper)):
            current.append(upper[i] + upper[i - 1])
        current.append(1)
        return current

def pascaltricell(row, col):
    currow = pascaltrirow(row)
    return currow[col - 1]
        
def euler15(size):
    centralvalue = pascaltricell((size * 2) + 1, size + 1)
    return centralvalue

print euler15(20)
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Fri, 20 Feb 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/02/20/project_euler_15_python.html</guid>
	</item>
	<item>
		<title>Project Euler : solution au problème 14, en Python</title>
		<link>https://blog.jkbockstael.be/posts/2009/02/20/project_euler_14_python.html</link>
		<description>&lt;h1 id="project-euler--solution-au-problème-14-en-python"&gt;Project Euler : solution au problème 14, en Python&lt;/h1&gt;
&lt;p&gt;Rien de tel pour bien digérer, que de digérer des nombres. Le problème 14 joue avec ce qu&amp;#39;on appelle souvent la &amp;quot;suite de Syracuse&amp;quot;. Cette suite est simple: partant d&amp;#39;un entier strictement positif, on progresse ainsi:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;si l&amp;#39;entier est pair, on le divise par deux&lt;/li&gt;
&lt;li&gt;si l&amp;#39;entier est impair, on le multiplie par trois et on ajoute 1 au résultat&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Il est supposé mais pas prouvé que quel que soit l&amp;#39;entier de départ, cette suite atteint toujours 1 (puis boucle infiniment: 1, 4, 2, 1, ...). Le nombre de pas avant d&amp;#39;atteindre cette limite peut être très grand. Ici on cherche le nombre entier inférieur à un million donnant lieu à la plus longue suite de Syracuse.&lt;/p&gt;
&lt;p&gt;... suite de 525 éléments, mine de rien ...&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#! /usr/bin/env python

# 2009/02/20 - euler014.py
# Solution au Probleme 14 de Project Euler
# http://projecteuler.net/index.php?section=problems&amp;amp;id=14
# Jean Karim Bockstael - jkb@jkbockstael.be

def collatznext(num):
    if (num % 2 == 0):
        return num / 2
    else:
        return (3 * num) + 1
        
def collatzlength(start):
    length = 2 # En comptant le seed et le 1 final
    next = collatznext(start)
    while next != 1:
        length = length + 1
        next = collatznext(next)
    return length
    
def euler14(limit):
    maxlength = 0
    maxseed = 0
    for i in range (1, limit):
        thislength = collatzlength(i)
        if thislength &amp;gt; maxlength:
            maxlength = thislength
            maxseed = i
    return maxseed

print euler14(1000000)
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Fri, 20 Feb 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/02/20/project_euler_14_python.html</guid>
	</item>
	<item>
		<title>Project Euler : solution au problème 13, en Python</title>
		<link>https://blog.jkbockstael.be/posts/2009/02/20/project_euler_13_python.html</link>
		<description>&lt;h1 id="project-euler--solution-au-problème-13-en-python"&gt;Project Euler : solution au problème 13, en Python&lt;/h1&gt;
&lt;p&gt;On continue dans la joie et l&amp;#39;allégresse avec un de ces problèmes qui nous ramènent illico en école primaire. Le problème 13 nous demande d&amp;#39;effectuer la somme de 100 nombres de 50 chiffres chacun, et de renvoyer les dix premiers chiffres de cette somme.&lt;/p&gt;
&lt;p&gt;La bonne vieille addition à l&amp;#39;ancienne, donc!&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#! /usr/bin/env python

# 2009/02/20 - euler013.py
# Solution au Probleme 13 de Project Euler
# http://projecteuler.net/index.php?section=problems&amp;amp;id=13
# Jean Karim Bockstael - jkb@jkbockstael.be

def inputparser(raw):
    intsarray = []
    for i in range(0, 100):
        tmp = []
        for j in range(0, 50):
            tmp.append(int(raw[i][j]))
        intsarray.append(tmp)
    return intsarray
    
def euler13(array):
    carry = 0
    totalsum = []
    for col in range(49, -1, -1):
        colsum = 0
        for lin in range(0, 100):
            colsum = colsum + array[lin][col]
        colsum = colsum + carry
        lastdigit = colsum % 10
        carry = (colsum - lastdigit) / 10
        totalsum.insert(0, lastdigit)
    totalsum.insert(0, carry)
    # Petit tour de passe-passe
    firstten = &amp;#39;&amp;#39;
    for i in range(0, 10):
        firstten = firstten + str(totalsum[i])
    firstten = int(firstten[0:10])
    return firstten

# Donnees du probleme, flemme de faire un vrai parser
rawints = [
&amp;#39;37107287533902102798797998220837590246510135740250&amp;#39;,
&amp;#39;46376937677490009712648124896970078050417018260538&amp;#39;,
&amp;#39;74324986199524741059474233309513058123726617309629&amp;#39;,
&amp;#39;91942213363574161572522430563301811072406154908250&amp;#39;,
&amp;#39;23067588207539346171171980310421047513778063246676&amp;#39;,
&amp;#39;89261670696623633820136378418383684178734361726757&amp;#39;,
&amp;#39;28112879812849979408065481931592621691275889832738&amp;#39;,
&amp;#39;44274228917432520321923589422876796487670272189318&amp;#39;,
&amp;#39;47451445736001306439091167216856844588711603153276&amp;#39;,
&amp;#39;70386486105843025439939619828917593665686757934951&amp;#39;,
&amp;#39;62176457141856560629502157223196586755079324193331&amp;#39;,
&amp;#39;64906352462741904929101432445813822663347944758178&amp;#39;,
&amp;#39;92575867718337217661963751590579239728245598838407&amp;#39;,
&amp;#39;58203565325359399008402633568948830189458628227828&amp;#39;,
&amp;#39;80181199384826282014278194139940567587151170094390&amp;#39;,
&amp;#39;35398664372827112653829987240784473053190104293586&amp;#39;,
&amp;#39;86515506006295864861532075273371959191420517255829&amp;#39;,
&amp;#39;71693888707715466499115593487603532921714970056938&amp;#39;,
&amp;#39;54370070576826684624621495650076471787294438377604&amp;#39;,
&amp;#39;53282654108756828443191190634694037855217779295145&amp;#39;,
&amp;#39;36123272525000296071075082563815656710885258350721&amp;#39;,
&amp;#39;45876576172410976447339110607218265236877223636045&amp;#39;,
&amp;#39;17423706905851860660448207621209813287860733969412&amp;#39;,
&amp;#39;81142660418086830619328460811191061556940512689692&amp;#39;,
&amp;#39;51934325451728388641918047049293215058642563049483&amp;#39;,
&amp;#39;62467221648435076201727918039944693004732956340691&amp;#39;,
&amp;#39;15732444386908125794514089057706229429197107928209&amp;#39;,
&amp;#39;55037687525678773091862540744969844508330393682126&amp;#39;,
&amp;#39;18336384825330154686196124348767681297534375946515&amp;#39;,
&amp;#39;80386287592878490201521685554828717201219257766954&amp;#39;,
&amp;#39;78182833757993103614740356856449095527097864797581&amp;#39;,
&amp;#39;16726320100436897842553539920931837441497806860984&amp;#39;,
&amp;#39;48403098129077791799088218795327364475675590848030&amp;#39;,
&amp;#39;87086987551392711854517078544161852424320693150332&amp;#39;,
&amp;#39;59959406895756536782107074926966537676326235447210&amp;#39;,
&amp;#39;69793950679652694742597709739166693763042633987085&amp;#39;,
&amp;#39;41052684708299085211399427365734116182760315001271&amp;#39;,
&amp;#39;65378607361501080857009149939512557028198746004375&amp;#39;,
&amp;#39;35829035317434717326932123578154982629742552737307&amp;#39;,
&amp;#39;94953759765105305946966067683156574377167401875275&amp;#39;,
&amp;#39;88902802571733229619176668713819931811048770190271&amp;#39;,
&amp;#39;25267680276078003013678680992525463401061632866526&amp;#39;,
&amp;#39;36270218540497705585629946580636237993140746255962&amp;#39;,
&amp;#39;24074486908231174977792365466257246923322810917141&amp;#39;,
&amp;#39;91430288197103288597806669760892938638285025333403&amp;#39;,
&amp;#39;34413065578016127815921815005561868836468420090470&amp;#39;,
&amp;#39;23053081172816430487623791969842487255036638784583&amp;#39;,
&amp;#39;11487696932154902810424020138335124462181441773470&amp;#39;,
&amp;#39;63783299490636259666498587618221225225512486764533&amp;#39;,
&amp;#39;67720186971698544312419572409913959008952310058822&amp;#39;,
&amp;#39;95548255300263520781532296796249481641953868218774&amp;#39;,
&amp;#39;76085327132285723110424803456124867697064507995236&amp;#39;,
&amp;#39;37774242535411291684276865538926205024910326572967&amp;#39;,
&amp;#39;23701913275725675285653248258265463092207058596522&amp;#39;,
&amp;#39;29798860272258331913126375147341994889534765745501&amp;#39;,
&amp;#39;18495701454879288984856827726077713721403798879715&amp;#39;,
&amp;#39;38298203783031473527721580348144513491373226651381&amp;#39;,
&amp;#39;34829543829199918180278916522431027392251122869539&amp;#39;,
&amp;#39;40957953066405232632538044100059654939159879593635&amp;#39;,
&amp;#39;29746152185502371307642255121183693803580388584903&amp;#39;,
&amp;#39;41698116222072977186158236678424689157993532961922&amp;#39;,
&amp;#39;62467957194401269043877107275048102390895523597457&amp;#39;,
&amp;#39;23189706772547915061505504953922979530901129967519&amp;#39;,
&amp;#39;86188088225875314529584099251203829009407770775672&amp;#39;,
&amp;#39;11306739708304724483816533873502340845647058077308&amp;#39;,
&amp;#39;82959174767140363198008187129011875491310547126581&amp;#39;,
&amp;#39;97623331044818386269515456334926366572897563400500&amp;#39;,
&amp;#39;42846280183517070527831839425882145521227251250327&amp;#39;,
&amp;#39;55121603546981200581762165212827652751691296897789&amp;#39;,
&amp;#39;32238195734329339946437501907836945765883352399886&amp;#39;,
&amp;#39;75506164965184775180738168837861091527357929701337&amp;#39;,
&amp;#39;62177842752192623401942399639168044983993173312731&amp;#39;,
&amp;#39;32924185707147349566916674687634660915035914677504&amp;#39;,
&amp;#39;99518671430235219628894890102423325116913619626622&amp;#39;,
&amp;#39;73267460800591547471830798392868535206946944540724&amp;#39;,
&amp;#39;76841822524674417161514036427982273348055556214818&amp;#39;,
&amp;#39;97142617910342598647204516893989422179826088076852&amp;#39;,
&amp;#39;87783646182799346313767754307809363333018982642090&amp;#39;,
&amp;#39;10848802521674670883215120185883543223812876952786&amp;#39;,
&amp;#39;71329612474782464538636993009049310363619763878039&amp;#39;,
&amp;#39;62184073572399794223406235393808339651327408011116&amp;#39;,
&amp;#39;66627891981488087797941876876144230030984490851411&amp;#39;,
&amp;#39;60661826293682836764744779239180335110989069790714&amp;#39;,
&amp;#39;85786944089552990653640447425576083659976645795096&amp;#39;,
&amp;#39;66024396409905389607120198219976047599490197230297&amp;#39;,
&amp;#39;64913982680032973156037120041377903785566085089252&amp;#39;,
&amp;#39;16730939319872750275468906903707539413042652315011&amp;#39;,
&amp;#39;94809377245048795150954100921645863754710598436791&amp;#39;,
&amp;#39;78639167021187492431995700641917969777599028300699&amp;#39;,
&amp;#39;15368713711936614952811305876380278410754449733078&amp;#39;,
&amp;#39;40789923115535562561142322423255033685442488917353&amp;#39;,
&amp;#39;44889911501440648020369068063960672322193204149535&amp;#39;,
&amp;#39;41503128880339536053299340368006977710650566631954&amp;#39;,
&amp;#39;81234880673210146739058568557934581403627822703280&amp;#39;,
&amp;#39;82616570773948327592232845941706525094512325230608&amp;#39;,
&amp;#39;22918802058777319719839450180888072429661980811197&amp;#39;,
&amp;#39;77158542502016545090413245809786882778948721859617&amp;#39;,
&amp;#39;72107838435069186155435662884062257473692284509516&amp;#39;,
&amp;#39;20849603980134001723930671666823555245252804609722&amp;#39;,
&amp;#39;53503534226472524250874054075591789781264330331690&amp;#39;
]

print euler13(inputparser(rawints))
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Fri, 20 Feb 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/02/20/project_euler_13_python.html</guid>
	</item>
	<item>
		<title>Project Euler : meilleure solution au problème 12, en Python</title>
		<link>https://blog.jkbockstael.be/posts/2009/02/19/project_euler_12_python.html</link>
		<description>&lt;h1 id="project-euler--meilleure-solution-au-problème-12-en-python"&gt;Project Euler : meilleure solution au problème 12, en Python&lt;/h1&gt;
&lt;p&gt;J&amp;#39;avais posté lundi &lt;a href="http://blog.jkbockstael.be/posts/2009/02/16/project_euler_12_python.html"&gt;une solution très &amp;quot;premier jet&amp;quot;&lt;/a&gt; et absolument brutale pour le problème 12 de Project Euler. Evidemment, ceux qui auraient essayé d&amp;#39;exécuter ce programme auront remarqué à quel point le force brute mène à des temps d&amp;#39;exécution gigantesques. En tout cas d&amp;#39;un ordre de grandeur beaucoup trop loin de la &amp;quot;règle de la minute&amp;quot; pour être honnête.&lt;/p&gt;
&lt;p&gt;Mais j&amp;#39;avais promis de faire plus propre plus tard, donc chose promise chose due.&lt;/p&gt;
&lt;p&gt;L&amp;#39;idée ici se base sur une propriété amusante, c&amp;#39;est que si &lt;code&gt;D(n)&lt;/code&gt; est le nombre total de diviseurs d&amp;#39;un naturel (1 et lui-même compris, bien sûr), alors &lt;code&gt;D(n) = (a1 + 1) + (a2 + 2) + ...&lt;/code&gt; où les &lt;code&gt;a1 a2...&lt;/code&gt; sont les exposants des facteurs premiers de &lt;code&gt;n&lt;/code&gt;. Pratique.&lt;/p&gt;
&lt;p&gt;Donc ce programme-ci, après avoir établi une liste de nombre premier assez grande compte tenu de la taille du problème (évaluation à la louche, j&amp;#39;avoue), va chercher pour chaque candidat le nombre de ses diviseurs en utilisant la propriété énoncée ci-dessus. Et ça va nettement plus vite, puisqu&amp;#39;on passe de plusieurs heures de calcul à... 35 secondes.&lt;/p&gt;
&lt;p&gt;Encore une belle leçon sur l&amp;#39;utilité de trouver un algorithme plus performant que le premier jet.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#! /usr/bin/env python

# 2009/02/19 - euler012-2.py
# Meilleure solution au Probleme 12 de Project Euler
# http://projecteuler.net/index.php?section=problems&amp;amp;id=12
# Jean Karim Bockstael - jkb@jkbockstael.be

def trianglenumber(n):
    return (n * (n - 1) / 2)

def numberofdivisors(n, primes):
    # Recherche des facteurs premiers de n
    factors = []
    i = 0
    while i &amp;lt; len(primes) and primes[i] &amp;lt;= n / 2:
        if n % primes[i] == 0:
            factors.append(primes[i])
        i = i + 1
    # Pour chaque facteur premier, recherche de son exposant
    exponents =[]
    for i in range(0, len(factors)):
        exponent = 0;
        while n % factors[i] == 0:
            exponent = exponent + 1
            n = n / factors[i]
        exponents.append(exponent)
    # Calcul du nombre total de diviseurs
    cnt = 1
    for i in range(0, len(exponents)):
        cnt = cnt * (exponents[i] + 1)
    return cnt

def getfirstprimes(n):
    primes = [2]
    count = 1
    cand = 3
    while count &amp;lt; n:
        i = 0
        while i &amp;lt; len(primes):
            if cand % primes[i] == 0:
                break
            i = i + 1
        if i == len(primes):
            primes.append(cand)
            count = count + 1
        cand = cand + 2
    return primes
    
def euler12(n):
    primes = getfirstprimes(n * 10) # Largement assez
    rank = 1
    tri = trianglenumber(rank)
    while numberofdivisors(tri, primes) &amp;lt;= n:
        rank = rank + 1
        tri = trianglenumber(rank)
    return tri
    
print euler12(500)
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Thu, 19 Feb 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/02/19/project_euler_12_python.html</guid>
	</item>
	<item>
		<title>Project Euler : solution au problème 11, en Python</title>
		<link>https://blog.jkbockstael.be/posts/2009/02/19/project_euler_11_python.html</link>
		<description>&lt;h1 id="project-euler--solution-au-problème-11-en-python"&gt;Project Euler : solution au problème 11, en Python&lt;/h1&gt;
&lt;p&gt;Je trouvais que ça faisait un peu désordre d&amp;#39;avoir passé outre le problème 11, attiré par le coté plus &amp;quot;élégant&amp;quot; du problème 12. Une fois posté une solution élégante au problème 12, il me restait à combler ce trou en proposant une solution au problème 11.&lt;/p&gt;
&lt;p&gt;Bon, par contre elle n&amp;#39;est pas de la plus grande des élégances, mais étant donné la nature du problème j&amp;#39;ai du mal à entrevoir comment rendre ça plus &amp;quot;clever&amp;quot;. Et puis bon, 41 millisecondes pour donner le bon résultat, on va pas non plus tortiller...&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#! /usr/bin/env python

# 2009/02/19 - euler011.py
# Solution au Probleme 11 de Project Euler
# http://projecteuler.net/index.php?section=problems&amp;amp;id=11
# Jean Karim Bockstael - jkb@jkbockstael.be

def euler11(grid):
    maxprod = 0
    temp = 0
    # Lignes
    for i in range(0, 20):
        for j in range(0, 16):
            temp = grid[i][j]*grid[i][j+1]*grid[i][j+2]*grid[i][j+3]
            if temp &amp;gt; maxprod:
                maxprod = temp
    # Colonnes
    for j in range(0, 20):
        for i in range(0, 16):
            temp = grid[i][j]*grid[i+1][j]*grid[i+2][j]*grid[i+3][j]
            if temp &amp;gt; maxprod:
                maxprod = temp
    # Diagonales NO-SE
    for i in range(0, 16):
        for j in range(0, 16):
            temp = grid[i][j]*grid[i+1][j+1]*grid[i+2][j+2]*grid[i+3][j+3]
            if temp &amp;gt; maxprod:
                maxprod = temp
    # Diagonales SO-NE
    for i in range(3,20):
        for j in range(0,16):
            temp = grid[i][j]*grid[i-1][j+1]*grid[i-2][j+2]*grid[i-3][j+3]
            if temp &amp;gt; maxprod:
                maxprod = temp
    return maxprod


# Les donnees du probleme, pour s&amp;#39;epargner un parse
# On a donc numbergrid[ligne, colonne]
# Pour ligne et colonne de 0 a 19 inclus
numbergrid = [
[ 8, 2,22,97,38,15, 0,40, 0,75, 4, 5, 7,78,52,12,50,77,91, 8],
[49,49,99,40,17,81,18,57,60,87,17,40,98,43,69,48, 4,56,62, 0],
[81,49,31,73,55,79,14,29,93,71,40,67,53,88,30, 3,49,13,36,65],
[52,70,95,23, 4,60,11,42,69,24,68,56, 1,32,56,71,37, 2,36,91],
[22,31,16,71,51,67,63,89,41,92,36,54,22,40,40,28,66,33,13,80],
[24,47,32,60,99, 3,45, 2,44,75,33,53,78,36,84,20,35,17,12,50],
[32,98,81,28,64,23,67,10,26,38,40,67,59,54,70,66,18,38,64,70],
[67,26,20,68, 2,62,12,20,95,63,94,39,63, 8,40,91,66,49,94,21],
[24,55,58, 5,66,73,99,26,97,17,78,78,96,83,14,88,34,89,63,72],
[21,36,23, 9,75, 0,76,44,20,45,35,14, 0,61,33,97,34,31,33,95],
[78,17,53,28,22,75,31,67,15,94, 3,80, 4,62,16,14, 9,53,56,92],
[16,39, 5,42,96,35,31,47,55,58,88,24, 0,17,54,24,36,29,85,57],
[86,56, 0,48,35,71,89, 7, 5,44,44,37,44,60,21,58,51,54,17,58],
[19,80,81,68, 5,94,47,69,28,73,92,13,86,52,17,77, 4,89,55,40],
[04,52, 8,83,97,35,99,16, 7,97,57,32,16,26,26,79,33,27,98,66],
[88,36,68,87,57,62,20,72, 3,46,33,67,46,55,12,32,63,93,53,69],
[04,42,16,73,38,25,39,11,24,94,72,18, 8,46,29,32,40,62,76,36],
[20,69,36,41,72,30,23,88,34,62,99,69,82,67,59,85,74, 4,36,16],
[20,73,35,29,78,31,90, 1,74,31,49,71,48,86,81,16,23,57, 5,54],
[01,70,54,71,83,51,54,69,16,92,33,48,61,43,52, 1,89,19,67,48]
]

print euler11(numbergrid)
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Thu, 19 Feb 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/02/19/project_euler_11_python.html</guid>
	</item>
	<item>
		<title>Project Euler : Solution au problème 12, en Python</title>
		<link>https://blog.jkbockstael.be/posts/2009/02/16/project_euler_12_python.html</link>
		<description>&lt;h1 id="project-euler--solution-au-problème-12-en-python"&gt;Project Euler : Solution au problème 12, en Python&lt;/h1&gt;
&lt;p&gt;Oui, je propose une solution au problème 12 avant d&amp;#39;en proposer une au problème 11. Il était un brin plus &amp;quot;joli&amp;quot; dans le sens où la solution que je propose ici est du type bien brutal, mais compact.&lt;/p&gt;
&lt;p&gt;Attention quand même, c&amp;#39;est de l&amp;#39;algorithme brutalement systématique, donc très lent. Loin au-delà de la minute sacrée, mais correct. Je concocterai une version plus rapide à mes heures perdues (Arnaud si tu me lis, maintenant tu sauras ce que je fais si tu vois du Python au lieu de voir du Java sur mon écran).&lt;/p&gt;
&lt;p&gt;And now for the gory part...&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#! /usr/bin/env python

# 2009/02/13 - euler012.py
# Solution au Probleme 12 de Project Euler
# http://projecteuler.net/index.php?section=problems&amp;amp;id=12
# Jean Karim Bockstael - jkb@jkbockstael.be

def trianglenumber(n):
    return (n * (n - 1) / 2)

def numberofdivisors(n):
    cnt = 1
    for i in range (1, n / 2 + 1):
        if n % i == 0:
            cnt = cnt + 1
    return cnt
    
def euler12(n):
    rank = 1
    tri = trianglenumber(rank)
    while numberofdivisors(tri) &amp;lt;= n:
        rank = rank + 1
        tri = trianglenumber(rank)
    return tri
    
print euler12(500)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Le lecteur attentif remarquera que ça date d&amp;#39;avant le week-end...&lt;/p&gt;
</description>
		<pubDate>Mon, 16 Feb 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/02/16/project_euler_12_python.html</guid>
	</item>
	<item>
		<title>Conduisez l'originale</title>
		<link>https://blog.jkbockstael.be/posts/2009/02/16/conduisez_originale.html</link>
		<description>&lt;h1 id="conduisez-loriginale"&gt;Conduisez l&amp;#39;originale.&lt;/h1&gt;
&lt;p&gt;Croisé tout à l&amp;#39;heure dans les rues de Liège.&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2009/02/16/conduisez_originale_attachments/20090216_mini.jpg" title="Mini - haute résolution"&gt;&lt;img src="//blog.jkbockstael.be/posts/2009/02/16/conduisez_originale_attachments/20090216_mini_thumb.jpg" alt="Mini - miniature"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Voici un conducteur fidèle aux racines et fier de l&amp;#39;être. Cela dit, je ne peux que l&amp;#39;approuver, autant les Mini de nouvelle génération n&amp;#39;ont plus grand-chose de &amp;quot;mini&amp;quot;, autant la sienne avait une touche, un style, un caractère bien à elle. Etant du genre &amp;quot;miniature&amp;quot; moi-même je me verrais bien fier propriétaire d&amp;#39;un de ces vénérables vétérans indémodables :-)&lt;/p&gt;
</description>
		<pubDate>Mon, 16 Feb 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/02/16/conduisez_originale.html</guid>
	</item>
	<item>
		<title>HOWTO travailler avec le sourire</title>
		<link>https://blog.jkbockstael.be/posts/2009/02/09/howto_travailler_avec_le_sourire.html</link>
		<description>&lt;h1 id="howto-travailler-avec-le-sourire"&gt;HOWTO travailler avec le sourire&lt;/h1&gt;
&lt;p&gt;Il y en a qu&amp;#39;une journée de travail terrifie, il y en a qu&amp;#39;une journée de travail face à un ordinateur peut encore plus terrifier. Et j&amp;#39;en connais beaucoup qui seraient à la frange de l&amp;#39;infarctus si je leur disais ce que je fais et sur quoi je le fais.&lt;/p&gt;
&lt;p&gt;Mais j&amp;#39;ai mon petit truc à moi pour garder le sourire, un peu à la manière d&amp;#39;Homer.&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2009/02/09/howto_travailler_avec_le_sourire_attachments/20090209_gibson.jpg" title="Gibson - haute résolution"&gt;&lt;img src="//blog.jkbockstael.be/posts/2009/02/09/howto_travailler_avec_le_sourire_attachments/20090209_gibson_thumb.jpg" alt="Gibson - miniature"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Pour les curieux, c&amp;#39;est une croisée braque d&amp;#39;un peu moins d&amp;#39;un an qui devrait répondre au nom de Gibson mais se voit attribuer tellement de surnoms qu&amp;#39;elle ne sait plus vraiment à quoi s&amp;#39;en tenir. En fond d&amp;#39;un bureau Gnome, sous Ubuntu, dans VirtualBox, qui est lancé dans une unique fenêtre Ratpoison, sur une machine hôte Debian. Ouf!&lt;/p&gt;
&lt;p&gt;De quoi reprendre de la bonne humeur en un clin d&amp;#39;oeil :-)&lt;/p&gt;
</description>
		<pubDate>Mon, 09 Feb 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/02/09/howto_travailler_avec_le_sourire.html</guid>
	</item>
	<item>
		<title>Paul Boutin ou l'art de ne pas vérifier ses sources</title>
		<link>https://blog.jkbockstael.be/posts/2009/01/29/paul_boutin_art_de_ne_pas_verifier_ses_sources.html</link>
		<description>&lt;h1 id="paul-boutin-ou-lart-de-ne-pas-vérifier-ses-sources"&gt;Paul Boutin ou l&amp;#39;art de ne pas vérifier ses sources&lt;/h1&gt;
&lt;p&gt;J&amp;#39;ai &lt;a href="http://blog.jkbockstael.be/posts/2008/12/08/les-blogs_detrones_par_twitter.html"&gt;déjà mentionné&lt;/a&gt; une bourde de Paul Boutin, journaliste pour Wired, auparavant. Voilà qu&amp;#39;il revient en force, puisque cette fois-ci son billet est essentiellement constitué d&amp;#39;une citation qu&amp;#39;il attribue à quelqu&amp;#39;un qui n&amp;#39;en est pas l&amp;#39;auteur!&lt;/p&gt;
&lt;p&gt;Il faut croire que l&amp;#39;ami Boutin aime à ce point les jolis titres qu&amp;#39;il se rue sur le clavier sans chercher à comprendre où à vérifier. Dans &lt;a href="http://www.thestandard.com/news/2009/01/28/google-apps-customers-say-domains-arent-being-renewed"&gt;un billet&lt;/a&gt; sur le blog &lt;em&gt;The Industry Standard&lt;/em&gt;, il relaie une plainte d&amp;#39;un client de Google Apps qui malgré son paiement n&amp;#39;a pas vu son domaine renouvelé (et on peut facilement comprendre que ça le froisse). &lt;/p&gt;
&lt;p&gt;Cette plainte, il l&amp;#39;attribue à Joel Spolsky, très connu pour son blog &lt;a href="http://www.joelonsoftware.com/"&gt;Joel on Software&lt;/a&gt; où il dispense ses idées et conseils en matière de développement logiciel et surtout sur les arcanes économiques qui tournent autour. Joel Spolsky est accessoirement le fondateur de Fog Creek Software, dont les employés bénéficient à mon sens du plus merveilleux environnement de travail dont puisse rêver un programmeur, et les attentifs auront remarqué qu&amp;#39;il est l&amp;#39;un des cerveaux imaginatifs derrière Stack Overflow. Une figure, donc.&lt;/p&gt;
&lt;p&gt;Quel est le problème alors? Tout simplement que cette plainte à l&amp;#39;égard de Google n&amp;#39;a pas été formulée par Joel Spolsky, mais par &lt;a href="http://discuss.joelonsoftware.com/default.asp?biz.5.730915.0"&gt;un internaute anonyme sur le forum&lt;/a&gt; attaché à &lt;em&gt;Joel on Software&lt;/em&gt;. Ça se remarqué facilement au fait que ladite plainte n&amp;#39;est pas signée, et que Joel commente plus bas en signant ses commentaires.&lt;/p&gt;
&lt;p&gt;Oups.&lt;/p&gt;
</description>
		<pubDate>Thu, 29 Jan 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/01/29/paul_boutin_art_de_ne_pas_verifier_ses_sources.html</guid>
	</item>
	<item>
		<title>Fibonacci en petits points</title>
		<link>https://blog.jkbockstael.be/posts/2009/01/21/fibonacci_en_petits_points.html</link>
		<description>&lt;h1 id="fibonacci-en-petits-points"&gt;Fibonacci en petits points&lt;/h1&gt;
&lt;p&gt;Allez un petit cracker de code Python parce que c&amp;#39;est croustillant et bon et que ça ne fait pas trop grossir. Une visualisation des premiers termes de la suite de Fibonacci, jusqu&amp;#39;à la largeur d&amp;#39;affichage que vous voulez, dans les caractères que vous voulez.&lt;/p&gt;
&lt;p&gt;Inutile donc indispensable.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#! /usr/bin/env python

# 2009/01/21 - fibodot.py
# Visualisation de la suite de Fibonacci
# Jean Karim Bockstael - jkb@jkbockstael.be

def fibodot(n, c):
    a = 0
    b = 1
    while b &amp;lt; n :
        print b * c
        a, b = b, a + b
        
fibodot(80, &amp;#39;.&amp;#39;)
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Wed, 21 Jan 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/01/21/fibonacci_en_petits_points.html</guid>
	</item>
	<item>
		<title>Tranche ronde de vie</title>
		<link>https://blog.jkbockstael.be/posts/2009/01/19/tranche_ronde_de_vie.html</link>
		<description>&lt;h1 id="tranche-ronde-de-vie"&gt;Tranche ronde de vie&lt;/h1&gt;
&lt;p&gt;Oui j&amp;#39;étais relativement occupé. Ou peu motivé. Ou les deux. Sale combinaison dont se moque le temps qui continue de tourner les pages du calendrier toutes les 24 heures.&lt;/p&gt;
&lt;p&gt;Pas de code neuf à se mettre sous la dent, et je ne vais pas parler de la santé de Steve Jobs. J&amp;#39;ai promis.&lt;/p&gt;
&lt;p&gt;Et la tranche ronde de vie? Petit curieux va!&lt;/p&gt;
&lt;p&gt;La voici. &lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2009/01/19/tranche_ronde_de_vie_attachments/20090119_mat.jpg" title="Mousepad - haute résolution"&gt;&lt;img src="//blog.jkbockstael.be/posts/2009/01/19/tranche_ronde_de_vie_attachments/20090119_mat_thumb.jpg" alt="Mousepad - miniature"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Exécutée du bout d&amp;#39;un ongle belge sur un tapis de souris suédois mais néanmoins usé, pris entre un ordinateur californien fabriqué en asie également ayant vu passer le poids des ans, et une souris à la mine plus réjouie mais au kilométrage non moins certain contrairement à son origine, le tout baigné par la dérive musicale d&amp;#39;un britannique qui se sait indien.&lt;/p&gt;
&lt;p&gt;Ça me donne envie de relire Adams tiens.&lt;/p&gt;
</description>
		<pubDate>Mon, 19 Jan 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/01/19/tranche_ronde_de_vie.html</guid>
	</item>
	<item>
		<title>Mastermind, quick and dirty as it gets.</title>
		<link>https://blog.jkbockstael.be/posts/2009/01/08/mastermind_quick_and_dirty.html</link>
		<description>&lt;h1 id="mastermind-quick-and-dirty-as-it-gets"&gt;Mastermind, quick and dirty as it gets.&lt;/h1&gt;
&lt;p&gt;Hop, en vitesse le temps que l&amp;#39;eau chauffe pour un thé, un petit jeu de quasi-Mastermind pondu d&amp;#39;un seul trait en Python. Le principe est le même que celui du jeu original, mais avec un gameplay un peu adapté: le code est composé de 4 chiffres entre 0 et 9 inclus, on dispose de 5 essais pour le trouver. A chaque essai le jeu donne un indice pour raffiner l&amp;#39;essai suivant: un &amp;quot;o&amp;quot; pour un bon chiffre à la bonne place, un &amp;quot;x&amp;quot; pour un bon chiffre à la mauvaise place, un &amp;quot;_&amp;quot; pour un mauvais chiffre. Nettement plus sympathique que le &amp;quot;vrai&amp;quot; Mastermind, pour ça qu&amp;#39;on a beaucoup moins d&amp;#39;essais :)&lt;/p&gt;
&lt;p&gt;Pas de vérification, on suppose que l&amp;#39;utilisateur sait ce qu&amp;#39;il fait.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#! /usr/bin/env python

# 2009/01/08 - mastermind-0.py
# Jeu de Mastermind, premier jet
# Jean Karim Bockstael - jkb@jkbockstael.be

from random import randint

print &amp;quot;&amp;quot;&amp;quot;Code de 4 chiffres, entre 0 et 9 inclus, a trouver en 5 essais max.
  o : bon chiffre, bonne place
  x : bon chiffre, mauvaise place
  _ : mauvais chiffre
&amp;quot;&amp;quot;&amp;quot;
code = &amp;#39;&amp;#39;
for i in range(0,4):
    code = code + str(randint(0,9))
trycode = &amp;#39;&amp;#39;
trynum = 0
while trynum &amp;lt; 5:
    trynum = trynum + 1
    trycode = raw_input(&amp;#39;Essai: &amp;#39;)
    hint = &amp;#39;&amp;#39;
    for i in range(0,4):
        if trycode[i] == code[i]:
            hint = hint + &amp;#39;o&amp;#39;
        elif code.find(trycode[i]) != -1:
            hint = hint + &amp;#39;x&amp;#39;
        else:
            hint = hint + &amp;#39;_&amp;#39;
    if hint == &amp;#39;oooo&amp;#39;:
        break
    print trycode, &amp;#39;:&amp;#39;, hint
if hint == &amp;#39;oooo&amp;#39;:
    print &amp;quot;Gagne!&amp;quot;
else:
    print &amp;quot;Perdu! Le code etait:&amp;quot;, code
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Thu, 08 Jan 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/01/08/mastermind_quick_and_dirty.html</guid>
	</item>
	<item>
		<title>Project Euler : Solution au problème 10, en Python</title>
		<link>https://blog.jkbockstael.be/posts/2009/01/07/project_euler_10_python.html</link>
		<description>&lt;h1 id="project-euler--solution-au-problème-10-en-python"&gt;Project Euler : Solution au problème 10, en Python&lt;/h1&gt;
&lt;p&gt;Dixième de sa catégorie, un problème de recherche de nombres premiers. Algorithmiquement simple, mais lourd en calculs. Voici donc une solution au problème 10 en Python.&lt;/p&gt;
&lt;p&gt;Et je pense que je vais laisser Project Euler de coté quelques jours et m&amp;#39;atteler à un &amp;quot;vrai&amp;quot; programme qui fasse autre chose que chauffer mon CPU.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#! /usr/bin/env python

# 2009/01/07 - euler010.py
# Solution au Probleme 10 de Project Euler
# http://projecteuler.net/index.php?section=problems&amp;amp;id=10
# Jean Karim Bockstael - jkb@jkbockstael.be

def euler10(n):
    primes = [2]
    cand = 3
    while cand &amp;lt; n:
        i = 0
        while i &amp;lt; len(primes):
            if cand % primes[i] == 0:
                break
            i = i + 1
        if i == len(primes):
            primes.append(cand)
        cand = cand + 2
    sum = 0
    for i in range(0, len(primes)):
        sum = sum + primes[i]
    return sum

print euler10(2000000)
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Wed, 07 Jan 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/01/07/project_euler_10_python.html</guid>
	</item>
	<item>
		<title>Project Euler : Solution au problème 9, en Python</title>
		<link>https://blog.jkbockstael.be/posts/2009/01/07/project_euler_09_python.html</link>
		<description>&lt;h1 id="project-euler--solution-au-problème-9-en-python"&gt;Project Euler : Solution au problème 9, en Python&lt;/h1&gt;
&lt;p&gt;Oui, de fait, c&amp;#39;est une solution brute-force à un problème qui mériterait sûrement une approche plus élégante. Mais bon. Des fois on a envie de sortir la bombe au napalm pour tuer une mouche. Solution en Python au problème 9.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#! /usr/bin/env python

# 2009/01/07 - euler009.py
# Solution au Probleme 9 de Project Euler
# http://projecteuler.net/index.php?section=problems&amp;amp;id=9
# Jean Karim Bockstael - jkb@jkbockstael.be

def euler9(n):
    for a in range(1, n):
        for b in range(a, n):
            for c in range(b, n):
                if a + b + c == n:
                    if a ** 2 + b ** 2 == c ** 2:
                        return a * b * c

print euler9(1000)
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Wed, 07 Jan 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/01/07/project_euler_09_python.html</guid>
	</item>
	<item>
		<title>Project Euler : Solution au problème 8, en Python</title>
		<link>https://blog.jkbockstael.be/posts/2009/01/06/project_euler_8_python.html</link>
		<description>&lt;h1 id="project-euler--solution-au-problème-8-en-python"&gt;Project Euler : Solution au problème 8, en Python&lt;/h1&gt;
&lt;p&gt;Plutôt que de me goinfrer de frangipane, je me remets aux problèmes de Project Euler. C&amp;#39;est au tour du problème 8 d&amp;#39;avoir droit à son traitement en Python. Relativement trivial, du coup j&amp;#39;ai concocté une solution un peu trop flexible pour être honnête :)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#! /usr/bin/env python

# 2009/01/06 - euler008.py
# Solution au Probleme 8 de Project Euler
# http://projecteuler.net/index.php?section=problems&amp;amp;id=8
# Jean Karim Bockstael - jkb@jkbockstael.be

def euler8(s, n):
    biggest = 0
    for i in range(n - 1, len(s)):
        prod = 1
        for j in range(0, n):
            prod = prod * int(s[i - j])
        if prod &amp;gt; biggest:
            biggest = prod
    return biggest

print euler8(&amp;#39;73167176531330624919225119674426574742355349194934969835203127745\
0632623957831801698480186947885184385861560789112949495459501737958331952853208\
8055111254069874715852386305071569329096329522744304355766896648950445244523161\
7318564030987111217223831136222989342338030813533627661428280644448664523874930\
3589072962904915604407723907138105158593079608667017242712188399879790879227492\
1901699720888093776657273330010533678812202354218097512545405947522435258490771\
1670556013604839586446706324415722155397536978179778461740649551492908625693219\
7846862248283972241375657056057490261407972968652414535100474821663704844031998\
9000889524345065854122758866688116427171479924442928230863465674813919123162824\
5861786645835912456652947654568284891288314260769004224219022671055626321111109\
3705442175069416589604080719840385096245544436298123098787992724428490918884580\
1561660979191338754992005240636899125607176060588611646710940507754100225698315\
520005593572972571636269561882670428252483600823257530420752963450&amp;#39;, 5)
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Tue, 06 Jan 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/01/06/project_euler_8_python.html</guid>
	</item>
	<item>
		<title>Project Euler : Solution au problème 7, en Python</title>
		<link>https://blog.jkbockstael.be/posts/2009/01/05/project_euler_7_python.html</link>
		<description>&lt;h1 id="project-euler--solution-au-problème-7-en-python"&gt;Project Euler : Solution au problème 7, en Python&lt;/h1&gt;
&lt;p&gt;Maintenant il est minuit passé, et j&amp;#39;avoue j&amp;#39;ai passé &amp;quot;un peu&amp;quot; de temps sur Slashdot en attendant le résultat... qui finalement a pris 1 minute 56 à sortir. Oups. Enfin bref, voici une solution au problème 7, en Python encore.&lt;/p&gt;
&lt;p&gt;D&amp;#39;ailleurs ce langage commence à me plaire...&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#! /usr/bin/env python

# 2009/01/05 - euler007.py
# Solution au Probleme 7 de Project Euler
# http://projecteuler.net/index.php?section=problems&amp;amp;id=7
# Jean Karim Bockstael - jkb@jkbockstael.be

def euler7(n):
    primes = [2]
    count = 1
    cand = 3
    while count &amp;lt; n:
        i = 0
        while i &amp;lt; len(primes):
            if cand % primes[i] == 0:
                break
            i = i + 1
        if i == len(primes):
            primes.append(cand)
            count = count + 1
        cand = cand + 2
    return primes[-1]

print euler7(10001)
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Mon, 05 Jan 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/01/05/project_euler_7_python.html</guid>
	</item>
	<item>
		<title>Dashing in the snow</title>
		<link>https://blog.jkbockstael.be/posts/2009/01/05/dashing_in_the_snow.html</link>
		<description>&lt;h1 id="dashing-in-the-snow"&gt;Dashing in the snow...&lt;/h1&gt;
&lt;p&gt;Il a neigé cette nuit, enfin je crois...&lt;/p&gt;
&lt;p&gt;Version actuelle d&amp;#39;une vue &lt;a href="http://blog.jkbockstael.be/posts/2008/11/28/hdr.html"&gt;que vous avez déjà vue&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2009/01/05/dashing_in_the_snow_attachments/20090105_neige.jpg" title="Neige - haute résolution"&gt;&lt;img src="//blog.jkbockstael.be/posts/2009/01/05/dashing_in_the_snow_attachments/20090105_neige_thumb.jpg" alt="Neige - miniature"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Bon par contre c&amp;#39;est moins chouette pour ce qui est de prendre la route. Mais il en faudra plus pour m&amp;#39;arrêter.&lt;/p&gt;
</description>
		<pubDate>Mon, 05 Jan 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/01/05/dashing_in_the_snow.html</guid>
	</item>
	<item>
		<title>Project Euler : Solution au problème 6, en Python</title>
		<link>https://blog.jkbockstael.be/posts/2009/01/04/project_euler_6_python.html</link>
		<description>&lt;h1 id="project-euler--solution-au-problème-6-en-python"&gt;Project Euler : Solution au problème 6, en Python&lt;/h1&gt;
&lt;p&gt;Finalement il n&amp;#39;est pas encore minuit, et j&amp;#39;ai déjà un programme qui est solution du problème 6 qui est plutôt trivial, je vous l&amp;#39;accorde.&lt;/p&gt;
&lt;p&gt;Ce qui veut donc dire que j&amp;#39;ai un équivalent Python pour les six programmes C proposés précédemment.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#! /usr/bin/env python

# 2009/01/04 - euler006.py
# Solution au Probleme 6 de Project Euler
# http://projecteuler.net/index.php?section=problems&amp;amp;id=6
# Jean Karim Bockstael - jkb@jkbockstael.be

def euler6(n):
    sum_of_squares = 0
    square_of_sum = 0
    for i in range(1, n + 1):
        sum_of_squares = sum_of_squares + i ** 2
    for i in range(1, n + 1):
        square_of_sum = square_of_sum + i
    square_of_sum = square_of_sum ** 2
    return abs(sum_of_squares - square_of_sum)
    
print euler6(100)
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Sun, 04 Jan 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/01/04/project_euler_6_python.html</guid>
	</item>
	<item>
		<title>Project Euler : Solution au problème 5, en Python</title>
		<link>https://blog.jkbockstael.be/posts/2009/01/04/project_euler_5_python.html</link>
		<description>&lt;h1 id="project-euler--solution-au-problème-5-en-python"&gt;Project Euler : Solution au problème 5, en Python&lt;/h1&gt;
&lt;p&gt;Allez, un dernier avant de passer à minuit, comme ça on dira que j&amp;#39;en ai fait cinq aujourd&amp;#39;hui. Une (double) solution au problème 5, en Python.&lt;/p&gt;
&lt;p&gt;#! /usr/bin/env python&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 2009/01/04 - euler005.py
# Solution au Probleme 5 de Project Euler
# http://projecteuler.net/index.php?section=problems&amp;amp;id=5
# Jean Karim Bockstael - jkb@jkbockstael.be

def euler5_brute(n):
    scm = n + 1
    while True:
        scm = scm + 1
        for i in range(1, n + 1):
            if scm % i != 0:
                break
        if i == n:
            return scm
            
def euler5_nice(n):
    base = range(1, n+1)
    work = range(1, n+1)
    done = False
    while done == False:
        smallest = min(work)
        for i in range(0, n):
            if work[i] == smallest:
                work[i] = work[i] + base[i]
        done = min(work) == max(work)
    return work[0]

def euler5(n):
    return euler5_nice(n)
    
print euler5(20)
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Sun, 04 Jan 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/01/04/project_euler_5_python.html</guid>
	</item>
	<item>
		<title>Project Euler : Solution au problème 4, en Python</title>
		<link>https://blog.jkbockstael.be/posts/2009/01/04/project_euler_4_python.html</link>
		<description>&lt;h1 id="project-euler--solution-au-problème-4-en-python"&gt;Project Euler : Solution au problème 4, en Python&lt;/h1&gt;
&lt;p&gt;Avant de me faire un petit quelque chose à manger, un peu de code en apéritif. Ma solution au problème 4, toujours en Python puisque c&amp;#39;est quand même le but de la manoeuvre. Dix minutes de code, y compris les essais dans l&amp;#39;interpréteur pour les arguments de &amp;quot;range&amp;quot;, sept secondes d&amp;#39;exécution. Pas exactement une perte de temps.&lt;/p&gt;
&lt;p&gt;Le tout en un brin plus générique que dans ma version C, puisqu&amp;#39;on peut spécifier la dimension du problème. Je vais continuer dans cette approche, les énoncés sont souvent exprimés en donnant la solution d&amp;#39;une dimension et demandant la solution d&amp;#39;une autre dimension; en procédant assez génériquement j&amp;#39;ai plus de facilité à valider l&amp;#39;algorithme.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#! /usr/bin/env python

# 2009/01/04 - euler4.py
# Solution au Probleme 4 de Project Euler
# http://projecteuler.net/index.php?section=problems&amp;amp;id=4
# Jean Karim Bockstael - jkb@jkbockstael.be

def is_palindrome(n):
    normal = repr(n)
    reverse = &amp;#39;&amp;#39;
    i = len(normal)
    while i &amp;gt; 0:
        i = i - 1
        reverse = reverse + normal[i]
    return normal == reverse
    
def euler4(n):
    lower = 10 ** (n - 1)
    higher = 10 ** n
    largest = 0
    for i in range(lower, higher):
        for j in range(i, higher):
            product = i * j
            if is_palindrome(product):
                if product &amp;gt; largest:
                    largest = product
    return largest

print euler4(3)
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Sun, 04 Jan 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/01/04/project_euler_4_python.html</guid>
	</item>
	<item>
		<title>Project Euler : Solution au problème 3, en Python</title>
		<link>https://blog.jkbockstael.be/posts/2009/01/04/project_euler_3_python.html</link>
		<description>&lt;h1 id="project-euler--solution-au-problème-3-en-python"&gt;Project Euler : Solution au problème 3, en Python&lt;/h1&gt;
&lt;p&gt;Toujours dans la lancée, une solution au problème 3, en Python. D&amp;#39;ailleurs avec un algorithme infiniment plus performant que ma version C tiens. Comme quoi c&amp;#39;est pas du temps perdu de revenir sur sa copie. On y gagne en humilité :-)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#! /usr/bin/env python

# 2009/01/04 - euler3.py
# Solution au Probleme 3 de Project Euler
# http://projecteuler.net/index.php?section=problems&amp;amp;id=3
# Jean Karim Bockstael - jkb@jkbockstael.be

def euler3(n):
        factors = []
        cand = 2
        while cand ** 2 &amp;lt;= n:
            if n % cand == 0:
                factors.append(cand)
                n = n / cand
            else:
                cand = cand + 1
        if n != 1:
            factors.append(n)
        if factors == []:
            return 1
        else:
            return factors[len(factors)-1]

print euler3(600851475143)
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Sun, 04 Jan 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/01/04/project_euler_3_python.html</guid>
	</item>
	<item>
		<title>Project Euler : Solution au problème 2, en Python</title>
		<link>https://blog.jkbockstael.be/posts/2009/01/04/project_euler_2_python.html</link>
		<description>&lt;h1 id="project-euler--solution-au-problème-2-en-python"&gt;Project Euler : Solution au problème 2, en Python&lt;/h1&gt;
&lt;p&gt;Vais pas m&amp;#39;arrêter en si bon chemin. Hop, problème 2, encore en Python.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#! /usr/bin/env python

# 2009/01/04 - euler2.py
# Solution au Probleme 2 de Project Euler
# http://projecteuler.net/index.php?section=problems&amp;amp;id=2
# Jean Karim Bockstael - jkb@jkbockstael.be

def euler2(max):
    sum = 0
    a, b = 1, 1
    while b &amp;lt; max:
        a, b = b, a + b
        if b % 2 == 0:
            sum = sum + b
    return sum

print euler2(4000000)
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Sun, 04 Jan 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/01/04/project_euler_2_python.html</guid>
	</item>
	<item>
		<title>Project Euler : Solution au problème 1, en Python</title>
		<link>https://blog.jkbockstael.be/posts/2009/01/04/project_euler_1_python.html</link>
		<description>&lt;h1 id="project-euler--solution-au-problème-1-en-python"&gt;Project Euler : Solution au problème 1, en Python&lt;/h1&gt;
&lt;p&gt;Pour un blog de geek, ça manque fameusement de code à grignoter au petit déjeuner, hein? Que voulez-vous, j&amp;#39;ai une vie. Cela dit, je me mets timidement au Python, sous la pression populaire et en autodidacte sinon c&amp;#39;est pas marrant. L&amp;#39;occasion de revisiter les problèmes du Project Euler, en repartant de zéro.&lt;/p&gt;
&lt;p&gt;Enfin de 1, puisqu&amp;#39;ils sont numérotés à partir de 1.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#! /usr/bin/env python

# 2009/01/04 - euler1.py
# Solution au Probleme 1 de Project Euler
# http://projecteuler.net/index.php?section=problems&amp;amp;id=1
# Jean Karim Bockstael - jkb@jkbockstael.be

def euler1(max):
    sum = 0
    n = 0
    while n &amp;lt; max:
        if n % 3 == 0 or n % 5 == 0:
            sum = sum + n
        n = n + 1
    return sum

print euler1(1000)
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Sun, 04 Jan 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/01/04/project_euler_1_python.html</guid>
	</item>
	<item>
		<title>Le bug du 31/12/2008, disponible uniquement sur Zune 30.</title>
		<link>https://blog.jkbockstael.be/posts/2009/01/01/bug_zune.html</link>
		<description>&lt;h1 id="le-bug-du-31122008-disponible-uniquement-sur-zune-30"&gt;Le bug du 31/12/2008, disponible uniquement sur Zune 30.&lt;/h1&gt;
&lt;p&gt;L&amp;#39;année commence en rigolades pour beaucoup, parce qu&amp;#39;elle s&amp;#39;est mal terminée pour les propriétaires de baladeurs Zune 30Go. En effet, ce modèle du baladeur de Microsoft a subi un bien curieux bug qui a rendu inopérant chaque exemplaire le 31 décembre 2008.&lt;/p&gt;
&lt;p&gt;Les curieux se sont évidemment jetés sur le code source du firmware de l&amp;#39;animal, lequel est rendu disponible via Freescale. Plus précisément, une lecture de la &lt;a href="http://pastie.org/349916"&gt;gestion de l&amp;#39;horloge&lt;/a&gt; révèle la perle suivante:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;while (days &amp;gt; 365)
    {
        if (IsLeapYear(year))
        {
            if (days &amp;gt; 366)
            {
                days -= 366;
                year += 1;
            }
        }
        else
        {
            days -= 365;
            year += 1;
        }
    }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Pour ceux qui ne lisent pas couramment le C, un petit mot d&amp;#39;explication s&amp;#39;impose. Le 31 décembre 2008 est le 366 jour de l&amp;#39;année, 2008 étant bissextile. Cas prévu par le code ici présent, qui prévoit que si on dépasse le 365 jour de l&amp;#39;année il faut passer à l&amp;#39;année suivante si c&amp;#39;est une année normale, de même si on dépasse le 366ème jour d&amp;#39;une année bissextile. Et si on est précisément dans le 366ème jour d&amp;#39;une année bissextile? Oh zut...&lt;/p&gt;
</description>
		<pubDate>Thu, 01 Jan 2009 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2009/01/01/bug_zune.html</guid>
	</item>
	<item>
		<title>De la bonne manière de donner mauvaise presse à la cause qu'on défend.</title>
		<link>https://blog.jkbockstael.be/posts/2008/12/26/humeur.html</link>
		<description>&lt;h1 id="de-la-bonne-manière-de-donner-mauvaise-presse-à-la-cause-quon-défend"&gt;De la bonne manière de donner mauvaise presse à la cause qu&amp;#39;on défend.&lt;/h1&gt;
&lt;p&gt;Le 11 décembre je postais via Twitter le commentaire suivant: &amp;quot; &amp;quot;There is no such thing as free software.&amp;quot; Et c&amp;#39;est un enseignant qui dit ça :( &amp;quot; traduisant en une ligne ma tristesse de voir qu&amp;#39;une trentaine d&amp;#39;années de libre n&amp;#39;ont pas encore réussi à entrer dans les moeurs et les mentalités. On m&amp;#39;a demandé d&amp;#39;où ça venait, du coup j&amp;#39;avais un peu été chatouillé par l&amp;#39;idée d&amp;#39;en parler sur mon blog.&lt;/p&gt;
&lt;p&gt;Mais voilà, le sujet méritait sûrement d&amp;#39;être un tant soit peut développé pour ne pas faire que répéter, mais j&amp;#39;avais la flemme de m&amp;#39;y mettre le jour même et un agenda chargé ensuite. Enfin voilà, joyeux Noël, je m&amp;#39;y suis enfin collé vraiment, espérons que le résultat soit à la hauteur...&lt;/p&gt;
&lt;p&gt;Au commencement était Ken Starks, connu également sous le pseudonyme &amp;quot;helios&amp;quot;. Ken Starks est de ceux qu&amp;#39;on appelle les &amp;quot;FOSS-Advocates&amp;quot;, ces passionnés qui accordent une grande partie de leur temps à la promotion du concept et des réalisations des logiciels libres; ils se sentent souvent investi d&amp;#39;une telle mission d&amp;#39;évangélisation qu&amp;#39;ils font preuve d&amp;#39;un acharnement à coté duquel les témoins de Jéhovah paraissent timides et réservés.&lt;/p&gt;
&lt;p&gt;Il se trouve que Ken Starks est l&amp;#39;un des fondateurs d&amp;#39;un association dont le but est de fournir aux écoles et aux écoliers des ordinateurs reconditionnés équipés de système d&amp;#39;exploitation et de logiciels libres, afin de donner à un plus grand nombre accès à un outil informatique à coût réduit. Noble cause! Le projet est question est baptisé &amp;quot;HeliOS&amp;quot;, on peut ricaner sur le coté peu modeste de donner son pseudonyme à un projet collectif, mais là n&amp;#39;est pas la question. &lt;/p&gt;
&lt;p&gt;Une des activités de HeliOS est de distribuer des CD-ROMs pleins à craquer de logiciels libres, des CD-ROMs de distributions Linux, bref du bon &amp;quot;free software&amp;quot; dans les deux sens de &amp;quot;free&amp;quot;. Et voilà donc qu&amp;#39;un juvénile enthousiaste se présente en classe avec son ordinateur portable sous Linux et quelques CDs d&amp;#39;HeliOS, voulant partager sa découverte à ses camarades. L&amp;#39;enseignante voit l&amp;#39;attroupement, vient s&amp;#39;informer de la situation, voit un enfant qui distribue des CDs, fait un back-flip de panique, confisque le tout et en réfère immédiatement à la hiérarchie. Il y a sûrement piratage ou propagation de malware!&lt;/p&gt;
&lt;p&gt;Le concerné a quand même pu s&amp;#39;expliquer, explique qu&amp;#39;il s&amp;#39;agit de CDs d&amp;#39;installation de Linux, que c&amp;#39;est du &amp;quot;free software&amp;quot;, qu&amp;#39;il l&amp;#39;a obtenu via le projet HeliOS d&amp;#39;un certain Ken Starks. Il y aurait une organisation complète qui distribue à des enfants innocents des logiciels douteux? Une intervention est de mise.&lt;/p&gt;
&lt;p&gt;Et voilà que Karen — l&amp;#39;enseignante en question — entreprend d&amp;#39;envoyer un e-mail poli mais ferme à ce Ken Starks dont elle doute franchement que les activités soient bien légales et à qui elle juge important de rappeler qu&amp;#39;il est néfaste de répandre des idées fausses dans l&amp;#39;esprit des enfants. Entre autres, l&amp;#39;idée que des logiciels soient gratuits ou libres. De ses propres termes &lt;em&gt;&amp;quot;aucun logiciel est gratuit, et propager cette fausse idée est néfaste&amp;quot;&lt;/em&gt; et elle précise &lt;em&gt;&amp;quot;qu&amp;#39;elle admire ses efforts pour fournir des ordinateurs aux gens défavorisés, mais y mettre Linux bride nos enfants&amp;quot;&lt;/em&gt;; et de préciser que Microsoft serait sûrement disposé à fournir des copies d&amp;#39;anciennes versions de Windows qui rendraient enfin les ordinateurs fournis par HeliOS vraiment utiles.&lt;/p&gt;
&lt;p&gt;Un adulte aurait soupiré un bon coup, pris un café, réfléchi calmement à son argumentaire, puis écrit un réponse encyclopédique pour informer de manière toute aussi polie mais ferme que Karen se trompe, l&amp;#39;informer de l&amp;#39;existence des systèmes d&amp;#39;exploitation et des logiciels libres, de leur état d&amp;#39;avancement, du fait qu&amp;#39;actuellement Linux et les logiciels libres sont globalement assez à maturité pour remplacer de façon viable Windows sur une machine personnelle... vous voyez le genre. C&amp;#39;est long à écrire, mais en fin de compte on a la satisfaction d&amp;#39;avoir informé quelqu&amp;#39;un.&lt;/p&gt;
&lt;p&gt;Un adulte furieux aurait sûrement choisi de défouler sa rage sur un objet inerte, ou d&amp;#39;appliquer la technique du mail furieux qu&amp;#39;on n&amp;#39;envoie jamais mais qui aura contenu tout ce qu&amp;#39;on avait d&amp;#39;odieux à dire. Ça ne fait pas avancer le schmilblick, mais au moins on garde sa contenance.&lt;/p&gt;
&lt;p&gt;Au lieu de ça, Ken Starks a préféré verser sa colère dans &lt;a href="http://linuxlock.blogspot.com/2008/12/linux-stop-holding-our-kids-back.html"&gt;un post rageur&lt;/a&gt; sur son blog, à la suite d&amp;#39;une copieuse citation de l&amp;#39;e-mail qu&amp;#39;il venait de recevoir. Le genre de post dans lequel transparaît clairement le rictus de satisfaction sadique de son auteur qui se délecte de rouler sa victime dans un goudron virtuel avant de le jeter aux plumes numériques. Le tout est maintenu par un fil rouge qui fleure bon la théorie du complot, selon lequel Microsoft finance la NEA, ce qui explique pourquoi les enseignants sont formés à (et obligés de) matraquer le marketing Microsoft à leurs élèves... le tout dans un vocabulaire qui fait presque peur: Linux est utilisé pour &amp;quot;libérer&amp;quot; les gens de l&amp;#39;emprise Microsoft et de ses &amp;quot;bindwares&amp;quot;, Karen n&amp;#39;a aucune idée de &amp;quot;l&amp;#39;esclavage&amp;quot; dans lequel elle travaille et ne devrait pas &amp;quot;mettre aux fers ses élèves dans la même prison qu&amp;#39;elle&amp;quot;. En même temps, publié sur un blog dont le sous-titre est &amp;quot;Linux is to computing what freedom is to mankind...and then there&amp;#39;s Microsoft&amp;quot;, on ne doit pas s&amp;#39;attendre à un autre ton.&lt;/p&gt;
&lt;p&gt;Hop, publié. Fin de l&amp;#39;histoire. Ou pas...&lt;/p&gt;
&lt;p&gt;Si c&amp;#39;était le blog discret d&amp;#39;un quelconque quidam, personne n&amp;#39;en saurait rien (à l&amp;#39;exception de la poignée de lecteur dudit quidam). Mais c&amp;#39;est Ken Starks, ou plutôt c&amp;#39;est HeliOS. Et un des lecteurs a mentionné l&amp;#39;affaire. Sur Slashdot.&lt;/p&gt;
&lt;p&gt;Pour ceux qui auraient vécu dans une grotte pendant les dix dernières années, Slashdot est un site d&amp;#39;actualité IT/high-tech/science/... des trucs de geeks. Au détail près que Slashdot brasse plusieurs millions de visiteurs par mois. Donc une horde de centaines de milliers de geeks se sont rués sur ce plutôt modeste blog, et une anecdote parmi tant d&amp;#39;autres est vite devenue affaire d&amp;#39;état. Au point que la pauvre Karen s&amp;#39;est vue publiquement insulter par des milliers de fanatiques furieux, et que Ken Starks a eu droit à un coup de fil d&amp;#39;une enseignante au bord de la crise de nerfs.&lt;/p&gt;
&lt;p&gt;La suite ne s&amp;#39;est pas fait attendre longtemps. Starks a donné suite dans &lt;a href="http://linuxlock.blogspot.com/2008/12/character-assasinations-aint-us.html"&gt;un second post&lt;/a&gt; à l&amp;#39;affaire, pour nuancer son propos, et surtout informer la communauté des entretiens qu&amp;#39;il a eu avec Karen depuis lors. Il s&amp;#39;y excuse en confusions telles qu&amp;#39;on en viendrait vite à se demander s&amp;#39;il est vraiment sincère. Ceci dit, il a au moins le mérite de revenir sur ses propos à fort poids émotionnel. Ce n&amp;#39;est pas le cas des commentaires qu&amp;#39;une grande partie des vagues de visiteurs ont laissé derrière eux.&lt;/p&gt;
&lt;p&gt;Il faut voir comment l&amp;#39;affaire a été perçue. Dans &amp;quot;la communauté&amp;quot; des développeurs et utilisateurs de logiciels libres, une première tendance a été de faire écho en masse aux propos de Starks, en les amplifiant à la puissance mille. C&amp;#39;est un peu l&amp;#39;effet Slashdot aussi, l&amp;#39;un dit &amp;quot;c&amp;#39;est gênant&amp;quot;, le second enchaîne &amp;quot;c&amp;#39;est dérangeant&amp;quot;, le troisième &amp;quot;c&amp;#39;est scandaleux&amp;quot;, et on arrive vite à &amp;quot;passez-la par les armes sur la place du marché!!&amp;quot;. Si vous n&amp;#39;avez jamais vu un lynchage virtuel prendre place, lisez les commentaires du premier post, c&amp;#39;est assez édifiant.&lt;/p&gt;
&lt;p&gt;L&amp;#39;autre tendance, c&amp;#39;est justement celle qui m&amp;#39;a secoué. Effectivement, voir l&amp;#39;ignorance dont Karen fait preuve peut agacer (mais peut-on lui en tenir rigueur?). Par contre voir la haine déployée par ceux qui se disent être de fervents promoteurs du libre donne des nausées. En tout cas ça ne donne pas du tout envie d&amp;#39;être associé à pareil haineux. C&amp;#39;est gênant. C&amp;#39;est toujours gênant d&amp;#39;adhérer à un courant de pensée et de voir que ceux qui se placent comme porte-paroles de ce courant installent un climat de haine qui est fortement amplifié par ceux qui adhèrent audit courant. On en vient à douter de son appartenance au mouvement.&lt;/p&gt;
&lt;p&gt;Et encore, ça c&amp;#39;est pour ceux qui sont plus ou moins au courant du sujet, qui sont donc soit choqués qu&amp;#39;on ne connaisse pas Linux (ou le libre en général), soit choqués qu&amp;#39;on agresse ainsi ceux qui ne sont pas au courant. Mais pour ceux qui sont totalement étrangers au libre et ses implications philosophico/propagandistes la chose est un peu incompréhensible. Comment comprendre une telle tempête dans un verre d&amp;#39;eau? Pourquoi faire une telle polémique sur ce qui est finalement un événement anecdotique due à une incompréhension? Pourquoi une telle manifestation de haine?&lt;/p&gt;
&lt;p&gt;Finalement, ces barbus qui vantent les mérites de cet animal bizarre qu&amp;#39;est l&amp;#39;open-source, qui sont-ils? Ils semblent être un brin autistes, un peu reclus, un peu monomaniaques à tendance zélote. En tout cas sur ce coup-ci ils s&amp;#39;avèrent avoir l&amp;#39;ouverture d&amp;#39;esprit d&amp;#39;un protozoaire, et des réactions qu&amp;#39;on attendrait d&amp;#39;un adolescent au sang chaud souffrant de quelques problèmes d&amp;#39;identité.&lt;/p&gt;
&lt;p&gt;C&amp;#39;est pas vraiment bon pour l&amp;#39;image tout ça. Nous avons des developpeurs passionnés qui, il faut le reconnaître, fournissent beaucoup d&amp;#39;efforts pour mettre au point des logiciels qui tiennent la route (et Dieu sait que ce n&amp;#39;est pas une tâche aisée). Nous avons des utilisateurs de plus en plus nombreux qui sont autant de sources d&amp;#39;inspiration et des testeurs &amp;quot;grandeur nature&amp;quot;. Nous avons des promoteurs passionnés qui consacrent un temps considérable à simplement faire connaître le libre et ses avantages. Là où se situe le problème, c&amp;#39;est que sur Internet, tout le monde à la même voix. Finalement ce ne sont pas les plus réfléchis qui sont les plus visibles, mais souvent les plus acharnés, les plus fanatiques, les rageux purs et durs qui n&amp;#39;hésiteront pas à consacrer des heures entières à émettre des flots d&amp;#39;insultes quitte à ridiculiser la communauté qu&amp;#39;ils défendent.&lt;/p&gt;
&lt;p&gt;Pour eux, Microsoft est le mal, l&amp;#39;Empire, le coté obscur, le Mordor, la Waffen SS, tout ce qui est intrinsèquement &amp;quot;méchant&amp;quot;. Il faut dire que Microsoft est dans les faits un pionnier du concept de logiciel propriétaire et de la commercialisation de logiciels. Leur travail a été tellement efficace qu&amp;#39;ils se retrouvent actuellement en position de quasi-monopole. Or, Microsoft est une société capitalisée en bourse, qui a donc le devoir de garantir des revenus sans cesse croissants à ses actionnaires. Pas besoin d&amp;#39;être docteur en économie pour comprendre qu&amp;#39;en situation de monopole on ne peut pas agrandir son marché, le seul moyen qu&amp;#39;on a de garantir des ventes futures est de s&amp;#39;asurer que le client d&amp;#39;aujourd&amp;#39;hui sera client demain; ce qui revient à s&amp;#39;assurer qu&amp;#39;on dispose d&amp;#39;un moyen de forcer le client d&amp;#39;aujourd&amp;#39;hui à racheter demain ce qu&amp;#39;il a déjà. D&amp;#39;où les versions de Windows et d&amp;#39;Office incompatibles entre elles, l&amp;#39;obsolescence planifiée, les formats fermés... autant de pratiques commerciales qui provoquent des spasmes de colère à tous ceux qui ont l&amp;#39;intime conviction que le logiciel est quelque chose qui doit circuler librement pour évoluer au plus vite et au mieux. Quand on est un fervent du libre, Microsoft incarne l&amp;#39;opposé des valeurs qu&amp;#39;on véhicule. D&amp;#39;où une certaine méfiance à son égard, qui tourne chez beaucoup en haine viscerale plutôt infantile.&lt;/p&gt;
&lt;p&gt;Cette haine s&amp;#39;accompagne souvent d&amp;#39;une mauvaise foi typique. Microsoft est le mal dont tout ce qui en émane est maléfique, et tous ceux qui y travaillent sont des suppôts du démon. Sous-entendre de près ou de loin qu&amp;#39;un produit Microsoft puisse être valable, c&amp;#39;est se placer du coté obscur de la Force (raisonnement binaire typique &amp;quot;vous êtes soit avec nous, soit contre nous&amp;quot;). Par extension, les utilisateurs des produits Microsoft sont autant de pions à la solde de la Bête; et puis tant qu&amp;#39;on y est, les autres producteurs de logiciels propriétaires méritent la roue, le fouet, et le bûcher également. Antagonie systématique, et théories du complot.&lt;/p&gt;
&lt;p&gt;Il faut dire que le jeu en vaut la chandelle. Vous ne pouvez pas comprendre, pauvres idiots zombifiés par Microsoft que vous êtes! Le logiciel libre est la solution à la faim dans le monde, aux guerres, au chômage, à l&amp;#39;illetrisme, aux épidémies, ... C&amp;#39;est &lt;em&gt;la&lt;/em&gt; voie. Ceux qui l&amp;#39;ont compris sont des sortes d&amp;#39;élus, une espèce d&amp;#39;élite qui peut de ce fait regarder de haut les moutons et autres zombies à la soldes du propriétaire. Bande d&amp;#39;idiots.&lt;/p&gt;
&lt;p&gt;Le plus triste, c&amp;#39;est que cette attitude infantile n&amp;#39;est pas l&amp;#39;apanage d&amp;#39;adolescents prépubères.&lt;/p&gt;
&lt;p&gt;Il y a de celà un certain temps déjà, un certain Eric Steven Raymond a reçu un e-mail venant d&amp;#39;un recruteur qui défrichait un peu le terrain pour son client. Le client, c&amp;#39;est Microsoft, justement. Le potentiel, c&amp;#39;est &amp;quot;ESR&amp;quot;. Là où ça coince, c&amp;#39;est qu&amp;#39;Eric Raymond est très fier de dire à tout représentant de Microsoft &amp;quot;I&amp;#39;m your worst nightmare&amp;quot; en guise de présentation. Pourtant, il est l&amp;#39;auteur de &amp;quot;La cathédrale et le bazar&amp;quot;, mainteneneur du Jargon File, ... et il est dans sa cinquantaine. Plus grave: il se place lui-même comme porte-parole de la communauté, plus précisément de l&amp;#39;initiative Open-Source, dont il se place comme net fondateur. Ça ne l&amp;#39;empêche pas de verser dans &lt;a href="http://esr.ibiblio.org/index.php?p=208"&gt;une verve tout aussi peu recommandable&lt;/a&gt;, qui fait d&amp;#39;abord sourire, puis attriste quand on prend conscience que ces insultes sont proférées au nom d&amp;#39;une communauté entière et à l&amp;#39;égard de quelqu&amp;#39;un qui finalement n&amp;#39;avait rien fait de mal.&lt;/p&gt;
&lt;p&gt;Triste...&lt;/p&gt;
&lt;p&gt;Un autre domaine d&amp;#39;évangélisation informatique où ces dérives s&amp;#39;expriment, c&amp;#39;est la promotion de la &amp;quot;culture Macintosh&amp;quot;. Apple a toujours fourni des efforts pour donner à ses produits une forte empreinte d&amp;#39;élégance artistique et les placer comme très &amp;quot;in&amp;quot; et réservés à une élite de connaisseurs.&lt;/p&gt;
&lt;p&gt;De ce fait, les Mac-advocates sont de la même trempe que les Linux-advocates, mais avec une couche d&amp;#39;élégance en plus. En anglais on appelle ça des &amp;quot;art-fags&amp;quot;. Vous savez, ces types en col roulé faussement mal rasés, plus cool que vous, qui traînent toujours et font des choses que vous ne pourriez pas comprendre. D&amp;#39;ailleurs ils utilisent un ordinateur supérieur. Le leur est beau. Le votre est moche. Vous êtes inférieur.&lt;/p&gt;
&lt;p&gt;Même genre de passion aveugle pour leur cause, qui est ici une marque; même genre de haine aveugle pour &amp;quot;l&amp;#39;ennemi&amp;quot; Microsoft, même genre d&amp;#39;antagonisation systématique, même genre de débilisation des utilisateurs de Windows... et au final même apparence d&amp;#39;adolescent attardé au cerveau lessivé qui n&amp;#39;est pas capable d&amp;#39;argumenter au-delà d&amp;#39;une liste de slogans.&lt;/p&gt;
&lt;p&gt;Pourquoi je parle de ça? Parce que je suis un Mac-advocate. J&amp;#39;ai toujours utilisé un Macintosh, j&amp;#39;ai toujours beaucoup aimé utiliser mon Mac, j&amp;#39;ai toujours voulu faire profiter de mon entourage des bienfaits d&amp;#39;Apple tout en me préservant autant que possible des horreurs de Microsoft. J&amp;#39;ai eu cette attitude de passionné aveugle, haineux, qu&amp;#39;on ne peut pas raisonner et qui se réfugiait derrière des arguments du type &amp;quot;la commande Eteindre est dans le menu Démarrer, haha lol!&amp;quot;. Oui, j&amp;#39;avoue.&lt;/p&gt;
&lt;p&gt;Mais j&amp;#39;avais 15 ans.&lt;/p&gt;
</description>
		<pubDate>Fri, 26 Dec 2008 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2008/12/26/humeur.html</guid>
	</item>
	<item>
		<title>Retrouvailles photographiques</title>
		<link>https://blog.jkbockstael.be/posts/2008/12/10/retrouvailles_photographiques.html</link>
		<description>&lt;h1 id="retrouvailles-photographiques"&gt;Retrouvailles photographiques&lt;/h1&gt;
&lt;p&gt;Ce qui est bon quand on est quelques heures hors-lignes mais avec sa machine principale quand même, c&amp;#39;est que pour une fois on prend le temps de retourner les trefonds de son disque dur à la recherche de ce qui y traîne depuis des éternités et mériterait peut-être d&amp;#39;être dépoussiéré. Par exemple, ces quelques photos, qui n&amp;#39;ont jamais été mises en ligne mais devaient l&amp;#39;être...&lt;/p&gt;
&lt;p&gt;En l&amp;#39;occurrence, des prises de vues destinées à devenir HDR mais qui ne l&amp;#39;étaient pas encore. Donc les prises de vues datent de février de cette année, la version HDR date de tout à l&amp;#39;heure:&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2008/12/10/retrouvailles_photographiques_attachments/hdr-080127-1.jpg" title="HDR 1 - haute résolution"&gt;&lt;img src="//blog.jkbockstael.be/posts/2008/12/10/retrouvailles_photographiques_attachments/hdr-080127-1_thumb.jpg" alt="HDR 1 - miniature"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2008/12/10/retrouvailles_photographiques_attachments/hdr-080127-2.jpg" title="HDR 2 - haute résolution"&gt;&lt;img src="//blog.jkbockstael.be/posts/2008/12/10/retrouvailles_photographiques_attachments/hdr-080127-2_thumb.jpg" alt="HDR 2 - miniature"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Et ce panorama improvisé, pris en lumière naturelle dans mon jardin, en juin. Pas de HDR ici, et déjà le coté improvisé et la légère brise se voient dans les feuillages, alors la même chose avec cinq fois plus de prises de vues ce serait folklorique! 360°&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2008/12/10/retrouvailles_photographiques_attachments/pano-080610-360.jpg" title="Panorama - haute résolution"&gt;&lt;img src="//blog.jkbockstael.be/posts/2008/12/10/retrouvailles_photographiques_attachments/pano-080610-360_thumb.jpg" alt="Panorama - miniature"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Voilà, pour les curieux :)&lt;/p&gt;
</description>
		<pubDate>Wed, 10 Dec 2008 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2008/12/10/retrouvailles_photographiques.html</guid>
	</item>
	<item>
		<title>"Proud to be black y'all! Get Blackbird"</title>
		<link>https://blog.jkbockstael.be/posts/2008/12/09/blackbird.html</link>
		<description>&lt;h1 id="proud-to-be-black-yall-get-blackbird"&gt;&amp;quot;Proud to be black y&amp;#39;all! Get Blackbird&amp;quot;&lt;/h1&gt;
&lt;p&gt;C&amp;#39;est pas tous les jours que l&amp;#39;enseigne sobre et posée qu&amp;#39;est &lt;a href="http://arstechnica.com/index.ars"&gt;Ars Technica&lt;/a&gt; parle de quelque chose de communautaire dans ses pages; ou du moins de &amp;quot;communautaire&amp;quot; comme dans &amp;quot;problème communautaire&amp;quot; pas comme dans &amp;quot;communauté open-source&amp;quot;. Et pourtant ils l&amp;#39;ont fait, c&amp;#39;est dire si la chose est de taille. Et c&amp;#39;est chose, c&amp;#39;est un monstre nommé &lt;em&gt;Blackbird&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Blackbird, en deux mots, c&amp;#39;est un navigateur web basé sur Firefox (oui, un de plus...) qui a la particularité d&amp;#39;être &amp;quot;un navigateur pour la communauté Afro-Américaine&amp;quot; comme le précise &lt;a href="http://www.blackbirdhome.com/"&gt;son site&lt;/a&gt;. Aïe. Comme un noeud dans l&amp;#39;estomac. Un navigateur pour blacks? C&amp;#39;est ça le délire?&lt;/p&gt;
&lt;p&gt;Le Dr Frankenstein à l&amp;#39;origine de ce monstre est une entreprise &amp;quot;fondée par des entrepreneurs Afro-américains&amp;quot;, 40A Inc. Ah. Trois jeunes entrepreneurs qui se sont bien grattés la tête sur l&amp;#39;Obamamania, ou qui n&amp;#39;avaient plus que leur couleur de peau comme source d&amp;#39;idée géniale? Ça sent mauvais.&lt;/p&gt;
&lt;p&gt;D&amp;#39;ailleurs, c&amp;#39;est quoi au juste un &amp;quot;navigateur pour communauté Afro-Américaine&amp;quot;? Ou plus politiquement-correct: que fait Blackbird que ne fait pas Firefox? Pas tant que ça au vu des features vantées:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Black Search [sic]: un Google Search filtré pour faire remonter les résultats venant de sites &amp;quot;Afro-Americains&amp;quot;. Noir ou blanc on saigne tous le même HTML, non?&lt;/li&gt;
&lt;li&gt;Black News Ticker: un bandeau d&amp;#39;actualités sous la barre d&amp;#39;outils, qui fait défiler des titres qui pour une raison qui m&amp;#39;échappe devrait être particulièrement intéressant si on est noir de peau.&lt;/li&gt;
&lt;li&gt;Black Bookmarks: une collection de liens jugés pertinents par 40A Inc. Fubu et Black Panthers?&lt;/li&gt;
&lt;li&gt;Blackbird TV: genre YouTube mais que avec des clips de 50 Cents&lt;/li&gt;
&lt;li&gt;Social Bookmarking: un gros &amp;quot;share&amp;quot; accompagné du &amp;quot;most shared&amp;quot; qui va avec, liant tous les utilisateurs du navigateur&lt;/li&gt;
&lt;li&gt;Email manager: un mail-checker dans la barre d&amp;#39;outils&lt;/li&gt;
&lt;li&gt;Social Network Manager: ça c&amp;#39;est la fonction floue, on dirait une intégration de concepts à la Flock&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bon plus on gratte dedans plus c&amp;#39;est une saleté commerciale. Trois gars se mettent autour d&amp;#39;une table et se demandes ce qui vend bien ces temps-ci, donc parlent réseaux sociaux, articulent ça avec un argument de vente indiscutable (surtout maintenant) et emballent le tout. Et le but profond? Parce qu&amp;#39;on me fera pas avaler que le vrai but c&amp;#39;est de &amp;quot;rassembler la communauté&amp;quot; ou que sais-je encore...&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Blackbird is free for you because it is supported by advertising and sponsorships. You don&amp;#39;t pay to use Blackbird. &amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;OK, ça devient limpide. L&amp;#39;objectif c&amp;#39;est de caser un maximum de publicité et de diriger l&amp;#39;utilisateur vers des sites partenaires (d&amp;#39;où la réécriture des résultats de recherche), le tout en garantissant aux annonceurs que le public est bien ciblé: ce ne sont que des noirs et fiers de l&amp;#39;être, avec peut-être une légère tendance ségrégationniste.&lt;/p&gt;
&lt;p&gt;Ben oui, forcément, ça fleure la ségrégation auto-infligée ça quand même. Le navigateur pour noirs déjà, bientôt le système d&amp;#39;exploitation pour noirs? Le constructeur de PC pour noir? Le téléphone portable pour noir? La marque de vêtements? Les galeries marchandes? Les bus? Les toilettes? Les écoles? I had a nightmare, apartheid was back?&lt;/p&gt;
&lt;p&gt;Eh ben on n&amp;#39;est pas sortis de l&amp;#39;auberge! Déjà que les élans communautaires sont rarement positifs et mènent surtout à un sale climat de séparation et de haine raciale, mais si en plus des vautours mercantiles surfent sur cette vague...&lt;/p&gt;
</description>
		<pubDate>Tue, 09 Dec 2008 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2008/12/09/blackbird.html</guid>
	</item>
	<item>
		<title>Les blogs détrônés par Twitter</title>
		<link>https://blog.jkbockstael.be/posts/2008/12/08/les-blogs_detrones_par_twitter.html</link>
		<description>&lt;h1 id="les-blogs-détrônés-par-twitter"&gt;Les blogs détrônés par Twitter&lt;/h1&gt;
&lt;p&gt;Ça choque hein? Toute personne qui aura croisé des blogs et le système Twitter aura conscience de la profonde différence entre les deux. Le blog est à Twitter ce que le courrier de cinq pages est au SMS. Evident. Pas pour Paul Boutin.&lt;/p&gt;
&lt;p&gt;Paul Boutin est un des auteurs qui se fait publier dans le magazine Wired. Wired c&amp;#39;est un peu la concrétisation de la bulle dot-com de 1997-1998, à l&amp;#39;époque ce magazine l&amp;#39;était vraiment — branché — mais il faut bien avouer que depuis la qualité de cette publication est en déclin constant. Prenez un magazine qui se targue d&amp;#39;être visionnaire et d&amp;#39;avoir l&amp;#39;autorité de dire ce qui est &amp;quot;in&amp;quot; et ce qui est &amp;quot;out&amp;quot;, équipez-le d&amp;#39;auteurs qui n&amp;#39;ont pas plus d&amp;#39;humilité ni de sens du recul, vous obtenez quelque chose où le pire côtoie de près le meilleurs. Paul Boutin est bien dans le moule; il a signé de très bons articles, mais son dernier en date est au mieux très drôle.&lt;/p&gt;
&lt;p&gt;Il se trouve que le bougre ne vivant pas tout à fait dans une grotte perdue au milieu du désert de Gobi, il a fini par découvrir que ce qui caractérise Internet ces cinq dernières années c&amp;#39;est bien la multiplications de sites à vocation &amp;quot;sociale&amp;quot;. Flickr, YouTube, Facebook, Twitter. Personne ne l&amp;#39;a pas remarqué.&lt;/p&gt;
&lt;p&gt;Donc voilà que l&amp;#39;ami Boutin, jaugeant l&amp;#39;importance de ces sites et leur indéniable succès auprès des foules, se sent d&amp;#39;humeur à prédire la mort imminente de tout ce qui ressemble de près ou de loin à un blog. Evidemment. Selon ses propres termes, il y a quatre ans un blog était une idée brillante et novatrice, aujourd&amp;#39;hui ce n&amp;#39;est plus la peine. Pourquoi? Parce que le concept de &amp;quot;blog&amp;quot; a été adopté par des professionnels et que donc on voit fleurir partout des blogs qui sont rédigés par des équipes de rédacteurs pondants jusqu&amp;#39;à plusieurs dizaines de posts par jour. De ce fait, un particulier ne peut pas tenir face à ça en terme de productivité, donc de visibilité, de popularité.&lt;/p&gt;
&lt;p&gt;Conclusion: autant consacrer son énergie à poster ses photos sur Flickr, remplir son profil Facebook et n&amp;#39;utiliser plus que Twitter pour s&amp;#39;exprimer. Ça ou prendre la peine de rédiger des posts soignés qui seront de toute façon écrasés parce qu&amp;#39;ils ne font pas le poids face à des blogs professionnels... et puis en plus sur les blogs il y a les trolls. Sur Twitter on peut pas répondre. Ah si? Dommage, on dirait qu&amp;#39;il n&amp;#39;a pas fait ses devoirs...&lt;/p&gt;
&lt;p&gt;Ainsi, pour lui, la blogosphère (oui, j&amp;#39;ai dit &amp;quot;blogosphère&amp;quot;, fouettez-moi) toute entière peut se remplacer d&amp;#39;elle-même par un florilège de petits messages de 140 caractères maximum (tiens, c&amp;#39;est encore plus court qu&amp;#39;un SMS en fait). Pourquoi peut-il bien dire ça?&lt;/p&gt;
&lt;p&gt;Première possibilité: c&amp;#39;est de la pure provocation, l&amp;#39;idée est de pondre un article écœurant pour qu&amp;#39;il soit cité partout, générer une horde de pageviews et se faire un peu remarquer des pontes de Wired. Mouais. D&amp;#39;un coté ça colle au raisonnement qui mesure l&amp;#39;intérêt d&amp;#39;une démarche à la hauteur qu&amp;#39;elle obtient dans les recherches Google.&lt;/p&gt;
&lt;p&gt;Deuxième possibilité: il y croit vraiment, et donc pour lui tout blogger ne rédige et publie que pour attirer à lui un maximum de visiteurs; évidemment pour générer des profits publicitaires parce que c&amp;#39;est bien connu: tout ce qu&amp;#39;on fait sur Internet on le fait pour le pognon facile! Forcément, vu comme ça, si les pageviews sont détournées par des mastodontes professionnels, c&amp;#39;est pas la peine.&lt;/p&gt;
&lt;p&gt;En tout cas ça suppose que les blogs ne sont pas là pour exprimer une opinion, mais pour attirer des visiteurs. Tout le monde est bien d&amp;#39;accord sur le fait que des photos du chien de tante Irma c&amp;#39;est moins vendeur que des seins nus de jeune fille épanouie... mais alors pourquoi vois-je tant de Mirza et si peu de nichons? Ah, on me souffle dans mon oreillette que finalement il semblerait que ce qui attire les gens vers les outils de blogging c&amp;#39;est justement la facilité d&amp;#39;exprimer à ses proches et aux autres son ressenti, son vécu, son opinion, ou simplement partager ses découvertes. Ah ben du coup c&amp;#39;est limpide, je comprends mieux pourquoi la grande majorité des blogs de particuliers sont un mélange d&amp;#39;albums photos, de billets d&amp;#39;humeur qui sentent le journal intime, et des liens vers l&amp;#39;une ou l&amp;#39;autre vidéo rigolote. &amp;quot;Tiens c&amp;#39;est pas mal ça&amp;quot; entraîne &amp;quot;j&amp;#39;ai envie d&amp;#39;en parler à mes amis&amp;quot;, qui entraîne &amp;quot;je vais le mettre sur mon blog&amp;quot;. Ça se tient.&lt;/p&gt;
&lt;p&gt;Finalement ce qui est très amusant avec le raisonnement de Paul Boutin, c&amp;#39;est qu&amp;#39;à le lire on dirait qu&amp;#39;il est en ligne depuis moins de cinq ans. Il a peut-être perdu de vue que longtemps avant le Web il y avait les fichiers &lt;code&gt;.plan&lt;/code&gt; et &lt;code&gt;.project&lt;/code&gt; qu&amp;#39;on plaçait dans son répertoire d&amp;#39;utilisateur pour que les autres puissent les voir via &lt;code&gt;finger&lt;/code&gt;. Il a peut-être déjà oublié que pendant longtemps des pages Web servant à informer le public de ce sur quoi on travaille étaient justement nommées &amp;quot;.plan&amp;quot; (les joueurs n&amp;#39;auront pas oublié le &lt;code&gt;.plan&lt;/code&gt; de John Carmack par exemple). Quand le Web s&amp;#39;est popularisé, chacun y allait de sa &amp;quot;home page&amp;quot; sur laquelle on croisait le plus souvent la photo de l&amp;#39;auteur, de sa femme, de ses enfants, de son chien, et un petit compte-rendu de son dernier voyage. On a parlé longtemps de &amp;quot;online diaries&amp;quot; avant que le terme &amp;quot;weblog&amp;quot; n&amp;#39;ait fait son apparition. Avouez quand même que quand on n&amp;#39;est pas un &amp;quot;technique&amp;quot; dans l&amp;#39;âme, c&amp;#39;est plus simple d&amp;#39;utiliser Blogger, TypePad, ou (gloups!) Skyblog que de plonger dans le code, uploader ça chez son hébergeur, et répéter l&amp;#39;opération à chaque mise à jour. &lt;/p&gt;
&lt;p&gt;D&amp;#39;où le succès des blogs &amp;quot;clé en main&amp;quot; de ces dernières années, qui amène dans la blogosphère des millions de gens, lesquels évidemment rendent nettement plus anonymes les pionniers des premiers âges. Et quand un de ces pionniers ferme son blog, Boutin en fait un phénomène de société et prédit la mort de tous les blogs.&lt;/p&gt;
&lt;p&gt;Oui mais non! Ne mélangeons pas tout. Flickr est une galerie de photos; Facebook sert à garder le contact avec des gens et à retrouver ceux qu&amp;#39;on a perdu de vue; Twitter a pour vocation les notifications brèves et ponctuelles qui ne mériteraient vraiment pas un post complet. Aucun de ces services ne peut remplacer vraiment un &amp;quot;vrai&amp;quot; blog, qui est avant toute chose un lieu où publier des réflexions propres qu&amp;#39;on prend la peine de développer; et les soumettre à des commentaires de visiteurs qu&amp;#39;on espère amener un débat constructif.&lt;/p&gt;
&lt;p&gt;Les blogs ne se comparent pas à leur popularité. La popularité ne fait pas la qualité. Être lu ne rend pas pertinent. On ne démarre pas un blog pour y coller un compte AdSense. On ne fait pas ça pour le fric. &lt;/p&gt;
&lt;p&gt;Mais ça, certains ne peuvent pas le comprendre; faudrait le leur dire en 140 caractères peut-être...&lt;/p&gt;
</description>
		<pubDate>Mon, 08 Dec 2008 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2008/12/08/les-blogs_detrones_par_twitter.html</guid>
	</item>
	<item>
		<title>Comment devenir un hacker</title>
		<link>https://blog.jkbockstael.be/posts/2008/12/03/comment_devenir_un_hacker.html</link>
		<description>&lt;h1 id="comment-devenir-un-hacker"&gt;Comment devenir un hacker&lt;/h1&gt;
&lt;p&gt;Ma première traduction de l&amp;#39;anglais au français, d&amp;#39;une dimension un tant soit peu consistante, est enfin en ligne. &lt;a href="http://catb.org/~esr/faqs/hacker-howto.html"&gt;&amp;quot;How To Become A Hacker&amp;quot;&lt;/a&gt; a son &lt;a href="http://files.jkbockstael.be/hacker-howto-fr.html"&gt;&amp;quot;Comment devenir un hacker&amp;quot;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Pour ceux qui ne le connaissent pas, Eric Steven Raymond est l&amp;#39;auteur de &amp;quot;La Cathédrale et le Bazar&amp;quot; qui reste l&amp;#39;ouvrage de référence en matière de vulgarisation du mouvement open-source; il est également connu pour être le maintenant de &amp;quot;The Jargon File&amp;quot;, pas moins. Une sommité dans la culture hacker, qui a publié pendant les douze dernières années un HOWTO assez particulier et unique en son genre. Beaucoup de traductions en existent, j&amp;#39;ai constaté une fois la mienne finie que des traductions françaises obsolètes existent, mais ne sont pas mentionnées dans l&amp;#39;original. Certaines ne mentionnent pas la version d&amp;#39;origine ou la date de traduction, beaucoup ne prennent même pas la peine de mentionner l&amp;#39;auteur original! C&amp;#39;est du propre...&lt;/p&gt;
&lt;p&gt;Un petit mot de clarification: on parle ici de &amp;quot;hacker&amp;quot; au sens Bill Joy, Linus Torvalds, Larry Wall, ... pas de &amp;quot;cracker&amp;quot; au sens Kevin Mitnick et autres douteux.&lt;/p&gt;
&lt;p&gt;Je vous invite à lire &lt;a href="http://files.jkbockstael.be/hacker-howto-fr.html"&gt;mon modeste travail&lt;/a&gt; et à me donner votre avis, afin que je puisse le perfectionner et qu&amp;#39;il s&amp;#39;approche de la qualité de l&amp;#39;original.&lt;/p&gt;
</description>
		<pubDate>Wed, 03 Dec 2008 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2008/12/03/comment_devenir_un_hacker.html</guid>
	</item>
	<item>
		<title>Une tentative panoramique en HDR</title>
		<link>https://blog.jkbockstael.be/posts/2008/11/29/panoramique_hdr.html</link>
		<description>&lt;h1 id="une-tentative-panoramique-en-hdr"&gt;Une tentative panoramique en HDR&lt;/h1&gt;
&lt;p&gt;En fait, j&amp;#39;avais oublié, en même temps j&amp;#39;ai pris un panorama &amp;quot;presque 180°&amp;quot; de la même vue, qui a été passé la moulinette HDR aussi.&lt;/p&gt;
&lt;p&gt;On sent quand même le coté improvisé, il y a pas mal d&amp;#39;artefacts visibles, mais vivez chez moi et vous verrez ce que c&amp;#39;est de prendre vingt-cinq vues sans qu&amp;#39;une voiture de passage de n&amp;#39;y soit visible :)&lt;/p&gt;
&lt;p&gt;Enfin le résultat est quand même sympathique...&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2008/11/29/panoramique_hdr_attachments/081127-Panorama.jpg" title="Panorama - haute résolution"&gt;&lt;img src="//blog.jkbockstael.be/posts/2008/11/29/panoramique_hdr_attachments/081127-Panorama_thumb.jpg" alt="Panorama - miniature "&gt;&lt;/a&gt;&lt;/p&gt;
</description>
		<pubDate>Sat, 29 Nov 2008 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2008/11/29/panoramique_hdr.html</guid>
	</item>
	<item>
		<title>Une tentative en HDR</title>
		<link>https://blog.jkbockstael.be/posts/2008/11/28/hdr.html</link>
		<description>&lt;h1 id="une-tentative-en-hdr"&gt;Une tentative en HDR&lt;/h1&gt;
&lt;p&gt;Hier le soleil perçait de façon plutôt jolie, du coup je me suis dit &amp;quot;tiens, voilà une occasion de faire quelques balbutiements en photo HDR histoire de voir ce que ça donne&amp;quot;. Donc je ne me suis pas vraiment pris la tête et j&amp;#39;ai pris ce qui passait par la fenêtre.&lt;/p&gt;
&lt;p&gt;Forcément, la portée artistique de la chose peut laisser sur sa faim... mais là n&amp;#39;est pas le propos. Pour les curieux, l&amp;#39;appareil est un compact Kodak M853, le logiciel est Photomatix Pro, j&amp;#39;ai pris 5 vues (-2 EV, -1 EV, 0 EV, +1 EV et +2 EV).&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2008/11/28/hdr_attachments/Set1.jpg" title="HDR 1 - haute résolution"&gt;&lt;img src="//blog.jkbockstael.be/posts/2008/11/28/hdr_attachments/Set1_thumb.jpg" alt="HDR 1 - miniature"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2008/11/28/hdr_attachments/Set2.jpg" title="HDR 2 - haute résolution"&gt;&lt;img src="//blog.jkbockstael.be/posts/2008/11/28/hdr_attachments/Set2_thumb.jpg" alt="HDR 2 - miniature"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Et pour se faire une idée, les mêmes à 0 EV:&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2008/11/28/hdr_attachments/100_2562-01.jpg" title="Original 1 - haute résolution"&gt;&lt;img src="//blog.jkbockstael.be/posts/2008/11/28/hdr_attachments/100_2562-01_thumb.jpg" alt="Original 1 - miniature"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2008/11/28/hdr_attachments/100_2567-01.jpg" title="Original 2 - haute résolution"&gt;&lt;img src="//blog.jkbockstael.be/posts/2008/11/28/hdr_attachments/100_2567-01_thumb.jpg" alt="Original 2 - miniature"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A explorer...&lt;/p&gt;
</description>
		<pubDate>Fri, 28 Nov 2008 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2008/11/28/hdr.html</guid>
	</item>
	<item>
		<title>De la censure à la volée sur MSN</title>
		<link>https://blog.jkbockstael.be/posts/2008/11/25/censure_msn.html</link>
		<description>&lt;h1 id="de-la-censure-à-la-volée-sur-msn"&gt;De la censure à la volée sur MSN&lt;/h1&gt;
&lt;p&gt;Hier j&amp;#39;étais en grande conversation sur MSN (oui MSN, avec le client officier Microsoft Messenger, j&amp;#39;assume pleinement... c&amp;#39;est surtout que je me vois mal migrer tous mes amis vers Jabber, et les forcer ainsi à migrer leurs amis à eux et ainsi de suite...). Mon interlocuteur en vient à demander assistance pour l&amp;#39;installation d&amp;#39;un client BitTorrent. Simple, me dis-je, je vais lui faire télécharger et installer Vuze.&lt;/p&gt;
&lt;p&gt;Je lui envoie donc un lien vers &lt;code&gt;http://azureus.sourceforge.net/download.php&lt;/code&gt; mais je reçois instantanément un message d&amp;#39;erreur me disant que mon message n&amp;#39;a pas été délivré. Qu&amp;#39;importe, copier, coller, je renvoie. Erreur. Je renvoie. Erreur. M&amp;#39;enfin? Pas de problème web, donc ma connexion est vivante, donc je delog et relog MSN, je renvoie... erreur! J&amp;#39;explique que j&amp;#39;ai des soucis... pas d&amp;#39;erreur. Alors là ça devient un peu paranormal. Essais effectués, il est évident que quand mon message contient le lien il ne passe pas, alors que tout autre message passe. Microsoft n&amp;#39;aimerait-il pas qu&amp;#39;on parle de Vuze? Non, trop spécifique, ce serait quand même paranoïaque.&lt;/p&gt;
&lt;p&gt;En fait, après vérifications curieuses, Microsoft n&amp;#39;aime pas la partie &amp;quot;download.php&amp;quot; du lien en question. Là ça devient vraiment intéressant!&lt;/p&gt;
&lt;p&gt;Après recherches, je ne suis pas le seul à avoir constaté ce genre de choses, au point que les portes-paroles du service MSN ont avoue qu&amp;#39;il y a un filtrage actif des messages au contenu dangereux, et qu&amp;#39;on s&amp;#39;en tire bien avec un message d&amp;#39;erreur parce qu&amp;#39;au départ ce filtrage était totalement silencieux. Sympa.&lt;/p&gt;
&lt;p&gt;L&amp;#39;idée est que quand on maintient le service de messagerie instantané par défaut dont le client est installé d&amp;#39;office sur tout exemplaire de son système d&amp;#39;exploitation à la sécurité légendairement gruyèresque, ledit service devient très vite vecteur de toutes sortes de saloperies déguisant dans d&amp;#39;innocent messages des liens somme toute innocents d&amp;#39;aspect mais menant vers l&amp;#39;enfer comme seuls les utilisateurs de Windows peuvent le connaître. En gros, certains noms de fichiers ou URLs sont symptomatiques de malwares variés utilisant la plateforme MSN pour se propager. Donc dans la logique microsoftienne, au lieu de corriger la plateforme on va filtrer les noms de fichiers et URLs douteux.&lt;/p&gt;
&lt;p&gt;Et c&amp;#39;est super marrant! La liste des noms de fichiers concernés est colossale, et les URLs concernés sont aussi amusants à parcourir... parce que sont concernés en particulier tout URL finissant en &amp;quot;gallery.php&amp;quot; ou &amp;quot;download.php&amp;quot;. Donc une quantité colossale de pages de téléchargement ou de galeries innocentes se retrouvent ainsi interdites d&amp;#39;être citées via MSN. Délirant! Bien sûr Microsoft sait que les Gros Méchants Pirates™ qui veulent faire exploser tout PC du globe ne savent pas configurer un serveur web pour implémenter une simple redirection, ou plus simplement ne pas donner le suffixe &amp;quot;.php&amp;quot; à leur coupable code, ou encore plus simplement passer l&amp;#39;URL à une moulinette du type TinyURL qui le camouflera totalement... Les clochards qui dorment sur les bancs sont une nuisance? Supprimez les bancs!&lt;/p&gt;
&lt;p&gt;Bon ceci dit, si TinyURL est trop loin, ne perdez pas de vue qu&amp;#39;on parle de Microsoft, les esprits simples étant simples à tromper il vous suffit de remplacer un caractère de l&amp;#39;URL par sa valeur ASCII, par exemple passer de &amp;quot;download.php&amp;quot; à &amp;quot;d%6Fnload.php&amp;quot; et ça passe.&lt;/p&gt;
&lt;p&gt;A titre d&amp;#39;amusement, les interdits comportent entre autres:&lt;/p&gt;
&lt;p&gt;.scr&lt;/p&gt;
&lt;p&gt;.info (sans dec&amp;#39; ! un TLD entier est exclu)&lt;/p&gt;
&lt;p&gt;mypictures*.zip&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.allocinit.net/blog/msn-blocked-phrases/"&gt;Et j&amp;#39;en passe beaucoup!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Tiens... pas de suffixe &amp;quot;.asp&amp;quot; ou &amp;quot;.aspx&amp;quot; dans les URLs-de-Satan... comme c&amp;#39;est étrange.&lt;/p&gt;
</description>
		<pubDate>Tue, 25 Nov 2008 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2008/11/25/censure_msn.html</guid>
	</item>
	<item>
		<title>Tant de choses...</title>
		<link>https://blog.jkbockstael.be/posts/2008/11/19/tant_de_choses.html</link>
		<description>&lt;h1 id="tant-de-choses"&gt;Tant de choses...&lt;/h1&gt;
&lt;p&gt;Eh oui, ça fait plus d&amp;#39;une semaine que je n&amp;#39;ai rien posté, mais un éventuel attentif aura remarqué que je tweete encore des choses et d&amp;#39;autres. En bref et en simple, j&amp;#39;ai été assez occupé pour ne pas prendre le temps de rédiger un post digne de ce nom. Mais pour ne pas laisser le blog en désuétude, voici une mise à jour de choses et d&amp;#39;autres en vrac.&lt;/p&gt;
&lt;p&gt;Bon ben en vrac...&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Le projet dont je postais un petit teaser il y a de cela un mois avance plutôt bien étant donné son caractère pénible et long, les statuts &amp;quot;Phase 3:: xx%&amp;quot; c&amp;#39;est à ce sujet et j&amp;#39;en suis donc à la moitié de ladite phase 3, ce qui fait plaisir. Oui je garde le suspense, j&amp;#39;aime assez ça :)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Je me suis fait le plaisir de terminer la campagne de Warcraft III: Reign of Chaos. The Frozen Throne suivra, puis sûrement une exhumation de projets de mappings et d&amp;#39;add-ons à ce très pratique et confortable moteur. On dira ce qu&amp;#39;on voudra, mais les Warcrafts sont des jeux de grande qualité!&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Je me régale les zygomatiques en relisant des vieux strips des Peanuts aujourd&amp;#39;hui, ça ne perd pas de sa saveur avec l&amp;#39;âge au moins. Vive l&amp;#39;humour de qualité.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Les oreilles quant à elles se régalent aussi ces temps-ci, que ce soit de la superbe compilation &amp;quot;Nightmare Revisited&amp;quot; ou de sons aussi divers et variés que les albums &amp;quot;Iconoclast&amp;quot; de Heaven Shall Burn, &amp;quot;Black Horse&amp;quot; de Nickelback, l&amp;#39;intégralité des albums studios d&amp;#39;Aerosmith, les indétrônables Creedence Clearwater Revival, ou des joyeusetés plus punky comme Oi Polloi, The Business, UK Subs...&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;En gros c&amp;#39;est ça, et une fois n&amp;#39;est pas coutume je parle de mon quotidien :)&lt;/p&gt;
</description>
		<pubDate>Wed, 19 Nov 2008 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2008/11/19/tant_de_choses.html</guid>
	</item>
	<item>
		<title>Project Euler : Solution au problème 6, en C</title>
		<link>https://blog.jkbockstael.be/posts/2008/11/11/project_euler_6_c.html</link>
		<description>&lt;h1 id="project-euler--solution-au-problème-6-en-c"&gt;Project Euler : Solution au problème 6, en C&lt;/h1&gt;
&lt;p&gt;A l&amp;#39;heure où j&amp;#39;écris ceci, il y a en tout 216 problèmes dans la liste de Project Euler, ça demande un peu de productivité pour en trouver une solution avant que d&amp;#39;autres n&amp;#39;apparaissent. Dans l&amp;#39;immédiat voici une solution au problème 6, sixième sur deux cents seize...&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/* 2008/11/09 - euler6.c
 * Solution au Probleme 6 de Project Euler
 * http://projecteuler.net/index.php?section=problems&amp;amp;id=6
 * Jean Karim Bockstael - jkb@jkbockstael.be
 */
 
#include &amp;lt;stdio.h&amp;gt;

int euler6(int range) {
    unsigned int squaresum=0;
    unsigned int sumsquare=0;
    int i;
    for (i=1; i&amp;lt;=range; i++) {
        squaresum+=(i*i);
        }
    for (i=1; i&amp;lt;=range; i++) {
        sumsquare+=i;
    }
    sumsquare*=sumsquare;
    return (int)sumsquare-squaresum;
    }

int main(int argc, char** argv) {
    printf(&amp;quot;%i\n&amp;quot;,euler6(100));
    return 0;
    }
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Tue, 11 Nov 2008 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2008/11/11/project_euler_6_c.html</guid>
	</item>
	<item>
		<title>Project Euler : Solution au problème 5, en C</title>
		<link>https://blog.jkbockstael.be/posts/2008/11/10/project_euler_5_c.html</link>
		<description>&lt;h1 id="project-euler--solution-au-problème-5-en-c"&gt;Project Euler : Solution au problème 5, en C&lt;/h1&gt;
&lt;p&gt;Dans l&amp;#39;enchaînement, une solution au problème 5, toujours en C. Attention, l&amp;#39;énoncé est particulièrement du type &amp;quot;on compte sur la vitesse d&amp;#39;exécution de l&amp;#39;ordinateur&amp;quot; et l&amp;#39;algorithme que j&amp;#39;ai vomi est particulièrement brutal et non-optimisé.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/* 2008/11/09 - euler5.c
 * Solution au Probleme 5 de Project Euler
 * http://projecteuler.net/index.php?section=problems&amp;amp;id=5
 * Jean Karim Bockstael - jkb@jkbockstael.be
 */
 
#include &amp;lt;stdio.h&amp;gt;

int euler5(int range) {
    int smallest=2520;
    int i;
    while (smallest++) {
        for (i=2; i&amp;lt;range+1; i++) {
            if ((smallest % i) != 0) {
                break;
                }
            }
        if (i==range+1) {
            return smallest;
            }
        }
    }

int main(int arc, char** argv) {
    printf(&amp;quot;%i\n&amp;quot;,euler5(20));
    return 0;
    }
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Mon, 10 Nov 2008 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2008/11/10/project_euler_5_c.html</guid>
	</item>
	<item>
		<title>Project Euler : Solution au problème 4, en C</title>
		<link>https://blog.jkbockstael.be/posts/2008/11/09/project_euler_4_c.html</link>
		<description>&lt;h1 id="project-euler--solution-au-problème-4-en-c"&gt;Project Euler : Solution au problème 4, en C&lt;/h1&gt;
&lt;p&gt;Tiens ça fait une semaine sans code, pas bien!&lt;/p&gt;
&lt;p&gt;On va dire que j&amp;#39;avais une semaine chargée d&amp;#39;occupations d&amp;#39;ordre sérieux, et qu&amp;#39;un divertissement de geek n&amp;#39;avait pas exactement sa place dans mon agenda. Oui, ça fait crédible, disons ça. Enfin, toujours est-il que voici une solution au problème 4 du Project Euler, en C toujours parce que le C c&amp;#39;est le bien.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/* 2008/11/09 - euler4.c
 * Solution au Probleme 4 de Project Euler
 * http://projecteuler.net/index.php?section=problems&amp;amp;id=4
 * Jean Karim Bockstael - jkb@jkbockstael.be
 */
 
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;math.h&amp;gt;

int ispalindrome(int n) {
    int len = n &amp;lt; 100000 ? 5 : 6;
    while (len &amp;gt; 1 ) {
        if ((n / (int)pow(10.0,(float)--len)) != (n % 10)) {
            return 0;
            }
        n = (n % (int)pow(10.0,(float)len--)) / 10;
        }
    return 1;
    }

int euler4() {
    int x,y;
    int product;
    int biggest=0;
    for (x=100; x&amp;lt;999; x++) {
        for (y=x; y&amp;lt;999; y++) {
            product=x*y;
            if (ispalindrome(product)) {
                biggest = (product &amp;gt; biggest) ? product : biggest;
                }
            }
        }
    return biggest;
    }

int main(int argc, char** argv) {
    printf(&amp;quot;%i\n&amp;quot;,euler4());
    return 0;
    }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;C&amp;#39;est presque élégant d&amp;#39;ailleurs...&lt;/p&gt;
</description>
		<pubDate>Sun, 09 Nov 2008 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2008/11/09/project_euler_4_c.html</guid>
	</item>
	<item>
		<title>Le paradoxe du piéton de Schrödinger</title>
		<link>https://blog.jkbockstael.be/posts/2008/11/06/pieton_schrodinger.html</link>
		<description>&lt;h1 id="le-paradoxe-du-piéton-de-schrödinger"&gt;Le paradoxe du piéton de Schrödinger&lt;/h1&gt;
&lt;p&gt;Tout le monde connaît, au moins de nom, le paradoxe dit du &amp;quot;chat de Schrödinger&amp;quot;. En bref et pour épargner les neurones d&amp;#39;avant-café, c&amp;#39;est une illustration des bizarreries de la physique quantique au moyen d&amp;#39;un chat mort-vivant (comme &amp;quot;mort et vivant&amp;quot;, pas comme &amp;quot;it&amp;#39;s just a thriller night&amp;quot;), en gros la mise du chat dépendant de la désintégration d&amp;#39;une particule, et la particule pouvant être à la fois désintégrée ou non, le chat est à la fois vivant et mort tant qu&amp;#39;on a pas fixé son état en l&amp;#39;observant. Ça s&amp;#39;applique aussi aux piétons.&lt;/p&gt;
&lt;p&gt;Le dispositif est du même type que celui du chat de notre malicieux Schrödinger: soit un piéton dont le déplacement au travers d&amp;#39;un passage ad hoc est régi par l&amp;#39;état d&amp;#39;un feu lui indiquant s&amp;#39;il peut ou non franchir la chaussée. Si le feu est à la fois rouge et vert, le piéton est à la fois sur le trottoir et sur la route, donc il est à la fois en sécurité et en train de se faire écraser par un bus TEC (dont il est un fait établi que le chauffeur ne freine pas même en présence d&amp;#39;un piéton sur sa route), à la fois vivant et mort. Le piéton est donc un piéton de Schrödinger.&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2008/11/06/pieton_schrodinger_attachments/081106-Feu-Schrodinger.jpg" title="Feu de Schrodinger - haute résolution"&gt;&lt;img src="//blog.jkbockstael.be/posts/2008/11/06/pieton_schrodinger_attachments/081106-Feu-Schrodinger_thumb.jpg" alt="Feu de Schrodinger - miniature"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Le phénomène peut être observé à l&amp;#39;œil nu à proximité de la Place du 20 Aout, à Liège.&lt;/p&gt;
</description>
		<pubDate>Thu, 06 Nov 2008 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2008/11/06/pieton_schrodinger.html</guid>
	</item>
	<item>
		<title>Project Euler : Solution au problème 3, en C</title>
		<link>https://blog.jkbockstael.be/posts/2008/11/04/project_euler_3_c.html</link>
		<description>&lt;h1 id="project-euler--solution-au-problème-3-en-c"&gt;Project Euler : Solution au problème 3, en C&lt;/h1&gt;
&lt;p&gt;Toujours dans la série des problèmes du Project Euler, voici ma solution au problème 3, en C toujours, mais qui m&amp;#39;embête un peu parce que je sors du contexte ANSI/ISO C en utilisant une librairie GNU pour la manipulation de nombre atrocement grand.&lt;/p&gt;
&lt;p&gt;D&amp;#39;ailleurs au passage, n&amp;#39;ayant pas d&amp;#39;expérience en manipulation de big-integers, je suis preneur de toute sagesse sur le sujet.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/* 2008/11/01 - euler3.c
 * Solution au Probleme 3 de Project Euler
 * http://projecteuler.net/index.php?section=problems&amp;amp;id=3
 * Jean Karim Bockstael - jkb@jkbockstael.be
 */
 
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;imath.h&amp;gt;
#define MAXPRIMES 200000

int findprimes(int primes[], unsigned long long maxvalue) {
    primes[0]=2; /* le premier premier */
    int numfound=1;
    int i,j;
    int pri; /* pri=0 si divisible */
    for (i=3; i&amp;lt;maxvalue; i+=2) {
        pri=1; /* jusqu&amp;#39;a preuve du contraire */
        for (j=0; j&amp;lt;numfound; j++) {
            if ((i%primes[j])==0) {
                pri=0;
                break;
                }
            }
         if (pri) {
             primes[numfound++]=i;
             }
        }
    return numfound;
    }

int euler3(unsigned long long n) {
    int foundprimes[MAXPRIMES];
    int numfound=findprimes(foundprimes,lsqrt64(n));
    int i;
    for (i=numfound; i&amp;gt;=0; i--) {
        if ((n%foundprimes[i])==0) {
            break;
            }
        }
    return i==-1 ? i : foundprimes[i];
    }

int main(int argc, char** argv) {
    printf(&amp;quot;%i\n&amp;quot;,euler3(600851475143ull)); /* Y&amp;#39;a pas encore plus grand? */
    return 0;
    }
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Tue, 04 Nov 2008 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2008/11/04/project_euler_3_c.html</guid>
	</item>
	<item>
		<title>Project Euler : Solution au problème 2, en C</title>
		<link>https://blog.jkbockstael.be/posts/2008/11/03/project_euler_2_c.html</link>
		<description>&lt;h1 id="project-euler--solution-au-problème-2-en-c"&gt;Project Euler : Solution au problème 2, en C&lt;/h1&gt;
&lt;p&gt;Le problème 1 était un sympathique mise en bouche, voici ma solution au problème 2, en C.&lt;/p&gt;
&lt;p&gt;J&amp;#39;y tente même un brin d&amp;#39;optimisation, puisque je ne garde en mémoire que maximum 3 termes de la suite de Fibonacci à un moment donné :)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/* 2008/11/01 - euler2.c
 * Solution au Probleme 2 de Project Euler
 * http://projecteuler.net/index.php?section=problems&amp;amp;id=2
 * Jean Karim Bockstael - jkb@jkbockstael.be
 */
 
#include &amp;lt;stdio.h&amp;gt;

int euler2(int n) {
    int sum=0;
    int fib1=0;
    int fib2=1;
    int fib3;
    while (fib2&amp;lt;n) {
        if ((fib2%2)==0) {
            sum+=fib2;
            }
        fib3=fib1+fib2;
        fib1=fib2;
        fib2=fib3;
        }
    return sum;
    }
    
int main(int argc, char** argv) {
    printf(&amp;quot;%i\n&amp;quot;,euler2(4000000));
    return 0;
    }
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Mon, 03 Nov 2008 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2008/11/03/project_euler_2_c.html</guid>
	</item>
	<item>
		<title>Project Euler: Solution au problème 1, en C</title>
		<link>https://blog.jkbockstael.be/posts/2008/11/02/project_euler_1_c.html</link>
		<description>&lt;h1 id="project-euler--solution-au-problème-1-en-c"&gt;Project Euler : Solution au problème 1, en C&lt;/h1&gt;
&lt;p&gt;Pour ceux qui ne le connaissent pas encore, le Project Euler est un projet lancé par Colin Hughes initialement sur &lt;a href="http://mathschallenge.net/"&gt;MathsChallenge.net&lt;/a&gt; en 2001, mais qui depuis a tellement grandi qu&amp;#39;il est un site à part entière.&lt;/p&gt;
&lt;p&gt;L&amp;#39;idée est sympathique, il s&amp;#39;agit d&amp;#39;une série de problèmes de mathématiques qui sont conçus pour etre résolus à l&amp;#39;aide d&amp;#39;un programme, et présentés par ordre croissant de difficulté.&lt;/p&gt;
&lt;p&gt;Bien sur, pour chaque problème il y a plusieurs manières d&amp;#39;atteindre la solution, selon le critère de perfection choisi, et plusieurs implémentations en plusieurs langages. Voici ma solution au Problème 1, en C:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/* 2008/11/01 - euler1.c
 * Solution au Probleme 1 de Project Euler
 * http://projecteuler.net/index.php?section=problems&amp;amp;id=1
 * Jean Karim Bockstael - jkb@jkbockstael.be
 */

#include &amp;lt;stdio.h&amp;gt;

int euler1(int n) {
    int sum=0;
    int i;
    for (i=3; i&amp;lt;n; i++) { /* 1 et 2 sont hors-probleme */
        if (((i%3)==0) || ((i%5)==0)) {
            sum+=i;
            }
        }
    return sum;
    }
    
    
int main(int argc, char** argv) {
    printf(&amp;quot;%i\n&amp;quot;,euler1(1000));
    return 0;
    }
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Sun, 02 Nov 2008 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2008/11/02/project_euler_1_c.html</guid>
	</item>
	<item>
		<title>Rot13 en C</title>
		<link>https://blog.jkbockstael.be/posts/2008/11/01/rot13_c.html</link>
		<description>&lt;h1 id="rot13-en-c"&gt;Rot13 en C&lt;/h1&gt;
&lt;p&gt;La série continue, cette fois-ci avec une implémentation portable en ANSI/ISO C, pondue avant le premier café. Ce n&amp;#39;est pas la plus rapide ou la plus compacte, mais elle me semble assez élégante et portable pour être montrée. Et je ne pouvais pas le pas le faire en C, faut un minimum de savoir-vivre quand même...&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/* Rot13 en ISO/ANSI C
 * Cette fonction convertit le caractere qu&amp;#39;on lui passe
 */
 
int rot13(int c) {
    if (c &amp;gt;= &amp;#39;A&amp;#39; &amp;amp;&amp;amp; c &amp;lt;= &amp;#39;Z&amp;#39;) {
        return ((c+13)%(&amp;#39;Z&amp;#39;+1))+&amp;#39;A&amp;#39;
        }
    else if (c &amp;gt;=&amp;#39;a&amp;#39; &amp;amp;&amp;amp; c &amp;lt;= &amp;#39;z&amp;#39;) {
        return ((c+13)%(&amp;#39;z&amp;#39;+1))+&amp;#39;a&amp;#39;
        }
    else {
        return c
        }
    }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;On ne me contredira plus si je dis &amp;quot;je fais du C au petit déjeuner&amp;quot;.&lt;/p&gt;
</description>
		<pubDate>Sat, 01 Nov 2008 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2008/11/01/rot13_c.html</guid>
	</item>
	<item>
		<title>CC-by-nc</title>
		<link>https://blog.jkbockstael.be/posts/2008/11/01/cc_by_nc.html</link>
		<description>&lt;h1 id="cc-by-nc"&gt;CC-by-nc&lt;/h1&gt;
&lt;p&gt;Un titre cryptique ça attire le regard. Pourtant celui-ci dit tout. Le contenu de ce blog est, sauf mention contraire, la propriété de son auteur, lequel se réserve tous les droits qui vont avec. Évidemment, quand on demande poliment, l&amp;#39;auteur peut céder une partie de ces droits au cas-par-cas.&lt;/p&gt;
&lt;p&gt;Mais voilà, l&amp;#39;auteur se met à publier du code source, qu&amp;#39;il aimerait voir utile à d&amp;#39;autres; pour plus d&amp;#39;efficacité ledit code doit être explicitement libéré de certains droits afin d&amp;#39;être utilisable immédiatement. Donc les posts qui sont taggés &amp;quot;cc-by-nc&amp;quot; voient leur contenu mis à disposition sous licence &lt;em&gt;Creative Commons: Attribution, Non-Commercial&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Un mot d&amp;#39;explication en gros: les licences Creative Commons sont un moyen efficace de publier ce que l&amp;#39;on veut (pourvu qu&amp;#39;on en soit l&amp;#39;auteur, évidemment) en gardant certain ou tous les droits, mais en gardant quand même une couverture légale complète. Certains me diront &amp;quot;oui mais c&amp;#39;est du code, balance-ça sous GPL!&amp;quot; et j&amp;#39;y oppose que la GPL impose de redistribuer tout dérivé également sous GPL; ce qui est en directe contradiction avec un usage académique, puisque le plus souvent les travaux académiques deviennent propriété de l&amp;#39;académie en question. Une CC-by-nc est donc plus souple: tout ce que je demande c&amp;#39;est qu&amp;#39;on me cite pour mon travail, et qu&amp;#39;on ne fasse pas d&amp;#39;argent sur mon travail sans m&amp;#39;en demander l&amp;#39;autorisation au préalable.&lt;/p&gt;
&lt;p&gt;Pour éviter de peupler mes posts de petits badges mignons, c&amp;#39;est le système de tagging du blog qui servira d&amp;#39;indication. Tout ce qui est sous license &lt;em&gt;Creative Commons Attribution Non-Commercial&lt;/em&gt; est pourvu du tag &amp;quot;cc-by-nc&amp;quot;, je procéderai de façon similaire si d&amp;#39;autres parties sont sous d&amp;#39;autres licences.&lt;/p&gt;
</description>
		<pubDate>Sat, 01 Nov 2008 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2008/11/01/cc_by_nc.html</guid>
	</item>
	<item>
		<title>HOWTO: Bouter le feu à sa cuisine</title>
		<link>https://blog.jkbockstael.be/posts/2008/10/31/howto_bouter_le_feu_a_sa_cuisine.html</link>
		<description>&lt;h1 id="howto-bouter-le-feu-à-sa-cuisine"&gt;HOWTO: Bouter le feu à sa cuisine&lt;/h1&gt;
&lt;p&gt;Pour tous ceux qui voudraient faire une arnaque à l&amp;#39;assurance, ou simplement ceux qui devraient profiter de la distraction des autres pour se remettre à un peu plus de prudence: une recette d&amp;#39;incendie.&lt;/p&gt;
&lt;p&gt;La préparation est simple:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Avoir envie de se mitonner un quelque chose de chaud.&lt;/li&gt;
&lt;li&gt;Constater l&amp;#39;encombrement du plan de travail.&lt;/li&gt;
&lt;li&gt;Faire de la place en posant une planche à pain sur une plaque de cuisson.&lt;/li&gt;
&lt;li&gt;Poser sur la plaque voisine une poele qu&amp;#39;on désire faire chauffer.&lt;/li&gt;
&lt;li&gt;Se tromper de bouton.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ma plaque est vitrocéramique, mais je pense que ça peut fonctionner avec n&amp;#39;importe quel type de plaque de cuisson, sauf à induction. Le résultat sera sûrement plus rapide avec une cuisinière à gaz. En tout cas, les flammes qui se déclenchent dès qu&amp;#39;on prend la planche en main sont du plus bel effet :)&lt;/p&gt;
&lt;p&gt;C&amp;#39;est du propre hein?&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2008/10/31/howto_bouter_le_feu_a_sa_cuisine_attachments/100_2206-01.jpg"&gt;&lt;img src="//blog.jkbockstael.be/posts/2008/10/31/howto_bouter_le_feu_a_sa_cuisine_attachments/100_2206-01_thumb.jpg" alt="Degat - miniature"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Les enfants, n&amp;#39;essayez pas ça chez vous...&lt;/p&gt;
</description>
		<pubDate>Fri, 31 Oct 2008 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2008/10/31/howto_bouter_le_feu_a_sa_cuisine.html</guid>
	</item>
	<item>
		<title>Rot13 en Bash</title>
		<link>https://blog.jkbockstael.be/posts/2008/10/30/rot13_bash.html</link>
		<description>&lt;h1 id="rot13-en-bash"&gt;Rot13 en Bash&lt;/h1&gt;
&lt;p&gt;Deuxième de la série, pour les &amp;quot;un peu plus geeks&amp;quot; ou simplement ceux qui n&amp;#39;utilisant pas Mac OS n&amp;#39;en ont absolument rien à faire de l&amp;#39;AppleScript: une implémentation en Bash.&lt;/p&gt;
&lt;p&gt;Extraite de mon .bashrc parce que je le vaux bien:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;rot13 () { # Peut etre utilise comme filtre ou commande
    if [ $# -eq 0 ] ; then
        tr &amp;#39;[a-m][n-z][A-M][N-Z]&amp;#39; &amp;#39;[n-z][a-m][N-Z][A-M]&amp;#39;
    else
        echo $* | tr &amp;#39;[a-m][n-z][A-M][N-Z]&amp;#39; &amp;#39;[n-z][a-m][N-Z][A-M]&amp;#39;
    fi
    }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;La suite au prochain épisode... et pour que ça aille plus vite, s&amp;#39;il y a des volontaires pour proposer des implémentations dans d&amp;#39;autres langages, je suis preneur!&lt;/p&gt;
</description>
		<pubDate>Thu, 30 Oct 2008 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2008/10/30/rot13_bash.html</guid>
	</item>
	<item>
		<title>Rot13 en AppleScript</title>
		<link>https://blog.jkbockstael.be/posts/2008/10/29/rot13_applescript.html</link>
		<description>&lt;h1 id="rot13-en-applescript"&gt;Rot13 en AppleScript&lt;/h1&gt;
&lt;p&gt;La page de Jay Kominek sur le sujet n&amp;#39;étant pas mise à jour depuis 2004, je commence ma collection d&amp;#39;implémentations du Rot13 par la contribution que je lui avais envoyé, en pur AppleScript. Pour ceux qui ne savent pas ce qu&amp;#39;est le Rot13, c&amp;#39;est simplement le Chiffre de César, avec un décalage de 13 lettres pour être soi-même sa propre fonction inverse. Elegant et omniprésent.&lt;/p&gt;
&lt;p&gt;En AppleScript donc (avec très longues lignes):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(* Rot13 in pure AppleScript
* 2006-08-10 - waw, pas d&amp;#39;hier!
* Jean Karim Bockstael
*)
on rot13(inputString)
    set lowercaseChars to &amp;quot;abcdefghijklmnopqrstuvwxyz&amp;quot;
    set uppercaseChars to &amp;quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ&amp;quot;
    set tempOutput to &amp;quot;&amp;quot;
    considering case
        repeat with theChar in inputString
            if ((offset of theChar in uppercaseChars) is not 0) then
                try
                    set tempOutput to tempOutput &amp;amp; (character ((((offset of theChar in uppercaseChars) + 13) mod 26) + 0) in uppercaseChars)
                on error
                    set tempOutput to tempOutput &amp;amp; &amp;quot;Z&amp;quot;
                end try
            else if ((offset of theChar in lowercaseChars) is not 0) then
                try
                    set tempOutput to tempOutput &amp;amp; (character ((((offset of theChar in lowercaseChars) + 13) mod 26) + 0) in lowercaseChars)
                on error
                    set tempOutput to tempOutput &amp;amp; &amp;quot;z&amp;quot;
                end try
            else
                set tempOutput to tempOutput &amp;amp; theChar
            end if
        end repeat
    end considering
end rot13
&lt;/code&gt;&lt;/pre&gt;
</description>
		<pubDate>Wed, 29 Oct 2008 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2008/10/29/rot13_applescript.html</guid>
	</item>
	<item>
		<title>Pour faciliter le retagging...</title>
		<link>https://blog.jkbockstael.be/posts/2008/10/28/scripts_itunes.html</link>
		<description>&lt;h1 id="pour-faciliter-le-retagging"&gt;Pour faciliter le retagging...&lt;/h1&gt;
&lt;p&gt;Si vous êtes comme moi amateur de beaucoup de musiques et maniaque à tendance obsessionnelle quant à l&amp;#39;exactitude des tags de vos fichiers audio et même des noms des fichiers eux-mêmes, vous vous retrouvez sûrement à retaper à la main pour les fichiers ce qui a déjà été tapé pour les tags. C&amp;#39;est redondant donc à éviter.&lt;/p&gt;
&lt;p&gt;iTunes est pourvu d&amp;#39;un bon dictionnaire AppleScript, et j&amp;#39;ai dans mes tiroirs quelques scripts qui me facilitent la vie, donc qui peuvent la faciliter à d&amp;#39;autres.&lt;/p&gt;
&lt;p&gt;Cela dit, petite mise en garde: c&amp;#39;est du brut de copier-coller de script à usage personnel; c&amp;#39;est donc sans garde-fou, sans vérification de bon déroulement, ça part du principe que je sais ce que je fais en les lançant. Je ferai éventuellement un soir de morne ennui une révision pour les rendre plus &amp;quot;solides&amp;quot; et génériques, mais dans l&amp;#39;immédiat &amp;quot;mange les restes&amp;quot;! A placer dans &lt;code&gt;~/Library/iTunes/Scripts/&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Pour remplir en incrémentant le champ &amp;quot;track number&amp;quot; des pistes sélectionnées:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;tell application &amp;quot;iTunes&amp;quot;
    if selection is not {} then
        set track_list to selection
        set i to 0
        repeat with a_track in track_list
            set i to (i + 1)
            set a_track&amp;#39;s track number to i
        end repeat
    end if
end tell
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Pour renommer une liste de lecture pour qu&amp;#39;elle reflète son contenu (tiens, avec des commentaires propres et en anglais, ce qui me laisse supposer que j&amp;#39;avais l&amp;#39;intention de publier ça un jour):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(* 
* getArtistNames(aPlaylist: iTunes playlist)
* retrieves the list of artist names for the tracks in the passed playlist
* returns: list of strings
*)
on getArtistNames(aPlaylist)
    tell application &amp;quot;iTunes&amp;quot; to set theTempArtistNames to (artist of tracks of aPlaylist)
    set theArtistNames to {}
    repeat with aName in theTempArtistNames
        if theArtistNames does not contain aName then copy (contents of aName) to the end of theArtistNames
    end repeat
    return theArtistNames
end getArtistNames

(* 
* getAlbumName(aPlaylist: iTunes playlist)
* retrieves the album name for the first track in the passed playlist
* returns: string
*)
on getAlbumName(aPlaylist)
    tell application &amp;quot;iTunes&amp;quot; to set theAlbumName to album of first item of tracks of aPlaylist
    return theAlbumName
end getAlbumName

(*
* createPlaylistName(aPlaylist: iTunes playlist)
* creates a playlist name for the passed playlist
* returns: string
*)
on createPlaylistName(aPlaylist)
    set theArtistNames to getArtistNames(aPlaylist)
    if (count theArtistNames) = 1 then
        set theAlbumName to getAlbumName(aPlaylist)
        set thePlaylistName to (first item of theArtistNames) &amp;amp; &amp;quot; - &amp;quot; &amp;amp; theAlbumName
    else
        set thePlaylistName to first item of theArtistNames
        repeat with anArtistName in rest of theArtistNames
            set thePlaylistName to (thePlaylistName &amp;amp; &amp;quot;, &amp;quot; &amp;amp; anArtistName)
        end repeat
    end if
    return thePlaylistName
end createPlaylistName


(*
* Main
*)
on run
    tell application &amp;quot;iTunes&amp;quot;
        set thePlaylist to view of front window
    end tell
    set thePlaylistName to createPlaylistName(thePlaylist)
    tell application &amp;quot;iTunes&amp;quot;
        set name of thePlaylist to thePlaylistName
    end tell
end run
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Et le plus pratique, pour renommer les fichiers en fonction de leurs tags (attention, j&amp;#39;y fais l&amp;#39;hypothèse forte que le fichier est soit au format AAC soit au format MP3):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;tell application &amp;quot;iTunes&amp;quot;
    if selection is not {} then
        set cur_list to selection
        repeat with cur_track in cur_list
            tell cur_track
                set cur_track_name to name
                if kind of cur_track is &amp;quot;AAC audio file&amp;quot; then
                    set cur_track_suffix to &amp;quot;.m4a&amp;quot;
                else
                    set cur_track_suffix to &amp;quot;.mp3&amp;quot;
                end if
                if (track number) &amp;lt; 10 then
                    set cur_track_num to (&amp;quot;0&amp;quot; &amp;amp; ((track number) as string))
                else
                    set cur_track_num to ((track number) as string)
                end if
                set cur_track_location to location
                tell application &amp;quot;Finder&amp;quot;
                    set cur_track_file to (get cur_track_location)
                    set cur_track_file&amp;#39;s name to cur_track_num &amp;amp; &amp;quot; &amp;quot; &amp;amp; cur_track_name &amp;amp; cur_track_suffix
                end tell
            end tell
        end repeat
    end if
end tell
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Voilà, ça peut servir...&lt;/p&gt;
</description>
		<pubDate>Tue, 28 Oct 2008 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2008/10/28/scripts_itunes.html</guid>
	</item>
	<item>
		<title>Ceci est peut-être un manifeste terroriste</title>
		<link>https://blog.jkbockstael.be/posts/2008/10/27/manifeste_terroriste.html</link>
		<description>&lt;h1 id="ceci-est-peut-être-un-manifeste-terroriste"&gt;Ceci est peut-être un manifeste terroriste&lt;/h1&gt;
&lt;p&gt;La colonne à la droite du présent texte comporte une boîte relatant au fur et à mesure mes activités trop ponctuelles pour mériter un vrai post. Le système utilisé est ce qu&amp;#39;on appelle désormais du micro-blogging, en particulier j&amp;#39;utilise le service Twitter. Si jamais on ne voit plus de mises à jour de mon statut Twitter, c&amp;#39;est sûrement qu&amp;#39;on est venu m&amp;#39;arrêter pour l&amp;#39;avoir utilisé et confirmant ainsi que je suis un terroriste, commes tous ces activistes de gauche ou végétariens qui utilisent ces services de micro-blogging pour coordonner vite et bien leurs attaques à l&amp;#39;encontre de notre magnifique société occidentale sacrée. Ou en tout cas c&amp;#39;est l&amp;#39;une des conclusions hasardeuses qui émanent d&amp;#39;un rapport concocté par l&amp;#39;US Army. Sans dec&amp;#39;!&lt;/p&gt;
&lt;p&gt;L&amp;#39;objet du délit &lt;a href="http://www.fas.org/irp/eprint/mobile.pdf"&gt;le voici&lt;/a&gt;, un rapport concocté par le &lt;em&gt;304th MI Bn&lt;/em&gt;. (comme &amp;quot;304ème bataillon de renseignement militaire&amp;quot;, pas exactement des brèles à priori) et présentant des scénarios d&amp;#39;usage des technologies modernes embarquées sur téléphones cellulaires par des groupes terroristes, le raisonnement étant basé sur des extrapolations d&amp;#39;informations disponibles sur les sites, forums, et blogs plus ou moins liés à Al-Queda. Pas exactement du &amp;quot;top-secret&amp;quot; donc. Le rapport, après une brève introduction de ce qu&amp;#39;est au juste Twitter, explique que le service a déjà été utilisé par des activistes &amp;quot;socialistes, partisans des droits de l&amp;#39;homme, communistes, végétariens, anarchistes, religieux, athées, partisans politiques, hacktivistes, et autres&amp;quot; pour &amp;quot;communiquer entre eux et envoyer des messages à un large public&amp;quot;; à la traduction près, je cite. Ensuite le ton devient un brin plus sérieux en affirmant qu&amp;#39;on assiste déjà à des commentaires pro- ou anti-Hezbollah sur Twitter, et que ce dernier a même été utilisé pour informer des mouvements des forces de l&amp;#39;ordre lors de manifestations... et histoire de bien marquer le coup, trois scénarios d&amp;#39;utilisation sont proposés pour que tout galonné lent du ciboulot saisisse bien l&amp;#39;ampleur de la menace!&lt;/p&gt;
&lt;p&gt;Ce n&amp;#39;est pas la première fois qu&amp;#39;on se prend un délire paranoïaque sur l&amp;#39;usage de technologies atrocement modernes et obscures à des fins de recrutement ou de coordination par des activistes qui ne peuvent être que terroristes. Le Congrès américain avait déjà eu des sueurs froides quand quelqu&amp;#39;un leur a révélé l&amp;#39;existence de Second Life et &lt;a href="http://blog.wired.com/defense/2008/04/second-life.html"&gt;l&amp;#39;horreur que ça représente au niveau de la sûreté nationale&lt;/a&gt;; un monde non surveillé où l&amp;#39;anonymat fricote avec la possibilité de transférer de l&amp;#39;argent réel entre avatars virtuels c&amp;#39;est la porte ouverte à toutes les fenêtres, pour sûr. Effectivement, la tranche d&amp;#39;âge des utilisateurs de Second Life (18-35 ans) correspond à celle des efforts de recrutements de cellules terroristes, mais les responsables de chez Linden Labs on bien vite fait remarquer qu&amp;#39;un paiement typique s&amp;#39;élève à tout au plus quelques dollars US, un transfert monétaire conséquent serait flagrant dans les logs. Qu&amp;#39;importe, si Second Life n&amp;#39;est pas une menace en soi c&amp;#39;est parce que les kamikazes en turbans sont tous en train de transformer World of Warcraft en &lt;a href="http://blog.wired.com/defense/2008/09/world-of-warcra.html"&gt;outil de planification stratégique&lt;/a&gt;, c&amp;#39;est évident. Après tout c&amp;#39;est une évidence, en tout cas pour l&amp;#39;&lt;em&gt;Intelligence Advanced Research Projects Activity&lt;/em&gt; et son phalange d&amp;#39;experts en sécurité qui soutient que puisqu&amp;#39;un gouvernement ne peut pas tout surveiller dans un monde virtuel où l&amp;#39;anonymat est omniprésent, forcément les terroristes de tous poils vont en faire bon usage.&lt;/p&gt;
&lt;p&gt;Et le reste? Je veux dire, les bons vieux chat-rooms, IRC, les forums de tous genres, les serveurs VoIP privés, ... autant de moyens de communication plus ou moins temps-réel disponibles de tout point du globe ou presque, le tout avec un anonymat quasiment garanti. Autant de moyen de communication qui ne peuvent que faciliter les activités terroristes, et qui donc doivent à tout prix être interdits ou au moins surveillés de près?&lt;/p&gt;
&lt;p&gt;Bon cela dit, la faute n&amp;#39;est pas forcément à ceux qui rédigent ce genre de rapport. Après tout ils ne font que faire leur boulot, à savoir informer leurs supérieurs qui ne sont pas forcément au courant de toutes les technologies disponibles ou des différentes manières dont elles pourraient être utilisées. Les galonnés ont le pouvoir de décider, un certain nombre de savants les informent afin qu&amp;#39;ils puissent décider en connaissance de cause.&lt;/p&gt;
&lt;p&gt;Certes, mais la question que lesdits galonnés semblent poser est &amp;quot;comment un terroriste pourrait-il utiliser les technologies modernes&amp;quot;, et nos braves experts imaginent des scénarios mettant en œuvre telle ou telle modernité... ce qui les amène inéluctablement à la conclusion que ça peut être utile. Ben oui, forcément. Si ça m&amp;#39;est utile ça peut être utile à un terroriste. Vu comme ça, tout est utile à un terroriste, donc tout facilite le travail de massacre aveugle et de destruction de nos saintes valeurs occidentales. Donc tout doit être sinon interdit, au moins surveillé d&amp;#39;aussi près que les techniques et technologies le permettent.&lt;/p&gt;
&lt;p&gt;Big Brother is watching you! Nous avons tous entendu parler un jour ou l&amp;#39;autre du &lt;em&gt;Total Information Awareness&lt;/em&gt;, ce programme ambitieux né au lendemain du 11 septembre 2001 et visant à observer tout échange de données sous quelque forme que ce soit à la recherche du moindre indice pouvant éventuellement en cherchant loin laisser suspecter la possibilité d&amp;#39;une vague ressemblance avec un embryon d&amp;#39;activité terroriste. Dans le jargon algorithmique, on appelle ça du data mining, le principe étant d&amp;#39;analyser une très grande quantité de données à priori disparates à la recherche de motifs, de corrélations, des dépendances, ... En gros on cherche l&amp;#39;ordre dans le chaos, les fausses coïncidences. La National Security Agency était particulièrement intéressée par les motifs douteux dans les appels téléphoniques, par exemple une communication internationale menant à une série de communications intérieures peut être l&amp;#39;indice qu&amp;#39;un ordre venu de l&amp;#39;étranger est relayé par un coordinateur local à des cellules d&amp;#39;action. Ouais, pourquoi pas.&lt;/p&gt;
&lt;p&gt;Mais le problème, c&amp;#39;est que même si en théorie c&amp;#39;est possible, ce genre de data-mining massif n&amp;#39;est rentable que dans des domaine d&amp;#39;application très spécifiques, et encore. Il est même &lt;a href="http://news.cnet.com/8301-13578_3-10059987-38.html"&gt;un fait publié&lt;/a&gt;, par et pour des experts à la solde des paranoïaques galonnés, que non seulement ça ne marche pas vraiment bien mais qu&amp;#39;en plus c&amp;#39;est peu souhaitable. Ça paraît évident hein, mais forcément quand on fait du data-mining massif à la recherche de choses floues, il y a beaucoup de faux-positifs... du coup on perd beaucoup de temps, d&amp;#39;argent, et de crédibilité à surveiller et poursuivre des innocents sur base de conclusions dangereusement extrapolées. Saletés de citoyens honnêtes qui se comportent tous comme s&amp;#39;ils complotaient pour faire exploser la Maison Blanche!&lt;/p&gt;
&lt;p&gt;En fait, le joli rapport accusant Twitter est surtout une perte de temps, d&amp;#39;argent public, et de papier. A force d&amp;#39;énoncer des évidences à longueur d&amp;#39;années on ne dégage même pas d&amp;#39;information valable permettant des prises de décisions efficaces. Mais qui sait, un galonné va peut-être envoyer des drones bombarder tout douteux qui se sent d&amp;#39;humeur à informer le monde quand il mange une pizza...&lt;/p&gt;
</description>
		<pubDate>Mon, 27 Oct 2008 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2008/10/27/manifeste_terroriste.html</guid>
	</item>
	<item>
		<title>Officiel et définitif.</title>
		<link>https://blog.jkbockstael.be/posts/2008/10/23/officiel_et_definitif.html</link>
		<description>&lt;h1 id="officiel-et-définitif"&gt;Officiel et définitif.&lt;/h1&gt;
&lt;p&gt;Voilà, c&amp;#39;est fait, j&amp;#39;ai annoncé aujourd&amp;#39;hui à mes anciens camarades de la guilde Legendes (Illidan-EU) que j&amp;#39;arrêtais définitivement World of Warcraft, après un break entamé début juillet. Je jouais à WoW régulièrement depuis début octobre 2006, et mené mon main (Maktaar, druide full-restau) jusqu&amp;#39;au Tier 5, mes nombreux rerolls bien moins loin. Eh, quand on a un druide on l&amp;#39;aime et on ne joue plus que lui!&lt;/p&gt;
&lt;p&gt;Les Legendes méritent quand même un mot de félicitation, puisque la guilde a été fondée le 21 mars 2008 suite à des dissensions au sein de Mordoriens quant à la raison profonde de ses difficultés à avancer dans le PvE HL. A l&amp;#39;époque la phrase qui est sortie bien vite était &amp;quot;il faut qu&amp;#39;on monte un groupe Karazhan le plus vite possible, histoire de reprendre du raid&amp;quot;. Sept mois plus tard, le Tier 4 est nettoyé, le Tier 5 l&amp;#39;est presque, le Tier 6 n&amp;#39;a plus qu&amp;#39;Illidan lui-même à voir tomber. Ceux qui n&amp;#39;ont jamais tenté l&amp;#39;aventure des raids dans World of Warcraft ne comprennent pas forcément ce que ça représente, mais croyez-moi, c&amp;#39;est un fameux chemin en pas beaucoup de temps! Surtout que ce chemin est jalonné par la sortie d&amp;#39;Age of Conan et de Warhammer Online, et traverse l&amp;#39;été qui est bien la période de creux par excellence. En bref: bravo les Legendes, je ne suis plus en votre sein, mais je me sens quand même fier en voyant le chemin que vous parcourez et en repensant au chemin parcouru ensemble.&lt;/p&gt;
&lt;p&gt;Pour ma part, l&amp;#39;aventure WoW est terminée. Ça peut paraître étrange, mais je recommande quand même ce jeu à ceux qui aiment les décors vastes, le scénario bien foutu, le gameplay à prise en main rapide, et l&amp;#39;impression agréable d&amp;#39;avoir toujours quelque chose à faire même dans les moments les plus creux. Donc bravo à Blizzard aussi, d&amp;#39;avoir créé un jeu riche et raffiné, dans lequel des personnalités très variées savent trouver leur bonheur.&lt;/p&gt;
&lt;p&gt;En petit cadeau à ceux pour qui l&amp;#39;aventure WoW n&amp;#39;est pas finie, et comme relique de mon passage, une macro de mon cru servant à afficher la proportion d&amp;#39;expérience acquise au sein d&amp;#39;un niveau et le nombre de point requis pour atteindre le niveau suivant:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Affiche le % du level, et le nombre d&amp;#39;XP manquant
/script DEFAULT_CHAT_FRAME:AddMessage(floor((UnitXP(&amp;quot;player&amp;quot;)/UnitXPMax(&amp;quot;player&amp;quot;))*100)..&amp;quot;% accompli, &amp;quot;..(UnitXPMax(&amp;quot;player&amp;quot;)-UnitXP(&amp;quot;player&amp;quot;))..&amp;quot; points restant.&amp;quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Allez en compagnie de la Terre-Mère...&lt;/p&gt;
</description>
		<pubDate>Thu, 23 Oct 2008 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2008/10/23/officiel_et_definitif.html</guid>
	</item>
	<item>
		<title>Microsoft Global Anti-Piracy Awareness Day</title>
		<link>https://blog.jkbockstael.be/posts/2008/10/22/microsoft_global_anti_piracy_awareness_day.html</link>
		<description>&lt;h1 id="microsoft-global-anti-piracy-awareness-day"&gt;Microsoft Global Anti-Piracy Awareness Day&lt;/h1&gt;
&lt;p&gt;Hier c&amp;#39;était le &amp;quot;Microsoft Global Anti-Piracy Awareness Day&amp;quot;, unilatéralement décrété comme tel par ledit Microsoft. Wah! Déjà le titre c&amp;#39;est tout un programme, chaque mot provoque à sa lecture un étrange sentiment entre la crainte d&amp;#39;un nouveau monstre dont on ne sait pas encore quoi penser et l&amp;#39;amusement qui accompagne toute annonce émanant de Microsoft.&lt;/p&gt;
&lt;p&gt;Il fallait bien un monstre omniprésent et omnipotent comme Microsoft pour avoir le culot de décréter une journée de prise de conscience anti-piratage (informatique) alors que justement le piratage (maritime) revient au 20h. On pourrait se dire qu&amp;#39;il vont financer la lutte contre ces bandits des voies navigables, mais non du tout! On parle de Microsoft hein, pas d&amp;#39;enfants de coeur, il s&amp;#39;agit bien d&amp;#39;une journée d&amp;#39;actions verbales et légales à l&amp;#39;encontre des méchants-pirates-pas-gentils qui copient ou falsifient les produits Microsoft. Concrètement, beaucoup de paroles, des statistiques, de l&amp;#39;éducation des masses dans les pays émergents, des menaces bien tassées à l&amp;#39;encontre de l&amp;#39;assembleur du coin...&lt;/p&gt;
&lt;p&gt;Ah ben oui, le piratage est un sujet particulièrement sérieux à Redmond, pas une mince affaire puisque d&amp;#39;après eux il s&amp;#39;agit non seulement d&amp;#39;un colossal manque à gagner, mais également d&amp;#39;un sale coup dans le dos de l&amp;#39;innovation technologique. Ah ben oui forcément quand on dégage des bénéfices atroces à force de pousser la nouveauté à grands coups d&amp;#39;obsolescence planifiée, ça devient dur d&amp;#39;accepter que des millions de PC dans le monde n&amp;#39;ait pas payé leurs 150$ de patente menant à la frustration de voir un OS qui ne fait rien de plus que mettre sur les genoux un PC auparavant rapide tout en rendant inutilisables les applications sur lesquelles on comptait au quotidien. Et je ne parlerai pas du chapitre &amp;quot;innovation&amp;quot;, c&amp;#39;est à hurler de rire de voir la compagnie mondialement reconnue pour utiliser tous les autres dévelopeurs de logiciels comme laboratoire de R&amp;amp;D géant, quitte à demander des brevets pour les inventions d&amp;#39;autrui.&lt;/p&gt;
&lt;p&gt;Cela dit, ils l&amp;#39;admettent eux-même, le piratage ne concerne pas forcément les versions les plus récentes de leurs produits-phares (Windows Vista et Office 2007) mais bien les précédentes (Windows XP et Office 2003), dont la survie des ventes dérange quelque peu Microsoft, contraint par la pression des OEM à prolonger la durée de vie de XP de deux ans (Dell et HP continueront de vendre des PC sous XP jusqu&amp;#39;en juin 2009). La raison avancée officiellement par Microsoft, c&amp;#39;est qu&amp;#39;il s&amp;#39;agit d&amp;#39;un phénomène précédemment observé, il faut de l&amp;#39;ordre de deux ans pour que le piratage des versions récentes soit observé, ceci étant bien évidemment du aux &amp;quot;nouvelles technologies anti-piratage&amp;quot; qui nécessitent d&amp;#39;après eux deux ans à casser. Aucune explication n&amp;#39;est fournie par Microsoft sur la raison profonde qui fait que plus d&amp;#39;un tiers des PC neufs sont downgradés de Vista vers XP soit à l&amp;#39;achat soit par l&amp;#39;utilisateur après livraison. Dites les gars, si un tiers des acheteurs ne veulent pas du Vista que vous leur forcez, et si même les pirates ne veulent pas le pirater, c&amp;#39;est pas que fondamentalement ça n&amp;#39;en vaut même pas la peine? C&amp;#39;est l&amp;#39;histoire de la Lada qu&amp;#39;on peut garer en banlieue chaude vitres ouvertes et clé sur le contact sans avoir peur de se la faire voler, non?&lt;/p&gt;
&lt;p&gt;Parce qu&amp;#39;il faut quand même bien le reconnaître, il y a ces dernières années quelques chose de pourri au royaume de Redmond. Sous l&amp;#39;égide de Bill Gates les choses étaient claires: Microsoft était une société de développement de logiciels destinés aux professionnels et aux administrations. Windows NT, Office, Outlook, Active Directory, ... le catalogue a toujours répondu aux attentes des mines grises qui dans leurs bureaux gris aux PCs gris veut avoir des logiciels gris qui sentent bon l&amp;#39;usine à gaz, et surtout dont on sait d&amp;#39;une version à l&amp;#39;autre qu&amp;#39;on ne va pas perdre le temps et l&amp;#39;argent consacré à la formation des utilisateurs desdits logiciels. Sous Ballmer c&amp;#39;est un peu différent. L&amp;#39;ami Ballmer à l&amp;#39;air de se prendre pour Steve Jobs, il veut visiblement que Microsoft concurrence Apple de front, et ça sur un front qui n&amp;#39;est pas exactement le fond de commerce de ces premiers: l&amp;#39;utilisateur lambda. Et là tout fout le camp: Windows Vista qui consacre tout au visuel et à &amp;quot;l&amp;#39;expérience d&amp;#39;utilisation&amp;quot; mais flingue tout repère existant auparavant, un Office à l&amp;#39;interface entièrement repensée qui fait que les utilisateurs à qui on avait payé deux semaines de formation ne tirent plus rien de ce qu&amp;#39;on leur a appris puisqu&amp;#39;il leur reste de nouveau tout à apprendre. Et tout ça est offert avec des licences aux pris prohibitifs bien dans la tradition microsoftienne, et des exigences matérielles qui obligeraient l&amp;#39;acheteur à en plus changer son matériel.&lt;/p&gt;
&lt;p&gt;Dans la vraie vie, ce n&amp;#39;est pas Mr Gentil Papa qui achète son PC en promo au Carrefour qui va faire vivre Microsoft, c&amp;#39;est plutôt les administrations, entreprises et écoles qui achètent les licences &amp;quot;5000 postes&amp;quot; avec le contrat d&amp;#39;assistance qui va avec et comptent sur la fiabilité et la stablité du produit acheté pour assurer leurs activités. On parle ici de temps perdu ou de gros pognon, pas de la frustration de &amp;quot;mertt il est où médja pléyeure main&amp;#39;nant?&amp;quot;, on parle de manques à gagner à six chiffres parce que la rédaction de chaque rapport prend plus de temps qu&amp;#39;auparavant à cause d&amp;#39;une interface retournée de fond en comble, et une barrette de RAM par poste multipliée par 5000 postes ça devient vite un investissement majeur. Oui c&amp;#39;est pas très glamour, mais la réalité du marché du logiciel pro c&amp;#39;est ça.&lt;/p&gt;
&lt;p&gt;Alors bon hein, vu le tarif et le service, on va pas se gêner à &amp;quot;voler&amp;quot; un peu hein? Et surtout, entre payer une licence astronomique qui mettra le service de comptabilité sur les genoux pendant deux semaines à cause des hics d&amp;#39;installation de Vista, et prendre le risque de &amp;quot;pirater&amp;quot; (oh mon Dieu!) un XP pour le nouveau PC... les choix sont vite faits. Et du coté de l&amp;#39;utilisateur moyen? Ben lui il raisonne pareil, à l&amp;#39;habitude ou au pognon, deux facteurs qui ne lui donnent pas envie de payer cher pour un produit qui le frustrera.&lt;/p&gt;
&lt;p&gt;Messieurs gris dans votre forteresse de Redmond, ne pensez-vous pas qu&amp;#39;à part vous tourner en ridicule vous n&amp;#39;avez rien gagné à baptiser ainsi une case du calendrier?&lt;/p&gt;
</description>
		<pubDate>Wed, 22 Oct 2008 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2008/10/22/microsoft_global_anti_piracy_awareness_day.html</guid>
	</item>
	<item>
		<title>Bricolage de début de soirée, pas compliqué...</title>
		<link>https://blog.jkbockstael.be/posts/2008/10/21/diy.html</link>
		<description>&lt;h1 id="bricolage-de-début-de-soirée-pas-compliqué"&gt;Bricolage de début de soirée, pas compliqué...&lt;/h1&gt;
&lt;p&gt;Je ne sais pas vous, mais moi en début de soirée j&amp;#39;ai comme un coup de flemme mais qui en général s&amp;#39;accompagne d&amp;#39;une envie de ne pas trop me sentir être une bouse inactive, donc de faire quelque chose quand même.&lt;/p&gt;
&lt;p&gt;Et puis devant moi se trouve un flashdrive USB, d&amp;#39;une astronomique capacité de 32 Mo, et qui en plus se paie le luxe d&amp;#39;être hors d&amp;#39;usage après seulement six ans de bons et loyaux services. Bon ben autant en faire quelque chose de totalement inutile donc absolument indispensable. C&amp;#39;était livré en porte-clefs, ça va devenir un porte-clefs.&lt;/p&gt;
&lt;p&gt;Vu que je n&amp;#39;utiliserai pas le boitier, je peux bourriner pour l&amp;#39;ouvrir, tant que je n&amp;#39;endommage pas de façon visible les entrailles...&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2008/10/21/diy_attachments/step0.jpg" title="Etape 0 - haute resolution"&gt;&lt;img src="//blog.jkbockstael.be/posts/2008/10/21/diy_attachments/step0_thumb.jpg" alt="Etape 0 - miniature"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;La chose libérée de son emballage plastique...&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2008/10/21/diy_attachments/step1.jpg" title="Etape 1 - haute resolution"&gt;&lt;img src="//blog.jkbockstael.be/posts/2008/10/21/diy_attachments/step1_thumb.jpg" alt="Etape 1 - miniature"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;... et perforée en un endroit ad hoc ...&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2008/10/21/diy_attachments/step2.jpg" title="Etape 2 - haute resolution"&gt;&lt;img src="//blog.jkbockstael.be/posts/2008/10/21/diy_attachments/step2_thumb.jpg" alt="Etape 2 - miniature"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Une fois qu&amp;#39;on lui a remis l&amp;#39;anneau avec lequel le tout était livré...&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2008/10/21/diy_attachments/step3.jpg" title="Etape 3 - haute resolution"&gt;&lt;img src="//blog.jkbockstael.be/posts/2008/10/21/diy_attachments/step3_thumb.jpg" alt="Etape 3 - miniature"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;... ça peut prendre place en live et magnifique!&lt;/p&gt;
&lt;p&gt;&lt;a href="//blog.jkbockstael.be/posts/2008/10/21/diy_attachments/step4.jpg" title="Etape 4 - haute resolution"&gt;&lt;img src="//blog.jkbockstael.be/posts/2008/10/21/diy_attachments/step4_thumb.jpg" alt="Etape 4 - miniature"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Comme dit, c&amp;#39;est purement inutile mais c&amp;#39;est quand même infiniment mieux mis en valeur que si ça avait volé à la poubelle...&lt;/p&gt;
&lt;p&gt;Allez, pour que ça serve à la postérité: jeune padawan, si toi aussi il te vient l&amp;#39;idée de faire ce genre de chose avec de l&amp;#39;électronique, sache que les céramiques dans lesquelles on emballe les composants sont vraiment très dures, oublie d&amp;#39;avance l&amp;#39;idée de forer au travers! Et si jamais tu te donnes les moyens de quand même le faire, renseigne-toi un peu sur ce que contient le boitier céramique, des fois que ce serait acide ou inflammable hein...&lt;/p&gt;
</description>
		<pubDate>Tue, 21 Oct 2008 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2008/10/21/diy.html</guid>
	</item>
	<item>
		<title>Et voilà !</title>
		<link>https://blog.jkbockstael.be/posts/2008/10/20/et_voila.html</link>
		<description>&lt;h1 id="et-voilà-"&gt;Et voilà !&lt;/h1&gt;
&lt;p&gt;Ça y est c&amp;#39;est fait, c&amp;#39;est parti, youpie, tralala, joie, bonheur, Noël, gloria, halleluyah! J&amp;#39;entre de plein pied dans la blogosphère...&lt;/p&gt;
&lt;p&gt;À vrai dire il m&amp;#39;a fallu pas mal de temps pour d&amp;#39;abord décider que j&amp;#39;allais le faire, ensuite pour décider de quelle manière j&amp;#39;allais le faire, enfin pour me décider à concrétiser les idées qui se bousculaient un peu quant au comment du pourquoi de l&amp;#39;hébergement et de la présentation. Et puis finalement, quelques mois après avoir ouvert mon compte chez Blogger, j&amp;#39;ai enfin pris la peine de faire un template un tant soit peu présentable... et là suite la voici! Monde, bonjour! Ceci est mon blog.&lt;/p&gt;
&lt;p&gt;Je le prends un peu à l&amp;#39;ancienne, un &amp;quot;web log&amp;quot; donc, simplement un site minimal où publier ce que je veux rendre disponible à un certain nombre de personnes sans pour autant craindre que ce soit tout à fait public. Autrement dit, la teneur de ce qui sera publié ici risque de couvrir un très large spectre, tout comme mes intérêts se portent sur une grande quantité de domaines. À moi de rester cohérent quand je taggerai le contenu, ou je risque de m&amp;#39;attirer l&amp;#39;ire de ceux qui verront leur frustration prendre la forme d&amp;#39;un &amp;quot;mais boudiou j&amp;#39;étais certain d&amp;#39;avoir lu ce truc-là ici!&amp;quot;.&lt;/p&gt;
&lt;p&gt;Finalement, je suis un être humain avec ses défauts et ses approximations. Je ne prétends pas être sage ou savant, il est donc très probable que je publie des grosses conneries. Étant donné que je ne publie pas le présent blog comme compensation masturbatoire, je suis ouvert à tout commentaire, correction, précision, confrontation d&amp;#39;opinion... déchaînez-vous, c&amp;#39;est du choc des idées que naissent les idées nouvelles!&lt;/p&gt;
&lt;p&gt;Voili-voilà, bonne lecture à toutes et tous!&lt;/p&gt;
&lt;p&gt;Allez, un petit teaser d&amp;#39;un projet en cours, bientôt terminé donc bientôt dévoilé, qui implique du bois et ceci:&lt;/p&gt;
&lt;p&gt;&lt;img src="//blog.jkbockstael.be/posts/2008/10/20/et_voila_attachments/081020-teaser.jpg" alt="Teaser"&gt;&lt;/p&gt;
</description>
		<pubDate>Mon, 20 Oct 2008 00:00:00 GMT</pubDate>
		<guid>https://blog.jkbockstael.be/posts/2008/10/20/et_voila.html</guid>
	</item></channel>
</rss>