<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>André Kwakernaak</title>
    <description>Write an awesome description for your new site here. You can edit this line in _config.yml. It will appear in your document head meta (for Google search results) and in your feed.xml site description.
</description>
    <link>https://blog.andrekwakernaak.xyz/</link>
    <atom:link href="https://blog.andrekwakernaak.xyz/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Mon, 02 Apr 2018 20:45:36 +0200</pubDate>
    <lastBuildDate>Mon, 02 Apr 2018 20:45:36 +0200</lastBuildDate>
    <generator>Jekyll v3.7.3</generator>
    
      <item>
        <title>C# to JavaScrip cheat sheet</title>
        <description>&lt;p&gt;This is an opinionated and incomplete Cheat Sheet for developers familiar with
C# who are learning JavaScript.&lt;/p&gt;

&lt;p&gt;I have been working with JavaScript for the last year or so, and created this
Cheat Sheet in the process.&lt;/p&gt;

&lt;!--more--&gt;

&lt;h2 id=&quot;stringisnullorempty&quot;&gt;String.IsNullOrEmpty&lt;/h2&gt;

&lt;p&gt;C#:&lt;/p&gt;

&lt;div class=&quot;language-csharp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;isNullOrEmpty&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;JS:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nx&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;isEmpty&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;https://lodash.com/docs/4.17.4#isEmpty&quot;&gt;lodash:isEmpty&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;stringisnullorwhitespace&quot;&gt;String.IsNullOrWhitespace&lt;/h2&gt;

&lt;p&gt;C#:&lt;/p&gt;

&lt;div class=&quot;language-csharp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;isNullOrWhitespace&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;JS:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nx&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;isEmpty&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;trim&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;https://lodash.com/docs/4.17.4#isEmpty&quot;&gt;lodash:isEmpty&lt;/a&gt; &lt;a href=&quot;https://lodash.com/docs/4.17.4#trim&quot;&gt;lodash:trim&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;linq-select&quot;&gt;LinQ Select&lt;/h2&gt;

&lt;p&gt;C#:&lt;/p&gt;

&lt;div class=&quot;language-csharp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;l&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;{&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Select&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// =&amp;gt; 2,4,6&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;JS:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nx&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;([&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// =&amp;gt; 2,4,6&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;https://lodash.com/docs/4.17.4#map&quot;&gt;lodash:map&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;linq-where&quot;&gt;LinQ Where&lt;/h2&gt;

&lt;p&gt;C#:&lt;/p&gt;

&lt;div class=&quot;language-csharp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;l&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;{&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Where&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;%&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// =&amp;gt; 1,3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;JS:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nx&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;filter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;([&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;%&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!==&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// =&amp;gt; 1,3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;https://lodash.com/docs/4.17.4#filter&quot;&gt;Lodash:filter&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;linq-any&quot;&gt;LinQ Any&lt;/h2&gt;

&lt;p&gt;C#:&lt;/p&gt;

&lt;div class=&quot;language-csharp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;l&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;{&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Any&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;%&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// =&amp;gt; true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;JS:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nx&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;some&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;([&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;%&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!==&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// =&amp;gt; true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;https://lodash.com/docs/4.17.4#some&quot;&gt;Lodash:some&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;list-contains&quot;&gt;List&lt;T&gt; Contains&lt;/T&gt;&lt;/h2&gt;

&lt;p&gt;C#:&lt;/p&gt;

&lt;div class=&quot;language-csharp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;l&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;{&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;l&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Contains&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// =&amp;gt; true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;JS:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nx&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;has&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;([&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// =&amp;gt; true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;https://lodash.com/docs/4.17.4#has&quot;&gt;Lodash:has&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Mon, 02 Apr 2018 00:00:00 +0200</pubDate>
        <link>https://blog.andrekwakernaak.xyz/2018-csharp-to-javascrip-cheat-sheet</link>
        <guid isPermaLink="true">https://blog.andrekwakernaak.xyz/2018-csharp-to-javascrip-cheat-sheet</guid>
        
        
      </item>
    
      <item>
        <title>Thoughts after 6 months of using Docker</title>
        <description>&lt;p&gt;For the last half year I have been using Docker to deploy an application based
on micro services. I learned a thing or two in this period which I try to share
in this post. A lot has been written on using Docker and best practices. I still
decided to write this since I encountered a thing or two I did not see coming.&lt;/p&gt;

&lt;!--more--&gt;

&lt;h1 id=&quot;you-probably-should-not-use-binding-mounts-in-production&quot;&gt;You probably should not use binding mounts in production&lt;/h1&gt;

&lt;p&gt;Docker allows you to mount files or directories from your host system in your
container. This can be used to make configuration available in your container.
In my situation I had configuration of a Logstash pipeline in a repository on my
host system and mounted the configuration in a Logstash container. This works
just fine. However, the moment you want to scale your application to make use
of multiple machines to run the Docker stack, you run into issues.&lt;/p&gt;

&lt;p&gt;The files that needs to be mounted in a container, have to present on the host
that runs that container. This makes your deployment more complex, especially
when using multiple host in a swarm.&lt;/p&gt;

&lt;p&gt;Another problem with mounting files in a container touches on one of the main
principles of Docker and containerization in general. A container should contain
an application along with al of its dependencies. This way a container that
runs correct in a test environment should also run without problems in
production. When an application (or component, micro service, or however you want
to call it) needs a configuration file to work, that configuration should be
part of image.&lt;/p&gt;

&lt;p&gt;Of course, you most likely will have some configuration which differs between
test and production environments, like IP addresses or host names. A common
approach to configure these is through environment variables. Environment
variables are very well supported in the Docker eco-system and offer quite some
flexibility.&lt;/p&gt;

&lt;p&gt;Alternatively &lt;a href=&quot;https://docs.docker.com/engine/swarm/configs/&quot;&gt;configs&lt;/a&gt; from Docker Swarm can be used to create, share and 
update configuration of your Docker Swarm services. However, consider what
configuration you put in these configs and favor configuration that is part of
your image.&lt;/p&gt;

&lt;h1 id=&quot;take-continuous-integration-to-the-max&quot;&gt;Take continuous integration to the max!&lt;/h1&gt;
&lt;p&gt;The process of creating a Dockerfile, putting it under version control,
building the actual image, and pushing it to a registry sounds like a lot of of
work. However all those tasks can be automated quite easily. With some
scripting and a buildserver like Jenkings, you can take this to the point where
a commit on a repository, results in a new image being build, the application
being deployed on a test environment and automated tests being run.&lt;/p&gt;

&lt;p&gt;This approach simplifies the whole process drastically and removes all barriers
of using Docker images to deploy your application.&lt;/p&gt;

&lt;h1 id=&quot;docker-on-windows-is-not-production-ready&quot;&gt;Docker on Windows is not production ready&lt;/h1&gt;
&lt;p&gt;I started out using Docker on Windows for the application I worked on. This
might not be the most obvious decision, after all Docker originates from the
Linux eco-system. However part of the server application still had to be
deployed as Windows service for the time being. therefor Docker on Windows made
sense. After some months the switch to CoreOS was made for a plethora of
reasons…&lt;/p&gt;

&lt;p&gt;Docker on Windows is buggy. There I said it. I have observed random crashes and
a lot of weird things. Settings that get reverted to default for no obvious
reason. The GUI indicating 10GB of RAM allocated while in practice the virtual
machine only had 2GB. And I don’t know how many times I have &lt;a href=&quot;https://stackoverflow.com/questions/42203488/settings-to-windows-firewall-to-allow-docker-for-windows-to-share-drive&quot;&gt;re-installed the
Filesharing service&lt;/a&gt; on my network adapter to fix file sharing.&lt;/p&gt;

&lt;p&gt;Updates to Docker on Windows are released quite frequently, so the situation
described above can change quickly, but for now I would stronly advise against
using Docker on Windows.&lt;/p&gt;

&lt;h1 id=&quot;docker-is-an-awesome-technology-stack&quot;&gt;Docker is an awesome technology stack!&lt;/h1&gt;
&lt;p&gt;Docker is truly awesome technology, it is really versatile in ways it can be
applied. It is not limited to deploying ‘enterprisy’ applications based on micro
services. Docker is great to create development setups that you can share with
your, if it builds on one machine it builds everywhere.&lt;/p&gt;

&lt;p&gt;Instead of documenting a development setup you can create a
&lt;a href=&quot;https://docs.docker.com/compose/overview/&quot;&gt;docker-compose.yml&lt;/a&gt; that setups a database, webserver and whatever you need
to run and compile your application. Automate all the things!&lt;/p&gt;

&lt;p&gt;A fun use of Docker is to use it to ‘install’ applications for regular desktop
use. One example is &lt;a href=&quot;https://gchq.github.io/CyberChef/&quot;&gt;Cyberchef&lt;/a&gt; “a web app for encryption, encoding,
compressioni and data analysis”, which you can get up and running locally with:
&lt;code class=&quot;highlighter-rouge&quot;&gt;docker run --rm -it -p 8000:8000 mpepping/cyberchef&lt;/code&gt;&lt;/p&gt;

&lt;h1 id=&quot;looking-for-more-info-on-docker&quot;&gt;Looking for more info on Docker?&lt;/h1&gt;
&lt;p&gt;This is a great place to get started. &lt;a href=&quot;https://veggiemonk.github.io/awesome-docker/&quot;&gt;Awesome Docker&lt;/a&gt; is a fantastic
collection of resources.&lt;/p&gt;

</description>
        <pubDate>Wed, 27 Sep 2017 00:00:00 +0200</pubDate>
        <link>https://blog.andrekwakernaak.xyz/2017-thoughts-after-6-months-of-using-docker</link>
        <guid isPermaLink="true">https://blog.andrekwakernaak.xyz/2017-thoughts-after-6-months-of-using-docker</guid>
        
        <category>docker</category>
        
        
        <category>dev</category>
        
      </item>
    
      <item>
        <title>Lessons from a dev</title>
        <description>&lt;p&gt;I have been working as a software developer for the last eight years or so. In
this time I have worked at a bunch of different companies in different
industries and environments. Through success and lots of failures I have learned
a lot. In this post I try and share some of those lessons.&lt;/p&gt;

&lt;!--more--&gt;

&lt;h2 id=&quot;1-it-is-probably-your-fault&quot;&gt;1. It is probably your fault…&lt;/h2&gt;
&lt;p&gt;Developers have the tendency, after investigating a bug, to blame anything or
anybody but their code. I have blamed hardware, Operating Systems, drivers,
third party libraries, or code from colleagues. Guess what, most of time the
bug was in my code. A humbling thought, but once you accept it, it saves you
from going on a ghost hunt in that third party library, when you just should
be looking at your own code.&lt;/p&gt;

&lt;h2 id=&quot;2-naming-things-is-the-hardest-thing&quot;&gt;2. Naming things is the hardest thing&lt;/h2&gt;
&lt;p&gt;When writing code we have to come up with names for a lot of things, functions,
methods, classes, variables etc. Names are perhaps the most import factor in
what makes code readable and easy to understand. Names provide the semantics to
your code, and gives it a context. Without proper names, understanding a piece of
code is an extremely difficult task. Think about those names, care for proper
names and spent time to come up with good names!&lt;/p&gt;

&lt;h2 id=&quot;3-git-everything&quot;&gt;3. Git everything!&lt;/h2&gt;
&lt;p&gt;Every thing you write should be under version control, be it a quick script for
this one task, configuration files, or a small test program to try something
new. If it is worth writing it is worth to be under version control. It will
help you tremendously figuring out how a bug got introduced, what config change
caused your program to misbehave, or one year from now figure out why you did
made some change. There is really no reason not to use Git.&lt;/p&gt;

&lt;p&gt;I mention Git here, any version control system works, but Git is quick and easy
to create a new repository. Not familiar with Git? Have a look &lt;a href=&quot;http://rogerdudler.github.io/git-guide/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;4-there-is-a-best-way&quot;&gt;4. There is a best way&lt;/h2&gt;
&lt;p&gt;I once gave a pack of &lt;a href=&quot;https://en.wikipedia.org/wiki/Stroopwafel&quot;&gt;stroopwafels&lt;/a&gt; to a colleague visiting from abroad. The
next day he told me he he had a stroopwafel and really liked it. He also told me
that he searched Google on how to eat a stroopwafel. Than he eat it the proper
way, place the stroopwafel on a hot beverage, and let the syrup in the
stroopwafel heat before eating it. The fact that he went on Google to search for
the best way to eat a cookie baffled me, it a cookie after all.  But he knew
there must be a best way to eat a stroopwafel.&lt;/p&gt;

&lt;p&gt;I think this holds true for almost anything, there is a best way to do a
certain thing and someone probably found and described the best way. Here is how
&lt;a href=&quot;https://www.youtube.com/watch?v=nU2OHlbPGaU&amp;amp;t&quot;&gt;tie your shoe laces&lt;/a&gt; and this is the best way to &lt;a href=&quot;https://www.youtube.com/watch?v=DRPfudNNd8Y&quot;&gt;make your bed&lt;/a&gt;. In the
field of software engineering this holds true as well. There are best practices
identified within the community, idioms for a language or framework that should
be followed. Take your time to search for the best to do things, it almost
always pays off.&lt;/p&gt;

&lt;h2 id=&quot;5-know-your-tools&quot;&gt;5. Know your tools&lt;/h2&gt;
&lt;p&gt;As a developer you will use a lot of software on a daily basis. Operating
systems, IDE, debugger, browser, Wireshark, Git, Bash, SSH you name it. It is
really worth to learn the tools you use. Make use of cheats sheets to learn
shortcuts, check out which plug-ins are available, read tutorials and spent some
time searching online to get the most out of your tools.&lt;/p&gt;

&lt;p&gt;I created a quick list on some of the things I use on a daily basis that
are really helpfull to me, yet are not that well known.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://chocolatey.org/&quot;&gt;Chocolatey&lt;/a&gt; Package manager for windows.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.digitalocean.com/community/tutorials/how-to-configure-custom-connection-options-for-your-ssh-client&quot;&gt;ssh config file&lt;/a&gt; Do you use ssh? Check it out.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://resharper-plugins.jetbrains.com/packages/EtherealCode.ReSpeller/&quot;&gt;Respeller&lt;/a&gt; Spell check plug-in for Resharper.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/tj/git-extras&quot;&gt;Git-extras&lt;/a&gt; Set of useful commands for Git.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Learn your tools! They help you do your job as efficient and effective as
possible. They empower you.&lt;/p&gt;

</description>
        <pubDate>Tue, 13 Jun 2017 00:00:00 +0200</pubDate>
        <link>https://blog.andrekwakernaak.xyz/2017-lessons-from-a-dev</link>
        <guid isPermaLink="true">https://blog.andrekwakernaak.xyz/2017-lessons-from-a-dev</guid>
        
        
        <category>dev</category>
        
      </item>
    
      <item>
        <title>Importance of a decent password strategy</title>
        <description>&lt;p&gt;Passwords are the main thing that protect your online valuables, be it your
emails, Facebook account, or your PayPal. Do you pay enough attention to the
strength of your passwords and do you do everything possible to keep your
passwords secure?&lt;/p&gt;

&lt;p&gt;In this post I’ll explain why you need to think about your passwords, some of
the risks your passwords are exposed to, and describe my password strategy.&lt;/p&gt;

&lt;!--more--&gt;

&lt;h2 id=&quot;risks&quot;&gt;Risks&lt;/h2&gt;
&lt;p&gt;We have passwords everywhere, your e-mail account, social media, web shops, you
name it. So what risks are these passwords exposed to?&lt;/p&gt;

&lt;h3 id=&quot;weak-passwords&quot;&gt;Weak passwords&lt;/h3&gt;
&lt;p&gt;The passwords could be weak. Anything found in a dictionary is a weak password,
anything under twelve characters is weak. Passwords can be guessed by attackers,
often in a automated process.&lt;/p&gt;

&lt;h3 id=&quot;password-reuse&quot;&gt;Password reuse&lt;/h3&gt;
&lt;p&gt;Since we have entered passwords everywhere, we rely on the security of each and
every website to keep our password safe. Unfortunately websites get hacked
regulary. Big names like &lt;a href=&quot;https://www.troyhunt.com/observations-and-thoughts-on-the-linkedin-data-breach/&quot;&gt;LinkedIn&lt;/a&gt; and &lt;a href=&quot;https://www.troyhunt.com/adobe-credentials-and-serious/&quot;&gt;Adobe&lt;/a&gt; are among those hacked
websites.&lt;/p&gt;

&lt;p&gt;When a website is hacked and the attackers got their hands on the user data,
they could gain access to your email and password. The first thing attackers
will try is to login on your email, using the password that was leaked. If they
succeed the ramifications could be huge. Next they might try to login on
PayPal, if they succeed you can probably imagine what will happen next…&lt;/p&gt;

&lt;p&gt;In order not having to rely on a third party to keep your password safe, we
need to have a unique password everywhere. I know, that might sound like a
nightmare, remembering dozens of unique passwords. Don’t worry you end up
needing to remember only one password!&lt;/p&gt;

&lt;h2 id=&quot;password-managers&quot;&gt;Password managers&lt;/h2&gt;
&lt;p&gt;A password manager stores all your passwords in a safe manner. Password
managers come in two forms, an app that you install on your laptop or phone,
or in the form of a website offering this service. Using a password manager
requires you to remember one strong password, the password manager will
remember all your other passwords! And perhaps even better, you never have to
think of new passwords again. A password manager can generate strong passwords
for you.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.lastpass.com/how-it-works&quot;&gt;Lastpass&lt;/a&gt; is a well known password manager website. Yes, when using a service
like Lastpass you put a lot of trust in that service. However it is their core
business and they will work hard on keeping your passwords safe.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://keepass.info/&quot;&gt;Keepass&lt;/a&gt; is an example of an application that you have to install for it to
manage your passwords. It stores your passwords in a single file. This file is
encrypted using your password (I should say pass phrase, more on this later) so
using a strong password is essential. If someone gets their hands on your
Keepass file, he or she can not do anything with it, unless they know your
password.&lt;/p&gt;

&lt;h2 id=&quot;strong-master-password&quot;&gt;Strong master password&lt;/h2&gt;
&lt;p&gt;When we make use of a password manager we only have to remember one password.
Since this password will protect all other passwords it needs to be very strong.
What makes a password strong? It should be long and unique dictionary. Note
that I do not mention ‘should contain special characters’, password length is
way more important than whether or not it contains special characters. A well
known method to generate strong passwords that are easy to remember is the
&lt;a href=&quot;http://world.std.com/~reinhold/diceware.html&quot;&gt;Diceware&lt;/a&gt; method. With this method you can generate a pass phrase consisting
of multiple words which is fairly easy to remember. Instead of using dice you
could use this &lt;a href=&quot;https://www.rempe.us/diceware/#eff&quot;&gt;generator&lt;/a&gt;. Make sure to read the ‘Is it safe?’ entry in the
&lt;a href=&quot;https://www.rempe.us/diceware/#eff&quot;&gt;FAQ&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;my-password-strategy&quot;&gt;My password strategy&lt;/h2&gt;
&lt;p&gt;I use Keepass as password manager and store the password database in my Dropbox
so I can easily access it on my phone, my laptop and my system at work. This is
safe since the password file is encrypted. My master password is created using
the Diceware method and consists of seven words. Whenever I need a new password,
Keepass generates and stores it. Besides my master password I know the password
to my email account, in case I ever need to reset my Dropbox account to gain
access to my Keepass database.&lt;/p&gt;

&lt;h2 id=&quot;think-about-your-password-strategy&quot;&gt;Think about your password strategy&lt;/h2&gt;
&lt;p&gt;If there is only one thing you take away from this post I hope it is that you
think about your password strategy. Do you already use a password manager? Is
your master password strong enough? If so, great! If not, make some changes!&lt;/p&gt;

</description>
        <pubDate>Mon, 13 Feb 2017 00:00:00 +0100</pubDate>
        <link>https://blog.andrekwakernaak.xyz/2017-importance-of-a-decent-password-strategy</link>
        <guid isPermaLink="true">https://blog.andrekwakernaak.xyz/2017-importance-of-a-decent-password-strategy</guid>
        
        <category>passwords</category>
        
        
        <category>security</category>
        
      </item>
    
      <item>
        <title>Using Vagrant to create Ansible playbooks</title>
        <description>&lt;p&gt;Recently I have been using Ansible to provision and manage a couple of servers.
Developing playbooks for me involves some trial and error. Having some kind of
playground to quickly test and experiment is a real time saver!&lt;/p&gt;

&lt;p&gt;This post describes my setup for developing Ansible playbooks.&lt;/p&gt;

&lt;!--more--&gt;

&lt;h2 id=&quot;what-is-ansible&quot;&gt;What is Ansible?&lt;/h2&gt;
&lt;p&gt;Ansible is a tool to help you manage and provision your Linux installations. It
automate installations, script migrations, etc. Basically it allow allows you
to script everything that needs to installed or configured on your servers.
More info can be found &lt;a href=&quot;https://www.ansible.com/it-automation&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;http://docs.ansible.com/ansible/intro_getting_started.html&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;what-is-vagrant&quot;&gt;What is Vagrant?&lt;/h2&gt;
&lt;p&gt;Vagrant describes itself as follows:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;[…] the command line utility for managing the lifecycle of virtual machines.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href=&quot;https://www.vagrantup.com/docs/&quot;&gt;source&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Vagrant allows one to quickly create virtual machines (VM) in a reproducible
manner. See here on how to &lt;a href=&quot;https://www.vagrantup.com/docs/getting-started/&quot;&gt;get started&lt;/a&gt; with Vagrant.&lt;/p&gt;

&lt;h2 id=&quot;combining-ansible-and-vagrant&quot;&gt;Combining Ansible and Vagrant&lt;/h2&gt;
&lt;p&gt;Combining the ability to quickly create VMs that allow access over ssh,
along with utilizing Ansible to provision those VMs makes for an ideal
development environment for Ansible playbooks. One can create a VM, run a
playbook, and check the result. Make edits to the playbook, rerun the playbook
on the VM, re-create the VM and start from scratch.&lt;/p&gt;

&lt;p&gt;Vagrant supports Ansible out of the box as a &lt;a href=&quot;https://www.vagrantup.com/docs/provisioning/ansible.html&quot;&gt;provisioner&lt;/a&gt; which is really
convenient.&lt;/p&gt;

&lt;h2 id=&quot;prerequisites&quot;&gt;Prerequisites&lt;/h2&gt;
&lt;p&gt;This post assumes a Linux host system. The following needs to be installed:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Vagrant (1.8.5)&lt;/li&gt;
  &lt;li&gt;VirtualBox (5.1.6)&lt;/li&gt;
  &lt;li&gt;Ansible (ansible 2.3.0 devel bec9ebbf30)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The version numbers above are the ones I used when writing this post.&lt;/p&gt;

&lt;h2 id=&quot;getting-started&quot;&gt;Getting started&lt;/h2&gt;
&lt;p&gt;First thing we need is a Vagrantfile, this instructs Vagrant on how to setup
and configure a VM.&lt;/p&gt;

&lt;h3 id=&quot;create-a-vagrantfile&quot;&gt;Create a Vagrantfile&lt;/h3&gt;
&lt;p&gt;Create a file called &lt;code class=&quot;highlighter-rouge&quot;&gt;Vagrantfile&lt;/code&gt; in an empty directory with the following
content:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Vagrant.require_version &quot;&amp;gt;= 1.7.0&quot;
Vagrant.configure(2) do |config|

  config.vm.box = &quot;ubuntu/xenial64&quot;
  config.vm.provision &quot;shell&quot;, inline: &quot;apt-get update &amp;amp;&amp;amp; apt-get -qq install python python-pycurl python-apt&quot;

  config.vm.provision &quot;ansible&quot;, type: &quot;ansible&quot; do |ansible|
    ansible.verbose = &quot;&quot; # can be set to &quot;vvv&quot; for verbose logging.
    ansible.playbook = &quot;playbook.yml&quot;
    ansible.sudo = true
  end
end
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The Vagrantfile above will instruct Vagrant to create a VM based on Ubuntu
Xenial 64 bit. It will install the dependencies needed to run Ansible playbooks
as well. The important part is:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;config.vm.provision &quot;ansible&quot;, type: &quot;ansible&quot; do |ansible|
  ansible.verbose = &quot;&quot; # can be set to &quot;vvv&quot; for verbose logging.
  ansible.playbook = &quot;playbook.yml&quot;
  ansible.sudo = true
end
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;This instructs Vagrant to run the Ansible provisioner with our playbook.yml
file as playbook.&lt;/p&gt;

&lt;h3 id=&quot;create-a-playbook&quot;&gt;Create a playbook&lt;/h3&gt;
&lt;p&gt;Next, lets create a simple Ansible playbook. The playbook below is the simplest
form of a Ansible playbook. When your playbook grows a single file is quickly not
maintainable. The Ansible recommended way of &lt;a href=&quot;http://docs.ansible.com/ansible/playbooks_best_practices.html#content-organization&quot;&gt;organizing your playbooks&lt;/a&gt; can
still be used.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;---
- hosts: all
  tasks:
  - name: apt-get update
    apt: update_cache=yes

  - name: Install deps
    apt: name=nginx  state=present
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Now lets create our playbook. Create a file called &lt;code class=&quot;highlighter-rouge&quot;&gt;playbook.yml&lt;/code&gt; next to the
Vagrantfile and copy the content above into it. This playbook will effectively
run &lt;code class=&quot;highlighter-rouge&quot;&gt;apt-get update&lt;/code&gt; and then install Nginx.&lt;/p&gt;

&lt;h2 id=&quot;lets-build-and-provision-the-vm&quot;&gt;Lets build and provision the VM&lt;/h2&gt;
&lt;p&gt;Now that we are all setup we can have Vagrant create the VM and run the
playbook. Open a terminal in the directory containing the Vagrantfile. Run
&lt;code class=&quot;highlighter-rouge&quot;&gt;vagrant up&lt;/code&gt;. This will make Vagrant create the VM and run the playbook. It
might take a while since it will download the Ubuntu image if not already
present.&lt;/p&gt;

&lt;p&gt;The last part of the output should show the Ansible playbook being run:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;[..]
==&amp;gt; default: Running provisioner: ansible (ansible)...
    default: Running ansible-playbook...

PLAY [all] *********************************************************************

TASK [setup] *******************************************************************
ok: [default]

TASK [apt-get update] **********************************************************
ok: [default]

TASK [Install deps] ************************************************************
changed: [default]

PLAY RECAP *********************************************************************
default                    : ok=3    changed=1    unreachable=0    failed=0   

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;To check the result of your playbook you can run &lt;code class=&quot;highlighter-rouge&quot;&gt;vagrant ssh&lt;/code&gt; to login to the
VM and verify correct configuration. In this case we could run &lt;code class=&quot;highlighter-rouge&quot;&gt;nginx -v&lt;/code&gt; to
verify that Nginx has been installed in the VM.&lt;/p&gt;

&lt;p&gt;At this point changes or additions to the playbook can be made. Running
&lt;code class=&quot;highlighter-rouge&quot;&gt;vagrant provision&lt;/code&gt; will rerun the provisioning system and execute the
playbook. Running &lt;code class=&quot;highlighter-rouge&quot;&gt;vagrant destroy &amp;amp;&amp;amp; vagrant up&lt;/code&gt; will destroy and re-create
the VM.&lt;/p&gt;

&lt;p&gt;Alternatively Ansible can be invoked directly. Vagrant generates a inventory
file which can be used like so: &lt;code class=&quot;highlighter-rouge&quot;&gt;ansible-playbook -i .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory -become playbook.yml&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;skeleton-project&quot;&gt;Skeleton project&lt;/h2&gt;
&lt;p&gt;I have created a skeleton project containing a Vagrantfile and Ansible
playbook (using roles) on my &lt;a href=&quot;https://github.com/apollux/ansible-vagrant-skeleton&quot;&gt;Github&lt;/a&gt;.&lt;/p&gt;

</description>
        <pubDate>Tue, 03 Jan 2017 00:00:00 +0100</pubDate>
        <link>https://blog.andrekwakernaak.xyz/2017-using-vagrant-to-create-ansible-playbooks</link>
        <guid isPermaLink="true">https://blog.andrekwakernaak.xyz/2017-using-vagrant-to-create-ansible-playbooks</guid>
        
        <category>ansible</category>
        
        <category>vagrant</category>
        
        
        <category>dev</category>
        
      </item>
    
  </channel>
</rss>
