<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <id>https://taraskovalenko.github.io/en/</id>
  <title>Taras Kovalenko - English</title>
  <subtitle>Practical engineering notes about .NET, architecture, cloud platforms, performance, and AI.</subtitle>
  <updated>2026-07-30T18:01:12+03:00</updated>
  <author>
    <name>Taras Kovalenko</name>
    <uri>https://taraskovalenko.github.io/en/</uri>
  </author>
  <link rel="self" type="application/atom+xml" href="https://taraskovalenko.github.io/en/feed.xml"/>
  <link rel="alternate" type="text/html" hreflang="en" href="https://taraskovalenko.github.io/en/"/>
  <generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator>
  <rights>© 2026 Taras Kovalenko</rights>
  <icon>https://taraskovalenko.github.io/assets/img/favicons/favicon.ico</icon>
  
  
  <entry>
    <title>Threat Modeling an AI Agent: Prompt Injection Is Only the First Attack Vector</title>
    <link href="https://taraskovalenko.github.io/en/posts/ai-agent-threat-model/" rel="alternate" type="text/html"/>
    <published>2026-07-29T09:00:00+03:00</published>
    <updated>2026-07-29T09:00:00+03:00</updated>
    <id>https://taraskovalenko.github.io/en/posts/ai-agent-threat-model/</id>
    <author><name>Taras Kovalenko</name></author>
    
    <category term=".net"/>
    
    <category term="C#"/>
    
    <category term="AI"/>
    
    <category term="security"/>
    
    <summary type="text">Prompt injection is one of the best-known attack classes affecting large language model systems. In an agent architecture, though, it is only a way to influence what the model decides. Once an LLM has memory, tools, API access, and permission to modify external state, an erroneous or adversarially influenced output can initiate a financial transaction, send a message, or disclose data. That is ...</summary>
  </entry>
  
  <entry>
    <title>Result Pattern is an elegant alternative to exceptions and null values</title>
    <link href="https://taraskovalenko.github.io/en/posts/result-pattern/" rel="alternate" type="text/html"/>
    <published>2025-06-27T10:00:00+03:00</published>
    <updated>2025-06-27T10:00:00+03:00</updated>
    <id>https://taraskovalenko.github.io/en/posts/result-pattern/</id>
    <author><name>Taras Kovalenko</name></author>
    
    <category term=".net"/>
    
    <category term="C#"/>
    
    <category term="design patterns"/>
    
    <category term="software architecture"/>
    
    <summary type="text">Managing errors and missing values ​​has always been one of the most difficult parts of software development. In the .NET world, developers have traditionally relied on the exceptions mechanism to handle error situations and the null value to indicate the absence of data. However, there is a more elegant and functional approach, Result Pattern, which allows you to explicitly model the successfu...</summary>
  </entry>
  
  <entry>
    <title>.NET JIT and IL - a complete breakdown of the magic under the hood of your code</title>
    <link href="https://taraskovalenko.github.io/en/posts/cli-jit-il/" rel="alternate" type="text/html"/>
    <published>2025-05-28T10:00:00+03:00</published>
    <updated>2025-05-28T10:00:00+03:00</updated>
    <id>https://taraskovalenko.github.io/en/posts/cli-jit-il/</id>
    <author><name>Taras Kovalenko</name></author>
    
    <category term=".net"/>
    
    <category term="C#"/>
    
    <category term="performance"/>
    
    <category term="Architecture"/>
    
    <summary type="text">When you write code in C#, F# or VB.NET and press F5, real magic happens behind the scenes. Your code is not executed directly by the processor, but goes through a complex yet elegant transformation process. First, it is converted into intermediate code called IL (Intermediate Language), and then the JIT (Just-In-Time) compiler converts this IL into machine code that your processor can execute....</summary>
  </entry>
  
  <entry>
    <title>CancellationToken in C# - usage, issues and best practices</title>
    <link href="https://taraskovalenko.github.io/en/posts/cancellation-token/" rel="alternate" type="text/html"/>
    <published>2025-05-16T10:00:00+03:00</published>
    <updated>2025-05-16T10:00:00+03:00</updated>
    <id>https://taraskovalenko.github.io/en/posts/cancellation-token/</id>
    <author><name>Taras Kovalenko</name></author>
    
    <category term=".net"/>
    
    <category term="C#"/>
    
    <category term="Threading"/>
    
    <summary type="text">What is CancellationToken?</summary>
  </entry>
  
  <entry>
    <title>Configuring redirect headers in .NET when working with Azure Application Gateway</title>
    <link href="https://taraskovalenko.github.io/en/posts/agw-hostname/" rel="alternate" type="text/html"/>
    <published>2025-04-25T10:00:00+03:00</published>
    <updated>2025-04-25T10:00:00+03:00</updated>
    <id>https://taraskovalenko.github.io/en/posts/agw-hostname/</id>
    <author><name>Taras Kovalenko</name></author>
    
    <category term=".net"/>
    
    <category term="C#"/>
    
    <category term="azure"/>
    
    <category term="Application Gateway"/>
    
    <summary type="text">When we deploy a .NET application on Azure App Service and configure access to it via Azure Application Gateway, there is a typical problem of determining the correct host and request scheme.The crux of the problem is that the request goes through several layers to your application:</summary>
  </entry>
  
  <entry>
    <title>Model Context Protocol in .NET - Understanding, Application and Examples</title>
    <link href="https://taraskovalenko.github.io/en/posts/model-context-protocol/" rel="alternate" type="text/html"/>
    <published>2025-04-08T10:00:00+03:00</published>
    <updated>2025-04-08T10:00:00+03:00</updated>
    <id>https://taraskovalenko.github.io/en/posts/model-context-protocol/</id>
    <author><name>Taras Kovalenko</name></author>
    
    <category term=".net"/>
    
    <category term="C#"/>
    
    <category term="AI"/>
    
    <category term="MCP"/>
    
    <summary type="text">Model Context Protocol (MCP) opens up new possibilities for interacting with AI models and integrating them into your .NET applications. In this article, we’ll look at what MCP is, what problems it solves, and how you can use it in your projects.</summary>
  </entry>
  
  <entry>
    <title>Encryption in MongoDB - or why I switched to another database</title>
    <link href="https://taraskovalenko.github.io/en/posts/mongodb-encryption/" rel="alternate" type="text/html"/>
    <published>2025-03-10T09:00:00+02:00</published>
    <updated>2025-03-10T09:00:00+02:00</updated>
    <id>https://taraskovalenko.github.io/en/posts/mongodb-encryption/</id>
    <author><name>Taras Kovalenko</name></author>
    
    <category term=".net"/>
    
    <category term="C#"/>
    
    <category term="security"/>
    
    <summary type="text">Article on How Modern Databases Require a Fossil Artifact to Protect Your Data</summary>
  </entry>
  
  <entry>
    <title>FluentValidation + MediatR using IResult is an effective approach</title>
    <link href="https://taraskovalenko.github.io/en/posts/fluent-validation-with-mediatr/" rel="alternate" type="text/html"/>
    <published>2025-03-09T09:00:00+02:00</published>
    <updated>2025-03-09T09:00:00+02:00</updated>
    <id>https://taraskovalenko.github.io/en/posts/fluent-validation-with-mediatr/</id>
    <author><name>Taras Kovalenko</name></author>
    
    <category term=".net"/>
    
    <category term="C#"/>
    
    <category term="performance"/>
    
    <category term="software architecture"/>
    
    <category term="GC"/>
    
    <summary type="text">In modern .NET applications, the combination of FluentValidation and MediatR has become a popular approach to implement query validation.Traditionally, when validation fails, we throw the exception ValidationException.However, in many cases this is not the most effective approach.In this article, we’ll look at an alternative method using IResult that improves performance and reduces memory usage.</summary>
  </entry>
  
  <entry>
    <title>A complete guide to ConfigureAwait in .NET</title>
    <link href="https://taraskovalenko.github.io/en/posts/configure-await/" rel="alternate" type="text/html"/>
    <published>2025-03-03T09:00:00+02:00</published>
    <updated>2025-03-03T09:00:00+02:00</updated>
    <id>https://taraskovalenko.github.io/en/posts/configure-await/</id>
    <author><name>Taras Kovalenko</name></author>
    
    <category term=".net"/>
    
    <category term="C#"/>
    
    <category term="performance"/>
    
    <category term="asynchronous programming"/>
    
    <summary type="text">Asynchronous programming has become the basis of modern development on the .NET platform.The async/await mechanism greatly simplified the work with asynchronous operations, but brought with it certain nuances that are important to understand in order to create effective applications. One of the key aspects of asynchronous programming in .NET is the ConfigureAwait method, which allows you to con...</summary>
  </entry>
  
  <entry>
    <title>Garbage Collection in .NET - Everything you need to know</title>
    <link href="https://taraskovalenko.github.io/en/posts/garbage-collection/" rel="alternate" type="text/html"/>
    <published>2025-03-01T09:00:00+02:00</published>
    <updated>2025-03-01T09:00:00+02:00</updated>
    <id>https://taraskovalenko.github.io/en/posts/garbage-collection/</id>
    <author><name>Taras Kovalenko</name></author>
    
    <category term=".net"/>
    
    <category term="C#"/>
    
    <category term="GC"/>
    
    <category term="performance"/>
    
    <summary type="text">Garbage collection (Garbage Collection, GC) is an automatic memory management mechanism that frees developers from having to manually allocate and deallocate memory. In .NET, this is one of the key technologies that differentiates the platform from languages ​​where memory is managed manually.</summary>
  </entry>
  
  <entry>
    <title>SOLID is the foundation of adaptive architecture</title>
    <link href="https://taraskovalenko.github.io/en/posts/solid/" rel="alternate" type="text/html"/>
    <published>2025-02-23T09:00:00+02:00</published>
    <updated>2025-02-23T09:00:00+02:00</updated>
    <id>https://taraskovalenko.github.io/en/posts/solid/</id>
    <author><name>Taras Kovalenko</name></author>
    
    <category term=".net"/>
    
    <category term="C#"/>
    
    <category term="SOLID"/>
    
    <category term="software architecture"/>
    
    <category term="design patterns"/>
    
    <summary type="text">SOLID is an acronym for five fundamental principles of object-oriented programming and design, introduced by Robert Martin.These principles help create software systems that are:</summary>
  </entry>
  
  <entry>
    <title>Frozen Collections in .NET 8 - A new era of immutable collections</title>
    <link href="https://taraskovalenko.github.io/en/posts/frozen-collections/" rel="alternate" type="text/html"/>
    <published>2025-02-16T09:00:00+02:00</published>
    <updated>2025-02-16T09:00:00+02:00</updated>
    <id>https://taraskovalenko.github.io/en/posts/frozen-collections/</id>
    <author><name>Taras Kovalenko</name></author>
    
    <category term=".net"/>
    
    <category term="performance"/>
    
    <category term="C#"/>
    
    <category term="performance optimization"/>
    
    <summary type="text">.NET 8 introduced a new type of collections - Frozen Collections, which are designed for scenarios where data is created once and then actively read.Unlike regular collections, they are optimized for maximum performance when reading data.The main feature of Frozen Collections is that they become completely immutable once created.This allows for a number of optimizations that are not possible wi...</summary>
  </entry>
  
  <entry>
    <title>SAGA pattern - distributed transaction management in .NET</title>
    <link href="https://taraskovalenko.github.io/en/posts/saga/" rel="alternate" type="text/html"/>
    <published>2025-02-15T09:00:00+02:00</published>
    <updated>2025-02-15T09:00:00+02:00</updated>
    <id>https://taraskovalenko.github.io/en/posts/saga/</id>
    <author><name>Taras Kovalenko</name></author>
    
    <category term=".net"/>
    
    <category term="design patterns"/>
    
    <category term="transaction management"/>
    
    <category term="C#"/>
    
    <category term="software architecture"/>
    
    <summary type="text">What is the SAGA pattern?</summary>
  </entry>
  
  <entry>
    <title>Source Generators in C# - from theory to practice</title>
    <link href="https://taraskovalenko.github.io/en/posts/source-generators/" rel="alternate" type="text/html"/>
    <published>2025-01-02T12:00:00+02:00</published>
    <updated>2025-01-02T12:00:00+02:00</updated>
    <id>https://taraskovalenko.github.io/en/posts/source-generators/</id>
    <author><name>Taras Kovalenko</name></author>
    
    <category term=".net"/>
    
    <category term="Roslyn"/>
    
    <category term="Source Generator"/>
    
    <category term="C#"/>
    
    <summary type="text">Source Generators were introduced in .NET 5 as a compile-time code generation tool, a compile-time metaprogramming tool in C#.Before their appearance, developers used different approaches to code generation:</summary>
  </entry>
  
  <entry>
    <title>GitHub Actions is one of the best CI/CD platforms out there</title>
    <link href="https://taraskovalenko.github.io/en/posts/github-actions/" rel="alternate" type="text/html"/>
    <published>2024-12-25T12:00:00+02:00</published>
    <updated>2024-12-25T12:00:00+02:00</updated>
    <id>https://taraskovalenko.github.io/en/posts/github-actions/</id>
    <author><name>Taras Kovalenko</name></author>
    
    <category term="Git"/>
    
    <category term="GitHub"/>
    
    <category term="CI/CD"/>
    
    <category term="Tips"/>
    
    <summary type="text">It’s no secret that GitHub is the world’s largest collaborative software development platform that provides tools for version control, project management, and team collaboration. It is built on top of Git, a version control system that allows teams to efficiently work on code, track changes, and ensure software stability.GitHub Actions is one of the platform’s key tools that allows you to autom...</summary>
  </entry>
  
  <entry>
    <title>Connecting to a locally installed SQL Server from a Docker container</title>
    <link href="https://taraskovalenko.github.io/en/posts/sqlserver-with-docker/" rel="alternate" type="text/html"/>
    <published>2023-09-09T13:00:00+03:00</published>
    <updated>2023-09-09T13:00:00+03:00</updated>
    <id>https://taraskovalenko.github.io/en/posts/sqlserver-with-docker/</id>
    <author><name>Taras Kovalenko</name></author>
    
    <category term=".net"/>
    
    <category term="EntityFramework"/>
    
    <category term="Interceptor"/>
    
    <summary type="text">In recent decades, the field of information technology has experienced a revolution in the deployment and management of software applications. Startups and corporations, developers and administrators, are all familiar with the security, scalability, and reliability challenges of software applications. This is where Docker enters the scene, which has become a real revolution in the field of cont...</summary>
  </entry>
  
  <entry>
    <title>Interceptors in Entity Framework Core</title>
    <link href="https://taraskovalenko.github.io/en/posts/ef-core-interceptors/" rel="alternate" type="text/html"/>
    <published>2023-03-28T13:00:00+03:00</published>
    <updated>2023-03-28T13:00:00+03:00</updated>
    <id>https://taraskovalenko.github.io/en/posts/ef-core-interceptors/</id>
    <author><name>Taras Kovalenko</name></author>
    
    <category term=".net"/>
    
    <category term="EntityFramework"/>
    
    <category term="Interceptor"/>
    
    <summary type="text">During software development, sometimes there is a need to automatically modify certain actions, for example, to automatically add headers to HTTP requests from the client to the server, to perform certain logic before or after a certain user action, etc., to store information about these actions, etc.All this can be done directly in the part of the code that you need, but if you have a large pr...</summary>
  </entry>
  
  <entry>
    <title>Using TLS/SSL certificates in a .NET application for AWS Beanstalk</title>
    <link href="https://taraskovalenko.github.io/en/posts/aws-beanstalk-custom-ssl-certificate/" rel="alternate" type="text/html"/>
    <published>2023-03-23T12:00:00+02:00</published>
    <updated>2023-03-23T12:00:00+02:00</updated>
    <id>https://taraskovalenko.github.io/en/posts/aws-beanstalk-custom-ssl-certificate/</id>
    <author><name>Taras Kovalenko</name></author>
    
    <category term=".net"/>
    
    <category term="aws"/>
    
    <category term="security"/>
    
    <summary type="text">In the previous article, we explained how to easily create and add your own SSL certificate to Azure App Service and use it in our .NET application. Today we will figure out how to perform an identical task, but we will use AWS Beanstalk instead of Azure App Service.</summary>
  </entry>
  
  <entry>
    <title>How to securely store and use sensitive data with Azure Key Vault</title>
    <link href="https://taraskovalenko.github.io/en/posts/azure-key-vault/" rel="alternate" type="text/html"/>
    <published>2023-03-22T12:00:00+02:00</published>
    <updated>2023-03-22T12:00:00+02:00</updated>
    <id>https://taraskovalenko.github.io/en/posts/azure-key-vault/</id>
    <author><name>Taras Kovalenko</name></author>
    
    <category term=".net"/>
    
    <category term="azure"/>
    
    <category term="security"/>
    
    <summary type="text">When developing almost any solution, we need to store some sensitive data. It can be both a connection string to the database with credentials about the user (login/password), and data about payment systems. In each application, this will be what is needed to perform the automation of certain tasks.Usually, and this is dangerous and bad practice, this data is stored in application configuration...</summary>
  </entry>
  
  <entry>
    <title>Using TLS/SSL certificates in a .NET application for Azure App Service</title>
    <link href="https://taraskovalenko.github.io/en/posts/configure-ssl-certificate-in-code/" rel="alternate" type="text/html"/>
    <published>2023-03-19T12:00:00+02:00</published>
    <updated>2023-03-19T12:00:00+02:00</updated>
    <id>https://taraskovalenko.github.io/en/posts/configure-ssl-certificate-in-code/</id>
    <author><name>Taras Kovalenko</name></author>
    
    <category term=".net"/>
    
    <category term="azure"/>
    
    <category term="tls/ssl"/>
    
    <category term="security"/>
    
    <summary type="text">Every day, more and more companies experience breaches and loss/leakage of personal data. In many cases, this is the usual phishing and carelessness of users, but there are also many cases where companies neglect security and do not conduct cyber attack testing (Penetration test).</summary>
  </entry>
  
</feed>
