<!DOCTYPE html><html lang="en"> <head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Page not found | BloggingAbout.NET</title><meta name="description" content="Dennis van der Stelt on building distributed systems"><meta name="author" content="Dennis van der Stelt"><link rel="canonical" href="https://bloggingabout.net/404/"><link rel="alternate" type="application/rss+xml" title="BloggingAbout.NET" href="/feed.xml"><!-- Fonts --><link href="https://fonts.googleapis.com/css?family=Josefin+Sans:400,600%7CPoppins:400,600,700%7CSora:400,600&display=swap" rel="stylesheet"><!-- Ionicons --><link href="https://unpkg.com/ionicons@4.2.2/dist/css/ionicons.min.css" rel="stylesheet"><!-- Favicons --><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"><link rel="manifest" href="/site.webmanifest"><!-- Open Graph --><meta property="og:type" content="article"><meta property="og:site_name" content="BloggingAbout.NET"><meta property="og:locale" content="en_US"><meta property="og:title" content="Page not found | BloggingAbout.NET"><meta property="og:description" content="Dennis van der Stelt on building distributed systems"><meta property="og:url" content="https://bloggingabout.net/404/"><meta property="og:image" content="https://bloggingabout.net/images/404.jpg"><meta property="og:image:alt" content="Page not found"><!-- Twitter --><meta name="twitter:card" content="summary_large_image"><meta name="twitter:site" content="@dvdstelt"><meta name="twitter:creator" content="@dvdstelt"><meta name="twitter:title" content="Page not found | BloggingAbout.NET"><meta name="twitter:description" content="Dennis van der Stelt on building distributed systems"><meta name="twitter:image" content="https://bloggingabout.net/images/404.jpg"><meta name="twitter:image:alt" content="Page not found"><!-- JSON-LD --><script type="application/ld+json">{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"Dennis van der Stelt"},"description":"Dennis van der Stelt on building distributed systems","headline":"Page not found | BloggingAbout.NET","image":"https://bloggingabout.net/images/404.jpg","mainEntityOfPage":{"@type":"WebPage","@id":"https://bloggingabout.net/404/"},"url":"https://bloggingabout.net/404/"}</script><!-- Google Analytics --><script async src="https://www.googletagmanager.com/gtag/js?id=G-KYNPK4927H"></script><script>(function(){const GA_ID = "G-KYNPK4927H";

    window.dataLayer = window.dataLayer || [];
    function gtag() { dataLayer.push(arguments); }
    gtag('js', new Date());
    gtag('config', GA_ID);
  })();</script><link rel="stylesheet" href="/_astro/about.CgqDkzxj.css"></head><body> <!-- begin header --><header class="header"> <div class="container"> <div class="row"> <div class="header__inner col col-12"> <div class="logo"> <a class="logo__link" href="/">
BloggingAbout.NET
</a> </div> <div class="menu-overlay"> <nav class="main-nav"> <div class="main-nav__box"> <div class="nav__icon-close"> <i class="ion ion-md-close"></i> </div> <div class="nav-grid"> <div class="nav-grid__item"> <h2 class="nav-grid__title">Menu</h2> <div class="mobile-nav"> <ul class="nav__list list-reset"> <li class="nav__item"> <a href="/" class="nav__link"> Home </a> </li><li class="nav__item nav__item--has-children"> <button type="button" class="nav__link nav__link--toggle" aria-expanded="false" aria-haspopup="true" aria-controls="submenu-series-50alte" data-nav-toggle> Series <span class="nav__chevron" aria-hidden="true">▾</span> </button> <ul id="submenu-series-50alte" class="nav__submenu list-reset" role="menu"> <li class="nav__submenu-item" role="none"> <a href="/series/servicepulse-oidc/" role="menuitem" class="nav__submenu-link"> Authenticating ServicePulse </a> </li><li class="nav__submenu-item" role="none"> <a href="/series/omnomnom/" role="menuitem" class="nav__submenu-link"> OmNomNom </a> </li> </ul> </li><li class="nav__item"> <a href="/about/" class="nav__link"> About </a> </li><li class="nav__item"> <a href="/contact/" class="nav__link"> Contact </a> </li> </ul> </div> </div> </div> </div> </nav> </div> <div class="navigation"> <div class="top-nav"> <ul class="nav__list list-reset"> <li class="nav__item"> <a href="/" class="nav__link"> Home </a> </li><li class="nav__item nav__item--has-children"> <button type="button" class="nav__link nav__link--toggle" aria-expanded="false" aria-haspopup="true" aria-controls="submenu-series-b3t8gf" data-nav-toggle> Series <span class="nav__chevron" aria-hidden="true">▾</span> </button> <ul id="submenu-series-b3t8gf" class="nav__submenu list-reset" role="menu"> <li class="nav__submenu-item" role="none"> <a href="/series/servicepulse-oidc/" role="menuitem" class="nav__submenu-link"> Authenticating ServicePulse </a> </li><li class="nav__submenu-item" role="none"> <a href="/series/omnomnom/" role="menuitem" class="nav__submenu-link"> OmNomNom </a> </li> </ul> </li><li class="nav__item"> <a href="/about/" class="nav__link"> About </a> </li><li class="nav__item"> <a href="/contact/" class="nav__link"> Contact </a> </li> </ul> </div> <div class="nav-buttons"> <i class="nav__icon nav__icon-menu ion ion-md-menu"></i> <i class="nav__icon nav__icon-search ion ion-md-search"></i> </div> </div> </div> </div> </div> </header> <!-- end header --> <div class="search" id="search-overlay"> <div class="search__panel" role="dialog" aria-modal="true" aria-label="Search posts"> <div class="search__input-wrap"> <i class="ion ion-md-search search__icon" aria-hidden="true"></i> <input type="text" id="search-input" class="search__input" placeholder="Type to search..." autocomplete="off" spellcheck="false" aria-label="Search posts" aria-controls="search-results" aria-autocomplete="list"> <button class="search__close" id="js-search-close" aria-label="Close search"> <i class="ion ion-md-close"></i> </button> </div> <p class="search__meta" id="search-meta" aria-live="polite"></p> <ul class="search__results" id="search-results" role="listbox" aria-label="Search results"></ul> <div class="search__footer" aria-hidden="true"> <span><kbd>↑</kbd><kbd>↓</kbd> navigate</span> <span><kbd>↵</kbd> open</span> <span><kbd>esc</kbd> close</span> </div> </div> </div> <script type="module">const g=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function w(e){const t=e.match(/\/(\d{4})\/(\d{2})\/(\d{2})\//);return t?`${g[+t[2]-1]} ${+t[3]}, ${t[1]}`:""}function $(e,t){if(!t.trim())return e;const n=t.trim().split(/\s+/).filter(Boolean).map(r=>r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|");return e.replace(new RegExp(`(${n})`,"gi"),"<mark>$1</mark>")}let c=null;async function f(){if(c)return c;try{c=await new Function("u","return import(u)")("/pagefind/pagefind.js"),await c.init()}catch{}return c}let s=-1,d=0;function o(){return[...document.querySelectorAll("#search-results .search__result")]}function m(e){const t=o();if(!t.length)return;const n=Math.max(-1,Math.min(e,t.length-1));t.forEach((r,a)=>{r.classList.toggle("is-selected",a===n),r.querySelector("a")?.setAttribute("tabindex",a===n?"0":"-1")}),s=n,n>=0&&t[n].scrollIntoView({block:"nearest",behavior:"smooth"})}function b(){const e=o();(s>=0?e[s]:e[0])?.querySelector("a")?.click()}function y(e,t){const n=document.getElementById("search-results"),r=document.getElementById("search-meta");if(s=-1,!e.length){r.textContent="",n.innerHTML=`<li class="search__empty">No results for <em>${t}</em></li>`;return}const a=e.length;r.textContent=`${a} result${a===1?"":"s"}`,n.innerHTML=e.map((i,l)=>{const p=$(i.meta?.title??"",t),u=w(i.url);return`<li class="search__result" role="option" data-index="${l}">
        <a href="${i.url}" tabindex="${l===0?"0":"-1"}">
          <span class="search__result-title">${p}</span>
          ${u?`<span class="search__result-date">${u}</span>`:""}
        </a>
      </li>`}).join("")}function h(){document.getElementById("search-results").innerHTML="",document.getElementById("search-meta").textContent="",s=-1}async function v(e){if(!e.trim()){h();return}const t=await f();if(!t)return;const{results:n}=await t.search(e),r=await Promise.all(n.slice(0,20).map(a=>a.data()));y(r,e)}document.addEventListener("DOMContentLoaded",()=>{const e=document.getElementById("search-input"),t=document.querySelector(".search");new MutationObserver(()=>{t.classList.contains("is-visible")?(setTimeout(()=>e.focus(),60),f()):(h(),e.value="")}).observe(t,{attributes:!0,attributeFilter:["class"]}),e.addEventListener("input",()=>{clearTimeout(d),d=window.setTimeout(()=>v(e.value),150)}),e.addEventListener("keydown",n=>{if(!(!o().length&&n.key!=="Escape"))switch(n.key){case"ArrowDown":n.preventDefault(),m(s+1);break;case"ArrowUp":n.preventDefault(),m(s<=0?-1:s-1);break;case"Enter":n.preventDefault(),b();break}})});</script> <!-- begin content --> <main class="content" aria-label="Content"> <div class="container"> <div class="row"> <div class="col col-12"> <div class="image-box"> <img class="page-image" src="/images/404.jpg" alt="Page not found"> </div> </div> </div> </div><div class="container"> <div class="row"> <div class="col col-8 push-2 col-d-10 col-m-12 push-d-1 push-m-0"> <!-- begin page --> <article class="page animate"> <div class="page-head"> <h1 class="page-title">Page not found</h1> </div> <div class="page__content">  <div class="container"> <div class="row"> <div class="col col-12" style="text-align: center"> <h2>404</h2> <p>This page has joined the dark side and cannot be found</p> <p> <a href="/" class="button button--middle" style="text-decoration: none"> <i class="ion ion-md-arrow-back"></i> Back to the blog
</a> </p> </div> </div> </div>  </div> </article> <!-- end page --> </div> </div> </div>  </main> <!-- end content --> <div class="top" title="Top"><i class="ion ion-ios-arrow-up"></i></div> <!-- begin footer-widgets --><section class="footer-widgets"> <div class="container"> <div class="row"> <div class="col col-4 col-d-6 col-t-12"> <div class="widget widget-info"> <div class="footer-logo">BloggingAbout.NET</div> <p class="footer-desc">I&#39;m a developer, international speaker and coach/trainer. I love to discuss code, software architecture and distributed systems, messaging, star wars and lego with anyone who wants to listen or speak. I currently work at Particular Software on NServiceBus.</p> </div> </div> <div class="col col-4 col-d-6 col-t-12"> <div class="widget widget-nav"> <div class="widget__head"> <h3 class="widget__title">Menu</h3> </div> <ul class="nav__list list-reset"> <li class="nav__item"> <a href="/" class="nav__link"> Home </a> </li><li class="nav__item nav__item--has-children"> <button type="button" class="nav__link nav__link--toggle" aria-expanded="false" aria-haspopup="true" aria-controls="submenu-series-8qoo8z" data-nav-toggle> Series <span class="nav__chevron" aria-hidden="true">▾</span> </button> <ul id="submenu-series-8qoo8z" class="nav__submenu list-reset" role="menu"> <li class="nav__submenu-item" role="none"> <a href="/series/servicepulse-oidc/" role="menuitem" class="nav__submenu-link"> Authenticating ServicePulse </a> </li><li class="nav__submenu-item" role="none"> <a href="/series/omnomnom/" role="menuitem" class="nav__submenu-link"> OmNomNom </a> </li> </ul> </li><li class="nav__item"> <a href="/about/" class="nav__link"> About </a> </li><li class="nav__item"> <a href="/contact/" class="nav__link"> Contact </a> </li> </ul> </div> </div> </div> </div> </section> <!-- end footer-widgets --> <!-- begin footer --> <footer class="footer"> <div class="container"> <div class="row"> <div class="col col-12 col-d-10 push-d-1 col-m-12 push-m-0"> <div class="footer__inner"> <div class="social"> <ul class="social__list list-reset"> <li class="social__item"> <a class="social__link" href="https://twitter.com/dvdstelt" aria-label="Twitter"> <i class="ion ion-logo-twitter"></i> </a> </li><li class="social__item"> <a class="social__link" href="https://github.com/dvdstelt" aria-label="GitHub"> <i class="ion ion-logo-github"></i> </a> </li><li class="social__item"> <a class="social__link" href="https://www.linkedin.com/in/dvdstelt/" aria-label="LinkedIn"> <i class="ion ion-logo-linkedin"></i> </a> </li><li class="social__item"> <a class="social__link" href="https://api.whatsapp.com/send?phone=%2B31648536810" aria-label="WhatsApp"> <i class="ion ion-logo-whatsapp"></i> </a> </li><li class="social__item"> <a class="social__link" href="/feed.xml" aria-label="RSS feed"> <i class="ion ion-logo-rss"></i> </a> </li> </ul> </div> <div class="copyright"> 2026 &copy; <a href="/"><strong>BloggingAbout.NET</strong></a>. Owned by <a href="https://compilesoftware.nl">Dennis van der Stelt</a>.
</div> </div> </div> </div> </div> </footer> <!-- end footer --> <script type="module" src="/_astro/Base.astro_astro_type_script_index_0_lang.Cg6FNaQW.js"></script> </body> </html> <script type="module">(function(){let i=window.location.pathname;i.endsWith("/")&&(i=i.slice(0,-1)),i.endsWith(".aspx")&&(i=i.slice(0,-5)),i.startsWith("/dennis/")&&(i=i.slice(7)),i.startsWith("/blogs/dennis/archive/")&&(i=i.slice(21)),/^\/\d{4}\/\d{2}\/\d{2}\/.+/.test(i)&&window.location.replace(i+"/")})();</script>