<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Aloïs Micard</title>
    <link>/</link>
    <description>Recent content on Aloïs Micard</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Fri, 12 Nov 2021 00:00:00 +0000</lastBuildDate>
    <atom:link href="/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Laravel: beware of $touches</title>
      <link>/2021/11/laravel-beware-of-touches/</link>
      <pubDate>Fri, 12 Nov 2021 00:00:00 +0000</pubDate>
      <guid>/2021/11/laravel-beware-of-touches/</guid>
      <description>&lt;p&gt;I have been using Laravel professionally since almost 1year, and I must say: I&amp;rsquo;m very impressed with the framework.&#xA;Everything&amp;rsquo;s run smoothly, there&amp;rsquo;s a feature for &lt;em&gt;(almost everything)&lt;/em&gt; you can think of, so you &lt;em&gt;(almost)&lt;/em&gt; never need to&#xA;reinvent the wheel.&lt;/p&gt;&#xA;&lt;p&gt;This is very advantageous since you only focus on building your product features by features and spend less time working&#xA;on technical stuff who are less business valuable.&lt;/p&gt;&#xA;&lt;h1 id=&#34;everything-is-fine-until-its-not&#34;&gt;Everything is fine&amp;hellip; until it&amp;rsquo;s not.&lt;/h1&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;Recently we have faced really weird MySQL error at work:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Laravel dynamic SMTP mail configuration</title>
      <link>/2021/11/laravel-dynamic-smtp-mail-configuration/</link>
      <pubDate>Tue, 09 Nov 2021 00:00:00 +0000</pubDate>
      <guid>/2021/11/laravel-dynamic-smtp-mail-configuration/</guid>
      <description>&lt;p&gt;Hello friend&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;It has been a while.&lt;/p&gt;&#xA;&lt;p&gt;I have been very busy lately with work, open source and &lt;em&gt;life&lt;/em&gt; that I didn&amp;rsquo;t find the energy to write a blog post.&#xA;Despite having some good ideas, I wasn&amp;rsquo;t really in the mood.&lt;/p&gt;&#xA;&lt;p&gt;Hopefully, I now have the energy and the subject to make a good blog post: let&amp;rsquo;s talk&#xA;about &lt;a href=&#34;https://laravel.com/&#34;&gt;Laravel&lt;/a&gt; and emails!&lt;/p&gt;&#xA;&lt;h1 id=&#34;1-laravel-and-smtp&#34;&gt;1. Laravel and SMTP&lt;/h1&gt;&#xA;&lt;h2 id=&#34;11-configuration&#34;&gt;1.1. Configuration&lt;/h2&gt;&#xA;&lt;p&gt;Laravel SMTP &lt;a href=&#34;https://laravel.com/docs/8.x/mail&#34;&gt;Mail&lt;/a&gt; support is truly awesome and work out-of-the-box without&#xA;requiring anything more than a few env variables:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Parakeet: an IRC log renderer</title>
      <link>/2021/08/parakeet-an-irc-log-renderer/</link>
      <pubDate>Mon, 09 Aug 2021 00:00:00 +0000</pubDate>
      <guid>/2021/08/parakeet-an-irc-log-renderer/</guid>
      <description>&lt;p&gt;I have started using a lot IRC lately since I became a &lt;a href=&#34;https://wiki.debian.org/DebianDeveloper&#34;&gt;Debian Developer&lt;/a&gt; (Debian&#xA;use a lot IRC and mailing lists to communicate).&lt;/p&gt;&#xA;&lt;p&gt;For those who don&amp;rsquo;t know what IRC is: it&amp;rsquo;s basically the ancestor of modern chat messaging&#xA;like &lt;a href=&#34;https://discord.com/&#34;&gt;Discord&lt;/a&gt;. IRC is a quite old piece of technology, coming from 1988.&lt;/p&gt;&#xA;&lt;p&gt;One big drawbacks of IRC is that there&amp;rsquo;s no such thing as a history, you need to be connected to receive the messages,&#xA;everything that happens when your offline will be missed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Open sourcing my blog</title>
      <link>/2021/03/open-sourcing-my-blog/</link>
      <pubDate>Mon, 01 Mar 2021 00:00:00 +0000</pubDate>
      <guid>/2021/03/open-sourcing-my-blog/</guid>
      <description>&lt;p&gt;I have received a lot of positives feedback for my blog lately,&#xA;and I do really appreciate it and try to integrate the suggestions&#xA;to update my posts and make things better.&lt;/p&gt;&#xA;&lt;p&gt;With the aim of continous improvement of this blog, I have decided (a bit late?) to open source it.&#xA;The source code is now available on &lt;a href=&#34;https://github.com/creekorful/blog&#34;&gt;Github&lt;/a&gt;!&lt;/p&gt;&#xA;&lt;p&gt;Feel free to open a PR if you want to fix a typo or if you see a mistake in one examples&#xA;while reading an article.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Another year has gone by</title>
      <link>/2021/01/another-year-has-gone-by/</link>
      <pubDate>Fri, 01 Jan 2021 00:00:00 +0000</pubDate>
      <guid>/2021/01/another-year-has-gone-by/</guid>
      <description>&lt;p&gt;We can all agree that it’s been a quite&amp;hellip; &lt;strong&gt;awkward&lt;/strong&gt; year to say the least.&lt;/p&gt;&#xA;&lt;p&gt;We went through massive fires around the globe, almost reaching WWIII, a pandemic that forced whole countries to go under a lockdown, etc…&#xA;Each event being more tragic than the others, and no one could believe what we were living.&lt;/p&gt;&#xA;&lt;p&gt;And yet, we’ve made it through this hell of a year, &lt;em&gt;we’ve survived 2020!&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;a-bit-of-positivity&#34;&gt;A bit of positivity&lt;/h1&gt;&#xA;&lt;p&gt;I think it’s our responsibility to focus on the best of every situation, if you think about it,&#xA;I&amp;rsquo;m pretty sure 2020 has seen some of the best memories you ever had.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to setup easily ELK on a Docker Swarm</title>
      <link>/2020/12/how-to-setup-easily-elk-docker-swarm/</link>
      <pubDate>Mon, 07 Dec 2020 00:00:00 +0000</pubDate>
      <guid>/2020/12/how-to-setup-easily-elk-docker-swarm/</guid>
      <description>&lt;p&gt;In this tutorial you&amp;rsquo;ll see how to set up easily an ELK (&lt;strong&gt;E&lt;/strong&gt;lastic, &lt;strong&gt;L&lt;/strong&gt;ogstash, &lt;strong&gt;K&lt;/strong&gt;ibana) stack to have a&#xA;centralized logging solution for your Docker swarm cluster.&lt;/p&gt;&#xA;&lt;h1 id=&#34;install-the-stack&#34;&gt;Install the stack&lt;/h1&gt;&#xA;&lt;p&gt;Below you&amp;rsquo;ll find the full stack to have a working ELK stack on your docker swarm.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;version&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;3&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;services&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;elasticsearch&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;elasticsearch:7.9.3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;environment&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;discovery.type=single-node&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;ES_JAVA_OPTS=-Xms2g -Xmx2g&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;esdata:/usr/share/elasticsearch/data&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;kibana&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;kibana:7.9.3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;depends_on&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;elasticsearch&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;ports&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;5601:5601&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;logstash&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;logstash:7.9.3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;ports&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;12201:12201/udp&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;depends_on&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;elasticsearch&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;deploy&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;mode&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;global&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;logstash-pipeline:/usr/share/logstash/pipeline/&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;esdata&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;driver&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;local&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;logstash-pipeline&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;driver&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;local&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I will break down the configuration part to explain what&amp;rsquo;s going on:&lt;/p&gt;</description>
    </item>
    <item>
      <title>An unified package manager user interface</title>
      <link>/2020/11/unified-package-manager-ui/</link>
      <pubDate>Sun, 08 Nov 2020 00:00:00 +0000</pubDate>
      <guid>/2020/11/unified-package-manager-ui/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve made a little fun experiment this weekend by trying to make a unified package manager user interface.&#xA;The idea was to design the simplest package manager UI possible. And I&amp;rsquo;ve come up with something that I really like.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve named the project &amp;lsquo;x&amp;rsquo; (I am tired in finding meaningful name derive from Greek god or anything&amp;hellip;).&#xA;Here&amp;rsquo;s how it works:&lt;/p&gt;&#xA;&lt;p&gt;The program read a sequence of operations to apply. Each operation is prefixed by a token indicate what the operation&#xA;kind (install, update or remove).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Debian maintainer from zero to hero</title>
      <link>/2020/10/debian-maintainer-from-zero-to-hero/</link>
      <pubDate>Sat, 03 Oct 2020 00:00:00 +0000</pubDate>
      <guid>/2020/10/debian-maintainer-from-zero-to-hero/</guid>
      <description>&lt;p&gt;I have been using &lt;a href=&#34;https://www.debian.org/&#34;&gt;Debian&lt;/a&gt; intensively for more than 4years,&#xA;mainly on the servers I administrate. It&amp;rsquo;s a really powerful &amp;amp; stable (one of the most) OS, with a &lt;em&gt;TONS&lt;/em&gt; of package available&#xA;trough &lt;a href=&#34;https://en.wikipedia.org/wiki/APT_%28software%29&#34;&gt;APT&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Debian has helped me in a lot of ways, and I wanted to bring something in return, even the little help I could offer.&#xA;So, one year ago I have emailed a friend who is also a &lt;a href=&#34;https://wiki.debian.org/DebianDeveloper&#34;&gt;DD&lt;/a&gt;, to ask him if he&amp;rsquo;s&#xA;willing to become my mentor to help me contribute to Debian. One year ago,&#xA;I&amp;rsquo;ve started, with his help, the &lt;a href=&#34;https://www.debian.org/doc/manuals/maint-guide/&#34;&gt;new maintainer process&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Privilege escalation using setuid</title>
      <link>/2020/09/setuid-privilege-escalation/</link>
      <pubDate>Thu, 17 Sep 2020 00:00:00 +0000</pubDate>
      <guid>/2020/09/setuid-privilege-escalation/</guid>
      <description>&lt;p&gt;This blog post is part of a series around &lt;a href=&#34;/tags/security/&#34;&gt;security&lt;/a&gt; &amp;amp; &lt;a href=&#34;/tags/privilege-escalation/&#34;&gt;privilege escalation&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Setuid&#34;&gt;Setuid&lt;/a&gt; is a Unix access rights flag that allow users to run an executable&#xA;with the file system permissions of the executable&amp;rsquo;s owner.&lt;/p&gt;&#xA;&lt;p&gt;For example the following executable:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ stat /usr/bin/passwd&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  File: /usr/bin/passwd&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Size: &lt;span style=&#34;color:#ae81ff&#34;&gt;63736&lt;/span&gt;     &#x9;Blocks: &lt;span style=&#34;color:#ae81ff&#34;&gt;128&lt;/span&gt;        IO Block: &lt;span style=&#34;color:#ae81ff&#34;&gt;4096&lt;/span&gt;   regular file&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Device: 801h/2049d&#x9;Inode: &lt;span style=&#34;color:#ae81ff&#34;&gt;2237&lt;/span&gt;        Links: &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Access: &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;4755/-rwsr-xr-x&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;  Uid: &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;    0/    root&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;   Gid: &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;    0/    root&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;will be executed as root (Uid 0), no matter what the current user is.&#xA;This allows un-privileged user to change their password by editing &lt;code&gt;/etc/shadow&lt;/code&gt; (root owner) using passwd.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Autosnap</title>
      <link>/2020/08/autosnap/</link>
      <pubDate>Thu, 27 Aug 2020 00:00:00 +0000</pubDate>
      <guid>/2020/08/autosnap/</guid>
      <description>&lt;p&gt;As my dev workstation is running Ubuntu, I have recently started using &lt;a href=&#34;https://snapcraft.io/&#34;&gt;Snap&lt;/a&gt;&#xA;to install most of my applications.&lt;/p&gt;&#xA;&lt;p&gt;Snap is an interesting packaging approach since it allows applications publisher to release new versions&#xA;directly without having to involve distribution maintainers. This reduces the delay between application development&#xA;and end users deployment.&lt;/p&gt;&#xA;&lt;p&gt;Another interesting aspect of Snap is that they are self-contained and running in a sandbox with limited access to the&#xA;host system. This isolation improves security and allows multiples version of the same snap to be installed at the&#xA;same time.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Privilege escalation using Docker</title>
      <link>/2020/08/docker-privilege-escalation/</link>
      <pubDate>Tue, 25 Aug 2020 00:00:00 +0000</pubDate>
      <guid>/2020/08/docker-privilege-escalation/</guid>
      <description>&lt;p&gt;This blog post is part of a series around &lt;a href=&#34;/tags/security/&#34;&gt;security&lt;/a&gt; &amp;amp; &lt;a href=&#34;/tags/privilege-escalation/&#34;&gt;privilege escalation&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;I have done a little security audit on a friend VPS last week, he was providing Docker runtime&#xA;to some people, with SSH access, and wanted to know if his setup was secure.&lt;/p&gt;&#xA;&lt;p&gt;By default, docker only allow to run command as root user, in most case this is not desired since giving&#xA;root access equals giving full power over the host. A simple workaround is to add the user to the &amp;lsquo;docker&amp;rsquo;&#xA;group so that the user will be able to dial with the docker socket. That&amp;rsquo;s what my friend has done. But by default&#xA;this is &lt;strong&gt;not secure at ALL&lt;/strong&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Going serverless</title>
      <link>/2020/06/going-serverless/</link>
      <pubDate>Wed, 03 Jun 2020 00:00:00 +0000</pubDate>
      <guid>/2020/06/going-serverless/</guid>
      <description>&lt;p&gt;I used to manage a dozen VPS since many years: Zabbix, Gitlab/Gitlab CI, &lt;a href=&#34;https://blog.creekorful.org/2020/01/harbor-private-docker-registry/&#34;&gt;private docker registry&lt;/a&gt;,&#xA;production environment (3 nodes docker swarm cluster), database server (MariaDB &amp;amp; MongoDB),&#xA;blog server (running &lt;a href=&#34;https://ghost.org/&#34;&gt;Ghost&lt;/a&gt;), logs collector (&lt;a href=&#34;https://www.graylog.org/&#34;&gt;Graylog&lt;/a&gt;), etc&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;I was spending a consequent amount of money &amp;amp; time for all these VPS, and it was time to change.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h1 id=&#34;from-ghost-to-hugo&#34;&gt;From Ghost to Hugo&lt;/h1&gt;&#xA;&lt;p&gt;One of the most important thing I run is this blog. It was previously running on &lt;a href=&#34;https://ghost.org&#34;&gt;Ghost&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Quick notes about Covid 19</title>
      <link>/2020/03/quick-notes-about-covid-19/</link>
      <pubDate>Thu, 19 Mar 2020 00:00:00 +0000</pubDate>
      <guid>/2020/03/quick-notes-about-covid-19/</guid>
      <description>&lt;p&gt;I wanted to write a quick off-topic article about the ongoing coronavirus pandemia since there&amp;rsquo;s a lof of false opinions and fake news on this topic.&lt;/p&gt;&#xA;&lt;p&gt;This virus (SARS-CoV-2) is deadly and not really comparable to the flu, it is at least much more contagious. (We don&amp;rsquo;t know anything about the death rate yet, since the pandemia is ongoing). You shouldn&amp;rsquo;t treat it lightly.&lt;/p&gt;&#xA;&lt;p&gt;Not staying home will cause a lot of deaths in the months to come because of the overwhelming of your country healthcare system. People will die because they are untreated. Please be nice to others and STAY the fuck at home, It&amp;rsquo;s not just for you, but for the whole world.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ClassLoader &amp; memory leaks: a Java love story</title>
      <link>/2020/03/classloader-and-memory-leaks/</link>
      <pubDate>Wed, 18 Mar 2020 00:00:00 +0000</pubDate>
      <guid>/2020/03/classloader-and-memory-leaks/</guid>
      <description>&lt;p&gt;We&amp;rsquo;ve been experiencing very strange memory leak in our Java application servers at work: when deploying new version of a micro service, the JVM process was running out of memory and consequently crash leading to service outage.&lt;/p&gt;&#xA;&lt;p&gt;After a bit of research, it looked like that these kind of errors were very common with this application server, especially when deploying application without restarting the server from time to time. The common fix was to restart the JVM process before putting in production, preventing any out of memory (but not the memory leak). That&amp;rsquo;s the short term &amp;ldquo;fix&amp;rdquo; we have chosen.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Docker swarm is not dead! (yet)</title>
      <link>/2020/02/docker-swarm-is-not-dead-yet/</link>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate>
      <guid>/2020/02/docker-swarm-is-not-dead-yet/</guid>
      <description>&lt;p&gt;I have written an article on the provisioning of a Docker Swarm cluster from scratch and I have received a lot of comments stating that docker swarm is dead and that I should be moving to Kubernetes instead.&lt;/p&gt;&#xA;&lt;h1 id=&#34;what-happened-to-docker&#34;&gt;What happened to docker?&lt;/h1&gt;&#xA;&lt;p&gt;For those who were not aware, &lt;a href=&#34;https://www.mirantis.com/&#34;&gt;Mirantis&lt;/a&gt; (a cloud provider) has bought &lt;a href=&#34;https://www.docker.com/products/docker-enterprise&#34;&gt;Docker enterprise&lt;/a&gt; in nov. 2019. Just after that, Mirantis has written a &lt;a href=&#34;https://www.mirantis.com/blog/mirantis-acquires-docker-enterprise-platform-business/&#34;&gt;blog post&lt;/a&gt; to announce the news:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Q: What About Docker Swarm?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Making a product is not even half of the path to success</title>
      <link>/2020/01/making-product-is-not-even-half-of-the-path-to-success/</link>
      <pubDate>Fri, 24 Jan 2020 00:00:00 +0000</pubDate>
      <guid>/2020/01/making-product-is-not-even-half-of-the-path-to-success/</guid>
      <description>&lt;p&gt;As you may already know, I have launched, with a Friend, &lt;a href=&#34;https://blog.creekorful.org/pimp-your-phone-like-never-before/&#34;&gt;an Android application&lt;/a&gt; to customize phone wallpapers randomly. The development of the app itself only took us 2 months and was quite fun. The release was really exciting and the first feedback from real users was encouraging. However, things didn&amp;rsquo;t go as planned&amp;hellip;&lt;/p&gt;&#xA;&lt;h1 id=&#34;referral-program-failure&#34;&gt;Referral program failure&lt;/h1&gt;&#xA;&lt;p&gt;Our first idea to grow our user base was to introduce a referral program. The idea was simple: each user could generate a referral link and share it among their friends. If 6 users install the app with his link, he will receive the paid version for free (lifetime). The offer was limited to the first 100 users. But guess what?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Harbor: your own private docker registry</title>
      <link>/2020/01/harbor-private-docker-registry/</link>
      <pubDate>Sat, 18 Jan 2020 00:00:00 +0000</pubDate>
      <guid>/2020/01/harbor-private-docker-registry/</guid>
      <description>&lt;p&gt;Since I have containerized my whole develoment workflow, from testing to production, I needed a docker registry to centralize my private images and ensure their deployment. I didn&amp;rsquo;t wanted to use &lt;a href=&#34;https://hub.docker.com/&#34;&gt;Docker Hub&lt;/a&gt; or &lt;a href=&#34;https://github.com/features/packages&#34;&gt;Github Packages&lt;/a&gt; because the images would be publicly available. Therefore I have started searching for existing private registry providers&amp;hellip;&lt;/p&gt;&#xA;&lt;h1 id=&#34;whats-a-docker-registry-again&#34;&gt;What&amp;rsquo;s a docker registry again?&lt;/h1&gt;&#xA;&lt;p&gt;In a nutshell, a docker registry is a server used to upload (push) &amp;amp; download (pull) docker images. The most known docker registry is certainly &lt;a href=&#34;https://hub.docker.com/&#34;&gt;Docker Hub&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to expose Traefik 2.x dashboard securely on Docker Swarm</title>
      <link>/2020/01/how-to-expose-traefik-2-dashboard-securely-docker-swarm/</link>
      <pubDate>Sun, 12 Jan 2020 00:00:00 +0000</pubDate>
      <guid>/2020/01/how-to-expose-traefik-2-dashboard-securely-docker-swarm/</guid>
      <description>&lt;p&gt;This article is part of a series about Docker Swarm. For the first article please&#xA;check &lt;a href=&#34;https://blog.creekorful.org/how-to-install-traefik-2-docker-swarm/&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;On this short tutorial you&amp;rsquo;ll learn how to deploy securely the Traefik built-in dashboard with HTTPS support and basic&#xA;authentication system.&lt;/p&gt;&#xA;&lt;p&gt;This article assume that you have a working Docker Swarm cluster with Traefik running with HTTPS support. If not you can&#xA;following &lt;a href=&#34;https://blog.creekorful.org/how-to-install-traefik-2-docker-swarm/&#34;&gt;this article&lt;/a&gt; to get started.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;Traefik 2.0 has introduced a brand new dashboard app that allows a quick view on the configuration. This is useful to&#xA;view configured entrypoints, existing routers, services, &amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Let&#39;s build a simple quotes application</title>
      <link>/2020/01/lets-build-a-simple-quotes-application/</link>
      <pubDate>Fri, 10 Jan 2020 00:00:00 +0000</pubDate>
      <guid>/2020/01/lets-build-a-simple-quotes-application/</guid>
      <description>&lt;p&gt;One night I was feeling inspired and decided to read again all my favorites quotes on Google Keep while listening to music. And suddenly an idea just popped into my head: &lt;em&gt;why not make a little mobile friendly application to view my quotes properly?&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;And that&amp;rsquo;s where it started&amp;hellip;&lt;/p&gt;&#xA;&lt;h1 id=&#34;the-idea&#34;&gt;The idea&lt;/h1&gt;&#xA;&lt;p&gt;The idea was to build a simple quotes application where the user can view the quotes. I didn&amp;rsquo;t wanted to built something complex or innovative, I just wanted to &lt;em&gt;build quickly something clean and working&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Taking new year resolutions seriously</title>
      <link>/2020/01/taking-new-year-resolutions-seriously/</link>
      <pubDate>Wed, 01 Jan 2020 00:00:00 +0000</pubDate>
      <guid>/2020/01/taking-new-year-resolutions-seriously/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;What&amp;rsquo;s your resolution for the year? Oh my resolution? I always go by 4096 * 2160&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Someone&amp;rsquo;s Dad&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Yep. Go it. These jokes aren&amp;rsquo;t funny anymore. Hopefully I&amp;rsquo;m not going to make one. This blog post is (I hope) more valuable than that !&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m taking new year resolutions seriously since 4 years now. And as far as I&amp;rsquo;m concern it&amp;rsquo;s working great. Today I wanted to explain a bit which rules I have setup over the years to help me to choose my goals. And how I keep myself focused on them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pimp your phone like never before !</title>
      <link>/2019/12/pimp-your-phone-like-never-before/</link>
      <pubDate>Mon, 23 Dec 2019 00:00:00 +0000</pubDate>
      <guid>/2019/12/pimp-your-phone-like-never-before/</guid>
      <description>&lt;p&gt;You may have noticed that I haven&amp;rsquo;t write any blog posts since 1 month. I was focusing all my attention on my new Android application.&lt;/p&gt;&#xA;&lt;p&gt;And today is announcement day! Let me present you &lt;a href=&#34;https://www.randomwallpapers.com/&#34;&gt;Random Wallpapers&lt;/a&gt; !&lt;/p&gt;&#xA;&lt;h1 id=&#34;what-the-hell-is-random-wallpapers&#34;&gt;What the hell is Random Wallpapers?&lt;/h1&gt;&#xA;&lt;p&gt;Random Wallpapers is an Android application designed to change your phone background randomly based on the things you like. Here&amp;rsquo;s how it works:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;First of all you choose what you like from a list of categories: Cats, Dogs, Christmas, Flowers, and so on ❤️&lt;/li&gt;&#xA;&lt;li&gt;hen you configure the refresh rate: for example you could say: I want my phone wallpaper to change every 2 days. 🕓&lt;/li&gt;&#xA;&lt;li&gt;And finally you enjoy ! 😄&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The application will then choose a random HD photo from one of your chosen categories and apply it as phone background.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to install Traefik 2.x on a Docker Swarm</title>
      <link>/2019/10/how-to-install-traefik-2-docker-swarm/</link>
      <pubDate>Mon, 21 Oct 2019 00:00:00 +0000</pubDate>
      <guid>/2019/10/how-to-install-traefik-2-docker-swarm/</guid>
      <description>&lt;p&gt;I have recently migrated my production docker swarm from Traefik 1.7 to Traefik 2.0 and since I cannot found a good&#xA;tutorial I have decided to write one. So in this tutorial you&amp;rsquo;ll learn how to deploy Traefik with HTTPS support on a&#xA;docker swarm.&lt;/p&gt;&#xA;&lt;p&gt;Please note that I won&amp;rsquo;t explain what Traefik is since it may needs his own article and I will focus on the deployment&#xA;and configuration. This tutorial will also assume that you have a working docker swarm.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go library to parse Maven POM file</title>
      <link>/2019/10/go-library-maven-pom-parser/</link>
      <pubDate>Wed, 16 Oct 2019 00:00:00 +0000</pubDate>
      <guid>/2019/10/go-library-maven-pom-parser/</guid>
      <description>&lt;p&gt;I have recently written a little go tool that parse maven pom file to analyse dependencies between two projects in order to perform detailed analysis such as evolution of project dependencies, etc&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;After a bit of research I couldn&amp;rsquo;t find any existing parser for Go and therefore I have decided to write one. As XML parsing is supported natively in Go there is not much work to do: only declare the structure that the Go XML parser will use.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Create beautiful image of your code</title>
      <link>/2019/10/taking-screenshot-of-your-code/</link>
      <pubDate>Thu, 10 Oct 2019 00:00:00 +0000</pubDate>
      <guid>/2019/10/taking-screenshot-of-your-code/</guid>
      <description>&lt;p&gt;Ever wanted to know how these cute looking screenshot are taken?&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;/img/carbon-screenshot.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;My answer is &lt;a href=&#34;https://carbon.now.sh&#34;&gt;Carbon&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Carbon is an online solution to create screenshot of code, with customizable theme, background color and support a lot of language syntax.&#xA;The website allows export in png, svg, or can create a link to the screenshot.&lt;/p&gt;&#xA;&lt;p&gt;Happy hacking!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Supervisor: a host management solution</title>
      <link>/2019/09/supervisor-host-management/</link>
      <pubDate>Tue, 03 Sep 2019 00:00:00 +0000</pubDate>
      <guid>/2019/09/supervisor-host-management/</guid>
      <description>&lt;p&gt;Back in 2015 I used to have a lot of devices connected to my LAN. There was my Minecraft server running on a Blade, my Plex server running on an old computer, my gaming computer, my laptop, a Promox single node running on another Blade and several Raspberry Pi used to monitor temperature, sensor activity, performing a DynDNS like synchronization, etc&amp;hellip; Some of the devices were running continuously (such as the Pies because they consume a few amount of electricity) and some others were running periodically when I needed them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Setup Qt with Jetbrains Clion easily</title>
      <link>/2019/08/setup-qt-with-clion-easily/</link>
      <pubDate>Fri, 30 Aug 2019 00:00:00 +0000</pubDate>
      <guid>/2019/08/setup-qt-with-clion-easily/</guid>
      <description>&lt;p&gt;If you have ever worked with C++ for GUI development, chance are that you have heard of Qt. Qt is a free and open source widget toolkit for creating GUI and cross platform applications that run on many platforms such as Linux, Windows, MacOs, Android, etc&amp;hellip; with native capabilities and performances. Qt does not provide only GUI API but has also support for networking, audio, serial port, thread, database, etc&amp;hellip; It&amp;rsquo;s one of the biggest framework ever written for C++.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using CDI 2.0 in a Java SE application</title>
      <link>/2019/08/using-cdi-2-0-in-a-java-se-application/</link>
      <pubDate>Thu, 29 Aug 2019 00:00:00 +0000</pubDate>
      <guid>/2019/08/using-cdi-2-0-in-a-java-se-application/</guid>
      <description>&lt;p&gt;CDI (Context &amp;amp; Dependency Injection) is a Java API released with JEE6 that enable dependency injection. Prior to may 2017 it was only available on JEE platform, but fortunately it has changed.&lt;/p&gt;&#xA;&lt;p&gt;CDI 2.0 (released in may 2017) add a new API to create a dependency injection container on a Java SE application. And the integration is easy. Here is how to do it:&lt;/p&gt;&#xA;&lt;p&gt;NB: This project was written in Java 11 with maven as dependency management.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building a fast modern dark web crawler</title>
      <link>/2019/08/building-fast-modern-web-crawler/</link>
      <pubDate>Thu, 22 Aug 2019 00:00:00 +0000</pubDate>
      <guid>/2019/08/building-fast-modern-web-crawler/</guid>
      <description>&lt;p&gt;I have been passionated by web crawler for a long time. I have written several one in many languages such as C++, JavaScript (Node.JS), Python, &amp;hellip; and I love the theory behind them.&lt;/p&gt;&#xA;&lt;p&gt;But first of all, what is a web crawler?&lt;/p&gt;&#xA;&lt;h1 id=&#34;what-is-a-web-crawler&#34;&gt;What is a web crawler?&lt;/h1&gt;&#xA;&lt;p&gt;A web crawler is a computer program that browse the internet to index existing pages, images, PDF, &amp;hellip; and allow user to search them using a &lt;a href=&#34;https://en.wikipedia.org/wiki/Web_search_engine&#34;&gt;search engine&lt;/a&gt;. It&amp;rsquo;s basically the technology behind the famous google search engine.&lt;/p&gt;</description>
    </item>
    <item>
      <title>terminews - a CLI based RSS reader</title>
      <link>/2019/07/terminews/</link>
      <pubDate>Fri, 26 Jul 2019 00:00:00 +0000</pubDate>
      <guid>/2019/07/terminews/</guid>
      <description>&lt;p&gt;I recently got used to view informations using RSS. It allows me to ignore ads, distractions and to focus on the on the essential: having all the informations that I want in the same place. And it save a really consequent amount of time.&lt;/p&gt;&#xA;&lt;p&gt;Furthermore, I love the terminal, I like to use it excessively and I prefer It over GUI applications. That&amp;rsquo;s good because I&amp;rsquo;ve found a wonderful CLI application to read RSS: terminews.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
