Fantastic Marketing

I got a pretty sweet fathers day present yesterday. And I can tell exactly why it was chosen. The company made extra effort, and nobody else did. I’m talking about Toblerone’s “To My Dad” sleeve on the normal box. Very Clever idea.

When it’s gifted by these two angels how can it not make your day.

Fathers day sweeties
Fathers day sweeties

BarCamp Christchurch

There is a Christchurch BarCamp in the pipeline for/on Friday 7th September. Seems to have been whipped up pretty quick.

Must admit I’m interested in attending, but I’m at a loss what to talk about. Not scared of talking, just not sure what is share worthy (from an interesting/legal perspective) from current projects/work.

Will think on this…. might see you there.

How to not manage customer expectations

You may have noticed me being very excited last week about ordering a Squeezebox from FirstIn, well I’m not very excited anymore.

I’m just plain old pissed at their crap customer management.

See last week (on Wednesday) when I placed the order I was thinking sweet, I can get a Squeezebox at a fantastic price, and it will be shipped on Friday. So all Friday I was buzzing that I might have it Saturday. See that’s a customer expectation based on what the web-site told me. So on Saturday I was like cool I can handle getting it on Monday (no couriers on Sunday). On Sunday I notice that in fact I haven’t received e-mail notification of it shipping. Which means it’s not even shipped. So on Monday Michaela rings and gets told its shipping today (Monday) should be there Tuesday/Wednesday. Expectation has been set again. So on Tuesday afternoon I notice no shipping e-mail so ring up again. It’s now going to be shipped Wednesday, so I’ll get it Thursday/Friday. Expectation set again. Now it’s end-of-business Wednesday, and guess what, it has still not been shipped.

So if last week it was going to take a week to ship, I would have been sweet good price and still before my birthday, I can handle that. But each time it slips some of my pleasure of working with FirstIn fades.

So either this is the FirstIn business model, or they truly are having supplier “issues”. If this was my business I would have end-of-day email out for orders that were due to be shipped and still outstanding. Now I understand that this might be embarrassing, but really even if they don’t admit it, it still is embarrassing. All they are doing is forcing me to chase them each day.

What does the lack of action imply to me.

  • They have cash flow problems
  • They have inventory management problems (this one seems less likely after all this time)
  • They have supplier issues (like the supplier doesn’t have the product)

But whatever their problem is I’m losing interest. Paying 12.5% more and actually getting the product is starting to look attractive.

Update: Thursday 3pm - Well I didn’t get an e-mail, I had to ring again, but the support person said I was on her list to check-up on. Told them I wanted a tracking number today, or I’m canceling the order. So she was on the job! Just got off the phone with Adam Brown, “the original ‘order’/‘shipment’ lost, so the supplier is sending a new one via Auckland to Christchurch. He’s going to ring back as soon as he has a tracking number“. So I’ll believe it’s happening once I get a tracking number.

Update: Thursday 6pm - No tracking number, so I’ve emailed canceling the order, now I get to play the how long will it take to get my refund. Man this whole thing pisses me off. At least with the TradeMe traders you can leave in system feedback if they are crap. Which makes them act better or leave, where-as here the cowboys just start a new venture.

Update: Saturday 1st September - Well I wrote my angry email, and got a response pretty quick (although I didn’t read it for a few hours) and got a tracking number. Then played the miscommunication game with the courier company for a day, but it arrived today and the Squeezebox for fantastic, I’ll post more about it very soon!

SolidColorBrush not reusable

In Silverlight I have just discovered by trail by fire the you should not reuse Brushes. Seems really odd coming from a Win32 GDI background to not use the same brush but the following code throws an exception on the second assignment.

SolidColorBrush green = new SolidColorBrush();
green.Color = Colors.Green;
Run ra = new Run();
Run rb = new Run();

ra.Text = "Run A";
rb.Text = "Run B";
ra.Foreground = green;
rb.Foreground = green;

With this

Value does not fall within the expected range.

at MS.Internal.XcpImports.SetValue[T](IntPtr oPtr, UInt32 iPropertyId, T obj)
at System.Windows.DependencyObject.SetValue[T](DependencyProperty property, T obj
at System.Windows.Documents.Inline.set_Foreground(Brush value)

Hmm, what means lots to me…

So I changed how I was wiring it all up and found a better SolidColorBrush constructor as well. So it should be done like

Run ra = new Run();Run rb = new Run();

ra.Text = "Run A";
rb.Text = "Run B";

ra.Foreground = new SolidColorBrush(Colors.Green);
rb.Foreground = new SolidColorBrush(Colors.Green);

Which feels wrong, but works. I’m guess as Silverlight is not GDI based there are no window handles the manage, so it works better this way.

Lunar Eclipse

Well I didn’t see anything, but it matters not because Conor Boyd braved the cold, and took his bag of tricks and got some great photos.

First is the composite

A composite of 23 images over about 2.5 hours

The arc is fake, but the photo’s are real. Of interest is the difference from the red moon to the full moon. 4 seconds @ ISO800 verse 1/160 second @ ISO100.

Next photo that blows my mind is a long exposure night shot, that looks like day.

'A braw bricht moonlicht nicht tha nicht'

You can see lens flare from the moon in the top left of the picture, star speckles and blurred clouds to the right from them moving.

New York Times and the Freakonomics Blog

Scott Karp wrote quite a good (and full fead) post about how the New York Time can’t sell and Advertisers Refuse to buy full feed Advertising.. The article hit home with me, as I’d just unsubscribed from the Freakonomics Blog. All of a sudden their posts where truncated, and I’d have to go somewhere to read the blog (from my desktop feed reader to a web site).

I don’t think so, I was having issues with the blog as it had massively increased in volume after hiring a editor. Which for them may have meant that they could produce more, but I didn’t have the time to read more. What I liked about the old blog was that it was condensed “wow” thinking. There is only so much wow you can take before your eyes glaze over.

Now the linker in all this is that I found Scott’s post via Nick Bradbury’s Shared feed. This is where Nick aggregates the good stuff from the feeds he reads. I find it a good source of none tech chatter that my feeds seem to be focused on. As others have said aggregation is the future. It’s like a friend of friend thing (yet the friends might not even know you trust them), better than subscribing to every name dropped blogger, yet still catching the Juicy bits.

Incase I’ve not said it before, I love reading blogs in my desktop feed reader (written by Nick from above). I love having it synced with home, and I love not having to load web pages. Now if you want to advertise in your feeds go for it. It just better not mess with my layout/formatting.

Google Analytics default date range

I have Google Analytics running on this blog, and I think it’s fantastic. But, I’ve always found it on that on my 27th of August, it only shows up to the 25th. Other day I found the date range Timeline picker, but got very confused when I saw the same data for two days running.

It turned out that with the Timeline picker you can move to the 26th’s data. So I ended up see the effective data two days running

Today I noticed that on the default dates the graphs stop on the 25th data

default time
default time

But if you choose the 26th you some hint of the 27th’s data

can select US today
can select US today

But you cannot select the 27th

cannot select NZ today
cannot select NZ today

But you can change the URL and see into the future!

go into the future
go into the future

All you need to-do is change the URL value from pdr=20070801-20070826 to pdr=20070801-20070830. Tada!

So my question is why the funny default dates? Why on the default dates does it not show future data hints?

Code Camp - South Island NZ

Well planning has started for a Code Camp down here in Christchurch. Everything is currently in the air, but it is planned for November.

Current concept is level 100/200 talks on all the new .net 3.5, SQL 2008 and IIS 7 goodness coming down the pipe.

Local IIS MVP Chris Crowe (in fact the worlds first IIS MVP) has agreed to talk.

We have a pre-registration page up to gauge interest, so pop along and sign up. That is if your interested…

How to rewrite System.Configuration.CommaDelimitedStringCollection wrong.

We produce data in comma delimited strings. So as part of a tool we are writing, I wrote a simple loop to output a list of objects with commas between items.

public void Wrong_CommaSeperatedWriteLine(TextWriter sw, params Object[] list)
{
  if (list.Length > 0)
  {
    object last = list[list.Length - 1];

    foreach (Object obj in list)
    {
      sw.Write(obj);
      if (obj != last)
      {
        sw.Write(",");
      }
    }

    sw.WriteLine();
  }
}

Which we found today would fail when called like this:

Wrong_CommaSeperatedWriteLine(sw, "one", 2, "one");

but not this:

Wrong_CommaSeperatedWriteLine(sw, 2, 2, "one");

as the immutable strings references are the same. So while trying to think of how to avoid using a for(int i solution, I typed comma into MSDN and what do you know, CommaDelimitedStringCollection Class is there already. Doh!

So my code becomes:

public void CommaSeperatedWriteLine(TextWriter sw, params Object[] list)
{
  if (list.Length > 0)
  {
    System.Configuration.CommaDelimitedStringCollection commaStr = new System.Configuration.CommaDelimitedStringCollection();

    foreach (Object obj in list)
    {
      commaStr.Add(obj.ToString());
    }

    sw.WriteLine(commaStr.ToString());
  }
}

Gosh darn, large Libraries that solve all the simple problems (correctly) already.

There is an AddRange method but it takes a array of strings, and I have a array of objects, and I’m not sure how to auto-magic convert the arrays from one to the other. Any suggestions?

CommaDelimitedStringCollection is in the System.Configuration namespace which has to be added as a reference. There are lot of interesting classes in this namespace that I have never reviewed. Time to do some browsing…

Squeezebox

Michaela opened Pandora’s box (which was actually a vase) by wanting a replacement for our mini-system that has stopped playing CDs. The lines that did it were “I want to listen to CDs but I can tell they will be useless soon” now with this thin wedge the dark world of gadget’s could be proposed.

When then went shopping for me, but spent more time looking at mini-system’s. She wanted something that would play CD’s and have a digital tuner (Radio). She came with the idea of an ipod type device. Wow you can spend money fast. So after not finding what we wanted, she said Simeon you could solve this with Technology.

Mistake. Floodgates open.

I already knew about the Sonos solution, but also knew it was pricey. I found the Squeezebox and knew I had a winner. Price was also a saw point. I could get one from the US $299USD (~$430NZD) or $599NZD from a NZ distributor. Then I found a TradeMe shop that sells them for $450NZD. Today I found them on FirstIn for $400NZD. SOLD!

So now I have to wait for it to be shipped on Friday, then must likely for my birthday to receive my present. Woot, so excited.

I now get to download the software and get the sever software working, and investigate streaming from FM tuner. Exciting time ahead….