Create Excels with C# and ClosedXML: A tutorial
Quick tutorial about creating xlsx Excels with C# and the ClosedXML nuget package.
The blog posts only covers the most important functionality. More extensive code examples can be found in the GitHub project.
DDD Europe 2025
Last month, I had the opportunity to attend DDD Europe 2025 in the Queen Elisabeth Hall in Antwerp — a few inspiring days full of insights, ideas, and engaging discussions around Domain-Driven Design, software quality, and architecture. Here are some of my key takeaways:
Serving a Dockerized web app over https on Synology
You’ve developed the most fancy application and are running it on your Synology in a Docker container.
But you really don’t want that ugly “Not secure” when opening it. This series goes over your options, starting with the easiest one to setup: using the Synology nginx.
Training with ML.NET and LightGBM on Synology with Docker
dotnet/machinelearning: ML.NET is an open source and cross-platform machine learning framework for .NET.
microsoft/LightGBM: A fast, distributed, high performance gradient boosting (GBT, GBDT, GBRT, GBM or MART) framework based on decision tree algorithms, used for ranking, classification and many other machine learning tasks.
After writing some code to fetch and mold the data, I was ready to train “my” AI, dubbed “PongRank” which was easy enough and all was good until I added a small WebApi to automate future syncing, retraining and predictions.
Site Inspector
While moving some todos from one location to another I came across “Check Site Inspector” and thought, why not run it against this website right now – how hard can it be.
Not that hard it turns out.
Bootcamp: Home Automation
For our bootcamp we try to get everyone out of their comfort zone and, like many of our sessions, try to do something hands-on.
This year the topic of choice was “Home Automation”. The day was divided into two parts:
- Solder your own “smart socket” (and take it home with you!)
- Integrate it into one of the “smart houses” with Home Assistant
Newtonsoft.Json vs System.Text.Json
System.Text.Json (STJ) is about twice as fast as Newtonsoft.Json while only consuming 50% as much memory. A legacy project might still be using Newtonsoft but chances are serialization isn’t a bottleneck so it’s probably not worth making the switch.
For new applications you’ll want to stick with STJ however. Only add the extra nuget if you really need one of the advanced Newtonsoft features (ex: Linq to Json, polymorphic serialization, circular reference handling).
Bootcamp: Home Automation
For our bootcamp we try to get everyone out of their comfort zone and, like many of our sessions, try to do something hands-on.
This year the topic of choice was “Home Automation”. The day was divided into two parts:
- Solder your own “smart socket” (and take it home with you!)
- Integrate it into one of the “smart houses” with Home Assistant
.NET Testing Frameworks
Comparing .NET Testing Frameworks.
xunit/xunit: Community-focused unit testing tool
nunit/nunit: NUnit Framework
microsoft/testfx: MSTest framework and adapter
thomhurst/TUnit: A modern, fast and flexible .NET testing framework
ReduxJS/Toolkit: createSelector
reduxjs/reselect: Create memoized ‘selector’ functions
One of the Redux Style Guide “Strongly Recommended” rules is Keep State Minimal and Derive Additional Values:
Keep the actual data in the Redux store as minimal as possible, and derive additional values from that state as needed.
Another strongly recommended rule is Normalize Complex Nested/Relational State
Many applications need to cache complex data in the store. That data is often received in a nested form from an API, or has relations between different entities in the data (such as a blog that contains Users, Posts, and Comments).
Of course your components are interested in those derived values and in the nested data. Keeping those calculations and recombining the data efficient is where createSelector comes into play.










