Speeding up DefaultAzureCredential authentication in local development with Azure CLI

If you’re developing .NET applications that integrate with Microsoft Azure resources, such as Key Vault, you’re probably familiar with the DefaultAzureCredential class from the Azure.Identity library. This class simplifies the process of authenticating against Azure services by providing a unified way to retrieve access tokens. However, when working in a local development environment, you might have noticed that DefaultAzureCredential can take up to 10 seconds to retrieve your Azure CLI credentials, impacting your productivity. In this blog post, we’ll explore two ways to speed up this process: using DefaultAzureCredentialOptions and ChainedTokenCredential.

Continue reading “Speeding up DefaultAzureCredential authentication in local development with Azure CLI”

Take your .NET configuration to the next level with value substitution

Configuration in .NET is a powerful pattern that allows .NET developers to manage application settings from various sources, such as JSON files, environment variables, and more. However, sometimes developers need a way to reference and substitute configuration values from other settings, which is not provided out of the box. That’s where the GSoft.Extensions.Configuration.Substitution library comes in!

In this blog post, we will explore how the GSoft.Extensions.Configuration.Substitution library works, its benefits, and how to get started with it.

Continue reading “Take your .NET configuration to the next level with value substitution”

Universal UI testing based on image and text recognition

At every major release of the ShareGate Migration Tool (SGMT), a part of the development team spends a few hours to do regression testing. These tests cannot be automated using UI testing tools such as Cypress, Playwright and Selenium because SGMT is a desktop application made in WPF.

I started looking for UI testing solutions for desktop applications. I quickly discarded expensive UI testing suites. WinAppDriver was very interesting, but one of the requirements was to add some kind of identifiers on every UI element that we wanted to interact with. This would have required a huge effort from the team.

I wanted a solution that does not require to modify our application. Something easy to learn, where tests could be written quickly and with low-maintenance over time as the product evolve. This is how I started working on Askaiser.Marionette, a universal UI testing library based on image and text recognition, made in C#.

Continue reading “Universal UI testing based on image and text recognition”

SOLID principles: the Single Responsibility Principle

If you are a programmer, you may have heard of the SOLID principles. This acronym, among others like TDD, DI, etc.  is unfortunately more and more used as buzzwords. It is not rare to hear a candidate quoting the definition of the SOLID principles in a technical interview: single responsibility, dependency inversion… However, the most interesting part may be how to effectively use them everyday.

Continue reading “SOLID principles: the Single Responsibility Principle”

ServerPilot for your PHP development environment

ServerPilot is a cloud hosting control panel designed to be simple, efficient and available as a service. It installs everything you need to run your PHP websites and web applications in a few minutes, with a production-ready configuration on your VPS or dedicated server. In my current company, we started using ServerPilot to host every PHP websites or web applications of our clients.

My co-workers and I encountered some issues with our development environments. Some of us were using the default LAMP stack provided by apt-get, while others used a compiled version of it. In both cases, it wasn’t that optimized and we often had to deal with configuration, permissions or e-mail delivery errors.

Now, we all use the same environment on our production, staging and development environments, thanks to ServerPilot.

Continue reading “ServerPilot for your PHP development environment”