Monthly Archives: December 2012

Check your cables – relearning old lessons.

rf-cableEvery now and then the world needs to re-teach you an old lesson. For the past 5+ years I’ve been a user of Media Center, a component of Windows. For most of that time I had it set up on a desktop PC with two digital TV tuner cards. Other than the initial set-up which takes some time this solution works great as a solution for accessing media in the living-room.

For the past five years I’ve been living under the assumption that I needed a signal booster to pick up the digital channels form the antenna on the roof. On the odd occasion when I needed to move the Media Center there would always bit a bit of instability in the signal as I adjusted the gain on the booster.

About a month and a half ago I moved the XBOX 360 into the living-room as well and started accessing the Media Center TV feed via the extender capability built into the XBOX. This works pretty well once you figure it all out.

Then the Media Center died. To be honest it had been showing signs of distress for about twelve months and the hardware was getting a bit long in the tooth anyway. I decided to move the Media Center function to an old HP Envy laptop (8GB RAM and i7 processor) that I wasn’t using much. The problem of course is that the laptop couldn’t accommodate the two TV tuners that I had installed in the original Media Center.

Fortunately I had anticipated this problem a while ago when looking at slimming down the Media Center case to fit with the living-room aesthetics so I had a network-based dual TV tuner (HomeFree Duet) ready to deploy onto my network. So I set up the laptop, installed the necessary drivers and got the solution limping along.

The only problem was that the signal quality coming from the network tuner was terrible. At this point I was making some wild assumptions about what the problem might be from “the network can’t handle the traffic” to there is a problem with the tuner, to the Media Center doesn’t have enough grunt to decode the signal. All this time the WAF (Wife Approval Factor) was dropping as her favourite recorded shows were coming up as “No Signal”.

I knew the problem wasn’t the network. When we moved into our new house I made sure that I installed a commercial-grade 24 port GB switch with the 48GB backplane. There was still the possibility of single socket network congestion as the TV signal streamed from the TV tuner to the Media Center and then back out to the XBOX. After checking the perf stats on the Media Center however it looked OK (other than the usual heat problem with HP Envy devices).

Finally I decided to swallow my pride and I went out and purchased a Topfield PVR for Christmas which I hoped would give me trouble free TV recording along with a few other benefits. It turns out that the Topfield wasn’t a great choice. Even after a firmware update, the device would fail to record shows, and would occasionally lock up even for live TV playback (requiring a reboot). Probably the biggest pain is the user experience – for someone that is coming from Windows Media Center the UI presented is a big let down – and to get series recording working you need to really be using IceTV (which is a great service).

So – here I am, no Media Center, a less than stellar experience with Topfield and a WAF approaching zero. Then I remembered something that I observed whilst I was setting up the Topfield – it was sensitive to which cable I used from the wall into the booster. As a long-shot I decided to get rid of the booster, and try the single cable direct from the TV outlet into the network TV tuner. Bingo – it worked! It was successfully able to pick up every channel.

It turns out that two of the cables that I was using didn’t really conduct the signal too well. I’m talking about a signal drop off of about 30-40%. Shocking! If I used another cable – the signal would shoot up to about 98% with no booster.

So what is the moral of this story? Check your cables – they might save you some head-ache.

P.S. I am really sad to see Media Center being removed from Windows as a default option. The TV recording function of that software is first class. Even though you can still get it all working with Windows 8 and XBOX 360 I don’t expect this to be the case in the next revision of Windows/XBOX. I hope that Microsoft doesn’t forget that in Australia free-to-air television still rules the roost in terms of media consumption.

Whilst I won’t be sad to see the complexity of TV tuners disappear over the coming years, I hope that we don’t loose the freedom either. For XBOX to do TV in Australia well it needs:

  1. A single TV apps for XBOX, plus special branded apps.
  2. The ability to select and record shows, and series.
  3. Consumer freedom to select how long a recording is retained for.
  4. A slick user interface like Media Center (perhaps updated to fit with the new Modern UI theme).
  5. Fully integrate online only media channels.

I’ve seen various TV providers start to move in to the XBOX space (SBS On-Demand for example) and whilst I applaud their early adoption of the technology I really want to have more control over catch-up TV. At the end of the day – I don’t watch anything live any more – and not everything is available on the pre-selected catch-up list.

Ladders or Rocket Ships

When you start any human endeavour a big part of the challenge is figuring out the kinds of tools that you are going to need for the job. If all you want to do is change a light-bulb well then a step-ladder is probably going to do the job. However, if you want to go to the moon then you’ll probably want a rocket ship. In theory you could stack ladders on top of each other, but eventually that is going to stop working and you’ll have to face up to the fact that you are going to need to do some serious engineering to reach such a lofty altitude.

Software development as a problem space has huge diversity in the scale of problems that need to be solved. Some days you might be building a simple command-line utility, and others you are developing a multi-tenant, multi-currency, multi-language solution or something in between.

As a software developer you not only have to be able to correctly frame your problem, but you need to figure out what set of tools are going to help you solve it. If you go to complex, you create a monster that no-one wants to work with, if you go to simply you just don’t have the capabilities required to do the job – both mean failure.

A great deal of complex architectures are the result of a poorly framed problem. When you start out your stakeholders will be bullish about the capabilities that require. In an effort to meet all of the requirements you try to figure out how to piece together a solution which meets not only all of the functional requirements, but also the cross cutting concerns. Indeed, it’s the cross cutting concerns that often lead to complexity in application design.

I’m constantly amazed at how, after months of development initially unmovable constraints start to get software as the reality of the cost of meeting all those requirements sinks in. Not only that, but capabilities that the architecture provided but which were never initially considered suddenly become the new “most important feature”.

As developers though, we can’t dodge all the blame. We all want to try shiny new things, and so every project we undertake we push the envelope a little bit. Sometimes these new construction approaches are simply the new common approach taking hold. Other times it is just folly.

Introducing Palmer (a Retry logic library for .NET)

Over the last week I’ve been slowly writing a little utility library to make it easier to express retry logic within application code. As software becomes more complex and more interconnected the concept of gracefully recovering from transient conditions becomes more important. Your average cloud or enterprise application is going to have to deal with network time outs, database deadlocks and temporary glitches caused by underlying systems recovering from hardware failures.

Palmer is a library that I’ve created to help solve this problem. You can read more about it over at GitHub. If you just want to download it and have a play, you can install the package from NuGet.

Install-Package Palmer

Using the API is easy with its fluent syntax:

Retry.On<SqlException>().For(5).With(context =>
  // Some code that might throw a transient SQL exception.

This is a 0.1 release so I am looking for feedback and ideas on how to improve the library. I’ve already got a couple of ideas such as:

  • Extend the On/AndOn methods to allow passing in a typed exception to make accessing specific exception fields easier.
  • Add event hooks to support logging exceptions as they occur.
  • Create an extension library for common usage scenarios such as SQL, network issues.
  • Support capturing multiple exceptions with one termination condition.

I’ve also added some issues around improving the documentation and turning the library back into a portable library after getting my build issues sorted out.