Archives
All the articles I've archived.
Creating A User Readable Timestamp From Cosmos DB _ts Using SQL Query
Convert Cosmos DB's Unix _ts timestamp into a readable date and time using a SQL query.
Prompt To Benchmark: C# Benchmarking Via GitHub Agent Running .NET In The Cloud
A reusable prompt for a GitHub coding agent to create and run C# BenchmarkDotNet benchmarks in the cloud.
Making Friends with Reviews: Providing Great Feedback
A conference talk and summary on providing kind, useful code reviews and actionable feedback.
Return 408 Request Timeout For a Regex Timeout Using ASP.NET Core Middleware
Catch `RegexMatchTimeoutException` in ASP.NET Core middleware and convert an otherwise unhandled failure into HTTP 408.
Comparing Template Versions For Azure Resource Manager (ARM), Bicep, or Terraform Using Azure
Compare Azure resource schemas when updating API versions in ARM, Bicep, or Terraform configurations.
C# List<T> Add Method Missing Items When Count Inspected When Adding Items In An Async Task
Why concurrent List<T>.Add calls can lose items, and when a concurrent collection can help.
C# Tasks Unexpectedly Running More Than Once (Async Lambda IEnumerable<Task> With foreach Loop)
Why enumerating a deferred IEnumerable<Task> more than once can unexpectedly run asynchronous work again.
Operating A Wi-Fi Enabled Robot Vacuum / Mop During A Home Internet Outage Using A Smartphone Hotspot
Clone your home Wi-Fi’s SSID, password, and band on a phone hotspot so the cleaner reconnects during an outage.
Previewing DACPAC Deployments By Generating Deployment Reports And Scripts
Use SqlPackage or DacServices to inspect proposed database changes as XML or T-SQL before deployment.
DACPAC Deployments Can Delete/Drop Indexes Not In DACPAC By Default
Understand how DACPAC deployment defaults can drop indexes that are not included in the DACPAC.
Leniently Parse Comma Separated Configuration Values Using C#
Parse comma-separated configuration values while tolerating spaces, empty entries, and missing values in C#.
Azure Key Vault: Certificate "Download in PFX/PEM format" Not Available
Enable Azure Key Vault certificate downloads in PFX/PEM format with the necessary secret permissions.
Using Different Email Addresses For Git Commits For Azure DevOps And GitHub
Automatically choose Git commit email addresses for Azure DevOps and GitHub using conditional configuration.
Lessons Learned Implementing a Must Succeed Durable Functions Workflow
Lessons on failure handling, recovery, and instrumentation for a must-succeed Durable Functions workflow.
Setting Regex Timeout Globally Using .NET 6.0 With C#
Set a global regular expression timeout in .NET 6.0 and understand its scope and behavior.
Retrieving ObjectIds In An Azure Active Directory Group Using Azure CLI
Use `az ad group member list` and JMESPath queries to return member details as a table or comma-separated object IDs.
Naming Durable Functions With Prefixes For Application Insights Filtering
Prevent orchestration telemetry from skewing user-facing performance metrics by filtering prefixed operation names in Application Insights.
Retrieving All Managed Identity ObjectIds In Resource Group For Azure App Services And Azure Functions Using Azure CLI
Query resources with non-null identities and format their principal IDs as a table or comma-separated list.
Thoughts On Debugging Durable Functions Extension Orchestrations For Azure Functions Backed By Azure Table Storage
Debug Durable Functions orchestrations backed by Azure Table Storage using instance IDs, tooling, and logging.
Running Code On Local Computer / Localhost Only Using Azure Functions With C#
Use AZURE_FUNCTIONS_ENVIRONMENT to run development-only code in Azure Functions with C#.
Debugging Fan-Out Operation Failures With Custom Exception Messages Using Durable Functions Extension For Azure Functions On C#
Improve Durable Functions fan-out debugging with exception messages that identify failing HTTP operations.
Avoid Exposing Status Uri From Durable Functions Extension For Azure Functions To Untrusted Parties (It Contains A Secret Key!)
Avoid exposing Durable Functions status URLs containing secret keys, and rotate keys if they are exposed.
IDisposable, IAsyncDisposable, and Tasks: Dispose Behavior With Tasks In C#
Explore IDisposable and IAsyncDisposable behavior when working with tasks in C#.
Retrieving Managed Identity Access Tokens For Azure Web Apps Using PowerShell Console
Use `MSI_ENDPOINT` and `MSI_SECRET` in Kudu’s PowerShell console to request a token for an Azure resource.
Prevent Duplicate Invocations of Durable Functions Using Azure Functions With C#
Check in-flight Durable Functions orchestrations before starting a potentially duplicate operation.
Get Basic Information For Azure AD Object Ids Using PowerShell
Use `Get-AzureADObjectByObjectId` to identify one or several objects without first knowing their entity types.
Reverting Azure ARM Template Changes Using Change History And Manual ARM Deployment
Recover an earlier Azure resource configuration using change history and a manual ARM deployment.
SQL ADO.NET Scaler And Reader Sync vs Async Benchmarks Using BenchmarkDotNet, LocalDB, And C#
Compare synchronous and asynchronous ADO.NET scalar and reader operations with BenchmarkDotNet and LocalDB.
Monitoring Web Application Deployment Impact Using Artillery
Use Artillery to send requests during a web application deployment and observe its impact.
Dynamic Parameterized SQL Using ADO.NET With C#
Build dynamic parameterized SQL queries using ADO.NET and C#, including a complete SQLite example.
Limiting Concurrent Operations With SemaphoreSlim Using C#
Limit concurrent operations with SemaphoreSlim while maintaining throughput in C#.
Thread Safe Lazy Initialization Using C# Notes
Notes on Lazy<T>, thread-safety modes, and exception behavior in C#.
Troubleshooting Private NuGet Packages With dotnet CLI
Troubleshoot private NuGet package sources and credentials when using the dotnet CLI.
Keyboard Shortcuts For Efficient Visual Studio 2019 Testing
Use Visual Studio 2019 keyboard shortcuts to run and debug tests more efficiently.
Using BenchmarkDotNet with Azure Functions
Launch the local Functions host during benchmark setup, exercise endpoints with HttpClient, and stop it during cleanup.
Peas&Carrots: The Importance Of Url Encoding Query String Parameters
Avoid broken query strings by URL-encoding parameter values containing characters such as ampersands.
Coding To Support Both .NET Full Framework and Modern .NET
Support .NET Full Framework and modern .NET with conditional code paths and package references.
Quickstart for Creating a Library Using the .NET CLI
Scaffold a .NET library, solution, and xUnit test project using the dotnet CLI.
Using SQL Server LocalDB with Travis CI Windows Builds
Install SQL Server LocalDB with Chocolatey for Travis CI Windows builds.
Using JavaScript Promises And async/await Together
See how promises and async-function results can both be consumed with either `.then()` or `await`.
A Minimal UI Visual Studio Code Configuration
Reduce Visual Studio Code interface distractions with a minimal settings configuration.
A Complete Protractor Travis CI Solution for Angular E2E Testing
Configure Protractor and Travis CI for Angular end-to-end testing and continuous integration.
Providing Outdated Browser Notifications Using Angular
Notify users of outdated browsers without depending on an Angular application successfully loading.
Resolving Blacklisted RxJS Import TSLint Error
Resolve blacklisted RxJS imports in TSLint by importing individual submodules and operators.
TypeScript Constructor Assignment: public and private Keywords
Use TypeScript constructor parameter properties to declare and assign public or private fields concisely.
Run Custom Functionality When Angular Http Errors Occur
Subclass Angular Http and register a factory provider to intercept failed requests while preserving observable errors.
Comparing Angular NgModule and TestBed Side by Side
Compare Angular NgModule configuration with TestBed.configureTestingModule side by side.
2016: Personal Highlights
Highlights from 2016, including a Microsoft MVP award and speaking at NDC Oslo.
Subscribing to Browser Title Changes Using Angular
Create a subscribable Angular title service to keep an in-page heading in sync with the browser title.
Angular 2 MockBackend Service Testing Template Using TestBed
Test Angular 2 services with TestBed and MockBackend without making real HTTP requests.
Angular 2 Services Testing Template
A simple template for testing Angular 2 services, with optional real HTTP calls.
Angular 2 Component Testing Template Using TestBed
A reusable TestBed template for testing Angular 2 components.
100% Code Coverage Doesn't Mean It Works
Why executing every line of code is not the same as testing that the code works correctly.
Comparing Classes: C# 6, ES6/ES2015 JavaScript, and TypeScript
See equivalent `Person` classes in C# 6, JavaScript, and TypeScript, including constructors, properties, and computed names.
We Replaced a Multi-Application Home-Grown Authentication System
Lessons from replacing a home-grown authentication system, with an NDC Oslo talk recording.
TypeScript: Where's My C# Style Object Initializers?
Explore object initialization in TypeScript compared with C# object initializers.
TypeScript: Missing Properties When Using Type Assertions
Why TypeScript type assertions do not create missing properties or behave like C# casts.
Lindt Dark Chocolate Percentage EXCELLENCE Bars: Nutrition Comparison
Compare the nutrition of Lindt EXCELLENCE dark chocolate bars with 70%, 85%, 90%, and 99% cocoa.
Can We Make Some Changes First? Pull Requesting a GitHub Pull Request
Help a contributor by submitting a pull request to their pull request branch before merging.
GitHub Issues: Let's Take Action
Take action on accumulated issues to keep your team's work tracking useful and manageable.
Copying App Settings and Connection Strings Between Azure Web Apps
Replace portal copy-and-paste with Azure Web App Configuration Copier when moving settings and connection strings between apps.
2015: A Personal Recap
A look back at 2015, including conference speaking, music, and personal accomplishments.
Violin Backed by Gibber
Create a live-coded backing track with Gibber for a violin performance, with video and JavaScript code.
Microsoft Windows: Update Chocolatey, Atom, npm, and RubyGems packages cmd Script
A Windows command script to update Chocolatey, Atom, npm, and RubyGems packages.
IEMs and Headphones for Developer Use
Consider isolation, comfort, convenience, safety, and sound quality when choosing headphones for development.
Integrating Google Chrome With KeePass Using chromeIPass and KeePassHttp
Install KeePassHttp and chromeIPass, then pair the Chrome extension with KeePass for browser credential access.
Once Per Test Run: Using the Azure Storage Emulator with xUnit.net v2
Use xUnit.net v2 collection fixtures to start and stop the Azure Storage Emulator once per test run.
Starting, Stopping, and Clearing the Azure Storage Emulator in C#
Control the Azure Storage Emulator from C# for local development with blobs, tables, and queues.
Displaying DateTime in Browser Time Zone in ASP.NET Razor Views
Display dates in the browser's time zone in ASP.NET Razor views using RimDev.AspNetBrowserLocale.
Sending Silverpop Transact XML Messages with C#
Use the Silverpop .NET API wrapper to send personalized transactional messages asynchronously without handling raw XML.
Trimming Down the Visual Studio 2013 UI
Simplify the Visual Studio 2013 interface with settings changes and a downloadable editor configuration.
2014: A Personal Recap
Personal highlights from 2014, including public speaking, blogging, and open source contributions.
Exporting All Tickets from Zendesk
Export all Zendesk tickets, including archived tickets, for historical reporting.
Scary Words in Programming: Eventual Consistency
An introduction to eventual consistency and what it means for distributed applications.
Tips for the Aspiring or First Time Technical Speaker
Practical advice on rehearsing, demos, equipment, and enjoying your first technical speaking engagement.
Quickstart for Contributing to a GitHub Repository with a Development Branch
Fork, clone, and contribute to a GitHub repository that uses a development branch instead of its default branch.
Build and Deploy Node.js With Travis CI and Heroku
Configure Travis CI to build a Node.js application and deploy successful builds to Heroku.
Refactor and Test jQuery/JS Code
Refactor unstructured jQuery code into testable JavaScript with a clear separation of responsibilities.