<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>/dev/log</title>
    <link>https://marc.helbling.fr/</link>
    <description>Recent content on /dev/log</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 06 Sep 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://marc.helbling.fr/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>France 2050 🇫🇷</title>
      <link>https://marc.helbling.fr/france-2050/</link>
      <pubDate>Sun, 06 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://marc.helbling.fr/france-2050/</guid>
      <description>&lt;!-- La carte elle-même est un fichier statique (static/france-2k50/),&#xA;     publiée à /france-2k50/ indépendamment de cet article.&#xA;     Ne pas donner à cet article l&#39;url /france-2k50/ : collision. --&gt;&#xA;&lt;!-- À écrire. Quelques points de départ, à garder ou à jeter. --&gt;&#xA;&lt;style&gt;&#xA;.carte-embed{position:relative;left:50%;transform:translateX(-50%);&#xA;  width:min(calc(100vw - 2rem),1400px);margin:1.8rem auto}&#xA;.carte-embed iframe{display:block;width:100%;height:min(68vh,620px);min-height:440px;&#xA;  border:1px solid #e4e2dc;border-radius:6px;background:#faf9f7}&#xA;.carte-embed figcaption{font-size:.8rem;color:#6b6b66;margin-top:.5rem;text-align:center}&#xA;&lt;/style&gt;&#xA;&lt;figure class=&#34;carte-embed&#34;&gt;&#xA;  &lt;iframe src=&#34;https://marc.helbling.fr/france-2k50/&#34; title=&#34;Carte des communes françaises filtrable par critère&#34;&#xA;          loading=&#34;lazy&#34;&gt;&lt;/iframe&gt;&#xA;  &lt;figcaption&gt;&lt;a href=&#34;https://marc.helbling.fr/france-2k50/&#34;&gt;Ouvrir la carte en plein écran&lt;/a&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;L&amp;rsquo;été 2026 aura été chaud et sec sur la &lt;del&gt;quasi&lt;/del&gt; totalité du territoire français. Il faut malheureusement&#xA;s&amp;rsquo;attendre à ce que l&amp;rsquo;exception devienne norme si nous n&amp;rsquo;arrivons pas à maitriser nos&#xA;émissions de gaz à effet de serre (comme cela semble être le cas, malgré les avertissements).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Running Citus in Docker</title>
      <link>https://marc.helbling.fr/running-citus-locally/</link>
      <pubDate>Fri, 17 Aug 2018 00:00:00 +0000</pubDate>
      <guid>https://marc.helbling.fr/running-citus-locally/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://citusdata.com&#34;&gt;Citus&lt;/a&gt; is an &lt;a href=&#34;https://github.com/citusdata/citus&#34;&gt;open-source&lt;/a&gt; &lt;a href=&#34;https://www.postgresql.org/&#34;&gt;PostgreSQL&lt;/a&gt; extension to distribute tables and queries on multiple shards.&#xA;The extension requires a master node aka the &lt;a href=&#34;http://docs.citusdata.com/en/v7.5/get_started/concepts.html#nodes-coordinator-and-workers&#34;&gt;coordinator&lt;/a&gt; whose role is to forward queries to workers — that actually store data — and gather results.&lt;/p&gt;&#xA;&lt;p&gt;While using &lt;a href=&#34;https://www.citusdata.com/product/cloud&#34;&gt;CitusCloud&lt;/a&gt; to run Citus in production is probably the best idea, it is less true for local or testing environments as network adds latency and concurrent builds require hacks (like creating random &lt;a href=&#34;https://www.postgresql.org/docs/10/static/ddl-schemas.html&#34;&gt;&lt;code&gt;schema&lt;/code&gt;s&lt;/a&gt; for each build). Relying on a local running Citus cluster in a Docker environment provides a clean solution to this problem.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vim notes &amp; plugins</title>
      <link>https://marc.helbling.fr/vim-notes/</link>
      <pubDate>Sun, 30 Aug 2015 00:00:00 +0000</pubDate>
      <guid>https://marc.helbling.fr/vim-notes/</guid>
      <description>&lt;h1 id=&#34;basic-vim&#34;&gt;&#xA;  Basic vim&#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#basic-vim&#34; aria-label=&#34;Link to this section&#34;&gt;&#xA;    #&#xA;  &lt;/a&gt;&#xA;&lt;/h1&gt;&#xA;&lt;p&gt;All this is vim built-in and requires no plugin.&lt;/p&gt;&#xA;&lt;h2 id=&#34;useful-commands&#34;&gt;&#xA;  Useful commands&#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#useful-commands&#34; aria-label=&#34;Link to this section&#34;&gt;&#xA;    #&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;%&lt;/code&gt;: jump to the matching &lt;code&gt;{ .. }&lt;/code&gt; or &lt;code&gt;( .. )&lt;/code&gt; etc.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;=&lt;/code&gt;: indent visual selection (&lt;code&gt;&amp;lt;&lt;/code&gt;: shift block to the left, &lt;code&gt;&amp;gt;&lt;/code&gt;: shift block to the right)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;~&lt;/code&gt;: change case&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;ctrl-x&lt;/code&gt; + : &lt;a href=&#34;https://www.youtube.com/watch?v=3TX3kV3TICU&#34;&gt;vim ‘context aware’ complete&lt;/a&gt; mode (based on &lt;code&gt;set complete&lt;/code&gt; list) in insert mode&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;ctrl-n&lt;/code&gt;/&lt;code&gt;ctrl-p&lt;/code&gt;: next/previous word matching prefix (the difference with &lt;code&gt;ctrl-p&lt;/code&gt;/&lt;code&gt;ctrl-n&lt;/code&gt; is the context awareness)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;ctrl-f&lt;/code&gt;: file names&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;ctrl-l&lt;/code&gt;: whole lines&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;ctrl-d&lt;/code&gt;: macro definitions (also in included files)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;ctrl-i&lt;/code&gt;: current and included files&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;ctrl-k&lt;/code&gt;: words from a dictionary&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;ctrl-t&lt;/code&gt;: words from a thesaurus&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;ctrl-]&lt;/code&gt;: tags&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;ctrl-v&lt;/code&gt;: Vim command line&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;ctrl-o&lt;/code&gt;: language aware completion&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;:set spell [spelllang=fr_fr]&lt;/code&gt;/&lt;code&gt;:set nospell&lt;/code&gt;: activate/deactivate spell checking&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;:!&amp;lt;command&amp;gt;&lt;/code&gt;: execute &lt;code&gt;&amp;lt;command&amp;gt;&lt;/code&gt; in a shell without leaving vim (e.g. &lt;code&gt;:!make&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;:read !&amp;lt;command&amp;gt;&lt;/code&gt;: insert result of &lt;code&gt;&amp;lt;command&amp;gt;&lt;/code&gt; on next line (e.g. &lt;code&gt;read !ls .&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;ctrl-O&lt;/code&gt;, &lt;code&gt;ctrl-I&lt;/code&gt;: navigate through “&lt;a href=&#34;http://vim.wikia.com/wiki/Jumping_to_previously_visited_locations&#34;&gt;jump locations&lt;/a&gt;” locations, both within current and other opened documents; &lt;code&gt;:jumps&lt;/code&gt; to list all jump locations.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;.&lt;/code&gt;: repeat last command&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;macros&#34;&gt;&#xA;  Macros&#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#macros&#34; aria-label=&#34;Link to this section&#34;&gt;&#xA;    #&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;q&amp;lt;key&amp;gt;&lt;/code&gt;: start recording&lt;/li&gt;&#xA;&lt;li&gt;(do commands)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;q&lt;/code&gt;: stop recording&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;@&amp;lt;key&amp;gt;&lt;/code&gt;: replay macro&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;advanced-editing-command-mode-exed&#34;&gt;&#xA;  Advanced editing (command mode ex/ed)&#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#advanced-editing-command-mode-exed&#34; aria-label=&#34;Link to this section&#34;&gt;&#xA;    #&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;The command mode syntax basically reads&lt;/p&gt;</description>
    </item>
    <item>
      <title>What could go wrong?</title>
      <link>https://marc.helbling.fr/what-could-go-wrong/</link>
      <pubDate>Sun, 17 May 2015 00:00:00 +0000</pubDate>
      <guid>https://marc.helbling.fr/what-could-go-wrong/</guid>
      <description>&lt;p&gt;When dealing with software, stuff — be it &lt;a href=&#34;#code&#34;&gt;technical&lt;/a&gt; or &lt;a href=&#34;#management&#34;&gt;human&lt;/a&gt; —&#xA;quite inexorably go wrong at some point for a variety of reasons. Here is a ‘memo’ list of shit that I lived or witnessed and hopefully ways to prevent them. Some points might look totally obvious but as I experienced them at least once they are probably worth listing.&lt;/p&gt;&#xA;&lt;p&gt;This is not intended to be a list of technical difficulties encountered during the development&#xA;phase but a reminder of what to think about &lt;em&gt;before&lt;/em&gt; starting to code:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Writing json in C&#43;&#43;</title>
      <link>https://marc.helbling.fr/writing-json-c/</link>
      <pubDate>Sat, 07 Feb 2015 00:00:00 +0000</pubDate>
      <guid>https://marc.helbling.fr/writing-json-c/</guid>
      <description>&lt;p&gt;Writing a valid json file looks simple. Except that if the json file contains real world data coming from unknown sources, it might not be that simple. The &lt;a href=&#34;http://json.org&#34;&gt;json&lt;/a&gt; format does not support everything that you could expect for numerical values and strings.&lt;/p&gt;&#xA;&lt;p&gt;More specifically, a numerical value involves digits in json. This prevents from having &lt;code&gt;inf&lt;/code&gt; or &lt;code&gt;nan&lt;/code&gt; serialized in json.&#xA;Strings preferred encoding is UTF-8 with some restriction. Quotes &lt;code&gt;&amp;quot;&lt;/code&gt; and backslash &lt;code&gt;\&lt;/code&gt; have to be escaped but &lt;a href=&#34;http://en.wikipedia.org/wiki/Unicode_control_characters&#34;&gt;control characters&lt;/a&gt; should be encoded with their unicode 4 hex digits representation.&lt;/p&gt;</description>
    </item>
    <item>
      <title>👋🏼</title>
      <link>https://marc.helbling.fr/about/</link>
      <pubDate>Mon, 22 Sep 2014 00:00:00 +0000</pubDate>
      <guid>https://marc.helbling.fr/about/</guid>
      <description>&lt;p&gt;My name is Marc Helbling. I’m a software engineer with a Ph.D thesis (“&lt;a href=&#34;http://www.theses.fr/2010ISAM0030&#34;&gt;Virtual sculpture using particles system&lt;/a&gt;”). I’ve been an early stage contributor in &lt;a href=&#34;http://tinyclues.com&#34;&gt;some&lt;/a&gt; &lt;a href=&#34;http://captaintrain.com&#34;&gt;successful&lt;/a&gt; &lt;a href=&#34;http://sketchfab.com&#34;&gt;startups&lt;/a&gt; and &lt;a href=&#34;https://algolia.com&#34;&gt;scale-ups&lt;/a&gt;. I have served as a CTO at an &lt;a href=&#34;https://la-tournee.co&#34;&gt;early stage ecommerce platform&lt;/a&gt; and an Engineering Manager at a &lt;a href=&#34;https://aqemia.com&#34;&gt;deep tech company&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I am mostly interested in building efficient teams and systems, with a special ❤️when they deal with vertices and polygons.&lt;/p&gt;&#xA;&lt;p&gt;The posts on this blog are evolving things so the content may be updated/rewritten without any warning.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A practical introduction to git</title>
      <link>https://marc.helbling.fr/practical-git-introduction/</link>
      <pubDate>Mon, 22 Sep 2014 00:00:00 +0000</pubDate>
      <guid>https://marc.helbling.fr/practical-git-introduction/</guid>
      <description>&lt;h1 id=&#34;introduction&#34;&gt;&#xA;  Introduction&#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#introduction&#34; aria-label=&#34;Link to this section&#34;&gt;&#xA;    #&#xA;  &lt;/a&gt;&#xA;&lt;/h1&gt;&#xA;&lt;p&gt;In just a few years, &lt;a href=&#34;http://git-scm.com/&#34;&gt;git&lt;/a&gt; has become the dominant version control system in the software industry. Despite its widespread use, it often still appears as either magical or cumbersome when its core concepts are not fully grasped. This post is a walkthrough of practical git usage that will detail how git internally handles things.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-a-version-control-system&#34;&gt;&#xA;  Why a Version Control System?&#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#why-a-version-control-system&#34; aria-label=&#34;Link to this section&#34;&gt;&#xA;    #&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;When not relying on a dedicated tool to keep track of versions, one has to employ strategies such as using naming schemes like &lt;a href=&#34;http://www.phdcomics.com/comics/archive/phd101212s.gif&#34;&gt;&lt;code&gt;[filename]_v{0-9}+.doc&lt;/code&gt;&lt;/a&gt; or &lt;code&gt;[timestamp]_[filename]_[comment].zip&lt;/code&gt; (where e.g. using the &lt;a href=&#34;http://en.wikipedia.org/wiki/ISO_8601&#34;&gt;ISO 8601&lt;/a&gt; format for dates will sort version) to keep track of things.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Job interviews</title>
      <link>https://marc.helbling.fr/interviews/</link>
      <pubDate>Sat, 13 Jul 2013 00:00:00 +0000</pubDate>
      <guid>https://marc.helbling.fr/interviews/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://techcrunch.com/2013/06/22/the-technical-interview-is-dead/&#34;&gt;Like it or not&lt;/a&gt;, technical interviews&#xA;are still a reality in the software industry and I don’t expect this to radically change anytime soon.&lt;/p&gt;&#xA;&lt;p&gt;Getting a job in a place where you have &lt;a href=&#34;http://www.karenx.com/blog/how-to-get-a-job-when-you-have-no-connections/&#34;&gt;no connection&lt;/a&gt;&#xA;can prove very hard. The obvious guess: the bigger/hotter the company, the harder. You may try to be&#xA;original but I’m not sure this works very often for technical positions. From my experience, you better&#xA;be concise, have a clear message, show why you care about the company you’re applying at and hopefully&#xA;you’ll have a chance to show them your abilities. Of course, if you’ve already shown the world with&#xA;some of your project, this might have proven easier than it sounds to get to the interview process.&lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>https://marc.helbling.fr/post/draft/ownership/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://marc.helbling.fr/post/draft/ownership/</guid>
      <description>&lt;h2 id=&#34;reading-list&#34;&gt;&#xA;  Reading list:&#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#reading-list&#34; aria-label=&#34;Link to this section&#34;&gt;&#xA;    #&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://about.gitlab.com/handbook/people-group/directly-responsible-individuals/&#34;&gt;https://about.gitlab.com/handbook/people-group/directly-responsible-individuals/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://taylorpearson.me/interestingtimes/andon-cord/&#34;&gt;https://taylorpearson.me/interestingtimes/andon-cord/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
  </channel>
</rss>
