Don't Ignore Your Functions

Ignoring return values can often be dangerous in subtle ways but you may be so used to doing it that you don't even notice anymore. It's likely that at some point you have run into an issue caused by forgetting to use the return value of a function. It's even more likely you…

Type-Safe Hypermedia Controls

Hypermedia Controls in REST provide links and actions with each response pointing to related resources. This concept is a powerful tool that enables the server to remain in control of links and access. If you're not sure what I mean by this, take a moment to read my previous…

Practical Hypermedia Controls

A lot has been written about REST but less so when it comes to Hypermedia Controls. I haven't seen too many Hypermedia based APIs out in the wild. I theorize that there are two main reasons for this. First, it is something many people haven't been exposed to, and second, it…

Power Query - The M Language

Recently I had the opportunity to write a Custom Connector for Power BI and come across something I didn't expect. To build a Connector you use Power Query also known as the M formula language. Power Query was designed to build data transformation pipelines, focusing on…

Environment Settings for Build Once Packages in React

Let's look at some questions: How do you specify which API to use for an environment? How do you configure the environment settings of frontend apps for each environment? How to you achieve: build once, deploy everywhere packages for a frontend app? Most frontend applications…

Practising Continuous Deployment

I've long been an advocate of Continuous Deployment, but it's always felt somewhat out of reach. I've come close with projects that have had decent test coverage and automated deployments, but there was always something missing. There was always still a button you needed to click…

How to run Expecto with dotnet test

Expecto is a fantastic test framework and test runner for FSharp. But contrary to the name, the thing I like most about Expecto is that it contains so little magic. Your test project is a simple Console applications and to run you tests you just run the app. No Visual Studio…

Reliable Messaging over a Service Bus

When working with a traditional database inside of a monolith application, we don't usually need to think too much about how transactions work. We can rely on a transaction to either roll back all the changes or commit them. Either way, our model is always consistent. More…

Why you need Reliable Messaging

You might have heard the phrase "there's no such thing as reliable messaging". It's an interesting statement, but aside from being completely untrue, the statement is also entirely unhelpful. What you can't have is "completely reliable messaging", but the real question is how…

Automatic ModelState Validation for ASP.NET Core

Model State Validation for a JSON API isn't too hard because you only need to send back validation errors, especially with the attribute. However, for all those that are still using server-side rendering and Razor, it's still a bit challenging. It's challenging because you need…