Dan Schnau's Blog

2025

Artificial Intelligence Predictions for 2026
11/16/2025 · 3 min read

My prediction for AI in 2026 is that it's just gonna keep growing. I don't think it's some kind of bubble. Some of the things people are trying with LLMs...

Gradual Migration: Moving from MVC to Blazor Without Breaking Everything
3/26/2025 · 3 min read

Introduction: Why Migrate to Blazor? Blazor brings the power of modern web development to .NET developers, enabling rich interactivity using just C#. But most existing enterprise applications still rely on...

Execute on a simple idea: building LinkDisguiser.com
3/26/2025 · 3 min read

Introduction LinkDisguiser.com is a project I built to explore the capabilities of Azure Table Storage while solving a practical problem—creating a scalable and cost-efficient way to manage and disguise links....

Link Shortening with LinkDisguiser.com and lkdr.xyz
3/25/2025 · 1 min read

LinkDisguiser.com has been updated to improve link shortening. The service now uses lkdr.xyz to generate shorter links that are easy to share. What's New? Shorter Links: The new domain, lkdr.xyz...

How to hide warnings in the dotnet cli
2/17/2025 · 1 min read

To hide warnings with the dotnet cli in commands such as dotnet build or dotnet test - you have to pass a flag to the underlying msbuild system. dotnet build...

2024

Table Capture: A Very Good Browser Extension
11/19/2024 · 1 min read

Today I wanted to find a way to extract data from my banking portals faster. Usually, I use the "export to csv" feature, then manually copy/paste that csv data into...

How to Add a Blazor Server App to an ASP.NET Model/Controller Web API
11/6/2024 · 6 min read

Blazor is a modern framework for building web applications with C#/.NET. Blazor apps can run "anywhere" in a variety of rendering modes. Blazor supports building pre-rendered static sites, server rendered...

LinkDisguiser.com, BlankWallpaper.com, and TopTechSites.com
11/1/2024 · 2 min read

A while back I went domain name shopping and picked up a few cool sounding domains. Using Azure Static Webapps, I built sites for each. Each site is in "alpha"...

Walkthrough: Deploy a Blazor WASM app running on a Free Azure Static Webapp instance
5/21/2024 · 2 min read

Azure Static Web Apps are one of my new favorite things. Azure static apps are essentially static file servers - there's no compute resources available on them. They're optimized to...

Will Blazor Replace MVC? Exploring the Future of Web Development
5/16/2024 · 3 min read

Will Blazor Replace MVC? Blazor and MVC are two distinct technologies in the realm of web development, each with its own set of advantages and use cases. Let's delve into...

There really isn't much use in doubting yourself at work.
3/8/2024 · 1 min read

There really isn't much use in doubting yourself at work.

Eloquent JavaScript is a good book
3/7/2024 · 1 min read

I learned from Hacker News today that Eloquent Javascript is now in it's 4th edition . About ten years ago, I read this book and worked through every exercise in...

FunctionInputConverterException: Azure Functions in .NET dotnet-isolated process get a FunctionContext rather than an ExecutionContext
1/25/2024 · 1 min read

When you upgrade an Azure Function to .NET 8 dotnet-isolated model, the Webjobs namespace goes away, and gets replaced by the Microsoft.Azure.Functions.Worker namespace. In the Webjobs namespace, there is a...

Azure Functions Error Debug: Running processor on exception: '/' is invalid after a value. Expected either ',', '}', or ']'
1/24/2024 · 1 min read

As it turns out, Azure Functions might not like "comments" in your host.json , and it will fail awkwardly. "version": "2.0", "functions": [ "myfunc" //"myotherfunc" <--- THIS WILL BREAK THE...

Use Azure DevOps CLI to Navigate Directly To A Pipeline
1/23/2024 · 1 min read

Using the Azure Devops Extension to to the Azure CLI , you can navigate directly to pipelines in your browser without having to click through the Azure Devops UI. Windows...

Handling HTTP 409 Errors editing files in Azure App Service Editor
1/15/2024 · 1 min read

I was getting HTTP 409 errors when editing an Azure Function app, I couldn't understand why. A Bing search led to this blog post from Chaminda Chandrasekara which helped me...

Generate an IEnumerable<int> of a given size, going half "Down", half "Up"
1/10/2024 · 1 min read

I sometimes want to generate a list of numbers going "up" and "down" from a given number (usually, the ID of an entry in a database). Sometimes I've done this...

PWAs Seem Really Good
1/8/2024 · 1 min read

This site was at the front of Hacker News this morning: https://whatpwacando.today/ . I think it's rad how much can be built that runs "natively" from a browser. I'd like...

2023

Experimenting with performances gains from Blazor WASM AOT Compilation 2.0
12/22/2023 · 1 min read

In my previous post I had left open a problem of a 100ms delay that forced the screen to repaint. I've been working out what is required to make sure...

Experimenting with performances gains from Blazor WASM AOT Compilation
12/17/2023 · 2 min read

It would appear that AOT compilation gets substantial performance improvements in client-side application performance. I put together a tech demo running Blazor client side WASM. The code for the main...

This Blog Is Migrated to Blazor Static Server Side Rendering
12/15/2023 · 1 min read

I'm excited to share that https://danschnau.com is now hosted with Blazor Static Server side rendering. Because this site is not a particularly complicated app, it didn't take too much to...

"Getting Started With Blazor" at Michigan DevFest 2023
12/3/2023 · 3 min read

Not long after I was laid off , I signed up to give a tech talk at Michigan DevFest 2023 , a tech conference in downtown Detroit. I expected that...

Installing a GraphQL Service on dan schnau dot com
10/20/2023 · 2 min read

As part of an upcoming project, I'll be working with GraphQL. So before starting, I decided to set up a GraphQL API on danschnau.com first. To accomplish this, I installed...

Upload and render image in Blazor WASM client-side application
10/7/2023 · 1 min read

Here's some sample code for a blazor client-side component that allows uploading and rending an image. The cool thing about this is that it all happens client-side and allows working...

How To Add Controllers To A Blazor Server App
9/26/2023 · 1 min read

Update November 2024 I wrote a much more detailed post about this subject here: https://danschnau.com/blog/how_to_add_a_Blazor_Server_App_to_an_ASPNET_Controller_Web_API I spun up a new Blazor Server App and wanted to add an API controller,...

A List Of Free Programming Challenges You Can Take On Today To Develop Your Skills
9/25/2023 · 2 min read

I Know How To Code But I Don't Know What To Code With some extra time on my hands these days I am looking for things to code. I notice...

Use A RegEx to get the Word Count out of a string in JavaScript
9/25/2023 · 1 min read

I added a 'word count' feature to my blog editor this morning. This is the regular expression to match spaces and line breaks: /\s/ And in JavaScript: const count =...

Will Blazor Replace MVC?
9/23/2023 · 3 min read

Blazor will not simply replace MVC. Blazor is a new technology with its own advantages and disadvantages, while MVC is a tried-and-true technology for building web applications with ASP.NET. Is...

Learn SQL In One Day: The Fastest SQL Bootcamp In History
9/22/2023 · 5 min read

Here we go. I'm going to explain SQL in one sitting. I'm writing this without doing any research, just from my own experience, so do check the facts yourself, and...

Syntax to Sawdust: Lessons from Middle School Woodshop
9/20/2023 · 3 min read

My fiancé's job is to provide middle schoolers with hacksaws, orbital sanders, drill presses, solvents, paints, and lumber, and then guide them in the safe usage of these tools and...

Work Is A Gas
9/15/2023 · 2 min read

During the postwar expansion of the United Kingdom, a Naval Historian wrote about a phenomenon that explained why governments move at a glacial pace and at the same time, why...

Localhost doesn't need to die, except maybe with venture capital
9/14/2023 · 4 min read

This post is a response to Lucas F. Costa's blog "Localhost will inevitably die" , which I enjoyed. I don't think localhost has to inevitably die, and I think it's...

Time is of the Essence: Crafting an Image Management Solution in One Hour
9/12/2023 · 2 min read

Today I put together an image management solution for Dan Schnau dot com in about an hour. Before today, my image management workflow was as follows: Add the image to...

A Simple Application of OAuth: Mastodon's API
9/8/2023 · 3 min read

A User Story : As Dan Schnau, When I publish a new article on Dan Schnau Dot Com, I want a 'toot' with the title and a link to the...

I have been laid off.
9/4/2023 · 1 min read

I have been laid off from my job. I learned that unexpectedly getting laid off from your job feels a lot like a relationship ending. I experienced a lot of...

Intermittent SSL errors pushing and pulling code
5/30/2023 · 2 min read

For about a year, I've had a problem where git push and git pull from dev.azure.com would intermittently fail with an error like this: ~#@❯ git pull ❮  fatal:...

The Magic P Words
5/5/2023 · 1 min read

When I offer my kids advice, I'm really just giving myself advice. Here are the "Magic P Words" I use. Planning I think I offer this Magic P word to...

I Got an Invitiation to The AI-Powered Microsoft Designer. It's Rad.
4/21/2023 · 1 min read

I got an invitation to Microsoft Designer, an AI-Powered design tool . I tried it out by sampling some save-the-date invitations. The results are really cool. From a simple prompt,...

.NET 8 Preview 3: Simplified Output Path format for Builds
4/20/2023 · 3 min read

If you're like me, you're used to finding your .NET build artifacts in /bin and /obj directories inside your source projects. It's been this way my whole career. In .NET...

Identity Protocol improvements in ASP.NET Core 8
4/10/2023 · 2 min read

Last week, Jeremy Likness discussed improvements to Authentication and Identity features in ASP.NET Core 8 . I wanted to try some of it out, so I first went to install...

Authentication vs Authorization
4/10/2023 · 2 min read

Authentication and Authorization (AuthN and AuthZ) are terms that refer to discrete, specific concepts that can easily be confused. Authentication is the process of proving that someone is who they...

I asked ChatGPT to write 500 words about the software industry.
3/31/2023 · 3 min read

As an AI language model, it is difficult for me to express opinions or personal bias since my responses are generated entirely based on statistical patterns from the dataset I...

Rules for Overcoming Worry
1/25/2023 · 2 min read

A few years ago I visited a used book store in Seattle . It had several cats hanging around with the customers, which was pretty cool. I found a copy...

Good Software Engineers are Business Analysts Too
1/20/2023 · 1 min read

Good software engineers have to understand the business they're working in. If they don't, they're at the mercy of business analysts and project managers to explain what to do. Some...

ChatGPT Is at the Peak of the Hype Cycle
1/19/2023 · 1 min read

ChatGPT is at the peak of the hype cycle.

2022

Yes, let's deploy to production.
12/18/2022 · 1 min read

A friend (a geniuine friend, who I truly respect, both personally and professionally) shared this video with me the other day. The video is pretty funny. But it touches on...

Find your Application Insights node from the Instrumentation Key with Azure CLI
11/30/2022 · 1 min read

I had an instrumentation key but I didn't know what instance of application insights telemetry was getting pumped into. After some fiddling I got a one-line command in Azure CLI...

You'll Never Do Agile Right
11/23/2022 · 2 min read

In the article for Agile Software Development , there are six thousand, eight hundred words and over 100 references. The Agile Mainfesto is 73 words. Gobs and gobs of software...

INVEST in Good User Stories
4/20/2022 · 2 min read

Software isn't always complicated. But when you work on big, complicated software, with lots of people, it does get complicated. It's easy to get stuck in the mud with big...

2021

I Went to a Mental Health Hospital
7/3/2021 · 1 min read

Shortly after I wrote the "Suicidal Ideation" post, I had a really really bad day. I had told my therapist that I was thinking about suicide. I had told my...

Two Rules of Thumb for Day-Job Programming
6/24/2021 · 1 min read

Rule #1: Never commit code you haven't run at least once , no matter how small or simple. Rule #2: Have a plan, and execute that plan, for verifying changes...

npm errors with node-sass, node-sass deprecated, drop-in replacement available
6/23/2021 · 1 min read

The node-sass npm package has given me problems on various projects at various companies over the years. It's a js wrapper around a python implementation of Sass, a CSS pre-processor....

Truthiness and Falsiness in JavaScript
4/13/2021 · 1 min read

JavaScript has ‘truthiness’ and ‘falsiness’. Things that are “falsey”: null undefined false 0 Things that are “truthy” function() {} '' (empty string) 'any other string' true 1 (or any number,...

Suicidal Ideation
2/23/2021 · 1 min read

This is not a cry for help. I’m getting help and I’ve been getting help. I have a depressive mind. When I woke up last Saturday, horrible thoughts were gnawing...

The Relationship Between Docker and Kubernetes
1/28/2021 · 1 min read

I’m learning container tech on the fly at work. This is how I understand the relationship between Docker and Kubernetes. If I’m wrong, or learn more, I’ll write an update...

How To Reference and Focus a DOM Element from Blazor Component Code-Behind
1/23/2021 · 1 min read

The Direcive Attribute @ref can be used to refer to a specific DOM element. There’s also a convenience method FocusAsync for focusing an input element . In my Blazor Markup:...

How To Move Blazor Component Code into a Code Behind
1/23/2021 · 1 min read

Here’s the steps to getting a Blazor Component’s code out of a @Code block and into it’s own file. It doesn’t take much to make a one-file blazor component hard...

10 Years as an Impostor
1/23/2021 · 1 min read

For me, this February will mark 10 years of collecting a steady paycheck in software engineering working on “boring business software”. I’m in my 30s. I have a four-year degree...

2020

I set up a Pi-Hole because of the Pandemic
5/29/2020 · 2 min read

Because of the pandemic, my sons have been using laptops a lot for gaming during the day. Their machines don''t have adblockers. I figured this was a good time to...

Discovering nuget.exe Versions with tools.json
4/13/2020 · 1 min read

While updating my build failed with an upgrade from ASP.NET Core from 2.2 to 3.1. I was using Azure DevOps for my build. I was getting a funny error: ##[error]The...

Implementing Single-User Administrator Authorization with Azure AD in ASP.Net Core 3.1
4/12/2020 · 3 min read

Until now, this blog was entirely a read-only site. Content is stored in a database, and the app reads from that DB, but there was no code for writing to...

Running NUnit 2 Tests in Visual Studio 2019
1/2/2020 · 1 min read

I encountered an issue the other day where I was unable to run unit tests in the Visual Studio 2019 Test Explorer. The tests would just show up as 'skipped'...

2019

Promise.all()
8/17/2019 · 1 min read

In JavaScript, you can use Promise.all() if you need to wait for a few promises to complete before moving forward in a routine. var p1 = getData(); // getData returns...

An Atom feed on DanSchnau dot com
7/29/2019 · 1 min read

As of yesterday this blog supports syndication by Atom feed. You can use this link to connect the feed to a reader . I took joy in writing the code...

How to Change which Identity Visual Studio uses to Authenticate with Azure
7/21/2019 · 1 min read

I was developing an app locally on a different laptop than usual. When it started it would fall over returning 502 errors. I saw in Visual Studio's debug output this...

Working Remote is Awesome
7/10/2019 · 4 min read

This March I began a new job at SkyKick . SkyKick is a world-class startup and I couldn't be more excited to be a part of their team, and that's...

Google shouldn't Be A Verb
4/2/2019 · 1 min read

"Google" is a company built on a search engine. It isn't a verb. In 1998 Larry Page wrote in an email "Have fun and keep googling!". It is the first...

LocalStorage, The unary operator and strict equality in JavaScript
3/16/2019 · 1 min read

My stance on JavaScript strict vs. type-converting comparison (double vs. triple-equals) is to always use strict equality. But the other day this tripped me up. I had a number stored...

gotcha: Compiler error CS0656 when using Dynamics in a .NET Standard project
2/24/2019 · 1 min read

This afternoon I'm experimenting with Dapper , a micro-ORM used by Stack Overflow. The most straightforward way to query with dapper is to get a list of Dynamic objects. But...

Four Pillars Of Object Oriented Programming
2/9/2019 · 2 min read

Or: "Four Strategies you can apply to work effectively with an Object Oriented Programming Language" Abstraction Encapsulation Inheritance Polymorphism When I was in college, and for my first few years...

Back to top