<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Sean Feldman's Blog</title><link>https://seanfeldman.com/</link><description>Sean Feldman's Blog</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Sat, 25 Oct 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://seanfeldman.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Handling API Calls like a King 👑</title><link>https://seanfeldman.com/posts/handling-api-calls-like-a-king/</link><pubDate>Sat, 25 Oct 2025 00:00:00 +0000</pubDate><author><name>Sean Feldman</name></author><guid>https://seanfeldman.com/posts/handling-api-calls-like-a-king/</guid><description>&lt;div class="featured-image">
                &lt;img src="/posts/handling-api-calls-like-a-king/handling-api-calls-like-a-king.webp" referrerpolicy="no-referrer">
            &lt;/div>Turn sync HTTP calls into resilient async flows with Azure API Management and queues—embracing backpressure, retries, and idempotency to keep APIs fast and reliable.</description></item><item><title>New Blog Tech Stack</title><link>https://seanfeldman.com/posts/new-blog-tech-stack/</link><pubDate>Fri, 24 Oct 2025 00:00:00 +0000</pubDate><author><name>Sean Feldman</name></author><guid>https://seanfeldman.com/posts/new-blog-tech-stack/</guid><description>&lt;div class="featured-image">
                &lt;img src="/posts/new-blog-tech-stack/new-blog-tech-stack.webp" referrerpolicy="no-referrer">
            &lt;/div>What powers my new self-hosted blog: site generator, theme, and the tooling I picked.</description></item><item><title>New Blog</title><link>https://seanfeldman.com/posts/new-blog/</link><pubDate>Mon, 20 Oct 2025 21:50:50 -0600</pubDate><author><name>Sean Feldman</name></author><guid>https://seanfeldman.com/posts/new-blog/</guid><description><![CDATA[<div class="featured-image">
                <img src="/posts/new-blog/new-blog.webp" referrerpolicy="no-referrer">
            </div><p>After 18 years of blogging on <a href="https://weblogs.asp.net/sfeldman" target="_blank" rel="noopener noreferrer">weblogs.asp.net/sfeldman</a> I&rsquo;m moving my blog to a self-hosted.</p>
<p>Historically, my blog was always mostly technical. I&rsquo;ll keep it that way. With a bit of diversification.</p>
<p>Stay tuned!</p>]]></description></item><item><title>DateTime to String with Custom Formatting</title><link>https://seanfeldman.com/posts/datetime-to-string-with-custom-formatting/</link><pubDate>Sun, 03 Nov 2024 20:49:36 +0000</pubDate><author><name>Sean Feldman</name></author><guid>https://seanfeldman.com/posts/datetime-to-string-with-custom-formatting/</guid><description><![CDATA[<p>When formatting <code>DateTime</code> to a string, the format specifier provides access to the parts of the date and time we want to express as a string. E.g.</p>
<div class="code-block highlight is-open show-line-numbers  tw-group tw-my-2">
  <div class="
    
    tw-flex 
    tw-flex-row
    tw-flex-1 
    tw-justify-between 
    tw-w-full tw-bg-bgColor-secondary
    ">      
    <button 
      class="
        code-block-button
        tw-mx-2 
        tw-flex
        tw-flex-row
        tw-flex-1"
      aria-hidden="true">
          <div class="group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></div>
          <p class="tw-select-none !tw-my-1">csharp</p>]]></description></item><item><title>Creating Azure Storage SFTP with Password using Bicep</title><link>https://seanfeldman.com/posts/creating-azure-storage-sftp-with-password-using-bicep/</link><pubDate>Mon, 21 Oct 2024 04:08:20 +0000</pubDate><author><name>Sean Feldman</name></author><guid>https://seanfeldman.com/posts/creating-azure-storage-sftp-with-password-using-bicep/</guid><description>&lt;p>Azure Storage service has a neat little option for hosting an SFTP. Doing so lets you upload your files as blobs to your Storage account. This is extremely helpful, especially when working on the decades-old system migrated to Azure but still requiring SFTP for data transfer. The documentation and setup of SFTP with a Storage account are straightforward—until you try to create the resource using Bicep and set the password as part of Bicep deployment. This is where it&amp;rsquo;s getting a bit cumbersome.&lt;/p></description></item><item><title>Auditing with Azure Functions</title><link>https://seanfeldman.com/posts/auditing-with-azure-functions/</link><pubDate>Fri, 03 Nov 2023 17:29:00 +0000</pubDate><author><name>Sean Feldman</name></author><guid>https://seanfeldman.com/posts/auditing-with-azure-functions/</guid><description><![CDATA[<p>In the previous two posts about <a href="https://weblogs.asp.net/sfeldman/recoverability-with-azure-functions-delayed-retries" target="_blank" rel="noopener noreferrer">recoverability</a>, I focused on the rainy day scenarios where intermittent failures require retries and backoffs. This post will focus on the happy day scenario, where everything works as expected. So what&rsquo;s the issue then?</p>
<p>A successful message processing is not the only outcome that&rsquo;s required. More often than not there&rsquo;s also an audit trail that&rsquo;s requried. Imagine processing purchase orders. Not only you want to know nothing has failed. You might also want to have the confidence in a form of an audit trail that consists of those processed messages.</p>]]></description></item><item><title>Recoverability with Azure Functions - Delayed Retries</title><link>https://seanfeldman.com/posts/recoverability-with-azure-functions-delayed-retries/</link><pubDate>Fri, 03 Nov 2023 05:14:00 +0000</pubDate><author><name>Sean Feldman</name></author><guid>https://seanfeldman.com/posts/recoverability-with-azure-functions-delayed-retries/</guid><description><![CDATA[<p>In the <a href="https://weblogs.asp.net/sfeldman/recoverability-with-azure-functions" target="_blank" rel="noopener noreferrer">previous post</a>, I showed how to implement basic recoverability with Azure Functions and Service Bus. In this post, I&rsquo;m going to expand on the idea and demonstrate how to implement a back-off strategy.</p>
<h2 id="back-off-strategy" class="headerLink">
    <a href="#back-off-strategy" class="header-mark"></a>Back-off strategy</h2><p>A backoff strategy is intended to help with intermittent failures when immediate subsequent retries will suffice due to the required resources not being available within a short period but having a high probability of being back online after a short timeout. This is also known as delayed retries, when retries are attempted after a certain time (delay) to increase the chances of succeeding rather than bombarding with immediate retries and risking failing all the attempts within a short period.</p>]]></description></item><item><title>Recoverability with Azure Functions</title><link>https://seanfeldman.com/posts/recoverability-with-azure-functions/</link><pubDate>Tue, 31 Oct 2023 02:33:14 +0000</pubDate><author><name>Sean Feldman</name></author><guid>https://seanfeldman.com/posts/recoverability-with-azure-functions/</guid><description><![CDATA[<p>When working with Azure Service Bus triggers and Functions, the recoverability story is not the best with the out-of-box implementation. To understand the challenges with the built-in recoverability and how to overcome those, this post will dive into the built-in recoverability with Azure Functions for Service Bus queues and subscriptions, offering an alternative. But first, what is recoverability?</p>
<blockquote>
  <p>Recoverability in messaging refers to a messaging system&rsquo;s ability to ensure that messages are reliably delivered even in the presence of failures or disruptions. It involves message persistence, acknowledgments, message queues, redundancy, failover mechanisms, and retry strategies to guarantee message delivery and prevent data loss. This is vital for applications where message loss can have serious consequences.</p>]]></description></item><item><title>Azure Blob Storage Cold Tier</title><link>https://seanfeldman.com/posts/azure-blob-storage-cold-tier/</link><pubDate>Wed, 16 Aug 2023 04:31:46 +0000</pubDate><author><name>Sean Feldman</name></author><guid>https://seanfeldman.com/posts/azure-blob-storage-cold-tier/</guid><description><![CDATA[<p>Azure Storage service is the foundational building block in cloud architecture. Cheap, reliable, resilient, and powerful. From small solutions to monster systems, Blob service, in particular, is convenient. Any system that involves any type of document slowly but steadily has the number of blobs/files growing over time. Be it specific business requirements or legal aspects, blobs must be kept around for some time. But not all blobs are equal.</p>
<p>Blobs has had the concept of tiers for quite a while. Two tiers that are opposite extremes are Hot and Archive. The Hot tier is fast and inexpensive to access but more expensive to store. The Archive tier is inexpensive to store, but when it comes to reading and writing, let&rsquo;s say it&rsquo;s not a good idea. For a while, there was also the Cool tier. A middle ground if you wish. Blobs that might be accessed but very infrequently.</p>]]></description></item><item><title>Azure Function: One Line of Insanity</title><link>https://seanfeldman.com/posts/azure-function-a-single-line-to-drive-you-nuts/</link><pubDate>Sat, 12 Aug 2023 22:48:00 +0000</pubDate><author><name>Sean Feldman</name></author><guid>https://seanfeldman.com/posts/azure-function-a-single-line-to-drive-you-nuts/</guid><description><![CDATA[<!-- ![image][2] -->
<p>Azure Functions Isolated Worker SDK is an easy-to-set-up and get-running framework.
The minimal <code>Progarm.cs</code> is hard to mess up.</p>
<div class="code-block highlight is-open show-line-numbers  tw-group tw-my-2">
  <div class="
    
    tw-flex 
    tw-flex-row
    tw-flex-1 
    tw-justify-between 
    tw-w-full tw-bg-bgColor-secondary
    ">      
    <button 
      class="
        code-block-button
        tw-mx-2 
        tw-flex
        tw-flex-row
        tw-flex-1"
      aria-hidden="true">
          <div class="group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></div>
          <p class="tw-select-none !tw-my-1">csharp</p>]]></description></item></channel></rss>