Irregular Injection of Opinion
RSS 2.0|Atom 1.0|CDF

 Wednesday, 21 October 2009
Microsoft Office Extensions to the Open XML File Format (ISO29500) Specification

So the question was asked today in my Open XML Development for Office 2010 and beyond as to whether the Word 2010 Extensions documentation was available anywhere.

I had to take an action item to follow up and find this.

It can be found here:

Office2010 | SPC09|Wednesday, 21 October 2009 23:37:28 UTC|Comments [1]|    

 Monday, 19 October 2009
My Hopeless Gym Experience at the Mandalay Bay Spa

So… I genuinely object to paying US$20/day to use the hotel gym. But, needs must sometimes and so it was that I found myself at the Mandalay Bay Spa  $20 the poorer this morning. Been working reasonably hard in the build up to the K1 road race in a couple of weeks so needed to get some time in on the stationary trainer.

Well, what an utterly useless experience that was. I got inside the Gym to find that;

  1. They had two consumer grade exercycles and that was it as far as bikes went.
  2. None of the cardio equipment was available anyway

So even if I had been able to get on the equipment it wouldn’t have been much good for the Interval workout I had planned- I ripped the crank off a consumer grade exercycle in Bangalore this year so it’s just downright dangerous.

In the end I threw my toys out of the cot, got myself a refund of my fees and went for a run up the strip.


Think I’ll try and find someone friendly at the Luxor for the Gym tomorrow and will not be staying at the Mandalay Bay for MIX10 next year that’s for sure.

Gettin Fit | SPC09 | Travel|Monday, 19 October 2009 14:43:18 UTC|Comments [4]|    

 Tuesday, 22 September 2009
Smashed a new PB on my hill repeat ride

Got out for hills this morning on the road bike. Turned into a shorter ride, but, I pushed the 2nd interval really hard (100% MHR) and in doing so smashed about 7% off my PB up the short pinch climb I do.


The average power was 450 Watts over the 4min 31 seconds. Pity the hill wasn’t a touch longer as it meant my new PB 5 minute power ended up being only 431 Watts i.e. 30 seconds of my rest break at the top was included.. Goal for the next few weeks is to really work on lifting my power profile. I think I’ll probably look at doing Peak 1’w and 5’w on Happy Valley road as it certainly appears to help going up a hill. At the moment my 1’w isn’t even on the chart and I’d like to work on getting my entire profile into the Cat 4 region over the next few weeks in the lead up to the K1 race. Means I need to be targeting 350 Watts for 60 minutes which I think is going to be the hardest bit.

image  image

The other interesting thing is to see just how much temperature variation affects my (supposedly temperature compensating) barometric altimeter on the Polar s625x. All 5 of those intervals should be the same height, but, there is a definite trend downward over the set.

Adventure Sports | Gettin Fit|Tuesday, 22 September 2009 20:16:12 UTC|Comments [0]|    

 Thursday, 03 September 2009
Essential Tools for SQL Azure Development

Much like Wade Wegner I think that SQL Azure is the jewel in the cloud for Microsoft. None of the other vendors have anything like it. While it can be a bit sticker-shock-ish given that nominally a gig in SQL Azure is 65 times the price of a gig in Azure storage, once you actually run some real world scenario models it turns out to be really well priced. Think of a SQL Azure instance not as 1GB (or 10GB… but I see no reason to use 10GB partitions) of storage but rather as the cheapest damn fully backed up and HA relational database solution you’ll find anywhere- and yes FOSSers I include your stuff in that calculation; no greasy haired, under washed and over WoWed engineers needed here.

Anyway… I digress.

A major PITA in using SQL Azure is that the tooling is tantalizingly close to be OK… but in many ways it just doesn’t work. Dumping a SQL script and then re-creating the DB in SQL Azure is a painful exercise in find and replace- check out the hands on lab on Migrating a DB to the cloud in the Azure training kit for the gory details…

Wade has a blog post up about a freebie tool written by George Huey that automates this process for you. Essential for your Azure kit bag. It will parse out all the unsupported stuff.

I ran it up and gave it a nice brutal challenge…. the AdventureWorksLT script that’s used in the aforementioned lab. This includes both schema and data and is a decent effort to parse. The tool churned for a good 3 or 4 minutes…. but I got a script out! The original script includes some real curve-balls like XML Indexes and some tables with data to populate but no clustered index (SQL Azure needs a clustered index before you can insert into a table). I don’t expect it’ll get everything right., but, let’s take a look at how it does against my hand crafted script…..


It doesn’t support cut and paste or saving of the script yet so I’ll need to go and change the source first… More reporting back from me later. This looks really promising and I’m confident it’s going to solve 90% of the pain points I’ve been hitting trying to move complex (hell even simple) databases to the cloud.

Windows Azure|Thursday, 03 September 2009 11:12:12 UTC|Comments [4]|    

 Saturday, 08 August 2009
Rebuild Day: Post #1, software audit and backup

Today is rebuild day for my primary machine, a Lenovo x61t. Moving to Win7 RTM and Office 2010 Tech Preview.

First up is pulling all the Data off my C drive.

This mainly means the data out of my profile folder. A key thing to remember here is to check your filesystem Virtualization folders for stuff that’s been put there by poorly written software. I usually backup to a hard drive but today I’m going to just push it across to my D drive partition- I made the decision last build to run two partitions again which is a move I’m pleased with.

Then it’s time to do an audit of the Program Files folder to determine which of the crap that I’ve installed over the past 7 months I actually need to install again. here is my list, not necessarily in order. Hopefully it might give readers a few pointers.

Polar Pro Trainer
Life Cam
Intelli Point
Live Mesh
Office 2010
VS2k8 + SPs
Expression Studio 3
Star Alliance Travel Desk
IIS + other goodies via Web Platform Installer
SQL 2k8 inc Books online
DevExpress Controls + Addins
Azure SDK
.NET Services SDK
Process Explorer
Sony Vegas
Live Writer/Messenger
eTrust + RAS Bits
K-Lite Codec Pack
Zoom H Series Driver

Office2010 | Windows 7|Saturday, 08 August 2009 22:35:53 UTC|Comments [2]|    

Simple Partitioning with Windows Azure Table Storage

While there are certainly situations where it makes sense to have a natural PartitionKey when working with Azure storage there are other times when all you really want is a simple way to bucket up your data into equal bins. The usual approach to partitioning is going to be some sort of hash function but if you decide to use a Guid as the RowKey for your data you’ve basically got a nice collision resistant equal distribution already, you just need to turn it into a partition key.

I was sitting on the plane back from Singapore having a bit of a think about this. Given that we can represent our Guid as a 128 bit Interger we can probably just do RowKey % PartitionCount  and get a nice simple ordinal for each partition.

So after my birthday dinner I did what any dedicated birthday boy would do and broke out Visual Studio for a bit of a hack around..

First problem was the ‘128 bit integer’ as .NET doesn’t have a native BigInt type. A quick bit of Tiwtter asking and @adjames suggested the BigInteger class in .NET 4.0, but, given this is Azure there’s no .NET 4.0 support quite yet. A bit of Binging (is that a verb yet?) found some posts on StackOverflow and an implementation of a BigInteger class on CodePlex.

A quick console application confirmed that my thinking on the plane was right.

static void Main(string[] args)
            int[] counts = new int[]{0,0,0,0,0,0,0,0,0,0};
            DateTime start = DateTime.Now;
            for (int i = 0; i < 1000000; i++)
                Guid g = Guid.NewGuid();
                BigInteger b = new BigInteger(g.ToByteArray());
                BigInteger c = new BigInteger(10); //Number of partitions
                int p = BigInteger.ToInt32(BigInteger.Abs(b % c));
                //Console.WriteLine(g.ToString() + " : " + p.ToString());
                counts[p] += 1;

            DateTime end = DateTime.Now;
            TimeSpan duration = end - start;
            Console.WriteLine("Took: " + duration.TotalMilliseconds + " milliseconds");

Running this confirmed that my RowKey values would be evenly distributed across the 10 partitions- my concern here was that the Guid algorithm might not be quite up to the task but all seems good.


6500ms for a million rows doesn’t look too bad on the face of it. I’m sure there are plenty of performance optimizations to be eeked out, but, they’ll pale into insignificance compared to a round trip to Azure storage via the load balancer. What I do need to test is that it’s not more efficient to rehash the Guid into 64 bits and then calculate the modulo. But that’s for another night- jaded now and hoping to do 100km on the roadie in the morning.

.NET | Windows Azure|Saturday, 08 August 2009 07:50:00 UTC|Comments [1]|    

 Wednesday, 05 August 2009
TechEd Africa – Session Recap and Bits

So I had a great time at TechEd Africa this year. Will definitely be trying to get an invite to come back next year.

As always you can contact me about my sessions

Here are the follow up notes from my sessions. I’m not going to provide the PowerPoint decks until I’ve done the other TechEd events around the globe. I’ve provided them to the event organizers who will stick them up on the password protected attendee site.

  1. DYN201 – xRM, Dynamics CRM as a Developer Platform
    Good session in a smaller room. I had this one back to back with my other CRM session so this proved to be a good warm up with many people attending both. I used the demos and decks from the half day Business Action World Tour event that happened everywhere in the world *except* Africa so I thought it was appropriate to show the folks over here the content. I also talked about the fact that I eat my own dogfood- we’ve built a company that I’m  major shareholder in called MedRecruit. Go and take a look at the site, it all back ends onto Dynamics CRM 4.0 and runs on Windows Server 2k8 on Hyper-V. If you like it… give us some Google-Juice from your blog and tell all your doctor friends. I’ll be eternally grateful!
    If you want to take another look at the content from this session then check out the Business Action Virtual Tour.
  2. DYN303 – Souping up Dynamics CRM with Silverlight
    This session is the one that Jian Sun is going to be delivering at Tech Ed Australia. He was responsibile for putting together the demos and I built the deck. This was probably the best session of the week for me. I felt the attendees got some great practical skills to go home with tomorrow and start building cool stuff. I promised a drop of the final demo solution that we built during the session. So here it is:
  3. AZP201 – A Lap Around the Azure Services Platform
    I love doing this session because I know the content really well and as a 200 level architecture+business value session I get to put my own spin on things quite a bit. First time I’ve really had the chance to cut loose and talk about competitive cloud technologies at a Microsoft gig though- discussed AWS, AppEngine and all of which (along with Azure) take quite different approaches to the cloud. Will be interesting to see how things shake out.
  4. AZP302 – Programming .NET Services
    Today was a deep dive on .NET Services. I thought this session went really well too, but, it’s always harder to really nail ‘ew stuff’ sessions because it’s not like you got a whole bunch of experiential wisdom that you can impart as best practice guidance. We covered the whole .NET Services platform with demos in 60 minutes. I also tried a new ‘demo’' to explain the Service Bus relay and Direct Connect upgrade via NAT Probing through having three volunteers throw foam balls. I thought it went pretty well- we’ll see what the evals say!

So. All in all a fantastic event. I’m looking forward to getting out to Australia and New Zealand Tech-Ed early next month now.

TechEd | Travel|Wednesday, 05 August 2009 17:17:16 UTC|Comments [1]|    

TechEd Africa – The Pre Event Post

So it’s 1830hr in Durban South Africa and today was the last day for TechEd Africa for 2009. This was my first TechEd for this year and the second time I’ve spoken at TechEd South Africa.

Before I give you links to the demo code I’m going to bore you with some photos of my trip down the Zambezi last week. There’s actually quite a story behind it that you can read all about over at the Intergen Blog.


 IMG_0103 IMG_0118 IMG_0125

 IMG_0143 IMG_0156 IMG_0167

IMG_0168 IMG_0170 IMG_0172


365 Days of Crocs | Adventure Sports | Travel|Wednesday, 05 August 2009 16:47:56 UTC|Comments [0]|    

 Sunday, 19 July 2009
Some Wellington Road Cycling Hill Climb Grades

Thoughts I’d start a post of some of the grades of the various hills (Road Cycling) around Wellington.

I’ve pulled these off various rides around the place. Have noted where some are averages. All data recorded on a Polar s625x


Hill Map Distance Height Grade
Makara Saddle. Karori Side.
Cnr Allington Road and Apex of Saddle
Average of 3
1.05km 87m 8.5%
Makara Saddle. Makara Side
Lamp-post in front of Church to Lamppost at top of Saddle
Average of 2
2.61km 186m 7.15%
Takarau Gorge Road Intersection to Top of J’ville
Intersection Makara Rd and Takarau Rd to top of Johnsonville on Cortina Road
11.07km 268m 2.2%
Aro Valley Up Raroa Road
From Traffic island at bottom of hill to top of hill on Raroa Road
1.96km 107m 5.7%
Adventure Sports | Gettin Fit|Sunday, 19 July 2009 08:46:29 UTC|Comments [1]|    

 Tuesday, 14 July 2009
Shipping a great 100% Silverlight Site for Microsoft

As a Microsoft Regional Director I’m often prepared to stick my head out and stir a bit of shit. One of the things I’ll often bleat about is the appearance of Flash on Microsoft properties. It therefore behooves me to put my money where my mouth is and deliver up great Silverlight sites ourselves.

In the past we’ve done some really cool ‘hardcore’ Silverlight projects that we’ve shown of at events like Mix. These include TextGlow and Buttercup. This time around we’ve delivered a Silverlight based site to help support the Technical Preview of Office 2010.

It’s 100% Silverlight and I’m not going to go into the technical details as a bunch of the team (linked below) will be doing that.

We kicked around the idea of using Silverlight 3.0 for this project- we knew the ship date and given that it was just three days before our go-live we decided that we’d err on the side of caution. This really comes down to the adoption of the plugin; Silverlight 2.0 has pretty good adoption, particularly among our target demographic but 3 days just isn’t long enough to get the number of plugin installs up to a decent level. At the end of the day whether your running with Flash or Silverlight you are making a trade-off between plugin availability and functionality even if just choosing between versions on the one platform.

We’re running Silverlight streaming. The video clips that are coming from the production company are have fantastic production values: certainly make me jealous. It would be a shame to stick them in a nasty grainy low bitrate codec but at the same time we’re catering to a global audience. Silverlight Steaming means that we can delivery a good experience for everyone around the world and then for those of us with great internet connections (thanks Telstra Clear cable!) we can deliver a full 720p HD stream in the same UI. We worked with iStreamPlanet who are providing the streaming services over the LimeLight CDN.

The main application is hosted in the Rackspace Texas data center. It just wasn’t practical to run this out of the Intergen Wellington data center in the short time frame we were working to. The backend platform is, unsurprisingly, Microsoft server products: Win2k8 and SQL2k8.

So there you have it. Money where my mouth is I think you’ll agree.

Links to posts from the team:
James Newton-King who built out the server side technology and headed up our release management blogs on more of the technical details:

Aaron Hall from our Dunedin Office jumped on the Tin Budgie and spent 2 weeks in Wellington working on the mobile version (visit it on your WinMo or iPhone device): with Microsoft 2010

Chris Klug who lead the Silverlight development side of things: Chris also has some tips we learnt along the way…. in fact make that Chris has crap load of great technical deep dive content that I emplore you to go and read so you can learn from our experience.

I’ll call out the rest of the team as they blog or tweet about this.

Intergen | Silverlight|Tuesday, 14 July 2009 08:37:45 UTC|Comments [0]|