Building rich C# Desktop Apps for LINUX Desktop

Programming

Discover how Avalonia UI empowers C# developers to build modern, cross-platform desktop applications for Windows and Linux. While .NET MAUI is a strong cross-platform framework for mobile and desktop, its mobile-first focus and lack of Linux support make it less suited for desktop-centric scenarios. This article explores why Avalonia UI is the better choice for creating rich desktop experiences, with native multi-window support and consistent rendering powered by Skia. Developers coming from WPF or UWP will feel right at home with Avalonia’s XAML-based approach and full MVVM support.

Read more...

Protecting Your APIs with Rate Limiting in ASP.NET

Programming

Learn how to protect your ASP.NET Core APIs from DDOS abuse with built-in rate limiting in .NET 7+. Explore fixed window, sliding window, token bucket, and concurrency strategies, with code examples, benchmarks, and real-world best practices to keep your services secure and reliable.

Read more...

C# using a Local Language Model with LM Studio to Sort Screenshots

Programming

Learn how to use a local language model with C# and LM Studio to automatically sort screenshots into categories using AI and Vision Language Models (VLM).  Utilize the power of visual recognition with .NET!

Read more...

Smarter APIs with GraphQL

Programming

While REST is not going away anytime soon and remains perfectly suited for many use cases, GraphQL offers significant advantages for applications where flexibility, efficiency, and rapid development cycles are critical. By enabling more precise data fetching, reducing the number of network requests, and improving the overall developer experience, GraphQL is helping to shape the future of API development.

Follow this step by step guide to setup your first GraphQL Client and Server in C# with .NET!

Read more...

Handling Large Files: BufferedStream vs LINQ's Chunk method

Programming

The choice between using BufferedStream and the LINQ Chunk extension method for operating with very large files depends on your specific use case and requirements. Here we discuss the pros and cons for each.

Read more...

Locale Functions and Clean Code Principles

Programming

Local functions are methods of a type that are nested in another member. They can only be called from their containing member.  Local functions provide a clean way to organize code while potentially improving performance and maintaining better encapsulation.  Local functions should enhance readability and performance without violating Clean Code Principles.  If they make the code harder to understand or maintain, that's a sign they should be refactored into regular methods.

Read more...

C#

API Documentation Changes in .NET 9

Programming

The removal of Swagger from .NET 9 and the introduction of built-in OpenAPI support mark a significant shift in the .NET ecosystem. While this change may require developers to adapt to new tools and workflows, it also presents an opportunity to streamline and improve the API development process. The built-in OpenAPI support in .NET 9 offers a more integrated and efficient solution for generating and managing API documentation, while alternative solutions such as NSwag, ReDoc, Stoplight and Scalar provide developers with a range of options to choose from.

Read more...

.NET object-oriented fluent SQL Builder

Programming

KnightMoves.SqlObjects is a .NET NuGet package that provides an object-oriented fluent SQL builder, allowing developers to construct SQL queries using C# objects instead of string manipulation, closely mirroring T-SQL syntax for a more intuitive experience.

Read more...

Random.Shared in .NET9

Programming

With .NET9 Microsoft introduced Random.Shared for for thread-safe random number generation.

Read more...

Check if a String is a Palindrome with LINQ

Programming

You can use the power of LINQ to solve problems in just a few lines of code instead of "inventing your own algorithms" - which will lead to much cleaner code.  Let's examine for example on how to check for palindromes.

Read more...