<!DOCTYPE html>
<html lang="en"><head><title>Kijana Woodard&#x27;s Blog</title>
    <base href="/">
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="robots" content="index, follow">
    <meta name="description" content="Kijana Woodard's blog about software development and anything else that seems interesting.">
    <link rel="author" href="/humans.txt">
    <link rel="icon" type="image/x-icon" href="favicon.png">
    <link rel="stylesheet" href="css/kube.min.css">
    <link rel="stylesheet" href="app.css">
    <link rel="stylesheet" href="css/site.css">
    <link rel="stylesheet" href="css/layout.css">
    <link rel="stylesheet" href="BlogEngine.Site.styles.css">

    </head>

<body><div id="wrap"><header class="row"><hgroup class="third"><h1><a href="/" rel="home">Kijana Woodard</a></h1>
                <h2 class="subheader">Software Minimalism</h2></hgroup>
            <div class="third actions"><a href="/about"><span class="surround-icon"><span class="fa fa-user"></span> About</span></a>
                <a href="/contact"><span class="surround-icon"><span class="fa fa-envelope"></span> Contact</span></a></div>
            <form action="https://www.duckduckgo.com/" method="GET" class="third search" onsubmit="this.q.value = 'site:kijanawoodard.com ' + this.userInput.value;"><input type="hidden" name="q" value>
    
                <span class="surround-icon"><span class="fa fa-search"></span></span>
                <input type="text" name="userInput" placeholder="Search"></form></header>
        <hr>
        <ul id="home" class="posts" b-7fegg1xn3m><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/a-new-blog-engine" b-7fegg1xn3m>A New Blog Engine</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Monday, 17 February 2025</time></h4>
                <div b-7fegg1xn3m>A look back at the original blog engine and the transition to a new static site built with BlazorStatic highlighting the changes.</div>
                <a aria-label="Read &quot;A look back at the original blog engine and the transition to a new static site built with BlazorStatic highlighting the changes.&quot;" href="blog/a-new-blog-engine" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/item-templates-in-visual-studio-2015" b-7fegg1xn3m>Item Templates in Visual Studio 2015</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Wednesday, 10 August 2016</time></h4>
                <div b-7fegg1xn3m>A practical guide to creating and implementing custom item templates in Visual Studio 2015, with tips for handling non-code files and troubleshooting common issues.</div>
                <a aria-label="Read &quot;A practical guide to creating and implementing custom item templates in Visual Studio 2015, with tips for handling non-code files and troubleshooting common issues.&quot;" href="blog/item-templates-in-visual-studio-2015" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/to-catch-a-bot-use-a-honeypot" b-7fegg1xn3m>To Catch a Bot, Use a Honeypot</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Tuesday, 09 August 2016</time></h4>
                <div b-7fegg1xn3m>A practical implementation of honeypot fields to detect and filter bot submissions in web forms, offering a JavaScript-free alternative to traditional CAPTCHA solutions.</div>
                <a aria-label="Read &quot;A practical implementation of honeypot fields to detect and filter bot submissions in web forms, offering a JavaScript-free alternative to traditional CAPTCHA solutions.&quot;" href="blog/to-catch-a-bot-use-a-honeypot" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/lets-encrypt-shall-we" b-7fegg1xn3m>Let&#x27;s Encrypt, Shall We?</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Friday, 05 August 2016</time></h4>
                <div b-7fegg1xn3m>A practical walkthrough of implementing Let's Encrypt SSL certificates on Azure WebApps, including troubleshooting common pitfalls and limitations.</div>
                <a aria-label="Read &quot;A practical walkthrough of implementing Let&#x27;s Encrypt SSL certificates on Azure WebApps, including troubleshooting common pitfalls and limitations.&quot;" href="blog/lets-encrypt-shall-we" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/setting-up-azure-cdn" b-7fegg1xn3m>Setting Up Azure CDN</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Thursday, 04 August 2016</time></h4>
                <div b-7fegg1xn3m>A step-by-step guide to implementing Azure CDN for web applications, including troubleshooting common issues with propagation times, CORS settings, and custom domain configuration.</div>
                <a aria-label="Read &quot;A step-by-step guide to implementing Azure CDN for web applications, including troubleshooting common issues with propagation times, CORS settings, and custom domain configuration.&quot;" href="blog/setting-up-azure-cdn" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/comments-collapse" b-7fegg1xn3m>Comments Collapse</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Monday, 01 August 2016</time></h4>
                <div b-7fegg1xn3m>A quick demonstration of using C# Interactive to merge separate comment YAML files into their corresponding blog post files, reducing file management overhead.</div>
                <a aria-label="Read &quot;A quick demonstration of using C# Interactive to merge separate comment YAML files into their corresponding blog post files, reducing file management overhead.&quot;" href="blog/comments-collapse" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/winning-with-c-sharp-interactive" b-7fegg1xn3m>#Winning with C# Interactive</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Friday, 29 July 2016</time></h4>
                <div b-7fegg1xn3m>A practical example of using Visual Studio's C# Interactive window to efficiently process and migrate blog post metadata into Jekyll-style front matter format.</div>
                <a aria-label="Read &quot;A practical example of using Visual Studio&#x27;s C# Interactive window to efficiently process and migrate blog post metadata into Jekyll-style front matter format.&quot;" href="blog/winning-with-c-sharp-interactive" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/removing-disqus-with-f-sharp" b-7fegg1xn3m>Removing Disqus with F#</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Thursday, 28 July 2016</time></h4>
                <div b-7fegg1xn3m>A practical demonstration of using F#'s type providers to elegantly parse and process Disqus comment export data, showcasing the language's powerful XML handling capabilities.</div>
                <a aria-label="Read &quot;A practical demonstration of using F#&#x27;s type providers to elegantly parse and process Disqus comment export data, showcasing the language&#x27;s powerful XML handling capabilities.&quot;" href="blog/removing-disqus-with-f-sharp" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/goodbye-disqus" b-7fegg1xn3m>Goodbye Disqus</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Wednesday, 27 July 2016</time></h4>
                <div b-7fegg1xn3m>A reflection on the decision to remove Disqus comments from a blog, discussing the technical and philosophical reasons for taking ownership of comment data and exploring alternative solutions.</div>
                <a aria-label="Read &quot;A reflection on the decision to remove Disqus comments from a blog, discussing the technical and philosophical reasons for taking ownership of comment data and exploring alternative solutions.&quot;" href="blog/goodbye-disqus" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/asp-net-mvc-content-negotiation" b-7fegg1xn3m>Asp.net MVC Content Negotiation</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Friday, 08 November 2013</time></h4>
                <div b-7fegg1xn3m>An exploration of implementing content negotiation in ASP.NET MVC, allowing single endpoints to serve multiple content types through custom action invokers and format-specific views.</div>
                <a aria-label="Read &quot;An exploration of implementing content negotiation in ASP.NET MVC, allowing single endpoints to serve multiple content types through custom action invokers and format-specific views.&quot;" href="blog/asp-net-mvc-content-negotiation" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/a-tale-of-scope-creep" b-7fegg1xn3m>A Tale of Scope Creep</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Tuesday, 05 November 2013</time></h4>
                <div b-7fegg1xn3m>A detailed journey of how implementing a simple 404 page evolved into multiple features, including archive pages, partial views, and content negotiation improvements.</div>
                <a aria-label="Read &quot;A detailed journey of how implementing a simple 404 page evolved into multiple features, including archive pages, partial views, and content negotiation improvements.&quot;" href="blog/a-tale-of-scope-creep" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/vessel-modules" b-7fegg1xn3m>Vessel Modules</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Friday, 01 November 2013</time></h4>
                <div b-7fegg1xn3m>An exploration of implementing a module system in Vessel, discussing the tradeoffs between application-level and feature-level legibility in IoC container design.</div>
                <a aria-label="Read &quot;An exploration of implementing a module system in Vessel, discussing the tradeoffs between application-level and feature-level legibility in IoC container design.&quot;" href="blog/vessel-modules" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/introducing-vessel" b-7fegg1xn3m>Introducing Vessel</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Thursday, 31 October 2013</time></h4>
                <div b-7fegg1xn3m>Introducing Vessel, a minimalist dependency injection container that challenges traditional IoC patterns with a simpler, more focused approach to object composition.</div>
                <a aria-label="Read &quot;Introducing Vessel, a minimalist dependency injection container that challenges traditional IoC patterns with a simpler, more focused approach to object composition.&quot;" href="blog/introducing-vessel" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/introducing-liaison" b-7fegg1xn3m>Introducing Liaison</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Friday, 25 October 2013</time></h4>
                <div b-7fegg1xn3m>Introducing a minimalist in-memory message bus implementation for .NET that focuses on simplicity and understanding core messaging patterns.</div>
                <a aria-label="Read &quot;Introducing a minimalist in-memory message bus implementation for .NET that focuses on simplicity and understanding core messaging patterns.&quot;" href="blog/introducing-liaison" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/introducing-nimbus" b-7fegg1xn3m>Introducing Nimbus</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Thursday, 24 October 2013</time></h4>
                <div b-7fegg1xn3m>Introducing Nimbus, a lightweight mediator implementation that emerged from questioning traditional IoC container patterns and seeking simpler alternatives.</div>
                <a aria-label="Read &quot;Introducing Nimbus, a lightweight mediator implementation that emerged from questioning traditional IoC container patterns and seeking simpler alternatives.&quot;" href="blog/introducing-nimbus" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/creating-a-resharper-macro" b-7fegg1xn3m>Creating a ReSharper Macro</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Thursday, 17 October 2013</time></h4>
                <div b-7fegg1xn3m>A practical guide to creating custom ReSharper macros for automating repetitive code patterns, demonstrated through a blog post template example.</div>
                <a aria-label="Read &quot;A practical guide to creating custom ReSharper macros for automating repetitive code patterns, demonstrated through a blog post template example.&quot;" href="blog/creating-a-resharper-macro" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/constructor-injection-is-partial-application" b-7fegg1xn3m>Constructor Injection is Partial Application</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Wednesday, 16 October 2013</time></h4>
                <div b-7fegg1xn3m>Drawing a parallel between object-oriented constructor injection and functional programming's partial application, revealing how both patterns solve the problem of dependency management.</div>
                <a aria-label="Read &quot;Drawing a parallel between object-oriented constructor injection and functional programming&#x27;s partial application, revealing how both patterns solve the problem of dependency management.&quot;" href="blog/constructor-injection-is-partial-application" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/interface-inversion" b-7fegg1xn3m>Interface Inversion</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Tuesday, 15 October 2013</time></h4>
                <div b-7fegg1xn3m>Exploring a different perspective on interface design in C# and questioning traditional interface implementation patterns.</div>
                <a aria-label="Read &quot;Exploring a different perspective on interface design in C# and questioning traditional interface implementation patterns.&quot;" href="blog/interface-inversion" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/foo-ifoo-is-an-anti-pattern" b-7fegg1xn3m>Foo: IFoo is an Anti-Pattern</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Monday, 14 October 2013</time></h4>
                <div b-7fegg1xn3m>A critique of the common practice of naming interfaces and their implementations with the Foo:IFoo pattern, exploring why this approach often indicates poor design thinking.</div>
                <a aria-label="Read &quot;A critique of the common practice of naming interfaces and their implementations with the Foo:IFoo pattern, exploring why this approach often indicates poor design thinking.&quot;" href="blog/foo-ifoo-is-an-anti-pattern" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/how-to-wake-up-your-kids" b-7fegg1xn3m>How to Wake Up Your Kids</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Saturday, 12 October 2013</time></h4>
                <div b-7fegg1xn3m>A humorous guide to the seemingly inevitable ways parents accidentally wake their sleeping children, based on real-life observations and experiences.</div>
                <a aria-label="Read &quot;A humorous guide to the seemingly inevitable ways parents accidentally wake their sleeping children, based on real-life observations and experiences.&quot;" href="blog/how-to-wake-up-your-kids" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/violating-srp-with-constructor-injection" b-7fegg1xn3m>Violating SRP with Constructor Injection</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Friday, 11 October 2013</time></h4>
                <div b-7fegg1xn3m>An examination of how constructor injection patterns can lead to Single Responsibility Principle violations, with practical examples and solutions.</div>
                <a aria-label="Read &quot;An examination of how constructor injection patterns can lead to Single Responsibility Principle violations, with practical examples and solutions.&quot;" href="blog/violating-srp-with-constructor-injection" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/violating-isp-with-constructor-injection" b-7fegg1xn3m>Violating ISP with Constructor Injection</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Thursday, 10 October 2013</time></h4>
                <div b-7fegg1xn3m>A deep dive into how constructor injection can inadvertently violate the Interface Segregation Principle, with examples of common anti-patterns and their solutions.</div>
                <a aria-label="Read &quot;A deep dive into how constructor injection can inadvertently violate the Interface Segregation Principle, with examples of common anti-patterns and their solutions.&quot;" href="blog/violating-isp-with-constructor-injection" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/questioning-ioc-containers" b-7fegg1xn3m>Questioning IoC Containers</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Wednesday, 09 October 2013</time></h4>
                <div b-7fegg1xn3m>An exploration of Greg Young's perspective on IoC containers, questioning their necessity and examining simpler alternatives in software architecture.</div>
                <a aria-label="Read &quot;An exploration of Greg Young&#x27;s perspective on IoC containers, questioning their necessity and examining simpler alternatives in software architecture.&quot;" href="blog/questioning-ioc-containers" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/dotnet-demon" b-7fegg1xn3m>.Net Demon</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Tuesday, 08 October 2013</time></h4>
                <div b-7fegg1xn3m>A review of .Net Demon, a Visual Studio extension that enhances developer productivity through automatic compilation and browser refresh features.</div>
                <a aria-label="Read &quot;A review of .Net Demon, a Visual Studio extension that enhances developer productivity through automatic compilation and browser refresh features.&quot;" href="blog/dotnet-demon" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/learning-nservicebus-review" b-7fegg1xn3m>Learning NServiceBus Review</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Monday, 30 September 2013</time></h4>
                <div b-7fegg1xn3m>A comprehensive review of David Boike's book on NServiceBus, examining how it effectively introduces messaging concepts and practical implementation for developers.</div>
                <a aria-label="Read &quot;A comprehensive review of David Boike&#x27;s book on NServiceBus, examining how it effectively introduces messaging concepts and practical implementation for developers.&quot;" href="blog/learning-nservicebus-review" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/building-a-blog-engine" b-7fegg1xn3m>Building My Own Blog</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Saturday, 08 December 2012</time></h4>
                <div b-7fegg1xn3m>A personal journey in creating a minimalist blog engine from scratch, discussing the design decisions, challenges, and lessons learned along the way.</div>
                <a aria-label="Read &quot;A personal journey in creating a minimalist blog engine from scratch, discussing the design decisions, challenges, and lessons learned along the way.&quot;" href="blog/building-a-blog-engine" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/javascript-utc-datetime" b-7fegg1xn3m>Javascript UTC Datetime</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Tuesday, 05 June 2012</time></h4>
                <div b-7fegg1xn3m>A quick tip about JavaScript's built-in UTC datetime handling capabilities, demonstrating how the language automatically manages timezone conversions without additional code.</div>
                <a aria-label="Read &quot;A quick tip about JavaScript&#x27;s built-in UTC datetime handling capabilities, demonstrating how the language automatically manages timezone conversions without additional code.&quot;" href="blog/javascript-utc-datetime" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/just-use-string-id-for-ravendb" b-7fegg1xn3m>Just use string Id for RavenDB</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Thursday, 31 May 2012</time></h4>
                <div b-7fegg1xn3m>A practical guide on why using string IDs in RavenDB is the better choice over integers, especially when dealing with indexes and routing in MVC applications.</div>
                <a aria-label="Read &quot;A practical guide on why using string IDs in RavenDB is the better choice over integers, especially when dealing with indexes and routing in MVC applications.&quot;" href="blog/just-use-string-id-for-ravendb" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/seeking-density-in-architectural-abstractions" b-7fegg1xn3m>Seeking Density in Architectural Abstractions</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Tuesday, 14 February 2012</time></h4>
                <div b-7fegg1xn3m>A reflection on the value and pitfalls of architectural abstractions in software development, exploring when they add value and when they become unnecessary overhead.</div>
                <a aria-label="Read &quot;A reflection on the value and pitfalls of architectural abstractions in software development, exploring when they add value and when they become unnecessary overhead.&quot;" href="blog/seeking-density-in-architectural-abstractions" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/fubumvc-validation-and-re-hydrating-the-view" b-7fegg1xn3m>FubuMVC, Validation, and Re-Hydrating the View</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Sunday, 12 February 2012</time></h4>
                <div b-7fegg1xn3m>Exploring a solution for handling form validation and view re-hydration in FubuMVC, with a focus on maintaining user input data after failed POST requests.</div>
                <a aria-label="Read &quot;Exploring a solution for handling form validation and view re-hydration in FubuMVC, with a focus on maintaining user input data after failed POST requests.&quot;" href="blog/fubumvc-validation-and-re-hydrating-the-view" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/c-partition-list-into-list-of-lists" b-7fegg1xn3m>C# Partition List into List of Lists</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Sunday, 17 October 2010</time></h4>
                <div b-7fegg1xn3m>An exploration of different approaches to partitioning lists in C#, including a discovery of how LINQ's GroupBy provides a simpler solution than custom partitioning logic.</div>
                <a aria-label="Read &quot;An exploration of different approaches to partitioning lists in C#, including a discovery of how LINQ&#x27;s GroupBy provides a simpler solution than custom partitioning logic.&quot;" href="blog/c-partition-list-into-list-of-lists" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/selling-value-for-money" b-7fegg1xn3m>Selling Value for Money</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Thursday, 20 May 2010</time></h4>
                <div b-7fegg1xn3m>A critical look at how service-based businesses, particularly in software development, often undervalue their work and the long-term consequences of underselling services.</div>
                <a aria-label="Read &quot;A critical look at how service-based businesses, particularly in software development, often undervalue their work and the long-term consequences of underselling services.&quot;" href="blog/selling-value-for-money" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/nullor-extension-method" b-7fegg1xn3m>NullOr Extension Method</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Wednesday, 19 May 2010</time></h4>
                <div b-7fegg1xn3m>A practical C# extension method implementation for handling null values more elegantly, providing a cleaner alternative to repetitive null-checking patterns.</div>
                <a aria-label="Read &quot;A practical C# extension method implementation for handling null values more elegantly, providing a cleaner alternative to repetitive null-checking patterns.&quot;" href="blog/nullor-extension-method" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/null-check-with-extension-methods" b-7fegg1xn3m>Null Check with Extension Methods</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Tuesday, 18 May 2010</time></h4>
                <div b-7fegg1xn3m>An exploration of using C# extension methods to create a more concise and reusable approach to null checking, reducing boilerplate code in method arguments validation.</div>
                <a aria-label="Read &quot;An exploration of using C# extension methods to create a more concise and reusable approach to null checking, reducing boilerplate code in method arguments validation.&quot;" href="blog/null-check-with-extension-methods" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/avoiding-negative-branching-tests" b-7fegg1xn3m>Avoiding Negative Branching Tests</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Monday, 17 May 2010</time></h4>
                <div b-7fegg1xn3m>A discussion on improving code readability by favoring positive conditional logic over negative branching, with practical examples using C# extension methods.</div>
                <a aria-label="Read &quot;A discussion on improving code readability by favoring positive conditional logic over negative branching, with practical examples using C# extension methods.&quot;" href="blog/avoiding-negative-branching-tests" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/cool-feature-of-extension-methods" b-7fegg1xn3m>Cool Feature of Extension Methods</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Sunday, 16 May 2010</time></h4>
                <div b-7fegg1xn3m>An exploration of a lesser-known feature of C# extension methods - their ability to be called on null instances, making them particularly useful for null-checking scenarios.</div>
                <a aria-label="Read &quot;An exploration of a lesser-known feature of C# extension methods - their ability to be called on null instances, making them particularly useful for null-checking scenarios.&quot;" href="blog/cool-feature-of-extension-methods" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/visual-studio-code-snippets" b-7fegg1xn3m>Visual Studio Code Snippets</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Saturday, 15 May 2010</time></h4>
                <div b-7fegg1xn3m>A humorous reflection on discovering Visual Studio's built-in code snippets feature, highlighting its time-saving benefits for developers.</div>
                <a aria-label="Read &quot;A humorous reflection on discovering Visual Studio&#x27;s built-in code snippets feature, highlighting its time-saving benefits for developers.&quot;" href="blog/visual-studio-code-snippets" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/quickly-creating-using-namespace-directives" b-7fegg1xn3m>Quickly Creating Using Namespace Directives</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Friday, 14 May 2010</time></h4>
                <div b-7fegg1xn3m>A discovery of Visual Studio's built-in Ctrl+. shortcut for automatically adding namespace directives, eliminating the need for manual namespace lookups and typing.</div>
                <a aria-label="Read &quot;A discovery of Visual Studio&#x27;s built-in Ctrl&#x2B;. shortcut for automatically adding namespace directives, eliminating the need for manual namespace lookups and typing.&quot;" href="blog/quickly-creating-using-namespace-directives" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/thoughts-on-script-sharp" b-7fegg1xn3m>Thoughts on Script#</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Wednesday, 12 May 2010</time></h4>
                <div b-7fegg1xn3m>A critical perspective on Script#, arguing that compiling C# to JavaScript is reminiscent of WebForms' approach of abstracting away the browser, suggesting more direct solutions instead.</div>
                <a aria-label="Read &quot;A critical perspective on Script#, arguing that compiling C# to JavaScript is reminiscent of WebForms&#x27; approach of abstracting away the browser, suggesting more direct solutions instead.&quot;" href="blog/thoughts-on-script-sharp" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/in-defense-of-blub" b-7fegg1xn3m>In Defense of Blub</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Tuesday, 11 May 2010</time></h4>
                <div b-7fegg1xn3m>A pragmatic perspective on the concept of 'Blub' programming languages, arguing that while not perfect, they often provide the right balance of power and practicality for real-world development.</div>
                <a aria-label="Read &quot;A pragmatic perspective on the concept of &#x27;Blub&#x27; programming languages, arguing that while not perfect, they often provide the right balance of power and practicality for real-world development.&quot;" href="blog/in-defense-of-blub" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/why-enums-suck" b-7fegg1xn3m>Why Enums Suck</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Monday, 10 May 2010</time></h4>
                <div b-7fegg1xn3m>A discussion on why using enums to drive behavior is an anti-pattern, and how object-oriented principles provide a better solution.</div>
                <a aria-label="Read &quot;A discussion on why using enums to drive behavior is an anti-pattern, and how object-oriented principles provide a better solution.&quot;" href="blog/why-enums-suck" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/avoiding-fizzbuzz" b-7fegg1xn3m>Avoiding FizzBuzz</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Sunday, 09 May 2010</time></h4>
                <div b-7fegg1xn3m>A reflection on technical interviews and the value of focusing on deeper discussions rather than basic coding exercises, accompanied by a LINQ-based FizzBuzz implementation.</div>
                <a aria-label="Read &quot;A reflection on technical interviews and the value of focusing on deeper discussions rather than basic coding exercises, accompanied by a LINQ-based FizzBuzz implementation.&quot;" href="blog/avoiding-fizzbuzz" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/fizzbuzz-plus-plus" b-7fegg1xn3m>FizzBuzz&#x2B;&#x2B;</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Sunday, 09 May 2010</time></h4>
                <div b-7fegg1xn3m>An enhanced implementation of the classic FizzBuzz programming exercise, demonstrating more elegant solutions using C# extension methods and functional programming concepts.</div>
                <a aria-label="Read &quot;An enhanced implementation of the classic FizzBuzz programming exercise, demonstrating more elegant solutions using C# extension methods and functional programming concepts.&quot;" href="blog/fizzbuzz-plus-plus" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/ienumerable-each" b-7fegg1xn3m>IEnumerable Each()</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Sunday, 09 May 2010</time></h4>
                <div b-7fegg1xn3m>A simple implementation of an Each() extension method for IEnumerable in C#, discussing its utility and implementation considerations.</div>
                <a aria-label="Read &quot;A simple implementation of an Each() extension method for IEnumerable in C#, discussing its utility and implementation considerations.&quot;" href="blog/ienumerable-each" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/gmails-spam-criteria-is-stringent" b-7fegg1xn3m>Gmail&#x27;s Spam Criteria is Stringent</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Monday, 11 January 2010</time></h4>
                <div b-7fegg1xn3m>A humorous observation of Gmail's aggressive spam filtering, which is so thorough it even flags Gmail's own messages as potential spam.</div>
                <a aria-label="Read &quot;A humorous observation of Gmail&#x27;s aggressive spam filtering, which is so thorough it even flags Gmail&#x27;s own messages as potential spam.&quot;" href="blog/gmails-spam-criteria-is-stringent" b-7fegg1xn3m>Read more →</a></article></li><li b-7fegg1xn3m><article b-7fegg1xn3m><h3 b-7fegg1xn3m><a href="blog/tekpub-rocks" b-7fegg1xn3m>TekPub Rocks!</a></h3>
                <h4 class="subheader" b-7fegg1xn3m><time b-7fegg1xn3m>Sunday, 10 January 2010</time></h4>
                <div b-7fegg1xn3m>A personal testimonial about the effectiveness of TekPub's video tutorials in deepening understanding of familiar technologies like jQuery, LINQ, and MVC.</div>
                <a aria-label="Read &quot;A personal testimonial about the effectiveness of TekPub&#x27;s video tutorials in deepening understanding of familiar technologies like jQuery, LINQ, and MVC.&quot;" href="blog/tekpub-rocks" b-7fegg1xn3m>Read more →</a></article></li></ul>
        <blazor-focus-on-navigate selector="h1"></blazor-focus-on-navigate>
        <aside><section id="contact"><ul><li><a href="/about" aria-label="About page"><span class="fa fa-3x fa-envelope"></span>
                            <span>About</span>
                            <small>/about</small></a></li>
                    <li><a href="https://www.linkedin.com/in/kijanawoodard" target="_blank" aria-label="Visit Kijana Woodard's LinkedIn profile"><span class="fa fa-3x fa-linkedin"></span>
                            <span>LinkedIn</span>
                            <small>linkedin.com/in/kijanawoodard</small></a></li>
                    <li><a href="https://github.com/kijanawoodard" target="_blank" aria-label="Visit Kijana Woodard's GitHub profile"><span class="fa fa-3x fa-github"></span>
                            <span>GitHub</span>
                            <small>github.com/kijanawoodard</small></a></li>
                    <li><a href="https://plus.google.com/100680108589078267321/" target="_blank" aria-label="Visit Kijana Woodard's Google Plus profile"><span class="fa fa-3x fa-google-plus-official"></span>
                            <span>Google+</span>
                            <small>plus.google.com/kijanawoodard</small></a></li>
                    <li><a href="https://twitter.com/kijanawoodard" target="_blank" aria-label="Visit Kijana Woodard's Twitter profile"><span class="fa fa-3x fa-twitter"></span>
                            <span>Twitter</span>
                            <small>twitter.com/kijanawoodard</small></a></li>
                    <li><a href="https://www.facebook.com/kijanawoodard" target="_blank" aria-label="Visit Kijana Woodard's Facebook profile"><span class="fa fa-3x fa-facebook"></span>
                            <span>Facebook</span>
                            <small>facebook.com/kijanawoodard</small></a></li>
                    <li><a href="https://feeds.feedburner.com/kijanawoodard" target="_blank" aria-label="Subscribe to Kijana Woodard's blog feed"><span class="fa fa-3x fa-rss"></span>
                            <span>Atom Feed</span>
                            <small>feeds.feedburner.com/kijanawoodard</small></a></li></ul></section></aside>
        <hr>
        <footer><p><span class="copyright">&#xA9; Kijana Woodard 2010 - 2025</span>
                <br>
                <span>Version 1.0.0.0 - 12/17/2025 21:36:36</span></p></footer></div><!-- Cloudflare Pages Analytics --><script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "3c7d0f5e24584738a25659dbc91bebff"}'></script><!-- Cloudflare Pages Analytics --></body></html>