03 October 2022

03 October 2022

Bringing Kestrel + YARP to Azure App Services 🔗

Article describing the motivation and benefits of migrating Azure App Services to Kestel + YARP.

App Services was launched not so long after Cloud Services, and the architecture was not so different, and it's stayed that way until now, using IIS on HTTP.sys.

Kestrel is the webserver that's been part of .Net Core since the beginning, and YARP is built with ASP.NET and .Net.

This combination is more modern and performs much better.

Performance Improvements in .NET 7 🔗

Article with waaay too much detail on all the performance improvements in .Net 7 compared to .Net 6 which was already pretty good.

async/await 🔗

Why do it?. Scalability.

How it works and how concurrency is different from parallelism.

Parallelism is doing more than one thing at the same time, concurrency is doing something else while someone else performs a thing you are waiting for.

It's good to know what the compiler is doing for you when you use async/await so that you can hopefully avoid the issues that come when you do it wrong.

One-time passwords 🔗

In case you ever wondered how one-time passwords work, read this article. It's actually not all that complicated!

QR codes 🔗

In case you ever wondered how QR codes work, this article describes the layout of the QR code. He skips the hard part (error correction), although I suppose that's the same as I learned back in the day.

C# discards 🔗

This article explains C# discards (the title says "lambda discards", but it's about more than just that). They're not as simple as they seem, and they way they work is different for C# before 8, 8, 9 or 10.

Before C# 8 they were just variables that indicated an intention to be unused. The analyzers recognize that, so that for example by changing this:

public static void ShowNumber(int i)
{
    Console.WriteLine(42);
}

to this:

public static void ShowNumber(int _)
{
    Console.WriteLine(42);
}

you avoid the "remove unused parameters" warning.

C# 8 and onwards made discards more and more a part of the language, for example allowing you to define two parameters with the same discard name:

Func<int, int, int> f = (_, _) => 42;