Peter Goodman bio photo

Peter Goodman

A software engineer and leader living in Auckland building products and teams. Originally from Derry, Ireland.

Twitter Google+ LinkedIn Github

All Posts

2024

Guardrails: Unlocking Autonomy through clarity and good leadership principles

I thought I would take a break from my series on Incident Response to talk about something that I wrote for a previou...

Incident Response Part 4: SitReps (Situation Reports)

Other parts of this series on Incident Response: So you need an on-call team Severity Levels Incident Response Rol...

Incident Response Part 3: Roles

Other parts of this series on Incident Response: So you need an on-call team Severity Levels Incident Response Rol...

Incident Response Part 2: Severity Levels

Other parts of this series on Incident Response: So you need an on-call team Severity Levels (this article) Incide...

2023

Incident Response Part 1: So you need an on-call team

Other parts of this series on Incident Response: So you need an on-call team (this article) Severity Levels Incide...

Stop chasing consensus, start building momentum and farming for dissent

In the early days of a close-knit team of similarly experienced people you have this amazing ability to make decision...

Zero Trust Authenticating Reverse Proxies in AWS Application Load Balancers

Traditional VPNs have been the goto solution for many companies when considering how best to secure access to their i...

Lines of Communication and Lines of Enquiry in Incident Response

Over the last decade or more I’ve been involved in a lot of incident response activity and subsequent post-mortems or...

2022

Small Pull Requests and Batch Size

One of the things I find most interesting about my role these days is that I get to talk with such a wide variety of ...

2020

This is my picture: Why you should be drawing your systems and code

How inclusive is the culture of architecture and design within your teams? Is the way you communicate these designs a...

2018

Better Octopus Registration

We use Octopus Deploy for a lot of our deployments. It has great primitives that help us create simple, reliable, rep...

Measuring and Improving your CI/CD Pipelines

Over the last 4 years I’ve often found myself in conversations with fellow engineers about our build and deployment p...

Concourse on AWS: Worker lifecycle management

Lately we’ve been running Concourse CI for a bunch of our builds. We really love Concourse for the pipeline features,...

2016

Getting Packer to work for Windows on AWS

Getting a Packer build to work with the AWS EBS builder is pretty easy. Getting it to work for Windows can be a serie...

Slides from my talk at codemania

Speaking at codemania.io was one of the scariest and most awesome experiences of my career to date.The concept of the...

2015

Slides from 'Devops for the .Net developer'

On February 19th I gave a talk at the Auckland.Net meetup titled “Devops for the .Net Developer”. The idea of this ta...

Tips and tricks for integrating GitHub + TeamCity

For a while now I’ve been using the GitHub + TeamCity + Slack combination and I though it would be useful to write do...

2014

TeamCity Slack Build Notifier

We have become immense fans of Slack in our office, as have lot of people I know in the software development industry...

A simple project dependency viewer

Recently I faced an issue trying to get my head around a large codebase consisting of multiple solutions and many man...

Moved blog to GitHub Pages and Jekyll

Like most of the bloggers on the internet these days I’ve moved my blog off wordpress and onto GitHub pages using Jek...

2013

Introducing mmbot, a C# Hubot port

I’ve been playing recently with github’s Hubot chat bot, written in Coffee script on Node. I wanted to connect it to ...

Making the SysTray transparent on Windows Phone

I’ve used a semi-transparent AppBar on windows phone a number of times to get the visual effect I wanted and to stop ...

XAML surround templates for Resharper

Lately I’ve been more active than usual about extolling the virtues of Jetbrains Resharper. Despite the recent additi...

Fibre driven development

So, I’ve been a bit quiet recently. There’s been no blogging and even my twitter activity has dwindled of late so wha...

Nokia 920 vs HTC 8x

TLDR; The Nokia has a much better, brighter screen which means easier typing, much better camera, twice the storage b...

Pipelining a query provider onto Linq to Objects

Recently I’ve seen a few problems occur in our codebase that made me think, there must be an obvious solution to this...

Reactive Extensions in Message Processing

I’ve had a few occasions recently to use Reactive Extensions in production for message processing. Once you finally b...

2012

My experience submitting an app to the Windows Store

I thought I should document the experience I have had in getting an app submitted to the Windows Store. I guess this ...

Creating an NHibernate OData service using ASP.Net Web API Fall Update

NHibernate Query Service OverviewThe Fall Update to ASP.Net Web API re-implements the OData support from the bet...

Creating an Autocomplete search box for Windows Store apps in XAML

I’ve modified the code from my previous post on creating an AutoComplete search box using Reactive Extensions to work...

Windows 8 app updates stuck on Pending

I had an issue today where Windows 8 App updates were stuck on “Pending” status. This was for the Microsoft apps like...

Nice overview of Pushqa from Bart de Smet

Bart de Smet of Rx fame talks about Pushqa in his latest channel 9 instalment on RX2. If you’re not familiar with Bar...

Slides and code for an “Introduction to Rx”

You can get the slides and code for my recent talk on an “Introduction to Reactive Extensions” at github on the link ...

Action Filter to support oData expands as EF includes in ASP.Net Web API

Back in March I wrote a quick howto on supporting $expand for entities in ASP.Net Web API. That method used an extens...

OData V3 any/all support

WCF Data Services 5 has been RTM’d and adds support for a whole bunch of scenarios:Any/All Actions Collections Named ...

Assembly File Locking when using AppDomains in a Visual Studio package

Recently I was using a new AppDomain from within a Visual Studio package to reflect over a dll and get some metadata....

Introducing Pushqa–Queryable Push Messages over OData

Pushqa is a smarter pub/sub model, allowing the subscriber to use LINQ to declare the messages they want to receive.B...

Supporting oData expands for EF includes in ASP.Net Web API

Hold Up!!! Please see the updated (and much nicer) implementation using an ActionFilter.Following on from my previous...

Creating a .Net queryable client for ASP.Net Web API oData services

TL;DR: How to create a client Linq api for querying IQueryable ASP.Net Web API rest services in very few lines of cod...

C# Static Field Initializers

I hit a problem recently where a singleton I was calling from an assembly resolver was throwing an exception. It turn...

2011

Building an Auto Complete control with Reactive Extensions (Rx)

I have been meaning to get into Rx for a while now and haven’t quite found the excuse or opportunity to do so. While ...

More efficient file enumeration in .Net 4

This may be basics to some people but I thought it was worth mentioning. I was writing some simple code recently to c...

Arghhh! Simultaneous Connection Limit in IIS (Windows 7)

I’ve been playing with SignalR recently and it drives me nuts that I can’t have more than a few simultaneous long pol...

Macros getting dropped in Visual Studio v.Next (Dev 11)

Looks like Macros are getting dropped in the next version of Visual Studio. Makes sense but I guess I’ll have to move...

Workflow Service Tracking Viewer

If you are working with Workflow Services (.xamlx) and you want an easy way to see live tracking from your workflow y...

Help make Workflow Foundation better

Ron Jacobs and the workflow team are looking for feedback and ideas for WF vNext. Help make it better by adding your ...

Slides and Code for Visual Studio eXtensibility, DSL and T4

Here are the slides and the code for the talk on VSX, DSLs and T4 that I did in the North Shore and Auckland .Net Use...

Responding to WF completion using the Creation Context

This is the fourth post in a series on building an Enterprise Workflow system using WF4. Previously we looked at the ...

Starting WF Instances using the Creation Endpoint

This post is the third in a series on building an Enterprise Workflow System using WF4. Previously we discussed how t...

Hosting an Activity as a Service using the WorkflowServiceHostFactory

This is the second post in a series about Building an Enterprise Workflow system with WF4.In the previous post we dis...

Speaking at North Shore .Net Users Group

I’m giving a talk on Thursday 15th September at the North Shore .Net users group in Auckland on Visual Studio Extensi...

Activities vs WF Services: In search of the ideal authoring experience

This is the first post in a series about Building an Enterprise Workflow system with WF4. Hosting our WorkflowsWh...

Building an Enterprise Workflow system with WF4

Recently Stef and I presented the session “Hardcore Workflow” at Tech-Ed New Zealand in which I gave a demo of how to...

Code and slides for TechEd NZ 2011–DEV 404 Hardcore Workflow

Below are the slides and the code for the talk Stef and I did at Teched NZ 2011. I hope to do a post in the future ex...

Speaking at Tech-Ed NZ 2011 tomorrow

Stef and I are presenting the 5:45 slot tomorrow in the Marlborough room at Tech Ed NZ. The subject of the talk is Ha...

Getting Entity Framework and MySQL to play nice on my Hosting Provider

After moving my blog to wordpress, I decided to update the recent posts section on my main site to point to the wordp...

Workflow Designer attributes, IRegisterMetadata and derived properties

If you are using the IRegisterMetadata type combined with the *.Design.dll deployment method for your custom WF4 acti...

2010

Moved blog to Wordpress

I've decided. to move my blog implementation to wordpress. Subtext just doesn't seem as mature anymor...

Slides and Code for Practical Workflow Services

I’ve attached the slides and code for the Practical Workflow Services talk I gave last night to the North Shore .Net ...

Speaking at North Shore .Net Users Group

I’ll be speaking at the North Shore .Net users group on 18th November details below.Workflow ServicesThis talk will f...

Tech Ed NZ sessions now online

You can now watch the Tech-Ed NZ talks Stef and I did on Workflow and AppFabric on the msteched websiteGetting Starte...

Code and slides for Dev208 at Tech Ed NZ

Here are the slides and demos for the Tech Ed NZ talk Stef and I did on Intro to Workflow 4. It includes the Approval...

Workflow 4: Human based workflows with an Email Approval Sample

One of the questions that a lot of people ask about workflow 4 is how to integrate manual tasks into the workflow pro...

Unit Testing Workflow 4 Activities : The TestContext Tracking Participant

I’m a big believer in using TestContext in MSTest or Console.WriteLine, Debug.WriteLine etc in your favourite Unit Te...

Unit Testing Workflow 4 Activities : Basics

Unit testing workflows became a lot easier in WF4. The basic approach is the same as for normal code classes except f...

Unit Test Workflow 4 Activities : Dependency Injection

At first glance unit testing workflow activities with dependency injection seems like a no-brainer. For example consi...

WF4 Services Part 2 – Correlation

Continuing on from Part 1 now we are going to add the Calculation operations to our stateful workflow service. First ...

WF4 Services Part 1–The simple WF Service

I thought I’d do a series of posts on workflow services. There are plenty of resources out there already on how to bu...

Hello again

So, I’ve been pretty bad at updating my blog recently, and answering comments / deleting spam.I’ve been spending most...

2009

Using JSON.Net to eval json into a dynamic variable in C#

So I thought this would be possible and finally decided to give it a shot in 2010 Beta 2. It turns a bunch of JSON in...

Unit Testing Visual Studio DSL Tools

I’ve been meaning to post this entry for a while now so while I wait for a 2010 beta install to complete…. For a long...

Don’t try to explain geek jokes to your partner

 I tried to explain the humour in this joke to my girlfriend. I was laughing too hard at the time, partly at the jok...

Shizxaml – Silverlight’s old codename?

According to Mike Harsh in his Mix talk on Silverlight 3.0 – Out of Browser, before silverlight was WPF/E, internally...

WCF Collections with Payload via Surrogates

Previously I posted about the problem with WCF and collection which have a payload in them. I came across this proble...

DataContractJsonSerializer and DateTime values

In using the DataContractJsonSerializer beware of DateTime instances which have been instantiated as non-UTC. If you ...

MS-Test DeploymentItem Attribute……..Aaaaaaaagh!

We have a policy of using MS-Test, although that is overdue for a serious review.So it turns out you can use the depl...

2008

Preview Handlers for Vista and Outlook 2007

Really useful for those xml files that people send you.Download the MSDN Magazine Preview Handlers and then setup the...

C# var – with great power comes great responsibility

There are many heated discussions on the overuse of var and I'm not going to repeat the arguments here. Personally, I...

DSL Tools in Visual Studio 2010

Stuart Kent has blogged about the new features they are planning for DSL Tools in the Visual Studio 2010 timeframe. O...

T4 Editor update from Clarius coming soon

Just after I'd gone and mentioned that the T4 editor from Clarius Consulting doesn't give you intellisense, Victor Ga...

WCF Exceptions and Fault Contracts

I ran across an issue recently trying to get a custom exception across a WCF boundary. The trouble is, WCF does not l...

T4 Templating in C#3.0 / .Net 3.5 and its uses in DSL development

Cut to the chaseOK. So you just want to know how to do it? Modify your template directives to the following.<#@ te...

What is a comfortable office temperature?

Its 27 degrees Celsius today in our office and it feels like an oven. One of the guys has hooked up a digital multi-m...

NHibernate – Custom User Types and Collections

NHibernate is an extremely powerful ORM but sometimes its quite difficult to find information on how to do certain th...

2007

Concatenating Delimited Strings with Generic Delegates

I knew this must be possible through generic delegates and eventually found this really useful post by Phil Haack whi...

Windows Live Writer

Finally the latest version of windows live writer seems to work with my blogging engine. Seems they have made some up...

Visual Studio 2008 RTM'd

....and commence downloading.http://weblogs.asp.net/scottgu/archive/2007/11/19/visual-studio-2008-and-net-3-5-release...

TFS: Work Item Search

I've been using this plugin now for the past few months. You would not believe the difference it makes.This plugin pu...

HeadMelter of the week – Self-Constrained Generic Base Classes

Melted my own brain for a few hours with this one today. Essentially a self-constrained generic base class looks like...

WCF: Custom Collections with Extra Payload

I came across a pretty annoying problem to solve in WCF today. Suppose you have a custom collection of items you wish...

Visual Studio Unit Test and the evil vsmdi

During a recent project we found a recurring problem where the test view of the unit (& integration) test project...

Useful macro for creating Visual Studio 2005 dependent (nested) items

Check out this useful macro for visual studio 2005 dependent (nested) items. Useful for breaking up large classes int...

I am 70% Optimus Prime....oh yes

I AM70%OPTIMUS PRIMETake the Transformers QuizOptimus Prime is the heroic leader of the Autobots. He is the personifi...

Visual Studio 2008 Beta 2 Released

First impressions are really good. The install went fine on a dual core laptop in parallel with VS 2005 already insta...

WPF Routed Commands

Working in WPF, it's not very long before you come across Routed Commands. The idea of allowing events to bubble and ...

Re-Throwing Exceptions

I was going over some old code recently to try to resolve a production issue. The log of the stack trace was not prov...

Creating a custom AJAX control – DateTimePicker

Lately I decided to see how easy was to create AJAX custom controls specifically using the included javascript librar...

Microsoft announces Silverlight

Microsoft have just announced Silverlight, the new branding for what was previously known as WPF/E. They've also prov...

Response.Redirect and the ThreadAbortException

A colleague came across a problem recently where performance counters were showing a high exception to request ratio....

Enterprise Library 3.0 Released – with some really nice features

The Microsoft Patterns and Practices team have just released Enterprise Library 3.0 - April 2007. This is the full RT...

TeamPlain for TFS now available free

Due to the acquisition of DevBiz by Microsoft, their really cool TeamPlain web user interface for everything Team Fou...

Expression Web now available on MSDN subscriptions

Microsoft have finally listened to all the developers (who are also designers) rightfully throwing our toys out of ou...

My Blog

I'm starting this blog to keep track of technical work. My name is Peter Goodman, currently living in Edinburgh and w...