Multi-Touch Music Catalogue — Part 1: Getting Started

Multi-Touch Music Catalogue — Part 1: Getting Started

Towards the end of 2011 I went to a talk on multi-touch in .NET at NxtGenUG Birmingham, by Guy Smith Ferrier. This was my first experience of multi-touch and I was amazed at how ready the technology was for developers. Basically, it’s here — go use it, get stuck in, have some fun.

As a treat I bought myself a multi-touch capable monitor, the Dell SX2210T for Christmas. Early this year I was then looking for a multi-touch book. Guy Smith Ferrier kindly pointed me towards Josh Blake’s Natural User Interfaces in .NET early access edition –which I’ve made good progress with and highly recommend.

So now I’m at a stage where I want to develop an application and see what damage I can do with the multi-touch API’s available to me. As it happens, I also want to learn Git and play with a new agile ‘project management’ toy SpecLog. So I had an idea — I’ll create a multi-touch music catalogue using all of these tools — sweet!

To get data into my application I’ll be using the 7Digital API. In a simple spike project I found it really easy to work with; the documentation is great; and I got a riposte to a query on the mailing list. Also, if it’s good enough for Spotify and the BlackBerry Music App, it should (just about) meet my exquisite demands. As a side-benefit, I’ll have a nice .NET API that wraps their API which may be of use to others.

While creating the application I’ll be blogging about what I’ve learnt from the tools I’m using and decisions I’ve made with my application. I’ll also be welcoming of any comments, criticisms and suggestions about absolutely anything – usability (especially NUI), coding style, architecture, testing, specs, go crazy folks.Creating my GitHub Repository

My first task was to create an empty solution and get it hosted on GitHub. This actually took me about an hour or two. But that was because I did plenty of research, and I’m glad I did — everything has run smoothly since then.

Initially I followed the getting started advice on GitHub and read the first two chapters of the recommended reading. I followed that up by downloading two tools: one that makes working with git on Windows easy; and one for Visual Studio integration. I have to thank Krzystof Kozmic for making me aware of these tools in this blog post.

Now my application has a permanent home on GitHub. Here is the repository if you want to check out current progress.Capturing my Requirements with SpecLog

For almost a year now I’ve been using SpecFlow to create executable specifications on some of my projects. Check out my “BDD” blog posts if you’d like to see how I have used (and abused) SpecFlow.

The guys at TechTalk who created SpecFlow have now created SpecLog which they say is ‘designed for managing requirements in agile projects’. On their website you can see some clips that show you how to use it — personally I think they are very impressive — but I haven’t used many tools of this nature — so take my opinions for what they are worth.

For my Multi-Touch Music Catalogue, I used SpecLog to plan 7 iterations (which will probably change). Doing this I was able to relate user stories to business goals — and then link user stories to the feature files I had created in my Visual Studio solution. With this done I can associate information with user stories like comments and images — obviously more useful in a multi-developer production environment.

I have found SpecLog to be very friendly. Some of the windows are a little small, but apart from that it has good usability and is notably easy on the eye.

Above is a screenshot of my requirements for iteration 1 – totally related to the business goal of allowing users to search for songs. The graphical relationship between business goals and user stories is a nice touch – and psychologically this kind of diagram is almost proven to help you understand the information it represents.

I have only written the user stories for the first few iterations, the rest are just business goals that I will flesh out later or change as my ideas for the application do. In an ‘enterprise’ environment, you would probably lay out all the stories on your main work space and then devise your exact iterations at the start of the project (I would guess).

In the above screenshot, you can see the details for a particular user story — note how I’ve linked it to a feature file in the solution and it has imported that feature file. I can see the obvious benefit here of non-developers, clients maybe, using SpecLog to keep tabs on what the developers are working on and the project’s progress.

The “Add criterion” button allows comments and images to be associated with this file, which again seems to be a nice touch (but I haven’t trialled in a production environment).

If you want to have a look at my SpecLog repository and see exactly what I’ve been upto, you can get it from my GitHub page  and open with SpecLog which you can download here.Plan

My plan for the application is quite simple, and fits with my reasons for creating the application. Iteration 1 is all about getting some basic functionality. Iteration 2 is then going crazy with multi-touch features (such as multiple layout options) which is the main reason I am creating the application. Although every iteration may include multi-touch improvements, iteration 2 is a pure multi-touch R & D experience.

Following iterations then add more functionality up to the point where you can purchase songs — although making profit it not the goal. But if I’m in a position where people want to use this application to purchase songs, then I’ll be happy to let them — the 7Digital API is fully supportive of this. Personally, I’d be content knowing that people just want to use the application (it’s not a load of pants basically).Conclusion

Exciting times are ahead due to this project which epitomises why I love software development — there are always new tools and technologies, and so many options that let you be creative and imaginative. At the same time you get some nice object-oriented challenges to sink your teeth into (in this case creating the service that will communicate with the 7Digital API).

It would be great if you could contribute and share your opinions.