skip to content
Relatively General .NET

AI Impact - normalizing Good Enough

by Oren Eini

posted on: April 25, 2025

I was just reviewing a video we're about to publish, and I noticed something in the subtitles. It said, "Six qubits are used for..."I got all excited thinking RavenDB was jumping into quantum computing. But nope, it turned out to be a transcription error. What was actually said was, "Six kilobytes are used for..."To be fair, I listened to the recording a few times, and honestly, "qubits" isn't an unreasonable interpretation if you're just going by the spoken words. Even with context, that transcription isn't completely out there. I wouldn't be surprised if a human transcriber came up with the same result.Fixing this issue (and going over an hour of text transcription to catch other possible errors) is going to be pretty expensive. Honestly, it would be easier to just skip the subtitles altogether in that case. Here's the thing, though. I think a big part of this is that we now expect transcription to be done by a machine, and we don't expect it to be perfect. Before, when it was all done manually, it cost so much that it was reasonable to expect near-perfection.What AI has done is make it cheap enough to get most of the value, while also lowering the expectation that it has to be flawless.So, the choices we're looking at are:AI transcription - mostly accurate, cheap, and easy to do.Human transcription - highly accurate, expensive, and slow.No transcription - users who want subtitles would need to use their own automatic transcription (which would probably be lower quality than what we use).Before, we really only had two options: human transcription or nothing at all. What I think the spread of AI has done is not just made it possible to do it automatically and cheaply, but also made it acceptable that this "Good Enough" solution is actually, well, good enough.Viewers know it's a machine translation, and they're more forgiving if there are some mistakes. That makes it way more practical to actually use it. And the end result? We can offer more content.Sure, it's not as good as manual transcription, but it's definitely better than having no transcription at all (which is really the only other option).What I find most interesting is that it's the fact that this is so common now that makes it possible to actually use it more.Yes, we actually review the subtitles and fix any obvious mistakes for the video. The key here is that we can spend very little time actually doing that, since errors are more tolerated.

Building Real‑Time iOS Apps with SignalR: Introducing the Official Swift Client (Public Preview)

by Kevin Guo

posted on: April 22, 2025

Introduction Until now, iOS developers who wanted real‑time, bi‑directional communication with SignalR had to rely on community‑built clients or roll their own Swift implementation—both of which introduced maintenance and compatibility headaches. We’re excited to announce that the official SignalR Swift client is now available in public preview. With this release, you can: In this post you’ll learn how to set up the Swift client and use its core features. During a recent .NET Community Standup, we demoed an AI-enabled chat sample that uses SignalR for streaming AI‑generated tokens to iOS clie...

Remove empty folders using PowerShell

by Gérald Barré

posted on: April 21, 2025

Here's a PowerShell script that removes empty folders recursively:PowerShellcopy$rootFolder = 'C:\Temp' Get-ChildItem $rootFolder -Recurse -Directory -Force | Sort-Object -Property FullName -Descending | Where-Object { $($_ | Get-ChildItem -Force | Select-Object -First 1).Count -eq 0 } |

Preview 2 of the .NET AI Template Now Available

by Jordan Matthiesen

posted on: April 17, 2025

Preview 2 of the .NET AI Chat Web App template introduces support for .NET Aspire and Qdrant vector database integration, making it easier to create cloud-native AI-powered chat applications with custom data.

Build MCP Remote Servers with Azure Functions

by Matt Soucoup

posted on: April 16, 2025

Build AI-powered tools quickly using Azure Functions to create remote MCP servers that seamlessly integrate with GitHub Copilot and other LLM-based applications.

Join the .NET & C# Teams at Microsoft Build 2025

by .NET Team

posted on: April 15, 2025

The countdown to Microsoft Build 2025 is on! Join us May 19-22 either in-person in Seattle or online and explore an exciting lineup of .NET and C# content, including sessions on AI integration, app modernization, and the latest language features.

Who can cancel Carmen Sandiego?

by Oren Eini

posted on: April 14, 2025

RavenDB is a pretty big system, with well over 1 million lines of code. Recently, I had to deal with an interesting problem. I had a CancellationToken at hand, which I expected to remain valid for the duration of the full operation.However, something sneaky was going on there. Something was cancelling my CancelationToken, and not in an expected manner. At last count, I had roughly 2 bazillion CancelationTokens in the RavenDB codebase. Per request, per database, global to the server process, time-based, operation-based, etc., etc.Figuring out why the CancelationToken was canceled turned out to be a chore. Instead of reading through the code, I cheated.token.Register(() => { Console.WriteLine("Cancelled!" + Environment.StackTrace); });I ran the code, tracked back exactly who was calling cancel, and realized that I had mixed the request-based token with the database-level token. A single line fix in the end. Until I knew where it was, it was very challenging to figure it out.This approach, making the code tell you what is wrong, is an awesome way to cut down debugging time by a lot.