{"@attributes":{"version":"2.0"},"channel":{"title":"endjin.com","link":"https:\/\/endjin.com","description":"endjin is a UK-based Technology Consultancy specialising in Data, Analytics & AI, and Cloud Native App Dev on Microsoft Fabric, Databricks & Azure. We help small teams achieve big things.","copyright":"Endjin Limited","docs":"http:\/\/www.rssboard.org\/rss-specification","generator":"Vellum Static Site Generator","image":{"link":"https:\/\/endjin.com","title":"endjin.com","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/v1775912583\/assets\/images\/logo\/endjin-logo-square.png"},"language":"en","lastBuildDate":"Mon, 08 Jun 2026 05:30:00 GMT","pubDate":"Mon, 08 Jun 2026 05:30:00 GMT","ttl":"60","item":[{"title":"Introducing Corvus.Text.Json V5: Why V5 Exists","description":"Corvus.Text.Json V5 is a new engine for high-performance JSON in .NET - pooled-memory parsing, mutable documents, source-generated types, and three query languages. Here's why we built it.","link":"https:\/\/endjin.com\/blog\/introducing-corvus-text-json-v5-why-v5-exists","guid":"https:\/\/endjin.com\/blog\/introducing-corvus-text-json-v5-why-v5-exists","pubDate":"Mon, 08 Jun 2026 05:30:00 GMT","category":["json","json-schema","C#","CSharp",".NET","dotnet","performance","Code Generation","system.text.json","JSON Validation","JSON Serialization","High Performance","low-allocation","OpenAPI"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2026\/06\/introducing-corvus-text-json-v5-part-01.png"}}},{"title":"Optimising DAX: VertiPaq Encoding Techniques","description":"VertiPaq fits millions of rows in memory by compressing columns. Learn how value, hash and run-length encoding work, and what they mean for model performance.","link":"https:\/\/endjin.com\/blog\/optimising-dax-vertipaq-encoding-techniques","guid":"https:\/\/endjin.com\/blog\/optimising-dax-vertipaq-encoding-techniques","pubDate":"Thu, 04 Jun 2026 05:30:00 GMT","category":["Power BI","DAX","VertiPaq","Performance","Data"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2026\/05\/optimising-dax-vertipaq-encoding-techniques.png"}}},{"title":"Optimising DAX: How VertiPaq Stores Your Data","description":"VertiPaq stores Power BI data column-by-column rather than row-by-row. That makes aggregations fast and cross-column queries the trickiest part of DAX.","link":"https:\/\/endjin.com\/blog\/optimising-dax-how-vertipaq-stores-your-data","guid":"https:\/\/endjin.com\/blog\/optimising-dax-how-vertipaq-stores-your-data","pubDate":"Wed, 27 May 2026 07:30:00 GMT","category":["Power BI","DAX","VertiPaq","Performance","Data"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2026\/05\/optimising-dax-how-vertipaq-stores-your-data.png"}}},{"title":"Optimising DAX: A Series Introduction","description":"Optimising DAX in Power BI: VertiPaq storage, compression, model design, how queries run through the storage, formula engines, and performance patterns.","link":"https:\/\/endjin.com\/blog\/optimising-dax-series-introduction","guid":"https:\/\/endjin.com\/blog\/optimising-dax-series-introduction","pubDate":"Wed, 27 May 2026 05:30:00 GMT","category":["Power BI","DAX","VertiPaq","Performance","Data","SQLBits"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2026\/05\/optimising-dax-series-introduction.png"}}},{"title":"Microsoft Fabric variable libraries: best practices guide","description":"Variable libraries in Microsoft Fabric manage environment-specific configuration. Learn where you can use them and how to set safer defaults for Dev\/Test\/Prod.","link":"https:\/\/endjin.com\/blog\/variable-libraries-in-microsoft-fabric-best-practices","guid":"https:\/\/endjin.com\/blog\/variable-libraries-in-microsoft-fabric-best-practices","pubDate":"Tue, 19 May 2026 05:30:00 GMT","category":["Microsoft Fabric","Variable Libraries","CI\/CD","Data Factory","OneLake","SQLBits"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2026\/05\/variable-libraries-in-microsoft-fabric-best-practices.png"}}},{"title":"The GenAI Reality Check: New Instrument, Same Orchestra","description":"AI is like introducing a powerful new instrument to an orchestra. It creates possibilities that didn't exist before. But it still requires musicians who can read music, a conductor with a vision, rehearsal time, and the discipline to play together. An orchestra that lacks these fundamentals won't be saved by a new instrument \u2014 they'll just make new kinds of noise.","link":"https:\/\/endjin.com\/blog\/genai-reality-check-new-instrument-same-orchestra","guid":"https:\/\/endjin.com\/blog\/genai-reality-check-new-instrument-same-orchestra","pubDate":"Thu, 14 May 2026 06:30:00 GMT","category":["GenAI","Generative AI","AI","Machine Learning","Software Engineering","Engineering Discipline","DevOps","Total Cost of Ownership","Human In The Loop","RAG","LLM","Prompt Engineering","Context Rot","Continuous Learning","Innovation Management","Digital Transformation","Organisational Change","Multi-disciplinary Teams","AI Strategy","AI Adoption","Wardley Mapping","Code As Commodity"],"enclosure":{"@attributes":{"length":"0","type":"audio\/mpeg","url":"https:\/\/endjincdn.blob.core.windows.net\/assets\/podcast\/2026-05-14-the-genai-reality-check-new-Instrument-same-orchestra.mp3"}}},{"title":"Ingesting SharePoint Data into Microsoft Fabric: Your Options","description":"SharePoint isn't going away. This post compares five ways to ingest SharePoint data into Microsoft Fabric, with guidance on cost, complexity, and incremental loading.","link":"https:\/\/endjin.com\/blog\/ingesting-sharepoint-data-into-microsoft-fabric","guid":"https:\/\/endjin.com\/blog\/ingesting-sharepoint-data-into-microsoft-fabric","pubDate":"Tue, 12 May 2026 06:30:00 GMT","category":["Microsoft Fabric","SharePoint","Data Factory","OneLake","Data Ingestion","SQLBits"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2026\/05\/ingesting-sharepoint-data-into-microsoft-fabric.png"}}},{"title":"AI Strategy: Think Top-Down, Experiment Bottom-Up","description":"Top-down AI strategy and bottom-up experimentation both fail alone: leading organisations combine them to drive real business results.","link":"https:\/\/endjin.com\/blog\/ai-strategy-think-top-down-experiment-bottom-up","guid":"https:\/\/endjin.com\/blog\/ai-strategy-think-top-down-experiment-bottom-up","pubDate":"Fri, 08 May 2026 05:30:00 GMT","category":["AI Strategy","AI Adoption","GenAI","Generative AI","Agentic AI","LLM","LLMs","Frontier Models","Copilot","Organisational Change","Digital Transformation","Innovation Management","Fail Fast","Art of the Possible","OST Framework","Executive Sponsorship","Business Strategy","Performance Engine","Dedicated Team","Govindarajan","Trimble"],"enclosure":{"@attributes":{"length":"0","type":"audio\/mpeg","url":"https:\/\/endjincdn.blob.core.windows.net\/assets\/podcast\/2026-05-07-ai-strategy-think-top-down-experiment-bottom-up.mp3"}}},{"title":"SQLBits 2026: A Conference Recap","description":"SQLBits is one of the largest data platform conferences in Europe. Here's a recap of my experience at SQLBits 2026, held at the ICC Wales.","link":"https:\/\/endjin.com\/blog\/sqlbits-2026-a-conference-recap","guid":"https:\/\/endjin.com\/blog\/sqlbits-2026-a-conference-recap","pubDate":"Tue, 05 May 2026 00:00:00 GMT","category":["Microsoft Fabric","SQLBits","Data","Power BI","DAX","OneLake","SQL Server","Data Factory"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2026\/05\/sqlbits-2026-a-conference-recap.png"}}},{"title":"Multi-layer Caching with the Decorator Pattern","description":"Databricks SQL cold starts kill web API performance. Fix it with two-layer caching: Azure Blob Storage & IMemoryCache, using the Decorator pattern.","link":"https:\/\/endjin.com\/blog\/multi-layer-caching-with-the-decorator-pattern","guid":"https:\/\/endjin.com\/blog\/multi-layer-caching-with-the-decorator-pattern","pubDate":"Fri, 01 May 2026 05:30:00 GMT","category":["dotnet","Data Engineering","Databricks","SQL Serverless","Application Development","Caching","Azure"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2026\/03\/multi-layer-caching-with-the-decorator-pattern.png"}}},{"title":"Fabric Performance Benchmarking - Spark versus Python Notebooks","description":"Benchmarking Pandas, PySpark, Polars, and DuckDB on Microsoft Fabric: in-process Python engines run 4-5x cheaper and faster than Spark for common workloads.","link":"https:\/\/endjin.com\/blog\/fabric-performance-benchmarking-spark-versus-python-notebooks","guid":"https:\/\/endjin.com\/blog\/fabric-performance-benchmarking-spark-versus-python-notebooks","pubDate":"Wed, 22 Apr 2026 05:00:00 GMT","category":["Microsoft Fabric","Notebooks","Spark","Pyspark","Python","DuckDB","SQL","Polars","DataFrame","Data","Analytics","Performance","Data Processing"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2026\/03\/fabric-performance-benchmarking-part-1-spark-versus-python-notebooks.png"}}},{"title":"Medallion Architecture in Excel","description":"Apply the Medallion Architecture to Excel: use the three-tab rule to separate raw data, logic, and output for cleaner, maintainable spreadsheets.","link":"https:\/\/endjin.com\/blog\/medallion-architecture-in-excel","guid":"https:\/\/endjin.com\/blog\/medallion-architecture-in-excel","pubDate":"Tue, 21 Apr 2026 05:30:00 GMT","category":["Data","Risk","Reporting"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2026\/03\/medallion-architecture-in-excel.png"}}},{"title":"LINQ Max and nullable value types","description":"LINQ's projecting Max operator has a trap for the unwary when used with value types. Understand what goes wrong, and how to avoid it.","link":"https:\/\/endjin.com\/blog\/csharp-linq-max-nullable-values","guid":"https:\/\/endjin.com\/blog\/csharp-linq-max-nullable-values","pubDate":"Fri, 17 Apr 2026 04:30:35 GMT","category":["Nullable Reference Types","Nullable Reference Types in C#","Nullable Types in C#","C# Nullable Types","Nullable","Null Reference Exceptions","Nullable Values","NRTs","NRT","non-nullable","C#","CSharp","dotnet","Visual Studio","Visual Studio Code","C# Tutorials","C# Programming"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2026\/03\/csharp-linq-max-nullable-values.png"}}},{"title":"Returning to work after a career break, with help from remote work","description":"After years away, I returned to work in the UK. Here's how remote flexibility protected my mental health and made that transition possible!","link":"https:\/\/endjin.com\/blog\/returning-to-work-after-a-career-break","guid":"https:\/\/endjin.com\/blog\/returning-to-work-after-a-career-break","pubDate":"Thu, 16 Apr 2026 05:30:00 GMT","category":["Remote","Remote Working","Wellbeing","Career","Digital Nomad"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2026\/04\/returning-to-work-after-a-career-break.png"}}},{"title":"AI-assisted coding is four decisions, not one","description":"A simple mental model for making sense of the AI-assisted coding landscape: four layers, four decisions.","link":"https:\/\/endjin.com\/blog\/ai-assisted-coding-is-four-decisions-not-one","guid":"https:\/\/endjin.com\/blog\/ai-assisted-coding-is-four-decisions-not-one","pubDate":"Mon, 13 Apr 2026 23:08:00 GMT","category":["AI","GenAI","Claude Code","GitHub Copilot"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2026\/03\/ai-assisted-coding-is-four-decisions-not-one.png"}}},{"title":"Integration Testing Azure Functions Part 5: Reqnroll in Build Pipeline","description":"Integration testing Azure Functions with Reqnroll and C#. Part 5 covers running your Corvus.Testing specs in Azure DevOps and GitHub Actions pipelines.","link":"https:\/\/endjin.com\/blog\/integration-testing-azure-functions-with-reqnroll-and-csharp-part-5-using-corvus-testing-reqnroll-in-a-build-pipeline","guid":"https:\/\/endjin.com\/blog\/integration-testing-azure-functions-with-reqnroll-and-csharp-part-5-using-corvus-testing-reqnroll-in-a-build-pipeline","pubDate":"Sat, 11 Apr 2026 06:35:00 GMT","category":["Azure","Azure Functions","BDD","Corvus","Corvus.Testing.ReqnRoll","Corvus.Testing","Durable Functions","Reqnroll","Testing","Integration Testing","C#","CSharp",".NET","dotnet","Visual Studio","Gherkin"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2026\/03\/integration-testing-azure-functions-with-reqnroll-and-csharp-part-5-using-corvus-testing-reqnroll-in-a-build-pipeline.png"}}},{"title":"Integration Testing Azure Functions Part 4: Reqnroll Configuration","description":"Integration testing Azure Functions with Reqnroll and C#. Part 4 shows how to supply or override configuration values for the functions apps under test.","link":"https:\/\/endjin.com\/blog\/integration-testing-azure-functions-with-reqnroll-and-csharp-part-4-controlling-your-functions-with-additional-configuration","guid":"https:\/\/endjin.com\/blog\/integration-testing-azure-functions-with-reqnroll-and-csharp-part-4-controlling-your-functions-with-additional-configuration","pubDate":"Sat, 11 Apr 2026 06:34:00 GMT","category":["Azure","Azure Functions","BDD","Corvus","Corvus.Testing.ReqnRoll","Corvus.Testing","Durable Functions","Reqnroll","Testing","Integration Testing","C#","CSharp",".NET","dotnet","Visual Studio","Gherkin"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2026\/03\/integration-testing-azure-functions-with-reqnroll-and-csharp-part-4-controlling-your-functions-with-additional-configuration.png"}}},{"title":"Integration Testing Azure Functions Part 3: Reqnroll hooks","description":"Integration testing Azure Functions with Reqnroll and C#. Part 3 uses scenario and feature hooks to start functions apps and keep your BDD specs readable.","link":"https:\/\/endjin.com\/blog\/integration-testing-azure-functions-with-reqnroll-and-csharp-part-3-using-hooks-to-start-functions","guid":"https:\/\/endjin.com\/blog\/integration-testing-azure-functions-with-reqnroll-and-csharp-part-3-using-hooks-to-start-functions","pubDate":"Sat, 11 Apr 2026 06:33:00 GMT","category":["Azure","Azure Functions","BDD","Corvus","Corvus.Testing.ReqnRoll","Corvus.Testing","Durable Functions","Reqnroll","Testing","Integration Testing","C#","CSharp",".NET","dotnet","Visual Studio","Gherkin"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2026\/03\/integration-testing-azure-functions-with-reqnroll-and-csharp-part-3-using-hooks-to-start-functions.png"}}},{"title":"Integration Testing Azure Functions Part 2: Reqnroll step bindings","description":"Integration testing Azure Functions with Reqnroll and C#. Part 2 uses Corvus.Testing step bindings to start and stop functions apps in your scenarios.","link":"https:\/\/endjin.com\/blog\/integration-testing-azure-functions-with-reqnroll-and-csharp-part-2-using-step-bindings-to-start-functions","guid":"https:\/\/endjin.com\/blog\/integration-testing-azure-functions-with-reqnroll-and-csharp-part-2-using-step-bindings-to-start-functions","pubDate":"Sat, 11 Apr 2026 06:32:00 GMT","category":["Azure","Azure Functions","BDD","Corvus","Corvus.Testing.ReqnRoll","Corvus.Testing","Durable Functions","Reqnroll","Testing","Integration Testing","C#","CSharp",".NET","dotnet","Visual Studio","Gherkin"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2026\/03\/integration-testing-azure-functions-with-reqnroll-and-csharp-part-2-using-step-bindings-to-start-functions.png"}}},{"title":"Integration Testing Azure Functions with Reqnroll Part 1: Introduction","description":"Integration testing Azure Functions with Reqnroll and C#. Part 1 sets out the testing challenge and introduces the open-source Corvus.Testing library.","link":"https:\/\/endjin.com\/blog\/integration-testing-azure-functions-with-reqnroll-and-csharp-part-1-introduction","guid":"https:\/\/endjin.com\/blog\/integration-testing-azure-functions-with-reqnroll-and-csharp-part-1-introduction","pubDate":"Sat, 11 Apr 2026 06:31:00 GMT","category":["Azure","Azure Functions","BDD","Corvus","Corvus.Testing.ReqnRoll","Corvus.Testing","Durable Functions","Reqnroll","Testing","Integration Testing","C#","CSharp",".NET","dotnet","Visual Studio","Gherkin"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2026\/03\/integration-testing-azure-functions-with-reqnroll-and-csharp-part-1-introduction.png"}}},{"title":"From Prompt Engineering to AI Programming: Enterprise GenAI Solutions","description":"Shift from prompt engineering to AI programming by applying rigorous software engineering principles to your LLM integrations.","link":"https:\/\/endjin.com\/blog\/programming-not-prompting","guid":"https:\/\/endjin.com\/blog\/programming-not-prompting","pubDate":"Fri, 13 Mar 2026 05:30:00 GMT","category":["GenAI","Generative AI","AI","Machine Learning","Software Engineering","Engineering Discipline","LLM","Prompt Engineering"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2026\/02\/programming-not-prompting.png"}}},{"title":"Scaling API Ingestion with the Queue-of-Work Pattern","description":"The queue-of-work pattern enables massive parallelism for API ingestion by breaking large jobs into thousands of independent work items processed by concurrent workers. This approach reduced data ingestion time for our use case from 15 hours to under 2 hours while providing automatic retry handling and fault tolerance at a fraction of the cost of traditional orchestration tools.","link":"https:\/\/endjin.com\/blog\/scaling-api-ingestion-with-the-queue-of-work-pattern","guid":"https:\/\/endjin.com\/blog\/scaling-api-ingestion-with-the-queue-of-work-pattern","pubDate":"Fri, 06 Mar 2026 06:30:00 GMT","category":["python","engineering","data engineering","pyspark","synapse","notebooks","azure container apps","azure synapse analytics"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2026\/02\/scaling-api-ingestion-with-the-queue-of-work-pattern.png"}}},{"title":"Rx.NET v7 and Futures On .NET Live talk and demos","description":"In a recent On .NET Live stream, Ian Griffiths talked about recent developments in Rx.NET and plans for v7 and future versions. This post explains where to find the demo code for that session.","link":"https:\/\/endjin.com\/blog\/rx7-ondotnet-live-demos","guid":"https:\/\/endjin.com\/blog\/rx7-ondotnet-live-demos","pubDate":"Fri, 27 Feb 2026 06:30:00 GMT","category":["C#","CSharp",".NET","dotnet","Rx","Rx.NET","Rx7","Reactive"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2026\/02\/rx-dotnet-v7-ondotnet-live-demos.png"}}},{"title":"Reactive Extensions for .NET - Rx.NET v7 and Futures","description":"<p>Ian Griffiths, Technical Fellow at endjin, .NET MVP, and author of Programming C# (O'Reilly), returns to On .NET Live to demo Rx.NET with live ship-tracking data from Norway's AIS network and walk through the major changes coming to the Reactive Extensions ecosystem in v7.<\/p>\n<p>In this episode:<\/p>\n<ul>\n<li>\ud83d\udea2 Live demo \u2014 streaming real-time vessel data with Rx.NET and AIS.NET, using LINQ queries over observable sequences to join, group, and display ship positions on a WPF map<\/li>\n<li>\ud83d\udce6 System.Linq.Async \u2192 System.Linq.AsyncEnumerable in .NET 10 \u2014 how LINQ for IAsyncEnumerable moved from the Rx repo into the .NET runtime, and what that means for your projects<\/li>\n<li>\u26a0\ufe0f Rx 7 Preview \u2014 unbundling WPF and Windows Forms support from System.Reactive to eliminate the 90MB binary bloat in self-contained deployments<\/li>\n<li>\ud83d\udd2e Rx 8 and beyond \u2014 plans for browser WASM and Unity support, improved trimability, and the path to production-ready Async Rx<\/li>\n<\/ul>\n<h2 id=\"links-resources\">Links &amp; resources:<\/h2>\n<ul>\n<li><a href=\"https:\/\/github.com\/dotnet\/reactive\">Rx .NET repo<\/a><\/li>\n<li><a href=\"https:\/\/introtorx.com\">FREE Ebook - Introduction to Rx .NET<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/reactive\/blob\/main\/Rx.NET\/Documentation\/adr\/0005-package-split.md\">Rx .NET 7 Package Split ADR<\/a><\/li>\n<li><a href=\"https:\/\/learn.microsoft.com\/en-us\/dotnet\/core\/compatibility\/core-libraries\/10.0\/asyncenumerable\">System.Linq.AsyncEnumerable in .NET 10<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/ais-dotnet\/\">AIS.NET<\/a><\/li>\n<li><a href=\"https:\/\/endjin.com\/blog\/how-dotnet-10-boosted-ais-dotnet-performance-by-7-percent-for-free\">How .NET 10.0 boosted AIS.NET performance by 7%<\/a><\/li>\n<li><a href=\"https:\/\/endjin.com\/blog\/\">endjin blog<\/a><\/li>\n<li><a href=\"https:\/\/www.reactiveui.net\/\">ReactiveUI<\/a><\/li>\n<\/ul>","link":"https:\/\/endjin.com\/what-we-think\/talks\/reactive-extensions-for-dotnet-rxdotnet-v7-and-futures","guid":"https:\/\/endjin.com\/what-we-think\/talks\/reactive-extensions-for-dotnet-rxdotnet-v7-and-futures","pubDate":"Wed, 25 Feb 2026 06:30:00 GMT","category":["Reactive Extensions","dotnet","Rx.NET","Open Source",".NET Foundation","Talk"],"enclosure":{"@attributes":{"length":"0","type":"image\/jpeg","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/talks\/rx-dotnet-v7-and-futures.jpg"}}},{"title":"T4 templates on modern .NET","description":"T4 is a .NET-based templating language. It used to target just .NET Framework. It is now possible to use modern .NET runtimes, but it requires additional work. This post shows how to get it working.","link":"https:\/\/endjin.com\/blog\/t4-templates-on-modern-dotnet-10","guid":"https:\/\/endjin.com\/blog\/t4-templates-on-modern-dotnet-10","pubDate":"Wed, 18 Feb 2026 06:30:00 GMT","category":["C#","CSharp",".NET","dotnet","T4","Templates","Code generation"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2025\/12\/t4-templates-on-modern-dotnet-10.png"}}},{"title":"What is Retrieval-Augmented Generation (RAG)?","description":"What is RAG? Learn how RAG combines retrieval, augmentation & generation to ground GenAI responses in your data while reducing hallucinations & improving accuracy.","link":"https:\/\/endjin.com\/blog\/what-is-retrieval-augmented-generation-rag","guid":"https:\/\/endjin.com\/blog\/what-is-retrieval-augmented-generation-rag","pubDate":"Thu, 05 Feb 2026 07:30:00 GMT","category":["AI","GenAI","RAG","Azure Foundry","Azure AI Search"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2026\/01\/what-is-retrieval-augmented-generation-rag.png"}}},{"title":"Polars Workloads on Microsoft Fabric","description":"Polars now ships inside Microsoft Fabric by default. Here's how to use it alongside Fabric's other analytics tools and what that means for your data workflows.","link":"https:\/\/endjin.com\/blog\/polars-workloads-on-microsoft-fabric","guid":"https:\/\/endjin.com\/blog\/polars-workloads-on-microsoft-fabric","pubDate":"Thu, 29 Jan 2026 05:34:00 GMT","category":["Polars","Microsoft Fabric","Deltalake","DataFrame","Cloud Computing","Data Processing","Python","Microsoft Fabric"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2026\/01\/polars-workloads-on-fabric.png"}}},{"title":"Practical Polars: Code Examples for Everyday Data Tasks","description":"Unlock Python Polars with this hands-on guide featuring practical code examples for data loading, cleaning, transformation, aggregation, and advanced operations that you can apply to your own data analysis projects.","link":"https:\/\/endjin.com\/blog\/practical-polars-code-examples-everyday-data-tasks","guid":"https:\/\/endjin.com\/blog\/practical-polars-code-examples-everyday-data-tasks","pubDate":"Thu, 29 Jan 2026 05:33:00 GMT","category":["Polars","DataFrame","Python","Data Analysis","Code Examples","Data Transformation","Data Science","Microsoft Fabric"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2026\/01\/polars-code-examples.png"}}},{"title":"Under the Hood: What Makes Polars So Scalable and Fast?","description":"Polars gets its speed from a strict type system, lazy evaluation, and automatic parallelism. Here's how each piece works under the hood.","link":"https:\/\/endjin.com\/blog\/under-the-hood-what-makes-polars-so-scalable-and-fast","guid":"https:\/\/endjin.com\/blog\/under-the-hood-what-makes-polars-so-scalable-and-fast","pubDate":"Thu, 29 Jan 2026 05:32:00 GMT","category":["Polars","DataFrame","Performance Optimization","Rust","Lazy Evaluation","Query Optimization","Parallel Processing","Columnar Computing","Microsoft Fabric"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2026\/01\/what-makes-polars-so-scalable-and-fast.png"}}},{"title":"Polars: Faster Pipelines, Simpler Infrastructure, Happier Engineers","description":"We've migrated our own IP and several customers from Pandas and Spark to Polars. The benefits go beyond raw speed: faster test suites, lower platform costs, and an API developers actually enjoy using.","link":"https:\/\/endjin.com\/blog\/polars-faster-pipelines-simpler-infrastructure-happier-engineers","guid":"https:\/\/endjin.com\/blog\/polars-faster-pipelines-simpler-infrastructure-happier-engineers","pubDate":"Thu, 29 Jan 2026 05:31:00 GMT","category":["Polars","DataFrame","Python","Data","Analytics","Performance","Rust","Data Processing","Microsoft Fabric"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2026\/01\/why-polars-matters.png"}}},{"title":"Reactive Extensions for .NET Status and Plans for .NET 10","description":"<p><a href=\"https:\/\/endjin.com\/who-we-are\/our-people\/ian-griffiths\/\">Ian Griffiths<\/a>, Technical Fellow at endjin, shares the latest updates on the <a href=\"https:\/\/github.com\/dotnet\/reactive\">Reactive Extensions for .NET<\/a> (AKA ReactiveX AKA Rx.NET). Learn about the new features in Rx 6.1, what .NET 10 means for the project, and the significant packaging changes coming in Rx v7.0 that finally solve the long-standing deployment bloat issue.<\/p>\n<p>In this talk:<\/p>\n<ul>\n<li>Rx 6.1 New Features \u2014 DisposeWith operator for fluent CompositeDisposable usage, new TakeUntil overload with cancellation token support, and ResetExceptionDispatchState operator<\/li>\n<li>The Bloat Problem Explained \u2014 Why self-contained Windows deployments were pulling in 90MB of unnecessary WPF and Windows Forms assemblies<\/li>\n<li>Rx 7 Preview \u2014 How the new packaging model fixes bloat while maintaining source and binary compatibility<\/li>\n<li>Community Contributions \u2014 Features from Chris Pullman (ReactiveUI), Neils Berger, Daniel Weber, and Adam Jones<\/li>\n<li>Async Rx .NET \u2014 Status update and plans for a non-alpha release<\/li>\n<\/ul>","link":"https:\/\/endjin.com\/what-we-think\/talks\/reactive-extensions-for-dotnet-status-and-plans-for-dotnet-10","guid":"https:\/\/endjin.com\/what-we-think\/talks\/reactive-extensions-for-dotnet-status-and-plans-for-dotnet-10","pubDate":"Wed, 24 Dec 2025 18:30:00 GMT","category":["Rx.NET","ReactiveX","Reactive Extensions for .NET","Reactive Programming","dotnet","dotnetconf","Open Source",".NET Foundation",".NET 10","Talk"],"enclosure":{"@attributes":{"length":"0","type":"image\/jpeg","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/talks\/dotnetconf-2025-rx-dotnet-status-and-plans.jpg"}}},{"title":"C# 14 New Feature: Implicit Span Conversions","description":"<p>In this talk, <a href=\"https:\/\/endjin.com\/who-we-are\/our-people\/ian-griffiths\/\">Ian Griffiths<\/a> dives into the new implicit conversions introduced in C# 14, designed to make span types more natural to use.<\/p>\n<p>He discusses how this change enhances performance, simplifies method signatures, and enables more powerful extension methods. However, Ian also warns about potential compatibility issues with older libraries and provides advice for library authors. He concludes with technical examples and solutions to common problems caused by these new features. Essential viewing for C# developers looking to leverage spans in their code more effectively.<\/p>\n<ul>\n<li>00:00 Introduction to Implicit Conversions in C# 14<\/li>\n<li>01:17 Understanding Span Types and Their Benefits<\/li>\n<li>02:35 Practical Examples of Using Spans<\/li>\n<li>05:04 Limitations and Issues in C# 13<\/li>\n<li>08:05 Improvements in C# 14<\/li>\n<li>12:42 New Implicit Span Conversions<\/li>\n<li>19:16 Potential Issues with Older Libraries<\/li>\n<li>23:33 Conclusion and Final Thoughts<\/li>\n<\/ul>","link":"https:\/\/endjin.com\/what-we-think\/talks\/csharp-14-new-feature-implicit-span-conversions","guid":"https:\/\/endjin.com\/what-we-think\/talks\/csharp-14-new-feature-implicit-span-conversions","pubDate":"Thu, 11 Dec 2025 06:30:00 GMT","category":[".NET 10","C# 14","dotnet","Implicit Span Conversions","Open Source",".NET Foundation","Talk"],"enclosure":{"@attributes":{"length":"0","type":"image\/jpeg","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/talks\/csharp-14-new-feature-implicit-span-conversions.jpg"}}},{"title":"How .NET 10.0 boosted AIS.NET performance by 7%","description":".NET 10.0 has shipped, and for the fifth year running, we benchmarked endjin's AIS.NET library and were very happy to see substantial performance gains, with no extra work required.","link":"https:\/\/endjin.com\/blog\/how-dotnet-10-boosted-ais-dotnet-performance-by-7-percent-for-free","guid":"https:\/\/endjin.com\/blog\/how-dotnet-10-boosted-ais-dotnet-performance-by-7-percent-for-free","pubDate":"Tue, 09 Dec 2025 06:30:00 GMT","category":["C# 14.0","C# 14","C#","CSharp",".NET 10.0","dotnet","C# Tutorials","C# Programming","High Performance","Programming C# 12.0","low-allocation","ref struct","Span<T>","ReadOnlySpan<T>","Ais.Net","aisdotnet","AIS","Automatic identification System","Parser","Decoder","Marine"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2025\/12\/aisdotnetperfnet10.0.png"}}},{"title":"C# 14 New Feature: Field-Backed Properties","description":"<p>In this talk, <a href=\"https:\/\/endjin.com\/who-we-are\/our-people\/ian-griffiths\/\">Ian Griffiths<\/a> explains how C# 14's new field-backed properties feature can save you from metaphorically falling off a cliff when you need more flexibility beyond automatic properties' basic functionality.<\/p>\n<p>He demonstrates the use of this feature to customize property setters without losing the simplicity and support of automatic properties. By allowing you to refer to the compiler-generated field inside get or set methods, C# 14 reduces verbosity and maintains code clarity and organization.<\/p>\n<p>Learn how this small but impactful enhancement can improve your C# coding experience.<\/p>\n<ul>\n<li>00:00 Introduction to C# 14's New Feature<\/li>\n<li>00:30 Understanding Automatic Properties<\/li>\n<li>01:11 Customizing Property Behavior<\/li>\n<li>03:06 Introducing C# 14's New Syntax<\/li>\n<li>04:21 Benefits of the New Feature<\/li>\n<li>05:33 Conclusion<\/li>\n<\/ul>","link":"https:\/\/endjin.com\/what-we-think\/talks\/csharp-14-new-feature-field-backed-properties","guid":"https:\/\/endjin.com\/what-we-think\/talks\/csharp-14-new-feature-field-backed-properties","pubDate":"Wed, 03 Dec 2025 06:30:00 GMT","category":[".NET 10","C# 14","dotnet","Field-Backed Properties","Automatic Properties","Open Source",".NET Foundation","Talk"],"enclosure":{"@attributes":{"length":"0","type":"image\/jpeg","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/talks\/csharp-14-new-features-field-backed-properties.jpg"}}},{"title":"C# 14 New Feature: Script Directives","description":"<p>C# 14 introduces new directives that transform C# into a true scripting language. In this video, Ian Griffiths explains how the .NET 10 SDK now lets you run a single C# source file directly\u2014no project file required.<\/p>\n<p>What you'll learn:<\/p>\n<ul>\n<li>How to run C# files directly with <code>dotnet run<\/code><\/li>\n<li>The shebang (<code>#!<\/code>) directive for Unix\/Linux script execution<\/li>\n<li>The new <code>#:<\/code> directive for adding NuGet packages and build properties<\/li>\n<li>How these features build on the low-ceremony entry points introduced in C# 9<\/li>\n<\/ul>\n<p>Contents:<\/p>\n<ul>\n<li>00:00 Introduction to C# 14 Scripting Capabilities<\/li>\n<li>00:10 Running C# Source Files with .NET 10 SDK<\/li>\n<li>00:32 Simplifying C# Program Structure<\/li>\n<li>01:47 Shebang Syntax for Unix Systems<\/li>\n<li>04:05 Ignored Directives in C# 14<\/li>\n<li>04:44 Using External Libraries in C# Scripts<\/li>\n<li>07:38 Conclusion<\/li>\n<\/ul>","link":"https:\/\/endjin.com\/what-we-think\/talks\/csharp-14-new-feature-script-directives","guid":"https:\/\/endjin.com\/what-we-think\/talks\/csharp-14-new-feature-script-directives","pubDate":"Fri, 28 Nov 2025 06:30:00 GMT","category":[".NET 10","C# 14","dotnet","Script Directives","Open Source",".NET Foundation","Talk"],"enclosure":{"@attributes":{"length":"0","type":"image\/jpeg","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/talks\/csharp-14-script-directives.jpg"}}},{"title":"Adventures in Least Privilege: When an owner isn't an owner","description":"A troubleshooting journey through Microsoft Entra ID that reveals the subtle but critical distinction between App Registration ownership and Service Principal ownership - and why it matters for least-privilege automation.","link":"https:\/\/endjin.com\/blog\/adventures-in-least-privilege-when-entra-owner-is-not","guid":"https:\/\/endjin.com\/blog\/adventures-in-least-privilege-when-entra-owner-is-not","pubDate":"Thu, 27 Nov 2025 06:30:00 GMT","category":["Automation","CI\/CD","DevOps","Entra ID","Infrastructure as Code","Least Privilege","Security"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2025\/11\/adventures-in-least-privilege-when-entra-owner-is-not.png"}}},{"title":"Ix.NET v7.0: .NET 10 and LINQ for IAsyncEnumerable<T>","description":"Ix.NET 7.0.0 is now available. Because .NET 10.0 now includes LINQ for IAsyncEnumerable, Ix.NET's System.Linq.Async has had to step back. This post explains what has changed and why.","link":"https:\/\/endjin.com\/blog\/ix-v7-dotnet-10-linq-iasyncenumerable","guid":"https:\/\/endjin.com\/blog\/ix-v7-dotnet-10-linq-iasyncenumerable","pubDate":"Wed, 26 Nov 2025 05:30:00 GMT","category":["Ix","Ix.NET",".NET 10","IAsyncEnumerable<T>","Rx","Rx.NET","Reactive Extensions","Reactive","System.Reactive","C#","CSharp","dotnet"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2025\/11\/ix-v7-dotnet-10-linq-iasyncenumerable.png"}}},{"title":"The Data Product Canvas: The Theory Behind The Canvas","description":"The Data Product Canvas fuses the Business Model Canvas with Data Mesh's 'data as a product' principle, combining visual strategic collaboration with product-minded data ownership.","link":"https:\/\/endjin.com\/blog\/the-data-product-canvas-theory-behind-the-canvas","guid":"https:\/\/endjin.com\/blog\/the-data-product-canvas-theory-behind-the-canvas","pubDate":"Wed, 22 Oct 2025 05:30:00 GMT","category":["Data Product Canvas","Business Model Generation","Data Mesh","Data Product","Value Proposition","User Centred Design","Pivot","Fail Fast","Purpose Driven Design","Data","Analytics","Microsoft Fabric"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2025\/05\/the-data-product-canvas-theory-behind-the-canvas.png"}}},{"title":"The Data Product Canvas in Action","description":"See the Data Product Canvas in action with a real-world scenario. Follow along as we work through each building block to design a high-impact, feasible data product for a national garden center chain facing revenue challenges.","link":"https:\/\/endjin.com\/blog\/the-data-product-canvas-in-action","guid":"https:\/\/endjin.com\/blog\/the-data-product-canvas-in-action","pubDate":"Tue, 21 Oct 2025 05:30:00 GMT","category":["Data Product Canvas","Business Model Generation","Data Mesh","Data Product","Value Proposition","User Centred Design","Pivot","Fail Fast","Purpose Driven Design","Data","Analytics","Case Study","Microsoft Fabric"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2025\/05\/the-data-product-canvas-in-action.png"}}},{"title":"The Data Product Canvas: Deep Dive into the Building Blocks","description":"The Data Product Canvas has nine building blocks, best completed right-to-left starting with Audience and Actionable Insight, to keep data products purpose-driven and user-centred.","link":"https:\/\/endjin.com\/blog\/the-data-product-canvas-deep-dive-into-building-blocks","guid":"https:\/\/endjin.com\/blog\/the-data-product-canvas-deep-dive-into-building-blocks","pubDate":"Mon, 20 Oct 2025 05:30:00 GMT","category":["Data Product Canvas","Business Model Generation","Data Mesh","Data Product","Value Proposition","User Centred Design","Pivot","Fail Fast","Purpose Driven Design","Data","Analytics","Microsoft Fabric"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2025\/05\/the-data-product-canvas-deep-dive-into-building-blocks.png"}}},{"title":"The Data Product Canvas: Stop Building Data Products That Fail","description":"Turn data initiatives into business success stories with the Data Product Canvas. This practical framework helps teams design data products that deliver real value, avoid common pitfalls, and align with business objectives.","link":"https:\/\/endjin.com\/blog\/the-data-product-canvas-stop-building-products-that-fail","guid":"https:\/\/endjin.com\/blog\/the-data-product-canvas-stop-building-products-that-fail","pubDate":"Fri, 17 Oct 2025 05:30:00 GMT","category":["Data Product Canvas","Business Model Generation","Data Mesh","Data Product","Value Proposition","User Centred Design","Pivot","Fail Fast","Purpose Driven Design","Data","Analytics","Microsoft Fabric"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2025\/05\/the-data-product-canvas-stop-building-products-that-fail.png"}}},{"title":"Building data quality into Microsoft Fabric","description":"Data quality issues are one of the biggest silent killers of analytics initiatives. This post explores how to build data quality into Microsoft Fabric from the ground up.","link":"https:\/\/endjin.com\/blog\/building-data-quality-into-microsoft-fabric","guid":"https:\/\/endjin.com\/blog\/building-data-quality-into-microsoft-fabric","pubDate":"Wed, 15 Oct 2025 23:00:00 GMT","category":["Microsoft Fabric","Data Quality","Data Governance","Data Engineering","Data Validation"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2025\/09\/building-data-quality-into-microsoft-fabric.png"}}},{"title":"Top Features of Notebooks in Microsoft Fabric","description":"Lakehouse integration, built-in notebook resources, and collaboration features that set Microsoft Fabric notebooks apart from Jupyter and Databricks.","link":"https:\/\/endjin.com\/blog\/top-features-of-notebooks-in-microsoft-fabric","guid":"https:\/\/endjin.com\/blog\/top-features-of-notebooks-in-microsoft-fabric","pubDate":"Wed, 15 Oct 2025 06:30:00 GMT","category":["Microsoft Fabric","Notebooks","OneLake","Delta Lake","Spark","Lakehouse","DuckDB"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2025\/09\/top-features-of-notebooks-in-microsoft-fabric.png"}}},{"title":"How .NET 10.0 boosted JSON Schema performance by 18%","description":"Benchmarking Corvus.JsonSchema on .NET 10.0 showed an 18% free speed-up on top of .NET 8 and 9 gains \u2014 a cumulative 29% boost for LTS upgrades from .NET 8.","link":"https:\/\/endjin.com\/blog\/how-dotnet-10-boosted-json-schema-performance-by-18-percent","guid":"https:\/\/endjin.com\/blog\/how-dotnet-10-boosted-json-schema-performance-by-18-percent","pubDate":"Mon, 13 Oct 2025 04:03:00 GMT","category":["C# 14.0","C# 14","C#","CSharp",".NET 10.0","dotnet","C# Tutorials","C# Programming","High Performance","low-allocation","ref struct","Span<T>","ReadOnlySpan<T>","JSON Schema","Parser","Code Generation","JSON Validation","JSON Serialization"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2025\/10\/how-dotnet-10-boosted-json-schema-performance-by-18-percent.png"}}},{"title":"Big Data London 2025","description":"AI agents dominated Big Data LDN 2025, but the real story wasn't the technology, it was which organisations could actually deploy it successfully. After five years tracking industry evolution through this event, one pattern emerged clearly: the winners had built their foundations first. For CTOs making platform decisions now, the strategic imperative isn't choosing between innovation and governance; it's recognizing that governance enables innovation at scale.","link":"https:\/\/endjin.com\/blog\/big-data-ldn-2025","guid":"https:\/\/endjin.com\/blog\/big-data-ldn-2025","pubDate":"Thu, 09 Oct 2025 05:30:00 GMT","category":["Data Mesh","Data Product","Data","Analytics","AI","AI Agents","Data Strategy","Big Data London","Microsoft Fabric","MotherDuck","DuckDB"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2025\/10\/big-data-ldn-2025.png"}}},{"title":"FabCon Vienna 2025: Day 3","description":"FabCon is a conference dedicated to everything Microsoft Fabric. Day 3's sessions included migration, Databricks, Spark optimisation, and more.","link":"https:\/\/endjin.com\/blog\/fabcon-vienna-2025-day-3","guid":"https:\/\/endjin.com\/blog\/fabcon-vienna-2025-day-3","pubDate":"Wed, 08 Oct 2025 05:15:00 GMT","category":["Microsoft Fabric","FabCon","Data","Data Factory","OneLake","Copilot"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2025\/10\/fabcon-vienna-2025-day-3.png"}}},{"title":"FabCon Vienna 2025: Day 2","description":"FabCon is a conference dedicated to everything Microsoft Fabric. Day 2 featured deep dives into OneLake, Maps in Fabric, and multi-agent AI systems.","link":"https:\/\/endjin.com\/blog\/fabcon-vienna-2025-day-2","guid":"https:\/\/endjin.com\/blog\/fabcon-vienna-2025-day-2","pubDate":"Tue, 07 Oct 2025 06:15:00 GMT","category":["Microsoft Fabric","FabCon","Data","OneLake","AI Foundry","Copilot"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/blog\/2025\/10\/fabcon-vienna-2025-day-2.png"}}},{"title":"Rx.NET v6.1 New Feature: ResetExceptionDispatchState()","description":"<p>In this video, <a href=\"https:\/\/endjin.com\/who-we-are\/our-people\/ian-griffiths\/\">Ian Griffiths<\/a> introduces the new <code>ResetExceptionDispatchState<\/code> operator in <a href=\"https:\/\/www.nuget.org\/packages\/System.Reactive\/6.1.0\">Rx.NET 6.1<\/a> released in October 2025.<\/p>\n<p>He explains the peculiar behaviour of exception stack traces that led to the creation of this operator, following feedback from <a href=\"https:\/\/github.com\/adamjones2\">Adam Jones<\/a>.<\/p>\n<p>The video delves into how exception state is managed in .NET and the specific issues that arise when exceptions are reused without being re-thrown. Ian demonstrates the problem with code examples and shows how the new operator resolves it.<\/p>\n<p>Full documentation is available at <a href=\"https:\/\/introtorx.com\/\">Introduction to Rx.NET<\/a>.<\/p>\n<ul>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=_4BVPQit6EM&amp;t=0s\">00:00<\/a> Introduction to Rx.NET's New Feature<\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=_4BVPQit6EM&amp;t=35s\">00:35<\/a> Background and Origin of the New Operator<\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=_4BVPQit6EM&amp;t=155s\">02:35<\/a> Understanding Exception State in .NET<\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=_4BVPQit6EM&amp;t=337s\">05:37<\/a> Demonstrating the Issue with Examples<\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=_4BVPQit6EM&amp;t=751s\">12:31<\/a> Introducing the <code>ResetExceptionDispatchState<\/code> Operator<\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=_4BVPQit6EM&amp;t=918s\">15:18<\/a> Conclusion and Further Resources<\/li>\n<\/ul>","link":"https:\/\/endjin.com\/what-we-think\/talks\/rxdotnet-v6-1-new-feature-resetexceptiondispatchstate","guid":"https:\/\/endjin.com\/what-we-think\/talks\/rxdotnet-v6-1-new-feature-resetexceptiondispatchstate","pubDate":"Fri, 03 Oct 2025 16:33:00 GMT","category":["Reactive Extensions","dotnet","Rx.NET","NuGet","Reactive Programming","ReactiveX","C#","Open Source",".NET Foundation","Talk"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/talks\/rx-dotnet-dispatch-state.png"}}},{"title":"Rx.NET v6.1 New Feature: DisposeWith()","description":"<p>In this episode, <a href=\"https:\/\/endjin.com\/who-we-are\/our-people\/ian-griffiths\/\">Ian Griffiths<\/a> introduces the new <code>DisposeWith<\/code> method available in <a href=\"https:\/\/www.nuget.org\/packages\/System.Reactive\/6.1.0\">Rx.NET version 6.1<\/a>, released in October 2025.<\/p>\n<p>He discusses the new functionalities, including a new <code>TakeUntil()<\/code> overload and the <code>ResetExceptionDispatchState<\/code> operator, with additional videos to cover these features.<\/p>\n<p>Ian explains that <code>DisposeWith<\/code> is a community contribution by <a href=\"https:\/\/github.com\/ChrisPulman\">Chris Pullman<\/a>, designed to facilitate a fluent coding style by simplifying the disposal of multiple subscriptions. He demonstrates the method in a console application, comparing it with the traditional CompositeDisposable approach, and highlights its ease of use for handling observable subscriptions.<\/p>\n<p>Full documentation is available at <a href=\"https:\/\/introtorx.com\/\">Introduction to Rx.NET<\/a>.<\/p>\n<ul>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=6wQVb8iyLFU&amp;t=0s\">00:00<\/a> Introduction to Dispose Operator in Rx.NET<\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=6wQVb8iyLFU&amp;t=43s\">00:43<\/a> Community Contribution and Background<\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=6wQVb8iyLFU&amp;t=86s\">01:26<\/a> Purpose and Design of <code>DisposeWith<\/code> Method<\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=6wQVb8iyLFU&amp;t=107s\">01:47<\/a> Demo: <code>DisposeWith<\/code> Method in Action<\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=6wQVb8iyLFU&amp;t=131s\">02:11<\/a> CompositeDisposable vs <code>DisposeWith<\/code><\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=6wQVb8iyLFU&amp;t=202s\">03:22<\/a> Fluent Style Development with <code>DisposeWith<\/code><\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=6wQVb8iyLFU&amp;t=272s\">04:32<\/a> Conclusion and Further Resources<\/li>\n<\/ul>","link":"https:\/\/endjin.com\/what-we-think\/talks\/rxdotnet-v6-1-new-feature-disposewith","guid":"https:\/\/endjin.com\/what-we-think\/talks\/rxdotnet-v6-1-new-feature-disposewith","pubDate":"Fri, 03 Oct 2025 16:32:00 GMT","category":["Reactive Extensions","dotnet","Rx.NET","NuGet","Reactive Programming","ReactiveX","C#","Open Source",".NET Foundation","Talk"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/talks\/rx-dotnet-dispose-with.png"}}},{"title":"Rx.NET v6.1 New Feature: TakeUntil(CancellationToken)","description":"<p>In this video, <a href=\"https:\/\/endjin.com\/who-we-are\/our-people\/ian-griffiths\/\">Ian Griffiths<\/a> introduces the new <code>TakeUntil(CancellationToken)<\/code> operator in <a href=\"https:\/\/www.nuget.org\/packages\/System.Reactive\/6.1.0\">Rx.NET 6.1<\/a>, released in October 2025.<\/p>\n<p>He discusses the purpose and functionality of this operator, which allows users to stop an infinite source when a cancellation token is signalled.<\/p>\n<p>Ian acknowledges the contributions of community members <a href=\"https:\/\/github.com\/nilsauf\">Nils Aufschl\u00e4ger<\/a> and <a href=\"https:\/\/github.com\/danielcweber\">Daniel Weber<\/a> in shaping and developing this feature. Through a simple example using the Interval operator, Ian demonstrates how this new operator works and explains its benefits.<\/p>\n<p>Learn how to manage infinite sources effectively with the new <code>TakeUntil(CancellationToken)<\/code> operator in Rx.NET 6.1.<\/p>\n<p>Full documentation is available at <a href=\"https:\/\/introtorx.com\/\">Introduction to Rx.NET<\/a>.<\/p>\n<ul>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=-ivFY_Hv89Y&amp;t=0s\">00:00<\/a> Introduction to Rx.NET 6.1 and New Features<\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=-ivFY_Hv89Y&amp;t=47s\">00:47<\/a> Community Contributions and Design Evolution<\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=-ivFY_Hv89Y&amp;t=87s\">01:27<\/a> Understanding the TakeUntil(CancellationToken) Operator<\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=-ivFY_Hv89Y&amp;t=188s\">03:08<\/a> Practical Example: Using TakeUntil with Interval<\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=-ivFY_Hv89Y&amp;t=360s\">06:00<\/a> Summary and Documentation<\/li>\n<\/ul>","link":"https:\/\/endjin.com\/what-we-think\/talks\/rxdotnet-v6-1-new-feature-takeuntil-cancellationtoken","guid":"https:\/\/endjin.com\/what-we-think\/talks\/rxdotnet-v6-1-new-feature-takeuntil-cancellationtoken","pubDate":"Fri, 03 Oct 2025 16:31:00 GMT","category":["Reactive Extensions","dotnet","Rx.NET","NuGet","Reactive Programming","ReactiveX","C#","Open Source",".NET Foundation","Talk"],"enclosure":{"@attributes":{"length":"0","type":"image\/png","url":"https:\/\/res.cloudinary.com\/endjin\/image\/upload\/f_auto\/q_80\/assets\/images\/talks\/rx-dotnet-cancellation-token.png"}}}]}}