main
   1<?xml version="1.0" encoding="utf-8-unix"?>
   2<rss version="2.0"
   3     xmlns:content="http://purl.org/rss/1.0/modules/content/"
   4     xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   5     xmlns:dc="http://purl.org/dc/elements/1.1/"
   6     xmlns:atom="http://www.w3.org/2005/Atom"
   7     xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
   8     xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   9     xmlns:georss="http://www.georss.org/georss"
  10     xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
  11     xmlns:media="http://search.yahoo.com/mrss/"><channel>
  12  <title>(Posts)</title>
  13  <atom:link href="https://vincent.demeester.fr/index.xml" rel="self" type="application/rss+xml" />
  14  <link>https://vincent.demeester.fr/</link>
  15  <description><![CDATA[]]></description>
  16  <language>en</language>
  17  <pubDate>Fri, 07 Oct 2022 15:52:15 +0200</pubDate>
  18  <lastBuildDate>Fri, 07 Oct 2022 15:52:15 +0200</lastBuildDate>
  19  <generator>Emacs 29.0 Org-mode 9.5.5</generator>
  20  <webMaster>t (Vincent Demeester)</webMaster>
  21  <image>
  22    <url>http://orgmode.org/img/org-mode-unicorn-logo.png</url>
  23    <title>(Posts)</title>
  24    <link>https://vincent.demeester.fr/</link>
  25  </image>
  26
  27  <item>
  28    <title>Status update, June 2020</title>
  29    <link>https://vincent.demeester.fr/legacy/posts/2020-07-08-june-status-update.html</link>
  30    <author>Vincent Demeester</author>
  31    <guid isPermaLink="false">2020-07-08-june-status-update.org</guid>
  32    <pubDate>Wed, 08 Jul 2020 00:00:00 +0200</pubDate>
  33
  34    <description><![CDATA[<p>
  35    Time for the first new monthly status update! I do like those updates from <a href="https://drewdevault.com/2020/06/15/Status-update.html">Drew DeVault</a>
  36    and <a href="https://emersion.fr/blog/2020/status-update-19/">Simon Ser</a>, so I figured, why not trying myself 🙃. I am not sure where to start and
  37    where to end, but I guess I'll figure things out as I go.
  38    </p>
  39
  40
  41    <p>
  42    <a href="legacy/posts/2020-07-08-june-status-update.html">(Read more)</a>
  43    </p>
  44    ]]></description>
  45  </item>
  46
  47  <item>
  48    <title>website update</title>
  49    <link>https://vincent.demeester.fr/legacy/posts/2020-06-21-website-update.html</link>
  50    <author>Vincent Demeester</author>
  51    <guid isPermaLink="false">2020-06-21-website-update.org</guid>
  52    <pubDate>Sun, 21 Jun 2020 00:00:00 +0200</pubDate>
  53
  54    <description><![CDATA[<p>
  55    A really small article to talk about small updates on the website (<i>well, maybe not that
  56    small</i>). In a gist: a new css and articles changes.
  57    </p>
  58
  59    <ul class="org-ul">
  60    <li>Updating the style of the website to something really similar to <a href="https://newcss.net/">new.css</a>. It is way
  61    simpler and <i>pleasing</i> (at least for me).</li>
  62    <li>My <a href="../articles"><code>/articles</code></a> are now exporting from my <a href="../articles/personal_knowledge_base.html">personal knowledge base</a>, powered by
  63    <a href="../articles/org_roam.html"><code>org-roam</code></a>.</li>
  64    <li>A new <a href="https://dl.sbr.pm/"><code>/files</code></a> part is available, where I share some random file. See for example the
  65    <a href="https://dl.sbr.pm/wallpapers/dynamics/">dynamic wallpaper</a> part.</li>
  66    </ul>
  67
  68    <p>
  69    <a href="legacy/posts/2020-06-21-website-update.html">(Read more)</a>
  70    </p>
  71    ]]></description>
  72  </item>
  73
  74  <item>
  75    <title>Emacs bankruptcy is fun</title>
  76    <link>https://vincent.demeester.fr/legacy/posts/2020-04-15-emacs-bankruptcy-is-fun.html</link>
  77    <author>Vincent Demeester</author>
  78    <guid isPermaLink="false">2020-04-15-emacs-bankruptcy-is-fun.org</guid>
  79    <pubDate>Wed, 15 Apr 2020 00:00:00 +0200</pubDate>
  80
  81    <description><![CDATA[<p>
  82    Since go 1.14 go released, I've had a broken <code>go-mode</code> setup on my Emacs. I was using
  83    <code>lsp-mode</code> and <code>gopls</code> and well, the update broke everything. I initally try to fix it but
  84    I made it worse. At the same time, I started to get fed up with some performance issue of
  85    my configuration and how slow my Emacs starts, about 6s.
  86    </p>
  87
  88    <p>
  89    I, thus, declared my third Emacs bankruptcy, <code>:disabled</code> everything and slowly started
  90    from scratch, with the following goal:
  91    </p>
  92
  93    <ul class="org-ul">
  94    <li>Have it start quick, as less than a second, not too much more than <code>emacs -Q</code> would</li>
  95    <li>Disable anything that I don't use often initially</li>
  96    <li>Try to use as much built-in as possible (example: using <code>icomplete</code> instead of
  97    <code>ivy=/=counsel</code>)</li>
  98    </ul>
  99
 100
 101    <p>
 102    <a href="legacy/posts/2020-04-15-emacs-bankruptcy-is-fun.html">(Read more)</a>
 103    </p>
 104    ]]></description>
 105  </item>
 106
 107  <item>
 108    <title>Migrating to an org-mode website</title>
 109    <link>https://vincent.demeester.fr/legacy/posts/2020-03-22-org-mode-website.html</link>
 110    <author>Vincent Demeester</author>
 111    <guid isPermaLink="false">2020-03-22-org-mode-website.org</guid>
 112    <pubDate>Sun, 22 Mar 2020 00:00:00 +0100</pubDate>
 113
 114    <description><![CDATA[<div class='drawer properties'>
 115    <h6>Properties</h6>
 116    <p>
 117    :ID:       24a765bd-a0ed-42cf-b96c-db667f7d37e2
 118    </p>
 119    </div>
 120
 121    <p>
 122    This is a story… a story of me changing the way I code and publish my website. In the
 123    past, I've switch from <a href="https://vincent.demeester.fr/posts/2012-05-07-reinit-and-jekyll/">Jekyll</a> to <a href="https://vincent.demeester.fr/posts/2015-05-01-orgmode-et-jekyll/">"<code>orgmode</code> and Jekyll"</a> to <a href="https://vincent.demeester.fr/posts/2015-05-09-migration-to-hugo/">Hugo</a> (sorry those are written
 124    in french). The past year, I've written and documented myself a little bit about
 125    <a href="https://www.theminimalists.com/minimalism/">minimalism</a> and <a href="https://www.goodreads.com/book/show/40672036-digital-minimalism">digital minimalism</a>. Although I don't see myself as a minimalist, it helped
 126    me realize some issues I had.
 127    </p>
 128
 129    <p>
 130    I also realized if I want to write more, I need to lower the barrier between writing and
 131    publishing my content ; <i>if I want it to be published, of course</i>. This <i>post</i> is about
 132    what I'm putting in place for this, with a premise : I spend my life in <a href="https://www.gnu.org/software/emacs/">Emacs</a> and thus in
 133    <a href="https://orgmode.org/"><code>orgmode</code></a>. And <a href="https://orgmode.org/"><code>orgmode</code></a> is feature-full and has this badass feature : <code>org-publish</code>.
 134    </p>
 135
 136    <p>
 137    To build and publish this website, we will <i>try</i> to rely on a reproducible setup, meaning
 138    <a href="https://www.gnu.org/software/emacs/">Emacs</a> and <a href="https://orgmode.org/"><code>orgmode</code></a> of course, <a href="https://www.gnu.org/software/make/">GNU Make</a> of course <b>but</b> most importantly, <a href="https://nixos.org/nix/">Nix</a> (in the near
 139    future 👼).
 140    </p>
 141
 142    <div class='drawer update'>
 143    <h6>Update</h6>
 144    <p>
 145    There is now an article about it, that uses literate programming: <a href="../articles/meta_publishing_this_website.html">publishing this
 146    website</a>. The content of the post might no be up-to-date at some point.
 147    </p>
 148    </div>
 149
 150
 151
 152    <p>
 153    <a href="legacy/posts/2020-03-22-org-mode-website.html">(Read more)</a>
 154    </p>
 155    ]]></description>
 156  </item>
 157
 158  <item>
 159    <title>On digital minimalism, Linux, NixOS and Emacs</title>
 160    <link>https://vincent.demeester.fr/legacy/posts/2020-02-22-digital-minimalism.html</link>
 161    <author>Vincent Demeester</author>
 162    <guid isPermaLink="false">2020-02-22-digital-minimalism.org</guid>
 163    <pubDate>Sat, 22 Feb 2020 00:00:00 +0100</pubDate>
 164
 165    <description><![CDATA[<p>
 166    I've been reading and listening about Minimalism and Digital Minimalism for a little while
 167    now. I've watch some <a href="https://www.youtube.com/channel/UCJ24N4O0bP7LGLBDvye7oCA">Matt D'Avella</a> youtube video (and documentary), read <a href="https://www.goodreads.com/book/show/40672036-digital-minimalism">Digital
 168    Minimalism</a> from <a href="https://www.goodreads.com/author/show/147891.Cal_Newport">Cal Newport</a>, and read a bunch of .
 169    </p>
 170
 171    <p>
 172    I wouldn't say I am a minimalist, neither am I a digital minimalist <b>but</b> it is something
 173    that is a bit appealing and I feel I am slowly taking inspiration from those. I've started
 174    reducing to a minimun what my <i>smart</i>-phone does, I've reduced the number of <i>gadgets</i>
 175    I've add over time. But in this posts, I am going to focus on my systems and tools — this
 176    means Linux distributions, Emacs and other tools.
 177    </p>
 178
 179
 180    <p>
 181    <a href="legacy/posts/2020-02-22-digital-minimalism.html">(Read more)</a>
 182    </p>
 183    ]]></description>
 184  </item>
 185
 186  <item>
 187    <title>Golang testing — gotest.tools poll</title>
 188    <link>https://vincent.demeester.fr/legacy/posts/2019-03-23-gotest-tools-poll.html</link>
 189    <author>Vincent Demeester</author>
 190    <guid isPermaLink="false">2019-03-23-gotest-tools-poll.org</guid>
 191    <pubDate>Sat, 23 Mar 2019 00:00:00 +0100</pubDate>
 192
 193    <description><![CDATA[<p>
 194    Let's continue the <a href="https://gotest.tools"><code>gotest.tools</code></a> serie, this time with the <code>poll</code> package.
 195    </p>
 196
 197    <blockquote>
 198    <p>
 199    Package poll provides tools for testing asynchronous code.
 200    </p>
 201    </blockquote>
 202
 203    <p>
 204    When you write test, you may test a piece of code that work asynchronously, where the
 205    state you're expecting is gonna take a bit of time to be achieved. This is especially true
 206    when you work on networking or file-system code. And this happens a lot when you write
 207    integration (or end-to-end) test, less for unit-tests.
 208    </p>
 209
 210    <p>
 211    The package <code>poll</code> is trying to tackle those use cases. We'll first take a look at the
 212    main function, <code>WaitOn</code>, then how to write a <code>Check</code>, using the <code>Result</code> type.
 213    </p>
 214
 215
 216    <p>
 217    <a href="legacy/posts/2019-03-23-gotest-tools-poll.html">(Read more)</a>
 218    </p>
 219    ]]></description>
 220  </item>
 221
 222  <item>
 223    <title>Nix run aliases</title>
 224    <link>https://vincent.demeester.fr/legacy/posts/2019-01-26-nix-run-alias.html</link>
 225    <author>Vincent Demeester</author>
 226    <guid isPermaLink="false">2019-01-26-nix-run-alias.org</guid>
 227    <pubDate>Sat, 26 Jan 2019 00:00:00 +0100</pubDate>
 228
 229    <description><![CDATA[<p>
 230    I use <a href="https://nixos.org/"><code>NixOS</code></a> each and every day, everywhere. One really cool feature of <code>nix</code> is
 231    <code>nix-shell</code> and more recently (with <code>nix</code> &gt;= <code>2.0.0</code>), <code>nix run</code>.
 232    </p>
 233
 234    <div class="org-src-container">
 235    <pre class="src src-man">Usage: nix run &lt;FLAGS&gt;... &lt;INSTALLABLES&gt;...
 236
 237    Summary: run a shell in which the specified packages are available.
 238
 239    Flags:
 240    --arg &lt;NAME&gt; &lt;EXPR&gt;         argument to be passed to Nix functions
 241    --argstr &lt;NAME&gt; &lt;STRING&gt;    string-valued argument to be passed to Nix functions
 242    -c, --command &lt;COMMAND&gt; &lt;ARGS&gt;  command and arguments to be executed; defaults to 'bash'
 243    -f, --file &lt;FILE&gt;               evaluate FILE rather than the default
 244    -i, --ignore-environment        clear the entire environment (except those specified with --keep)
 245    -I, --include &lt;PATH&gt;            add a path to the list of locations used to look up &lt;...&gt; file names
 246    -k, --keep &lt;NAME&gt;               keep specified environment variable
 247    -u, --unset &lt;NAME&gt;              unset specified environment variable
 248
 249    Examples:
 250
 251    To start a shell providing GNU Hello from NixOS 17.03:
 252    $ nix run -f channel:nixos-17.03 hello
 253
 254    To start a shell providing youtube-dl from your 'nixpkgs' channel:
 255    $ nix run nixpkgs.youtube-dl
 256
 257    To run GNU Hello:
 258    $ nix run nixpkgs.hello -c hello --greeting 'Hi everybody!'
 259
 260    To run GNU Hello in a chroot store:
 261    $ nix run --store ~/my-nix nixpkgs.hello -c hello
 262
 263    Note: this program is EXPERIMENTAL and subject to change.
 264    </pre>
 265    </div>
 266
 267    <p>
 268    As you can see from the <code>-h</code> summary, it makes it really easy to run a shell or a command
 269    with some packages that are not in your main configuration. It will download the
 270    package(s) if there are not available in the Nix store (<code>/nix/store/</code>).
 271    </p>
 272
 273    <p>
 274    A few month ago I decided it would be a perfect use-case for command I do not run
 275    often. My idea was, let's define <code>aliases</code> (in the shell) that would make a simple command
 276    call, like <code>ncdu</code>, become <code>nix run nixpkgs.ncdu -c ndcu</code>. My <i>shell of choice</i> is <a href="https://fishshell.com/">fish</a>, so
 277    I decided to dig into the <i>language</i> in order to implement that.
 278    </p>
 279
 280    <p>
 281    The use case is the following :
 282    </p>
 283    <ul class="org-ul">
 284    <li>When I type <code>foo</code>, I want the command <code>foo</code> in package <code>bar</code> to be executed.</li>
 285    <li>I want to be able to pin a channel for the package — I'm using <a href="https://matthewbauer.us/">Matthew Bauer</a> <a href="https://matthewbauer.us/blog/channel-changing.html">Channel
 286    Changing with Nix</a> setup for pin-pointing a given channel.</li>
 287    </ul>
 288
 289
 290    <p>
 291    <a href="legacy/posts/2019-01-26-nix-run-alias.html">(Read more)</a>
 292    </p>
 293    ]]></description>
 294  </item>
 295
 296  <item>
 297    <title>2018 year review</title>
 298    <link>https://vincent.demeester.fr/legacy/posts/2019-01-20-2018-year-review.html</link>
 299    <author>Vincent Demeester</author>
 300    <guid isPermaLink="false">2019-01-20-2018-year-review.org</guid>
 301    <pubDate>Sun, 20 Jan 2019 00:00:00 +0100</pubDate>
 302
 303    <description><![CDATA[<p>
 304    Here is my review of 2018, the first of its kind, hopefully not the last 👼. I saw
 305    some<sup><a id="fnr.1" class="footref" href="#fn.1" role="doc-backlink">1</a></sup> <i>2018<sup><a id="fnr.2" class="footref" href="#fn.2" role="doc-backlink">2</a></sup> reviews</i><sup><a id="fnr.3" class="footref" href="#fn.3" role="doc-backlink">3</a></sup> articles<sup><a id="fnr.4" class="footref" href="#fn.4" role="doc-backlink">4</a></sup> in my Feedly feed and I thought it
 306    would be a good idea to write my own too.
 307    </p>
 308
 309    <p>
 310    I'll try in the next year — maybe month if I ever want to do monthly reviews — to automate
 311    some of it ; using the beloved <code>org-mode</code>.
 312    </p>
 313
 314    <p>
 315    <a href="legacy/posts/2019-01-20-2018-year-review.html">(Read more)</a>
 316    </p>
 317    ]]></description>
 318  </item>
 319
 320  <item>
 321    <title>Golang testing — gotest.tools icmd</title>
 322    <link>https://vincent.demeester.fr/legacy/posts/2018-09-18-gotest-tools-icmd.html</link>
 323    <author>Vincent Demeester</author>
 324    <guid isPermaLink="false">2018-09-18-gotest-tools-icmd.org</guid>
 325    <pubDate>Tue, 18 Sep 2018 00:00:00 +0200</pubDate>
 326
 327    <description><![CDATA[<p>
 328    Let's continue the <a href="https://gotest.tools"><code>gotest.tools</code></a> serie, this time with the <code>icmd</code> package.
 329    </p>
 330
 331    <blockquote>
 332    <p>
 333    Package icmd executes binaries and provides convenient assertions for testing the results.
 334    </p>
 335    </blockquote>
 336
 337    <p>
 338    After file-system operations (seen in <a href="file:///posts/2018-09-14-gotest-tools-fs/"><code>fs</code></a>), another common use-case in tests is to
 339    </p>
 340
 341    <p>
 342    <a href="legacy/posts/2018-09-18-gotest-tools-icmd.html">(Read more)</a>
 343    </p>
 344    ]]></description>
 345  </item>
 346
 347  <item>
 348    <title>Golang testing — gotest.tools fs</title>
 349    <link>https://vincent.demeester.fr/legacy/posts/2018-09-14-gotest-tools-fs.html</link>
 350    <author>Vincent Demeester</author>
 351    <guid isPermaLink="false">2018-09-14-gotest-tools-fs.org</guid>
 352    <pubDate>Fri, 14 Sep 2018 00:00:00 +0200</pubDate>
 353
 354    <description><![CDATA[<p>
 355    Let's continue the <a href="https://gotest.tools"><code>gotest.tools</code></a> serie, this time with the <code>fs</code> package.
 356    </p>
 357
 358    <blockquote>
 359    <p>
 360    Package fs provides tools for creating temporary files, and testing the contents and structure of a directory.
 361    </p>
 362    </blockquote>
 363
 364    <p>
 365    This package is heavily using functional arguments (as we saw in <a href="file:///posts/2017-01-01-go-testing-functionnal-builders/">functional arguments for
 366    wonderful builders</a>). Functional arguments is, in a nutshell, a combinaison of two Go
 367    features : <i>variadic</i> functions (<code>...</code> operation in a function signature) and the fact
 368    that <code>func</code> are <i>first class citizen</i>. This looks more or less like that.
 369    </p>
 370
 371    <div class="org-src-container">
 372    <pre class="src src-go"><span class="org-keyword">type</span> <span class="org-type">Config</span> <span class="org-keyword">struct</span> {}
 373
 374    <span class="org-keyword">func</span> <span class="org-function-name">MyFn</span>(<span class="org-variable-name">ops</span> ...<span class="org-keyword">func</span>(*<span class="org-type">Config</span>)) *<span class="org-type">Config</span> {
 375    <span class="org-variable-name">c</span> := &amp;<span class="org-type">Config</span>{} <span class="org-comment-delimiter">// </span><span class="org-comment">with default values</span>
 376    <span class="org-keyword">for</span> <span class="org-variable-name">_</span>, <span class="org-variable-name">op</span> := <span class="org-keyword">range</span> ops {
 377    <span class="org-function-name">op</span>(c)
 378    }
 379    <span class="org-keyword">return</span> c
 380    }
 381
 382    <span class="org-comment-delimiter">// </span><span class="org-comment">Calling it</span>
 383    <span class="org-variable-name">conf</span> := <span class="org-function-name">MyFn</span>(withFoo, <span class="org-function-name">withBar</span>(<span class="org-string">"baz"</span>))
 384    </pre>
 385    </div>
 386
 387    <p>
 388    The <code>fs</code> package has too <b>main</b> purpose :
 389    </p>
 390
 391    <ol class="org-ol">
 392    <li>create folders and files required for testing in a simple manner</li>
 393    <li>compare two folders structure (and content)</li>
 394    </ol>
 395
 396
 397    <p>
 398    <a href="legacy/posts/2018-09-14-gotest-tools-fs.html">(Read more)</a>
 399    </p>
 400    ]]></description>
 401  </item>
 402
 403  <item>
 404    <title>Golang testing — gotest.tools golden</title>
 405    <link>https://vincent.demeester.fr/legacy/posts/2018-09-06-gotest-tools-golden.html</link>
 406    <author>Vincent Demeester</author>
 407    <guid isPermaLink="false">2018-09-06-gotest-tools-golden.org</guid>
 408    <pubDate>Thu, 06 Sep 2018 00:00:00 +0200</pubDate>
 409
 410    <description><![CDATA[<p>
 411    Let's continue the <a href="https://gotest.tools"><code>gotest.tools</code></a> serie, this time with the <code>golden</code> package. This is a
 412    <a href="file:///posts/2017-04-22-golang-testing-golden-file/"><i>quick follow-up</i> on a previous <code>golden</code> post</a>, but focused on the <code>gotest.tools</code>
 413    implementation. I'm gonna be quicker, please read that one if <code>golden</code> files is a new
 414    concept for you.
 415    </p>
 416
 417    <blockquote>
 418    <p>
 419    Package <code>golden</code> provides tools for comparing large mutli-line strings.
 420    </p>
 421
 422    <p>
 423    Golden files are files in the <code>./testdata/</code> sub-directory of the package under test.
 424    </p>
 425    </blockquote>
 426
 427    <p>
 428    In the previous article, we described the problem, and how to fix it by writing a small
 429    helper. Well, that small helper is in <code>gotest.tools/golden</code> now, and it has a tiny bit
 430    more features.
 431    </p>
 432
 433    <p>
 434    One of the difference between the <code>gotest.tools</code> implementation and the previous post is
 435    the flag name. In <code>gotest.tools/golden</code>, the flag is <code>-test.update-golden</code> (was just
 436    <code>-test.update</code> before). Just as before, if the <code>-test.update-golden</code> flag is set then the
 437    actual content is written to the golden file, before reading it and comparing.
 438    </p>
 439
 440    <p>
 441    There is two ways to use the <code>golden</code> package:
 442    </p>
 443    <ul class="org-ul">
 444    <li>on it's own, using <code>golden.Assert</code> or <code>golden.AssertBytes</code></li>
 445    <li>as a <code>cmp.Comparison</code>, with <code>golden.String</code> or <code>golden.Bytes</code></li>
 446    </ul>
 447
 448
 449    <p>
 450    <a href="legacy/posts/2018-09-06-gotest-tools-golden.html">(Read more)</a>
 451    </p>
 452    ]]></description>
 453  </item>
 454
 455  <item>
 456    <title>Golang testing — gotest.tools skip</title>
 457    <link>https://vincent.demeester.fr/legacy/posts/2018-09-01-gotest-tools-skip.html</link>
 458    <author>Vincent Demeester</author>
 459    <guid isPermaLink="false">2018-09-01-gotest-tools-skip.org</guid>
 460    <pubDate>Sat, 01 Sep 2018 00:00:00 +0200</pubDate>
 461
 462    <description><![CDATA[<p>
 463    Let's continue the <a href="https://gotest.tools"><code>gotest.tools</code></a> serie, this time with the <code>skip</code> package. This is a
 464    really simple one so this should be quick.
 465    </p>
 466
 467    <blockquote>
 468    <p>
 469    <code>skip</code> provides functions for skipping a test and printing the source code of the
 470    condition used to skip the test.
 471    </p>
 472    </blockquote>
 473
 474    <p>
 475    The package consists of only one function : <code>If</code>. The idea comes mainly from
 476    <a href="https://github.com/docker/docker"><code>docker/docker</code></a> integration test suite, where we wanted to skip some test (or test suites)
 477    given different context. By context I mean things like the system we are running on
 478    (<code>Windows</code>, <code>Linux</code>, …) or the capabilities of the running kernel or node (is <code>apparmor</code>
 479    available or not on the current machine).
 480    </p>
 481
 482    <p>
 483    This <code>If</code> method takes a <code>testing.T</code> pointer and either a boolean, a function that
 484    returns a boolean, <b>or</b> an expression.
 485    </p>
 486
 487    <div class="org-src-container">
 488    <pre class="src src-go"><span class="org-comment-delimiter">// </span><span class="org-comment">boolean</span>
 489    <span class="org-comment-delimiter">//   </span><span class="org-comment">--- SKIP: TestName (0.00s)</span>
 490    <span class="org-comment-delimiter">//           </span><span class="org-comment">skip.go:19: MissingFeature</span>
 491    <span class="org-keyword">var</span> <span class="org-variable-name">MissingFeature</span> <span class="org-type">bool</span>
 492    skip.<span class="org-function-name">If</span>(t, MissingFeature)
 493
 494    <span class="org-comment-delimiter">// </span><span class="org-comment">function</span>
 495    <span class="org-comment-delimiter">//   </span><span class="org-comment">--- SKIP: TestName (0.00s)</span>
 496    <span class="org-comment-delimiter">//           </span><span class="org-comment">skip.go:19: !IsExperimentalDaemon(dockerClient): daemon is not experimental</span>
 497    skip.<span class="org-function-name">If</span>(t, <span class="org-function-name">IsExperimentalDaemon</span>(dockerClient), <span class="org-string">"daemon is not experimental"</span>)
 498
 499    <span class="org-comment-delimiter">// </span><span class="org-comment">expression</span>
 500    <span class="org-comment-delimiter">//   </span><span class="org-comment">--- SKIP: TestName (0.00s)</span>
 501    <span class="org-comment-delimiter">//           </span><span class="org-comment">skip.go:19: apiVersion &lt; version("v1.24")</span>
 502    skip.<span class="org-function-name">If</span>(t, apiVersion &lt; <span class="org-function-name">version</span>(<span class="org-string">"v1.24"</span>))
 503    </pre>
 504    </div>
 505
 506    <p>
 507    There is few elements to note though :
 508    </p>
 509
 510    <ul class="org-ul">
 511    <li>This package (as other parts of the <code>gotest.tools</code> packages), will try to look at source
 512    files to display the expression used (same goes for <code>assert</code>). This is usually not a
 513    problem because you run tests where the source code is. <b>However</b>, in the cases you
 514    generate a test binary to be executed later (à-la <code>kubernetes</code> or other projects), this
 515    can display a weird error message if the sources are not available… You shouldn't be
 516    worried too much about it, but it's better if you know :)</li>
 517    <li>The main reason to use <code>skip.If</code> is mainly for new contributors to get in quickly,
 518    <b>reducing potential friction of them running the tests on their environment</b>. The more
 519    the tests are written in a way they explicitely declare their requirements (and skipped
 520    if the environment does not meet those), the easier it makes contributors run your
 521    tests. <b>But</b>, this also means, you should try to measure the skipped tests on your
 522    continuous integration system to make sure you run all of them eventually… otherwise
 523    it's dead code. <i>But more on that in later posts 😉</i>.</li>
 524    </ul>
 525
 526    <p>
 527    That's all for today folks, told you that was going to be quick.
 528    </p>
 529
 530    <p>
 531    <a href="legacy/posts/2018-09-01-gotest-tools-skip.html">(Read more)</a>
 532    </p>
 533    ]]></description>
 534</item>
 535
 536<item>
 537  <title>Golang testing — gotest.tools assertions</title>
 538  <link>https://vincent.demeester.fr/legacy/posts/2018-08-16-gotest-tools-assertions.html</link>
 539  <author>Vincent Demeester</author>
 540  <guid isPermaLink="false">2018-08-16-gotest-tools-assertions.org</guid>
 541  <pubDate>Thu, 16 Aug 2018 00:00:00 +0200</pubDate>
 542
 543  <description><![CDATA[<p>
 544  Let's take a closer look at <a href="https://gotest.tools"><code>gotest.tools</code></a> assertions packages. This is mainly about <code>assert</code>, <code>assert/cmp</code> and
 545  <code>assert/opt</code>.
 546  </p>
 547
 548  <blockquote>
 549  <p>
 550  Package assert provides assertions for comparing expected values to actual values. When assertion fails a helpful error
 551  message is printed.
 552  </p>
 553  </blockquote>
 554
 555  <p>
 556  There is two main functions (<code>Assert</code> and <code>Check</code>) and some helpers (like <code>NilError</code>, …). They all take a <code>*testing.T</code> as
 557  a first argument, pretty common across testing Go libraries. Let's dive into those !
 558  </p>
 559
 560
 561  <p>
 562  <a href="legacy/posts/2018-08-16-gotest-tools-assertions.html">(Read more)</a>
 563  </p>
 564  ]]></description>
 565</item>
 566
 567<item>
 568  <title>Golang testing — gotest.tools introduction</title>
 569  <link>https://vincent.demeester.fr/legacy/posts/2018-07-28-gotest-tools-intro.html</link>
 570  <author>Vincent Demeester</author>
 571  <guid isPermaLink="false">2018-07-28-gotest-tools-intro.org</guid>
 572  <pubDate>Sat, 28 Jul 2018 00:00:00 +0200</pubDate>
 573
 574  <description><![CDATA[<p>
 575  I already wrote 2 previous posts about golang and testing. It's something I care deeply
 576  about and I wanted to continue writing about it. It took me a bit more time than I
 577  thought, but getting back to it. Since the <a href="http://vincent.demeester.fr/posts/2017-04-22-golang-testing-golden-file/">last post</a>, Daniel Nephin and I worked (but
 578  mainly Daniel 🤗) on bootstrapping a testing helper library.
 579  </p>
 580
 581  <p>
 582  Let me introduce it to you this library : <a href="https://gotest.tools"><code>gotest.tools</code></a>. As described in the <a href="https://godoc.org/gotest.tools">godoc</a> package comment, <code>gotest.tools</code> is a
 583  collection of packages to augment <code>testing</code> and support common patterns. It's an enhanced and growing version of the
 584  initial helpers we (the docker/moby maintainers) wrote initially in <a href="https://github.com/docker/docker"><code>docker/docker</code></a> repository. We are using in quite some
 585  project here at <a href="https://github.com">Docker</a>.
 586  </p>
 587
 588  <p>
 589  There is a bunch of packages that will all have their own post (linked here when available) :
 590  </p>
 591
 592  <ul class="org-ul">
 593  <li><a href="2018-08-16-gotest-tools-assertions.html"><code>assert</code></a> (with <code>assert/cmp</code> and <code>assert/opt</code>) that provides assertions for comparing expected values to actual values.</li>
 594  <li><code>env</code> that provides functions to test code that read environment variable or the current working directory.</li>
 595  <li><a href="2018-09-14-gotest-tools-fs.html"><code>fs</code></a> that provides tools for creating temporary files, and testing the contents and structure of a directory.</li>
 596  <li><a href="2018-09-06-gotest-tools-golden.html"><code>golden</code></a> that provides tools for comparing large multi-line strings.</li>
 597  <li><a href="2018-09-18-gotest-tools-icmd.html"><code>icmd</code></a> that executes binaries and provides convenient assertions for testing the results.</li>
 598  <li><a href="2019-03-23-gotest-tools-poll.html"><code>poll</code></a> that provides tools for testing asynchronous code.</li>
 599  <li><a href="2018-09-01-gotest-tools-skip.html"><code>skip</code></a> that provides functions for skipping a test and printing the source code of the condition used to skip the test.</li>
 600  </ul>
 601
 602  <p>
 603  There is also experimental package, using the <code>x</code> notation (as the golang team uses, for example with <code>golang.org/x/sync</code>) :
 604  </p>
 605
 606  <ul class="org-ul">
 607  <li><code>x/subtest</code> that provides a <code>TestContext</code> to subtests which handles cleanup and provides a <code>testing.TB</code> and <code>context.Context</code>.</li>
 608  </ul>
 609
 610  <p>
 611  There is already some good <code>testing</code> helpers in the Go ecosystem : <a href="https://github.com/stretchr/testify"><code>testify</code></a>, <a href="http://labix.org/gocheck"><code>gocheck</code></a>, <a href="https://github.com/onsi/ginkgo"><code>ginkgo</code></a> and a lot more — so
 612  why create a new one ? There is multiple reason for it, most of them can be seen in the following <a href="https://github.com/gotestyourself/gotest.tools/issues/49#issuecomment-362436026">GitHub issue</a>.
 613  </p>
 614
 615  <p>
 616  <a href="https://github.com/dnephin/">Daniel</a> also wrote a very useful converter if your code base is currently using <code>testify</code> : <code>gty-migrate-from-testify</code>.
 617  </p>
 618
 619  <div class="org-src-container">
 620  <pre class="src src-sh">$ go get -u gotest.tools/assert/cmd/gty-migrate-from-testify
 621  <span class="org-comment-delimiter"># </span><span class="org-comment">[&#8230;]</span>
 622  $ go list <span class="org-sh-escaped-newline">\</span>
 623  -f <span class="org-string">'{{.ImportPath}} {{if .XTestGoFiles}}{{"\n"}}{{.ImportPath}}_test{{end}}'</span> <span class="org-sh-escaped-newline">\</span>
 624  ./... | xargs gty-migrate-from-testify
 625  </pre>
 626  </div>
 627
 628  <p>
 629  In the next post, let's dig into the assertion part of the library, package <code>assert</code> 👼.
 630  </p>
 631
 632  <p>
 633  <a href="legacy/posts/2018-07-28-gotest-tools-intro.html">(Read more)</a>
 634  </p>
 635  ]]></description>
 636</item>
 637
 638<item>
 639  <title>Redesign et Résolutions</title>
 640  <link>https://vincent.demeester.fr/legacy/posts/2014-03-24-redesign-et-résolutions.html</link>
 641  <author>Vincent Demeester</author>
 642  <guid isPermaLink="false">2014-03-24-redesign-et-résolutions.org</guid>
 643  <pubDate>Mon, 24 Mar 2014 00:00:00 +0100</pubDate>
 644
 645  <description><![CDATA[<p>
 646  Un <i>tout petit</i> post pour parler rapidement, entre autre, du redesign de
 647  <a href="http://vincent.demeester.fr">vincent.demeester.fr</a> et de mes
 648  résolutions.
 649  </p>
 650
 651
 652  <p>
 653  <a href="legacy/posts/2014-03-24-redesign-et-résolutions.html">(Read more)</a>
 654  </p>
 655  ]]></description>
 656</item>
 657
 658<item>
 659  <title>Podcasts</title>
 660  <link>https://vincent.demeester.fr/legacy/posts/2013-10-12-podcasts.html</link>
 661  <author>Vincent Demeester</author>
 662  <guid isPermaLink="false">2013-10-12-podcasts.org</guid>
 663  <pubDate>Sat, 12 Oct 2013 00:00:00 +0200</pubDate>
 664
 665  <description><![CDATA[<blockquote>
 666  <p>
 667  Voici un petit billet présentant les différents podcast que j'écoute
 668  plus ou moins régulièrement.
 669  </p>
 670  </blockquote>
 671
 672  <p>
 673  J'écoute énormément de musique et de podcast ; je passe beaucoup de
 674  temps avec des écouteurs sur la tête ou la chaine hifi en route. Les
 675  podcasts ont une grande place. Voici une liste plus ou moins bien triés
 676  de ceux auxquels je suis souscrit et/ou que j'écoute en ce moment. Je
 677  tiendrais peut-être ce post à jour ou en créerait un nouveau sinon :-).
 678  </p>
 679
 680
 681  <p>
 682  <a href="legacy/posts/2013-10-12-podcasts.html">(Read more)</a>
 683  </p>
 684  ]]></description>
 685</item>
 686
 687<item>
 688  <title>Maven Tmpfs</title>
 689  <link>https://vincent.demeester.fr/legacy/posts/2013-09-08-maven-tmpfs.html</link>
 690  <author>Vincent Demeester</author>
 691  <guid isPermaLink="false">2013-09-08-maven-tmpfs.org</guid>
 692  <pubDate>Sun, 08 Sep 2013 00:00:00 +0200</pubDate>
 693
 694  <description><![CDATA[<p>
 695  Je suis un utilisateur convaincu de <a href="http://maven.apache.org/">maven</a>, malgré ces défauts, le
 696  moto <b>"Convention over configuration"</b> me va vraiment bien. Que ce soit
 697  au boulot ou à la maison, j'ai plus d'ordinateurs équipés de ssd (ou de
 698  mémoire flash) que de disque traditionnel (mécanique ?). Pour augmenter
 699  un peu la durée de vie de ces disques SSD, j'ai cherché à savoir comment
 700  <i>déporter</i> le <i>build</i> de maven (qui, pour rappel, se passe dans le
 701  dossier <code>target/</code>) hors du SSD ; ici ce sera dans le dossier <code>/tmp/</code> qui
 702  est monté en mémoire (merci <code>tmpfs</code>), mais on peut imaginer déporter ça
 703  sur un autre disque, etc.. Après quelques recherches j'ai trouvés
 704  quelques inspirations.
 705  </p>
 706
 707  <blockquote>
 708  <p>
 709  <b>Limitations</b>
 710  </p>
 711
 712  <p>
 713  Dans la solution présentée ci-dessous les principales limitations sont
 714  les suivantes (que j'essaierais de diminuer au fil du temp ;P) :
 715  </p>
 716
 717  <ol class="org-ol">
 718  <li>Il est nécessaire de modifier le pom.xml du projet ; cela ne
 719  s'appliquera donc pas à tous les projets maven sans modification du
 720  pom.xml.</li>
 721  <li>Cela ne fonctionne que sur une plateforme qui support les liens
 722  symboliques (Linux, Mac OS X, et autre UNIX).</li>
 723  <li>Cela ne fonctionne qu'avec Java 7 ou plus.</li>
 724  <li>Si vous utilisez m2e, il va gentillement gueuler et c'est moche ; pour résoudre le
 725  problème, il faut faire un tour vers <a href="http://wiki.eclipse.org/M2E_plugin_execution_not_covered">M2E plugin execution not covered</a>.</li>
 726  </ol>
 727  </blockquote>
 728
 729  <p>
 730  Pour <a href="http://maven.apache.org/">maven</a>, le dossier <code>target/</code> vient de la propriété
 731  <code>project.build.directory</code>. Dans la théorie, il suffirait de modifier
 732  (dans <code>$HOME/.m2/settings.xml</code>) cette propriété et le tour serait jouer.
 733  Malheuresement ce n'est pas possible, <code>project.build.directory</code> est une
 734  propriété interne et n'est, à priori, pas modifiable.
 735  </p>
 736
 737  <p>
 738  Notre souhait est le suivant :
 739  </p>
 740
 741  <ol class="org-ol">
 742  <li>Le build doit se faire dans <code>/tmp/m2/</code>, ce qui pour un projet se
 743  traduit par <code>/tmp/m2/${groupId}:${artifactId}</code>.</li>
 744  <li>Le dossier <code>target/</code> dans les sources est un lien symbolique vers le
 745  dossier dans <code>/tmp/m2/</code></li>
 746  <li>On passe par un <b>profile</b> qui n'est <b>pas actif</b> par défaut (pour ne
 747  pas faire chier le monde) mais <b>activable via une propriété</b> (maven
 748  nous permet de le faire et c'est cool <code>^_^</code>). La propriété utilisée
 749  sera <code>external.build.root</code>.</li>
 750  </ol>
 751
 752  <p>
 753  Le code ci-dessous est repris directement de mon inspiration<sup><a id="fnr.1.100" class="footref" href="#fn.1" role="doc-backlink">1</a></sup>. Il
 754  s'occupe de créer le dossier <code>${groupId}:${artifactId}</code> dans
 755  <code>external.build.root</code> et de faire le lien dans le dossier courant.
 756  </p>
 757
 758  <div class="org-src-container">
 759  <pre class="src src-xml"><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">project</span><span class="org-nxml-tag-delimiter">&gt;</span>
 760  <span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">[&#8230;]</span><span class="org-comment-delimiter"> --&gt;</span>
 761  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">profiles</span><span class="org-nxml-tag-delimiter">&gt;</span>
 762  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">profile</span><span class="org-nxml-tag-delimiter">&gt;</span>
 763  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">id</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">external-build-dir</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">id</span><span class="org-nxml-tag-delimiter">&gt;</span>
 764  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">activation</span><span class="org-nxml-tag-delimiter">&gt;</span>
 765  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">activeByDefault</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">false</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">activeByDefault</span><span class="org-nxml-tag-delimiter">&gt;</span>
 766  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">property</span><span class="org-nxml-tag-delimiter">&gt;</span>
 767  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">name</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">external.build.root</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">name</span><span class="org-nxml-tag-delimiter">&gt;</span>
 768  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">property</span><span class="org-nxml-tag-delimiter">&gt;</span>
 769  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">activation</span><span class="org-nxml-tag-delimiter">&gt;</span>
 770  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">build</span><span class="org-nxml-tag-delimiter">&gt;</span>
 771  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">plugins</span><span class="org-nxml-tag-delimiter">&gt;</span>
 772  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">plugin</span><span class="org-nxml-tag-delimiter">&gt;</span>
 773  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">groupId</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">com.alexecollins.maven.plugin</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">groupId</span><span class="org-nxml-tag-delimiter">&gt;</span>
 774  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">artifactId</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">script-maven-plugin</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">artifactId</span><span class="org-nxml-tag-delimiter">&gt;</span>
 775  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">version</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">1.0.0</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">version</span><span class="org-nxml-tag-delimiter">&gt;</span>
 776  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">executions</span><span class="org-nxml-tag-delimiter">&gt;</span>
 777  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">execution</span><span class="org-nxml-tag-delimiter">&gt;</span>
 778  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">id</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">prep-work-tree</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">id</span><span class="org-nxml-tag-delimiter">&gt;</span>
 779  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">goals</span><span class="org-nxml-tag-delimiter">&gt;</span>
 780  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">goal</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">execute</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">goal</span><span class="org-nxml-tag-delimiter">&gt;</span>
 781  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">goals</span><span class="org-nxml-tag-delimiter">&gt;</span>
 782  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">phase</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">initialize</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">phase</span><span class="org-nxml-tag-delimiter">&gt;</span>
 783  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">configuration</span><span class="org-nxml-tag-delimiter">&gt;</span>
 784  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">script</span><span class="org-nxml-tag-delimiter">&gt;</span>
 785  <span class="org-nxml-text">                                        import java.nio.file.*</span>
 786  <span class="org-nxml-text">                                        def dir =</span>
 787  <span class="org-nxml-text">                                        "${external.build.root}/${project.groupId}:${project.artifactId}"</span>
 788  <span class="org-nxml-text">                                        println "using Maven dir ${dir}"</span>
 789  <span class="org-nxml-text">                                        def dirPath = Paths.get(dir)</span>
 790  <span class="org-nxml-text">                                        if (!Files.exists(dirPath)) {</span>
 791  <span class="org-nxml-text">                                        Files.createDirectories(dirPath)</span>
 792  <span class="org-nxml-text">                                        }</span>
 793  <span class="org-nxml-text">                                        def target = Paths.get("${project.build.directory}")</span>
 794  <span class="org-nxml-text">                                        if (!Files.exists(target)) {</span>
 795  <span class="org-nxml-text">                                        Files.createSymbolicLink(target, dirPath)</span>
 796  <span class="org-nxml-text">                                        }</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">script</span><span class="org-nxml-tag-delimiter">&gt;</span>
 797  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">configuration</span><span class="org-nxml-tag-delimiter">&gt;</span>
 798  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">execution</span><span class="org-nxml-tag-delimiter">&gt;</span>
 799  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">execution</span><span class="org-nxml-tag-delimiter">&gt;</span>
 800  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">id</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">drop-symlink</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">id</span><span class="org-nxml-tag-delimiter">&gt;</span>
 801  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">goals</span><span class="org-nxml-tag-delimiter">&gt;</span>
 802  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">goal</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">execute</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">goal</span><span class="org-nxml-tag-delimiter">&gt;</span>
 803  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">goals</span><span class="org-nxml-tag-delimiter">&gt;</span>
 804  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">phase</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">clean</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">phase</span><span class="org-nxml-tag-delimiter">&gt;</span>
 805  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">configuration</span><span class="org-nxml-tag-delimiter">&gt;</span>
 806  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">script</span><span class="org-nxml-tag-delimiter">&gt;</span>
 807  <span class="org-nxml-text">                                        import java.nio.file.*</span>
 808  <span class="org-nxml-text">                                        def target = Paths.get("${project.build.directory}")</span>
 809  <span class="org-nxml-text">                                        if (Files.isSymbolicLink(target)) {</span>
 810  <span class="org-nxml-text">                                        Files.delete(target)</span>
 811  <span class="org-nxml-text">                                        }</span>
 812  <span class="org-nxml-text">                                    </span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">script</span><span class="org-nxml-tag-delimiter">&gt;</span>
 813  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">configuration</span><span class="org-nxml-tag-delimiter">&gt;</span>
 814  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">execution</span><span class="org-nxml-tag-delimiter">&gt;</span>
 815  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">executions</span><span class="org-nxml-tag-delimiter">&gt;</span>
 816  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">dependencies</span><span class="org-nxml-tag-delimiter">&gt;</span>
 817  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">dependency</span><span class="org-nxml-tag-delimiter">&gt;</span>
 818  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">groupId</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">org.codehaus.groovy</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">groupId</span><span class="org-nxml-tag-delimiter">&gt;</span>
 819  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">artifactId</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">groovy</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">artifactId</span><span class="org-nxml-tag-delimiter">&gt;</span>
 820  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">version</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">1.8.6</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">version</span><span class="org-nxml-tag-delimiter">&gt;</span>
 821  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">dependency</span><span class="org-nxml-tag-delimiter">&gt;</span>
 822  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">dependencies</span><span class="org-nxml-tag-delimiter">&gt;</span>
 823  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">configuration</span><span class="org-nxml-tag-delimiter">&gt;</span>
 824  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">language</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">groovy</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">language</span><span class="org-nxml-tag-delimiter">&gt;</span>
 825  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">configuration</span><span class="org-nxml-tag-delimiter">&gt;</span>
 826  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">plugin</span><span class="org-nxml-tag-delimiter">&gt;</span>
 827  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">plugins</span><span class="org-nxml-tag-delimiter">&gt;</span>
 828  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">build</span><span class="org-nxml-tag-delimiter">&gt;</span>
 829  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">profile</span><span class="org-nxml-tag-delimiter">&gt;</span>
 830  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">profiles</span><span class="org-nxml-tag-delimiter">&gt;</span>
 831  <span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">[&#8230;]</span><span class="org-comment-delimiter"> --&gt;</span>
 832  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">project</span><span class="org-nxml-tag-delimiter">&gt;</span>
 833  </pre>
 834  </div>
 835
 836  <p>
 837  Ainsi, il suffit ensuite d'avoir quelques choses du genre dans son
 838  <code>$HOME/.m2/settings.xml</code> pour que les builds qui ont ce profil se
 839  <i>build</i> dans <code>/tmp/m2/</code>. On peut aussi ne rien avoir dans
 840  <code>$HOME/.m2/settings.xml</code> et utilise <code>-Dexternal.build.root=/tmp/m2/</code>
 841  avec la commande <code>mvn</code>.
 842  </p>
 843
 844  <div class="org-src-container">
 845  <pre class="src src-xml"><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">settings</span><span class="org-nxml-tag-delimiter">&gt;</span>
 846  <span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">[&#8230;]</span><span class="org-comment-delimiter"> --&gt;</span>
 847  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">profiles</span><span class="org-nxml-tag-delimiter">&gt;</span>
 848  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">profile</span><span class="org-nxml-tag-delimiter">&gt;</span>
 849  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">id</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">build-in-ramfs</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">id</span><span class="org-nxml-tag-delimiter">&gt;</span>
 850  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">properties</span><span class="org-nxml-tag-delimiter">&gt;</span>
 851  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">external.build.root</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">/tmp/m2/</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">external.build.root</span><span class="org-nxml-tag-delimiter">&gt;</span>
 852  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">properties</span><span class="org-nxml-tag-delimiter">&gt;</span>
 853  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">profile</span><span class="org-nxml-tag-delimiter">&gt;</span>
 854  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">profiles</span><span class="org-nxml-tag-delimiter">&gt;</span>
 855  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">activeProfiles</span><span class="org-nxml-tag-delimiter">&gt;</span>
 856  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">activeProfile</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">build-in-ramfs</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">activeProfile</span><span class="org-nxml-tag-delimiter">&gt;</span>
 857  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">activeProfiles</span><span class="org-nxml-tag-delimiter">&gt;</span>
 858  <span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">[&#8230;]</span><span class="org-comment-delimiter"> --&gt;</span>
 859  <span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">settings</span><span class="org-nxml-tag-delimiter">&gt;</span>
 860  </pre>
 861  </div>
 862  ]]></description>
 863</item>
 864
 865<item>
 866  <title>Gollum comme Wiki personnel</title>
 867  <link>https://vincent.demeester.fr/legacy/posts/2012-12-16-gollum-comme-wiki-personnel.html</link>
 868  <author>Vincent Demeester</author>
 869  <guid isPermaLink="false">2012-12-16-gollum-comme-wiki-personnel.org</guid>
 870  <pubDate>Sun, 16 Dec 2012 00:00:00 +0100</pubDate>
 871
 872  <description><![CDATA[<p>
 873  Il y a environ 4 mois j'ai eu un accident de vélo ; un traumatisme
 874  crânien, des brulures sur la face, quelques points de sutures, un doigt
 875  cassé et une hernie discale m'ont cloué (et me clou encore) plus que
 876  d'habitude sur ma chaise de bureau. Le bon côté des choses, c'est que
 877  cela m'a permit de me poser et de réfléchir une bonne façon d'être
 878  efficace et organiser, au travail et à la maison :-).
 879  </p>
 880
 881  <p>
 882  Une des principales <i>action</i> que j'ai pris est d'utiliser un wiki local
 883  et synchronisé sur <i>tout</i> mes PCs. Le <i>format</i> wiki est assez adapté à
 884  une prise de note et à la création de contenu plus complet (comme des
 885  <a href="http://shortbrain.org">articles</a> ou de la documentation pour des
 886  projets en cours). Les conditions étaient les suivantes :
 887  </p>
 888
 889  <ul class="org-ul">
 890  <li>Facilité de mise en place.</li>
 891  <li>Pas de base de données.</li>
 892  <li><i>Merging</i> facile (<a href="http://git-scm.com">git</a> <i>rules my world</i>).</li>
 893  <li><a href="http://daringfireball.net/projects/markdown/">Markdown</a> comme
 894  syntaxe, car utilisé à peu près partout (blogs, articles, READMEs,
 895  documentations).</li>
 896  <li>Éditable à partir d'une interface web ou de mon éditeur favoris.</li>
 897  </ul>
 898
 899  <p>
 900  L'outil qui remplit presque toutes ces conditions s'appelle
 901  <a href="https://github.com/github/gollum">gollum</a>. C'est un moteur wiki,
 902  écris en ruby, qui se base sur un repository
 903  <a href="http://git-scm.com">git</a>. Il est développer par l'équipe de
 904  <a href="http://github.com">Github</a> et c'est celui qui est utilisé par les
 905  pages wiki là-bas. Il permet d'utiliser à peu près n'importe quel
 906  syntaxe (dont
 907  <a href="https://github.com/github/github-flavored-markdown">github-markdown</a>
 908  qui est assez proche de celle de
 909  <a href="http://johnmacfarlane.net/pandoc">pandoc</a>). Par ailleurs, comme il se
 910  base sur <a href="http://git-scm.com">git</a>, les points <i>"pas de base de
 911  données"</i>, <i>"merging facile"</i> et <i>"éditable également à partir de mon
 912  éditeur favoris"</i> sont toutes remplies.
 913  </p>
 914
 915  <p>
 916  Avec <a href="https://github.com/github/gollum">Gollum</a> vous avez un wiki
 917  markdown décentralisé, éditable via une interface web ou via votre
 918  éditeur favoris.
 919  </p>
 920
 921
 922  <p>
 923  <a href="legacy/posts/2012-12-16-gollum-comme-wiki-personnel.html">(Read more)</a>
 924  </p>
 925  ]]></description>
 926</item>
 927
 928<item>
 929  <title>Maven Release Gitflow</title>
 930  <link>https://vincent.demeester.fr/legacy/posts/2012-07-23-maven-release-gitflow.html</link>
 931  <author>Vincent Demeester</author>
 932  <guid isPermaLink="false">2012-07-23-maven-release-gitflow.org</guid>
 933  <pubDate>Mon, 23 Jul 2012 00:00:00 +0200</pubDate>
 934
 935  <description><![CDATA[<p>
 936  I like a lot the <a href="http://nvie.com/posts/a-successful-git-branching-model/">gitflow</a> way of managing project. When working on maven project, there is
 937  few great plugins that helps to get the work done. One of them is <a href="http://maven.apache.org/plugins/maven-release-plugin">maven-release-plugin</a>.
 938  </p>
 939
 940  <p>
 941  Inspired on this <a href="https://gist.github.com/1043970">gist</a>, I've come
 942  with a cool way of doing things (let say we want to release a 0.1
 943  version of an artifact) :
 944  </p>
 945
 946
 947  <p>
 948  <a href="legacy/posts/2012-07-23-maven-release-gitflow.html">(Read more)</a>
 949  </p>
 950  ]]></description>
 951</item>
 952
 953<item>
 954  <title>Jekyll Forman Guard Bundler</title>
 955  <link>https://vincent.demeester.fr/legacy/posts/2012-05-13-jekyll-foreman-guard-bundler.html</link>
 956  <author>Vincent Demeester</author>
 957  <guid isPermaLink="false">2012-05-13-jekyll-foreman-guard-bundler.org</guid>
 958  <pubDate>Sun, 13 May 2012 00:00:00 +0200</pubDate>
 959
 960  <description><![CDATA[<p>
 961  This post is a quick "How did I setup my Jekyll environnement ?". We are
 962  going all the tools that are quite awesome in Ruby.
 963  </p>
 964
 965
 966  <p>
 967  <a href="legacy/posts/2012-05-13-jekyll-foreman-guard-bundler.html">(Read more)</a>
 968  </p>
 969  ]]></description>
 970</item>
 971
 972<item>
 973  <title>Gitolite quick and dirty mirror</title>
 974  <link>https://vincent.demeester.fr/legacy/posts/2012-05-08-gitolite-quick-and-dirty-mirror.html</link>
 975  <author>Vincent Demeester</author>
 976  <guid isPermaLink="false">2012-05-08-gitolite-quick-and-dirty-mirror.org</guid>
 977  <pubDate>Tue, 08 May 2012 00:00:00 +0200</pubDate>
 978
 979  <description><![CDATA[<p>
 980  I'm running a gitolite <span class="underline">instance</span> on my personal server to manage my repositories
 981  (personnal, private or public) ; and I am quickly going to share with you how I setup a
 982  <span class="underline">quick and dirty</span> mirror feature.
 983  </p>
 984
 985  <p>
 986  First, I am using <b><b>gitolite 3</b></b>. The mirroring we are going to setup is not the
 987  <span class="underline">supported</span> <a href="http://sitaramc.github.com/gitolite/mirroring.html">mirroring <b>built-in</b></a>.  We are going to implement a simplier way to set mirror
 988  thing :
 989  </p>
 990
 991  <ol class="org-ol">
 992  <li>Write a custom gitolite command ; the idea is to be able to write <code>git-config</code> stuff.</li>
 993  <li>Write a hook that take a specific <code>git-config</code> (let say <code>mirror.url</code>) and do a simple
 994  mirroring.</li>
 995  </ol>
 996
 997
 998  <p>
 999  <a href="legacy/posts/2012-05-08-gitolite-quick-and-dirty-mirror.html">(Read more)</a>
1000  </p>
1001  ]]></description>
1002</item>
1003
1004<item>
1005  <title>Reinit and Jekyll</title>
1006  <link>https://vincent.demeester.fr/legacy/posts/2012-05-07-reinit-and-jekyll.html</link>
1007  <author>Vincent Demeester</author>
1008  <guid isPermaLink="false">2012-05-07-reinit-and-jekyll.org</guid>
1009  <pubDate>Mon, 07 May 2012 00:00:00 +0200</pubDate>
1010
1011  <description><![CDATA[<p>
1012  Two weeks ago, my <i>online</i> personal server has been attacked and,
1013  somehow, died. I'm in the process of re-installation of it but I'm going
1014  to hardened a bit the security on it. Anyway, this crash meant that
1015  every piece of site I maintain has been down. That's why I moved this
1016  <i>identity site</i> on the github pages, using a CNAME ; That way I can
1017  crash as much as I want my server(s), this page should still be up for a
1018  while.
1019  </p>
1020
1021  <p>
1022  And I'm switching on Jekyll for this website as It is supported by
1023  Github page, easy to use and easy to deploy elsewhere (if one day I want
1024  to move from Github).
1025  </p>
1026
1027  <p>
1028  The rest of the post is going to be used as a <i>sandbox</i> post to test the
1029  site styles.
1030  </p>
1031
1032  <blockquote>
1033  <p>
1034  This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
1035  consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
1036  Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
1037  </p>
1038
1039  <p>
1040  Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
1041  id sem consectetuer libero luctus adipiscing.
1042  </p>
1043  </blockquote>
1044
1045
1046  <p>
1047  <a href="legacy/posts/2012-05-07-reinit-and-jekyll.html">(Read more)</a>
1048  </p>
1049  ]]></description>
1050</item>
1051<div id="footnotes">
1052  <h2 class="footnotes">Footnotes: </h2>
1053  <div id="text-footnotes">
1054
1055    <div class="footdef"><sup><a id="fn.1" class="footnum" href="#fnr.1" role="doc-backlink">1</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
1056    <a href="https://punchagan.muse-amuse.in/blog/2018-in-review/">2018 in Review - Noetic Nought</a>
1057    </p></div></div>
1058
1059    <div class="footdef"><sup><a id="fn.2" class="footnum" href="#fnr.2" role="doc-backlink">2</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
1060    <a href="https://medium.com/@buster/42-dig-deeper-e2278d1fe015">42 — Dig deeper – Buster Benson – Medium</a>
1061    </p></div></div>
1062
1063    <div class="footdef"><sup><a id="fn.3" class="footnum" href="#fnr.3" role="doc-backlink">3</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
1064    <a href="https://jvns.ca/blog/2018/12/23/2018--year-in-review/">2018: Year in review - Julia Evans</a>
1065    </p></div></div>
1066
1067    <div class="footdef"><sup><a id="fn.4" class="footnum" href="#fnr.4" role="doc-backlink">4</a></sup> <div class="footpara" role="doc-footnote"><p class="footpara">
1068    <a href="https://writing.natwelch.com/post/685">Nat? Nat. Nat! | #685 2018 Year in Review</a>
1069    </p></div></div>
1070
1071
1072  </div>
1073</div></channel>
1074</rss>