Post

06 October 2025

06 October 2025

Big O

Big O notation describes the relationship between a function’s input and its wall-clock time.
From slowest to fastest:

  • O(1), constant time (best!)
  • O(log n), logarithmic time
  • O(n), linear time
  • O(n^2), quadratic time

It’s Not Wrong that “🤦🏼‍♂️”.length == 7

Very detailed comparison of the different ways that different languages calculate the length of a string. Rust is best, Python is bizarrest!

An Illustrated Guide to OAuth

Nice, clear illustration of the basics of OAuth. It explains the reason for it and the security design choices. It also mentioned what it doesn’t explain (there’s more than one way of doing it).

How to debug a web app with Playwright MCP and GitHub Copilot

How to ask CoPilot to reproduce and fix a UI bug in a reproducible way by describing the bug.

Writing isolated (integration) tests with TestContainers

Using TestContainers to spin up test instances of external systems that your system talks to. This allows you to write integration tests without relying on real external systems. Sounds to me a bit like .NET Aspire, although TestContainers is multi-language.

Google Chrome at 17 - A history of our browser

The motivations and history of Chrome. The start is interesting, but I didn’t read the whole thing. Nice to see that the core values are still the same.

C# Magical Syntax

How to write classes that implement common features - by implementing methods with specific names - ie by convention rather than by explicitly implementing an interface.

  • foreach - you need to implement GetEnumerator()
  • deconstruct a tuple - you need to implement Deconstruct()
  • await - implement GetAwaiter() and a couple of other things
  • Linq - implement the standard operators - Select etc

This vulnerability could have allowed me to compromise every Entra ID tenant in the world

Critical flaw in the Azure AD Graph API (deprecated in favor of Microsoft Graph). If I understood correctly, it’s a combination of an undocumented type of token (Actor Tokens) and failure to properly validate the originating tenant.

IHostedService vs. BackgroundService

at the startup of the application, ASP.NET checks whether there are any IHostedService implementation registered or not, and if so it will run them and waits for them to complete their task

BackgroundService is an abstract classes that has implemented IHostedService interface

So BackgroundService is also a IHostedService, but the implementation doesn’t wait for the background task to complete.

Development gets better with Age

Why older developers improve with age. Basically because they’ve seen it all before, but keep learning new stuff.

This post is licensed under CC BY 4.0 by the author.