Archive

2023


Native interop: Where .NET beats the competition in app development

In the recent days Visual Studio for Mac was killed of and again the fears that .NET's MAUI is silverlighted by Microsoft comes up.

2022


How the Omnisharp roadmap affects .NET in Cooperations

The announcement to make the LSP server host of OmniSharp closed source hits me hard. I cannot understand why the DevDiv leadership of Microsoft is so willingly and ongoingly destroying the reputation of .NET (Core). .NET Core is one of the three core pillars (VS Code, TypeScript and .NET Core) which generated respect for Microsoft in the wider programming community within the last 10 years.

2021


Extension Methods

Extension Methods in C# are a crucial element of modern .NET. They are the foundation of LINQ and used everywhere. However, the are sometimes considered as a bad smell when it comes to code reviewing. In this article I want to discuss the concept of extension methods and its position in the OO patterns & principles.

On Building a Middleware Framework

I am fascinated by Middleware Stacks. Middlewares help us to customize a function invocation (typically a request handler) with additional behavior before and after the invocation of function. Popular examples are authentication, logging or exception handling middlewares. Often they handle non-functional requirements (like logging, security, ...).

2020


LEGO Powered UP - Motor Modes POS and APOS

The LEGO Control+ motors - Technic XLarge Linear Motor and Technic Large Linear Motor - have internally the modes POS (reporting a position) and APOS (reporting an absolute position). Further does the LEGO Wireless Protocol specify methods StartSpeedForDegrees and GotoAbsolutePosition.

xUnit Theories with Type Parameters

When unit testing generic protocols like the Lego Wireless Protocol input values might be lead to different expected values. Sometimes, however, not only the value changes but also the data types of what to expect. xUnit's Assert.Equal(expected, actual) methods has overloads for countless basic data types like short, double, bool and elementary support for enums. To activate these, the expected argument would need to be parameterized with the right data type.

ReactiveX Middlewares

While implementing sharpbrick/powered-up an interesting problem came up to solve: How to handle the incoming messages of the Bluetooth Low Energy based communication protocol. On top of the Bluetooth abstraction there is a simple callback which would receive roughly 50 different message types which would need dispatching to several locations, some locations would even spawn up dynamically over time. I needed an infrastructure! I needed a middleware 😀.

Using PlatformIO and Git

When working on my private PlatformIO project for a watertank sensor, I repeatingly struggled with how to manage the source code. PlatformIO is unfortunately not very clear explaining this topic.

2019


First Post

This is my first post!