Skip to main content

Posts

GitHub Copilot–3 misconceptions why people don’t use it

As more as I’m motivating my teams to adopt and integrate GitHub Copilot in their development processes, the more I get push back with reasons why they cannot use it. This resistance often stems from misconceptions rather than Copilot's actual limitations. In this post, I'll address three common misconceptions I've encountered and share strategies for overcoming them.  Misconception 1: "Copilot produces low-quality and insecure code" One of the most persistent concerns I hear is that Copilot generates code that's either functionally deficient or contains security vulnerabilities. While it's true that Copilot isn't perfect, this concern often overestimates the risks while underestimating both Copilot's capabilities and the developer's role in the process: Copilot isn't designed to replace code review or testing practices The tool works best as a pair-programming assistant, not an autonomous coder Recent studies show that d...

AsyncEnumerable in C#: The importance of EnumeratorCancellation attribute

Modern applications often need to process large datasets or streams of data asynchronously. When we need to iterate through such data without loading everything at once, we've traditionally used IEnumerable. But what if our data access is inherently asynchronous? Enter IAsyncEnumerable<T> , introduced in C# 8.0 and .NET Core 3.0, designed specifically for asynchronous streaming scenarios. In this post, we'll explore IAsyncEnumerable<T> and why the EnumeratorCancellation attribute with a CancellationToken is crucial for writing robust, cancellable asynchronous code. What is IAsyncEnumerable<T>? IAsyncEnumerable<T> is an interface that represents a sequence of elements that can be asynchronously enumerated. It's the asynchronous counterpart to the familiar IEnumerable<T> interface. The beauty of IAsyncEnumerable<T> is that it allows you to: Perform asynchronous operations while iterating through a sequence Yield resu...

The quest of the 403.16 error in IIS

Ever heard about the 403.16 HTTP error response code? I certainly did not. But it was exactly this error code we got back after configuring IIS to expect a client certificate. In this post I’ll explain how we tackled the issue and found a solution(workaround?). How to configure IIS to expect a client certificate? First step is to enable SSL on IIS: Open IIS Manager . Select your site and click Bindings . Add or edit an HTTPS binding and select a valid SSL certificate . Now we need to configure our website so that it requires a client certificate: In IIS Manager, select your site. Click SSL Settings . Check Require SSL . Under Client certificates , select Require . Click on Apply . A last optional step is to configure client certificate mapping: Navigate to Authentication settings. Enable IIS Client Certificate Mapping Authentication . Remar...

How our kids learn–Object relational mapping

I was listening to the Coaching for Leaders podcast today where the episode featured Jon Fogel discussing "How to raise your kids without raising your voice." If you're a parent, I strongly recommend this episode. The ineffectiveness of punishment The key message that resonated with me is that punishment simply doesn't work. Many of us think we're "teaching our kids a lesson," but children often can't even remember what they were being punished for. Instead of imposing retribution, Jon suggests helping your kids understand the natural and logical consequences of their behaviors. For example, rather than punishing a child who refuses to wear a coat, letting them experience being cold (within safe limits) teaches the practical reason for wearing one far more effectively. One quote from the podcast particularly struck me: "Get curious, not furious: Your kid's not giving you a hard time; they're having a hard time." This...

Tool calling using MCP with Semantic Kernel

Semantic Kernel has the concept of a plugin as a way to give your AI superpowers and allow it to perform actions that it wouldn’t be able to do otherwise. A plugin consists of one or more functions that are available to your AI to be invoked. In Semantic Kernel you can create native plugins that are written in C#, Java or Python or create a plugin based on an OpenAPI specification. Behind the scenes, Semantic Kernel leverages function calling (also called tool calling). With function calling, LLMs can request a particular function, invoke it and capture the results. The way that these tools are created and called can be different from AI to AI and platform to platform. To tackle this problem Anthropic created the Model Context Protocol as a way to standardize all these integrations. Think of MCP like a USB-C port for AI applications. Just as USB-C provides a standardized way to connect your devices to various peripherals and accessories, MCP provides a standardized way to co...

Git cherry-picking

Git is my 'go-to' version control tool for a long time. I switched from SVN & TFVS (Team Foundation Version Control) a long time ago and never looked back. One feature that I used sometimes in TFVC was the cherry-pick feature but since I started using GIT I never used cherry-pick anymore. Until today... What is cherry-picking? Cherry-picking refers to the process of selecting a specific, individual commit from one branch and applying it to another. Unlike merging or rebasing entire branches, cherry-picking lets you choose exactly which changes you want to incorporate. Think of it as picking cherries from a tree (hence the name): instead of harvesting all the fruit, you carefully select only the ripest, most desirable ones. When to use cherry-picking? I have some bad memories from using cherry-picking in TFVC as it was used a lot as a poor mans alternative to a good versioning strategy. But there are some scenarios where cherry-picking can be useful: Backpor...

Semantic Kernel with Ollama returns 404 - The final solution

Today I had to do some small changes in an existing project where we were using Semantic Kernel together with Ollama during debugging and testing. As Ollama exposes an Open AI compatible API, this is possible without any code changes. At least it was... Here is the code I was using: When I opened the project I noticed that some of the packages references where outdated so I started by upgrading to the latest version of the Semantic Kernel NuGet packages. However after doing that the requests started to fail with a 404 error message. Mmm? Didn’t I got the same error before? And indeed I talked about this issue in an earlier post . The issue is still there as I could confirm by looking at the Ollama log messages: Here is the successful request using the old Semantic Kernel version: [GIN] 2025/04/24 - 10:05:40 | 200 |    48.466781s |       127.0.0.1 | POST     "/v1/chat/completions" Here is the failing ...