Nathan Cooper Software Engineer Expert in C# and .NET
9 SEP 2020

Using parameterized migrations with SimpleMigrator

How to pass parameters to your Migration Classes

26 APR 2020

Temporal Tables Part 4: Bend time

The temporal tables we've been using have been 'system-period temporal tables'. Which means that all the times are based on the time of the database system when the rows are updated. But it's also possible to use custom times.

26 APR 2020

Temporal Tables Part 3: Querying

How query the history saved in your temporal tables

25 APR 2020

Temporal Tables Part 2: Setup Database and Create Tables

How to setup temporal tables in PostgresSQL

25 APR 2020

Temporal Tables Part 1: What is a temporal table?

What is a temporal table and why would you use one?

12 APR 2020

Why is a SQL DELETE statement locking the entire table?

And why do I keep seeing 'DELETE TOP 4000 FROM'? A quick summary of lock escalation in SQL Server

6 MAR 2020

How to implement a Unit of Work pattern

A Unit of Work pattern for repositories using ambient context

22 FEB 2020

Exponential Back-off: Don't DOS yourself!

Make sure to back off requests when your upstream infrastructure is struggling

20 DEC 2019

Number of features is the new lines of code

It's pretty much universal knowledge that lines of code is a bad measure of productivity. But what about number of features?

20 DEC 2019

Is Pivotal Tracker right? Should bugs go un-estimated?

If you've ever used Pivotal Tracker you'll have noticed bug estimation is off by default. Why is that? And is it the right thing to do: should bugs be estimated or not?

24 SEP 2019

Redirect Crawlers away from your IIS hosted webpage

Then a link to a website is posted somewhere like Facebook, Twitter or Slack, a crawler will follow that link. That's how Facebook, for example, grab titles, descriptions and images from their links. If you want them to stop following your links, or show them alternative content, here's how.

21 SEP 2019

Formalising experiments for better continuous improvement

Having a culture of continuous improvement means you are constantly experimenting with your processes. A regular retrospective meeting is an important part of that. It's an opportunity for the team to inspect themselves and create a plan for improvements. In these meetings the team decide on 'Action points': things that individuals or the team as a whole need to do. But we took it a step further and started conducting defined and formalised experiments. Let's see how our experiment-experiment went.

21 SEP 2019

Code I wrote: Easy shutdown detection for Azure WebJobs

I've created a library that provides shutdown detection for Azure WebJobs. It's both for continuous services and finite duration method calls. The Azure WebJob SDK can do that already, but this was created to be a 'lighter' dependency and to be less opinionated on how WebJobs are written.

28 JUL 2019

You shouldn't *need* your CI server to deploy your code

Don't get tricked by tutorials. You should be able to deploy code from your machine

25 JUN 2019

Code I wrote: Alias Model Binder and Delimiting Query String Value Provider

I've created two utilities for asp.net core: 1) a model binder for allowing alternative property names on request models. 2) a value provider allowing alternative collection query variable syntax

4 APR 2019

Code I wrote: Creating reproducible C++ build environments with Docker

I quick overview of a really interesting series of Microsoft blog posts, and the application I built following them

4 JAN 2019

The Power of Positive Thinking (and why it actually sucks)

'Don't bring me problems, bring me solutions'... On the surface this sounds great, empowering even, but, as we'll see, this isn't a great idea.

22 DEC 2018

Keeping availability high in distributed systems

How much like the Titanic is your microservice architecture? How tightly bound is the success of your entire systems to the stablity of it's individual components? Is there a risk that your new microservices might be destroying your availability?

21 DEC 2018

Should you code in your spare time?

Is the only way to become a 'great programmer' to spend a lot of your spare time coding? Is that even the best way?

23 OCT 2017

How to use Octopus substitute variables in JavaScript files

How to use the Octopus variable replace feature in directly in your javascript code

26 SEP 2017

How to validate min and max in your Angular form

So the `min` and `max` constraints on number field in your template based form aren't working? Here's the code to fix that

21 SEP 2017

How to create responsive iframe content

If your site is going to embedded in another one using an iframe, here's how to make that responsive and easy

24 FEB 2017

How to serve 3rd Party Images as Secure Content

I've built a site that's served over https, calling ASP.NET WebApi also over https, but contains images that are on plain old http. I trust these image locations, and just want to proxy them. This is kind of a wierd thing to want to do, but if this ever happens to you, here's how to do it.

11 JUL 2016

How to build your own event logging

Let's make our logging structured

8 JUL 2016

Deleting Entity Framework Orphans and Domain Events in Entity Framework 6

One of the 'missing features' of Entity Framework 6 is properly dealing with the removal of entities from collections. Let's add orphaned entity removal to our EF project.

8 JUL 2016

Using properly encapsulated collections in Entity Framework 6

This is the pattern I use when writing classes with Collections in Entity Framework 6 (EF). If your EF entities need to be proper domain objects with proper encapsulation, rather than just lightweight data objects, you need to arrange a bit of special magic to make that work.

8 JUL 2016

How to pass domain errors into your model state

Pass your domain errors to your caller without boilerplate

8 JUL 2016

How to progressively enhance a non-Javascript website

I want to improve my website's experience for users with JavaScript, whilst keeping solid non-JavaScript functionality. Remember when you couldn't count on Javascript being there? No, me neither. But not every device is a laptop or modern mobile phone, so let's check this out

4 MAY 2016

Using git locally, even if you're stuck on a TFS project

I gave a 15 minute talk about git-tfs and how it enables you to do that

29 SEP 2015

Engineering Chaos

This is a indispensable piece of advice: “The best way to avoid failure is to fail constantly”