So I went to the Apple Genius Bar today with my iPhone 4 issues. It was a fairly unsatisfactory experience, especially compared to when I took my iPhone 3G back when dust* started appearing on the screen and they replaced it without question.

Before my Genius Bar appointment I compared the performance of my iPhone 4 with the others in the shop. There was only one iPhone on O2, so that was the only one I could really test.

From what I could tell my phone is not atypical, the one in store that I tested behaved exactly the same, huge drop off of signal and download performance when held lightly in my left hand. I took my 3G with me as well, it suffered no such problem held the same way.

Read on for the gory details of what followed.

Apple have come out with a formal response to the alleged iPhone 4 reception issues.

And of course John Gruber has come up with a brilliant translation of it.

Here is my take on it as an iPhone 4 owner.

I’d been hoping (and really expected) that there was going to be a real fix to this. As such I had been avoiding testing the issue too much, until now…

Updated: I did some more testing that shows the problem doesn’t occur in very, very good 3G signal areas, see the end of the article.

See what happened when I took my iPhone 4 to the Genius Bar.


Squeezebox owners who also own iPhones or iPod Touches have been patiently awaiting the arrival of native apps to control their Squeezeboxes. The iPhone was an obvious candidate as a remote control for the Squeezebox and the iPeng web based remote interface has been available for quite some time.

While the iPeng web remote was very good, it was just too slow. Mobile Safari can only throw data around so fast.

In the last couple of weeks we suddenly have a flood of Squeezebox control apps hitting the App Store. The one I was waiting for is the native version of iPeng. It finally became available today for £5.99 ($9.99 in the US).


This is the second part of my review of of the Squeezebox Duet, though all of this part focuses on the Controller part of the package. Part 1 is here.


I’ve had an MP3 player for my car since I bought my first empeg back in 1999. The empeg is an absolutely brilliant MP3 player, but I’ve never had anything that compared for the the home.

I own a bunch of Rio Receivers, which were designed by the same team as the empeg, but the software on them is just too flawed (largely thanks to the Rio marketing department I fear) to make them anything other than mediocre MP3 players.

I’ve looked in the past at the Sonos system, but it is always looked very expensive and restricted in its functionality. I also looked at the previous SlimDevices players, but the big problem with those was that even though they had a clear bright screen I can’t read the screen from across the room without first finding my glasses.

So when I saw that SlimDevices (now owned by Logitech) were working on a system similar to Sonos, with a screen-less player and a Wifi enabled remote with a screen, I was very excited. So I bought one as soon as they became available.

Anyway, enough of the waffle, on with the review (the Duet has a lot of functionality, so we are going to be here a while).

The Plan

I had hoped to give my parents a Wifi enabled digital photo frame for Christmas. For it to be usable by my parents it had to be very easy to use and robust.

Ideally I want to just point it at a set of RSS feeds and have the frame cycle through random images from them. It would be nice if it could fall back to local storage if the Wifi connection isn’t present (my Dad likes to turn off his router when he isn’t using it).

After researching various Wifi frames, I settled on the i-mate Momento 10 inch one. (more…)

Since the end of last summer my Subaru Impreza 2000 Turbo had the problem that it sounded like a diesel taxi when the engine was cold.

The sound was a real worry when it first started, it sounds rattly and very diesel like. Revving above 3,000 rpm made it go away and after the engine had run for five minutes it was just about gone.

Everyone that I spoke to, both online and at my Subaru dealer said the same thing. They all said it was caused by piston slap, which is apparently occurs when one or more of the pistons become slightly oval and bang on the cylinder walls until the piston expands when it warms up.

It appears this is a common issue on older Impreza engines but that it isn’t anything to worry about as long as it goes away when the engine is warm.

I did have one symptom that didn’t fit the piston slap case. Very occasionally, when using engine braking from 70mph+ down to zero, the diesel sound would reappear and go away when the engine was revved.

I had my 105,000 mile service the other week and asked them to take a proper look at the sound (I left the car parked round the corner from the dealer the night before, so that I could take it in with a cold engine).

Much to surprise I got a phone call later that day to say that it wasn’t piston slap after all, which brought on a brief moment of panic and thoughts of engine rebuilds. I needn’t have worried though, the problem was a faulty timing belt tensioner, which was banging against the engine block.

The tensioner had been fitted at my 90,000 mile service less than 12 months ago (when the timing belt was replaced), so it was replaced under parts warranty.

So my Scooby now sounds like it should again, no more taxi impressions every morning.

One of the guys I am working with at the moment uses the phrase “every day is a school day”. He’s not wrong, rarely does a day go past when I don’t learn something new about some bit of computing technology (typically finding out a new way that some piece of software is broken).

Today’s lesson was on Microsoft SQL Server. I was struggling to debug a problem inside a stored procedure that is buried deep with a nested set of other stored procedures. I was getting frustrated and thought to myself “it would be so nice if I could dump stuff to the Windows Event Log from within this stored procedure”.

I got so fed up in the end that I went off to see whether event logging from Transact-SQL was actually possible. It is, using the xp_logevent stored procedure (which lives in the master database).

This is the code that I am using:

declare @message varchar(255)
set @message = '@primary_contact_type ' + cast(@primary_contact_type as varchar(30))
EXEC master..xp_logevent 60000, @message

Two things to know to make this work:

  • you have to declare the @message variable, you can’t just pass a string constant to the xp_logevent call
  • your database user needs the relevant permissions on the master database to make the call

The xp_logevent stored procedure makes a COM call to log the message, so you probably wouldn’t want to leave the call in any production code (unless you put in a switch to turn it on and off when you needed).

I did two momentous things today. I unplugged our video recorder and CD player. They are now stashed in the attic.

A few years ago that isn’t an event that I could have predicted.

We no longer need a VCR and CD player in our living room. The VCR has been more than replaced by the combination of the DVD player and our Sky+ PVR. The CD player is redundant, because with the right hardware high bit rate MP3s are indistinguishable from CDs.

I still remember back in the eighties when my parents rented a series of Betamax VCRs. At time time they couldn’t afford to buy one outright.

At the same time I was buying albums on audio cassettes, complete with all their hiss and warbling.

Who would have believed then that both technologies would become obsolete within 20 years and that CDs would be going the same way.

If you have ever got involved with putting .NET assemblies into the GAC (Global Assembly Cache), then you will have come across gacutil.exe

There is a problem with gacutil.exe, it isn’t part of the .NET framework and therefore isn’t installed on machines that have had the framework installed on. It is actually part of .NET SDK and you aren’t supposed to distribute it with your own applications.

If like us you don’t realise until late on in your project that gacutil isn’t redistributable then you are faced with a number of options for registering your assemblies with the GAC:

  • use the features in your installer (not an option for us as we were using a very old version of Install Shield)
  • illegally redistribute gacutil
  • write your own code to call the GAC API

I’m ashamed to say that we took option 2 as we were pushed for time and resources. At the time I couldn’t find C# code to call the GAC API and we didn’t have anyone around that could write a C++ version for us.

I have since found this C# code, which is supposed to achieve the task of registering with the GAC:

using System.EnterpriseServices.Internal;

string path = Directory.GetCurrentDirectory() + "\\";
Publish publish = new Publish();
publish.GacInstall(path + "MyAssembly.dll");

Next Page »