Richard Banks' Blog

Software Development and Agility

Reignite your desire to improve

NDC Sydney, 2018 is on as I write this and yesterday I gave a talk titled “Reigniting your desire to improve” I’ve embedded the slides here for you, and I’ll do the same for the video once it’s available. Here’s the abstract for the talk: “We’re doing pretty well. There’s not much to improve on” #sigh... Read more

DDD: Entity Framework and the Memento Pattern

I worked with a team using Domain Driven Design recently that wanted to use Entity Framework Core (EF Core) for persistence and wanted to ensure that EF concepts didn’t leak into their core domain logic. The first approach was to use mapping code in the infrastructure layer (repositories) to convert between domain entities and EF entities;... Read more

How to debug a .NET Core app in Docker with VSCode

Let’s assume: that you’re building an ASP.NET Core web application you want to deploy and debug this in a Linux container some of your team use Visual Studio 2017+ on Windows others want to use Visual Studio Code on Mac the entire application is more than just a single web app in a container. You use... Read more

A simpler git status

Following on from my last git related post about reviewing pull requests I thought I’d quickly let you know of an approach I use when checking the status of my local git repo. Here’s your typical, lengthy, verbose output from git status λ git status On branch master Your branch is up to date with 'origin/master'.... Read more

Reviewing VSTS pull requests locally

Many teams review their pull requests (PRs) by looking at the code in the PR branch. This can be risky at times because it assumes that the source branch has pulled the most recent copy of the target branch (typically master) into it. In an active team you’ll often find many PRs being approved in quick... Read more

Using docker to avoid installing cli utilities

With Docker, and containers in general, becoming more and more prevalent I’m finding there’s no longer a compelling reason to install command line utilities anymore. Instead, I now look for docker images containing a CLI utility I want to use, and I simply pull that image locally and run a container for it instead. Why? A... Read more

The challenges of being a solo developer in a small community

I delivered a talk about on technical debt at NDC Sydney yesterday. In it I talk about the problem with bad code is not the code itself, it’s us. The people who create it. I also talk about the fact that we need others around us to help us spot the problems we don’t see, and... Read more

Fixing a raised trackpad on a Dell XPS 15 (9550)

–UPDATE, Oct 18th, 2017– Dell have just started a free battery replacement program for affected laptops. Check the Dell Product Bulletin page and enter your service tag number to see if you can get a free replacement. If you wish to replace the battery yourself, this post will show you how. I’ve had a Dell XPS... Read more

How to connect to a Windows SQL Server running in Docker

This is just a quick one and if it helps you, that’s great! I was asked for a little help in connecting to SQL Server running in a Docker windows container on Windows 10. Here’s the steps. Note: I’m assuming you already have Docker for Windows installed and have switched to Windows Server containers. Pull the... Read more

Ignite Australia - Technical Debt Prevention Clinic

Last week I was at Microsoft’s Ignite Australia conference where I presented three different talks. This talk is on technical debt, what it is, and what it isn’t and ways you can both reduce and prevent it. This was a fun talk and was well received by the audience. I hope that comes across in the... Read more

Ignite Australia - Microservices, Docker, Linux, Windows, .NET. Oh my!

Last week I was at Microsoft’s Ignite Australia conference where I presented three different talks. This talk is about Docker and the various things you might want to think about, including the differences between Windows and Linux containers, orchestration engines, dockerising an existing .NET app, debugging an app running in a container, and more. Slides are... Read more

Ignite Australia - CQRS Secrets

Last week I was at Microsoft’s Ignite Australia conference where I presented three different talks. This talk is on the CQRS design pattern and delves into what the pattern is all about, how it can help you with scale and performance, and why concerns such as eventual consistency and event sourcing are separate from, but associated... Read more

How to Remote Debug a .NET App in a Windows Docker Container

Let’s say you’ve moved a .NET Framework app into a Docker container running on Windows (not .NET Core). It’s running but you’ve noticed a bug you’ve not seen before. You can’t replicate it on your machine so it must be something in the container. Here’s how to debug it. Step 1 - Install the remote debug... Read more

Docker for Windows and Windows Containers

Great news! The latest docker for windows application now supports switching between the linux and windows daemons! This means you can run and manage Windows Containers and Linux containers from the same client on Windows 10 and Windows Server 2016. If you want to try this out for yourself, you’ll need the following: The Docker for... Read more

Lessons from the Australian Census

If you live in Australia, I probably don’t need to provide any background on the problems with the 2016 Australian Census system. Even if you live outside the country you might have heard about the issues we experienced; it certainly got enough coverage. In case you haven’t seen it, or have forgotten, the Australian Bureau of... Read more

Jekyll on Bash on Ubuntu on Windows

After more than 10 years I’ve decided to move my blog. I’ve been using Blogger for all that time but over recent years it feels like Blogger has fallen in to disuse and neglect, while other platforms have arisen and seem to work wonderfully well. The main reason for not moving has been inertia. Plain and... Read more

CQRS and What It Means for Your Architecture

I just gave a presentation on CQRS (Command Query Responsibility Separation) at the Sydney Alt.Net group and have uploaded the slides to SlideShare for you to have a look at.Overall, it's a pretty simple pattern, but also one that can be quite powerful. It can also be the launching point for getting into Domain Driven Design... Read more

Architecting Microservices in .NET at DDD Sydney, 2016

I've just finished delivering my Microservices talk at DDD Sydney and promised the folks a few links so they could look back on things and get some ideas for their own projects.Before that, a big thanks to everyone in the audience who came along and asked questions. We covered a lot of ground in a short... Read more

Some upcoming events

(Wow, it's been a while since I posted - sorry, all!)In case you aren't aware, there's a few developer events coming up that I'm involved in that I thought you might like to know about.DDD Sydney - May 28th'll be talking about Architecting Microservices in .NET.  Should be fun :-)Agile 2016 - July 25th -29th'm co-chairing... Read more

Stop Using Assert.Throws in Your BDD Unit Tests

I’m sure we’ve all seen the Assert.Throws assertion in test code by now, but just in case you haven’t, here's a simple example:[Test]public void InsertTestNameHere(){ var input = "a string"; Assert.Throws<FormatException>(() => int.Parse(input));}If we consider this from an Arrange-Act-Assert (AAA) perspective it’s pretty easy to see that the Act and Assert logic are in a single... Read more