CultureInfo.InvariantCulture is not invariant for all operations. It is a special culture that is used for formatting and parsing operations that do not depend on any specific culture. For instance, this is well-suited to format values in order to persist them. However, it is not invariant for stri
RavenDB is moving at quite a pace, and there is actually more stuff happening than I can find the time to talk about. I usually talk about the big-ticket items, but today I wanted to discuss some of what we like to call Quality of Life features.The sort of things that help smooth the entire process of using RavenDB - the difference between something that works and something polished. That is something I truly care about, so with a great sense of pride, let me walk you through some of the nicest things that you probably wouldn’t even notice that we are doing for you.RavenDB Node.js Client - v7.0 released (with Vector Search)We updated the RavenDB Node.js client to version 7.0, with the biggest item being explicit support for vector search queries from Node.js. You can now write queries like these:const docs = session.query<Product>({collection: "Products"})
.vectorSearch(x => x.withText("Name"),
factory => factory.byText("italian food"))
.all();This is the famous example of using RavenDB’s vector search to find pizza and pasta in your product catalog, utilizing vector search and automatic data embeddings.Converting automatic indexes to static indexesRavenDB has auto indexes. Send a query, and if there is no existing index to run the query, the query optimizer will generate one for you. That works quite amazingly well, but sometimes you want to use this automatic index as the basis for a static (user-defined) index. Now you can do that directly from the RavenDB Studio, like so:You can read the full details of the feature at the following link.RavenDB Cloud - Incidents History & Operational SuggestionsWe now expose the operational suggestions to you on the dashboard. The idea is that you can easily and proactively check the status of your instances and whether you need to take any action.You can also see what happened to your system in the past, including things that RavenDB’s system automatically recovered from without you needing to lift a finger.For example, take a look at this highly distressed system:As usual, I would appreciate any feedback you have on the new features.
Last week I did an hour long webinar showing AI integration in RavenDB. From vector search to RAG, from embedding generation to Gen AI inside of the database engine.Most of those features are already released, but I would really love your feedback on the Gen AI integration story (starts at around to 30 minutes mark in the video). Let me know what you think!
I wrote the following code:if (_items is [var single])
{
// no point invoking thread pool
single.Run();
}And I was very proud of myself for writing such pretty and succinct C# code. Then I got a runtime error:I asked Grok about this because I did not expect this, and got the following reply:No, if (_items is [var single]) in C# does not match a null value. This pattern checks if _items is a single-element array and binds the element to single. If _items is null, the pattern match fails, and the condition evaluates to false.However, the output clearly disagreed with both Grok’s and my expectations. I decided to put that into SharpLab, which can quickly help identify what is going on behind the scenes for such syntax. You can see three versions of this check in the associated link.if(strs is [var s]) // no null check
if(strs is [string s]) // if (s != null)
if(strs is [{} s]) // if (s != null)Turns out that there is a distinction between a var pattern (allows null) and a non-var pattern. The third option is the non-null pattern, which does the same thing (but doesn’t require redundant type specification). Usually var vs. type is a readability distinction, but here we have a real difference in behavior. Note that when I asked the LLM about it, I got the wrong answer. Luckily, I could get a verified answer by just checking the compiler output, and only then head out to the C# spec to see if this is a compiler bug or just a misunderstanding.
Renaming a .NET project is tedius. You have to rename the files and folders. You also have to replace the content in the files, such as namespace, or path in .sln files. Here's a PowerShell script that renames files and folders and replaces content in files:PowerShellcopy$ErrorActionPreference = "S
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.
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...
Discover the new AI Dev Gallery, a Windows application that provides interactive local AI samples, easy model downloads, and source code export - all built with .NET AI building blocks.
We use cookies to analyze our website traffic and provide a better browsing experience. By
continuing to use our site, you agree to our use of cookies.