Maarten Balliauw

Information & Communications Technology

.net .net core Azure JetBrains Software Architecture Web Web API

Antwerpen, Flanders, Belgium

Maarten Balliauw

.NET and web. Works at JetBrains.

Maarten Balliauw loves building web and cloud apps. His main interests are in .NET web technologies, C#, Microsoft Azure and application performance. He is Developer Advocate at JetBrains. He's an ASP Insider and former Microsoft MVP. Maarten is a frequent speaker at various national and international events and organizes Azure User Group events in Belgium. In his free time, he brews his own beer. Maarten's blog can be found at

Current sessions

Bringing C# nullability into existing code - dammit is not the answer!

The C# nullability features help you minimize the likelihood of encountering that dreaded System.NullReferenceException. Nullability syntax and annotations give hints as to whether a type can be nullable or not, and better static analysis is available to catch unhandled nulls while developing your code. What's not to like?

Introducing explicit nullability into an existing code bases is a Herculean effort. There's much more to it than just sprinkling some `?` and `!` throughout your code. It's not a silver bullet either: you'll still need to check non-nullable variables for null.

In this talk, we'll see some techniques and approaches that worked for me, and explore how you can migrate an existing code base to use the full potential of C# nullability.

Nerd sniping myself into a rabbit hole... Streaming online audio to a Sonos speaker

After buying a set of Sonos-compatible speakers at IKEA, I was disappointed there's no support for playing audio from a popular video streaming service. They stream Internet radio, podcasts and what not. Well, not that service I want it to play!

Determined - and not knowing how deep the rabbit hole would be - I ventured on a trip that included network sniffing on my access point, learning about UPnP and running a web server on my phone (without knowing how to write anything Android), learning how MP4 audio is packaged (and has to be re-packaged). This ultimately resulted in an Android app for personal use, which does what I initially wanted: play audio from that popular video streaming service on Sonos.

Join me for this story about an adventure that has no practical use, probably violates Terms of Service, but was fun to build!

Debugging Tips and Tricks in Rider

When I started software development, I was writing “echo” statements in code to see what was happening. We’re beyond that era, but do we know how to use the debugging tools available to us? In this talk, we’ll see how we can greatly improve our debug-fu, and tour most of the debugger tools available in JetBrains Rider. A practical, demo-driven session with tips and tricks on how to let tools help us make troubleshooting and finding bugs much easier!

Building a friendly .NET SDK to connect to Space

Space is a team tool that integrates chats, meetings, git hosting, automation, and much more. It has a HTTP API that lets you integrate third party apps and workflows. That API is huge, though!

In this session, we'll focus on just the API. You will see how we built the .NET SDK for Space, and how we make that massive API more digestible. You will see how we used code generation, and various C# language features, to incrementally make the API feel like a real .NET SDK.

Building a friendly Kotlin SDK to connect to JetBrains Space

Space is a team tool that integrates chats, meetings, git hosting, automation, and much more. It has an HTTP API that lets you integrate third-party apps and workflows. That API is huge, though!

In this session, we will not spend too much time talking about Space. Instead, we'll focus on its API. We'll look at the process, thought, and technology behind the Kotlin SDK for Space, and how we make that massive API more digestible. You will see how we used code generation, domain-specific language, and how building extensibility for third-party developers means you will have to guide them into the pit of success.

Get the maximum out of Minimal APIs with ASP.NET Core

A lightweight HTTP API can use a lot of the ASP.NET Core Middleware, such as routing, authentication and authorization. Using the full-blown MVC framework for such API is just overkill!

But MVC does have some things that you'll miss when using plain "app.MapGet": you have to handle HTTP request/response handling and model binding yourself.
ASP.NET Core 6.0 introduces the missing link between writing low-level HTTP and a full-blown MVC or Razor application: minimal APIs.

In this talk, we will explore what minimal APIs are, what they are not, and how/where your applications can benefit from this lightweight model to building HTTP applications.

Become a productive .NET developer with JetBrains Rider

With .NET Core, an explosion of .NET IDE's happened! There's good old Visual Studio, but also VS Code, VS for Mac, and JetBrains Rider. In this talk, we'll dive into the latter. We'll explore navigation, automatic inspections and quick fixes, code generation, built-in tooling like version control integration and local history and look at the special scenario's the debugger has to offer. Come to this session to learn about Rider, and learn plenty of tips & tricks to enhance your development productivity.

Microservices for building an IDE – The innards of JetBrains Rider

Ever wondered how IDE’s are built? In this talk, we’ll skip the marketing bit and dive into the architecture and implementation of JetBrains Rider. We’ll look at how and why we have built (and open sourced) a reactive protocol, and how the IDE uses a “microservices” architecture to communicate with the debugger, Roslyn, a WPF renderer and even other tools like Unity3D. We’ll explore how things are wired together, both in-process and across those microservices. Let’s geek out!

Indexing and searching with Azure Functions and Search

Which NuGet package was that type in again? In this session, let's build a "reverse package search" that helps finding the correct NuGet package based on a public type name.

Together, we will create a highly-scalable serverless search engine using Azure Functions and Azure Search that performs 3 tasks: listening for new packages on (using a custom binding), indexing packages in a distributed way, and exposing an API that accepts queries and gives our clients the best result. Expect code, insights into the service design process, and more!

Past and future events

See my blog for previous talks

31 May - 2 Jun 2018