
  <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
      <title>Dariusz Woźniak | Blog</title>
      <link>https://dariuszwozniak.net/blog</link>
      <description>Blogging about dev, .NET and Optimizely</description>
      <language>en-us</language>
      <managingEditor>Dariusz Woźniak</managingEditor>
      <webMaster>Dariusz Woźniak</webMaster>
      <lastBuildDate>Tue, 17 Jun 2025 00:00:00 GMT</lastBuildDate>
      <atom:link href="https://dariuszwozniak.net/feed.xml" rel="self" type="application/rss+xml"/>
      
  <item>
    <guid>https://dariuszwozniak.net/blog/fuzzy-dates-library</guid>
    <title>Fuzzy Dates library – EBNF grammar for temporal expressions</title>
    <link>https://dariuszwozniak.net/blog/fuzzy-dates-library</link>
    <description>Recently I&#39;ve been working on a project that requires parsing temporal expressions. I&#39;ve created a library that provides a comprehensive EBNF grammar for representing fuzzy, uncertain, and complex temporal expressions.</description>
        <pubDate>Tue, 17 Jun 2025 00:00:00 GMT</pubDate>
    <author>Dariusz Woźniak</author>
    <category>ebnf</category><category>sparql</category><category>grammar</category><category>locale</category><category>datetime</category><category>side-project</category>
  </item>

  <item>
    <guid>https://dariuszwozniak.net/blog/autohotkey-em-en-dash</guid>
    <title>Typing Em and En dashes with AutoHotkey</title>
    <link>https://dariuszwozniak.net/blog/autohotkey-em-en-dash</link>
    <description>Learn how to quickly type em and en dashes on Windows using a simple AutoHotkey script</description>
        <pubDate>Mon, 28 Apr 2025 00:00:00 GMT</pubDate>
    <author>Dariusz Woźniak</author>
    <category>autohotkey</category><category>automation</category><category>productivity</category>
  </item>

  <item>
    <guid>https://dariuszwozniak.net/blog/optimizely/disable-find-indexing</guid>
    <title>How to disable Optimizely Find indexing</title>
    <link>https://dariuszwozniak.net/blog/optimizely/disable-find-indexing</link>
    <description>When, for example, importing large amounts of data to Optimizely Commerce, automatic indexing can cause performance issues. Learn how to temporarily disable Find indexing during import jobs.</description>
        <pubDate>Sun, 27 Apr 2025 00:00:00 GMT</pubDate>
    <author>Dariusz Woźniak</author>
    <category>EPiServer</category><category>Optimizely</category>
  </item>

  <item>
    <guid>https://dariuszwozniak.net/blog/shouldly-scrubbing</guid>
    <title>Advanced Scrubbing with Shouldly for Approval Testing</title>
    <link>https://dariuszwozniak.net/blog/shouldly-scrubbing</link>
    <description>Shouldly&#39;s ShouldMatchApproved() provides a powerful approval testing mechanism that includes scrubbing capabilities to handle dynamic content in your test assertions. This post explores how to leverage scrubbers effectively, including a custom JSON scrubber implementation.</description>
        <pubDate>Tue, 15 Apr 2025 00:00:00 GMT</pubDate>
    <author>Dariusz Woźniak</author>
    <category>C-Sharp</category><category>unit-testing</category><category>automated-testing</category>
  </item>

  <item>
    <guid>https://dariuszwozniak.net/blog/optimizely/how-to-remove-deleted-media-from-content</guid>
    <title>Optimizely: ValidationException: Media is not found. Navigate to Assets tab and remove it in order to publish; a.k.a. How to remove deleted media references?</title>
    <link>https://dariuszwozniak.net/blog/optimizely/how-to-remove-deleted-media-from-content</link>
    <description>How to programmatically remove broken media references in Optimizely Commerce when encountering the Media is not found validation error during publishing</description>
        <pubDate>Fri, 11 Apr 2025 00:00:00 GMT</pubDate>
    <author>Dariusz Woźniak</author>
    <category>optimizely</category><category>episerver</category>
  </item>

  <item>
    <guid>https://dariuszwozniak.net/blog/fossed</guid>
    <title>Introducing FOSSED: Navigating .NET library licensing changes</title>
    <link>https://dariuszwozniak.net/blog/fossed</link>
    <description>Recent shifts in the .NET ecosystem have seen several popular libraries move towards commercial licenses. I created FOSSED, a resource hub to help developers understand these changes and find free, open-source alternatives</description>
        <pubDate>Thu, 10 Apr 2025 00:00:00 GMT</pubDate>
    <author>Dariusz Woźniak</author>
    <category>C-Sharp</category><category>side-project</category>
  </item>

  <item>
    <guid>https://dariuszwozniak.net/blog/optimizely/gettimestamp</guid>
    <title>When was your Optimizely content indexed?</title>
    <link>https://dariuszwozniak.net/blog/optimizely/gettimestamp</link>
    <description>Unraveling the mystery behind the GetTimestamp property in Optimizely Search &amp; Navigation (Find) and how it actually represents the indexing time, not content creation or modification time</description>
        <pubDate>Wed, 09 Apr 2025 00:00:00 GMT</pubDate>
    <author>Dariusz Woźniak</author>
    <category>Optimizely</category><category>Episerver</category>
  </item>

  <item>
    <guid>https://dariuszwozniak.net/blog/optimizely/using-user-impersonation</guid>
    <title>Using user impersonation in Optimizely</title>
    <link>https://dariuszwozniak.net/blog/optimizely/using-user-impersonation</link>
    <description>Learn the correct way to execute code as a specific Optimizely user using user impersonation feature.
</description>
        <pubDate>Tue, 08 Apr 2025 00:00:00 GMT</pubDate>
    <author>Dariusz Woźniak</author>
    <category>optimizely</category><category>episerver</category>
  </item>

  <item>
    <guid>https://dariuszwozniak.net/blog/optimizely/opti-addons-remove-obsolete-cms-properties</guid>
    <title>Optimizely / Episerver: How to remove obsolete CMS data - automatically and manually</title>
    <link>https://dariuszwozniak.net/blog/optimizely/opti-addons-remove-obsolete-cms-properties</link>
    <description>Optimizely does not remove non-code CMS properties by a default - This article describes how to remove obsolete CMS data and introduces yet another the Opti.Addons project.</description>
        <pubDate>Mon, 27 Jan 2025 00:00:00 GMT</pubDate>
    <author>Dariusz Woźniak</author>
    <category>EPiServer</category><category>Optimizely</category><category>Opti.Addons</category><category>side-project</category>
  </item>

  <item>
    <guid>https://dariuszwozniak.net/blog/optimizely/default-view</guid>
    <title>Optimizely / Episerver: How to use edit view as a default view?</title>
    <link>https://dariuszwozniak.net/blog/optimizely/default-view</link>
    <description>Optimizely uses preview on-edit view as a default. However, some may prefer edit view as a default. Here is how to do it via code.</description>
        <pubDate>Wed, 22 Jan 2025 00:00:00 GMT</pubDate>
    <author>Dariusz Woźniak</author>
    <category>EPiServer</category><category>Optimizely</category>
  </item>

  <item>
    <guid>https://dariuszwozniak.net/blog/how-to-unit-test-class-with-service-locator-update</guid>
    <title>How to write unit test for a class with dependency to ServiceLocator — update</title>
    <link>https://dariuszwozniak.net/blog/how-to-unit-test-class-with-service-locator-update</link>
    <description>It has been a year since I wrote the article about unit testing with ServiceLocator. But, there are two things worth updating - replacing obsolete FormatterServices and use scoped service provider.</description>
        <pubDate>Tue, 19 Nov 2024 00:00:00 GMT</pubDate>
    <author>Dariusz Woźniak</author>
    <category>EPiServer</category><category>Optimizely</category><category>unit testing</category><category>dependency injection</category>
  </item>

  <item>
    <guid>https://dariuszwozniak.net/blog/how-to-check-if-culture-exists</guid>
    <title>How to check (efficiently) if a culture exists in .NET?</title>
    <link>https://dariuszwozniak.net/blog/how-to-check-if-culture-exists</link>
    <description>How to efficiently check if a given culture exists in .NET?</description>
        <pubDate>Tue, 08 Oct 2024 00:00:00 GMT</pubDate>
    <author>Dariusz Woźniak</author>
    <category>C-Sharp</category><category>Locale</category><category>Performance</category>
  </item>

  <item>
    <guid>https://dariuszwozniak.net/blog/optimizely/how-to-remove-obsolete-commerce-data</guid>
    <title>Optimizely / Episerver: How to remove obsolete Commerce data; Also, introducing the Opti.Addons project</title>
    <link>https://dariuszwozniak.net/blog/optimizely/how-to-remove-obsolete-commerce-data</link>
    <description>By default Optimizely code does not remove properties from the database when you remove them from the code - This article describes how to remove obsolete Commerce data and introduces the Opti.Addons project.</description>
        <pubDate>Fri, 27 Sep 2024 00:00:00 GMT</pubDate>
    <author>Dariusz Woźniak</author>
    <category>EPiServer</category><category>Optimizely</category><category>Opti.Addons</category><category>side-project'</category>
  </item>

  <item>
    <guid>https://dariuszwozniak.net/blog/swap-via-deconstruction</guid>
    <title>Swap values via deconstruction in C#</title>
    <link>https://dariuszwozniak.net/blog/swap-via-deconstruction</link>
    <description>One of the feature of the C# allows to swap values via deconstruction (without using temporary variable). It was introduced while ago (C# 7.0), but I oversaw it. It&#39;s a nice feature that allows to swap values in a very elegant way.</description>
        <pubDate>Thu, 12 Sep 2024 00:00:00 GMT</pubDate>
    <author>Dariusz Woźniak</author>
    <category>C-Sharp</category>
  </item>

  <item>
    <guid>https://dariuszwozniak.net/blog/charles-proxy</guid>
    <title>How to setup Charles proxy for Windows, a.k.a. how to catch the localhost traffic with the example of ASP.NET Core project of the EPiServer Foundation</title>
    <link>https://dariuszwozniak.net/blog/charles-proxy</link>
    <description>Charles is a tool that enables to view all HTTP(S) traffic between the current system and the Internet. Here I will show how to setup Charles to catch the localhost traffic with the example of ASP.NET Core and the EPiServer Foundation project.</description>
        <pubDate>Sun, 08 Sep 2024 00:00:00 GMT</pubDate>
    <author>Dariusz Woźniak</author>
    <category>C-Sharp</category><category>EPiServer</category><category>Optimizely</category>
  </item>

  <item>
    <guid>https://dariuszwozniak.net/blog/optimizely/search-inspect-query</guid>
    <title>Optimizely Search / Episerver Find: Inspect the underlying query</title>
    <link>https://dariuszwozniak.net/blog/optimizely/search-inspect-query</link>
    <description>Optimizely Search &amp; Navigation (a.k.a. EPiServer Find) is a powerful engine but, as being a black box, it might be difficult to diagnose its behavior when things go wrong. This article describes how to make a deep dive into the search engine and get the insights about the underlying query.</description>
        <pubDate>Fri, 23 Aug 2024 00:00:00 GMT</pubDate>
    <author>Dariusz Woźniak</author>
    <category>EPiServer</category><category>Optimizely</category>
  </item>

  <item>
    <guid>https://dariuszwozniak.net/blog/optimizely/do-not-use-thread-to-resolve-current-language</guid>
    <title>Optimizely / Episerver: Do not use a thread to resolve the current language</title>
    <link>https://dariuszwozniak.net/blog/optimizely/do-not-use-thread-to-resolve-current-language</link>
    <description>Using thread to resolve the current language in Optimizely is not recommended. Here is why and how to fix it.</description>
        <pubDate>Tue, 23 Apr 2024 00:00:00 GMT</pubDate>
    <author>Dariusz Woźniak</author>
    <category>EPiServer</category><category>Optimizely</category><category>Locale</category>
  </item>

  <item>
    <guid>https://dariuszwozniak.net/blog/optimizely/get-content-reference-from-code</guid>
    <title>Optimizely / Episerver: How to get content from the product/variant code (e.g. SKU number)</title>
    <link>https://dariuszwozniak.net/blog/optimizely/get-content-reference-from-code</link>
    <description>This is a very simple recipe on how to get content from the entry/node code in the Optimizely. Let&#39;s dig in!</description>
        <pubDate>Mon, 22 Apr 2024 00:00:00 GMT</pubDate>
    <author>Dariusz Woźniak</author>
    <category>EPiServer</category><category>Optimizely</category>
  </item>

  <item>
    <guid>https://dariuszwozniak.net/blog/optimizely/how-to-get-anonymous-user-id-via-anonymousidfeature</guid>
    <title>Optimizely / Episerver: How to get anonymous user ID via AnonymousIdFeature?</title>
    <link>https://dariuszwozniak.net/blog/optimizely/how-to-get-anonymous-user-id-via-anonymousidfeature</link>
    <description>Optimizely allows to obtain the ID of the anonymous user (even if the user is logged in). One of the example of the usage is merging cart when the user logs in.</description>
        <pubDate>Mon, 12 Feb 2024 00:00:00 GMT</pubDate>
    <author>Dariusz Woźniak</author>
    <category>EPiServer</category><category>Optimizely</category>
  </item>

  <item>
    <guid>https://dariuszwozniak.net/blog/optimizely/order-number-generator</guid>
    <title>Optimizely / Episerver: Generating a custom order number</title>
    <link>https://dariuszwozniak.net/blog/optimizely/order-number-generator</link>
    <description>There might be a need to generate a custom order number in Optimizely Commerce. This post shows how to do it.</description>
        <pubDate>Wed, 24 Jan 2024 00:00:00 GMT</pubDate>
    <author>Dariusz Woźniak</author>
    <category>EPiServer</category><category>Optimizely</category>
  </item>

  <item>
    <guid>https://dariuszwozniak.net/blog/optimizely/get-current-content-in-iselectionfactory</guid>
    <title>Optimizely / Episerver: How to get current content in ISelectionFactory?</title>
    <link>https://dariuszwozniak.net/blog/optimizely/get-current-content-in-iselectionfactory</link>
    <description>Recently I struggled with getting data for the current content in the ISelectionFactory context. Here is the solution.</description>
        <pubDate>Fri, 05 Jan 2024 00:00:00 GMT</pubDate>
    <author>Dariusz Woźniak</author>
    <category>EPiServer</category><category>Optimizely</category>
  </item>

  <item>
    <guid>https://dariuszwozniak.net/blog/optimizely/how-to-fix-argumentexception-unable-to-load-type-of-plugin</guid>
    <title>Optimizely / Episerver: How to fix System.ArgumentException: Unable to load type (IPlugin type)</title>
    <link>https://dariuszwozniak.net/blog/optimizely/how-to-fix-argumentexception-unable-to-load-type-of-plugin</link>
    <description>Recently I encountered the following error - System.ArgumentException, Unable to load type (IPlugin type). This post will show you how to fix it.</description>
        <pubDate>Thu, 04 Jan 2024 00:00:00 GMT</pubDate>
    <author>Dariusz Woźniak</author>
    <category>EPiServer</category><category>Optimizely</category>
  </item>

  <item>
    <guid>https://dariuszwozniak.net/blog/optimizely/skip-validation-of-cart</guid>
    <title>Optimizely / Episerver: How to skip automatic validation of the cart?</title>
    <link>https://dariuszwozniak.net/blog/optimizely/skip-validation-of-cart</link>
    <description>Optimizely invokes its internal validators for the cart processing by default. This article describes how to skip this validation in scenarios where custom validation logic is in place, or we don&#39;t want UI to update the cart when viewing it.</description>
        <pubDate>Fri, 22 Dec 2023 00:00:00 GMT</pubDate>
    <author>Dariusz Woźniak</author>
    <category>EPiServer</category><category>Optimizely</category>
  </item>

  <item>
    <guid>https://dariuszwozniak.net/blog/debugging-multithreaded-code-in-csharp</guid>
    <title>How to set a breakpoint in a multi-threaded code: Thread-specific breakpoints in Rider</title>
    <link>https://dariuszwozniak.net/blog/debugging-multithreaded-code-in-csharp</link>
    <description>Debugging multi-threaded applications might be challenging. Setting a breakpoint in a multi-threaded context might be run multiple times, making the debugging process difficult. However, JetBrains Rider allows you to make one simple trick to debug only a single thread for a certain breakpoint.</description>
        <pubDate>Wed, 13 Dec 2023 00:00:00 GMT</pubDate>
    <author>Dariusz Woźniak</author>
    <category>C-Sharp</category><category>Rider</category>
  </item>

  <item>
    <guid>https://dariuszwozniak.net/blog/debugging-evaluation-and-logging</guid>
    <title>Breakpoint evaluation and logging in Rider</title>
    <link>https://dariuszwozniak.net/blog/debugging-evaluation-and-logging</link>
    <description>When it comes to debugging, there might be a case when the load of calls to the breakpoint is significant. Or, we want to log some data while debugging. In this case, it is useful to do not suspend the execution and evaluate the breakpoint condition and log the result (In JetBrains Rider).</description>
        <pubDate>Fri, 01 Dec 2023 00:00:00 GMT</pubDate>
    <author>Dariusz Woźniak</author>
    <category>C-Sharp</category><category>Rider</category>
  </item>

  <item>
    <guid>https://dariuszwozniak.net/blog/how-to-unit-test-class-with-service-locator</guid>
    <title>How to write unit test for a class with dependency to ServiceLocator (with example of Optimizely)?</title>
    <link>https://dariuszwozniak.net/blog/how-to-unit-test-class-with-service-locator</link>
    <description>Some testing classes may have a dependency to the ServiceLocator, so the dependencies are injected via property, for example. That makes class more difficult to unit test. In this post I will present how to write unit test for a class with dependency to ServiceLocator, with the real world example of Optimizely.</description>
        <pubDate>Fri, 10 Nov 2023 00:00:00 GMT</pubDate>
    <author>Dariusz Woźniak</author>
    <category>EPiServer</category><category>Optimizely</category><category>unit testing</category><category>dependency injection</category>
  </item>

  <item>
    <guid>https://dariuszwozniak.net/blog/test-unmockable-ctor</guid>
    <title>How to test a class that has constructor impossible to mock?</title>
    <link>https://dariuszwozniak.net/blog/test-unmockable-ctor</link>
    <description>In some cases, there are classes with constructors that are impossible to mock with proxy-based mocking frameworks (such as Moq, FakeItEasy, NSubstitute, etc). In this article, I will present how to create a test for class that is impossible to mock.</description>
        <pubDate>Thu, 09 Nov 2023 00:00:00 GMT</pubDate>
    <author>Dariusz Woźniak</author>
    <category>C-Sharp</category><category>unit testing</category>
  </item>

  <item>
    <guid>https://dariuszwozniak.net/blog/optimizely/optimizely-automatically-register-dependencies</guid>
    <title>Optimizely / Episerver: Automatically register dependencies</title>
    <link>https://dariuszwozniak.net/blog/optimizely/optimizely-automatically-register-dependencies</link>
    <description>How to automatically register dependencies in Optimizely? (also in any other project that uses Microsoft.Extensions.DependencyInjection library)</description>
        <pubDate>Tue, 07 Nov 2023 00:00:00 GMT</pubDate>
    <author>Dariusz Woźniak</author>
    <category>EPiServer</category><category>Optimizely</category><category>dependency injection</category>
  </item>

  <item>
    <guid>https://dariuszwozniak.net/blog/optimizely/optimizely-create-asset-programatically</guid>
    <title>Optimizely / Episerver: How to create asset folder programmatically?</title>
    <link>https://dariuszwozniak.net/blog/optimizely/optimizely-create-asset-programatically</link>
    <description>The blog post explains how to create an asset folder programmatically in Optimizely CMS.</description>
        <pubDate>Mon, 06 Nov 2023 00:00:00 GMT</pubDate>
    <author>Dariusz Woźniak</author>
    <category>EPiServer</category><category>Optimizely</category>
  </item>

  <item>
    <guid>https://dariuszwozniak.net/blog/non-cls-exception</guid>
    <title>Is catch the same as catch(Exception)? Well, not exactly...</title>
    <link>https://dariuszwozniak.net/blog/non-cls-exception</link>
    <description>Is catch the same as catch(Exception)? Not exactly. There is a small subtle nuance that causes catch(Exception) to be not hit.</description>
        <pubDate>Sun, 05 Nov 2023 00:00:00 GMT</pubDate>
    <author>Dariusz Woźniak</author>
    <category>C-Sharp</category>
  </item>

  <item>
    <guid>https://dariuszwozniak.net/blog/hello-world</guid>
    <title>Hello world! Again!</title>
    <link>https://dariuszwozniak.net/blog/hello-world</link>
    <description>That is the time for saying goodbye to the old blog and welcome to the new one!</description>
        <pubDate>Thu, 02 Nov 2023 00:00:00 GMT</pubDate>
    <author>Dariusz Woźniak</author>
    <category>meta</category>
  </item>

    </channel>
  </rss>
