Monday, 28 March 2016

The NDC Experience

Back in January, I was lucky enough to go to NDC in London.

This was a great experience, and one that I would recommend to any of my colleagues. So, to give them an idea of what it was all about, I gave a presentation on it. This presentation, including a Q&A session, lasted for 45mins, and was designed to pass on what I learned from going to NDC. It wasn't recorded, but I'm happy to share the slideshow (link below).

It was also a nice opportunity to use Prezi

Tuesday, 6 October 2015

Send me a picture, so I can remember


Sprint retrospectives are important. This may sound like I'm stating the obvious but please make sure that you have concise retrospectives.

The big benefits of a good retrospective include
  • Getting honest feedback on the progress of your project. 
  • Gauging the teams mental state. 
  • Strengthening relationships between the team members (after all, we are in this together).
If you are organising the retrospective, your biggest job is to help people to give open feedback. You can do this by creating an environment in which they are comfortable and giving them tasks that help elicit the information as opposed to directly asking for feedback on the sprint.

The following exercise describes one of the methods for garnering feedback.

Postcards from the Sprint

  • Before the retrospective
    1. Get (or make*) some postcards. Try to use a wide selection of destinations, 10 postcards of the east coast is not a good selection. 
    2. Get (or make**) some tokens. Make sure that these are easily identifiable (eg. Monopoly pieces).
  • In the Retrospective
    1. Ask all member of the retrospective to choose a token.
    2. Spread out the post cards on a flat surface.
    3. Ask the members of the retrospective to place their token onto the postcard that they 'feel' represents the sprint that we have just completed.
          - Wait for everyone to place their token - 
    4. Choose a token (not a person***) and ask who that token belongs to. Ask that person to describe in what way they feel that that postcard represented the sprint.
    5. Remember to say thank you. 

Why is this a good exercise

  • The postcards act as a starting point, whether that it is an association to the place, geography or a metaphor, the person is grounded by the selected image and merely needs describe a context.
  • Everyone gets to express an uninterrupted opinion and comment on the sprint.
  • The tokens are ambiguous, and therefore the running order is random.
  • Members choices are 'locked in' so there is no playing follow the leader when they are expressing their feeling.

Retrospectives should not feel like a chore and it is not a cull-able step in the process. So keeping people engaged at this stage is important. we've managed it all sprint and by Jove we'll keep them engaged in the retrospectives too!!

* How to make a postcard: Find a royalty free picture, resize it, print it, cut it out, laminate it.
** How to make a token: (see 'How to make a postcard' above).
*** Not a person: We want to disassociate any feeling of singling out, identifying or alienating individuals when eliciting unbiased feedback, hence the tokens.

Saturday, 27 June 2015

When is a valid win32 application, not a valid win32 application

What happened

Recently I've needed to upgrade an application to use 4.0.3 of the .Net Framework. The upshot of this was that the application was no longer XP compatible.

Not a valid win32 application

This was un-expected, there isn't a compatibility issue with XP and this version of the framework. However, upon inspection, the compiler had marked the application as being for Vista OS onwards. Explicitly set this to XP and the application is once more a valid win32 application.


This is how it was done.

  1. We inspected the application.exe header using dumpbin. This is a Visual Studio command line utility.
  2. Here we could see that it was targeting /subsystemversion 6.00 which is Vista, considering the change we made, this is neither desired or required. Ideally we would ask the compiler to mark this correctly for us, but msBuild doesn't expose this switch. So instead we would need to change this post compilation.
  3. So we added a build step to adjust this flag after compilation. For this we used editbin. Another Visual Studio command line utility. To set the

    editbin.exe "$(TargetPath)" /SUBSYSTEM:WINDOWS,5.01 /OSVERSION:5.1

You can use DUMPBIN to examine COFF object files, standard libraries of COFF objects, executable files, and dynamic-link libraries (DLLs). You can start this tool only from the Visual Studio command prompt. You cannot start it from a system command prompt or from File Explorer.

You can use EDITBIN to modify object files, executable files, and dynamic-link libraries (DLL). You can start this tool only from the Visual Studio command prompt. You cannot start it from a system command prompt or from File Explorer.

Specifies the minimum version of the subsystem on which the generated executable file can run, thereby determining the versions of Windows on which the executable file can run.
Specifies the execution environment that's required by the executable image.


Monday, 18 May 2015

Setting up

Whether you are setting up a development workstation or swapping jobs, you probably want to make sure that you have all of the gadgets and utilities that make your work life easier which may not be on the default machine image supplied to you.

That is where posts like this come in. You'll find that most development blogs will have a post of this nature, where the author lists some of the cheap or free productivity tools that they have found useful.

Here is my list.

It's like notepad but better; tabs, tab persistence between sessions, find in all tabs, and that's just the tabs!! You can even define your own language syntax to create custom document highlighting (if you want).

Resolve sharing violations by removing a troublesome lock that another process has on that file. For example: "Hmm, I can't delete this folder, and even though nothing and no-one should be using it." - Unlocker to the rescue, albeit a dangerous and crude one. If this sounds abhorrent, try investigating the issue using ProcessExplorer (mentioned later in this post).


Okay so you'll have this one already, but non-web-devs often forget about it. Press F12 when you are using your web browser and you'll find a whole range of tools here for the web developer. From performance monitoring to browser emulation, JavaScript debugging and CSS editing. There are so many useful items in here that people often neglect.

Provides a GUI for Windows Installer packages. Not only does this tool highlight validation issues, it also allows you to edit and save the new package.

This tool will parse your Windows Installer log files to help you identify issues with the installation and suggest solutions. It beats the hell out of searching for 'Return Value 3'

A lightweight XAML WYSIWYG editor. Keep things simple.

Compresses to 7z, TAR, ZIP and more, Extracts from 7z, TAR, ZIPm RAR and many more. If you've never tried it, run a comparison between the compression ratio of 7z compared to ZIP, you'll be pleasantly surprised,

This is a great productivity tool. It'll be interesting to see how quickly the new .net compiler helps the Visual Studio community close the gap, but at the moment you'll want to be using this plugin.

Decompile dot Net assemblies to C#. Sometimes we all get a little bit nosey.

Historically the Microsoft Windows search isn't very good, but this flexible tool will quickly search for files matching your search pattern.

Another from BareMetal Software, this time a log file parser. This tool will show log entries in real time, highlighting different types of entries based on keywords.

ASoft - DotNetVersion
An easy way to find out what versions of .net are being used on a client machine. The beauty of this tool is that the clean interface means that any tom, dick or harry can use it and even download missing versions directly.

An easy to use file and folder differencing tool. Run a comparison against up to three directories for differences or missing artefacts. Drill into files to analyse the differences.

Find out about a process currently running on your system. Target processes with the cross-hair or search the running processes to find out the ID of your target process, and what resources they are using on you current system. If you didn't like the Unlocker utility, mentioned above, you may prefer this tool as a means for finding what process has a lock on your file.

Create and manage powershell scripts

And if that list has whet your appetite; checkout Scott Hanselman's list, it's much better than this one :)

All items listed are downloaded and used at your own risk. I have not been involved in the creation or hosting of any of these utilities and cannot make any guarantees over there safety. Please review all terms and conditions on the named applications and licensing before installing.

Thursday, 7 May 2015

Sorry about that...

I decided to change employers, which has kept me a little bit busy.
Now that is done, and I'm settled in, I'll continue blogging.

ps. If you're voting today, vote for the good guys.

Monday, 6 April 2015

It's a wonderful life

Reflection is important in many aspects of life. When we complete a project, when a new year begins and when we unwind with friends and colleagues. We reflect on events as a means to make sense of them, learn from them and move on from them.

As software engineers we are conscious of reflection as part of the Application Lifecycle Management process, and I thought that I would take this opportunity to reflect on my life as a software engineer.

The advice that I received from my parents before I went to college and university was: "You'll be working for a long time, make sure that you do something that you enjoy". This advice stayed with me. There where times when it seemed like it was bad advice, but I can look back over the last 15 years and say that I enjoy what I do as much as ever.

I'm a practical and creative person, and I have at my finger tips the means to create anything that I could want, Applications, Games, Data Visualization. I share these interests with friends and colleagues that make me want to be more than I am. And although a lot of my friends don't actually understand what I do and don't see what could be enjoyable in it, that's okay, 'not everyone's like you'*.

I chose to do what I enjoy, and I enjoy what I do. And on reflection, It's a wonderful life.

At DDDNorth with some likeminded people.

* 'In the mood for love' -

Sunday, 29 March 2015

From Meetings to Success

It can be all too easy for a projects user stories to be copied and pasted directly from the annotated minutes of a meeting where 'stuff' was discussed and declared. These stories tend towards suggested implementation. When this happens, the odds are that the structure (and requirements) will not be clear.

Pragmatic analysis and Clarity are key to Success.

When pulling stories from meeting minutes you'll end up with the flattening out of data producing spaghetti requirements, leading to spaghetti code. Based on the muddy stories, a hotch potch of testing will be produced, proving a risk to the  successful delivery of items buried (or missed) in the documentation.

Lets make the change.

Consider the following structre when writing user stories:
A User Story should be designed as follows:
As a …
I want …
So that …
This describes the need of the change.
These stories can then have Acceptance Tests in the form of:
Given …
When …
Then …
This describes the behaviour of the change.
Once we understand the behavioural change required, then we can work out what tasks are required to make the behavioural change. Once all of these tasks are completed then the Acceptance Tests should pass, the story will be resolved and importantly, all of that stuff that was declared in the meeting can be put to bed.

A successful meeting leading to a successful implementation.