hack 24 logo

This Spring, on the 2nd and 3rd of May, 7digital are proudly sponsoring a new hack day, set up by the Tech Nottingham community - Hack24.

During this 24 hour coding competition, teams of 4 compete to win exclusive prizes, by showcasing their innovative ideas and raw tech talent!

Set in Nottingham's Creative Quarter, this will definitely be an exciting Hackathon to be a part of.

How to get involved?

7digital folk listen up, now we've set an API challenge as described below; we're looking for 4 people to form a team - it doesn't matter what your specialism is, what department you're in, a team formed of product, systems, data and dev people might be just as good as 4 hardcore h4xx0rs.
Challenge: Build a context-based or thematic music application, service or store using the 7digital API augmented with data or APIs from at least one other source.

Context is key to the new wave of music applications. All you can eat music or massive download catalogues are hard to navigate and only let people discover what the retailers think they should. With the onset of wearable technology, open access to contextual data from the internet of things and the general increase in availability of processable data, we can now inform decisions in real-time based on the context in which that person, action or event exists.

Imagine that your music choices could be informed by the weather, or the city you're currently in, or the fact that your friends are all talking about the latest band. What if your music app knew you were running, or cycling, or dancing? Consider that you might want to only listen to rock, or classical, or Christian music or music from bands formed in Nottingham. We have 32 million available tracks to play, but you'll not want to listen to all of them (that's about 369 years of listening) so picking themes is important, and playing them based on the listeners current situation makes them even more important.

The 7digital API allows you to search, list by genre, purchase, preview and stream from our worldwide music catalogue. Couple this with another API or data source, using our partners like MusicBrainz, our matching API, or by combining another API through text searching, and you should be able to create something unique.

Entrance is FREE, we'll take care of the logistics, so all you have to do is sign up for the Hack here!


music app
Thursday, September 20, 2012 - 16:14

Over the last month we've started using ServiceStack for a couple of our api endpoints. We're hosting these projects on a debian squeeze vm using nginx and mono. We ran into various problems along the way. Here's a breakdown of what we found and how we solved the issues we ran into. Hopefully you'll find this useful. (We'll cover deployment/infrastructure details in a second post.)

Overriding the defaults

Some of the defaults for ServiceStack are in my opinion not well suited to writing an api. This is probably down to the frameworks desire to be a complete web framework. Here's our current default implementation of AppHost:


For me, the biggest annoyance was trying to find the DefaultContentType setting. I found some of the settings unintuitive to find, but it's not like you have to do it very often!

Timing requests with StatsD

As you can see, we've added a StatsD feature which was very easy to add. It basically times how long each request took and logs it to statsD. Here's how we did it:


It would have been nicer if we could wrap the request handler but that kind of pipeline is foreign to the framework and as such you need to subscribe to the begin and end messages. There's probably a better way of recording the time spent but hey ho it works for us.

Sunday, September 16, 2012 - 11:31

At 7digital we use Ajax to update our basket without needing to refresh the page. This provides a smoother experience for the user, but makes it a little more effort to automate our acceptance tests with [Watir](http://wtr.rubyforge.org/). Using timeouts is one way to wait for the basket to render, but it has two issues. If the timeout is too high, it forces all your tests to run slowly even if the underlying callback responds quickly. However if the timeout is too low, you risk intermittent fails any time the callback responds slowly. To avoid this you can use the [Watir `wait_until` method](http://wtr.rubyforge.org/rdoc/classes/Watir/Waiter.html#M000343), to poll for a situation where you know the callback has succeeded. This is more inline with how a real user will behave. ### Example

Friday, September 14, 2012 - 13:21

At 7digital we use [Cucumber](http://cukes.info/) and [Watir](http://wtr.rubyforge.org/) for running acceptance tests on some of our websites. These tests can help greatly in spotting problems with configuration, databases, load balancing, etc that unit testing misses. But because the tests exercise the whole system, from the browser all the way through the the database, they can tend be flakier than unit tests. Then can fail one minute and work the next, which can make debugging them a nightmare. So, to make the task of spotting the cause of failing acceptance tests easier, how about we set up Cucumber to take a screenshot of the desktop (and therefore browser) any time a scenario fails. ## Install Screenshot Software The first thing we need to do is install something that can take screenshots. The simplest solution I found is a tiny little windows app called [SnapIt](http://90kts.com/blog/2008/capturing-screenshots-in-watir/). It takes a single screenshot of the primary screen and saves it to a location of your choice. No more, no less. * [Download SnapIt](http://90kts.com/blog/wp-content/uploads/2008/06/snapit.exe) and save it a known location (e.g.

Monday, September 3, 2012 - 11:51

[TeamCity](http://www.jetbrains.com/teamcity/) is a great continuous integration server, and has brilliant built in support for running [NUnit](http://www.nunit.org/) tests. The web interface updates automatically as each test is run, and gives immediate feedback on which tests have failed without waiting for the entire suite to finish. It also keeps track of tests over multiple builds, showing you exactly when each test first failed, how often they fail etc. If like me you are using [Cucumber](http://cukes.info/) to run your acceptance tests, wouldn't it be great to get the same level of TeamCity integration for every Cucumber test. Well now you can, using the `TeamCity::Cucumber::Formatter` from the TeamCity 5.0 EAP release. JetBrains, the makers of TeamCity, released a [blog post demostrating the Cucumber test integration](http://blogs.jetbrains.com/ruby/2009/08/testing-rubymine-with-cucumber/), but without any details in how to set it up yourself. So I'll take you through it here.