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> >= <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 <FLAGS>... <INSTALLABLES>...
236
237 Summary: run a shell in which the specified packages are available.
238
239 Flags:
240 --arg <NAME> <EXPR> argument to be passed to Nix functions
241 --argstr <NAME> <STRING> string-valued argument to be passed to Nix functions
242 -c, --command <COMMAND> <ARGS> command and arguments to be executed; defaults to 'bash'
243 -f, --file <FILE> evaluate FILE rather than the default
244 -i, --ignore-environment clear the entire environment (except those specified with --keep)
245 -I, --include <PATH> add a path to the list of locations used to look up <...> file names
246 -k, --keep <NAME> keep specified environment variable
247 -u, --unset <NAME> 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> := &<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 < version("v1.24")</span>
502 skip.<span class="org-function-name">If</span>(t, apiVersion < <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">[…]</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"><</span><span class="org-nxml-element-local-name">project</span><span class="org-nxml-tag-delimiter">></span>
760 <span class="org-comment-delimiter"><!-- </span><span class="org-comment">[…]</span><span class="org-comment-delimiter"> --></span>
761 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">profiles</span><span class="org-nxml-tag-delimiter">></span>
762 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">profile</span><span class="org-nxml-tag-delimiter">></span>
763 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">id</span><span class="org-nxml-tag-delimiter">></span><span class="org-nxml-text">external-build-dir</span><span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">id</span><span class="org-nxml-tag-delimiter">></span>
764 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">activation</span><span class="org-nxml-tag-delimiter">></span>
765 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">activeByDefault</span><span class="org-nxml-tag-delimiter">></span><span class="org-nxml-text">false</span><span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">activeByDefault</span><span class="org-nxml-tag-delimiter">></span>
766 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">property</span><span class="org-nxml-tag-delimiter">></span>
767 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">name</span><span class="org-nxml-tag-delimiter">></span><span class="org-nxml-text">external.build.root</span><span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">name</span><span class="org-nxml-tag-delimiter">></span>
768 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">property</span><span class="org-nxml-tag-delimiter">></span>
769 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">activation</span><span class="org-nxml-tag-delimiter">></span>
770 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">build</span><span class="org-nxml-tag-delimiter">></span>
771 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">plugins</span><span class="org-nxml-tag-delimiter">></span>
772 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">plugin</span><span class="org-nxml-tag-delimiter">></span>
773 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">groupId</span><span class="org-nxml-tag-delimiter">></span><span class="org-nxml-text">com.alexecollins.maven.plugin</span><span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">groupId</span><span class="org-nxml-tag-delimiter">></span>
774 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">artifactId</span><span class="org-nxml-tag-delimiter">></span><span class="org-nxml-text">script-maven-plugin</span><span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">artifactId</span><span class="org-nxml-tag-delimiter">></span>
775 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">version</span><span class="org-nxml-tag-delimiter">></span><span class="org-nxml-text">1.0.0</span><span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">version</span><span class="org-nxml-tag-delimiter">></span>
776 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">executions</span><span class="org-nxml-tag-delimiter">></span>
777 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">execution</span><span class="org-nxml-tag-delimiter">></span>
778 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">id</span><span class="org-nxml-tag-delimiter">></span><span class="org-nxml-text">prep-work-tree</span><span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">id</span><span class="org-nxml-tag-delimiter">></span>
779 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">goals</span><span class="org-nxml-tag-delimiter">></span>
780 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">goal</span><span class="org-nxml-tag-delimiter">></span><span class="org-nxml-text">execute</span><span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">goal</span><span class="org-nxml-tag-delimiter">></span>
781 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">goals</span><span class="org-nxml-tag-delimiter">></span>
782 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">phase</span><span class="org-nxml-tag-delimiter">></span><span class="org-nxml-text">initialize</span><span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">phase</span><span class="org-nxml-tag-delimiter">></span>
783 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">configuration</span><span class="org-nxml-tag-delimiter">></span>
784 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">script</span><span class="org-nxml-tag-delimiter">></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"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">script</span><span class="org-nxml-tag-delimiter">></span>
797 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">configuration</span><span class="org-nxml-tag-delimiter">></span>
798 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">execution</span><span class="org-nxml-tag-delimiter">></span>
799 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">execution</span><span class="org-nxml-tag-delimiter">></span>
800 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">id</span><span class="org-nxml-tag-delimiter">></span><span class="org-nxml-text">drop-symlink</span><span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">id</span><span class="org-nxml-tag-delimiter">></span>
801 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">goals</span><span class="org-nxml-tag-delimiter">></span>
802 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">goal</span><span class="org-nxml-tag-delimiter">></span><span class="org-nxml-text">execute</span><span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">goal</span><span class="org-nxml-tag-delimiter">></span>
803 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">goals</span><span class="org-nxml-tag-delimiter">></span>
804 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">phase</span><span class="org-nxml-tag-delimiter">></span><span class="org-nxml-text">clean</span><span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">phase</span><span class="org-nxml-tag-delimiter">></span>
805 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">configuration</span><span class="org-nxml-tag-delimiter">></span>
806 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">script</span><span class="org-nxml-tag-delimiter">></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"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">script</span><span class="org-nxml-tag-delimiter">></span>
813 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">configuration</span><span class="org-nxml-tag-delimiter">></span>
814 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">execution</span><span class="org-nxml-tag-delimiter">></span>
815 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">executions</span><span class="org-nxml-tag-delimiter">></span>
816 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">dependencies</span><span class="org-nxml-tag-delimiter">></span>
817 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">dependency</span><span class="org-nxml-tag-delimiter">></span>
818 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">groupId</span><span class="org-nxml-tag-delimiter">></span><span class="org-nxml-text">org.codehaus.groovy</span><span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">groupId</span><span class="org-nxml-tag-delimiter">></span>
819 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">artifactId</span><span class="org-nxml-tag-delimiter">></span><span class="org-nxml-text">groovy</span><span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">artifactId</span><span class="org-nxml-tag-delimiter">></span>
820 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">version</span><span class="org-nxml-tag-delimiter">></span><span class="org-nxml-text">1.8.6</span><span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">version</span><span class="org-nxml-tag-delimiter">></span>
821 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">dependency</span><span class="org-nxml-tag-delimiter">></span>
822 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">dependencies</span><span class="org-nxml-tag-delimiter">></span>
823 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">configuration</span><span class="org-nxml-tag-delimiter">></span>
824 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">language</span><span class="org-nxml-tag-delimiter">></span><span class="org-nxml-text">groovy</span><span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">language</span><span class="org-nxml-tag-delimiter">></span>
825 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">configuration</span><span class="org-nxml-tag-delimiter">></span>
826 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">plugin</span><span class="org-nxml-tag-delimiter">></span>
827 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">plugins</span><span class="org-nxml-tag-delimiter">></span>
828 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">build</span><span class="org-nxml-tag-delimiter">></span>
829 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">profile</span><span class="org-nxml-tag-delimiter">></span>
830 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">profiles</span><span class="org-nxml-tag-delimiter">></span>
831 <span class="org-comment-delimiter"><!-- </span><span class="org-comment">[…]</span><span class="org-comment-delimiter"> --></span>
832 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">project</span><span class="org-nxml-tag-delimiter">></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"><</span><span class="org-nxml-element-local-name">settings</span><span class="org-nxml-tag-delimiter">></span>
846 <span class="org-comment-delimiter"><!-- </span><span class="org-comment">[…]</span><span class="org-comment-delimiter"> --></span>
847 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">profiles</span><span class="org-nxml-tag-delimiter">></span>
848 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">profile</span><span class="org-nxml-tag-delimiter">></span>
849 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">id</span><span class="org-nxml-tag-delimiter">></span><span class="org-nxml-text">build-in-ramfs</span><span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">id</span><span class="org-nxml-tag-delimiter">></span>
850 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">properties</span><span class="org-nxml-tag-delimiter">></span>
851 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">external.build.root</span><span class="org-nxml-tag-delimiter">></span><span class="org-nxml-text">/tmp/m2/</span><span class="org-nxml-tag-delimiter"><</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">></span>
852 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">properties</span><span class="org-nxml-tag-delimiter">></span>
853 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">profile</span><span class="org-nxml-tag-delimiter">></span>
854 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">profiles</span><span class="org-nxml-tag-delimiter">></span>
855 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">activeProfiles</span><span class="org-nxml-tag-delimiter">></span>
856 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-element-local-name">activeProfile</span><span class="org-nxml-tag-delimiter">></span><span class="org-nxml-text">build-in-ramfs</span><span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">activeProfile</span><span class="org-nxml-tag-delimiter">></span>
857 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">activeProfiles</span><span class="org-nxml-tag-delimiter">></span>
858 <span class="org-comment-delimiter"><!-- </span><span class="org-comment">[…]</span><span class="org-comment-delimiter"> --></span>
859 <span class="org-nxml-tag-delimiter"><</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">settings</span><span class="org-nxml-tag-delimiter">></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>