<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>.NET wat we zoeken</title><link>https://blog.netwatwezoeken.nl/</link><description>Recent content on .NET wat we zoeken</description><generator>Hugo</generator><language>en</language><lastBuildDate>Sun, 08 Feb 2026 12:35:00 +0100</lastBuildDate><atom:link href="https://blog.netwatwezoeken.nl/index.xml" rel="self" type="application/rss+xml"/><item><title>Integration testing with Playwright just got easier</title><link>https://blog.netwatwezoeken.nl/posts/integration-testing-with-playwright-just-got-a-lot-easier/</link><pubDate>Sun, 08 Feb 2026 12:35:00 +0100</pubDate><guid>https://blog.netwatwezoeken.nl/posts/integration-testing-with-playwright-just-got-a-lot-easier/</guid><description>&lt;p&gt;In a &lt;a href="https://blog.netwatwezoeken.nl/simplifying-integration-testing-with-dotnet-and-playwright/"&gt;previous blog post&lt;/a&gt;, I introduced the NuGet package &lt;code&gt;Nwwz.Mvc.Testing&lt;/code&gt;. This package was designed to make it possible to make the &lt;code&gt;WebApplicationFactory&lt;/code&gt; listen on a rela port to that you can use it with Playwright.&lt;/p&gt;
&lt;p&gt;The package implements a different &lt;code&gt;WebApplicationFactory&lt;/code&gt; that spin up a Kestrel instance instead ot the in-memory &lt;code&gt;TestServer&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;With the release of &lt;strong&gt;.NET 10&lt;/strong&gt;, this workaround is no longer necessary. Microsoft has introduced a native way to run &lt;code&gt;WebApplicationFactory&lt;/code&gt; using Kestrel.&lt;/p&gt;</description></item><item><title>Strangling SOAP: migrate to modern .NET without breaking clients</title><link>https://blog.netwatwezoeken.nl/posts/strangling-soap/</link><pubDate>Thu, 20 Nov 2025 11:26:00 +0100</pubDate><guid>https://blog.netwatwezoeken.nl/posts/strangling-soap/</guid><description>&lt;p&gt;The Strangler Fig pattern is one of those transitional architecture patterns to get to a better system. But strangling SOAP is a bit difficult. If you just put a proxy in front of a SOAP service, you’ll quickly bump into a painful detail: SOAP typically exposes a single HTTP endpoint. All operations share one path, and the actual method is picked using headers like &lt;code&gt;SOAPAction&lt;/code&gt; or &lt;code&gt;action&lt;/code&gt; and the body contents. That makes the usual reverse‑proxy trick an &amp;ldquo;all or nothing&amp;rdquo; mechanism. Not at all a Strangler Fig approach. But there is a way!&lt;/p&gt;</description></item><item><title>Playwright in a single file dotnet app</title><link>https://blog.netwatwezoeken.nl/posts/playwright-and-single-file-dotnet/</link><pubDate>Fri, 14 Nov 2025 18:43:04 +0100</pubDate><guid>https://blog.netwatwezoeken.nl/posts/playwright-and-single-file-dotnet/</guid><description>&lt;p&gt;One of the recent additions in .NET is that you can now have single file projects. In this article we&amp;rsquo;ll explore how to use Playwright in such file.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Playwright and dotnet run app.cs" loading="lazy" src="https://blog.netwatwezoeken.nl/assets/images/2025/11/Playwright-dotnet-run-app2.png"&gt;&lt;/p&gt;
&lt;p&gt;TL;DR: Full example at the end of this page.&lt;/p&gt;
&lt;h2 id="why"&gt;Why?&lt;/h2&gt;
&lt;p&gt;More and more I use Playwright not only for testing but also for small automation scripts and to quickly make demos using it&amp;rsquo;s handy built-in recorder. Before .NET 10 that would required a C# project, a directory with a &lt;code&gt;csproj&lt;/code&gt; file a &lt;code&gt;cs&lt;/code&gt; file and the Playwright package installed.&lt;/p&gt;</description></item><item><title>Testing as a First-Class Citizen of Architecture</title><link>https://blog.netwatwezoeken.nl/posts/testing-as-first-class-architecture-citizen/</link><pubDate>Fri, 11 Apr 2025 13:45:04 +0200</pubDate><guid>https://blog.netwatwezoeken.nl/posts/testing-as-first-class-architecture-citizen/</guid><description>&lt;p&gt;Gáspár Nagy dropped a few interesting ideas and thoughts during the keynote of Living Documentation Event 2025. One of them was about testing and clean architecture, Or hexagonical-, union- or port and adaptors- architecture for that matter. Here is a quick recap of what clean architecture is about.&lt;/p&gt;
&lt;p&gt;&lt;img alt="clean architecture" loading="lazy" src="https://blog.netwatwezoeken.nl/assets/images/2025/04/clean-arch.svg"&gt;&lt;/p&gt;
&lt;p&gt;The core concept is that all business rules and logic are encoded in &lt;code&gt;Application &amp;amp; Domain&lt;/code&gt;. The layers &lt;code&gt;Api / UI&lt;/code&gt;, sometimes called Presentation, and &lt;code&gt;Infra&lt;/code&gt; (Infrastructure) keep the core clean from external influence like user interfaces, database details and such. The goal is that the core stays clean from all kinds of implementation details that do not contribute to actual business logic.&lt;/p&gt;</description></item><item><title>Simplifying integration testing with .NET and Playwright</title><link>https://blog.netwatwezoeken.nl/posts/simplifying-integration-testing-with-dotnet-and-playwright/</link><pubDate>Sat, 28 Dec 2024 13:45:04 +0200</pubDate><guid>https://blog.netwatwezoeken.nl/posts/simplifying-integration-testing-with-dotnet-and-playwright/</guid><description>&lt;p&gt;In my earlier blog, &lt;a href="https://blog.netwatwezoeken.nl/integration-testing-with-playwright-and-testcontainers/"&gt;Integration Testing with Playwright and Testcontainers&lt;/a&gt;, I shared how to use a WebApplicationFactory with TestContainers and Playwright to set up integration tests. While this approach works well, I encountered a problem: the setup inadvertently spins up two separate hosts, leading to unwanted behaviour.&lt;/p&gt;
&lt;h2 id="nwwzmvctesting"&gt;Nwwz.Mvc.Testing&lt;/h2&gt;
&lt;p&gt;I am introducing NuGet package &lt;a href="https://www.nuget.org/packages/Nwwz.Mvc.Testing"&gt;Nwwz.Mvc.Testing&lt;/a&gt; to solve those issue.It&amp;rsquo;s a simple helper to easily setup a .NET application fro integration testing while allowing a browser to connect to it.&lt;/p&gt;</description></item><item><title>Stryker in a CI/CD pipeline</title><link>https://blog.netwatwezoeken.nl/posts/using-stryker-a-ci-cd-pipeline/</link><pubDate>Sat, 10 Feb 2024 12:25:38 +0200</pubDate><guid>https://blog.netwatwezoeken.nl/posts/using-stryker-a-ci-cd-pipeline/</guid><description>&lt;p&gt;In &lt;a href="https://blog.netwatwezoeken.nl/mutation-testing-ftw/"&gt;my last blog&lt;/a&gt; I wrote about why mutation testing is a better way of measuring test completeness.
I also mentioned the drawback regarding performance.&lt;/p&gt;
&lt;p&gt;In this blog I&amp;rsquo;d like to discuss what Stryker does to increase performance and the things you can do in your pipeline to get the most out of mutations testing every check-in.&lt;/p&gt;
&lt;h2 id="what-stryker-already-does"&gt;What stryker already does&lt;/h2&gt;
&lt;h3 id="concurrency"&gt;Concurrency&lt;/h3&gt;
&lt;p&gt;By default Stryker takes half of the available cores to do the work. Use the concurrency to use more or less cores of you system. I tested this on a 8 core machine. When using 4 core the whole process takes 02:42. Whit 8 cores that same process took almost 30 seconds less, 02:18.&lt;/p&gt;</description></item><item><title>Use mutation testing to replace code coverage</title><link>https://blog.netwatwezoeken.nl/posts/mutation-testing-ftw/</link><pubDate>Fri, 02 Feb 2024 10:25:45 +0200</pubDate><guid>https://blog.netwatwezoeken.nl/posts/mutation-testing-ftw/</guid><description>&lt;p&gt;It is pretty common to use some sort of code coverage measurement tool along with unit tests to gather feedback on completeness of your test suite. Measuring code coverage is great start to find out if your code needs more testing. But by it&amp;rsquo;s nature it also comes with some caveats. In this article I&amp;rsquo;ll explain these caveats and how mutation testing fills these caps and turns out more valuable as a source of feedback.&lt;/p&gt;</description></item><item><title>Simplifying .NET solution upgrades with Directory.Build.props and Directory.Packages.props</title><link>https://blog.netwatwezoeken.nl/posts/solution-wide-properties-in-dotnet/</link><pubDate>Mon, 23 Oct 2023 22:46:34 +0200</pubDate><guid>https://blog.netwatwezoeken.nl/posts/solution-wide-properties-in-dotnet/</guid><description>&lt;p&gt;With .NET 8 almost released it is time to make upgrading easier. In this blog I&amp;rsquo;ll explain about &lt;code&gt;Directory.Build.props&lt;/code&gt; and &lt;code&gt;Directory.Packages.props&lt;/code&gt; and how these can make upgrading easier.&lt;/p&gt;
&lt;p&gt;Most solutions consist of multiple projects. Even if all of your production code is in a single project chances are that your tests are in a different project. The separation that projects bring can be great, but sometimes managing dependencies can be a hassle.&lt;/p&gt;</description></item><item><title>Integration testing with Playwright and Testcontainers in ASP.NET</title><link>https://blog.netwatwezoeken.nl/posts/integration-testing-with-playwright-and-testcontainers/</link><pubDate>Mon, 13 Mar 2023 12:45:04 +0200</pubDate><guid>https://blog.netwatwezoeken.nl/posts/integration-testing-with-playwright-and-testcontainers/</guid><description>&lt;p&gt;Testing plays a crucial role in software development and we strive to test as much as possible using isolated unittests. However, there are times when these unittests fail to capture issues that arise when the entire application is tested. Such issues may include discrepancies between front-end and back-end implementation of APIs, or differences in behavior between real and mocked databases. These problems can be easily identified by running a series of scenarios that test the entire application, including the front-end, back-end, and database. Many developers resort to manual testing to achieve this, but automated testing offers greater repeatability and the ability to integrate checks into the development pipeline.&lt;/p&gt;</description></item><item><title>Source generation in System.Text.Json, should I care?</title><link>https://blog.netwatwezoeken.nl/posts/source-generation-in-system-text/</link><pubDate>Mon, 21 Feb 2022 12:45:04 +0200</pubDate><guid>https://blog.netwatwezoeken.nl/posts/source-generation-in-system-text/</guid><description>&lt;p&gt;With the release of .NET 6 also came the option to use source generation in System.Text.Json. In short this means that instead of runtime reflection some of the work is now done compile time. This makes it more efficient. But how much? And should I care?
Just measure it. I made a small project that you can use and adjust to measure the difference for your specific case. Let the results help you decide what&amp;rsquo;s best for your application.&lt;/p&gt;</description></item><item><title>Safer Jenkins pipelines on kubernetes</title><link>https://blog.netwatwezoeken.nl/posts/a-safer-jenkins-pipeline-on-kubernetes/</link><pubDate>Mon, 20 Apr 2020 12:45:04 +0200</pubDate><guid>https://blog.netwatwezoeken.nl/posts/a-safer-jenkins-pipeline-on-kubernetes/</guid><description>&lt;p&gt;Jenkins and kubernetes are a great combination. I love the concept of leveraing container technology to provide any build tools that you might require. However in many cases the examples provided are not always the best or most secure.&lt;/p&gt;
&lt;p&gt;In Section 10.2.2 &lt;em&gt;Building your image&lt;/em&gt; of Mannings Microservices in Action the following Jenkins Pipeline script is suggested:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-groovy" data-lang="groovy"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;withPod&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;podTemplate&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;label:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;pod&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nl"&gt;serviceAccount:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;jenkins&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nl"&gt;containers:&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;containerTemplate&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;name:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;docker&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nl"&gt;image:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;docker&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nl"&gt;command:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;cat&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nl"&gt;ttyEnabled:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;containerTemplate&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;name:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;kubectl&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nl"&gt;image:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;morganjbruce/kubectl&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nl"&gt;command:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;cat&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nl"&gt;ttyEnabled:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nl"&gt;volumes:&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;hostPathVolume&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;mountPath:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/var/run/docker.sock&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nl"&gt;hostPath:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/var/run/docker.sock&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;withPod&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;pod&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;def&lt;/span&gt; &lt;span class="n"&gt;tag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;${env.BRANCH_NAME}.${env.BUILD_NUMBER}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;def&lt;/span&gt; &lt;span class="n"&gt;service&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;market-data:${tag}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;checkout&lt;/span&gt; &lt;span class="n"&gt;scm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;container&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;docker&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;stage&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Build&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;sh&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;docker build -t ${service} .&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;container&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;kubectl&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;stage&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Deploy&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;sh&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;kubectl --namespace=staging apply -f deploy/staging/&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In this script there are three things that bother me:&lt;/p&gt;</description></item><item><title>Automated Kubernetes installation on Hyper-V</title><link>https://blog.netwatwezoeken.nl/posts/automated-kubernetes-installation-on-hyper-v/</link><pubDate>Fri, 10 Apr 2020 12:45:04 +0200</pubDate><guid>https://blog.netwatwezoeken.nl/posts/automated-kubernetes-installation-on-hyper-v/</guid><description>&lt;p&gt;This artice describes how you can create a kubernetes custer using &lt;a href="https://www.vagrantup.com/"&gt;Vagrant&lt;/a&gt;, Hyper-V and &lt;a href="https://packer.io/"&gt;Packer&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="update-11-05-2020"&gt;Update (11-05-2020)&lt;/h2&gt;
&lt;p&gt;I have updated the scripts to use contianerd in favor of docker. Don&amp;rsquo;t worry using docker is still possible. In &lt;code&gt;/packer/ubuntu-18.04-amd64.json&lt;/code&gt; replace &lt;code&gt;containerd.sh&lt;/code&gt; woth &lt;code&gt;docker.sh&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="why"&gt;Why?&lt;/h2&gt;
&lt;p&gt;I found myself in the need of having a kubernetes test cluster. Instead of using minikube or enabling Kubernetes on Docker Desktop. I thought I could learn from setting up a cluster from scratch. This also allows me to easiliy simulate network failures or have nodes go down.&lt;/p&gt;</description></item><item><title>Static IPs with NAT on Hyper-V</title><link>https://blog.netwatwezoeken.nl/posts/static-ip-for-hyper-v-with-nat/</link><pubDate>Tue, 18 Feb 2020 12:45:04 +0200</pubDate><guid>https://blog.netwatwezoeken.nl/posts/static-ip-for-hyper-v-with-nat/</guid><description>&lt;p&gt;The goal is to have networking with static ip addresses for virtual machines on Hyper-V. The machine must also be able to access the internet.
The easiest way is to start a Powershell session with elevated rights. Then use the follwing three commands. Feel free to change any names and ip address ranges.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create a new switch&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;New-VMSwitch&lt;/span&gt; &lt;span class="n"&gt;-SwitchName&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;NAT Switch 192.168.40.x&amp;#34;&lt;/span&gt; &lt;span class="n"&gt;-SwitchType&lt;/span&gt; &lt;span class="n"&gt;Internal&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="2"&gt;
&lt;li&gt;Assign and IP address&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;New-NetIPAddress&lt;/span&gt; &lt;span class="n"&gt;-IPAddress&lt;/span&gt; &lt;span class="mf"&gt;192.168&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;40&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;1&lt;/span&gt; &lt;span class="n"&gt;-PrefixLength&lt;/span&gt; &lt;span class="mf"&gt;24&lt;/span&gt; &lt;span class="n"&gt;-InterfaceAlias&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;vEthernet (NAT Switch 192.168.40.x)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="3"&gt;
&lt;li&gt;Enable NAT&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;New-NetNAT&lt;/span&gt; &lt;span class="n"&gt;-Name&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;NATNetwork&amp;#34;&lt;/span&gt; &lt;span class="n"&gt;-InternalIPInterfaceAddressPrefix&lt;/span&gt; &lt;span class="mf"&gt;192.168&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;40&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="mf"&gt;24&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This will result in:&lt;/p&gt;</description></item><item><title>About</title><link>https://blog.netwatwezoeken.nl/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://blog.netwatwezoeken.nl/about/</guid><description>&lt;div class="container" style="font-size:1.2rem;font-family: Consolas,monaco,monospace;"&gt;
&lt;div class="item"&gt;
&lt;h4&gt;.NET wat we zoeken is me, Jos Hendriks&lt;/h4&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;
{&lt;br&gt;
&lt;span class="yellow-code"&gt;&amp;nbsp;&amp;nbsp;A&lt;/span&gt; &lt;span class="green-code"&gt;lead developer&lt;/span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;span class="yellow-code"&gt;that &lt;/span&gt;&lt;span class="blue-code"&gt;is hands-on and has solid experience in developing software&lt;/span&gt;&lt;br&gt;
}
&lt;p class="purple-code"&gt;.NET wat we zoeken&lt;/p&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;
{&lt;br&gt;
&lt;span class="yellow-code"&gt;&amp;nbsp;&amp;nbsp;A&lt;/span&gt; &lt;span class="green-code"&gt;technical coach&lt;/span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;span class="yellow-code"&gt;who &lt;/span&gt;&lt;span class="blue-code"&gt;helps people grow in becoming better at their work&lt;/span&gt;&lt;br&gt;
}
&lt;p class="purple-code"&gt;.NET wat we zoeken&lt;/p&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;div&gt;
{&lt;br&gt;
&lt;span class="yellow-code"&gt;&amp;nbsp;&amp;nbsp;A&lt;/span&gt; &lt;span class="green-code"&gt;software architect&lt;/span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;span class="yellow-code"&gt;with &lt;/span&gt;&lt;span class="blue-code"&gt;experience in all .NET versions and systems design&lt;/span&gt;&lt;br&gt;
}
&lt;p class="purple-code"&gt;.NET wat we zoeken&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item></channel></rss>