• Two silhouettes with a glowing connection between them representing equal C# records.

    Comparing records with collections in C#

    Records have surprising equality-semantics when they contain collections. Here is a simple way to fix it.
  • Computer screen displaying C# code with a magnifying glass highlighting logging functions and a checklist of passed test cases.

    Testing your logging in C#

    When you want to test that you are logging correctly it can be tricky - as extension methods and statics are hard to mock. Here is a way to do it.
  • illustration of a vibrant Fediverse community rising like a phoenix with interconnected nodes representing various platforms, set against a starry cyberspace background, symbolizing a welcoming and interconnected online world

    A new home in the Fediverse

    I have my own Fediverse server now, and I think you should join the Fediverse.
  • A new computer setup with various applications

    Setting Up a New Windows PC

    Setting up a new computer can be a bit of a chore, this is my list of things I always set up on a new Windows PC.
  • A diverse group of people gathering around a computer discussing ideas and creating something

    From big ideas to small wins

    From big ideas to small wins - a story about a hackathon.
  • A split monolith with a smaller statue in front of it

    On microservices

    Much has been written about microservices. I have thoughts on when they make sense and the consequences of using them.
  • Make it go fast

    Optimizing this site

    I've put some effort into optimizing this site
  • drawing of a server-room

    Going serverless with Jekyll

    This blog is now powered by Jekyll
  • A Commodore 64

    Reconnecting

    I met an old friend and colleague at a conference, and we talked about old computers. I am now intrigued and slightly intimidated!
  • Merging roots

    Merging aggregates

    As we learn and evolve our system we sometimes need to move the responsibilities of one aggregate-root into another. This article explains how to do that in a consistent, event-sourced manner.
  • A black car in a very clean garage with two red doors

    Generating domain-driven code

    Letting a large-language-model generate a domain in code
  • decision trees

    OneOf (with benchmarks)

    OneOf is a library that gives something close to discriminated unions in C#. How does it perform?
  • A plate of creamy chicken pasta with spinach and sun-dried tomatoes

    AI Chicken

    AI-made recipe for chicken pasta with spinach and sun-dried tomatoes
  • multicoloured cogs on a blue background

    VSCode tasks

    Setting up tasks in vscode to get a smoother red-green-refactor cycle.
  • Screenshot of vscode with a devcontainer active

    DevContainers

    How to use devcontainers in vscode to make your development environment repeatable and contained
  • A snowy landscape with trees, houses, garages a road and a gray sky

    Winter is back

    The cold and snow has returned to Norway
  • We care about your privacy

    if a website tells you that they “care about your privacy” while presenting tracking cookies – they don’t.

  • looking up towards bookshelves with books in a modern library with a glass roof

    Domains in docs

    Do not use real domains or ip-addresses in your documentation!
  • An open book with a wooden stick lying across the pages

    BookWyrm

    BookWyrm is a social site that supports ActivityPub and centers on reading and books.
  • Kate Morley’s palette of 12 muted colours

    A nice palette

    A nice palette of 12 muted colours
  • Choir

    I have started singing in a few choirs local to me.
  • man listening to headphones in a forest

    Podcasts

    Podcasts I follow
  • Hello world!

    Own your words, they say. So I started this blog on my own domain.