Off to Rwanda

1

Today was a long day of travel. Up at 6 to have breakfast and make our way to the airport. We found the locker storage so we could leave one of our bags with our left over non-perishables and found our way to check-in.

Our flight was fairly empty and we got moved to the exit row. We landed briefly in Burundi, a pile of people go off and 5 got on. The plane had about 15 people on it so we ended up with a exit row each so they didn’t have to brief anyone else. Quick flight and we were in Kigali.

After working out where to pay for our visa, and getting our bag we were through. The ATM proved a little tricky to get money from but we got there in the end.

Then it was a 2 hour drive to Ruhengeri. It was a slow, steep drive. There were so many people walking on the sides of the road, many of them carrying things on their heads. There were motorcycle taxis and combi vans full of people. 

We arrived at our hotel, had something to eat and then sleep. – early start with the gorillas tomorrow

Overnight in JoBerg

0

Yesterday afternoon I couldn’t help myself, had to get one last cuddle from some of the cubs I’ve been looking after so I ventured into the ABC enclosure and Clarice was up for some muddy lion hugs and belly rubs. So sweet but now my pants are full of mud, oh well…they’re going to get a lot muddier on our trek in a few days.

This morning we said goodbye to everyone at Boskoppie and ventured back to Johannesburg on the bus.

1

We decided to take advantage of the nice weather and head to Monte Casino to re-visit the birds we had so much fun taking pics of 2 years ago. The macaws are amazing – you can get up so close to them for some nice close-up shots

2

They also have a few little monkeys

3

Red lumurs in an awesome open enclosure on a man made island

4

We hung around for the bird show at 3pm which is opened by a crow picking up cans and putting them in the bin.

5

One of the highlights is the kookaburra (noticing a theme here) that would fly to a hat in the crowd for food. This little boy couldn’t bend any further back I think.

6

Some native birds

7

The awesome tucan.

8

and some bright birds in a giant aviary where they can fly around.

 

Spending the night at Outlook Lodge which is a pretty awesome house B&B. Tomorrow we fly to Rwanda to do our gorilla trek and volcano hike. We’re off for 4 days and in theory have internet but not sure how good it will be so we may go a bit dark.

After that we’re heading down to the Drakensburg – again not sure what the internet coverage will be like so may not hear from us for about a week.

Last day at Boskoppie-our favourite 20 pics from the last week

h1

It’s our last day at Boskoppie and it’s really wet. The enclosures have mini dams and the lions are very muddy.

h2

They are also really playful and nobody wants to cuddle them in their muddy state. We’re on Tigers and Uno & co today so it’ll be pretty quiet for us today so a good opportunity to find our favourite pics . We’ve probably used all of them through the last week in various blog posts but thought it’d be nice to have them all in one post. We’ve had a pretty amazing 11 days with so many great memories – so here’s our favourite 20 (and let me tell you finding our favourite 20 from the 1100 or so nice and in focus photos we’ve taken wasn’t an easy task):

20

#20 – The zany tiger cubs

19

#19 – 2 of the DEF cubs

18

#18 –one of the ABC cubs

17

#17 – a DEF cub

16

#16 – Illuki

15

#15 – a DEF cub

14

#14 – Hendrix

13

#13 – DEF cub

12

#12 – ABC cub

11

#11 – ABC cub

10

#10 – ABC cub

9

#9 – ABC cub

8

#8 – Hendrix and Illuki climbing on Roxy

7

#7 – DEF cub

6

#6 – TUV cub

5

#5 – ABC cub

4

#4 – ABC cub

3

#3 – Clarice

2

#2 – Valentino

1

#1 – ABC cub

TUV-Uno and Co.

7

Today’s pics are dedicated to the TUV’s. These guys are a bit out of order. The oldest – Uno is around 7 months, then 6 of the T’s and V’s who are around 5 months.

4

3

These guys are quite massive but a lot less intense than the 5 tigers of a similar age.

1

2

They got given a massive bit of cow to chew on for the next few days today and made quick work at tucking into it and pulling off bits like the tail hair etc. to take to their own corner of the enclosure.

5

6

They have a big platform aptly called the jungle gym that has a ramp, some tyres and a platform they like to climb up and bake in the sun in the morning.

8

Today we were on ABC’s and they’d cleaned up the big leg we gave them for dinner quite well.They also moved onto just milk, rather than milk and egg today.

We were supposed to be going out tonight for a bush camp but the afternoon “storm” or what we’d call drizzle in Brisbane has ruined that plan.

V is for Valentino

3

One of the most beautiful and friendly of the full grown tigers here is Valentino. He is massive!

5

He follows you around his enclosure wanting lots of attention which makes him very hard to photograph cause he’s so close to the wire most of the time.

2

1

I was taking a few pics of a tiger in the next enclosure and he got very vocal all of a sudden and stopped as soon as I returned to say hi and take more pics.

4

He’s got a lot more white in his coat than the other tigers.

He seems so sweat and friendly but I’m sure he’d kill us without even a blink of an eyelid if we were on the other side of the fence. When he stands he comes half way up my my ribcage – at a guess would say he’s about 1.2m tall.

J-is for Jaguar

4

There are two jaguars here at Boskoppie – Jaggy and Boyfriend.

1

They are quite a lot bigger than I expected ie. big cat sizing largest to smallest – Lions, Tiger, Jaguar, Leopard etc.

2

These 2 have very different colouring and tend to hang out under small bushes or in their night den.

3

Today we looked after DEF’s again. These guys are getting pretty playful in the mornings. I had about 7 of them all decide they wanted to lay on my lap for scratches at once. Funnily enough my lap isn’t big enough for that many lions at once so a bit of a fight over my lap occurred quickly followed by the bigger of the lions claiming poll position for scratches while the rest banished to chew on my shoes.

We cut up a warthog for the cubs this afternoon. I actually made quite a lot of mince. We’re getting pretty good at cutting off fat, skin and sinue with non-ideal knives so that the meat makes it through the mincer without clogging up.

H and I’s

4

Busy tourist day today. As it’s the weekend a lot of tourists come through for tours. So there were heaps of people, kids and strollers around the place. We were on ABC’s today and they had some minor flooding with an overflow pipe that comes through their enclosure coming apart.

7

The nursery babies are the H and I’s who are about 5 weeks old. These guys get fed a special formula and fed more regularly than the other cubs. They usually come out on the lawn area at 5pm each afternoon to have a run around on the grass before their evening feed before bed time.

1

3

6

Hendrix – who is much bigger – a male, from and originally from a litter of 2 and very red in coat colour.

5

9

10

Illucki and Indiana – 2 days younger – female and originally from a litter of 4.

11

Indiana has a bit of a different personality to the rest of the cubs. She doesn’t like to get picked up or lay on you but she does like to sleep right up next to you. She’s been a bit unwell the last few days so has lots of extra attention. She has a very tiny face but lots of energy to run around.

8

When they are little the all have these deep blue eyes that change to brown as they get a bit older as you’ll see looking at the other cubs. 

DEF’s

5

Today we were on dogs, ducks and rex again so was a quiet day. I did a bit of nursery baby sitting, we watched them dart a tiger to get some warts cut out and played with the cubs. We spent a bit of time today playing with the DEF’s so thought we’d show some of our pics of these guys.

4

There are 12 cubs in this enclosure from 3 litters (D, E and F names). They are 9 weeks and under and can be quite cute but when they get a bit worked up can also be a handful.

1

They are fascinated by the Go Pro and the dolly.

2

We quite often get about half of them trying to lick, bite, claw and run off with the camera mount which makes for some cute pictures.

7

They’re at their cutest when they are asleep. Being a pack animal you can quite often find all 12 of them huddled up asleep in a giant ball of lion cubs.

8

They are quiet curios and like to climb over their tyres and their logs.

15

10

12

The D’s and E’s have quite light coats.

9

While the F’s have much more red in their fur.

If you can get one alone they can be quite sweet and want to cuddle and sleep after they get over their initial bitey phase. They do have a bit of a jealousy issue, so once a 2nd one comes over they can get quite protective of you and start fighting over you…right on your lap. When they’re in a bitey phase, you can quite often get 4 or more of them all trying to chew your shoes, pants, arms…pretty much anything they can get their teeth to.

ABC’s

11

Today was pretty quiet. I was looking after Rex the caracal (which involves cleaning his water in the morning and giving him a chicken at night) and John was on Dogs and Ducks – also pretty easy – give them a bit of food and take them for a walk.

6

It was quiet hot so we visited a few of the cub groups, got our clothes a bit more torn, but most were pretty sleepy, which made us sleepy so had a bit of a nap.  So today I’ll dedicate the pics to the ABC’s.

3

Each new litter gets named after a letter of the alphabet, so you can get an idea of how old each litter is based on the lettter their name starts with.

5

In this enclosure there are 3 litters totalling 8 cubs, ranging from about 13 weeks to 9 weeks – with Clarise the youngest and only C being the most boisterous and bitey. She’s also the first to come around to you and want to play and is the smallest (being a C).

1

These guys are quite skittish unless they’re in a pack and takes them awhile to warm up and want to play with you, but when they do they have very sharps teeth and claws.

4

In the morning you get some nice backlit sun on them and they can be quite playful.

9

In the afternoon after lunch they are a lot more chilled as it’s hot and they lay around a lot.

8

In the late afternoon before they get their final feed we can get some nice light in the enclosure and just hope they sit in the right spot for us to take pics.

2

Just on dark they get some more meat and turn into completely different animals. Very vicious and protective of their food.

10

They just play with us like they play with their siblings but our skin isn’t protected but a layer of think skin and fur like theirs so can get quiet painful.

7

They also tend to be messy drinkers. They get meat morning and night and 2 rounds of milk bottles during the day and seem to spill more on themselves and us then they get down their throats most of the time.

Up Close and Personal with a Lion

0

Today the park owner, Peter, had to dart one of the large male lions in order to transport him. Peter darted the lion by himself so as to keep the lion calm but we headed down straight afterwards to assist with carrying the large male lion to the specially made container on the back of Peter’s SUV.

1

As you can imagine the lion was heavy and a little awkward to get through the smallish gates in the enclosure. It did give me an opportunity to see really up close just how big the head of the lion is and the size their paws. Just before loading we got the opportunity to take a couple of shots:

First up, the amazing tongue of a lion. This thing can lick skin off.

23

and next the giant paws, used to kill small animals in a single swipe.

45

Amazing stuff. After the obligatory “yes i was here with an unconscious Lion”, I carried him from his tummy side in the centre btw, we loaded him into the container, Peter administered the reversing agent, closed the door (it is purposely kept dark to put less stress on the lion) and headed off.

67

Swimming with tigers

1

Some people swim with the dolphins, others with the sharks but how many of us get to swim with tigers? After getting up early and sorting out the Tigers today, we were all rewarded at lunchtime with a tiger swim, so today we’ll dedicate the pictures entirely to the awesome tiger swim. Unlike lions, tigers LOVE water. We divided into two groups as there are 5 very boisterous 5 month old tigers. I was a bit hesitant so went for the 2nd group as they have been quite aggressive so I wasn’t so keen to stick my face near their sharp teeth but was reassured after I saw how calm they were in the water.

3

First we had to get the tigers out, and only take two of them. They struggled like crazy but as soon as they hit the water, they were so calm and happy. John went first and got Flippy (named because his ear flips back).

2

456

After a few laps back and forth they started to get a bit cold and started shivering so it was time to take them out and dry them off.

7

Then the fun bit, taking the first two back and getting out the three that haven’t been in the water yet. I missed all the action as I had to jump in the pool ready to “receive” my tiger. He was struggling a lot in John’s arms as he went to hand him to me and then as soon as he touched the water he calmed right down but wasn’t keen to turn around and swim at first so he had a real tight grip around my shoulders.

891012

He did settle down a lot and liked swimming across and then grabbing on with his front feet around my shoulders but then would boxer feet me in the stomach for a bit. He never actually hurt me and was quite gentle and never showed his claws or tried to bite me which is pretty re-assuring when he’s so close to my face!

The afternoon we cut up a bunch of meat and then baby sat the 3 nursery babies for 3 hours. Of course they ran in all different directions and I only have 2 arms so was quite a challenge till others decided it’d be nice to join in. Just like little babies, they ran around a lot, then slept, then repeat … for 3 hours. All the sleeping almost sent me to sleep surrounded by 3 cubs sleeping at my chest/face.

Lions 1, Go Pro 0

6

Today we decided to try out the Go Pro on the dolly with a few of the smaller cubs and then the Go Pro on the hat with the Tigers.

12

At first both groups of cubs were a bit cautious but the pink wheels were too hard to resist. The smaller group of cubs like to chew on the camera and wheels while the older group were a bit more aggressive and preferred to bat the camera with their paws.

5

They had a bit too much fun and didn’t take them long to knock it completely over and a whole bunch of cubs to surround the Go Pro which was when we stepped in to rescue it.

Lunchtime, we went to the Cheetah Lava and had a braai and watch the tigers playing in the big pool.

4

In our spare time we also played with the cubs. John’s pants are completely covered in dried milk from bottle-feeding, so the cubs like to lay on his lap and lick at his pants and then fall asleep on him, which is terribly cute.

78910

While John was running around with the Go Pro, I sat around and took pictures of cute looking cubs.

This afternoon I looked after the nursery cubs. They are very cute, and can’t walk in a straight line for long, but have razor sharp little claws and like to use them to hold onto your hand when they’re drinking which can be a bit painful.

Who let the lions out?

1

Wow…..today was epic! We awoke at 4am to the roar of lions…what a sound! We weren’t assigned to any duties today but we helped out with most of them and am now very tired!

4

We started out cleaning out Rex – the caracal’s cage. He was quite pleasant, and then filling up the tiger’s water trough – which was big with very slow water pressure. Turns out we were supposed to clean out the inside trough aswell. So in we went and straight away let two of the tigers out. They’re only 5 months old but boy were they dirty and strong. Took a bit of effort to catch and then carry them back in. These guys are really playful so I think both of us ended up with new tears in our pants.

2

3

Then we hung out with some of the smaller cubs while everyone else was having breakfast. There’s 12 of these guys so you’re quite overwhelmed with the cuteness.

Next we helped bottlefeed 18 little cubs. Amazing how messy some of them are eating.

8

After lunch we decide it’s time to introduce the tigers to the lion toy. Boy was it a hit! They were a bit scared at first but it didn’t take them long to be fighting over it and playing tug-a-war.

7

The afternoon we followed the feeding tour around and saw all the animals.

910

We were lucky in the afternoon when the adolescent tigers decided to have a bit of a playfight in the pond. Made for great entertainment and photos.

56

We played with the abc’s a bit in the afternoon before stealing a few cuddles with the tiniest cubs.

1211

Then it was evening feeding with the smaller cubs and now we’re ready to crash!

Arrived in Kroonstad

4

This morning we woke up early wanting to head to Monte Casino Bird Park and take a few close-up pics of their awesome birds that we had so much fun with last time in South Africa. Unfortunately the weather had other ideas as it was rainy and miserable looking. So we relaxed around the hotel and then headed off to the airport to catch our bus. We found the bus station at the airport but our bus company wasn’t listed. So we did a lap and were pointed back to where we came from. So we sat down and waited. Eventually the bus turned up and we headed off.

A couple hours later we reach Kroonstad and then off to the supermarket to pick up our food for the next week. Finally we arrive at our home for the next 12 days. Have settled into our room and hoping to getting into the activities tomorrow.

Looking forward to trying out our lion toy on the tigers tomorrow.

The internet coverage is a bit patchy, so while we’ll still try and blog everyday, the actual posting may be a bit random.

Windows 8 Kickstart-Johannesburg

3

Today we delivered our Windows 8 Kicksart 1/2 day workshop to about 45 locals. It’s actually quite a large group to give a workshop to so we completely re-arranged the room to force everyone into groups so they can collaborate on their application ideas. We had a great day, with a wide variety of ideas from areas like sports, events, security etc.

2

The great thing about doing a presentation locally like this is you get to meet some local, like-minded people and see what sorts of challenges they face. The big one here which really hits home with us also, was the availability (or lack of) widely available high speed internet.

Sounds like a few of or attendees are going to come back for our Kinect presentation in a couple of weeks. Should have lots of cool stuff to show them then.

Many thanks to Dave and the local team for organising the day for us to make it a success.

The afternoon involved finding a data sim so we could get some internet on our phone. This proved a lot easier than I was expecting. We just needed our passports and proof of where we were staying. Luckily I had these with us and the helpful guy at MTN set us up.

We’re off on a bus to Kroonstad tomorrow so we’ll see how good the internet coverage is when we’re there as that will dictate how often we can post to here.

Arrived in Johannesburg

1

The morning started very early with a 3:15 am ride to the airport to check in for our flight to Sydney. Before we even checked in the flight was delayed 30 mins (coming in from Dallas Fort Worth).

We weren’t too concerned as this leg was international we’d be on the right side of customs for switching flights to Johannesburg. As we approached Sydney we were put into a holding pattern for landing over Sydney so were delayed another 30 mins. Now I was a lot more anxious – 40 mins to get off the plane, go through security and find our next gate. Once we disembarked we discovered our gate was the other end of the terminal (of course) so it was a very brisk walk for us across the terminal to our gate, right to final boarding and straight into our seat….phew!

I’d paid for us to sit in exit rows to give us more legroom and had spotted a new bunch of seats open up 2 days before the flight that had an exit row with only 2 seats. When we sat down I realised we’d scored premium quality seats just without the premium service – SCORE. It seemed one of the passengers in Premium wasn’t too happy with this and spent about 1 1/2 hours complaining to every flight attendant she could find. Couldn’t quite hear but it definitely looked amusing and provided relief from boredom for the first part of the flight.

Arrived with our luggage in Johannesburg, grabbed our car and off to our hotel. It’s a “Country Estate” about 10ks from the Microsoft Office and has a pretty cool view from the back porch (above picture). Off to Dinner with Dave and Jarrod from DPE Johannesburg and then time to crash for the night after being awake for about 28hrs.

A little break – off to Africa

lion

We’re taking a little time off and heading over to Africa for a few weeks. While we’re there we’re doing a few presentations in Johannesburg. If you’re nearby, come say hello – details are here.

So apologies in advance for the next few weeks of blog posts filled will cute pictures of wildlife but rest assured we’ll be back to our regularly scheduled program again soon :).

Battery life test on portable Kinect

Portable1

Last week we built a battery pack for our Kinect For Windows. This weekend we wanted to make the battery pack and the kinect more portable, and do some testing on the batteries to see how long they last.

Firstly we went back to JayCar and bought a box we could mount the battery pack in to make it easier to carry and less likely we’ll break the tiny wires.

portable2

We mounted part of the cord inside the battery pack so it can’t pull through. This means the cord can take a bit of a tug and not break what’s inside. Ideally we should have added a switch as now it’s always on but the little green light doesn’t seem to pull much power and it’s nice to know it’s working. It looks quite neat now in it’s battery pack. V2 we’d like to get down to a much smaller battery size but for our upcoming trip, this suits us fine.

dolly

We also bought a dolly. It looks like a tiny skateboard. We could mount one of our Manfrotto tripod heads to it’s base and using the Wall Mount Kit with the wall mounting tossed out it makes the Kinect easy to move across the ground.

Now to the fun bit – testing the battery life.  We hooked up the Kinect with it’s battery pack to our computer and ran the Kinect Explorer sample with full colour, depth and skeleton. Out initial calculations led us to believe we could run on batteries for 8 hours. Now our math for this type of thing doesn’t get used often so it was quite possible that we were out by a factor of 10….which could mean it might only last about 48 mins.  So we took voltage readings and checked the Kinect and the Kinect Explorer were still running every 10 mins to make sure it could run for at least 45 mins.

voltage

After 2 hours we then dropped back to 20 min readings and then hourly readings. After 6 hours it was still going and although I’ve seen articles saying people have been able to run on a much lower voltage we didn’t want to test our luck. 6 hours is  a LONG time. Also, the likelyhood we’d ever want 6 hours of video or readings on our trip is EXTREMELY low. The data would be huge and the battery in my Surface would have run out by then anyway.

portable3 

When walking around with the Kinect on the dolly, the battery pack sits in your hand nicely with the Surface on top so you can see what you’re recording. We’re planning on giving a good test with PointStreamer and other Kinect features with some lion cubs in a few weeks. Hoping it’ll make for some interesting video and pictures as long as they don’t chew through our cables in the first minute.

I think VNext will need to be wireless power and data transmission 🙂

 

Windows 8 and Kinect for Windows presentations coming up in South Africa

In a couple of weeks we’re heading over to Africa for a well-deserved break. While we’re there, we’ve lined up a couple of presentations on our favourite topics: Windows 8 and Kinect For Windows. It’s been 2 years since we were last in Johannesburg so we’re looking forward to catching up with a few people and show off come cool tech.  Details for our sessions:

Windows 8 Kick Start Session

Re-imagine your favourite application using Windows8! In this session Bronwen will introduce you to the world of Windows 8 apps and how they are different to the desktop applications you have been familiar with. She will take you through the main controls and navigation patterns to create your next application and show you how to integrate the charms like the search and share. The session will be interactive to help you plan out how you’ll build your great ideas into a killer Windows 8 application.

When: 15 March 2013 9am to 1pm

Where: Microsoft Johannesburg office – 3012 William Nicol Drive Bryanston Johannesburg South Africa

Registration: here

Kinecting the Dots – Developing with the Kinect SDK

The Microsoft Kinect holds the Guiness World Record as the fastest-selling consumer electronics device ever, selling 8 million units in the first 2 months.  With the release of the official SDK, you are the controller, with the ability to change the face of future applications.  Learn how to take advantage of depth sensing, skeletal tracking and sound source localisation in a sub R2000 device in your next project using your current .Net skills.

When: 5 April, 2013 12pm – 1pm

Where: Microsoft Johannesburg office – 3012 William Nicol Drive Bryanston Johannesburg South Africa

Registration: here

 

Making a battery pack for your Kinect

KFW

As you know, we love our Kinect device, but one of the big problems when you want to play with it is that it’s a powered device which means you need to be close to power, or have a really long extension cord which isn’t always convenient. We decided we wanted to make a battery pack so we can take it and and our laptop and not be tied to needing a power point nearby. To build it we had a few criteria:

  1. Cost – something relatively cheap to buy/replenish
  2. Form factor – something that won’t draw too much attention/questions if we want to take it on a plane
  3. Easy build – something we (not electrician) can build relatively easy ourselves.

We settled on making a “AA” powered pack. This would draw no questions at airports and won’t be an issue taking on a plane and the added bonus is if it doesn’t work, the batteries can be used in many other devices. This meant for a normal AA we’d need 8 batteries to make 12 Volts! This could get expensive quickly depending on how quickly they go flat so we decided rechargable AA’s would be more practical in the long term. These however, are only 1.2 V so we needed 10 of them.

Next I wanted to be able to plug back into mains, or car etc if we needed rather than being tied permanently to the battery pack.  So we went to JayCar and got a few bits and pieces that satisfied our needs.  We ended up with:

  1. KFW  – Kinect for Windows device
  2. KinectPower – Exisiting Power plug for the Kinect (we had a US one we could sacrifice happily)
  3. PH9210PH9210 10xAA Side by Side holder
  4. PP0510  – PP0510 2.1mm DC Power Line Female Connector – we bought 2 of these – 1 for the battery pack and 1 for the existing power supply so we could swap back if needed
  5. PS0526PS0526 2.1mm Inline Male DC Power Connector – 1 of these to go on the end of the cable that attaches to the Kinect and the computer.

 

We cut the existing power cable and discovered it’s a brown/white rather than Black/red. Luckily our favourite search engine was able to tell us that brown is positive and white is ground. John then soldered the cables together and checked the amps etc. using a multimeter. Here’s our completed product (we need to tape everything up and maybe put it in a case):

batterypack

 

We tested it first using a Kinect for XBox so I wouldn’t cry as much if it blew up as they are cheaper and much easier to buy in Australia. It all worked great so we did our final test with the Kinect for Windows device hooked to my laptop and I’m happy to say it all worked and survived. We’ll report back on how we go after we road test it and see what sort of up time and success we get from it.

 

Windows Azure Website 32bit and SQL Spatial

azurewebsite

Hit an interesting snag when using Windows Azure Websites recently. We had a solution using MVC4, a bunch of worker roles and did a bit of sql spatial to do intersects, create bouding boxes etc.

Deployed to azure and once we had the correct SQL Server dlls included in the project following Alistair’s great steps we were all good. The workers did their thing and the website was deployed till we tried to do something on the website that used sql spatial…then error!

So after checking, rechecking and checking again we’d deployed the correct dll’s we were a bit baffled. We a bit of investigation on the website and ended up outputting the value of Environment.Is64BitProcess and discovered on the website it was FALSE. What this meant was for our WEBSITE, we had to deploy the 32bit versions of the SQL Spatial dll’s and for EVERYTHING ELSE, deploy the 64bit version. I had a bit of a dig and couldn’t find this wonderful “feature” documented anywhere so hoping this helps someone else in the future.

 

Moving to the standing desk

desk

Over the Xmas break I decided it was time to try moving to a standing desk. Working from home I quite often spend over 12hrs straight sitting at my desk and it can’t be good for me. So off to Ikea we went.

I decided to blatantly copy one if I on this ikea hack. So we got all the bits home and put the legs on the table top and wound it up to the correct height for me and it was WOBBBLY! I really wasn’t confident about putting my gear on it and it being particularly sturdy. The lady from the original hack was significantly shorter than me so my legs were a lot taller.

So I wound the desk down about 20 cm and it was heaps sturdier..hmm..not very useful. So after looking at even more hacks I decided to add a 2nd tier – which mean going back for another top and the bar connectors (very expensive). Back to Ikea we went. The top is a good size and is the limit of what we can fit in the back of the Volvo.

So we ended up buiding a 3-tier desk. It actually works quite well as I can put a bunch of stuff I want to get to but don’t need all the time on the bottom tier. I find having the monitor tier gets the monitor high enough that it isn’t partially covered by my laptop screen – so if nothing else if i ever go back to a sitting desk I’ll put one of these tier on it.

How did I go using it?

The first 2 days, but the end of the day my feet and legs were SORE! I would finish up and go and lay down in bed just to get my feet up. Each day seemed to get easier and easier. Now I find I stand a lot, have a stool nearby to sit 5 mins here and there. If I’m on the phone or writing notes I go find somewhere to sit. So my office couch is getting lots more use now.  I’m finding I feel much more alert when I’m working and my legs and feet tell me when I’ve been working too long. The other night after working for over 12 hours my legs and feet were sore and told me I had to get away and go sit down somewhere.

 

Technorati Tags: ,

Azure Storage 2.0 – Blob Changes

azureblob

I’d started out uploading files into Windows Azure Blog storage with the old sdk based on a few examples I’d seen. After I had it working I refactored, and upgraded my references to use the latest 2.0 Azure Storage 2.0. All of a sudden my code no longer compiles:

var blob = container.GetBlobReference(blobName);

so I change it over to what to me was a logical change to:

var blob = container.GetBlobReferenceFromServer(blobName);

 

This worked ok, except for my cases where i was inserting a new item into the blob. It actually tries to access the blob (so expects it to exist). So for this version the correct method for me was:

var blob = container.GetBlockBlobReference(blobName);

 

 

Technorati Tags:

I’m now a Kinect For Windows MVP

Kinect-For-Windows

I woke up this morning to find I’ve been renewed as a MVP for the 6th year. This year I move over to being a Kinect for Windows MVP which is quite exciting! I’ve changed names a few times in the last 6 years:

  • Live Services MVP – which then merged to
  • Live MVP – then broke off the Bing Maps people into
  • Bing Maps – and now have shifted over to
  • Kinect For Windows.

I’m really looking forward to the MVP Summit this year as the team have been making great progress on the features for the Kinect for Windows SDK

 

Technorati Tags: ,

Knockout JS and Bing Maps

Combining Knockout with Bing Maps Ajax control will give you bindable properties similar to what you may have experienced with the Bing Maps Silverlight control. Further it has a great way to communicate with your JOSN web services. I’ve put together a library that implements a Knockout custom binding for the Bing Maps V7 control. With it you can create a view model with properties like a pin collection, a mapview, the current map type and have the map and any other HTML control simply bind to it. With Knockouts full support for Ajax calls to JSON data it provides a great basis for your next Bing Maps application.

Download the library and example here

Recently I’ve been building some mapping applications back in the HTML/JavaScript world after spending many years with Silverlight. I knew I wanted a better framework then just the usual hand rolled JavaScript loosely following some classes and at the recent DDDBrisbane event Joseph Cooney introduced the Knockout JavaScript library.

What is Knockout?

It’s a well-used, robust JavaScript library that allows you to define a view model and then two-way bind to HTML objects. It has some great stuff in it including templates, even recursive templates (great for your layer panel), observable collections, support for JSON data (including from web services) and more. If you’re looking at building your next rich single page app in HTML and JavaScript you have to check it out.

Checkout the full introduction and great examples here: http://knockoutjs.com/documentation/introduction.html

Bing Maps AJAX Control V7

This is the current control for Bing Maps, you can use it in any browser, combine it with phone gap to power your mobile apps or even use it slightly modified for your Windows8 app. It is modular, fast and a great experience for your users. It is a commercial control with petabytes of data at your disposal, sign up for a developer account here, you will need Your Bing Maps Key to run the examples: https://www.bingmapsportal.com/

Checkout the interactive SDK here if it’s your first time or if you haven’t played with the latest version: http://www.bingmapsportal.com/isdk/ajaxv7

Why would you want to combine Knockout and Bing Maps?

Simple, you want to have a clean view model that you can update from your logic and/or web services and simply have the map react. You want to separate the map’s functionality (UI) from your data and follow a MVVM pattern.

Simple example – binding the map type

You want a set of radio buttons to control the current map type (road, aerial or auto), simple example I know.

The old way: This is how you may implement it currently using some JQuery:

The new way: Instead this is how we do it using Knockout, if you’re following along (there is a full download at the end of the article) clear out all the above script code and reference:

<script
type=”text/javascript”
src=”Scripts/knockout-2.2.0.js”></script>

Step 1, define a view model:

Step 2, create the bing maps custom binding:

Step 3, modify the HTML to use bindings:

Step 4, Bind it up:

As usual something simple like this took far less code the old way, but nothing stays simple for long, later we will add more properties and data but as a quick example, you have a go at adding 3 more maps to the page and synchronise all the maps to same map type. Using the new technique I simply add the 3 divs and bind to the same view model, easy! Not a typical scenario but a good demo of the power of binding.


ADVANCED: Ah so that explains the complex code that is storing each map against the element’s id in the custom binding, this allows us to have many maps on the page all bound to the same or different parts of a view model. But was is _map1Id used for you ask? In the full listing we bind the center, zoom and bounds of the maps, all four maps are synchronised but the bounds as each map maybe a different size can only come from the first map.

Pins

Let’s do something more interesting, let’s have a collection of pins, these could quite happily come from a web service, see http://knockoutjs.com/documentation/plugins-mapping.html, but to keep it simple I’ll just add them to a viewmodel:

Step 1, define a view model:


Step 2a, add a helper to observable array so we can subscribe to changes in the collect, ie when pins get added and removed. This is from Michael Best.


Step 2b, modify the bing maps custom binding using our new helper above:

Step 3, modify the HTML to use bindings:

Step 4, Bind it up, add some data

Pretty cool hey? Note the custom event to add a remove button to the table data, purely optional. Here you can add more functions. I’m sure you’re asking where do I put any interaction logic with the pins, in the createpin() method on your viewmodel you have complete control. This is where you could extend to support polygons and lines.

Full implementation

Currently I’m supporting:

  • Multiple maps on the same page
  • Only bind the properties you want to use
  • Map Type
  • Mapview: centre, zoomlevel and bounds
  • Pins, although not too hard to make this into any entity
  • TileLayers
  • Map Info, 4x4px bounds on the mouse click, handy for tile layers, gives a nice bounds string to pass off to your server for info tooling raster layers
  • Full Options object can be passed in to configure the map how you like.
  • Works really well from JSON web services, trick is to set the collection using the Knockout mapping on an empty array, then load in the data async:
    self.pins = ko.mapping.fromJS([]);

Download the library and example here. If you have any questions or feedback catch me on http://twitter.com/soulsolutions

For completeness here is the full listing for the BingMapsKO.js library as text, feel free to do with it what you like, I’ll put it under Ms-PL license that gives you maximum flexibility to use it however you like. If you enhance it or find a bug feel free to let me know (or not).

//Bing Maps library for KnockoutJS.com

//John O’Brien Soul Solutions 2012-12-31

//Microsoft Public License (Ms-PL)

//See blog post for examples and updates: http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/818/Knockout-JS-and-Bing-Maps.aspx

 

 

//add helper to ko.observableArray

ko.observableArray.fn.subscribeArrayChanged = function (addCallback, deleteCallback) {


var previousValue = undefined;


this.subscribe(function (_previousValue) {

previousValue = _previousValue.slice(0);

}, undefined, ‘beforeChange’);


this.subscribe(function (latestValue) {


var editScript = ko.utils.compareArrays(previousValue, latestValue);


for (var i = 0, j = editScript.length; i < j; i++) {


switch (editScript[i].status) {


case
“retained”:


break;


case
“deleted”:


if (deleteCallback)

deleteCallback(editScript[i].value);


break;


case
“added”:


if (addCallback)

addCallback(editScript[i].value);


break;

}

}

previousValue = undefined;

});

};

 

ko.computed.fn.subscribeArrayChanged = function (addCallback, deleteCallback) {


var previousValue = undefined;


this.subscribe(function (_previousValue) {

previousValue = _previousValue.slice(0);

}, undefined, ‘beforeChange’);


this.subscribe(function (latestValue) {


var editScript = ko.utils.compareArrays(previousValue, latestValue);


for (var i = 0, j = editScript.length; i < j; i++) {


switch (editScript[i].status) {


case
“retained”:


break;


case
“deleted”:


if (deleteCallback)

deleteCallback(editScript[i].value);


break;


case
“added”:


if (addCallback)

addCallback(editScript[i].value);


break;

}

}

previousValue = undefined;

});

};

 

 

ko.bindingHandlers.bingmaps = {

_uniqueid: 0,

_map1id: ,

_map: {},

_entityGeoLookup: {},

_entityLayerLookup: {},

init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {


var _valueAccessor = valueAccessor();

 


if (!_valueAccessor.map) {

alert(‘Map property not set on KO Bing Maps’);


return;

}

 


//create map and store against the element’s ID.


var map = new Microsoft.Maps.Map(element, _valueAccessor.map.options);

ko.bindingHandlers.bingmaps._map[element.id] = map;


if (ko.bindingHandlers.bingmaps._map1id == ) ko.bindingHandlers.bingmaps._map1id = element.id;

 


if (_valueAccessor.map.mapview) {


//check if we need to bind to the event at all


if (_valueAccessor.map.mapview.zoom || _valueAccessor.map.mapview.center || _valueAccessor.map.mapview.bounds) {

Microsoft.Maps.Events.addHandler(map, ‘viewchange’, function (e) {


if (_valueAccessor.map.mapview.zoom) _valueAccessor.map.mapview.zoom(map.getTargetZoom());


if (_valueAccessor.map.mapview.center) _valueAccessor.map.mapview.center(map.getTargetCenter());


//clear the bounds during the animation, only set it at the viewchangeend, for multiple maps only the first map can set the bounds.


if (_valueAccessor.map.mapview.bounds && ko.bindingHandlers.bingmaps._map1id == element.id) _valueAccessor.map.mapview.bounds();

});

}

 


//check if we need to bind to the event at all, for multiple maps only the first map can set the bounds.


if (_valueAccessor.map.mapview.bounds && ko.bindingHandlers.bingmaps._map1id == element.id) {

Microsoft.Maps.Events.addThrottledHandler(map, ‘viewchangeend’, function (e) {

_valueAccessor.map.mapview.bounds(map.getBounds().toNwse());

}, 100);

}

}

 


if (_valueAccessor.maptype) {

Microsoft.Maps.Events.addHandler(map, ‘maptypechanged’, function (e) {

_valueAccessor.maptype(map.getMapTypeId());

});

}

 


if (_valueAccessor.info) {

Microsoft.Maps.Events.addHandler(map, ‘click’, function (e) {


if (_valueAccessor.info) _valueAccessor.info(map.getBoundsFromPixelXY(e.getX(), e.getY()));

});

}

 


if (_valueAccessor.pins) {

_valueAccessor.pins.subscribeArrayChanged(function (data) {


//add


if (_valueAccessor.createPin) {


var geo = _valueAccessor.createPin(data);

map.entities.push(geo);


//add a unique id to the object


if (typeof data.__uniqueid == “undefined”) {

data.__uniqueid = ++ko.bindingHandlers.bingmaps._uniqueid;

}

ko.bindingHandlers.bingmaps._entityGeoLookup[element.id + data.__uniqueid] = geo;

}

}, function (data) {


//delete


if (_valueAccessor.createPin) {


var geo = ko.bindingHandlers.bingmaps._entityGeoLookup[element.id + data.__uniqueid];

map.entities.remove(geo);


delete ko.bindingHandlers.bingmaps._entityGeoLookup[element.id + data.__uniqueid];

}

});

}

 


if (_valueAccessor.layers) {

_valueAccessor.layers.subscribeArrayChanged(function (data) {


//add


if (_valueAccessor.createTileLayer) {


//add a unique id to the object


if (typeof data.__uniqueid == “undefined”) {

data.__uniqueid = ++ko.bindingHandlers.bingmaps._uniqueid;

}


var tilelayer = _valueAccessor.createTileLayer(data);

map.entities.push(tilelayer);

ko.bindingHandlers.bingmaps._entityLayerLookup[element.id + data.__uniqueid] = tilelayer;

}

}, function (data) {


//delete


if (_valueAccessor.createTileLayer) {


var layer = ko.bindingHandlers.bingmaps._entityLayerLookup[element.id + data.__uniqueid];

map.entities.remove(layer);


delete ko.bindingHandlers.bingmaps._entityLayerLookup[element.id + data.__uniqueid];

}

});

}

},

update: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {


var _valueAccessor = valueAccessor(), allBindings = allBindingsAccessor();

 


if (!_valueAccessor.map) {


return;

}


var map = ko.bindingHandlers.bingmaps._map[element.id];

 


if (_valueAccessor.map.mapview) {


var currentTargetCenter = map.getTargetCenter();


var currentCenter = map.getCenter();

 


var zoom = map.getTargetZoom();


if (_valueAccessor.map.mapview.zoom) zoom = parseInt(ko.utils.unwrapObservable(_valueAccessor.map.mapview.zoom()));


var center = currentTargetCenter;


if (_valueAccessor.map.mapview.center) center = ko.utils.unwrapObservable(_valueAccessor.map.mapview.center());


var bounds = ;


if (_valueAccessor.map.mapview.bounds) bounds = ko.utils.unwrapObservable(_valueAccessor.map.mapview.bounds());

 


if (zoom != map.getTargetZoom() || Math.abs(center.latitude – currentTargetCenter.latitude) + Math.abs(center.longitude – currentTargetCenter.longitude) > 0.00001) {

map.setView({ zoom: zoom, center: center });

} else
if (ko.bindingHandlers.bingmaps._map1id == element.id && bounds != && bounds != map.getBounds().toNwse() && zoom == map.getZoom() && Math.abs(center.latitude – currentCenter.latitude) + Math.abs(center.longitude – currentCenter.longitude) < 0.00001) {

map.setView({ bounds: Microsoft.Maps.LocationRect.fromString(bounds) });

}

}

 


if (_valueAccessor.maptype) {


var maptype = ko.utils.unwrapObservable(_valueAccessor.maptype());


if (maptype != map.getMapTypeId()) {

map.setMapType(maptype);

}

}

}

};

 

$(document).ready(function () {


//extension methods 🙂

Microsoft.Maps.LocationRect.prototype.toNwse = function () {


return
this.getNorth().toFixed(5) + ‘,’ + this.getWest().toFixed(5) + ‘,’ + this.getSouth().toFixed(5) + ‘,’ + this.getEast().toFixed(5);

};

 

Microsoft.Maps.Map.prototype.getBoundsFromPixelXY = function (x, y) {


var r = Microsoft.Maps.LocationRect.fromCorners(


this.tryPixelToLocation(new Microsoft.Maps.Point(x – 2, y – 2)),


this.tryPixelToLocation(new Microsoft.Maps.Point(x + 2, y + 2)));


return r.toNwse();

};

});

Unobtrusive Validation and KnockoutJS form submit

I’ve been playing with some MVC4, Knockout JS and some unobtrusive validation, specifically I was trying to replicate the Grid Editor Example.

 

I had a problem with the example when I had:

$("form").validate({ submitHandler: function () {
    viewModel.save();
} });

 

It would still call the viewModel.save(), which would in term post my data back to the server even if I had errors. This worked “ok” in most cases as my model validation picked up most things, but if for example I’d put a string in a number field, that’s when everything came to a screaming halt.

After a bit of poking around I found that changing the previous statement for this one made everything happy again:

$.validator.setDefaults({ submitHandler: function() {
             viewModel.save();
        } });

 

DDDBrisbane 2012 Wrapup

1

Yesterday over 100 of Brisbane’s keenest developers descended upon QUT for the 2012 DDD Brisbane.

2

3

4

The doors opened at QUT at 7:45 and we had a bunch of people keen to get inside and out of what was a very hot day. After registation and handing out the bags and swag it was off to the sessions.

5_patick_marice

 6

7

First session we had Maurice/Patrick, Rod and Robert.

33drinks

While the first session was on Dave and I did an ice run and cleaned Coles out all their bagged ice. Wanted to make sure it was back and in the esky in time for the first break as we know people would been keen for an icy cold drink on such a hot day.

8_brendan

9_kay

 10

2nd round of sessions we had Brendan, Kay and Andrew.

11

12_adam

 12_maurice

3rd session and standing between the attendees and the food was Bydren, Adam and Maurice.

34_pizza

35sub

 36sub

Then the all important lunch! Amazing how much food a crowd can eat through : 45 pizzas, 8 plates of subway and 9 platters of sushi!

13

14_william

15_patick

Now that everyone was full and happy, back to session 4  with Liam, William and Patrick.

13_a_postlunch

While we were cleaning up after lunch, the swag was memorised by John’s surface.

16

17

18_joseph

Session 5 we had  Philip, Andrew and Joseph.

19_

20_eric 

For the last session of the day we were very lucky to have Brian Beckman and Erik Meijer as our special guest speakers!

21_crowd

They were very entertaining and had the crowd in lots of laughter as they recreated Linq in Mathematica.

22_prizes

Finally, Damian ran through the 18 prizes donated by all our kind sponsors. David from Infragistics also gave out an extra impromptu license suit to one of the attendees who helped out with some of the mathematica demo.

What a excitement filled day! It wouldn’t have happened of course without our great sponsors, the great speakers, the attendees and Damian heading up the organisation and of course Lin, David, and John helping out with all those extra tasks before and during the day. Thanks EVERYONE!

Here’s hoping next year’s is bigger and better yet!

If you’re keen to see the rest of the pics we took, check out our smugmug album.

Phone Gap and orientation resizing

Phonegap-LogoMy little application was put on hold for awhile for testing, feedback etc. and in that time PhoneGap released a bunch of new versions. So today I updated to version 2.2.0. It was quite different to 1.9 that I had been using so took a bit of re-jigging to get back to running state again.

I’d previously had it working well but just before I sent for submission I realised my orientation resizing was broken. I could start in an orientation and it’d look great but if i started in portrait and moved to landscape i’d get big black areas or if i started in landscape i’d lose 1/2 my menu. Oddly, this was just supposed to work and after much head-scratching this is what I changed:

This is the default meta tag I got from phonegap:

<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, target-densitydpi=device-dpi" />

and this is what I changed it to after reading a bunch of other posts, comments and trial and error:

<meta name="viewport" content="width=device-width, minimum-scale=1.0,  maximum-scale=1.0"/>

Technorati Tags: ,,

DDD Brisbane – 1 December at QUT

dddbrisbaneAfter a sell-out conference last year, DDD Brisbane is back! This year we’ve got more space and more swag and of course more content for DDD Brisbane 2012.

We’ve got a great agenda this year with special guess speakers borrowed from YOW: Erik Meijer and Brian Beckman

dddagenda

Held on December 1 at QUT Gardens Point campus, for $25 (discouts available for students) you get a full day of sessions, lunch and a great place to learn and network.

Tickets can be purchases here.

 

Technorati Tags:

Windows 8 Workshop Roundup

Win8Workshop

On the 14th November we held our Windows 8 Kickstart Workshop at the Edge. I’d been to the edge on a few other occasions but have never been into this particular lab before.  It was a great room that meant the attendees could easily look at me talking away at either end of the room but the setup also encouraged them to chat to each other.

We had a fair mix of people each with a completely different app idea. I think this is the first time I haven’t seen any overlap! It was a good group size – not too small yet small enough I could spend time with people who had questions etc.

Win8WorkshopMontiors

I brought along all my shiny toys. I had my laptop, my build slate and my shiny new surface. The surface proved popular with most people wanting to get a bit hands on with the new device. The room had a big Sony TV which meant I was able to plug in the devices and show features off in full HD.

Win8WorkshopWinner

The last part of the day interested attendees pitched their app idea for a chance to win a xbox/kinect bundle. It was great to see some great pitches with awesome gestures that made me feel like I was using their app. Andrew (pictured above) took out the prize with his app idea that he has a working prototype for. Andrew is a student and I really hope to see his app idea entered in the 2013 Imagine Cup!

Thanks to Emily and the staff at the Edge for having us for the day and of course to the attendees that made it a fun day for me also.