<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Colas.Nahaboo.net</title>
    <subtitle>Colas Nahaboo personal site, with discussions about programming code, web and computing topics, surfing and SUPing, and various musings.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://colas.nahaboo.net/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://colas.nahaboo.net"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-04-13T00:00:00+00:00</updated>
    <id>https://colas.nahaboo.net/atom.xml</id>
    <entry xml:lang="en">
        <title>Numéros de telephone arnaques</title>
        <published>2026-04-13T00:00:00+00:00</published>
        <updated>2026-04-13T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/blog/numeros-de-telephone-arnaques/"/>
        <id>https://colas.nahaboo.net/blog/numeros-de-telephone-arnaques/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/blog/numeros-de-telephone-arnaques/">&lt;p&gt;&lt;strong&gt;Attention arnaque:&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Le No de tel &lt;strong&gt;0189628604&lt;&#x2F;strong&gt; vous appelle en se faisant passer pour un conseiller bancaire (AXA), en ayant votre nom, adresse, en prétendant avoir remarqué des tentatives de paiement répétées depuis Amazon.&lt;&#x2F;p&gt;
&lt;p&gt;C&#x27;est une arnaque. J&#x27;ai raccroché de suite et appelé AXA pour vérifier.&lt;&#x2F;p&gt;
&lt;p&gt;La conseillère nous a d&#x27;ailleurs dit que elle-même avait failli se faire avoir récemment (un faux appel de sa mutuelle).&lt;&#x2F;p&gt;
&lt;p&gt;Je fais ce post simplement pour mettre 0189628604 (ou 33 189628604 ou 01 89 62 86 04) sur le web pour que une recherche de ce No tombe sur ce message.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Save these Firefox tabs for later</title>
        <published>2026-04-13T00:00:00+00:00</published>
        <updated>2026-04-13T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/code/save-these-firefox-tabs-for-later/"/>
        <id>https://colas.nahaboo.net/code/save-these-firefox-tabs-for-later/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/code/save-these-firefox-tabs-for-later/">&lt;p&gt;I often look for some concept out of curiority, and end up with tens of browser tabs opened on the subject, and realize that I have no time now to pursue this rabbit into his hole, end up with tons of Firefox windows with tens of tabs gathering dust (and eating RAM) on my desktop. Up to now I just created Foswiki pages or Trello tasks as reminders to tackle these projects later on, but it required enough manual work to often postpone doing it and either losing the info or be swamped in thousands of tabs. And saving them as Firefox bookmarks was cumbersome and required lots of manual management.&lt;&#x2F;p&gt;
&lt;p&gt;What I decided to do is a simple way to save all these tabs offline, and be able to re-open the window simply. I bundle them into what I call &lt;strong&gt;.ffst files&lt;&#x2F;strong&gt; (for FireFox Saved Tabs), simple text files of one url per line, into a &lt;code&gt;~&#x2F;firefox-savedtabs&#x2F;&lt;&#x2F;code&gt; directory.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Saving a set of tabs&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Select the tabs (click on the first one, shift-click on the last one)&lt;&#x2F;li&gt;
&lt;li&gt;Open the right-mouse-button menu on a tab, and select &lt;code&gt;Copy URLs&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Create a new file (e.g: &lt;code&gt;some-name.ffst&lt;&#x2F;code&gt;) in the &lt;code&gt;~&#x2F;firefox-savedtabs&#x2F;&lt;&#x2F;code&gt; directory with your favorite editor,&lt;&#x2F;li&gt;
&lt;li&gt;Paste the tabs into it,&lt;&#x2F;li&gt;
&lt;li&gt;Save.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Restoring the tabs into a new window:&lt;&#x2F;strong&gt; either by:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;running the script below &lt;code&gt;firefox-savedtabs-restore&lt;&#x2F;code&gt; without arguments, and choosing which file to restore.&lt;&#x2F;li&gt;
&lt;li&gt;running the script with the ffst file as argument:&lt;br &#x2F;&gt;
&lt;code&gt;firefox-savedtabs-restore some-name.ffst&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Browsing the directory  &lt;code&gt;~&#x2F;firefox-savedtabs&#x2F;&lt;&#x2F;code&gt; in a file explorer window, and choosing to open the .ffst file with &lt;code&gt;Firefox SavedTabs restore&lt;&#x2F;code&gt; once you have created the &lt;code&gt;~&#x2F;.local&#x2F;share&#x2F;applications&#x2F;firefox-savedtabs.desktop&lt;&#x2F;code&gt; file below&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I can thus just mention the .ffstr file in my various &quot;todo&quot; places (TODO lists, TODO files, pinboard, wikis, trello, ...)&lt;&#x2F;p&gt;
&lt;p&gt;Note that you can adapt this to any browser, and choose whatever directory name and file extension you want.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Updating&lt;&#x2F;strong&gt; the tabs is just re-copying the urls and re-pasting in the file.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-two-scripts-are&quot;&gt;The two scripts are:&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-two-scripts-are&quot; aria-label=&quot;Anchor link for: the-two-scripts-are&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;usr-local-bin-firefox-savedtabs-restore&quot;&gt;&#x2F;usr&#x2F;local&#x2F;bin&#x2F;firefox-savedtabs-restore&lt;a class=&quot;zola-anchor&quot; href=&quot;#usr-local-bin-firefox-savedtabs-restore&quot; aria-label=&quot;Anchor link for: usr-local-bin-firefox-savedtabs-restore&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Note that you can modify in it the &lt;code&gt;restore&lt;&#x2F;code&gt; function to use with another browser.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #4C4F69; background-color: #EFF1F5;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #EA76CB;font-style: italic;&quot;&gt;#!&#x2F;bin&#x2F;bash&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #7C7F93;font-style: italic;&quot;&gt;# shellcheck disable=SC1090,SC2155,SC2046 # source files, declare&amp;amp;assign&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #7C7F93;font-style: italic;&quot;&gt;# restore saved tabs bundles (text files of urls, one per line)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;dir&lt;&#x2F;span&gt;&lt;span style=&quot;color: #179299;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$HOME&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt;&#x2F;firefox-savedtabs&#x2F;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #1E66F5;font-style: italic;&quot;&gt;restore&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7C7F93;&quot;&gt;(){&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #1E66F5;font-style: italic;&quot;&gt;    mapfile&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt; -t urls&lt;&#x2F;span&gt;&lt;span style=&quot;color: #179299;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E64553;font-style: italic;&quot;&gt;$1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #1E66F5;font-style: italic;&quot;&gt;    firefox&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt; --new-window &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;${urls&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7C7F93;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #179299;&quot;&gt;@&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7C7F93;&quot;&gt;]&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #D20F39;font-style: italic;&quot;&gt;    exit&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FE640B;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #7C7F93;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #8839EF;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7C7F93;&quot;&gt; [[&lt;&#x2F;span&gt;&lt;span&gt; $#&lt;&#x2F;span&gt;&lt;span style=&quot;color: #179299;&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FE640B;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7C7F93;&quot;&gt; ]];&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8839EF;&quot;&gt; then&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #7C7F93;font-style: italic;&quot;&gt;    # Without args, list the saves, most recent first, and prompt to restore&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #D20F39;font-style: italic;&quot;&gt;    echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt; &amp;quot;In ~&#x2F;.firefox-savedtabs&#x2F;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #D20F39;font-style: italic;&quot;&gt;    cd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$dir&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #179299;&quot;&gt; ||&lt;&#x2F;span&gt;&lt;span style=&quot;color: #D20F39;font-style: italic;&quot;&gt; exit&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FE640B;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #8839EF;&quot;&gt;    select&lt;&#x2F;span&gt;&lt;span&gt; i in &lt;&#x2F;span&gt;&lt;span style=&quot;color: #7C7F93;&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #1E66F5;font-style: italic;&quot;&gt;find&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt; . -type f -name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #EA76CB;&quot;&gt; \*&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt;.ffst&lt;&#x2F;span&gt;&lt;span style=&quot;color: #EA76CB;&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt;                    -printf &amp;#39;%TY-%Tm-%Td.%THh%TM:%TS %h&#x2F;%f\n&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #179299;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #EA76CB;&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #1E66F5;font-style: italic;&quot;&gt;                   sed&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt; -e &amp;#39;s| [.]&#x2F;|_|&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #179299;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #1E66F5;font-style: italic;&quot;&gt; sort&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt; -r&lt;&#x2F;span&gt;&lt;span style=&quot;color: #179299;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #EA76CB;&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #1E66F5;font-style: italic;&quot;&gt;                   sed&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt; -re &amp;#39;s&#x2F;:[0-9]{2}[.][0-9]*&#x2F;&#x2F;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7C7F93;&quot;&gt;);&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8839EF;&quot;&gt; do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #1E66F5;font-style: italic;&quot;&gt;        restore&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;${i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #179299;&quot;&gt;#*&lt;&#x2F;span&gt;&lt;span&gt;_}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #8839EF;&quot;&gt;    done&lt;&#x2F;span&gt;&lt;span&gt;            &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #8839EF;&quot;&gt;else&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #7C7F93;font-style: italic;&quot;&gt;    # with a file name or path, restore the window&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    file&lt;&#x2F;span&gt;&lt;span style=&quot;color: #179299;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E64553;font-style: italic;&quot;&gt;$1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #8839EF;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7C7F93;&quot;&gt; [[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #179299;&quot;&gt; -e&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$file&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7C7F93;&quot;&gt; ]];&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8839EF;&quot;&gt; then&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #1E66F5;font-style: italic;&quot;&gt;        restore&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$file&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #8839EF;&quot;&gt;    elif&lt;&#x2F;span&gt;&lt;span style=&quot;color: #179299;&quot;&gt; !&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7C7F93;&quot;&gt; [[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #179299;&quot;&gt; -e&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$file&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7C7F93;&quot;&gt; ]] &amp;amp;&amp;amp; [[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #179299;&quot;&gt; -e&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$dir&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;$file&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7C7F93;&quot;&gt; ]];&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8839EF;&quot;&gt; then&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        file&lt;&#x2F;span&gt;&lt;span style=&quot;color: #179299;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$dir&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;$file&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #1E66F5;font-style: italic;&quot;&gt;        restore&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$file&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #8839EF;&quot;&gt;    else&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #D20F39;font-style: italic;&quot;&gt;        echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt; &amp;quot;***Error: file not found: &lt;&#x2F;span&gt;&lt;span style=&quot;color: #EA76CB;&quot;&gt;\&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$file&lt;&#x2F;span&gt;&lt;span style=&quot;color: #EA76CB;&quot;&gt;\&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt; in &lt;&#x2F;span&gt;&lt;span&gt;$dir&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #D20F39;font-style: italic;&quot;&gt;        exit&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FE640B;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #8839EF;&quot;&gt;    fi&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #8839EF;&quot;&gt;fi&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;local-share-applications-firefox-savedtabs-desktop&quot;&gt;~&#x2F;.local&#x2F;share&#x2F;applications&#x2F;firefox-savedtabs.desktop&lt;a class=&quot;zola-anchor&quot; href=&quot;#local-share-applications-firefox-savedtabs-desktop&quot; aria-label=&quot;Anchor link for: local-share-applications-firefox-savedtabs-desktop&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #4C4F69; background-color: #EFF1F5;&quot;&gt;&lt;code data-lang=&quot;ini&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #7C7F93;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #DF8E1D;&quot;&gt;Desktop Entry&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7C7F93;&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #1E66F5;&quot;&gt;Name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #179299;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;Firefox SavedTabs restore&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #7C7F93;font-style: italic;&quot;&gt;# update-desktop-database ~&#x2F;.local&#x2F;share&#x2F;applications&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #1E66F5;&quot;&gt;Exec&lt;&#x2F;span&gt;&lt;span style=&quot;color: #179299;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;&#x2F;usr&#x2F;local&#x2F;bin&#x2F;firefox-savedtabs-restore %u&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #1E66F5;&quot;&gt;Type&lt;&#x2F;span&gt;&lt;span style=&quot;color: #179299;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;Application&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #1E66F5;&quot;&gt;Terminal&lt;&#x2F;span&gt;&lt;span style=&quot;color: #179299;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #1E66F5;&quot;&gt;MimeType&lt;&#x2F;span&gt;&lt;span style=&quot;color: #179299;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;x-scheme-handler&#x2F;x-firefox-savedtabs&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7C7F93;font-style: italic;&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Converting Zola pages from TOML to YAML</title>
        <published>2026-04-07T00:00:00+00:00</published>
        <updated>2026-04-07T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/code/converting-zola-pages-from-toml-to-yaml/"/>
        <id>https://colas.nahaboo.net/code/converting-zola-pages-from-toml-to-yaml/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/code/converting-zola-pages-from-toml-to-yaml/">&lt;p&gt;Since &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&#x2F;&quot;&gt;Zola&lt;&#x2F;a&gt; now supports frontmatter in its markdown pages in the &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;yaml.org&#x2F;&quot;&gt;YAML&lt;&#x2F;a&gt; format in addition to the original &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;toml.io&#x2F;&quot;&gt;TOML&lt;&#x2F;a&gt;, I decided to migrate all my pages to YAML, as it is both easier to read and write for humans, and natively understood by a majority of tools (Emacs, marktext, obsidian, vs-code, typos, zettlt...)&lt;&#x2F;p&gt;
&lt;p&gt;So I wrote a small bash script for the conversion, &lt;code&gt;site-toml2yaml&lt;&#x2F;code&gt; (all my personal site management tools start with the prefix &lt;code&gt;site-&lt;&#x2F;code&gt; for taking advantage of the tab-completion).
It should run on any Linux or Unix system, and it requires &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;TomWright&#x2F;dasel&quot;&gt;dasel&lt;&#x2F;a&gt; and the usual gang: grep, sed, head...&lt;&#x2F;p&gt;
&lt;p&gt;Note that you could also use &lt;strong&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gohugo.io&#x2F;commands&#x2F;hugo_convert&#x2F;&quot;&gt;hugo convert&lt;&#x2F;a&gt;&lt;&#x2F;strong&gt;, but I haven&#x27;t tested it.&lt;&#x2F;p&gt;
&lt;p&gt;You can grab it at my &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ColasNahaboo&#x2F;colas-zola-tools&quot;&gt;zola-tools repository&lt;&#x2F;a&gt;. This repository is quite empty for now, but I will use it to publish the various small tools I use to maintain this public site.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;usage&quot;&gt;Usage&lt;a class=&quot;zola-anchor&quot; href=&quot;#usage&quot; aria-label=&quot;Anchor link for: usage&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;site-toml2yaml&lt;&#x2F;strong&gt; &lt;em&gt;md-files or directories...&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Converts in place the frontmatter of Markdown files from TOML to YAML.&lt;br &#x2F;&gt;
It recurses in directories, but looking only for &lt;code&gt;*.md&lt;&#x2F;code&gt; files and sub-dirs.&lt;br &#x2F;&gt;
Without argument, run on &lt;code&gt;${ZOLA_ROOT}&#x2F;content&#x2F;&lt;&#x2F;code&gt; &lt;br &#x2F;&gt;
Should work on any Markdown files with TOML frontmatter.&lt;&#x2F;p&gt;
&lt;p&gt;You should only run it on your content&#x2F; dir normally. For instance running it
on your themes&#x2F; dir will risk messing your imported themes&lt;&#x2F;p&gt;
&lt;p&gt;WARNING: it modifies the files in place, so MAKE A BACKUP before running it!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;why-converting-to-yaml&quot;&gt;Why converting to YAML?&lt;a class=&quot;zola-anchor&quot; href=&quot;#why-converting-to-yaml&quot; aria-label=&quot;Anchor link for: why-converting-to-yaml&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;TOML is arguably a &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;npf.io&#x2F;2014&#x2F;08&#x2F;intro-to-toml&#x2F;&quot;&gt;better configuration file format&lt;&#x2F;a&gt; than YAML, but only if you want to use it as a simpler JSON, i.e. a well-specified, unambiguous way to represent any data.&lt;&#x2F;p&gt;
&lt;p&gt;However, I feel that for the simple and limited use case of Zola pages frontmatter, it is overkill and thus a real pain to read and edit by hand. Let&#x27;s take an example:&lt;&#x2F;p&gt;
&lt;div class=&#x27;tables-horiz meta&#x27;&gt;
&lt;div&gt;
&lt;h3&gt;TOML&lt;&#x2F;h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #4C4F69; background-color: #EFF1F5;&quot;&gt;&lt;code data-lang=&quot;toml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #7C7F93;&quot;&gt;[&lt;&#x2F;span&gt;&lt;span&gt;table1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7C7F93;&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    foo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #179299;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt; &amp;quot;bar&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #7C7F93;&quot;&gt;    [&lt;&#x2F;span&gt;&lt;span&gt;table1.nested_table&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7C7F93;&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        baz&lt;&#x2F;span&gt;&lt;span style=&quot;color: #179299;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt; &amp;quot;bat&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #7C7F93;&quot;&gt;[[&lt;&#x2F;span&gt;&lt;span&gt;comments&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7C7F93;&quot;&gt;]]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;author&lt;&#x2F;span&gt;&lt;span style=&quot;color: #179299;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt; &amp;quot;Nate&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;text&lt;&#x2F;span&gt;&lt;span style=&quot;color: #179299;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt; &amp;quot;Great Article!&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #7C7F93;&quot;&gt;[[&lt;&#x2F;span&gt;&lt;span&gt;comments&lt;&#x2F;span&gt;&lt;span style=&quot;color: #7C7F93;&quot;&gt;]]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;author&lt;&#x2F;span&gt;&lt;span style=&quot;color: #179299;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt; &amp;quot;Anonymous&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;text&lt;&#x2F;span&gt;&lt;span style=&quot;color: #179299;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt; &amp;quot;Love it!&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;div&gt;
&lt;h3&gt;YAML&lt;&#x2F;h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #4C4F69; background-color: #EFF1F5;&quot;&gt;&lt;code data-lang=&quot;yaml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #1E66F5;&quot;&gt;comments&lt;&#x2F;span&gt;&lt;span style=&quot;color: #179299;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #7C7F93;&quot;&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #1E66F5;&quot;&gt; author&lt;&#x2F;span&gt;&lt;span style=&quot;color: #179299;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt; Nate&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #1E66F5;&quot;&gt;    text&lt;&#x2F;span&gt;&lt;span style=&quot;color: #179299;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt; Great Article!&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #7C7F93;&quot;&gt;  -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #1E66F5;&quot;&gt; author&lt;&#x2F;span&gt;&lt;span style=&quot;color: #179299;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt; Anonymous&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #1E66F5;&quot;&gt;    text&lt;&#x2F;span&gt;&lt;span style=&quot;color: #179299;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt; Love it!&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #1E66F5;&quot;&gt;table1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #179299;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #1E66F5;&quot;&gt;  foo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #179299;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt; bar&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #1E66F5;&quot;&gt;  nested_table&lt;&#x2F;span&gt;&lt;span style=&quot;color: #179299;&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #1E66F5;&quot;&gt;    baz&lt;&#x2F;span&gt;&lt;span style=&quot;color: #179299;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #40A02B;&quot;&gt; bat&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;See? Especially for people like me with a Unix culture, the YAML format seems both more natural (resembling the format of email or HTTP headers, the use of indentation à la Python), and TOML has a repulsive Windows flavor. Add to this that most of the tools I use understand natively YAML frontmatter but not TOML, and the decision is easy.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Explicit Action Pattern keeps you in the flow</title>
        <published>2026-04-05T00:00:00+00:00</published>
        <updated>2026-04-05T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/code/explicit-action-pattern-keeps-you-in-the-flow/"/>
        <id>https://colas.nahaboo.net/code/explicit-action-pattern-keeps-you-in-the-flow/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/code/explicit-action-pattern-keeps-you-in-the-flow/">&lt;p&gt;When designing interfaces for tools for my personal use, I have been using what I call an &lt;strong&gt;Explicit Action Pattern&lt;&#x2F;strong&gt;, the opposite of modal design. Due to the general trend towards minimalism of modern UI practice, it is not used a lot, but I think it should, and here is why.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;examples&quot;&gt;Examples&lt;a class=&quot;zola-anchor&quot; href=&quot;#examples&quot; aria-label=&quot;Anchor link for: examples&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;

&lt;table style=&#x27;background-color: #f0f7ff;&#x27;&gt;
  &lt;tr&gt;
    &lt;th&gt;Explicit Action Pattern&lt;&#x2F;th&gt;&lt;th&gt;Modal Design&lt;&#x2F;th&gt;
  &lt;&#x2F;tr&gt;
  &lt;tr&gt;
    &lt;td style=&#x27;padding-right:2em;&#x27;&gt;
      &lt;div&gt;&lt;b&gt;Initial Search&lt;&#x2F;b&gt;&lt;&#x2F;div&gt;
      &lt;form style=&#x27;display:inline&#x27;&gt;
        &lt;input name=search value=&quot;&quot; size=24&gt;
          &lt;input type=submit value=&#x27;SEARCH ALL&#x27; style=&#x27;font-weight:bold&#x27;&gt;
      &lt;&#x2F;form&gt;
      &lt;br&gt;
      &lt;form style=&#x27;display:inline&#x27;&gt;
        &lt;input name=search value=&quot;&quot; size=24&gt;
        &lt;input type=submit value=&#x27;Search Movie&#x27;&gt;
      &lt;&#x2F;form&gt;
      &lt;br&gt;
      &lt;form style=&#x27;display:inline&#x27;&gt;
        &lt;input name=search value=&quot;&quot; size=24&gt;
        &lt;input type=submit value=&#x27;Search Music&#x27;&gt;
      &lt;&#x2F;form&gt;
      &lt;br&gt;
      &lt;form style=&#x27;display:inline&#x27;&gt;
        &lt;input name=search value=&quot;Alan Cooper&quot; size=24&gt;
        &lt;input type=submit value=&#x27;Search EBook&#x27;&gt;
      &lt;&#x2F;form&gt;
    &lt;&#x2F;td&gt;
    &lt;td&gt;
      &lt;form style=&#x27;display:inline&#x27;&gt;
        &lt;input name=search value=&quot;Alan Cooper&quot; size=24&gt;
        &lt;input type=submit value=&#x27;Search&#x27;&gt;
        &lt;br&gt;
        &lt;input type=&quot;radio&quot; id=&quot;0&quot; name=&quot;movie&quot; value=&quot;all&quot; &#x2F;&gt;
        &lt;label for=&quot;0&quot;&gt;&lt;b&gt;All&lt;&#x2F;b&gt;&lt;&#x2F;label&gt;
        &lt;input type=&quot;radio&quot; id=&quot;1&quot; name=&quot;movie&quot; value=&quot;movie&quot; &#x2F;&gt;
        &lt;label for=&quot;1&quot;&gt;movie&lt;&#x2F;label&gt;
        &lt;input type=&quot;radio&quot; id=&quot;2&quot; name=&quot;movie&quot; value=&quot;music&quot; &#x2F;&gt;
        &lt;label for=&quot;2&quot;&gt;music&lt;&#x2F;label&gt;
        &lt;input type=&quot;radio&quot; id=&quot;3&quot; name=&quot;movie&quot; value=&quot;ebook&quot; checked &#x2F;&gt;
        &lt;label for=&quot;3&quot;&gt;ebook&lt;&#x2F;label&gt;
      &lt;&#x2F;form&gt;
    &lt;&#x2F;td&gt;
  &lt;&#x2F;tr&gt;
  &lt;tr&gt;
    &lt;td&gt;
      &lt;div&gt;&lt;b&gt;Search results...&lt;&#x2F;b&gt;&lt;&#x2F;div&gt;
      &lt;form style=&#x27;display:inline&#x27;&gt;
        &lt;input name=search size=24 value=&quot;&quot;&gt;
        &lt;input type=submit value=Search&gt;
      &lt;&#x2F;form&gt;
      &lt;br&gt;
      &lt;form style=&#x27;display:inline&#x27;&gt;
        &lt;input name=search value=&quot;Alan Cooper&quot; size=24&gt;
        &lt;input type=submit value=&quot;Re Search&quot;&gt;
      &lt;&#x2F;form&gt;
    &lt;&#x2F;td&gt;
    &lt;td&gt;
      &lt;form style=&#x27;display:inline&#x27;&gt;
        &lt;input name=search value=&quot;Alan Cooper&quot; size=24&gt;
        &lt;input type=submit value=&#x27;Search&#x27;&gt;
        &lt;input type=submit value=&#x27;Clear&#x27;&gt;
        &lt;br&gt;
        &lt;input type=&quot;radio&quot; id=&quot;0&quot; name=&quot;movie&quot; value=&quot;all&quot; &#x2F;&gt;
        &lt;label for=&quot;0&quot;&gt;&lt;b&gt;All&lt;&#x2F;b&gt;&lt;&#x2F;label&gt;
        &lt;input type=&quot;radio&quot; id=&quot;1&quot; name=&quot;movie&quot; value=&quot;movie&quot; &#x2F;&gt;
        &lt;label for=&quot;1&quot;&gt;movie&lt;&#x2F;label&gt;
        &lt;input type=&quot;radio&quot; id=&quot;2&quot; name=&quot;movie&quot; value=&quot;music&quot; &#x2F;&gt;
        &lt;label for=&quot;2&quot;&gt;music&lt;&#x2F;label&gt;
        &lt;input type=&quot;radio&quot; id=&quot;3&quot; name=&quot;movie&quot; value=&quot;ebook&quot; checked &#x2F;&gt;
        &lt;label for=&quot;3&quot;&gt;ebook&lt;&#x2F;label&gt;
      &lt;&#x2F;form&gt;
    &lt;&#x2F;td&gt;
  &lt;&#x2F;tr&gt;
&lt;&#x2F;table&gt;

&lt;p&gt;As you can see in the top row, for searching an ebook, I will &quot;flow&quot; through the form from left to right, filling the relevant field and hitting the return key, or pressing the &quot;Search EBook&quot; button. But with the traditional modal design, choosing the radio button &quot;ebook&quot; breaks my flow of entry.&lt;&#x2F;p&gt;
&lt;p&gt;On the second row, you can see how I use this design for providing a &quot;search again&quot; form, where I can choose to enter a new search, or edit the previous one by selecting the relevant search box. It treats the search interface like a REPL (Read-Eval-Print Loop) rather than a static webpage. Whereas in the traditional way, I would have to break my flow to go hit the &quot;Clear&quot; button to empty the field.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;interaction-flow&quot;&gt;Interaction flow&lt;a class=&quot;zola-anchor&quot; href=&quot;#interaction-flow&quot; aria-label=&quot;Anchor link for: interaction-flow&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;So, rather than breaking the flow of the interactions to set modes, you just flow seamlessly into branches of the decision tree. If we take a car driving analogy, you just choose a direction when encountering a fork in the road, rather than having to get out of the car to move a barrier before resuming your ride.&lt;&#x2F;p&gt;
&lt;script src=https:&#x2F;&#x2F;colas.nahaboo.net&#x2F;js&#x2F;mermaid.js&gt;&lt;&#x2F;script&gt;

&lt;pre class=&quot;mermaid&quot;&gt;
  

graph TD;
    User((User Interaction));

    %% LEFT SIDE: Explicit Pattern (Parallel)
    subgraph Explicit [&quot;Explicit Action Pattern (Parallel)&quot;];
        FormB[Dedicated Form: Search Books];
        InputB[&#x2F;Input Field: Books&#x2F;];
        FormM[Dedicated Form: Search Movies];
        InputM[&#x2F;Input Field: Movies&#x2F;];
    end;

    %% RIGHT SIDE: Modal Pattern (Sequential)
    subgraph Modal [&quot;Modal     Design (Sequential)&quot;];
        FormS[Single Search Form];
        %% The Vertical Spine (invisible link to keep things straight)
        FormS ~~~ InputS[&#x2F;Generic Input Field&#x2F;];
        %% The &quot;Hook&quot; - Positioned to the side
        Mode{{Mode Selection: Books vs Movies}};
    end;

    %% Explicit Connections (Direct Flow)
    User --&gt; FormB;
    User --&gt; FormM;
    FormB --&gt; InputB;
    FormM --&gt; InputM;
    InputB --&gt; Submit((Submit));
    InputM --&gt; Submit;

    %% Modal Connections (The Hook Flow)
    User --&gt; FormS;
    FormS --&gt; Mode;
    Mode --&gt; InputS;
    InputS --&gt; Submit;

    %% Styling from original source
    style FormB fill:#f9f,stroke:#333;
    style FormM fill:#f9f,stroke:#333;
    style InputB fill:#ccf,stroke:#333;
    style InputM fill:#ccf,stroke:#333;
    style Modal fill:#f5f5f5,stroke:#999,stroke-dasharray: 5 5;
    style FormS fill:#eee,stroke:#999;
    style Mode fill:#fff,stroke:#333,stroke-width:2px;
&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;benefits&quot;&gt;Benefits&lt;a class=&quot;zola-anchor&quot; href=&quot;#benefits&quot; aria-label=&quot;Anchor link for: benefits&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;This Explicit Action Pattern has many benefits for power users:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Distributed Entry:&lt;&#x2F;strong&gt; Breaking one complex task into multiple simple, dedicated entry points.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Parallel UI:&lt;&#x2F;strong&gt; Presenting all options simultaneously rather than hiding them behind a selection step.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Non-Modal Interaction:&lt;&#x2F;strong&gt; Avoiding the &quot;mode&quot; where you have to set a state (e.g., clicking a radio button) before you can perform the actual action.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;For the examples above:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Feature&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Separate Dedicated Fields&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Single Field + mode switches&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Cognitive Load&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Higher initial load&lt;&#x2F;strong&gt; (more to look at), unless you are already used to this UI.&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Lower initial load&lt;&#x2F;strong&gt; (cleaner look), especially for novices.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Physical Effort&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Lower&lt;&#x2F;strong&gt; (Click bar → Type → Enter).&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Higher&lt;&#x2F;strong&gt; (Click radio → Click bar → Type → Enter).&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Intent Clarity&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Absolute from the moment you click.&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Ambiguous until the modifier is set.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Screen Space&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&quot;Expensive&quot;; requires more vertical&#x2F;grid space.&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Efficient; fits in a header.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;This is essentially applying &lt;strong&gt;Functional Programming&lt;&#x2F;strong&gt; and &lt;strong&gt;CLI philosophy&lt;&#x2F;strong&gt; to a GUI.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Immutability:&lt;&#x2F;strong&gt; The pre-filled field is the &quot;original state.&quot;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Pure Functions:&lt;&#x2F;strong&gt; Each input field has a single, predictable output.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;No Side Effects:&lt;&#x2F;strong&gt; Clearing one field doesn&#x27;t break your ability to see the other.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;In a nutshell, &lt;strong&gt;Directness over Modality&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;for-power-users&quot;&gt;For power users&lt;a class=&quot;zola-anchor&quot; href=&quot;#for-power-users&quot; aria-label=&quot;Anchor link for: for-power-users&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;If you are used to CLI environments, or using mostly keyboards shortcuts in interfaces, or editors like Emacs or vi, your brain likely functions on &quot;Command-Action&quot; pairs. And Explicit Action Patterns offers you:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Muscle Memory:&lt;&#x2F;strong&gt; You can bind a specific field to a specific mental &quot;slot.&quot; You don&#x27;t have to check the state of a radio button before hitting enter; you &lt;em&gt;know&lt;&#x2F;em&gt; which field you are in. It transforms a two-click &quot;hunt and peck&quot; task into a single-click muscle memory task. You don&#x27;t have to wait for an animation or look for a label; you just hit the coordinate on the screen you already know.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;No &quot;Context Switch&quot; Tax:&lt;&#x2F;strong&gt; Selecting a radio button is a &quot;mode switch.&quot; It requires you to stop thinking about your search query for a second to handle the UI mechanics. Separate fields eliminate that tax.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Visual Affordance:&lt;&#x2F;strong&gt; The label &quot;Search Movies&quot; is context-free, an immediate call to action. A generic &quot;Search&quot; box is a mystery until you look at the surrounding buttons.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;in-the-real-world&quot;&gt;In the real world&lt;a class=&quot;zola-anchor&quot; href=&quot;#in-the-real-world&quot; aria-label=&quot;Anchor link for: in-the-real-world&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;While interfaces have moved toward the &quot;Google-style&quot; of Modal Design to flatten the learning curve for the general public, many expert-level interfaces still rely on the Explicit Action Pattern. You can find it in library catalogs, Bloomberg or Reuters terminals, and high-end enterprise software.&lt;&#x2F;p&gt;
&lt;p&gt;You can also see this approach in media editing software. Instead of a single &quot;Save...&quot; dialog that asks for a format later, you often have explicit menu entries: &quot;Save,&quot; &quot;Export as PNG,&quot; &quot;Export as JPG,&quot; or &quot;Export as MP3.&quot;&lt;&#x2F;p&gt;
&lt;p&gt;And one can consider that the &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Unix_philosophy&quot;&gt;Unix philosophy&lt;&#x2F;a&gt; of having one tool per function, instead of mega-commands with tons of options is also an embodiment of the  Explicit Action Pattern.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;dive-deeper&quot;&gt;Dive deeper&lt;a class=&quot;zola-anchor&quot; href=&quot;#dive-deeper&quot; aria-label=&quot;Anchor link for: dive-deeper&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;This approach is highly &quot;discoverable.&quot; You don&#x27;t need to learn &quot;how the search bar works&quot;; the interface tells you exactly what it can do by simply existing. This is what ihas been advocated by many Usability experts, that I consider mandatory reads:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;The boss: Alan Cooper books, especially &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;thedesignbooks.com&#x2F;books&#x2F;about-face-the-essentials-of-interaction-design&quot;&gt;About Face: The Essentials of Interaction Design&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;The enjoyable &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;sensible.com&#x2F;dont-make-me-think&#x2F;&quot;&gt;Don&#x27;t make me think&lt;&#x2F;a&gt; by Steve Krug.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.cs.umd.edu&#x2F;users&#x2F;ben&#x2F;papers&#x2F;Shneiderman1983Direct.pdf&quot;&gt;Direct Manipulation&lt;&#x2F;a&gt; by Ben Shneiderman&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.edwardtufte.com&#x2F;notes-sketches&#x2F;?msg_id=0000Jr&quot;&gt;Data Density&lt;&#x2F;a&gt; the examples above being described by him as &quot;Parallel Input&quot;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;The_Humane_Interface&quot;&gt;The human Interface&lt;&#x2F;a&gt; by Jef Raskin, especially his &quot;Monotonicity&quot;: the idea that a specific goal should always be achieved by a specific, unchanging set of actions.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Foswiki update script</title>
        <published>2026-03-26T00:00:00+00:00</published>
        <updated>2026-03-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/code/foswiki-update-script/"/>
        <id>https://colas.nahaboo.net/code/foswiki-update-script/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/code/foswiki-update-script/">&lt;p&gt;Although I have &lt;a href=&quot;&#x2F;blog&#x2F;a-new-version-of-the-site-for-2026-in-zola&quot;&gt;migrated my public site to zola&lt;&#x2F;a&gt; which was on &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;foswiki.org&quot;&gt;Foswiki&lt;&#x2F;a&gt;, I have decided for now to keep my private family wiki on Foswiki for now.&lt;&#x2F;p&gt;
&lt;p&gt;So I needed to upgrade it to 2.1.11, it was still in 2.1.6, and since the upgrade is not exactly intuitive, I made a bash script to automatise the upgrade.&lt;&#x2F;p&gt;
&lt;p&gt;You can find it &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ColasNahaboo&#x2F;foswiki-upgrade&quot;&gt;on GitHub&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;See also its publication on the Foswiki site, with a &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;foswiki.org&#x2F;Support&#x2F;BestPracticeTip35#comment1.1774606339&quot;&gt;reminder of the standard upgrade method&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;how-the-script-works&quot;&gt;How the Script Works&lt;a class=&quot;zola-anchor&quot; href=&quot;#how-the-script-works&quot; aria-label=&quot;Anchor link for: how-the-script-works&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;This script supposes a modern version of Foswiki (v2+): it blindly overwrites the files that should not have been modified, so when customizing your wiki be sure to never directly modify distributed files.&lt;&#x2F;p&gt;
&lt;p&gt;The script however will not overwrite blindly any topic file that has been edited via Foswiki itself, by checking the author metadata. It will perform a 3-way merge, as automated as possible.&lt;&#x2F;p&gt;
&lt;p&gt;It also works only on a local copy of the site. You will have to download yourself a copy of your site, upgrade, and then re-upload it in place. This keeps the script simpler and safer.&lt;&#x2F;p&gt;
&lt;p&gt;It works on linux, but should work in linux-like layers on top of other OSes, such as cygwin, WSL, Homebrew, ...&lt;&#x2F;p&gt;
&lt;h2 id=&quot;why-staying-on-foswiki&quot;&gt;Why staying on Foswiki?&lt;a class=&quot;zola-anchor&quot; href=&quot;#why-staying-on-foswiki&quot; aria-label=&quot;Anchor link for: why-staying-on-foswiki&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;My private wiki is used by me, but also my wife, who is not really fluent in wiki or markdown  editing, so an excellent WYSIWYG is a must. And personnaly, I hate databases and strive for stability and simple architecture. Foswiki has all these qualities... and I would have a lot of content to convert.&lt;&#x2F;p&gt;
&lt;p&gt;But I will probably switch to an open source markdown-based wiki with a very good WYSIWYG editor and flat file storage, and easy to maintain. For now I see 3 potential candidates:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;silverbullet.md&#x2F;&quot;&gt;SilverBullet&lt;&#x2F;a&gt;, still evolving but very promising&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;otterwiki.com&#x2F;&quot;&gt;OtterWiki&lt;&#x2F;a&gt;, minimal but seems powerful enough&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;js.wiki&#x2F;&quot;&gt;Wiki.js&lt;&#x2F;a&gt; the current leader, but I will wait for the v3 as the v2 to v3 migration do not seem automatic, and the development &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;selfhosted&#x2F;comments&#x2F;1mebp67&#x2F;is_wikijs_3_dead&#x2F;&quot;&gt;seems to have slowed greatly&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>L&#x27;équilibre sur planche de SUP étroite</title>
        <published>2026-03-25T00:00:00+00:00</published>
        <updated>2026-03-25T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/surf/mastering-lateral-balance-on-a-small-sup-board-fr/"/>
        <id>https://colas.nahaboo.net/surf/mastering-lateral-balance-on-a-small-sup-board-fr/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/surf/mastering-lateral-balance-on-a-small-sup-board-fr/">&lt;p&gt;Je pense que j&#x27;ai compris le truc pour l&#x27;équilibre sur planche étroite: tout est dans la position du pied avant. Plus précisément, le pied avant doit être dans l&#x27;axe longitudinal de la planche et à une distance de la ligne médiane (du &quot;stringer&quot;) qui va dépendre de l&#x27;étroitesse de la planche, ou plutôt de sa facilité à rouler sur le coté (qui dépend de la largeur, mais aussi du volume des rails, du shape, de la largeur des extrémités, de la forme de la carène...).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Plus la planche roule facilement sur le coté, plus le pied doit être proche du stringer.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;C&#x27;est cette distance qui est absolument critique pour l&#x27;équilibre sur planche étroite. Le pied arrière va lui se placer naturellement pour équilibrer le pied avant, on a pas trop besoin d&#x27;y prêter attention.&lt;&#x2F;p&gt;
&lt;p&gt;Ce que j&#x27;ai constaté: C&#x27;est comme prendre un virage à vélo ou moto, il faut que dans les mouvements latéraux le corps et l&#x27;engin penchent ensemble, du même angle. Et donc si on a les pieds trop serrés (en haut sur le diagramme), quand on part sur le coté le corps roule mais pas la planche, on tombe. Si les pied sont trop écartés (au milieu), au contraire, la poussée sur la planche est trop forte et elle bascule trop, et on tombe.&lt;&#x2F;p&gt;
&lt;p&gt;Si on est pile poil à la distance magique (en bas), tout l&#x27;ensemble corps+planche bascule ensemble, le mouvement est plus doux, anticipable et contrôlable, un peu comme un culbuto géant.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;surf&#x2F;mastering-lateral-balance-on-a-small-sup-board&#x2F;schema.png&quot; alt=&quot;schema&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Comme pour l&#x27;écart des pieds avant&#x2F;arrière dans la position en fente avant à la rame sur petite planche, c&#x27;est une position pas naturelle, il faut se forcer, mais ça vient vite. Et c&#x27;est absolument indispensable pour passer sur des planches étroites avec leur rail-to-rail si jouissif...&lt;&#x2F;p&gt;
&lt;p&gt;Le truc est donc d&#x27;écarter plus ou moins son pied avant de l&#x27;axe central jusqu&#x27;à sentir que la planche roule naturellement avec nous. Quand on part sur le coté, si on a envie d&#x27;écarter son pied pour se rattraper, c&#x27;est que on a les pieds trop serrés, et au contraire, on sent que la planche se dérobe sous ses pieds on a les pieds trop écartés. Une fois que on a trouvé l’équilibre c&#x27;est très facile de le retrouver au feeling, on sent nettement quand la planche fait corps.&lt;&#x2F;p&gt;
&lt;p&gt;C&#x27;est surtout sensible sur des planches à faible volume, où les rails sont sous l&#x27;eau. Sur des planches qui flottent plus, le roulis de la planche est moins progressif, il est perturbé par l&#x27;entrée et la sortie des rails de l&#x27;eau, et plus de facteurs entrent en jeu, c&#x27;est plus dur de &quot;faire corps&quot; avec la planche.&lt;&#x2F;p&gt;
&lt;p&gt;Exemple sur la photo de matt5neufSUP sur sa fatal:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;surf&#x2F;mastering-lateral-balance-on-a-small-sup-board&#x2F;above.jpg&quot; alt=&quot;schema&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Et à l&#x27;extrême:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;surf&#x2F;mastering-lateral-balance-on-a-small-sup-board&#x2F;underwater.jpg&quot; alt=&quot;schema&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Cet article a été posté initialement sur &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;forum.gong-galaxy.com&#x2F;viewtopic.php?t=10543&quot;&gt;le forum Gong&lt;&#x2F;a&gt; le 2019-03-31, vous pouvez d&#x27;ailleurs aller y lire les discussions qui ont suivi.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Mastering lateral balance on a small SUP board</title>
        <published>2026-03-25T00:00:00+00:00</published>
        <updated>2026-03-25T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/surf/mastering-lateral-balance-on-a-small-sup-board/"/>
        <id>https://colas.nahaboo.net/surf/mastering-lateral-balance-on-a-small-sup-board/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/surf/mastering-lateral-balance-on-a-small-sup-board/">&lt;p&gt;After some experiments, I think I have found an easy way to have a good lateral balance on a small board. A small board being one with little lateral stability, be it because it is narrow, have thin rails, low volume, ...&lt;&#x2F;p&gt;
&lt;p&gt;Your front foot must be parallel to the stringer, and:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;the less the board is stable laterally, the less distance it must have from the stringer.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The back foot will naturally position itself symmetrically wrt the stringer, so you actually only have to focus on the front foot.&lt;&#x2F;p&gt;
&lt;p&gt;To find this magic position, look at the following diagram:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;top row: if your feet are too close together, when you lean on one side, the leverage on the board will be not strong enough to make it roll at the same angle as your body: you feel the urge to widen your stance to keep balance&lt;&#x2F;li&gt;
&lt;li&gt;middle row: if your feet are too wide apart (the problem of most people), when you lean on one side, the leverage on the board will make it roll faster than your body and you will be thrown overboard and your low foot will slip.&lt;&#x2F;li&gt;
&lt;li&gt;bottom row: the perfect position: you will wobble as if your board and you was a solid culbuto toy. You want to be one with your board, as for banking in turns on a bike. Balance suddenly becomes super natural and smooth. It still needs a lot of concentration and it is still tiring, but it is definitively easier.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;colas.nahaboo.net&#x2F;surf&#x2F;mastering-lateral-balance-on-a-small-sup-board&#x2F;schema.png&quot; alt=&quot;schema&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;And once you experience this feeling, it is easy to re-find this perfect foot position by feeling how your board react to your wobbles.
It will not feel natural at all at first, but you must resist the urge to widen your stance, you will get quickly used to it.&lt;&#x2F;p&gt;
&lt;p&gt;It is especially useful if your rails are underwater. If your board has too much volume, it will not roll smoothly on its side (it resistance to rolling will vary with the angle), and the foot position is less critical. But for small and&#x2F;or narrow boards, it is a very convenient rule of thumb to find the quickest way to feel at ease.&lt;&#x2F;p&gt;
&lt;p&gt;In practice this means that your feet are quite close to the stringer:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;colas.nahaboo.net&#x2F;surf&#x2F;mastering-lateral-balance-on-a-small-sup-board&#x2F;above.jpg&quot; alt=&quot;schema&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The semi surf stance (front foot aligned with the stringer, rear foot slightly open) is mandatory on small boards, both for paddling balance and early take offs, as I often stress.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;colas.nahaboo.net&#x2F;surf&#x2F;mastering-lateral-balance-on-a-small-sup-board&#x2F;underwater.jpg&quot; alt=&quot;schema&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;By having the front foot parallel to the stringer there is no difference in lateral balance when your weight moves between your toes and your heel, something that happens a lot unconsciously as you keep your balance. In my experience having your heel closer to the rail than your toes is the recipe for unexpected disaster.&lt;&#x2F;p&gt;
&lt;p&gt;When I advise people I even make it a mandatory condition to get on boards shorter than 8&#x27;. You will not benefit from a short board if you do not want to force yourself to stop paddling with parallel feet. A surprising number of people keep paddling parallel on small boards and thus take off really late and miss a lot of waves, or take off too late and a get the wave close on them.&lt;&#x2F;p&gt;
&lt;p&gt;I made a dedicated post for the lateral balance issue because at 59 [at the time I wrote this post], after 10 years SUPing, I felt that the lateral balance was the main thing what I felt worse than when I was younger: I am slower to react. I was thinking that (relatively) narrow boards were not for me anymore. Younger people will be able to put their feet about anywhere, but for most people, I think looking for this lateral balance point will be very useful, as the board moving with you let you more time to react before things need correcting.&lt;&#x2F;p&gt;
&lt;p&gt;This post was originally made at &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;beta.seabreeze.com.au&#x2F;forums&#x2F;Stand-Up-Paddle&#x2F;SUP&#x2F;Mastering-lateral-balance-on-a-small-SUP-board?page=1&quot;&gt;seabreeze&lt;&#x2F;a&gt; on 2019-04-02. You can read the discussions it generated there.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Vive les combinaisons à zip de poitrine inversé!</title>
        <published>2026-03-24T00:00:00+00:00</published>
        <updated>2026-03-24T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/surf/wetsuits-chest-zip-direction-fr/"/>
        <id>https://colas.nahaboo.net/surf/wetsuits-chest-zip-direction-fr/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/surf/wetsuits-chest-zip-direction-fr/">&lt;p&gt;J&#x27;avais l&#x27;habitude d&#x27;acheter principalement des combinaisons &lt;strong&gt;Rip Curl&lt;&#x2F;strong&gt;. Lorsqu&#x27;ils ont décidé d&#x27;&lt;strong&gt;inverser le zip de poitrine&lt;&#x2F;strong&gt; (front zip), j&#x27;étais perplexe — mais après la première session, j&#x27;ai été convaincu :&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Les zips de poitrine doivent s&#x27;ouvrir vers l&#x27;intérieur.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;div class=&#x27;snapshots snapshots-2&#x27;&gt;
&lt;div class=&quot;snapshot-container&quot;&gt;
  &lt;input type=&quot;checkbox&quot; id=&quot;zoom-surf-wetsuits-chest-zip-direction-wetsuit-zipper-normal-jpg&quot; class=&quot;zoom-check&quot;&gt;
  &lt;label for=&quot;zoom-surf-wetsuits-chest-zip-direction-wetsuit-zipper-normal-jpg&quot; class=&quot;snapshot-label&quot;&gt;
    &lt;figure class=&quot;snapshot&quot;&gt;
      &lt;img src=&quot;&#x2F;surf&#x2F;wetsuits-chest-zip-direction&#x2F;wetsuit-zipper-normal.jpg&quot; alt=&quot;normal direction&quot;&gt;
      &lt;figcaption&gt;Normal direction: Bad!&lt;&#x2F;figcaption&gt;
    &lt;&#x2F;figure&gt;
  &lt;&#x2F;label&gt;
&lt;&#x2F;div&gt;

&lt;div class=&quot;snapshot-container&quot;&gt;
  &lt;input type=&quot;checkbox&quot; id=&quot;zoom-surf-wetsuits-chest-zip-direction-wetsuit-zipper-reverse-jpg&quot; class=&quot;zoom-check&quot;&gt;
  &lt;label for=&quot;zoom-surf-wetsuits-chest-zip-direction-wetsuit-zipper-reverse-jpg&quot; class=&quot;snapshot-label&quot;&gt;
    &lt;figure class=&quot;snapshot&quot;&gt;
      &lt;img src=&quot;&#x2F;surf&#x2F;wetsuits-chest-zip-direction&#x2F;wetsuit-zipper-reverse.jpg&quot; alt=&quot;reverse direction&quot;&gt;
      &lt;figcaption&gt;Reverse direction: Good!&lt;&#x2F;figcaption&gt;
    &lt;&#x2F;figure&gt;
  &lt;&#x2F;label&gt;
&lt;&#x2F;div&gt;

&lt;&#x2F;div&gt;
&lt;p&gt;&lt;strong&gt;Pourquoi ?&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Moins de tension :&lt;&#x2F;strong&gt; La tension naturelle exercée sur la combinaison ne tend pas à ouvrir la fermeture éclair. Il n&#x27;y a donc plus besoin de bloqueur encombrant ou de bouton pression ; le zip ne peut pas s&#x27;ouvrir tout seul dans l&#x27;eau.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Plus d&#x27;amplitude :&lt;&#x2F;strong&gt; L&#x27;extrémité &quot;intérieure&quot; du zip est débarrassée du mécanisme de départ, ce qui permet une ouverture plus large. Enfiler et retirer la combinaison devient nettement plus facile.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Durabilité :&lt;&#x2F;strong&gt; L&#x27;effort lors de l&#x27;habillage et du déshabillage est concentré sur l&#x27;extrémité &quot;ouverte&quot; du zip, là où il ne risque pas d&#x27;être endommagé.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;La photo à droite est celle de ma combinaison &lt;strong&gt;Feral&lt;&#x2F;strong&gt;. C’est une excellente shorty en néoprène &lt;strong&gt;Yamamoto&lt;&#x2F;strong&gt;, mais elle est taillée un peu plus petit au niveau du torse que d&#x27;autres marques. Résultat : j&#x27;ai littéralement fait exploser le zip dès la deuxième session — chose qui ne m&#x27;était jamais arrivée auparavant.&lt;&#x2F;p&gt;
&lt;p&gt;Je l&#x27;ai donc fait inverser par l&#x27;atelier de réparation local (l&#x27;excellent &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;all-in-wetsuit-repair.com&#x2F;&quot;&gt;All-In Repairs&lt;&#x2F;a&gt;), et la différence est flagrante. La combinaison est devenue beaucoup plus facile à enfiler et retirer et confortable au niveau de la poitrine !&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Mon conseil :&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Privilégiez&lt;&#x2F;strong&gt; les combinaisons avec des zips inversés.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Les zips classiques peuvent être inversés&lt;&#x2F;strong&gt; chez votre réparateur de combinaisons local.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Wetsuits chest zip direction: reverse!</title>
        <published>2026-03-24T00:00:00+00:00</published>
        <updated>2026-03-24T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/surf/wetsuits-chest-zip-direction/"/>
        <id>https://colas.nahaboo.net/surf/wetsuits-chest-zip-direction/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/surf/wetsuits-chest-zip-direction/">&lt;p&gt;I used to buy mostly Rip Curl wetsuit, and when they decided to reverse the chest zips, I was puzzled, but after the first session, I was convinced:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Chest zippers must open towards the inside&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;div class=&#x27;snapshots snapshots-2&#x27;&gt;
&lt;div class=&quot;snapshot-container&quot;&gt;
  &lt;input type=&quot;checkbox&quot; id=&quot;zoom-wetsuit-zipper-normal-jpg&quot; class=&quot;zoom-check&quot;&gt;
  &lt;label for=&quot;zoom-wetsuit-zipper-normal-jpg&quot; class=&quot;snapshot-label&quot;&gt;
    &lt;figure class=&quot;snapshot&quot;&gt;
      &lt;img src=&quot;wetsuit-zipper-normal.jpg&quot; alt=&quot;normal direction&quot;&gt;
      &lt;figcaption&gt;Normal direction: Bad!&lt;&#x2F;figcaption&gt;
    &lt;&#x2F;figure&gt;
  &lt;&#x2F;label&gt;
&lt;&#x2F;div&gt;

&lt;div class=&quot;snapshot-container&quot;&gt;
  &lt;input type=&quot;checkbox&quot; id=&quot;zoom-wetsuit-zipper-reverse-jpg&quot; class=&quot;zoom-check&quot;&gt;
  &lt;label for=&quot;zoom-wetsuit-zipper-reverse-jpg&quot; class=&quot;snapshot-label&quot;&gt;
    &lt;figure class=&quot;snapshot&quot;&gt;
      &lt;img src=&quot;wetsuit-zipper-reverse.jpg&quot; alt=&quot;reverse direction&quot;&gt;
      &lt;figcaption&gt;Reverse direction: Good!&lt;&#x2F;figcaption&gt;
    &lt;&#x2F;figure&gt;
  &lt;&#x2F;label&gt;
&lt;&#x2F;div&gt;

&lt;&#x2F;div&gt;
&lt;p&gt;Why?&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Reduced stress:&lt;&#x2F;strong&gt; The natural tension on the wetsuit doesn&#x27;t pull the zipper open. This eliminates the need for a cumbersome stopper or a snap button, as it cannot come undone on its own in the water.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Greater range of motion:&lt;&#x2F;strong&gt; The &quot;inside&quot; end of the zip is free from the bulk of the starting mechanism, allowing for a wider opening. This makes getting in and out of the suit noticeably easier.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Durability:&lt;&#x2F;strong&gt; The stress of entry and exit is concentrated at the &quot;open&quot; end of the zipper, where it is less likely to cause damage.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The picture on the right is of my Feral wetsuit. It’s an excellent Yamamoto neoprene suit, but it is cut a bit smaller in the chest than other brands. Because of this, I actually blew out the zipper during only my second session—something that has never happened to me before.&lt;&#x2F;p&gt;
&lt;p&gt;I had it reversed by a local repair shop (the excellent  &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;all-in-wetsuit-repair.com&#x2F;&quot;&gt;All-In repairs&lt;&#x2F;a&gt;), and the difference is staggering. The wetsuit feels noticeably looser and more comfortable in the chest!&lt;&#x2F;p&gt;
&lt;p&gt;My advice:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Prioritize&lt;&#x2F;strong&gt; wetsuits with reverse zippers.&lt;&#x2F;li&gt;
&lt;li&gt;Standard zippers can be &lt;strong&gt;reversed&lt;&#x2F;strong&gt; by your local wetsuit repair specialist.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>A new version of the site for 2026, in Zola</title>
        <published>2026-03-19T00:00:00+00:00</published>
        <updated>2026-03-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/blog/a-new-version-of-the-site-for-2026-in-zola/"/>
        <id>https://colas.nahaboo.net/blog/a-new-version-of-the-site-for-2026-in-zola/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/blog/a-new-version-of-the-site-for-2026-in-zola/">&lt;p&gt;I &lt;a href=&quot;&#x2F;blog&#x2F;a-new-version-of-the-site-for-2021&quot;&gt;said&lt;&#x2F;a&gt; that I wanted to migrate this web site to a &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Static_site_generator&quot;&gt;SSG&lt;&#x2F;a&gt; (Static Site Generator).
And, after 5 years of procrastination, Ta-Da! here is the new site!&lt;&#x2F;p&gt;
&lt;p&gt;Initially, I was planning to use &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gohugo.io&#x2F;&quot;&gt;Hugo&lt;&#x2F;a&gt;, since I love coding in Go, and was not planning to learn Rust (Hugo is coded in Go and Zola in Rust), but I finally chose &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&#x2F;&quot;&gt;Zola&lt;&#x2F;a&gt; over Hugo for many reasons:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Zola has basically all the performance advantages of Hugo, and is also a single binary, with no need for databases, docker, snap, flatpak...&lt;&#x2F;li&gt;
&lt;li&gt;Zola is &lt;strong&gt;opinionated&lt;&#x2F;strong&gt;. This is very important for me, I love more and more the systems were there is &quot;only one way to do it&quot;. Needless to say, I hate perl, and I love Go.&lt;&#x2F;li&gt;
&lt;li&gt;Zola is stable, and its creator (&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;keats&quot;&gt;&quot;Keats&quot;&lt;&#x2F;a&gt;) very committed to not chasing the latest fad. This means less risk of an upgrade breaking things.&lt;&#x2F;li&gt;
&lt;li&gt;Zola template engine, Tera, is both more powerful and more readable than the standard Go template engine used by Hugo.&lt;&#x2F;li&gt;
&lt;li&gt;Zola comes with more useful built-in features, but no plugins that in my opinion brings complexity, especially in docs, and upgrade hell.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;As for the theme, I was looking for a clean responsive modern simple theme, with high scores in the various web performance benchmarks, with search and comments, and some support for multilingual (the site is in English with a few pages also translated in French). I tried the two leaders in the Zola theme ecosystem:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&#x2F;themes&#x2F;tabi&#x2F;&quot;&gt;Tabi&lt;&#x2F;a&gt; I liked the looks but it felt a bit too complex for my needs: as a Zola novice I was afraid to end up relying too much on Tabi-specific feature instead of pure Zola and CSS ones.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&#x2F;themes&#x2F;abridge&#x2F;&quot;&gt;ABridge&lt;&#x2F;a&gt; I liked the architecture, not so much the design, but I struggled to make it work, it seems the doc still advise settings that break on recent Zola versions.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I thus looked for a simpler theme, and chose:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&#x2F;themes&#x2F;apollo&#x2F;&quot;&gt;Apollo&lt;&#x2F;a&gt; which was perfect for my needs, and simple enough to be easily modified for any of my future needs. I also enabled its support for the  &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;giscus.app&#x2F;&quot;&gt;Giscus&lt;&#x2F;a&gt; commenting system.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Porting my contents was made easy because I had anticipated this migration, and used Markdown for my posts in the Foswiki engine, instead of the native Foswiki syntax. So converting was basically adding a frontmatter to the pages, and fixing some links. I converted older posts with pandoc.&lt;&#x2F;p&gt;
&lt;p&gt;I have made a quick first migration. I will continue working on the CSS architecture and the looks in the following weeks.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;&#x2F;strong&gt; on 2026-03-22: I now am satisfied of the result. I plan to work a bit more to add a search for only the French pages (now the search ignores them), autodetection of the browser light&#x2F;dark preferences, sort the tags alphabetically in the page info line.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Rsync-Incr</title>
        <published>2025-02-11T00:00:00+00:00</published>
        <updated>2025-02-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/code/rsync-incr/"/>
        <id>https://colas.nahaboo.net/code/rsync-incr/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/code/rsync-incr/">&lt;h2 id=&quot;what-is-rsync-incr&quot;&gt;What is rsync-incr&lt;a class=&quot;zola-anchor&quot; href=&quot;#what-is-rsync-incr&quot; aria-label=&quot;Anchor link for: what-is-rsync-incr&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;rsync-incr&lt;&#x2F;strong&gt; is a linux wrapper shell (bash) script around
&lt;a href=&#x27;https:&#x2F;&#x2F;github.com&#x2F;RsyncProject&#x2F;rsync&#x27; title=&#x27;rsync website&#x27;&gt;rsync&lt;&#x2F;a&gt; to perform automated, unattended, incremental, disk
to disk backups, automatically removing old backups to make room for new
ones. It produces standard mirror copies browsable and restorable
without specific tools.I have been using it in production daily at work
and at home since 2004.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;goals&quot;&gt;Goals&lt;a class=&quot;zola-anchor&quot; href=&quot;#goals&quot; aria-label=&quot;Anchor link for: goals&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;I wanted to have a backup system with the following properties:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;standard&lt;&#x2F;strong&gt; based on standard tools (rsync), and restorable with only
standard tools.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;simple&lt;&#x2F;strong&gt; as possible.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;automatable&lt;&#x2F;strong&gt; to be run daily (or more) by crontab, managing error
conditions reliably so we can mail on errors, and making automatically
room for new backups.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;user-manual&quot;&gt;User Manual&lt;a class=&quot;zola-anchor&quot; href=&quot;#user-manual&quot; aria-label=&quot;Anchor link for: user-manual&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;code&gt;rsync-incr [options] N sourcedir destdir&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;rsync-incr will create &lt;code&gt;destdir&lt;&#x2F;code&gt; as a perfect mirror, and save in
&lt;code&gt;destdir.past&lt;&#x2F;code&gt; a directory per run with copies of changed files old
versions. These &lt;code&gt;N&lt;&#x2F;code&gt; (at most) directories of old versions of changed
files are named by their dates in the form
&lt;code&gt;destdir.past&#x2F;YYYY-MM-DD.HHhMN-SIZEm&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;e.g: &lt;code&gt;for rsync-incr 10 &#x2F;home &#x2F;backups&#x2F;home&lt;&#x2F;code&gt; &lt;br&gt;
&lt;code&gt;&#x2F;backups&#x2F;home.past&#x2F;2005-01-24.04h23-122m&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Date of last backup is in the contents of file &lt;code&gt;destdir.past&#x2F;LAST_DATE&lt;&#x2F;code&gt;.
No need to append a trailing &#x2F; to source and destination. &lt;br&gt;
&lt;code&gt;Dest&lt;&#x2F;code&gt; must be on the local machine (maybe NFS-mounted), &lt;code&gt;sourcedir&lt;&#x2F;code&gt; can
be on a remote machine via the ssh syntax &lt;code&gt;host:dir&lt;&#x2F;code&gt;.&lt;br&gt; &lt;code&gt;SIZE&lt;&#x2F;code&gt; in
name is the disk space taken that this backup, in megabytes, before an
optional compression via &lt;code&gt;--cbf&lt;&#x2F;code&gt;, to help you find the good value of &lt;code&gt;N&lt;&#x2F;code&gt;
m (e.g: the max of past SIZEs), as this size is hard to find in &lt;code&gt;--snap&lt;&#x2F;code&gt;
mode SIZE is rounded to upper bound: 0m means 0 bytes, 2m less than 2m&lt;&#x2F;p&gt;
&lt;p&gt;This a simple script, making backups usables by standard rsync (no need
for a dedicated restore script). It has 2 basic modes of operation:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;default&lt;&#x2F;strong&gt;: make a perfect copy, of all hard links, devices, sparse
files, and just stores in dirs the previous versions of only the
changed files. This makes it easy to find the different states a files
went through, but make it harder to get a perfect snapshot of what was
the full state N days before. E.g, if a directory contains files A and
B, and B is modified today, yesterday backup will contain only
yesterday version of B, and today will contain current versions of A
and B.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;--snap&lt;&#x2F;strong&gt;: makes full snapshots of what the source was like at backup
times as described in &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;www.mikerubel.org&#x2F;computers&#x2F;rsync_snapshots&quot;&gt;Mike Rubel&#x27;s article&lt;&#x2F;a&gt; It is
easier to get to full snapshots of previous states, and should run
faster than the default. E.g, if a directory contains files A and B,
and B is modified today, both yesterday and today backups will contain
A and B, but A will be the same file (hard links to the same inode),
and the Bs will be two different fles.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;If N has &quot;m&quot; appended (2m, 34m, ..) old versions are removed before
backup until we have at least N megabytes free on dest, and the max of
space taken by previous backups (+ 10%, see &lt;code&gt;--pbsm&lt;&#x2F;code&gt;). Otherwise, just
keep the last N backups.&lt;&#x2F;p&gt;
&lt;p&gt;Options are passed to rsync, but must be a single word parts (e.g: use
&lt;code&gt;--rsh=ssh&lt;&#x2F;code&gt;, not &lt;code&gt;-e ssh&lt;&#x2F;code&gt;)&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;e.g:
&lt;code&gt;rsync-incr -z --bwlimit=12 --rsh=ssh server:&#x2F;home&#x2F;me &#x2F;backups&#x2F;me&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;(this will create an perfect backup in &lt;code&gt;&#x2F;backups&#x2F;me&lt;&#x2F;code&gt; and a series of
previous versions as dirs like
&lt;code&gt;&#x2F;backups&#x2F;me.past&#x2F;2004-10-26.04:40:20-234&lt;&#x2F;code&gt; ...) rsync-incr uses &lt;code&gt;rsync&lt;&#x2F;code&gt;
with options: &lt;code&gt;-HSax --delete --force&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Special non-rsync options:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;--nohl&lt;&#x2F;strong&gt; do not use the -H &#x2F; --hard-links option (do not preserve
hard links), faster if you do not need to preserve hard links.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;--cbf&lt;&#x2F;strong&gt; compresses (gzip -r) all backuped files (will not compress
files with hard links)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;--snap&lt;&#x2F;strong&gt; old backups are full snapshots of previous stats, as in
&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;www.mikerubel.org&#x2F;computers&#x2F;rsync_snapshots&#x2F;#Incremental&quot;&gt;Mike Rubel&#x27;s article&lt;&#x2F;a&gt;
but this do not preserve hard links&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;--grem&lt;&#x2F;strong&gt; global remove: will remove oldest backups globally on the
filesystem (otherwise space-making on a small backup could wipe out
all backups in order to desperately make room, not noticing that
removing a single old backup of a bigger backup could do the job).
&lt;br&gt; You should place a list (one per line) of all the absolute
paths of &lt;code&gt;LAST_DATE&lt;&#x2F;code&gt; files on the system in the env variable
&lt;code&gt;RSYNCINCR_LASTDATES&lt;&#x2F;code&gt;, for instance by a statement:
&lt;ul&gt;
&lt;li&gt;export RSYNCINCR_LASTDATES&lt;code&gt;`locate =LAST_DATE`&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;otherwise a global find will be used, which can be very &lt;strong&gt;slow&lt;&#x2F;strong&gt;. It
will only remove backups on same filesystem as destdir, so you can list
all LAST_DATE paths on all disks. For instance if all the backups are
organized as &lt;code&gt;&#x2F;backups&#x2F;host&#x2F;partition&lt;&#x2F;code&gt;, the following should be included
at the start of backup scripts to decrease startup time: &lt;br&gt;
&lt;code&gt;RSYNCINCR_LASTDATES=`ls -1 &#x2F;backups&#x2F;*&#x2F;*.past&#x2F;LAST_DATE`&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;--pbsm=P&lt;&#x2F;strong&gt; Previous Backups Space Margin: reserve space before
backup for at least the max size of previous backups + P% (P default
to 10). If P ends with &quot;m&quot; (like 7m) it is taken as P megabytes to add
rather as a percentage.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;--inodes=N&lt;&#x2F;strong&gt; ensures we have at least N percent of inodes free, and
make room if not. Useful for backuping directories with huge number of
small files.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;--clean&lt;&#x2F;strong&gt; Just make enough room for the backups, but do not actually
perform the backups&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;--cross-devs&lt;&#x2F;strong&gt; allows to backup directories spanning multiples
volumes, mounted on subdirectories. Otherwise rsync-incr uses the -x
option of rsync.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;To restore a backup, use standard rsync (trailing slashes are
IMPORTANT):&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;rsync -HSax --delete --force *backup* &#x2F; *original* &#x2F;&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Rsync errors are propagated (the script exits with rsync exit status),
except for the error #24 which is trapped, as this error can happen on
backups of live systems (being modified while backuped)&lt;&#x2F;p&gt;
&lt;h2 id=&quot;download&quot;&gt;Download&lt;a class=&quot;zola-anchor&quot; href=&quot;#download&quot; aria-label=&quot;Anchor link for: download&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;From github: &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ColasNahaboo&#x2F;rsync-incr&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;ColasNahaboo&#x2F;rsync-incr&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;installation&quot;&gt;Installation&lt;a class=&quot;zola-anchor&quot; href=&quot;#installation&quot; aria-label=&quot;Anchor link for: installation&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Just copy the &lt;code&gt;rsync-incr&lt;&#x2F;code&gt; shell script anywherein your PATH, e.g:
&lt;code&gt;&#x2F;usr&#x2F;local&#x2F;bin&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;implementation&quot;&gt;Implementation&lt;a class=&quot;zola-anchor&quot; href=&quot;#implementation&quot; aria-label=&quot;Anchor link for: implementation&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;A 120 lines of shell script (excluding the embedded doc)&lt;&#x2F;p&gt;
&lt;h3 id=&quot;license&quot;&gt;License&lt;a class=&quot;zola-anchor&quot; href=&quot;#license&quot; aria-label=&quot;Anchor link for: license&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Pure Open source: &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.gnu.org&#x2F;copyleft&#x2F;gpl.html&quot;&gt;GPL&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;more-details&quot;&gt;More details&lt;a class=&quot;zola-anchor&quot; href=&quot;#more-details&quot; aria-label=&quot;Anchor link for: more-details&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;See also what inspired me:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;RsyncProject&#x2F;rsync&quot;&gt;Rsync&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;www.mikerubel.org&#x2F;computers&#x2F;rsync_snapshots&quot;&gt;Mike rubel seminal article&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;web.archive.org&#x2F;web&#x2F;20170208161849&#x2F;https:&#x2F;&#x2F;www.perusion.com&#x2F;misc&#x2F;Snapback2&#x2F;snapback2.html&quot;&gt;snapback&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;hacks.oreilly.com&#x2F;pub&#x2F;h&#x2F;42&quot;&gt;O&#x27;Reilly hacks&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;new-versions-announcements&quot;&gt;New versions announcements&lt;a class=&quot;zola-anchor&quot; href=&quot;#new-versions-announcements&quot; aria-label=&quot;Anchor link for: new-versions-announcements&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Since 2025, releases are annonced on the Github site, at:
&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ColasNahaboo&#x2F;rsync-incr&#x2F;releases&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;ColasNahaboo&#x2F;rsync-incr&#x2F;releases&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;This documentation pages are going to migrate to Github too.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;examples-of-use&quot;&gt;Examples of use&lt;a class=&quot;zola-anchor&quot; href=&quot;#examples-of-use&quot; aria-label=&quot;Anchor link for: examples-of-use&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;See a &lt;a href=&quot;&#x2F;code&#x2F;detailed-example-of-rsync-incr-operation&quot;&gt;detailed example of what rsync-incr does&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Also, here are (modified for privacy) real scripts I use daily:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ColasNahaboo&#x2F;rsync-incr&#x2F;blob&#x2F;main&#x2F;backup-script1.txt&quot;&gt;Example1&lt;&#x2F;a&gt; a script run
daily on the host backserv to archive incrementally various machine
partitions and mailing in case of errors at $email&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ColasNahaboo&#x2F;rsync-incr&#x2F;blob&#x2F;main&#x2F;backup-script2.txt&quot;&gt;Example2&lt;&#x2F;a&gt; this script is
auto-run on start of the backup server: it connects to the main server
(named &quot;m&quot;), backups, and halts the backup server It does it in 2
paralled processes impacting disks on different controllers for added
speed. Only m root partition is done incrementally&lt;&#x2F;li&gt;
&lt;li&gt;To connect to sites that use a non-standard port for ssh, let&#x27;s say
&lt;code&gt;26&lt;&#x2F;code&gt; the trick is to create a shell script, for instance named
&lt;code&gt;ssh-p26&lt;&#x2F;code&gt;, containing the line: &lt;code&gt;exec ssh -p 26 &quot;$@&quot;&lt;&#x2F;code&gt; and call
rsync-incr with the option &lt;code&gt;--rsh=ssh-p26&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;other-backup-systems&quot;&gt;Other backup systems&lt;a class=&quot;zola-anchor&quot; href=&quot;#other-backup-systems&quot; aria-label=&quot;Anchor link for: other-backup-systems&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Rsync-incr is not the only open source smart and simple backup system.
It is I think unique in its automated claculation of free space and
smart removal of old backups to make room for new ones. But other ones,
can be more relevant to your needs, for instance:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rdiff-backup.nongnu.org&#x2F;features.html&quot;&gt;rdiff-backup&lt;&#x2F;a&gt; that only
stores differences in files. For instance for big log files,
rsync-incr will archive a full copy of the log (although it would have
transferred on the network only the changed lines), whereas
rdiff-backup will only store the actual added lines and is much more
space-efficient backup-side. However, you do not get the easy
browsing, access and comparison on backups that rsync-incr offers&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.dirvish.org&#x2F;&quot;&gt;dirvish&lt;&#x2F;a&gt; nice fast backup, but do not
automate expiration of backups&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rsnapshot.org&#x2F;&quot;&gt;rsnapshot&lt;&#x2F;a&gt;
is more powerful and integrated, in perl having features that
rsync-incr leave to a wrapper script&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;history&quot;&gt;History&lt;a class=&quot;zola-anchor&quot; href=&quot;#history&quot; aria-label=&quot;Anchor link for: history&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;v1.9&lt;&#x2F;strong&gt; 2017-06-13 faster method to remove directories with huge
number of files. new option --inodes=N&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;v1.8&lt;&#x2F;strong&gt; 2011-07-11 fix for working across mounted partitions with new
option --cross-devs, rsh support dropped, only use ssh now&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;v1.7&lt;&#x2F;strong&gt; 2009-01-01, bug fix: could fail if was restarted on the same
dirs in the same minute &lt;br&gt; 2009-01-05 this documentation
updated: the &lt;code&gt;--no&lt;&#x2F;code&gt; option is in fact &lt;code&gt;--clean&lt;&#x2F;code&gt;. Code is inchanged, no
need to re-download. &lt;br&gt; new &lt;a href=&quot;&#x2F;code&#x2F;detailed-example-of-rsync-incr-operation&quot;&gt;subpage&lt;&#x2F;a&gt;
to give a detailed example&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;v1.6&lt;&#x2F;strong&gt; 2008-12-19, works with destdir on NFS now (before was not
removing old backups due to free space calculations not working on
NFS), &lt;br&gt; new &lt;code&gt;--no&lt;&#x2F;code&gt; option.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;v1.5&lt;&#x2F;strong&gt; 2008-10-12, nothing changed, only packaging doc, and web page
moved here. No need to upgrade&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;v1.4&lt;&#x2F;strong&gt; 2007-02-26, bug fix by Jeremy Lingmann: on system with long
device names wrapping enabled, rsync-incr was unable to compute free
space. We now use df -P to fix this. This is the only change, upgrade
recommended.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;v1.3&lt;&#x2F;strong&gt; 2006-08-08, bug fix: rsync options with metacharacters were
not working (e.g the * in: --exclude=&#x27;&#x2F;tmp&#x2F;*&#x27;)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;v1.2&lt;&#x2F;strong&gt; 2006-06-21, bug fix by Jiri Voves: --pbsm option worked only
for sizes given in megabytes (with appended &quot;m&quot;)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;v1.1&lt;&#x2F;strong&gt; 2005-03-25, bug fix: in some cases some old backups were not
deleted. if day of month started with 0.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;v1.0&lt;&#x2F;strong&gt; 2005-02-19, first public release&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;v0.9&lt;&#x2F;strong&gt; 2004-12-15, internal beta test&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;comments&quot;&gt;Comments&lt;a class=&quot;zola-anchor&quot; href=&quot;#comments&quot; aria-label=&quot;Anchor link for: comments&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Mon compte Facebook a changé (piraté)</title>
        <published>2024-10-24T00:00:00+00:00</published>
        <updated>2024-10-24T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/blog/my-facebook-account-has-changed-hacked-fr/"/>
        <id>https://colas.nahaboo.net/blog/my-facebook-account-has-changed-hacked-fr/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/blog/my-facebook-account-has-changed-hacked-fr/">&lt;p&gt;Attention : le 2024-10-24, mon compte Facebook a été piraté. Hélas, Facebook ne m&#x27;a pas permis de récupérer mon compte, ni même de le signaler, et j&#x27;ai donc dû en créer un nouveau.&lt;&#x2F;p&gt;
&lt;p&gt;Je vous prie donc de ne plus utiliser mon ancien compte ( https:&#x2F;&#x2F;www.facebook.com&#x2F;colas.nahaboo ) et de le bloquer sur Facebook pour être sûr, car les pirates vont l&#x27;utiliser pour pirater et hameçonner d&#x27;autres personnes, et d&#x27;utiliser mon nouveau compte: https:&#x2F;&#x2F;www.facebook.com&#x2F;profile.php?id=61567836084230.&lt;&#x2F;p&gt;
&lt;p&gt;J&#x27;ai changé ma photo de profil (sur Facebook uniquement pour l&#x27;instant) pour différencier les deux comptes :&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;blog&#x2F;my-facebook-account-has-changed-hacked&#x2F;Avatars-old-new.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My Facebook account has changed (hacked)</title>
        <published>2024-10-24T00:00:00+00:00</published>
        <updated>2024-10-24T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/blog/my-facebook-account-has-changed-hacked/"/>
        <id>https://colas.nahaboo.net/blog/my-facebook-account-has-changed-hacked/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/blog/my-facebook-account-has-changed-hacked/">&lt;p&gt;Warning: on 2024-10-24, my Facebook account was hacked. Alas, Facebook did not allow me to get back my account, or even report it, so I had to create a new one.&lt;&#x2F;p&gt;
&lt;p&gt;So please never use my old account anymore ( https:&#x2F;&#x2F;www.facebook.com&#x2F;colas.nahaboo ) and block it under Facebook to be safe, as hackers are going to use it to hack and phish others, and use my new account: https:&#x2F;&#x2F;www.facebook.com&#x2F;profile.php?id=61567836084230&lt;&#x2F;p&gt;
&lt;p&gt;I changed my profile picture (on Facebook only for now) to differentiate the two accounts:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;colas.nahaboo.net&#x2F;blog&#x2F;my-facebook-account-has-changed-hacked&#x2F;Avatars-old-new.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Suntimes, a small shell utility</title>
        <published>2022-03-03T00:00:00+00:00</published>
        <updated>2022-03-03T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/code/suntimes-a-small-shell-utility/"/>
        <id>https://colas.nahaboo.net/code/suntimes-a-small-shell-utility/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/code/suntimes-a-small-shell-utility/">&lt;p&gt;I just made a small command-line utility to display the sunrise and sunset times at a location. It can be quite useful in shell scripts.&lt;&#x2F;p&gt;
&lt;p&gt;It is a minimal Go wrapper around the &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;nathan-osman&#x2F;go-sunrise&quot;&gt;nathan-osman&#x2F;go-sunrise library&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;You can find it at my repository: &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ColasNahaboo&#x2F;suntimes&quot;&gt;GitHub - ColasNahaboo&#x2F;suntimes&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>One year retired</title>
        <published>2022-02-24T00:00:00+00:00</published>
        <updated>2022-02-24T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/blog/one-year-retired/"/>
        <id>https://colas.nahaboo.net/blog/one-year-retired/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/blog/one-year-retired/">&lt;p&gt;I have been retired for one year now, and what happened? Well...&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;I basically stopped coding and reading about anything computer-related for eight months. I didn&#x27;t expect it, I was thinking I would start coding at once, going through my huge todo list of various projects.&lt;&#x2F;li&gt;
&lt;li&gt;I enjoyed being able to go SUP surfing at will, but I ended up actually less on the water than before, simply because i didn&#x27;t feel pressured into going on the water if the conditions were not enjoyable: I have now all the time in the world, I can wait for better conditions.&lt;&#x2F;li&gt;
&lt;li&gt;I started what I should have done years ago: Stretching at least 30 minutes daily, and warming up a full 10 minutes before going surfing. Work and play for me were mainly sitting in front of a computer, and I had become awfully stiff. I will detail my routine in later posts, it is worth it.&lt;&#x2F;li&gt;
&lt;li&gt;I dived deep in modern physics: astrophysics, cosmology and quantum mechanics. This also will warrant a full separate post.&lt;&#x2F;li&gt;
&lt;li&gt;I started re-coding in the last four months:
&lt;ul&gt;
&lt;li&gt;The first month I began working on various bits of code (shell scripts), progressively getting back to speed, and also deciding to learn the language Go. I was looking for a very longtime for an efficient language to replace lisp or C as compliment to scripting (I never liked Java), and was hesitating between Rust and Go. A discussion with &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.arsac.org&#x2F;olivier&#x2F;&quot;&gt;Olivier Arsac&lt;&#x2F;a&gt; convinced me to try Go.&lt;&#x2F;li&gt;
&lt;li&gt;I switched to git (I was using mercurial) for version control, and &lt;a href=&quot;&#x2F;code&#x2F;moving-to-github&#x2F;&quot;&gt;moved&lt;&#x2F;a&gt; my publicly available source codes from my personal web site to my &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ColasNahaboo&quot;&gt;GitHub&lt;&#x2F;a&gt;. It may sound ridiculous, but at now 61, setting things up so they do not disappear when I do is becoming an important consideration. I will thus progressively stop using self-hosted sites to publish on places that will survive me, as nobody in my family is tech-savvy enough to maintain a web site.&lt;&#x2F;li&gt;
&lt;li&gt;Then in December I stumbled upon the &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;adventofcode.com&#x2F;&quot;&gt;Advent of Code&lt;&#x2F;a&gt; challenge that I decided to do in bash for the challenge, and it was unexpectedly productive? I learned more in these 25 puzzles than in my last 10 years of professional bash scripting. You can see my solutions in my post &lt;a href=&quot;&#x2F;code&#x2F;bash-lessons-learned-with-aoc-2021&quot;&gt;Bash lessons learned with AoC 2021&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Thus, after finishing the Go tutorial, I decided to do the previous AoC years in Go. And I just &lt;a href=&quot;&#x2F;code&#x2F;completed-the-2015-advent-of-code-challenge-in-go&quot;&gt;finished the AoC 2015 in Go&lt;&#x2F;a&gt;. This definitively made me a Go enthusiast, I realized that the designers of Go had exactly the same opinion of what should be a general programming language: They worshiped readability, simplicity, performance and maintainability while hating inheritance and the feature creep of most modern languages.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;That was my first year. And now, embarking for the next one!&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Completed the 2015 Advent of Code challenge in GO</title>
        <published>2022-02-24T00:00:00+00:00</published>
        <updated>2022-02-24T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/code/completed-the-2015-advent-of-code-challenge-in-go/"/>
        <id>https://colas.nahaboo.net/code/completed-the-2015-advent-of-code-challenge-in-go/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/code/completed-the-2015-advent-of-code-challenge-in-go/">&lt;p&gt;And I completed the 2015 challenge! (see my &lt;a href=&quot;&#x2F;code&#x2F;starting-the-2015-advent-of-code-challenge-in-go&quot;&gt;previous post&lt;&#x2F;a&gt;). You can read my notes on it on my  &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ColasNahaboo&#x2F;advent-of-code-my-solutions&#x2F;tree&#x2F;main&#x2F;go&#x2F;2015&quot;&gt;GitHub&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;This was quite interesting, and I thing a great way to learn a language just after completing its tutorial, as this challenge as a feel of &quot;real life&quot; situations, and allow for a variety of solutions, so that you can put different approaches to the test.&lt;&#x2F;p&gt;
&lt;p&gt;I forced myself to not look at the solutions available on the net, except for two cases:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Using working code to generate more data to test against (random inputs + expected result number). I just ran the code of other solutions, without reading their source. I often used  solutions by &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;devjobe&#x2F;advent-of-code-2015-golang&quot;&gt;devjobe&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;schwern&#x2F;adventofcode.go&quot;&gt;schwern&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Once I had a working solution, browsing the source code of other solutions to compare with mine and see where I could improve, and discover cool tricks. I mostly used the &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;adventofcode&#x2F;wiki&#x2F;solution_megathreads&#x2F;#wiki_december_2015&quot;&gt;reddit megathread&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I also tried to use only the standard Go packages, and not the ones available on the web. I am sure I will end up using 3rd party packages to replace the standard ones (the &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pkg.go.dev&#x2F;flag&quot;&gt;flag package &lt;&#x2F;a&gt;  to parse options for instance is really too primitive). And I also didn&#x27;t create a separate module or package for my library of common useful functions. I will surely do it in the future, but I feel I should have more experience first.&lt;&#x2F;p&gt;
&lt;p&gt;Anyways, it has confirmed that Go was the language I have been waiting for all these years. On the one hand, I have a bit of regret not having jumped on it sooner, but on the other hand it was easier to just wait for my retirement (one year ago) to free myself from any work politics and constraints to be able to fully explore the programming language landscape with no strings attached.&lt;&#x2F;p&gt;
&lt;p&gt;I can see myself using 4 languages in the future:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;bash&lt;&#x2F;strong&gt; for any &quot;glue&quot; tooling and scripts.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;go&lt;&#x2F;strong&gt; for my main do-it-all language, and web backend.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;javascript&lt;&#x2F;strong&gt; (and&#x2F;or WebAssembly) for my web frontend, with pure modern HTML and CSS, but no framework, à la  &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;vanilla-js.com&#x2F;&quot;&gt;Vanilla JS&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;and maybe a higher performance, specialized language, if I encounter such needs: E.g: &lt;strong&gt;zig&lt;&#x2F;strong&gt; as a replacement of C for tasks where Go could be unsuited (if I encounter any), or &lt;strong&gt;julia&lt;&#x2F;strong&gt; for math-specific things, etc...&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Edit: I see that Neil Henning also enjoyed discovering a new language via AoC: &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.duskborn.com&#x2F;posts&#x2F;2021-aoc-zig&#x2F;&quot;&gt;A Review of the Zig Programming Language (using Advent of Code 2021)&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Starting the 2015 Advent of Code challenge in GO</title>
        <published>2022-02-09T00:00:00+00:00</published>
        <updated>2022-02-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/code/starting-the-2015-advent-of-code-challenge-in-go/"/>
        <id>https://colas.nahaboo.net/code/starting-the-2015-advent-of-code-challenge-in-go/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/code/starting-the-2015-advent-of-code-challenge-in-go/">&lt;p&gt;I discovered the &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;adventofcode.com&#x2F;&quot;&gt;advent of code&lt;&#x2F;a&gt; in 2021, and did it in &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ColasNahaboo&#x2F;advent-of-code-my-solutions&#x2F;tree&#x2F;main&#x2F;bash&quot;&gt;bash&lt;&#x2F;a&gt; for the challenge. But since I started learning GO, I decided to code the previous AoC years in GO as a mean to practice it. So, although my bash code can be useful to see some tricks of a seasoned bash programmer, these GO solutions must be considered as &quot;student code&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;So I started coding the 2015 year of AoC in GO, available on my GitHub: &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ColasNahaboo&#x2F;advent-of-code-my-solutions&#x2F;blob&#x2F;main&#x2F;go&#x2F;2015&quot;&gt;advent-of-code-my-solutions&#x2F;go&#x2F;2015&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The code is in GO, with some housekeeping scripts in bash.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My bash library on Github</title>
        <published>2022-02-05T00:00:00+00:00</published>
        <updated>2022-02-05T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/code/my-bash-library-on-github/"/>
        <id>https://colas.nahaboo.net/code/my-bash-library-on-github/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/code/my-bash-library-on-github/">&lt;p&gt;I have started to publish on Github, at &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ColasNahaboo&#x2F;colas-bash-lib&quot;&gt;colas-bash-lib&lt;&#x2F;a&gt;, my collection of various &lt;strong&gt;bash functions&lt;&#x2F;strong&gt; I reuse often in my bash scripts.&lt;&#x2F;p&gt;
&lt;p&gt;Fell free to copy and use in any of your projects or compilation of bash tools.&lt;&#x2F;p&gt;
&lt;p&gt;I have tried to make them the &lt;strong&gt;fastest&lt;&#x2F;strong&gt; possible, by avoiding forking sub-shells or external commands, and
benchmarking extensively to compare the possible way of coding them. Of course, I will gladly accept suggestions or code to make them faster.
But it means that error checking is often terse and minimal, and readability of the code was not a priority.&lt;&#x2F;p&gt;
&lt;p&gt;I have a kind of «anti-npm» approach, in that I &lt;strong&gt;copy&lt;&#x2F;strong&gt; these functions into my scripts rather that using hem as a true external library that I would load at runtime. It thus avoid installation issues, and the ependency problems that may arise from automated upgrades.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Bash lessons learned with AoC 2021</title>
        <published>2022-01-11T00:00:00+00:00</published>
        <updated>2022-01-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/code/bash-lessons-learned-with-aoc-2021/"/>
        <id>https://colas.nahaboo.net/code/bash-lessons-learned-with-aoc-2021/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/code/bash-lessons-learned-with-aoc-2021/">&lt;p&gt;I completed all the exercises of the Advent of Code 2021 in bash! (see &lt;a href=&quot;&#x2F;code&#x2F;advent-of-code-2021&quot;&gt;my previous post&lt;&#x2F;a&gt;)&lt;&#x2F;p&gt;
&lt;p&gt;You can find my solutions with comments in my GitHub repository at https:&#x2F;&#x2F;github.com&#x2F;ColasNahaboo&#x2F;advent-of-code-my-solutions&#x2F;tree&#x2F;main&#x2F;bash&#x2F;2021&lt;&#x2F;p&gt;
&lt;p&gt;I must say I &quot;cheated&quot; a bit. My  solution for the Day 24 was too slow in bash, and as I was a bit out of  steam, I did not try to find a smart algorithm. I just noticed that I  solved it by building a bash arithmetic expression (of 1 million  characters...) that I then evaluated in bash, and since its syntax was  exactly the one for C... I just made the bash script compile the bash  expression in C and execute it, using the C compiler as a bash  arithmetic just-in-time compiler :-)&lt;&#x2F;p&gt;
&lt;p&gt;I just discovered AoC this year, and I am impressed. Challenging, fun,  and a great way to progress. I am going to do the previous years, too,  but in &quot;real&quot; languages this time. At least ones with data structures... I will start with Go.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-i-learned&quot;&gt;What I learned:&lt;a class=&quot;zola-anchor&quot; href=&quot;#what-i-learned&quot; aria-label=&quot;Anchor link for: what-i-learned&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Coding in bash is not so bad, even if it can border on insanity at times :-).&lt;&#x2F;li&gt;
&lt;li&gt;Modern bash features are often overlooked but very useful.&lt;&#x2F;li&gt;
&lt;li&gt;Passing shellcheck should be a mandatory goal for each bash programmer. I resented it at first since I thought it was adding unecessary syntaxic sugar to my code until I realized that it was a symptom that my coding style was the problem.&lt;&#x2F;li&gt;
&lt;li&gt;Use &lt;code&gt;[[...]]&lt;&#x2F;code&gt; for strings and &lt;code&gt;((...))&lt;&#x2F;code&gt; for integers other any of the legacy constructs like &lt;code&gt;[...]&lt;&#x2F;code&gt;, &lt;code&gt;test&lt;&#x2F;code&gt;, etc... The code is then much cleaner and safer (and a tad faster), as you do not have to quote as much. E.g: &lt;code&gt;[[ -z foo ]]&lt;&#x2F;code&gt; instead of &lt;code&gt;[ -z &quot;$foo&quot; ]&lt;&#x2F;code&gt;, or even &lt;code&gt;((i=j))&lt;&#x2F;code&gt; instead of &lt;code&gt;i=&quot;$j&quot;&lt;&#x2F;code&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;but&lt;&#x2F;strong&gt;, this makes traditional debugging with &lt;code&gt;set -x&lt;&#x2F;code&gt; less useful as the values of variables are not displayed anymore. E.g if j is 2, the tracing of &lt;code&gt;i=&quot;$j&quot;&lt;&#x2F;code&gt; shows &lt;code&gt;i=2&lt;&#x2F;code&gt; whereas the tracing of &lt;code&gt;((i=j))&lt;&#x2F;code&gt; only shows &lt;code&gt;((i=j))&lt;&#x2F;code&gt;. This could be where a bash debugger would be useful, but I know only one, &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bashdb.sourceforge.net&#x2F;bashdb.html&quot;&gt;bashdb&lt;&#x2F;a&gt;, and it does not seem updated anymore, and I could not find a version working with bash 5.1. The &lt;code&gt;trap DEBUG&lt;&#x2F;code&gt; trick can be useful, though.&lt;&#x2F;li&gt;
&lt;li&gt;So, I tend to write now &lt;code&gt;i=$((j+k))&lt;&#x2F;code&gt; while developing code, and maybe later for production switch to the a bit more efficient &lt;code&gt;((i = j+k))&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;I avoided arrays in bash because I found out they were abysmally slow when first introduced, to the point that managing data in files with grep, sed, ... was actually faster than using arrays. But not anymore! Bash arrays should now be used as much as possible.&lt;&#x2F;li&gt;
&lt;li&gt;A lot of bash functions can &quot;map&quot; on arrays. For instance &lt;code&gt;${tab[@]&#x2F;&#x2F;x&#x2F;y}&lt;&#x2F;code&gt; will string-replace x by y in all the elements of the array tab, and is super fast.&lt;&#x2F;li&gt;
&lt;li&gt;Use arrays rather than the classic way to represent lists in bash by space-separated (or tab-separated) substrings in a  string.&lt;&#x2F;li&gt;
&lt;li&gt;Bash can have typed variables: integer ones via &lt;code&gt;declare -i&lt;&#x2F;code&gt; or &lt;code&gt;local -i&lt;&#x2F;code&gt;, and using them makes your code safer.&lt;&#x2F;li&gt;
&lt;li&gt;Bash functions can be passed variables by name, useful for efficiency to avoid copying big arrays or strings, and to provide multiple return values by modifying passed variables. But it cannot recurse as it is not a passing by reference, but by name.&lt;&#x2F;li&gt;
&lt;li&gt;Working with arrays makes using &lt;code&gt;$(...)&lt;&#x2F;code&gt; impractical, as commands are executed in a subshell and cannot access arrays anymore to update them in the parent shell. So I tend to pass the return value(s) into global variables of the same name of a function. E.g. instead of &lt;code&gt;x=$(foo)&lt;&#x2F;code&gt;, I write &lt;code&gt;foo; x=&quot;$foo&quot;&lt;&#x2F;code&gt;. Or pass variables by name to set them if I want to return multiple results.&lt;&#x2F;li&gt;
&lt;li&gt;To parse a space-separated string, the fastest is using &lt;code&gt;set&lt;&#x2F;code&gt; to map the elements in the positional parameters &lt;code&gt;$1&lt;&#x2F;code&gt;, &lt;code&gt;$2&lt;&#x2F;code&gt;, ... then the &lt;code&gt;${string#* }&lt;&#x2F;code&gt; and &lt;code&gt;${string% *}&lt;&#x2F;code&gt; operators are the fastest, closely followed by a read, the full &lt;code&gt;[[ $string =~ ([-[:digit:]]+)[[:space:]]... ]]&lt;&#x2F;code&gt; being 3 times slower. And if possible, using indexes is even faster: &lt;code&gt;${string:i:j}&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Use the faster &lt;code&gt;$(&amp;lt; filename)&lt;&#x2F;code&gt; instead of &lt;code&gt;$(cat filename)&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;To copy an associative array A1 to A2 in bash 4.4+, do:
&lt;code&gt;A1_def=$(declare -p A1) &amp;amp;&amp;amp; declare -A A2=&quot;${A1_def#*=}&quot;&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;To access more than 9 parameters in a function: use braces: &lt;code&gt;$10&lt;&#x2F;code&gt; wont work, but &lt;code&gt;${10}&lt;&#x2F;code&gt; does.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Moving to Github</title>
        <published>2021-12-10T00:00:00+00:00</published>
        <updated>2021-12-10T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/code/moving-to-github/"/>
        <id>https://colas.nahaboo.net/code/moving-to-github/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/code/moving-to-github/">&lt;p&gt;&lt;strong&gt;Warning:&lt;&#x2F;strong&gt; I will move all the sources I maintained on my own &lt;strong&gt;mercurial&lt;&#x2F;strong&gt; web instance in &lt;code&gt;hg.colas.nahaboo.net&lt;&#x2F;code&gt;  to my GitHub repositories: https:&#x2F;&#x2F;github.com&#x2F;ColasNahaboo&#x2F;&lt;&#x2F;p&gt;
&lt;p&gt;I have thus redirected the non-functional &lt;code&gt;hg.colas.nahaboo.net&lt;&#x2F;code&gt; to this page.&lt;&#x2F;p&gt;
&lt;p&gt;The move will be gradual, I started with &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ColasNahaboo&#x2F;rsync-incr&quot;&gt;rsync-incr&lt;&#x2F;a&gt;, and I hope to have finished before the end of 2021. Please ask me is you do not see yet your favorite source there.&lt;&#x2F;p&gt;
&lt;p&gt;The reason is that Debian has phased out most of what the web tools for mercurial rely on (python2, wsgi, ...), and thus my web hg repository was broken. And since I wanted anyways to move it to GitHub, it is not worth repairing it.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;how-to-move-mercurial-hg-directories-to-github&quot;&gt;How to move mercurial (hg) directories to GitHub&lt;a class=&quot;zola-anchor&quot; href=&quot;#how-to-move-mercurial-hg-directories-to-github&quot; aria-label=&quot;Anchor link for: how-to-move-mercurial-hg-directories-to-github&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;As my hg repositories were very simple (no branches, I tend to use cloned repos than branches), what I do to migrate a repository &lt;code&gt;foo&lt;&#x2F;code&gt; to github:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;I used &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;repo.or.cz&#x2F;fast-export.git&quot;&gt;hg-fast-export&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;I converted the hg repo of &lt;code&gt;foo&lt;&#x2F;code&gt; to a local git repository of the same name, with the main hg branch mapped to github default &lt;code&gt;main&lt;&#x2F;code&gt; instead of the script default of &lt;code&gt;master&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;I created an &lt;strong&gt;empty&lt;&#x2F;strong&gt; repository &lt;code&gt;foo&lt;&#x2F;code&gt; on github (no files such as README.md, LICENSE, ...)&lt;&#x2F;li&gt;
&lt;li&gt;I added it as origin to my local git repo&lt;&#x2F;li&gt;
&lt;li&gt;I deleted my hg repo, and git-pushed my local git repo (which became my working repo) to github. Plus I redirected the old hgweb repo urls to the new github repo adress.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I.e. as actual bash commands:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #4C4F69; background-color: #EFF1F5;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;repo=foo                        # the name of the repo to convert&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;hg=~&#x2F;hg                         # where are my local hg repos&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;git=~&#x2F;git                       # where are my local git repos&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;hfe=&#x2F;opt&#x2F;fast-export            # where is my copy of hg-fast-export.sh&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ghn=ColasNahaboo                # my name on github&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;mkdir $git&#x2F;$repo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;cd $git&#x2F;$repo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;git init&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$hfe&#x2F;hg-fast-export.sh -r &amp;quot;$hg&#x2F;$repo&amp;quot; -M main -n &amp;quot;$git&#x2F;$repo&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;git branch -M main&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;git checkout main&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;git remote add origin git@github.com:$ghn&#x2F;$repo.git&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# Warning: for this last step, the github repo must exist and be empty&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;git push -u origin main&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Advent of Code 2021</title>
        <published>2021-12-07T00:00:00+00:00</published>
        <updated>2021-12-07T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/code/advent-of-code-2021/"/>
        <id>https://colas.nahaboo.net/code/advent-of-code-2021/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/code/advent-of-code-2021/">&lt;p&gt;I just discovered the &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;adventofcode.com&#x2F;&quot;&gt;Advent of code&lt;&#x2F;a&gt; coding challenge. It exists since 2015, and seems really interesting in that it is language-agnostic.&lt;&#x2F;p&gt;
&lt;p&gt;Each day a problem is described, with input files consisting of numeric values for the problem. You must submit the answer which is a number by whatever means you want.&lt;&#x2F;p&gt;
&lt;p&gt;I started to do the current 2021 challenge, in &lt;strong&gt;bash&lt;&#x2F;strong&gt; to force myself to code in a more modern style that pass &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.shellcheck.net&#x2F;&quot;&gt;shellcheck&lt;&#x2F;a&gt;. And later, i will probably do the other years in &lt;strong&gt;Go&lt;&#x2F;strong&gt; to learn it.&lt;&#x2F;p&gt;
&lt;p&gt;I publish my solutions as I code them on &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ColasNahaboo&#x2F;advent-of-code-my-solutions&#x2F;tree&#x2F;main&#x2F;bash&#x2F;2021&quot;&gt;my github&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;More info:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;adventofcode.com&#x2F;&quot;&gt;advent of code&lt;&#x2F;a&gt; (aka AOC) site&lt;&#x2F;li&gt;
&lt;li&gt;The sub-reddit  &lt;a href=&quot;&#x2F;r&#x2F;adventofcode&quot;&gt;&#x2F;r&#x2F;adventofcode&lt;&#x2F;a&gt; to discuss AOC&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Pinboard pricing model</title>
        <published>2021-03-01T00:00:00+00:00</published>
        <updated>2021-03-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/blog/pinboard-pricing-model/"/>
        <id>https://colas.nahaboo.net/blog/pinboard-pricing-model/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/blog/pinboard-pricing-model/">&lt;p&gt;I am a knowledge addict, and always has been. I was reading as many books as possible, and the advent of the web has been a marvelous gift for me. But I soon realized that I needed some tools to manage this knowledge and supplement my memory. It started with pen and papers, then I used a lot the PDAs (Personal Digital Assistants) such as the fabulous Psion &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Psion_Series_3&quot;&gt;Series 3&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Psion_Series_5&quot;&gt;Series 5&lt;&#x2F;a&gt;, the various smartphones, and finally the bookmarks-in-the-cloud service &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Delicious_(website)&quot;&gt;Delicious&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;But as Delicious closed, I searched a replacement, and found &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pinboard.in&#x2F;tour&#x2F;&quot;&gt;Pinboard&lt;&#x2F;a&gt;, and was hooked. Not only it offered the same functionalities as Delicious (and more), but if was fast and sleek, with a minimal no-nonsense design that I favor.&lt;&#x2F;p&gt;
&lt;p&gt;It also had an original pricing system: you paid a one-time fee of $0.001 per the number of current users to get access for life. E.g $9.26 if there was already 9263 paying users and you wanted to become the 9264th. The goal was to entice people to register now rather than waiting, even though it may not have scaled. (see &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;leftovertakeout.com&#x2F;post&#x2F;3783798631&#x2F;pinboardin-pricing-model-fixing-their-math&quot;&gt;Pinboard.in Pricing Model: Fixing Their Math&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;Alas, it could not be sustained, so in 2015 it adopted a more mainstream yearly fee scheme: $11 &#x2F; year. &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.pinboard.in&#x2F;2014&#x2F;12&#x2F;new_pricing_policy&#x2F;&quot;&gt;New Pricing Policy (Pinboard Blog)&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;But we, old timers, kept our lifetime access we bought before the change. We were basically free-riding the new wave of customers...&lt;&#x2F;p&gt;
&lt;p&gt;Of course it could not go on, so last week, Maciej, the Pinboard author, suggested we voluntarily switch to the yearly fee scheme. And I did it gladly, Pinboard is for me a model of what web sites should be: sleek, fast, and efficient (and not re-selling your private data). At the opposite of the bloated monstrosities that a lot of sites tend to be nowadays.&lt;&#x2F;p&gt;
&lt;p&gt;Long live Pinboard!&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Retired, at last!</title>
        <published>2021-02-25T00:00:00+00:00</published>
        <updated>2021-02-25T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/blog/retired-at-last/"/>
        <id>https://colas.nahaboo.net/blog/retired-at-last/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/blog/retired-at-last/">&lt;p&gt;At last, I am now retired!&lt;&#x2F;p&gt;
&lt;p&gt;I ceased all activity on 2021-02-17, and my work account will be destroyed on 2021-02-28. A new era of full time surfing, coding and playing opens up. For now it is mostly playing with the new &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.valheimgame.com&#x2F;&quot;&gt;Valheim&lt;&#x2F;a&gt; game that is making a huge debut(*), as the waves are not good (winter storms) and I take a (small) coding break.&lt;&#x2F;p&gt;
&lt;p&gt;I will try to make a post per week on this site, starting now 2021-03-01. I know there is no way I will be able to keep the rhythm, but let&#x27;s say it should be my long-term goal.&lt;&#x2F;p&gt;
&lt;p&gt;(*) I strongly recommend you read &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;howtomarketagame.com&#x2F;2021&#x2F;02&#x2F;23&#x2F;valheim-7-lessons-from-their-amazing-marketing&#x2F;&quot;&gt;# Valheim: 7 marketing lessons from their amazing launch&lt;&#x2F;a&gt;, which tries to shed some light on its phenomenal success.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Réparer une corde de leash cassée sur l&#x27;eau</title>
        <published>2020-12-28T00:00:00+00:00</published>
        <updated>2020-12-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/surf/repairing-a-broken-leash-on-the-water-fr/"/>
        <id>https://colas.nahaboo.net/surf/repairing-a-broken-leash-on-the-water-fr/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/surf/repairing-a-broken-leash-on-the-water-fr/">&lt;p&gt;Bon ce matin, je me suis pris une des bonnes séries bien tubantes sur la
tête, celles qui vous envoient au fond, et... leash coupé par les
dérives... La planche a du se faire bien valdinguer, et se retrouver
dérives en avant...&lt;&#x2F;p&gt;
&lt;p&gt;Après la nage pour récupérer la planche, je me sentais pas de faire
l&#x27;aller-retour au van pour mettre un leash de rechange, j&#x27;ai donc fait
le noeud qui tient bien depuis des mois sur mon simulateur de rame: &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.lesnoeuds.com&#x2F;noeud-78-noeud-de-plein-poing.html&quot;&gt;&quot;le noeud de plein poing&quot;&lt;&#x2F;a&gt;.
Il est surtout très simple à faire même dans l&#x27;eau. Il faut juste bien
tirer dessus à la main pour bien le serrer. Et j&#x27;ai pu continuer la
session, ce qui fut très cool, car les vagues étaient vraiment bien et
puissantes.&lt;&#x2F;p&gt;
&lt;p&gt;Ce noeud est très laid, et pas hydrodynamique, mais il marche et est super simple. C&#x27;est évidemement temporaire le temps de le changer, mais c&#x27;est bon de ne pas avoir à interrompre sa session.&lt;&#x2F;p&gt;
&lt;p&gt;Un diagramme trouvé sur netknots (vous pouvez y aller voir leur &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.netknots.com&#x2F;rope_knots&#x2F;overhand-bend&quot;&gt;animation&lt;&#x2F;a&gt;):&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;surf&#x2F;repairing-a-broken-leash-on-the-water&#x2F;overhand-bend-knot.jpeg&quot; alt=&quot;Un diagramme trouvé sur netknots&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Et ce que cela a donné dans mon cas:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;surf&#x2F;repairing-a-broken-leash-on-the-water&#x2F;AqAHQbyh.jpg&quot; alt=&quot;image&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;surf&#x2F;repairing-a-broken-leash-on-the-water&#x2F;MAkicCQ.jpg&quot; alt=&quot;image&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;&#x2F;strong&gt;: J&#x27;ai publié cet article à l&#x27;origine en: &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;forum.gong-galaxy.com&#x2F;viewtopic.php?f=32&amp;amp;t=11983&amp;amp;p=147935&quot;&gt;Dépannage: réparer une corde de leash cassée sur l&#x27;eau - GONGSUP - The Flame Ball Surf Company&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Repairing a broken leash on the water</title>
        <published>2020-12-28T00:00:00+00:00</published>
        <updated>2020-12-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/surf/repairing-a-broken-leash-on-the-water/"/>
        <id>https://colas.nahaboo.net/surf/repairing-a-broken-leash-on-the-water/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/surf/repairing-a-broken-leash-on-the-water/">&lt;p&gt;I have found a simple to do and easy to remember method to repair a broken leash cord on the water. Just  grab the broken bits parallel in the hand and do a &lt;strong&gt;simple overhand bend knot&lt;&#x2F;strong&gt;, one of the simplest knots around. The trick is just to pull the knot really, really tight hard before resuming the surfing session.&lt;&#x2F;p&gt;
&lt;p&gt;Of course this not a permanent repair, as the knot will add drag to the leash, but it is enough to finish the session securely.&lt;&#x2F;p&gt;
&lt;p&gt;Image courtesy of netknots:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;colas.nahaboo.net&#x2F;surf&#x2F;repairing-a-broken-leash-on-the-water&#x2F;overhand-bend-knot.jpeg&quot; alt=&quot;Diagram of an Overhand Bent Knot&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;See the full animation at &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.netknots.com&#x2F;rope_knots&#x2F;overhand-bend&quot;&gt;netknots&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Here is the result on a leash broken leash during my session:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;colas.nahaboo.net&#x2F;surf&#x2F;repairing-a-broken-leash-on-the-water&#x2F;AqAHQbyh.jpg&quot; alt=&quot;image&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;colas.nahaboo.net&#x2F;surf&#x2F;repairing-a-broken-leash-on-the-water&#x2F;MAkicCQ.jpg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;&#x2F;strong&gt;: I first posted this article on &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.seabreeze.com.au&#x2F;forums&#x2F;Stand-Up-Paddle&#x2F;Review&#x2F;Wave-sup-leg-ropes#2587413&quot;&gt;seabreeze&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>A New version of the site for 2021</title>
        <published>2020-12-27T00:00:00+00:00</published>
        <updated>2020-12-27T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/blog/a-new-version-of-the-site-for-2021/"/>
        <id>https://colas.nahaboo.net/blog/a-new-version-of-the-site-for-2021/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/blog/a-new-version-of-the-site-for-2021/">&lt;p&gt;A big change is planned for this site in 2021: I am going to abandon the Foswiki engine for it, to pursue my recent goal of going back to the web roots. Basically, it a quest that relies more on:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fast rendering&lt;&#x2F;strong&gt; by no rendering at all: pre-compiling the site pages into static HTML+CSS+JS pages: the &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;jamstack.org&#x2F;&quot;&gt;JAMstack&lt;&#x2F;a&gt; approach.&lt;&#x2F;li&gt;
&lt;li&gt;What I call a &lt;strong&gt;LAUW&lt;&#x2F;strong&gt; approach (&lt;strong&gt;L&lt;&#x2F;strong&gt;inux &lt;strong&gt;A&lt;&#x2F;strong&gt;pache &lt;strong&gt;U&lt;&#x2F;strong&gt;nix-utilities &lt;strong&gt;W&lt;&#x2F;strong&gt;eb Standards) instead of the traditional &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;LAMP_(software_bundle)&quot;&gt;LAMP&lt;&#x2F;a&gt;. Using the full strengths of Linux, Apache, the GNU Unix utilities, and the modern web standards (HTML5, CSS4, JS ES6) now that Internet Explorer is at last dead. This means not using software libraries (e.g: JQuery) and processors (e.g: Saas) that were designed to remedy to the poor state of some browsers.&lt;&#x2F;li&gt;
&lt;li&gt;Using &lt;strong&gt;Markdown&lt;&#x2F;strong&gt; for text editing&lt;&#x2F;li&gt;
&lt;li&gt;Using ultra &lt;strong&gt;stable and reliable&lt;&#x2F;strong&gt; technologies. I want to use things that will still work in 10 years, not the fad-of-the-day javascript framework that will be obsolete in 6 months, or that will break compatibility on each update.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Technical&lt;&#x2F;strong&gt;: And that do not try to be friendly to non-technical authors and admins, as  I will be the sole admin and editor.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;now&quot;&gt;Now&lt;a class=&quot;zola-anchor&quot; href=&quot;#now&quot; aria-label=&quot;Anchor link for: now&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;So now (December 2020), I am still using &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;foswiki.org&#x2F;Home&#x2F;WebHome&quot;&gt;Foswiki&lt;&#x2F;a&gt;, but progressively prototyping on it the features I will try to implement later:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;A simplified skin, with all the &quot;wiki-ism&quot; (everything editable) removed. As you can see I got rid of the left toolbar, to keep only the top banner with its sections (Code&#x2F;Surf&#x2F;Blog) menu on the logo and minimal tools on the right&lt;&#x2F;li&gt;
&lt;li&gt;Editing contents in Markdown instead of the Foswiki syntax: I now do not use the Foswiki system to edit topics, but desktop-edit via &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;marktext.app&#x2F;&quot;&gt;marktext&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Having all the post sharing a common Form, so that the fields of this form can be easily converted to YAML as used as frontmatter (metadata) in modern Markdown-based systems.&lt;&#x2F;li&gt;
&lt;li&gt;But still using all the Foswiki power for the site admin and non-content topics (indexes,...)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The idea is to migrate progressively the contents into a form (Markdown + Frontmatter) usable in a modern static web generator like Hugo, while adapting Foswiki to use this content form, preparing a future migration.&lt;&#x2F;p&gt;
&lt;p&gt;I have developed the details of what this means in my post on the Foswiki site: &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;foswiki.org&#x2F;Development&#x2F;FoswikiNonWikiWebSites&quot;&gt;Foswiki for non-wiki web sites&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;spring-2021&quot;&gt;Spring 2021&lt;a class=&quot;zola-anchor&quot; href=&quot;#spring-2021&quot; aria-label=&quot;Anchor link for: spring-2021&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;After I retire, at the end of February 2021, I will have more time to ditch Foswiki and implement the site on a new engine. It will probably be a static website generator, most probably &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;gohugo.io&#x2F;&quot;&gt;Hugo&lt;&#x2F;a&gt;, but maybe also &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&#x2F;&quot;&gt;Zola&lt;&#x2F;a&gt;  &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.11ty.dev&#x2F;&quot;&gt;Eleventy&lt;&#x2F;a&gt;, or &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.gatsbyjs.com&#x2F;&quot;&gt;Gasby&lt;&#x2F;a&gt;, and incorporating ideas of the &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;jamstack.org&#x2F;generators&#x2F;&quot;&gt;myriad of other ones&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;summer-2021&quot;&gt;Summer 2021&lt;a class=&quot;zola-anchor&quot; href=&quot;#summer-2021&quot; aria-label=&quot;Anchor link for: summer-2021&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;I will then probably replace progressively various components of this system by ones that I will handcraft optimally to incorporate all the ideas I have been toying with during all these years: the HTML+CSS+JS layout, the tag&#x2F;category system, the search engine, the comment engine, the editing process...&lt;&#x2F;p&gt;
&lt;h2 id=&quot;later&quot;&gt;Later...&lt;a class=&quot;zola-anchor&quot; href=&quot;#later&quot; aria-label=&quot;Anchor link for: later&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;And I may even at some time create a totally new web engine system, who knows?&lt;&#x2F;p&gt;
&lt;p&gt;Or code a wiki replacement: a collaborative editing site based on the concepts learned via this experiment.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>How to contact me</title>
        <published>2020-07-26T00:00:00+00:00</published>
        <updated>2020-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/about/contact/"/>
        <id>https://colas.nahaboo.net/about/contact/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/about/contact/">&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;&#x2F;th&gt;&lt;th&gt;&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Email&lt;&#x2F;td&gt;&lt;td&gt;&lt;a href=&quot;mailto:colas@nahaboo.net&quot;&gt;colas@nahaboo.net&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;WWW&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;colas.nahaboo.net&quot;&gt;https:&#x2F;&#x2F;colas.nahaboo.net&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Bluesky&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;bsky.app&#x2F;profile&#x2F;colas.nahaboo.net&quot;&gt;https:&#x2F;&#x2F;bsky.app&#x2F;profile&#x2F;colas.nahaboo.net&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;GitHub&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.facebook.com&#x2F;colas.nahaboo&#x2F;&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;ColasNahaboo&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;YouTube&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;user&#x2F;cooolas&quot;&gt;cooolas&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Mastodon&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;mastodon.social&#x2F;@ColasNahaboo&quot;&gt;https:&#x2F;&#x2F;mastodon.social&#x2F;@ColasNahaboo&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Facebook&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.facebook.com&#x2F;profile.php?id=61567836084230&quot;&gt;https:&#x2F;&#x2F;www.facebook.com&#x2F;profile.php?id=61567836084230&lt;&#x2F;a&gt;&lt;br&gt; &lt;img src=&quot;&#x2F;icon&#x2F;svg&#x2F;alert.svg&quot; alt=&quot;&quot; &#x2F;&gt; It has changed, &lt;a href=&quot;&#x2F;blog&#x2F;my-facebook-account-has-changed-hacked&quot;&gt;see why&lt;&#x2F;a&gt;.&lt;br&gt;But I will probably close it soon, now that Meta encourages disinformation.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;To send me feedback &amp;amp; comments, do not hesitate to either send me an
email at &lt;a href=&quot;mailto:colas@nahaboo.net&quot;&gt;colas@nahaboo.net&lt;&#x2F;a&gt;, or leave a comment at the bottom of any
page of this site. You can write me in English or French. All the posts
on this site related to the digital ecosystem (computers, programming,
tech industries video games...) will be in English.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span class=&quot;twiki-macro FRFLAG&quot;&gt;&lt;&#x2F;span&gt; Pour me donner vos opinions sur
ce site et son contenu, un email à &lt;a href=&quot;mailto:colas@nahaboo.net&quot;&gt;colas@nahaboo.net&lt;&#x2F;a&gt; sera le bienvenu,
mais vous pouvez aussi laisser des commentaires en bas des pages de ce
site, en Français ou en Anglais. Si les articles traitant de tout ce qui
touche au numérique seront en Anglais, pour son universalité, certains
autres sujets, notamment sur le surf, pourront être bilingues Anglais et Français&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>About me</title>
        <published>2020-07-26T00:00:00+00:00</published>
        <updated>2020-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/about/me/"/>
        <id>https://colas.nahaboo.net/about/me/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/about/me/">&lt;p&gt;I am French, and grew up in &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Saint-Rapha%C3%ABl,_Var&quot;&gt;Saint Raphaël&lt;&#x2F;a&gt;, a nice little
town on the French riviera. I loved physics, and started engineering
studies when I had in the mid-seventies two revelations what changed my
life, &lt;strong&gt;computers&lt;&#x2F;strong&gt; via new devices, the programmable calculators and
&lt;strong&gt;surfing&lt;&#x2F;strong&gt; via a new sport that was starting then: windsurfing. Since
then, I have been hooked on everything related to these two passions. I
have a beloved wife, 2 adorable daugthers, and ... lots of cats! I love
reading, mainly English sci-fi books (see my
&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.goodreads.com&#x2F;user&#x2F;show&#x2F;43224227-colas-nahaboo&quot;&gt;goodreads&lt;&#x2F;a&gt;),
cooking, and Boogie Woogie music. I always worked in &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Sophia_Antipolis&quot;&gt;Sophia
Antipolis&lt;&#x2F;a&gt;, near Cannes
in the south of France, but recently moved to
&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Seignosse&quot;&gt;Seignosse&lt;&#x2F;a&gt;, in the south-west
of France.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;computers&quot;&gt;Computers&lt;a class=&quot;zola-anchor&quot; href=&quot;#computers&quot; aria-label=&quot;Anchor link for: computers&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;1970s:&lt;&#x2F;strong&gt; In 1977, a student in my Higher School Preparatory Class
bought a electronic calculator, the
&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;TI-57&quot;&gt;TI-57&lt;&#x2F;a&gt;. I discovered on it the
fascinating art of programming and spend a whole night coding a moon
landing program. It was a true revelation of the digital world that
changed my life forever and got me hooked on all things computer. I thus
choosed my engineering school based on the quality of its computer
courses and machines, not even bothering to attend the renowed ENS Ulm
oral exam because they lacked a computer system.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;1980s:&lt;&#x2F;strong&gt; In 1984, after my engineering degree at
&quot;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;%C3%89cole_Polytechnique&quot;&gt;X&lt;&#x2F;a&gt;&quot;, I made a
PHD thesis in computer science under the direction of the insanely
bright &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;G%C3%A9rard_Berry&quot;&gt;Gérard Berry&lt;&#x2F;a&gt;
(I designed and implemented LEDA, a syntaxic editor build from a special
graphic toolkit I designed on top of
&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;LeLisp&quot;&gt;LeLisp&lt;&#x2F;a&gt;) at INRIA Sophia
Antipolis - still on the French Riviera -, then, as a researcher in user
interface technlogy at &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.bull.com&#x2F;&quot;&gt;Bull&lt;&#x2F;a&gt;, in the Koala team
created by &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;scholar.google.com&#x2F;citations?user=IB44BAgAAAAJ&quot;&gt;Vania
Joloboff&lt;&#x2F;a&gt;, a
lisp-like language
&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;foldoc.org&#x2F;WOOL&quot;&gt;Wool&lt;&#x2F;a&gt;, (with even a &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;patents.google.com&#x2F;patent&#x2F;US5974253A&#x2F;en&quot;&gt;patent&lt;&#x2F;a&gt;)
an X window manager based on it &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.freshports.org&#x2F;x11-wm&#x2F;gwm&#x2F;&quot;&gt;GWM&lt;&#x2F;a&gt;, (&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;tronche.com&#x2F;gui&#x2F;x&#x2F;gwm&#x2F;html-manual&#x2F;wool.html&quot;&gt;manual&lt;&#x2F;a&gt;)
and many &quot;bleeding edge&quot; things in the brillant X Window System
community. At home I invested myself on the Apple IIe, then the Atari
ST, and the Commodore Amiga.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;1990s:&lt;&#x2F;strong&gt; I also had other revelations in the form of &lt;strong&gt;Unix&lt;&#x2F;strong&gt; and the
&lt;strong&gt;GNU&lt;&#x2F;strong&gt; manifesto, and was fortunate to meet extremely influential
people such as &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Bob_Scheifler&quot;&gt;Bob
Scheifler&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Richard_Stallman&quot;&gt;Richard
Stallmann&lt;&#x2F;a&gt;, and many
others of these finest hours of the computing ecosystem, and especially
the various industry-wide consortiums such as the &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;X_Window_System#The_MIT_X_Consortium_and_the_X_Consortium.2C_Inc.&quot;&gt;MIT X
Consortium&lt;&#x2F;a&gt;
and &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Open_Software_Foundation&quot;&gt;OSF&lt;&#x2F;a&gt;. Our
small Koala team that I then led, part of
&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Groupe_Bull&quot;&gt;Bull&lt;&#x2F;a&gt; but hosted inside
&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;French_Institute_for_Research_in_Computer_Science_and_Automation&quot;&gt;INRIA&lt;&#x2F;a&gt;
at &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Sophia_Antipolis&quot;&gt;Sophia Antipolis&lt;&#x2F;a&gt;,
eagerly explored the new software technologies, the web, java... while
contributing personally to lots of open source projects, mostly personal
tools, but also &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twiki.org&#x2F;&quot;&gt;TWiki&lt;&#x2F;a&gt; and then
&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;foswiki.org&#x2F;&quot;&gt;Foswiki&lt;&#x2F;a&gt;. We instantly drew close bounds to the
&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.w3.org&quot;&gt;W3C&lt;&#x2F;a&gt; and did a lot of things web-related. At home, I
switched to PC hardware, with Linux for programming and DOS+Windows for
games.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;2000s:&lt;&#x2F;strong&gt; In 2000, myself and the remaining Koala team members (along
the years, a lot of members have migrated to most major computer
companies) went then to work at &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;ILOG&quot;&gt;ILOG&lt;&#x2F;a&gt; an
innovative French software company, where I worked on graphics and
business rules, before designing an innovative intranet - based on
wikis - and inventing and developing the usability team after being
granted my latest revelation, &lt;strong&gt;Usability&lt;&#x2F;strong&gt; (I am one of the co-founders
of the usability association &quot;use-age&quot;. Alas, I progressively stopped my
open source work (and the maintainance of this site) as the increase of
my work time (with this new job) and my surfing time (by discovering
&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Standup_paddleboarding&quot;&gt;SUP&lt;&#x2F;a&gt;, I was more
and more on the water).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;2010s:&lt;&#x2F;strong&gt; Then, in 2009, ILOG was acquired by IBM, where I went on working on
collaborative intranet tools and designed and implemented a system and
an innovative language for Role-based access control
(&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Role-based_access_control&quot;&gt;RBAC&lt;&#x2F;a&gt;). Since
2016, I have entered a semi-retirement mode, as by moving in the
world-renowned surf village of
&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Seignosse&quot;&gt;Seignosse&lt;&#x2F;a&gt; (close to
Hossegor), I can now surf in the mornings and (remote) work in the
afternoons. And I should resume my open source work in March 2021, when
I will fully retire, and then surf in the morning and code open source
projects in the afternoons.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;2020s:&lt;&#x2F;strong&gt; I fully retired on February 17th, 2021, with all my time
devoted to SUP-surfing in the morning, cooking for lunch, napping in the
afternoon, and coding or playing video games in the evening. To my
surprise I could not code anymore, but it came back after 6 months.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;surfing&quot;&gt;Surfing&lt;a class=&quot;zola-anchor&quot; href=&quot;#surfing&quot; aria-label=&quot;Anchor link for: surfing&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Windsurfing:&lt;&#x2F;strong&gt; In the summer of 1975, I discovered this new sport,
Windsurfing, via Maurice Lejeune who had established in
&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Fr%C3%A9jus&quot;&gt;Fréjus&lt;&#x2F;a&gt; a Waterskiing and
Parasailing school, and discovered Windsurfing at its world
championships in 1975 in Bandol, and started a Windsurfing school. I
loved Windsurfing, especially the excitement of being among the
pionneers, inventing techniques, but I still remember the day when I was
pushed by a mere 1 foot wave and had my first surfing sensation. I was
instantly hooked for life, and Maurice Lejeune pushed me to go to
Biarritz take some surfing lessons with his pal Jo Moraïz, one of the
French surfing pioneers (&quot;The Tonton Surfeurs&quot; - &quot;The surfing uncles&quot;).
In the meantime I cured my addiction to waves by Windsurfing in waves,
as early as the fall of 1975 as you can see in this &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=lolyTk0pNtE&quot;&gt;vintage
video&lt;&#x2F;a&gt;. I was specially
found of the board shapes by Barland and Marco Copello, and sails by
David Ezzy.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Surfing:&lt;&#x2F;strong&gt; After learning to surf in Biarritz, I discovered there were
waves in the French Riviera, and pioneered a lot of surfing spots around
Fréjus, with my brother Vincent. As I could see the spot from my parents
house, I rarely missed a session. I ended up surfing mostly between
Fréjus and Italy, with (not enough) trips to Biarritz at first, and then
only Hossegor once I discovered these magic, but elusive and fickle
waves in clean waters. I also discovered &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;web.archive.org&#x2F;web&#x2F;20201119130904&#x2F;https:&#x2F;&#x2F;blog.bicsport.com&#x2F;corporate&#x2F;Inside-BICSport&#x2F;news&#x2F;whats-up&#x2F;news-details&#x2F;the-destiny-of-gerard-dabbadie.html&quot;&gt;Gérard
Dabbadie&lt;&#x2F;a&gt;
(&quot;Superfrog&quot;), and ended up with a quiver made only of his boards.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Snowboarding:&lt;&#x2F;strong&gt; I was lucky to take up snowboarding when it started.
Quite fun times! But I reckon water has less appeal for me in its solid
form than the liquid one...&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;SUP:&lt;&#x2F;strong&gt; In the mid-2000s, I was surfing and windsurfing less and less.
I was not motivated enough to get out in mediocre conditions, so I was
less and less physically fit and ma technique regressed. An awful
vicious circle. Then, I (re-)discovered strapless windsurfing, and in
2008 bought a board that was also a SUP hybrid. I was not really
attracted by mere paddling on a board instead of using a sail, so I
didn&#x27;t think anymore or it. But in 2009 I saw a sale on SUP paddles, so
I bought one to try. My first sessions were a disaster, as the board was
too short to learn on, but my curiosity was awaken. On the summer of
2009, I bought a true 9&#x27;6&quot; SUP, and was hooked for life. SUPing acted as
a wave magnifier, so I could again experience the full surfing
sensations even in crappy waves. I was on the water at least 2 days a
week all year round, and became fit again, feeling younger by 20
years... I haven&#x27;t touched windsurfing yet again, and only prone surfed
a handful of times.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Gong:&lt;&#x2F;strong&gt; My first SUP board was a bit cumbersome, though, so I bought
after 3 sessions with it a SUP by the French brand &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.gong-galaxy.com&#x2F;&quot;&gt;Gong&lt;&#x2F;a&gt; of
Patrice Guénolé, and knew I have found my favorite shaper again. I am
now and ambassador of the Gong brand, and have owned more than 50 Gong
boards!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Seignosse:&lt;&#x2F;strong&gt; We finally moved in 2016 to Seignosse, my little surfing
paradise, for a surfing retirememnt.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Foiling:&lt;&#x2F;strong&gt; I started foiling in 2017 (reports in
&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.seabreeze.com.au&#x2F;forums&#x2F;Stand-Up-Paddle&#x2F;Foiling&#x2F;SUP-foiling--my-first-steps-&quot;&gt;English&lt;&#x2F;a&gt;
and
&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;forum.gong-galaxy.com&#x2F;viewtopic.php?f=54&amp;amp;t=8892&quot;&gt;French&lt;&#x2F;a&gt;),
a very technical and interesting new surfing&#x2F;flying experience, altough
I must say I still prefer surfing. I guess foiling for me reminds me too
much of Windsurfing and it has a &quot;déjà vu&quot; flavor.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>About this site</title>
        <published>2020-07-26T00:00:00+00:00</published>
        <updated>2020-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/about/site/"/>
        <id>https://colas.nahaboo.net/about/site/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/about/site/">&lt;p&gt;See also:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;&#x2F;about&#x2F;me&quot;&gt;About Me&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;&#x2F;about&#x2F;contact&quot;&gt;Contact me&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Well, this is what you would expect of a personal site. Basically, it is
a place to show the world what I did, I do, and I want to do. And maybe,
if I ever develop some missing writing skills, I will be able to convey
what I was, I am, and want to be...&lt;&#x2F;p&gt;
&lt;p&gt;I only started to fully develop this site in 2008, as I was not
confortable with the (what I saw as) selfish &quot;personal web&#x2F;blog&quot; method
of communcation, prefering communities like mailing lists, forums,
wikis. Alas, my discovery of SUP surfing in 2009 has eaten all my free
time and frozen this site... I hope it will change!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;technical&quot;&gt;Technical&lt;a class=&quot;zola-anchor&quot; href=&quot;#technical&quot; aria-label=&quot;Anchor link for: technical&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;This site is made &lt;a href=&quot;&#x2F;blog&#x2F;a-new-version-of-the-site-for-2026-in-zola&quot;&gt;since 2026&lt;&#x2F;a&gt; with:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&#x2F;&quot;&gt;Zola&lt;&#x2F;a&gt; for the SSG (Static Site Generator) engine&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&#x2F;themes&#x2F;apollo&#x2F;&quot;&gt;Apollo&lt;&#x2F;a&gt; for the theme, with some customizations&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;giscus.app&#x2F;&quot;&gt;Giscus&lt;&#x2F;a&gt; for the commenting system&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;goaccess.io&#x2F;&quot;&gt;Goaccess&lt;&#x2F;a&gt; for the stats&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>A New Version of the site for 2020</title>
        <published>2020-07-26T00:00:00+00:00</published>
        <updated>2020-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/blog/a-new-version-of-the-site-for-2020/"/>
        <id>https://colas.nahaboo.net/blog/a-new-version-of-the-site-for-2020/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/blog/a-new-version-of-the-site-for-2020/">&lt;p&gt;After 10 years of
neglect, it is time for a new start of this site, because:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;I am going to retire in early 2021 (in 6 months), and I will have now time to properly maintain a personal site&lt;&#x2F;li&gt;
&lt;li&gt;I am feeling the need to archive in a central place all the contents I scatter in various different places, if only for the selfish reason to be able to retreive them more easily&lt;&#x2F;li&gt;
&lt;li&gt;I was toying with the idea of going to a static web site, as it is now in vogue, and it has a kind of nostalgia for me as I started my web sites as static   sites anyways. But by looking at the existing solutions, I was not convinced by them, as a lot seemed to naively solve the 80% easy part of the problem, and them struggle without any clear vision on how to solve the 20% hard part... a classic situation.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I thus decided to keep on using &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;foswiki.org&quot;&gt;Foswiki&lt;&#x2F;a&gt;
(v2.1.6), as it is now quite mature, and thus stable: I like building on
solid, time-tested fundations that will not change every month. And
let&#x27;s be honest, it is both extremely powerful and incredibly reliable.
I am just tweaking it for using it as a public site (one author with all
admin rights, and read-only viewers), rather than the standard wiki
setup of many authors, all able to edit contents, with some able to also
admin rights. My postulate is that a dynamic web site like a wiki, with
proper caching, has all the advantages of a static web site, but is more
practical to maintain (although more complex to implement).&lt;&#x2F;p&gt;
&lt;p&gt;I will detail my views on how to website-ize a wiki in future posts, but
for now, on 2020-07-26 at noon French time, let go live!&lt;&#x2F;p&gt;
&lt;p&gt;Welcome to my (new) world!&lt;&#x2F;p&gt;
&lt;p&gt;Colas.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Le bord de fuite Donaldson, la fin des sifflement des foils et dérives!</title>
        <published>2020-07-26T00:00:00+00:00</published>
        <updated>2020-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/surf/the-donaldson-trailing-edge-fr/"/>
        <id>https://colas.nahaboo.net/surf/the-donaldson-trailing-edge-fr/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/surf/the-donaldson-trailing-edge-fr/">&lt;p&gt;Je suis enfin tombé sur une vidéo de Mario Legenstein, de chez Levitaz, qui explique en détail la méthode et les principes pour supprimer le sifflement. En Anglais, mais avec titrages pour les points importants, et un accent &quot;Deutsche Qualität&quot; facile à comprendre pour nos oreilles Françaises.&lt;&#x2F;p&gt;
&lt;p&gt;Et j&#x27;ai pu avoir enfin un nom sur la technique la plus simple et efficace pour contrer cela: Le &quot;Donaldson trailing edge&quot; décrit en 1956 (Ou: le bord de fuite de Donaldson&quot;). Faire un arrondi sur le bord de fuite pour ancrer les tourbillons en un seul point. Et j&#x27;ai réalisé que je faisais cet arrondi à l&#x27;envers, sur l&#x27;extrados, au lieu de le faire sur l&#x27;intrados.&lt;&#x2F;p&gt;
&lt;iframe width=&quot;640&quot; height=&quot;360&quot; src=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;embed&#x2F;6rcCk8bAF10&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;p&gt;J&#x27;ai pu y apprendre que le phénomène est le &quot;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Vortex_shedding&quot;&gt;Von Kármán effect&lt;&#x2F;a&gt;&quot; (En Français: &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;All%C3%A9e_de_tourbillons_de_Karman&quot;&gt;l&#x27;allée de tourbillons de Karman&lt;&#x2F;a&gt;). Si le bord de fuite est épais, des tourbillons (vortex) se forment alternativement de chaque coté. Ils poussent et tirent en rythme sur le bord de fuite, et si ce rythme correspond à une des harmoniques de vibration de la dérive, aileron ou foil, elle entre en &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;R%C3%A9sonance&quot;&gt;résonance&lt;&#x2F;a&gt; et se met à fortement vibrer et émettre un sifflement.&lt;&#x2F;p&gt;


&lt;img src=&quot;&#x2F;media&#x2F;surf&#x2F;the-donaldson-trailing-edge-fr&#x2F;2kiQcrx.png&quot; 
     alt=&quot;image&quot;&gt;

&lt;p&gt;Du coup, on peut Googler &quot;Donaldson trailing edge&quot; et tomber sur plein de papiers sur la théorie, par exemple&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;iopscience.iop.org&#x2F;article&#x2F;10.1088&#x2F;1755-1315&#x2F;22&#x2F;3&#x2F;032045&quot;&gt;https:&#x2F;&#x2F;iopscience.iop.org&#x2F;article&#x2F;10.1088&#x2F;1755-1315&#x2F;22&#x2F;3&#x2F;032045&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Et avec ces images en soufflerie, on voit à gauche les vortexs alterner entre bords haut et bas, ce qui crée les vibrations. Mais le &quot;bord Donaldson&quot; à droite bloque les vortexs sur la pointe&lt;&#x2F;p&gt;


&lt;img src=&quot;&#x2F;media&#x2F;surf&#x2F;the-donaldson-trailing-edge-fr&#x2F;jRjVij5.png&quot; 
     alt=&quot;image&quot;&gt;

&lt;p&gt;Et voici une comparaison des vibrations engendrées par différentes formes de bord de fuite:&lt;&#x2F;p&gt;


&lt;img src=&quot;&#x2F;media&#x2F;surf&#x2F;the-donaldson-trailing-edge-fr&#x2F;izQLDCw.jpg&quot; 
     alt=&quot;image&quot;&gt;

&lt;p&gt;A noter que cet effet vibratoire de von Kármán est ce qui fait siffler les cordages dans le vent, détruire des pipelines sous-marins, et peut détruire des ponts avec le vent, notamment le fameux pont de Tacoma:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;aerospaceengineeringblog.com&#x2F;the-von-karman-vortex-street-and-tacoma-narrows-disaster&#x2F;&quot;&gt;https:&#x2F;&#x2F;aerospaceengineeringblog.com&#x2F;the-von-karman-vortex-street-and-tacoma-narrows-disaster&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Ou des cheminées, on y rajoute alors des spirales pour contrer cet effet:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;web.archive.org&#x2F;web&#x2F;20190824084241&#x2F;https:&#x2F;&#x2F;spartaengineering.com&#x2F;vortex-shedding-and-tall-structures&#x2F;&quot;&gt;https:&#x2F;&#x2F;web.archive.org&#x2F;web&#x2F;20190824084241&#x2F;https:&#x2F;&#x2F;spartaengineering.com&#x2F;vortex-shedding-and-tall-structures&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Enfin, il agit aussi à grande échelle, et peut se voir depuis l&#x27;espace:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;earthsky.org&#x2F;earth&#x2F;these-are-von-karman-vortices&quot;&gt;https:&#x2F;&#x2F;earthsky.org&#x2F;earth&#x2F;these-are-von-karman-vortices&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;earthobservatory.nasa.gov&#x2F;images&#x2F;90734&#x2F;two-views-of-von-karman-vortices&quot;&gt;https:&#x2F;&#x2F;earthobservatory.nasa.gov&#x2F;images&#x2F;90734&#x2F;two-views-of-von-karman-vortices&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;oceancolor.gsfc.nasa.gov&#x2F;outreach&#x2F;ocsciencefocus&#x2F;VariousViewsofvonKarmanVortices_o.pdf&quot;&gt;https:&#x2F;&#x2F;oceancolor.gsfc.nasa.gov&#x2F;outreach&#x2F;ocsciencefocus&#x2F;VariousViewsofvonKarmanVortices_o.pdf&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;&lt;em&gt;Note: J&#x27;ai publié cet article originellement en: &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;forum.gong-galaxy.com&#x2F;viewtopic.php?p=148025&quot;&gt;https:&#x2F;&#x2F;forum.gong-galaxy.com&#x2F;viewtopic.php?p=148025&lt;&#x2F;a&gt; .&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>The Donaldson trailing edge, no more fin hum!</title>
        <published>2020-07-07T00:00:00+00:00</published>
        <updated>2020-07-07T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/surf/the-donaldson-trailing-edge/"/>
        <id>https://colas.nahaboo.net/surf/the-donaldson-trailing-edge/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/surf/the-donaldson-trailing-edge/">&lt;p&gt;At last, I have found a good video explaining how to suppress the vibration of fins and foils, and giving the name of this technique : the Donaldson trailing edge, described in 1956 by ... Donaldson&lt;&#x2F;p&gt;
&lt;p&gt;Up to now, I had only seen the diagrams for symmetrical foils (just sand only one side, not both) but this video goes into the details and show that you must sand the inner face of asymmetrical foil (flat one), not the curved one.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to Mario Legenstein from Levitaz for the video:&lt;&#x2F;p&gt;
&lt;iframe width=&quot;640&quot; height=&quot;360&quot; src=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;embed&#x2F;6rcCk8bAF10&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;p&gt;I thus also learned that the effect causing the humming is &quot;Vortex Shedding&quot;, aka the &quot;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Vortex_shedding&quot;&gt;Von Kármán effect&lt;&#x2F;a&gt;&quot;. On thick trailing edges, vortexes are created alternatively on the two sides of the trailing edge, and they push and pull on it at a frequency depending of the speed and the edge geometry. These alternating forces make the foil or fin vibrate and hum.&lt;&#x2F;p&gt;


&lt;img src=&quot;&#x2F;media&#x2F;surf&#x2F;the-donaldson-trailing-edge&#x2F;2kiQcrx.png&quot; 
     alt=&quot;image&quot;&gt;

&lt;p&gt;You can google &quot;Donaldson trailing edge&quot; to find many detailed references. For instance:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;dhttps:&#x2F;&#x2F;iopscience.iop.org&#x2F;article&#x2F;10.1088&#x2F;1755-1315&#x2F;22&#x2F;3&#x2F;032045&quot;&gt;Boundary layer effects on the vortex shedding in a Donaldson-type hydrofoil&lt;&#x2F;a&gt;
&lt;br&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;pdfs.semanticscholar.org&#x2F;6c26&#x2F;a77b5f59145758ad1fa3ab72f179bb2601cd.pdf&quot;&gt;Vortex shedding from blunt and oblique trailing edge hydrofoils&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;And these wind tinnel images show the alternating vortexes creating the vibrations on a blunt edge on the left, and how the Donaldson edge locks the vortex in place on the right:&lt;&#x2F;p&gt;


&lt;img src=&quot;&#x2F;media&#x2F;surf&#x2F;the-donaldson-trailing-edge&#x2F;jRjVij5.png&quot; 
     alt=&quot;image&quot;&gt;

&lt;p&gt;Here is a comparison of the amount of vibrations for different shapes of the trailing edge:&lt;&#x2F;p&gt;


&lt;img src=&quot;&#x2F;media&#x2F;surf&#x2F;the-donaldson-trailing-edge&#x2F;izQLDCw.jpg&quot; 
     alt=&quot;image&quot;&gt;

&lt;p&gt;This von Kármán effect is what makes ropes whistle in the wind, can destroy underwater pipelines, and can destroy bridges when they vibrate in sync with the wind, such as the famous Tacoma bridge: &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;aerospaceengineeringblog.com&#x2F;the-von-karman-vortex-street-and-tacoma-narrows-disaster&#x2F;&quot;&gt;https:&#x2F;&#x2F;aerospaceengineeringblog.com&#x2F;the-von-karman-vortex-street-and-tacoma-narrows-disaster&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Spiral ridges are added to chimneys to prevent the effect: &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;web.archive.org&#x2F;web&#x2F;20190824084241&#x2F;https:&#x2F;&#x2F;spartaengineering.com&#x2F;vortex-shedding-and-tall-structures&#x2F;&quot;&gt;https:&#x2F;&#x2F;web.archive.org&#x2F;web&#x2F;20190824084241&#x2F;https:&#x2F;&#x2F;spartaengineering.com&#x2F;vortex-shedding-and-tall-structures&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;And it happens also at wide scale, and can be seen from space:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;earthsky.org&#x2F;earth&#x2F;these-are-von-karman-vortices&quot;&gt;https:&#x2F;&#x2F;earthsky.org&#x2F;earth&#x2F;these-are-von-karman-vortices&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;earthobservatory.nasa.gov&#x2F;images&#x2F;90734&#x2F;two-views-of-von-karman-vortices&quot;&gt;https:&#x2F;&#x2F;earthobservatory.nasa.gov&#x2F;images&#x2F;90734&#x2F;two-views-of-von-karman-vortices&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;oceancolor.gsfc.nasa.gov&#x2F;outreach&#x2F;ocsciencefocus&#x2F;VariousViewsofvonKarmanVortices_o.pdf&quot;&gt;https:&#x2F;&#x2F;oceancolor.gsfc.nasa.gov&#x2F;outreach&#x2F;ocsciencefocus&#x2F;VariousViewsofvonKarmanVortices_o.pdf&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;hr &#x2F;&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;&#x2F;strong&gt; I first posted this article on: &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.seabreeze.com.au&#x2F;forums&#x2F;Stand-Up-Paddle&#x2F;SUP&#x2F;The-definitive-solution-to-fins-and-foils-whistling-humming--The--Donaldson-trailing-edge-%5C&quot;&gt;https:&#x2F;&#x2F;www.seabreeze.com.au&#x2F;forums&#x2F;Stand-Up-Paddle&#x2F;SUP&#x2F;The-definitive-solution-to-fins-and-foils-whistling-humming--The--Donaldson-trailing-edge-\&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Migration to Foswiki</title>
        <published>2015-10-18T00:00:00+00:00</published>
        <updated>2015-10-18T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/blog/migration-to-foswiki/"/>
        <id>https://colas.nahaboo.net/blog/migration-to-foswiki/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/blog/migration-to-foswiki/">&lt;p&gt;At last, I found the motivation to work again on this site that I have
left dormant since 2009. And I start with a long deserved migration of
the engine from the old TWiki system to the superb Foswiki WIki engine.&lt;&#x2F;p&gt;
&lt;p&gt;Just installing a new Foswiki, and copying the data seem to provide a
working base, I will then work on fixing the minor bugs and designing a
new look in the following weeks.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Usability issues on a payment form</title>
        <published>2009-03-03T00:00:00+00:00</published>
        <updated>2009-03-03T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/blog/usability-issues-on-a-payment-form/"/>
        <id>https://colas.nahaboo.net/blog/usability-issues-on-a-payment-form/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/blog/usability-issues-on-a-payment-form/">&lt;p&gt;I know, I know, it is easy to nitpick on other people design, but this
morning I tried to pay my phone bill online, and... failed. I had to
retry many times, because I kept making mistakes on a simple,
run-of-the-mill form to enter my credit card data. I was dumbfounded.
How can, in 2009, people manage to make such a trivial and essential
part of online business go so wrong? As I guess you are as curious as
me, here is what I found out: (See the picture for the 3 main pain
points)&lt;&#x2F;p&gt;


&lt;img src=&quot;&#x2F;media&#x2F;blog&#x2F;usability-issues-on-a-payment-form&#x2F;telefact-bloopers.png&quot; 
     alt=&quot;image&quot;&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;1&lt;&#x2F;strong&gt; the expiration date example is ambiguous: does &lt;code&gt;0903&lt;&#x2F;code&gt; here means
2009-03 or 2003-09 ? Why didnt they disambiguate it by also adding a
specification (like MMYY, or, as it is a french dialog, MMAA ?)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;2&lt;&#x2F;strong&gt; but today, it was not only ambiguous but plainly misleading! As
we were in March 2009, I assumed that the example was built from the
current month and year. I said cool, so it is YYMM. Wrong! it was
actually the reverse, MMYY, resulting in one failed attempt&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;3&lt;&#x2F;strong&gt; ok, I filled the fields, and hit the OK button... and it just
reset the page to empty fields! Grumbling, I re-typed the fields,
re-clic, and... another blank page! After these two more failures, I
tried to think (which is what you &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Don&amp;#x27;t_Make_Me_Think&quot;&gt;do not want your users to
do&lt;&#x2F;a&gt;, trust me). I
then read the button label and discovered that this big, prominent
button alone at the bottom of the page was &lt;strong&gt;not the Submit button&lt;&#x2F;strong&gt;
but the Cancel one. I should have hit the middle one &quot;Valider&quot;, but
this button was not in the correct place on the flow of the form.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;So,after 3 failed attempts, I managed to pay my bill. All this on a
simple form with no fancy verification code or Captcha. Well done
Telefact, I wonder if you can find a worse example still in use today.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Detailed example of rsync-incr operation</title>
        <published>2009-01-11T00:00:00+00:00</published>
        <updated>2009-01-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/code/detailed-example-of-rsync-incr-operation/"/>
        <id>https://colas.nahaboo.net/code/detailed-example-of-rsync-incr-operation/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/code/detailed-example-of-rsync-incr-operation/">&lt;p&gt;Let&#x27;s say we have a source directory, &lt;code&gt;dir&lt;&#x2F;code&gt; that we are going to backup
into &lt;code&gt;backup&lt;&#x2F;code&gt; with default options and &lt;code&gt;backup--snap&lt;&#x2F;code&gt; with &lt;code&gt;--snap&lt;&#x2F;code&gt;. We
will have in it the files:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #4C4F69; background-color: #EFF1F5;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- On Day 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  - B&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  - C&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  - D&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- On Day 2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  - A is Added&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  - B stay the same in Both days&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  - C is Changed&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  - D is Deleted and not there anymore&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;so-on-day-1&quot;&gt;So, on Day 1:&lt;a class=&quot;zola-anchor&quot; href=&quot;#so-on-day-1&quot; aria-label=&quot;Anchor link for: so-on-day-1&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;We set up the source&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #4C4F69; background-color: #EFF1F5;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# mkdir dir; echo bbb &amp;gt;dir&#x2F;B;echo ccc &amp;gt;dir&#x2F;C;echo ddd &amp;gt;dir&#x2F;D&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# ls -l dir&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;total 12&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-rw-rw-r-- 1 colas local 4 Jan 10 23:40 B&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-rw-rw-r-- 1 colas local 4 Jan 10 23:40 C&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-rw-rw-r-- 1 colas local 4 Jan 10 23:40 D&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;We backup normally&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #4C4F69; background-color: #EFF1F5;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# rsync-incr 5 dir backups&#x2F;dir&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# ls -lR backups&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;backups:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;total 8&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;drwxrwxr-x 2 colas local 4096 Jan 10 23:40 dir&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;drwxrwxr-x 2 colas local 4096 Jan 10 23:42 dir.past&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;backups&#x2F;dir:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;total 12&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-rw-rw-r-- 1 colas local 4 Jan 10 23:40 B&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-rw-rw-r-- 1 colas local 4 Jan 10 23:40 C&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-rw-rw-r-- 1 colas local 4 Jan 10 23:40 D&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;backups&#x2F;dir.past:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;total 4&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-rw-rw-r-- 1 colas local 17 Jan 10 23:42 LAST_DATE&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;We backup with --snap&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #4C4F69; background-color: #EFF1F5;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# rsync-incr --snap 5 dir backups--snap&#x2F;dir&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# ls -lR backups--snap&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;backups--snap:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;total 8&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;drwxrwxr-x 2 colas local 4096 Jan 10 23:40 dir&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;drwxrwxr-x 3 colas local 4096 Jan 10 23:44 dir.past&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;backups--snap&#x2F;dir:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;total 12&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-rw-rw-r-- 1 colas local 4 Jan 10 23:40 B&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-rw-rw-r-- 1 colas local 4 Jan 10 23:40 C&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-rw-rw-r-- 1 colas local 4 Jan 10 23:40 D&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;backups--snap&#x2F;dir.past:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;total 8&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;drwxrwxr-x 2 colas local 4096 Jan 10 23:44 2009-01-10.23h44-0m&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-rw-rw-r-- 1 colas local 17 Jan 10 23:44 LAST_DATE&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;backups--snap&#x2F;dir.past&#x2F;2009-01-10.23h44-0m:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;total 0 &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;on-day-2&quot;&gt;On day 2&lt;a class=&quot;zola-anchor&quot; href=&quot;#on-day-2&quot; aria-label=&quot;Anchor link for: on-day-2&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;We set up the source&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #4C4F69; background-color: #EFF1F5;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# rm dir&#x2F;D; echo aaa&amp;gt;dir&#x2F;A; echo CCC&amp;gt;dir&#x2F;C&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# ls -l dir&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;total 12&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-rw-rw-r-- 1 colas local 4 Jan 10 23:48 A&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-rw-rw-r-- 1 colas local 4 Jan 10 23:40 B&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-rw-rw-r-- 1 colas local 4 Jan 10 23:48 C&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;We backup normally&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #4C4F69; background-color: #EFF1F5;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# rsync-incr 5 dir backups&#x2F;dir&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# ls -lR backups&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;backups:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;total 8&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;drwxrwxr-x 2 colas local 4096 Jan 10 23:48 dir&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;drwxrwxr-x 3 colas local 4096 Jan 10 23:50 dir.past&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; backups&#x2F;dir:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;total 12&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-rw-rw-r-- 1 colas local 4 Jan 10 23:48 A&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-rw-rw-r-- 1 colas local 4 Jan 10 23:40 B&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-rw-rw-r-- 1 colas local 4 Jan 10 23:48 C&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; backups&#x2F;dir.past:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;total 8&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;drwxrwxr-x 2 colas local 4096 Jan 10 23:50 2009-01-10.23h42-1m&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-rw-rw-r-- 1 colas local 17 Jan 10 23:50 LAST_DATE&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; backups&#x2F;dir.past&#x2F;2009-01-10.23h42-1m:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;total 8&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-rw-rw-r-- 1 colas local 4 Jan 10 23:40 C&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-rw-rw-r-- 1 colas local 4 Jan 10 23:40 D &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;There, you can see that the &quot;past&quot; backup dir contains an image of the
whole of dir the &quot;day&quot; before. But you see that B has a link count of 2
so is shared between the 2 backup dirs, whereas C is not, the 2 C files
have different contents&lt;&#x2F;p&gt;
&lt;p&gt;We backup with --snap&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #4C4F69; background-color: #EFF1F5;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# rsync-incr --snap 5 dir backups&#x2F;dir&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# ls -lR backups--snap&#x2F;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;total 8&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;drwxrwxr-x 2 colas local 4096 Jan 10 23:30 dir&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;drwxrwxr-x 4 colas local 4096 Jan 10 23:30 dir.past&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;backups--snap&#x2F;dir:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;total 12&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-rw-rw-r-- 1 colas local 4 Jan 10 23:30 A&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-rw-rw-r-- 2 colas local 4 Jan 10 23:27 B&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-rw-rw-r-- 1 colas local 4 Jan 10 23:30 C&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;backups--snap&#x2F;dir.past:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;total 12&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;drwxrwxr-x 2 colas local 4096 Jan 10 23:30 2009-01-10.23h30-0m&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;drwxrwxr-x 2 colas local 4096 Jan 10 23:27 2009-01-10.23h30-1m&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-rw-rw-r-- 1 colas local 17 Jan 10 23:30 LAST_DATE&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;backups--snap&#x2F;dir.past&#x2F;2009-01-10.23h30-0m:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;total 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;backups--snap&#x2F;dir.past&#x2F;2009-01-10.23h30-1m:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;total 12&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-rw-rw-r-- 2 colas local 4 Jan 10 23:27 B&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-rw-rw-r-- 1 colas local 4 Jan 10 23:27 C&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-rw-rw-r-- 1 colas local 4 Jan 10 23:27 D&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;There, you can see that the &quot;past&quot; backup dir contains an image of the whole of dir the &quot;day&quot; before. But you see that B has a link count of 2 so is shared between the 2 backup dirs, whereas C is not, the 2 C files have different contents&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My work on TWiki</title>
        <published>2008-12-20T00:00:00+00:00</published>
        <updated>2008-12-20T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/code/my-work-on-twiki/"/>
        <id>https://colas.nahaboo.net/code/my-work-on-twiki/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/code/my-work-on-twiki/">&lt;p&gt;I discovered the wiki concept in 2000, and quickly decided that this was
the future of the web site building tools, after many attempts at trying
various methods of Web development. Doing some research made me choose
the &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twiki.org&quot;&gt;TWiki engine&lt;&#x2F;a&gt;, and since then I have been part of
the TWiki community, providing some work and enhancements on it. For
more detailed info, the best place is to go look at &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twiki.org&#x2F;cgi-bin&#x2F;view&#x2F;Main&#x2F;ColasNahaboo&quot;&gt;my page on the
TWiki site&lt;&#x2F;a&gt;, and my
&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twiki.org&#x2F;cgi-bin&#x2F;view&#x2F;Codev&#x2F;PersonalRoadmapForColasNahaboo&quot;&gt;personal goals&lt;&#x2F;a&gt;
for it.&lt;&#x2F;p&gt;
&lt;p&gt;Of course, since the brutal TWiki fork, I have
folowed the whole TWiki community into the new great
&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;foswiki.org&quot;&gt;Foswiki&lt;&#x2F;a&gt; wiki project.&lt;&#x2F;p&gt;
&lt;p&gt;I was working on: (latest first)&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;TWiki &quot;koala&quot; pattern skin A system to
properly customize the pattern skin. This is the one I use on this
site&lt;&#x2F;li&gt;
&lt;li&gt;Enhancements to the Vote Plugin&lt;&#x2F;li&gt;
&lt;li&gt;TWiki misc enhancements for freetown&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>What is good code?</title>
        <published>2008-10-22T00:00:00+00:00</published>
        <updated>2008-10-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/blog/what-is-good-code/"/>
        <id>https://colas.nahaboo.net/blog/what-is-good-code/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/blog/what-is-good-code/">&lt;p&gt;I stumbled upon the blog post &quot;&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;web.archive.org&#x2F;web&#x2F;20190630095624&#x2F;https:&#x2F;&#x2F;weblogs.asp.net&#x2F;fredriknormen&#x2F;is-it-important-to-write-good-code&quot;&gt;Is it important to write good
code?&lt;&#x2F;a&gt;&quot;
the other day, and became more and more ill at ease as I realized that I
thought that I preferred the original code, that the author was trying
to ridicule, over his new &quot;improved&quot; object-oriented version. At first I
guessed this was another manifestation of the the &quot;Worst is best&quot;
scenario - enhancements are often not worth the added complexity - but I
realized that it was perhaps a more profound factor:&lt;&#x2F;p&gt;
&lt;p&gt;The original code is very good because it ... is &lt;strong&gt;small&lt;&#x2F;strong&gt;. It fits on a
teminal screen, so an human being can &lt;strong&gt;read&lt;&#x2F;strong&gt; it at once and have less
items to maintain in his &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;The_Magical_Number_Seven,_Plus_or_Minus_Two&quot;&gt;short term
memory&lt;&#x2F;a&gt;
and also &lt;strong&gt;understand&lt;&#x2F;strong&gt; it easily because it follows a natural way of
thinking with &lt;strong&gt;sentences using IF&lt;&#x2F;strong&gt;. This becomes obvious by reading
the body of the blog post surrounding the code samples, where you can
see that the author is using phrases such as &quot;if I need this I do that&quot;,
showing that in plain english, the if statement is the best way to make
people understand what you mean. And making code that &lt;strong&gt;people&lt;&#x2F;strong&gt;
understand is the best way to make debuggable and maintainable code.&lt;&#x2F;p&gt;
&lt;p&gt;At this moment I noticed the citation in the blog header: &lt;em&gt;&quot;Good
programmers write code that humans can understand&quot;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Indeed :-)&lt;&#x2F;p&gt;
&lt;p&gt;PS: I know I am a bit exaggerating the issues there, and that I unfairly
nitpick on Fredrik Normé, but it is that it seems to me from my personal
experience that the two changes I see most in my coding efficiency as I
grow older is a decrease of my short term memory capacity, and that I
make more and more typos where I realize I mix up totally words with
totally different meanings but that sound the same, for instance writing
&quot;never&quot; instead of &quot;nether&quot;, making me suspect that our natural way of
thinking may be much more language-based that I imagined...&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Mercurial web templating</title>
        <published>2008-10-09T00:00:00+00:00</published>
        <updated>2008-10-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/blog/mercurial-web-templating/"/>
        <id>https://colas.nahaboo.net/blog/mercurial-web-templating/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/blog/mercurial-web-templating/">&lt;p&gt;For some time now, I have seen the light and I switched to the new wave
of the Distributed Source Control management systems. &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=4XpnKHJAok8&quot;&gt;Linus famous
video&lt;&#x2F;a&gt; of his Google talk
decided me to try. I was a bit apprehensive at first, wary of engaging
myself on a technology that would bring more problems than solutions,
but after some days of use, the realisation dawned over me: Distributed
Source Control may be one little step for a programmer, but it is a
giant step for programming. Why? because, its &lt;strong&gt;mental model actually
follows your first intuitions&lt;&#x2F;strong&gt; that most of us developed as young
programmers before using any source control system. Suppose you want to
try a feature? instead of just copying the directory, you clone it. You
mess an operation? you just remove the directory, no embarrassing traces
left to keep the burning scar of shame on you for the following decades
of a central repository. You are used to think of your enhancements as
patches, you can work with patches. I could go on and on, but many
people have done it much better than me so I&#x27;ll just say that you should
definitely try it.&lt;&#x2F;p&gt;
&lt;p&gt;By the way, between the 3 main contenders, &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;git-scm.com&#x2F;&quot;&gt;git&lt;&#x2F;a&gt;,
&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.mercurial-scm.org&#x2F;&quot;&gt;mercurial&lt;&#x2F;a&gt; (aka HG), and
&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;GNU_Bazaar&quot;&gt;bazaar&lt;&#x2F;a&gt;, I chose mercurial because of its
simplicity, its better support of windows (I work in Linux since 1995
but my coworkers currently use Windows), and because some people at ILOG
started using git so I wanted to be able to try something else. I did
not choose bazaar as I wanted to stay close enough of git, to be able to
switch to it if ever my dream to work in a windows-free world
materializes one day...&lt;&#x2F;p&gt;
&lt;p&gt;So I started to set up a public web repository of my Open Source personal
work with mercurial, which gave me a simple way to publish my work in
full detail, but, although mercurial is quite easy to use, but I had a
bit of trouble figuring out how to customize its look &amp;amp; feel.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Windsurfing, back to the roots</title>
        <published>2008-10-05T00:00:00+00:00</published>
        <updated>2008-10-05T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/surf/windsurfing-back-to-the-roots/"/>
        <id>https://colas.nahaboo.net/surf/windsurfing-back-to-the-roots/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/surf/windsurfing-back-to-the-roots/">&lt;p&gt;I am an avid [[https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Windsurfing][windsurfer]], or maybe I was. The sport is now mature (I have started in ... 1975), and have somewhat lost the excitement we enjoyed before as the state of the art was constantly progressing, but have stagnated for some years now. It even kind of became an &quot;old people sport&quot;, as the new generation - even my daughter - took on [[https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Kitesurfing][kiteboarding instead]] which is easier to learn and less physically taxing, especially when you must carry all the gear on soft sand.&lt;&#x2F;p&gt;
&lt;p&gt;But the excitement is back, in the form of a... return to the roots! First a lot of people began to put a windurfer rig on top of a surfboard, specifically the new large [[https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Stand_up_paddle_surfing][SUP]] boards, able to support more weight than regular surfboards, not unlike [[https:&#x2F;&#x2F;www.surfline.com&#x2F;surfaz&#x2F;surfaz.cfm?id=924][tandem]] boards. It is really a return to the roots, as the first windsurfer was conceived exactly in this manner (putting a rig on a longboard). However, this time, thanks to the progress both in windsurfing technique, sails, rigs and fins, and board construction and shape, the result has nothing in common with the early sailboards. Even Robby Naish, our God of windsurfers has [[https:&#x2F;&#x2F;www.shq.com.au&#x2F;shq&#x2F;ktml2&#x2F;images&#x2F;uploads&#x2F;SUP&#x2F;DW_img003.jpg?0.44054415931884455][tried it]] too.&lt;&#x2F;p&gt;
&lt;p&gt;Then,what happened to surfing has been happening also to this &quot;new old&quot; surfing-with-a-sail reinvention of sailboarding. First, we saw the &quot;hotdogging&quot; movement I witnessed in my surfing youth with wide and shorter boards, with a fin placed full forward and a step to release the water flow at the tail. For surfing it was the famous 1970 [[https:&#x2F;&#x2F;www.newyorksurf.com&#x2F;modules&#x2F;xcgal&#x2F;albums&#x2F;userpics&#x2F;10359&#x2F;normal_small%20aipa.jpg][stingers]] of Ben Aipa, for windsurfing the [[https:&#x2F;&#x2F;www.kona-windsurfing.com&#x2F;products&#x2F;konaminitanker.asp][Kona]] with a step bottom, and modern windsurfing traits that are the pad and straps.&lt;&#x2F;p&gt;
&lt;p&gt;And now, we are entering surfing&#x27;s 1960s and its the twin finned short [[https:&#x2F;&#x2F;www.surfline.com&#x2F;surfaz&#x2F;surfaz.cfm?id=803][fish]], with the new AHD [[https:&#x2F;&#x2F;www.a-h-d.com&#x2F;news&#x2F;index.wrd?newsid=340&amp;amp;ahdid=3ea1a823d8d614e09fdb88978d143f45][Sea lion]], a strapless twin fin, and even some custom boards like the one in the picture&lt;&#x2F;p&gt;
&lt;p&gt;We are even seeing the return of soft cloth (aka Dacron) sails, in the form of the new [[https:&#x2F;&#x2F;www.hotsailsmaui.com&#x2F;2008&#x2F;sails.php?sail=superfreak][superfreak]]. Although I must confess that I am not ready to move back from my beloved [[https:&#x2F;&#x2F;www.ezzy.com&#x2F;][Ezzy sails]].&lt;&#x2F;p&gt;
&lt;p&gt;So, I am back on a windsurfer after 33 years, with my new Kona and Sea Lion, ready for new adventures... see you on the water!&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;update-2008-10-20&quot;&gt;Update 2008-10-20&lt;a class=&quot;zola-anchor&quot; href=&quot;#update-2008-10-20&quot; aria-label=&quot;Anchor link for: update-2008-10-20&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;See some nice descriptions and photos (french) of a trial day of the sea lion at the [[https:&#x2F;&#x2F;www.u-ride.net&#x2F;modules.php?name=Forums&amp;amp;file=viewtopic&amp;amp;t=8704&amp;amp;postdays=0&amp;amp;postorder=asc&amp;amp;start=0&amp;amp;sid=ea02b09eff3dbe58ebe5be8215198871][U-ride forum]], and videos of this week-end (
[[https:&#x2F;&#x2F;fr.youtube.com&#x2F;watch?v=Bt_V1V4Zqa0][video1]],
[[https:&#x2F;&#x2F;fr.youtube.com&#x2F;watch?v=E7V0hzMvBi4][video2]],
[[https:&#x2F;&#x2F;fr.youtube.com&#x2F;watch?v=TEySjxNs9Uo][video3]]
).&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Hgweb Mercurial template customization</title>
        <published>2008-04-06T00:00:00+00:00</published>
        <updated>2008-04-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/code/hgweb-mercurial-template-customization/"/>
        <id>https://colas.nahaboo.net/code/hgweb-mercurial-template-customization/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/code/hgweb-mercurial-template-customization/">&lt;p&gt;If you use the &lt;code&gt;hgwebdir.cgi&lt;&#x2F;code&gt; system to provide a web view of your mercurial repository, to customize the style like I did for (&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;web.archive.org&#x2F;web&#x2F;20101113204327&#x2F;https:&#x2F;&#x2F;hg.colas.nahaboo.net&#x2F;&quot;&gt;archived view&lt;&#x2F;a&gt;), a way to do it is (in debian, paths to adapt to your linux distribution):&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;copy &lt;code&gt;&#x2F;usr&#x2F;share&#x2F;mercurial&#x2F;templates&#x2F;gitweb&lt;&#x2F;code&gt; somewhere among your hg repositories. make a hg repository out of it&lt;&#x2F;li&gt;
&lt;li&gt;clone it to another one, e.g. &lt;code&gt;myhg&lt;&#x2F;code&gt;. This way, when upgrades will change the distributed templates, you will just have to copy the new ones in your &lt;code&gt;gitweb&lt;&#x2F;code&gt; repo, commit, and pull+merge the changes into your &lt;code&gt;myhg&lt;&#x2F;code&gt; repo.&lt;&#x2F;li&gt;
&lt;li&gt;edit the files in it: header.tmpl to add css code, etc. Adding links in the page headers will make you edit most of the files&lt;&#x2F;li&gt;
&lt;li&gt;install by copying it to &lt;code&gt;&#x2F;usr&#x2F;share&#x2F;mercurial&#x2F;templates&#x2F;myhg&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;edit your &#x2F;etc&#x2F;mercurial&#x2F;hgrc to tell hgwebdir.cgi to use your new templates by a line &lt;code&gt;style=myhg&lt;&#x2F;code&gt; . in your &lt;code&gt;[web]&lt;&#x2F;code&gt; section. Here is my file as an exemple:&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #4C4F69; background-color: #EFF1F5;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# system-wide mercurial configuration file&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# See hgrc(5) for more information&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[trusted]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;users=colas&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[web]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;baseurl=https&amp;amp;#58;&#x2F;&#x2F;hg.colas.nahaboo.net&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;contact=colas@nahaboo.net&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;description=Open source software made by Colas Nahaboo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;maxchanges=16&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;staticurl=https&amp;amp;#58;&#x2F;&#x2F;hg.colas.nahaboo.net&#x2F;static&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;style=colas&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;The above will make these settings global to the site. but you can still override them on a per-repository basis by adding these lines into the &lt;code&gt;hgweb.config&lt;&#x2F;code&gt; of the repositories.&lt;&#x2F;li&gt;
&lt;li&gt;Note that you can use HTML code in the description field&lt;&#x2F;li&gt;
&lt;li&gt;This &lt;code&gt;hgrc&lt;&#x2F;code&gt; is not cloned by &lt;code&gt;hg&lt;&#x2F;code&gt;. So you must add&#x2F;edit it directly on the web repository, you cannot prepare it in advance in your work dir and expect it to be pushed on the web site on first creation&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>The rebirth of this site</title>
        <published>2008-04-04T00:00:00+00:00</published>
        <updated>2008-04-04T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/blog/the-rebirth-of-this-site/"/>
        <id>https://colas.nahaboo.net/blog/the-rebirth-of-this-site/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/blog/the-rebirth-of-this-site/">&lt;p&gt;At last, I decided myself to redo my old website, which was a collection
of static html and was based on many of the various tools I made in
these past years. As I grew in love with wikis over these years, the
natural tought was just to do it in a Wiki, and naturally in the Wiki I
like the most, &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;twiki.org&quot;&gt;TWiki&lt;&#x2F;a&gt;. So bear with me and keep
posted, as this site will slowly emerge in this first half of 2008.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>LDAP TWiki authentication</title>
        <published>2007-05-24T00:00:00+00:00</published>
        <updated>2007-05-24T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://colas.nahaboo.net/code/ldap-twiki-authentication/"/>
        <id>https://colas.nahaboo.net/code/ldap-twiki-authentication/</id>
        
        <content type="html" xml:base="https://colas.nahaboo.net/code/ldap-twiki-authentication/">&lt;h2 id=&quot;principles&quot;&gt;Principles&lt;a class=&quot;zola-anchor&quot; href=&quot;#principles&quot; aria-label=&quot;Anchor link for: principles&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;This is how we use LDAP auth with TWiki (Cairo) with Microsoft Active
Directory&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;We make TWiki use standard apache basic authentication (The
non-cookie, standard method). In this mode TWiki expects Apache to do
all the auth work, and then execute TWiki perl scripts with the user
login set into the environment variable &lt;code&gt;REMOTE_USER&lt;&#x2F;code&gt; by apache. Our
trick is to use a modified mod_ladp apache module that wil get the AD
login of the user, auth with AD&#x2F;LDAP with it, and then &lt;strong&gt;change&lt;&#x2F;strong&gt; the
&lt;code&gt;REMOTE_USER&lt;&#x2F;code&gt; variable from windows login to the wiki name that is
dynamically computed by fetching First Name and Last Name in LDAP, and
concatenating them after some cleaning (capitalization, removing on
non-letter chars)&lt;&#x2F;li&gt;
&lt;li&gt;every N hours (for us, 4) a shell script dumps all
the LDAP accounts, checks the one not yet declared as TWiki accounts,
and for them create them via a modified (to be used non-interactively,
and without declaring a password) version of the &lt;code&gt;register&lt;&#x2F;code&gt; TWiki perl
CGI script&lt;&#x2F;li&gt;
&lt;li&gt;This shell script keeps the list of all LDAP accounts as a
wiki page for reference, and mails the changes to an admin mailing list&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;implementation&quot;&gt;Implementation&lt;a class=&quot;zola-anchor&quot; href=&quot;#implementation&quot; aria-label=&quot;Anchor link for: implementation&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;apache-module&quot;&gt;Apache module&lt;a class=&quot;zola-anchor&quot; href=&quot;#apache-module&quot; aria-label=&quot;Anchor link for: apache-module&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;We are based on the v2.4.2 of
&lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.muquit.com&#x2F;muquit&#x2F;software&#x2F;mod_auth_ldap&#x2F;mod_auth_ldap.html&quot;&gt;https:&#x2F;&#x2F;www.muquit.com&#x2F;muquit&#x2F;software&#x2F;mod_auth_ldap&#x2F;mod_auth_ldap.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;


&lt;a href=&quot;&#x2F;code&#x2F;ldap-twiki-authentication&#x2F;mod_auth_ldap.colas.tgz&quot;&gt;mod_auth_ldap.colas.tgz&lt;&#x2F;a&gt;

: The
whole module, modified&lt;&#x2F;li&gt;
&lt;li&gt;


&lt;a href=&quot;&#x2F;code&#x2F;ldap-twiki-authentication&#x2F;README.colas&quot;&gt;README.colas&lt;&#x2F;a&gt;

: The readme&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;the-modified-register-twiki-file&quot;&gt;The modified register TWiki file&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-modified-register-twiki-file&quot; aria-label=&quot;Anchor link for: the-modified-register-twiki-file&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;to be placed in the TWiki &lt;code&gt;bin&#x2F;&lt;&#x2F;code&gt; dir *



&lt;a href=&quot;&#x2F;code&#x2F;ldap-twiki-authentication&#x2F;register-ldap&quot;&gt;register-ldap&lt;&#x2F;a&gt;

: modified version of the
Cairo TWiki bin&#x2F;register script&lt;&#x2F;p&gt;
&lt;h3 id=&quot;the-offline-account-generation-scripts&quot;&gt;The offline account-generation scripts&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-offline-account-generation-scripts&quot; aria-label=&quot;Anchor link for: the-offline-account-generation-scripts&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;


&lt;a href=&quot;&#x2F;code&#x2F;ldap-twiki-authentication&#x2F;README_scripts.txt&quot;&gt;README_scripts.txt&lt;&#x2F;a&gt;

: The README of scripts&lt;&#x2F;li&gt;
&lt;li&gt;


&lt;a href=&quot;&#x2F;code&#x2F;ldap-twiki-authentication&#x2F;ldap-ilog-update-wikinames&quot;&gt;ldap-ilog-update-wikinames&lt;&#x2F;a&gt;

: main script&lt;&#x2F;li&gt;
&lt;li&gt;


&lt;a href=&quot;&#x2F;code&#x2F;ldap-twiki-authentication&#x2F;ldap-ilog-dump-wikiname&quot;&gt;ldap-ilog-dump-wikiname&lt;&#x2F;a&gt;

: dump info for one account&lt;&#x2F;li&gt;
&lt;li&gt;


&lt;a href=&quot;&#x2F;code&#x2F;ldap-twiki-authentication&#x2F;wiki-register&quot;&gt;wiki-register&lt;&#x2F;a&gt;

: shell script calling the CGI register-ldap via wget&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;debug &#x2F; dev ones:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;


&lt;a href=&quot;&#x2F;code&#x2F;ldap-twiki-authentication&#x2F;wiki-register-all&quot;&gt;wiki-register-all&lt;&#x2F;a&gt;

: batch account creation&lt;&#x2F;li&gt;
&lt;li&gt;


&lt;a href=&quot;&#x2F;code&#x2F;ldap-twiki-authentication&#x2F;wiki-ldap-check-accounts&quot;&gt;wiki-ldap-check-accounts&lt;&#x2F;a&gt;

: one shot: clean all wiki pages accounts&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
</feed>
