Renaming Streams in Event Store

I have recently been working with Event Store (GES) on a project and had the need to rename some of my streams. I performed this operation using the native projections built into GES which made it a fairly simple operation; I read all events within a given category of streams and then emitted these into a stream with the new name.

Event Storming Workshop Review

Yesterday we had our first Event Storming workshop with the team at the office and I wanted to write up some of my thoughts and opinions on how it went. I ran a “big picture” session within a two hour time box in order to trial Event Storming within the business; the plan was that we would focus on events and hot spots only in order to fit within the time box. Overall I felt like it all went smoothly and everyone agreed that it was valuable.

Practical SOLID

SOLID is an acronym for five basic principles of object-oriented design which are intended to serve as guidelines for improving the quality of object-oriented codebases. The relevancy of SOLID seems to be the subject of much discussion these days; I’m of the opinion that the general principles are relevant but that discussions around the meaning of and the attempted adherence to the SOLID principles has become somewhat philosophical. I prefer a more practical view of SOLID which I hope to share in this article.

Deploying to Azure Using Kudu

At work we have been integrating our deployment process into our TeamCity builds; our applications are built as regular web projects running on Azure. We want to avoid the lock in of using Azure projects so we can’t make use of the deployment options around that and we don’t want to use Web Deploy because it is a bit meh. After a bit of googling we found the Kudu API which made this really easy to implement our deployments using PowerShell.

Generic Repository and the Specification Pattern

A few years back I wrote an article titled “Data Access Using a Generic Repository in C#” which since it was published has been by far the most popular article on my blog. This is somewhat frustrating given that the approach I described in that article (and repositories in general - but that’s a different article) is something I disagree with now. In this article I’m going to share a generic repository implementation which makes use of the “specification pattern” to perform queries against an Entity Framework context.

Integrating Fluent Validation with Web API using Autofac

Fluent Validation is an excellent open source library for implementing validation of models in a flexible and powerful way. It also provides support for integrating with model state in ASP.NET MVC and Web API and will set the ModelState.IsValid property in controllers based on the rules defined in the projects validators making validation checks in web projects simple and straight forward.

The Basics of Writing OWIN Middleware

OWIN (Open Web Interface for .NET) is an open source initiative to define the specification of an interface between .NET web applications and servers; it aims to enable web applications to become decoupled from IIS by removing the dependency on the System.Web assembly. With OWIN, you can write “middleware” to hook into the request pipeline which is what this article will be focusing on.

Goodbye Wordpress, hello Jekyll!

Ever since I started blogging back in 2009 I’ve always run it on Wordpress. I always found Wordpress to be okay but was never fully satisifed with it. It felt a bit like overkill for what I needed and the writing experience was forever frustrating me. Recently I decided to look into alternatives that would be much lighter weight and simpler to manage than Wordpress; I settled on Jekyll.

Binding and formatting dates using Knockout and Moment JS

This article is the fourth in a series of working with KnockoutJS and ASP.NET MVC. This article is not strictly about using KnockoutJS with ASP.NET MVC but will show how to create a simple custom binding handler to bind and format date values to HTML elements using Moment JS. As usual, this article will build on the code from the previous articles in the series: