﻿<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Soul Solutions</title>
    <description>Tips and Tricks as we come across them</description>
    <link>http://www.soulsolutions.com.au/Blog/tabid/73/BlogId/1/Default.aspx</link>
    <language>en-AU</language>
    <webMaster>John@soulsolutions.com.au</webMaster>
    <pubDate>Sat, 04 Feb 2012 22:05:38 GMT</pubDate>
    <lastBuildDate>Sat, 04 Feb 2012 22:05:38 GMT</lastBuildDate>
    <docs>http://backend.userland.com/rss</docs>
    <generator>Blog RSS Generator Version 3.5.0.35082</generator>
    <item>
      <title>Aligning a Kinect Skeleton with the Video or Depth images</title>
      <description>&lt;p&gt;&lt;img src="/Portals/0/JohnWeeGo.jpg" /&gt;The most asked for snippet of code at our recent workshop that I didn’t have was how to properly align a Kinect skeleton to either the Video image or the depth image. It turns out this is non trivial and most samples that just scale all three items to fit the screen are wrong. I took the time this weekend to make a good sample for others to follow. If you just want the two snippets scroll to the very bottom of the article otherwise continue reading for a full walkthrough, it starts with &lt;a href="http://www.soulsolutions.com.auhttp://www.soulsolutions.com.au/Blog/tabid/73/EntryId/768/Kinect-beta2-clean-wpf-code-and-getting-started.aspx" target="_blank"&gt;Kinect Beta2 clean WPF code&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.soulsolutions.com.au/Portals/0/Blog/Files/1/770/Windows-Live-Writer-Aligning-a-Kinect-Skeleton-with-the-Vide_CDA1-KinectSkeleonAlignment_2.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="KinectSkeleonAlignment" border="0" alt="KinectSkeleonAlignment" src="/Portals/0/Blog/Files/1/770/Windows-Live-Writer-Aligning-a-Kinect-Skeleton-with-the-Vide_CDA1-KinectSkeleonAlignment_thumb.jpg" width="604" height="159" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.soulsolutions.com.auhttp://www.soulsolutions.com.auhttp://www.soulsolutions.com.au/examples/videoskeleton.zip" target="_blank"&gt;Download the full code here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The two key methods we are going to use are:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;Microsoft.Research.Kinect.Nui.SkeletonEngine.SkeletonToDepthImage(Microsoft.Research.Kinect.Nui.Vector, &lt;span class="kwrd"&gt;out&lt;/span&gt; &lt;span class="kwrd"&gt;float&lt;/span&gt;, &lt;span class="kwrd"&gt;out&lt;/span&gt; &lt;span class="kwrd"&gt;float&lt;/span&gt;)
Microsoft.Research.Kinect.Nui.Camera.GetColorPixelCoordinatesFromDepthPixel(Microsoft.Research.Kinect.Nui.ImageResolution, Microsoft.Research.Kinect.Nui.ImageViewArea, &lt;span class="kwrd"&gt;int&lt;/span&gt;, &lt;span class="kwrd"&gt;int&lt;/span&gt;, &lt;span class="kwrd"&gt;short&lt;/span&gt;, &lt;span class="kwrd"&gt;out&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt;, &lt;span class="kwrd"&gt;out&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt;)&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;To make this super easy for you to drop into your project I’m going to put this scaling into my &lt;a href="http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/733/Skeleton-Custom-Control-for-Kinect-SDK-WPF.aspx" target="_blank"&gt;skeleton control&lt;/a&gt; and let you choose by setting a mode. In order to scale to the depth image or the video image you need to do up to 3 things:&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Set the ScaleMode property to ToFill, ToDepth, ToVideo &lt;/li&gt;

  &lt;li&gt;Set reference to the Kinect Runtime being used, set property Runtime. &lt;/li&gt;

  &lt;li&gt;(Video only) We need the Depth PlanerImage, pass into method DepthImage. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;For example let use WPF binding to do this and switch using a radio button. Here is the XAML:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;Window&lt;/span&gt; &lt;span class="attr"&gt;x:Class&lt;/span&gt;&lt;span class="kwrd"&gt;="VideoSkeleton.MainWindow"&lt;/span&gt;
        &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;/span&gt;
        &lt;span class="attr"&gt;xmlns:x&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/winfx/2006/xaml"&lt;/span&gt; 
        &lt;span class="attr"&gt;xmlns:Skeleton&lt;/span&gt;&lt;span class="kwrd"&gt;="clr-namespace:SoulSolutions.Kinect.Controls.Skeleton;assembly=SoulSolutions.Kinect.Controls.Skeleton"&lt;/span&gt; 
        &lt;span class="attr"&gt;xmlns:VideoSkeleton&lt;/span&gt;&lt;span class="kwrd"&gt;="clr-namespace:VideoSkeleton"&lt;/span&gt; 
        &lt;span class="attr"&gt;Title&lt;/span&gt;&lt;span class="kwrd"&gt;="Kinect Nui Video Skeletons"&lt;/span&gt; &lt;span class="attr"&gt;WindowStartupLocation&lt;/span&gt;&lt;span class="kwrd"&gt;="CenterScreen"&lt;/span&gt; &lt;span class="attr"&gt;SizeToContent&lt;/span&gt;&lt;span class="kwrd"&gt;="WidthAndHeight"&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;Window.Resources&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;VideoSkeleton:EnumConverter&lt;/span&gt; &lt;span class="attr"&gt;x:Key&lt;/span&gt;&lt;span class="kwrd"&gt;="EnumConverter"&lt;/span&gt; &lt;span class="kwrd"&gt;/&gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&lt;/&lt;/span&gt;&lt;span class="html"&gt;Window.Resources&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="layoutRoot"&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;="1024"&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="768"&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;Image&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="screenImage"&lt;/span&gt; &lt;span class="kwrd"&gt;/&gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;Skeleton:SkeletonControl&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="skeleton"&lt;/span&gt; &lt;span class="attr"&gt;ScaleMode&lt;/span&gt;&lt;span class="kwrd"&gt;="{Binding ScaleMode, Mode=TwoWay}"&lt;/span&gt; &lt;span class="attr"&gt;Runtime&lt;/span&gt;&lt;span class="kwrd"&gt;="{Binding Nui}"&lt;/span&gt; &lt;span class="attr"&gt;BoneFill&lt;/span&gt;&lt;span class="kwrd"&gt;="Blue"&lt;/span&gt; &lt;span class="kwrd"&gt;/&gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;StackPanel&lt;/span&gt; &lt;span class="attr"&gt;Orientation&lt;/span&gt;&lt;span class="kwrd"&gt;="Vertical"&lt;/span&gt; &lt;span class="attr"&gt;HorizontalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Right"&lt;/span&gt; &lt;span class="attr"&gt;VerticalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Bottom"&lt;/span&gt; &lt;span class="attr"&gt;Background&lt;/span&gt;&lt;span class="kwrd"&gt;="White"&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;="8,8,8,8"&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;RadioButton&lt;/span&gt; &lt;span class="attr"&gt;Content&lt;/span&gt;&lt;span class="kwrd"&gt;="Fill"&lt;/span&gt; &lt;span class="attr"&gt;IsChecked&lt;/span&gt;&lt;span class="kwrd"&gt;="{Binding ElementName=skeleton, Path=ScaleMode, Converter={StaticResource EnumConverter}, Mode=TwoWay, ConverterParameter=ToFill}"&lt;/span&gt; &lt;span class="kwrd"&gt;/&gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;RadioButton&lt;/span&gt; &lt;span class="attr"&gt;Content&lt;/span&gt;&lt;span class="kwrd"&gt;="Depth"&lt;/span&gt; &lt;span class="attr"&gt;IsChecked&lt;/span&gt;&lt;span class="kwrd"&gt;="{Binding ElementName=skeleton, Path=ScaleMode, Converter={StaticResource EnumConverter}, Mode=TwoWay, ConverterParameter=ToDepth}"&lt;/span&gt; &lt;span class="kwrd"&gt;/&gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;RadioButton&lt;/span&gt; &lt;span class="attr"&gt;Content&lt;/span&gt;&lt;span class="kwrd"&gt;="Video"&lt;/span&gt; &lt;span class="attr"&gt;IsChecked&lt;/span&gt;&lt;span class="kwrd"&gt;="{Binding ElementName=skeleton, Path=ScaleMode, Converter={StaticResource EnumConverter}, Mode=TwoWay, ConverterParameter=ToVideo}"&lt;/span&gt; &lt;span class="kwrd"&gt;/&gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&lt;/&lt;/span&gt;&lt;span class="html"&gt;StackPanel&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&lt;/&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/&lt;/span&gt;&lt;span class="html"&gt;Window&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;The “screenImage” we will set in code to be the depth or vide image, the “skeleton” is the control, more on how it works below, and the radio buttons use element binding to set the ScaleMode (a simple EnumConverter makes the binding magic work).&lt;/p&gt;

&lt;p&gt;The code behind (XAML.cs) looks like this:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.ComponentModel;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Linq;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows;
&lt;span class="kwrd"&gt;using&lt;/span&gt; Coding4Fun.Kinect.Wpf;
&lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Research.Kinect.Nui;
&lt;span class="kwrd"&gt;using&lt;/span&gt; SoulSolutions.Kinect.Controls.Skeleton;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; VideoSkeleton
{
    &lt;span class="rem"&gt;/// &lt;summary&gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// Interaction logic for MainWindow.xaml&lt;/span&gt;
    &lt;span class="rem"&gt;/// &lt;/summary&gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; MainWindow : Window, INotifyPropertyChanged 
    {
        &lt;span class="kwrd"&gt;private&lt;/span&gt; InteropBitmapHelper imageHelper;

        &lt;span class="kwrd"&gt;private&lt;/span&gt; Runtime nui;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; Runtime Nui
        {
            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; nui; }
            set
            {
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (nui != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
                {
                    &lt;span class="rem"&gt;//dispose all events and unintialise&lt;/span&gt;
                    nui.VideoFrameReady -= NuiVideoFrameReady;
                    nui.DepthFrameReady -= NuiDepthFrameReady;
                    nui.SkeletonFrameReady -= NuiSkeletonFrameReady;

                    nui.Uninitialize();
                }
                nui = &lt;span class="kwrd"&gt;value&lt;/span&gt;;

                &lt;span class="kwrd"&gt;if&lt;/span&gt; (nui != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
                {
                    &lt;span class="rem"&gt;//wire up events and initialise&lt;/span&gt;

                    &lt;span class="rem"&gt;//step 1 events&lt;/span&gt;
                    nui.VideoFrameReady += NuiVideoFrameReady;
                    nui.DepthFrameReady += NuiDepthFrameReady;
                    nui.SkeletonFrameReady += NuiSkeletonFrameReady;

                    &lt;span class="rem"&gt;//step 2 initialise&lt;/span&gt;
                    nui.Initialize(RuntimeOptions.UseColor | RuntimeOptions.UseDepth | RuntimeOptions.UseSkeletalTracking);

                    &lt;span class="rem"&gt;//step 3 open streams / settings&lt;/span&gt;
                    nui.VideoStream.Open(ImageStreamType.Video, 2, ImageResolution.Resolution640x480, ImageType.Color);
                    nui.DepthStream.Open(ImageStreamType.Depth, 2, ImageResolution.Resolution640x480, ImageType.Depth);

                    &lt;span class="rem"&gt;//Must set to true and set after call to Initialize&lt;/span&gt;
                    nui.SkeletonEngine.TransformSmooth = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
                }
                OnPropertyChanged(&lt;span class="str"&gt;"Nui"&lt;/span&gt;);
            }
        }

        &lt;span class="kwrd"&gt;private&lt;/span&gt; SkeletonScaleMode scaleMode;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; SkeletonScaleMode ScaleMode
        {
            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; scaleMode; }
            set
            {
                scaleMode = &lt;span class="kwrd"&gt;value&lt;/span&gt;;
                &lt;span class="rem"&gt;//clean up background images&lt;/span&gt;
                screenImage.Source = &lt;span class="kwrd"&gt;null&lt;/span&gt;;
                imageHelper = &lt;span class="kwrd"&gt;null&lt;/span&gt;;
                OnPropertyChanged(&lt;span class="str"&gt;"ScaleMode"&lt;/span&gt;);
            }
        }

        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; NuiDepthFrameReady(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, ImageFrameReadyEventArgs e)
        {
            skeleton.DepthImage = e.ImageFrame.Image;
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (ScaleMode != SkeletonScaleMode.ToDepth) &lt;span class="kwrd"&gt;return&lt;/span&gt;;

            &lt;span class="rem"&gt;//Use Coding4Fun extension method on ImageFrame class for Depth&lt;/span&gt;
            screenImage.Source = e.ImageFrame.ToBitmapSource();
        }

        &lt;span class="kwrd"&gt;void&lt;/span&gt; NuiSkeletonFrameReady(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, SkeletonFrameReadyEventArgs e)
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (e.SkeletonFrame == &lt;span class="kwrd"&gt;null&lt;/span&gt;) &lt;span class="kwrd"&gt;return&lt;/span&gt;;
           
            SkeletonFrame allSkeletons = e.SkeletonFrame;
            
            &lt;span class="rem"&gt;//get the first tracked skeleton&lt;/span&gt;
            var skeletonData = (from s &lt;span class="kwrd"&gt;in&lt;/span&gt; allSkeletons.Skeletons
                                &lt;span class="kwrd"&gt;where&lt;/span&gt; s.TrackingState == SkeletonTrackingState.Tracked
                                select s).FirstOrDefault();

            &lt;span class="kwrd"&gt;if&lt;/span&gt; (skeletonData == &lt;span class="kwrd"&gt;null&lt;/span&gt;) &lt;span class="kwrd"&gt;return&lt;/span&gt;;

            skeleton.SkeletonData = skeletonData;
        }

        &lt;span class="kwrd"&gt;void&lt;/span&gt; NuiVideoFrameReady(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, ImageFrameReadyEventArgs e)
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (ScaleMode != SkeletonScaleMode.ToVideo) &lt;span class="kwrd"&gt;return&lt;/span&gt;;

            PlanarImage planarImage = e.ImageFrame.Image;

            &lt;span class="rem"&gt;//An interopBitmap is a WPF construct that enables resetting the Bits of the image.&lt;/span&gt;
            &lt;span class="rem"&gt;//This is more efficient than doing a BitmapSource.Create call every frame.&lt;/span&gt;
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (imageHelper == &lt;span class="kwrd"&gt;null&lt;/span&gt;)
            {
                imageHelper = &lt;span class="kwrd"&gt;new&lt;/span&gt; InteropBitmapHelper(planarImage.Width, planarImage.Height, planarImage.Bits);
                screenImage.Source = imageHelper.InteropBitmap;
            }
            &lt;span class="kwrd"&gt;else&lt;/span&gt;
            {
                imageHelper.UpdateBits(planarImage.Bits);
            }
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; MainWindow()
        {
            InitializeComponent();
            Closed += WindowClosed;
            Loaded += WindowLoaded;

            layoutRoot.DataContext = &lt;span class="kwrd"&gt;this&lt;/span&gt;;
        }

        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; WindowLoaded(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)
        {
            Runtime.Kinects.StatusChanged += KinectsStatusChanged;
            Nui = Runtime.Kinects.Where(k =&gt; k.Status == KinectStatus.Connected).FirstOrDefault();
        }

        &lt;span class="kwrd"&gt;void&lt;/span&gt; KinectsStatusChanged(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, StatusChangedEventArgs e)
        {
            &lt;span class="rem"&gt;//ignore the case where a 2nd kinect is connected while we are using the 1st kinect.&lt;/span&gt;
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (Nui != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;&amp; Nui.InstanceName != e.KinectRuntime.InstanceName) &lt;span class="kwrd"&gt;return&lt;/span&gt;;

            Nui = Runtime.Kinects.Where(k =&gt; k.Status == KinectStatus.Connected).FirstOrDefault();
        }

        &lt;span class="kwrd"&gt;void&lt;/span&gt; WindowClosed(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)
        {
            Runtime.Kinects.StatusChanged -= KinectsStatusChanged;
            Nui = &lt;span class="kwrd"&gt;null&lt;/span&gt;;
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;event&lt;/span&gt; PropertyChangedEventHandler PropertyChanged;

        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; OnPropertyChanged(&lt;span class="kwrd"&gt;string&lt;/span&gt; propertyName)
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (PropertyChanged != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
            {
                PropertyChanged(&lt;span class="kwrd"&gt;this&lt;/span&gt;, &lt;span class="kwrd"&gt;new&lt;/span&gt; PropertyChangedEventArgs(propertyName));
            }
        }
    }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;If you have read the &lt;a href="http://www.soulsolutions.com.auhttp://www.soulsolutions.com.au/Blog/tabid/73/EntryId/768/Kinect-beta2-clean-wpf-code-and-getting-started.aspx" target="_blank"&gt;Kinect Beta2 clean WPF code&lt;/a&gt; post this will look very familiar. The changes to make this work are:&lt;/p&gt;

&lt;h3&gt;INotifyPropertyChanged &lt;/h3&gt;

&lt;p&gt;Really simple trick to allow us to bind in XAML to properties in the code behind is to implement INotifyPropertyChanged and raise PropertyChanged events, this lets us wire up the Kinect Runtime and the ScaleMode properties with ease.&lt;/p&gt;

&lt;h3&gt;ScaleMode&lt;/h3&gt;

&lt;p&gt;This property is bound to the skeleton control’s  property of the same name, we will use it to know what background image to show, nothing, video or depth.&lt;/p&gt;

&lt;h3&gt;NuiDepthFrameReady&lt;/h3&gt;

&lt;p&gt;Here we do two new things, first we pass the depth data to the skeleton control, it needs this to align the depth values to the colour vide image. Second we render the depth as the background only if we are in the Scale ToDepth mode.&lt;/p&gt;

&lt;h3&gt;NuiVideoFrameReady&lt;/h3&gt;

&lt;p&gt;Similar to the depth event handler we only render the video image if we are in the Scale ToVideo mode.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.soulsolutions.com.auhttp://www.soulsolutions.com.auhttp://www.soulsolutions.com.au/examples/videoskeleton.zip" target="_blank"&gt;Download the full code here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Changes made to the Skeleton Control to support this?&lt;/h2&gt;

&lt;p&gt;Things get a little more tricky here but with this good example I sure you’ll follow and be enhancing this for your project in no time. Firstly we’ve added three new properties:&lt;/p&gt;

&lt;p&gt;Runtime, Here we need the Kinect Runtime so we can do the conversions.&lt;/p&gt;

&lt;p&gt;ScaleMode, new enum this lets the user set what type of scaling they want.&lt;/p&gt;

&lt;p&gt;DepthImage, you need to pass in the most recent Depth planer image available to let us convert depth to video.&lt;/p&gt;

&lt;p&gt;All the magic happens in the old SetUiPosition method, a big switch statement applied the correct logic for each mode, let’s review each in turn:&lt;/p&gt;

&lt;h3&gt;ToFill&lt;/h3&gt;

&lt;p&gt;Scale the skeleton to best fit the size of the control. Use the Coding4Fun helper as usual&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (ActualWidth == 0 || ActualHeight == 0) &lt;span class="kwrd"&gt;return&lt;/span&gt;;

var scaledJoint = joint.ScaleTo((&lt;span class="kwrd"&gt;int&lt;/span&gt;) ActualWidth, (&lt;span class="kwrd"&gt;int&lt;/span&gt;) ActualHeight, 1f, 1f);

&lt;span class="rem"&gt;//center in control&lt;/span&gt;
Canvas.SetLeft(ui, scaledJoint.Position.X - ui.ActualWidth/2);
Canvas.SetTop(ui, scaledJoint.Position.Y - ui.ActualHeight/2);&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;ToDepth&lt;/h3&gt;

&lt;p&gt;Convert the vector to the corresponding depth image pixel then scale to fit the control.&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (Runtime == &lt;span class="kwrd"&gt;null&lt;/span&gt; || DepthImage == &lt;span class="kwrd"&gt;null&lt;/span&gt;) &lt;span class="kwrd"&gt;return&lt;/span&gt;; 

Runtime.SkeletonEngine.SkeletonToDepthImage(joint.Position, &lt;span class="kwrd"&gt;out&lt;/span&gt; depthX, &lt;span class="kwrd"&gt;out&lt;/span&gt; depthY);
depthPixelX = (&lt;span class="kwrd"&gt;int&lt;/span&gt;) Math.Max(0, Math.Min(depthX * DepthImage.Value.Width, DepthImage.Value.Width-1));
depthPixelY = (&lt;span class="kwrd"&gt;int&lt;/span&gt;) Math.Max(0, Math.Min(depthY * DepthImage.Value.Height, DepthImage.Value.Height-1));

&lt;span class="rem"&gt;//scale to actual size of control&lt;/span&gt;
Canvas.SetLeft(ui, depthPixelX * (ActualWidth / DepthImage.Value.Width));
Canvas.SetTop(ui, depthPixelY * (ActualHeight / DepthImage.Value.Height));&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;ToVideo&lt;/h3&gt;

&lt;p&gt;Convert the vector to the corresponding depth image pixel, then convert to the colour pixel, then scale to fit the control&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (Runtime == &lt;span class="kwrd"&gt;null&lt;/span&gt; || Runtime.VideoStream == &lt;span class="kwrd"&gt;null&lt;/span&gt; || DepthImage == &lt;span class="kwrd"&gt;null&lt;/span&gt;) &lt;span class="kwrd"&gt;return&lt;/span&gt;;

Runtime.SkeletonEngine.SkeletonToDepthImage(joint.Position, &lt;span class="kwrd"&gt;out&lt;/span&gt; depthX, &lt;span class="kwrd"&gt;out&lt;/span&gt; depthY);
depthPixelX = (&lt;span class="kwrd"&gt;int&lt;/span&gt;) Math.Max(0, Math.Min(depthX * DepthImage.Value.Width, DepthImage.Value.Width-1));
depthPixelY = (&lt;span class="kwrd"&gt;int&lt;/span&gt;) Math.Max(0, Math.Min(depthY * DepthImage.Value.Height, DepthImage.Value.Height-1));
&lt;span class="kwrd"&gt;int&lt;/span&gt; colourX;
&lt;span class="kwrd"&gt;int&lt;/span&gt; colourY;
var viewArea = &lt;span class="kwrd"&gt;new&lt;/span&gt; ImageViewArea
{
    CenterX = 0,
    CenterY = 0,
    Zoom = ImageDigitalZoom.Zoom1x
};

&lt;span class="kwrd"&gt;int&lt;/span&gt; index = (depthPixelY * DepthImage.Value.Width + depthPixelX) * 2;
var depthValue = (&lt;span class="kwrd"&gt;short&lt;/span&gt;)(DepthImage.Value.Bits[index] | (DepthImage.Value.Bits[index + 1] &lt;&lt; 8));
Runtime.NuiCamera.GetColorPixelCoordinatesFromDepthPixel(Runtime.VideoStream.Resolution, viewArea, depthPixelX, depthPixelY, depthValue, &lt;span class="kwrd"&gt;out&lt;/span&gt; colourX, &lt;span class="kwrd"&gt;out&lt;/span&gt; colourY);

&lt;span class="rem"&gt;//bug in Kinect SDK? Seems to assume depth is 320x240, half of colour image&lt;/span&gt;
&lt;span class="kwrd"&gt;if&lt;/span&gt; (DepthImage.Value.Width == 640)
{
    colourX = colourX / 2;
    colourY = colourY / 2;
}

&lt;span class="rem"&gt;//scale to actual size of control&lt;/span&gt;
Canvas.SetLeft(ui, colourX * (ActualWidth / Runtime.VideoStream.Width));
Canvas.SetTop(ui, colourY * (ActualHeight / Runtime.VideoStream.Height));&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;h2&gt;Comments&lt;/h2&gt;

&lt;p&gt;As you can see it is not as simple or as clean as you like, a simple extension method to the Joint would be ideal, instead we need access to the Runtime itself to get the depth pixel and a depth image frame to get the colour pixel. Lastly during testing I found that 640x480 video with 320x240 depth worked fine, but up the depth to 640x480 and the whole thing was off, hence the fix, weird. You may have noticed this all works with/without the playerindex being captured in the depth stream but even with that off it fails for colour image about 640x480. I don’t see why this shouldn’t work with 1280x1024 image but it doesn’t. Let’s hope this all gets addressed for the next beta but until then feel free to use the code from this article in any form.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.soulsolutions.com.auhttp://www.soulsolutions.com.auhttp://www.soulsolutions.com.au/examples/videoskeleton.zip" target="_blank"&gt;Download the full code here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Question / Comment? Catch me on &lt;a href="http://twitter.com/soulsolutions"&gt;http://twitter.com/soulsolutions&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/770/Aligning-a-Kinect-Skeleton-with-the-Video-or-Depth-images.aspx</link>
      <comments>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/770/Aligning-a-Kinect-Skeleton-with-the-Video-or-Depth-images.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/770/Aligning-a-Kinect-Skeleton-with-the-Video-or-Depth-images.aspx</guid>
      <pubDate>Sun, 18 Dec 2011 05:44:40 GMT</pubDate>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://www.soulsolutions.com.au/DesktopModules/Blog/Trackback.aspx?id=770</trackback:ping>
    </item>
    <item>
      <title>Make your room larger for playing Kinect with Nyko Zoom</title>
      <description>&lt;p&gt;&lt;a href="http://www.soulsolutions.com.au/Portals/0/Blog/Files/1/769/Windows-Live-Writer-6967c0e12e86_9B19-nykozoom_4.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="nykozoom" border="0" alt="nykozoom" align="left" src="/Portals/0/Blog/Files/1/769/Windows-Live-Writer-6967c0e12e86_9B19-nykozoom_thumb_1.jpg" width="550" height="379" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="/Portals/0/BronwenWeeGo.jpg" /&gt;We have a decent sized play area for our Kinect but do find with 2 players we need to shift a bit of furniture and can get a bit dangerous when the person you’re playing against is 6’4” and has a really long arm span in some of the games. When we’re playing with the KinectSDK we often want to get a bit closer to the kinect for some of our tests than what it allows at the moment.&lt;/p&gt;  &lt;p&gt;Decided to buy a &lt;a href="http://www.nyko.com/products/product-detail/?name=Zoom" target="_blank"&gt;Nyko Zoom&lt;/a&gt; and see what effect it had. I’d seen the ads for them and have been keen to see how much putting a lense over the Kinect messes with the optics/sizes etc. EBGames are selling them in store at the moment for $40. It’s really easy to mount to the Kinect and even comes with a protective bit of plastic if you’re planning on taking the lense on and off a bit. It slots on well and easy to tell if you’ve put it in the right spot.&lt;/p&gt;  &lt;h2&gt;Zoom with XBox and Kinect&lt;/h2&gt;  &lt;p&gt;First I tried it on our Kinect we use on our XBox with the classic “Kinect Adventures”. I found at the borders of the 2 zone space I got about 30cm extra I could come forward and to each side. While it’s not a massive improvement, it does mean we’re well clear of the furniture when we need to stretch from front to back and should give me an extra bit of room when I play any of the games against someone tall.&lt;/p&gt;  &lt;p&gt;In the one player zone space I found I could get quite a bit further forward but I then ran into trouble with the projector and the top of my head casting shadows over the screen. So the 1 player zone should work quite well on smaller children who seem to like to get really close to the screen. Think we might give it a good test over Christmas &lt;img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="/Portals/0/Blog/Files/1/769/Windows-Live-Writer-6967c0e12e86_9B19-wlEmoticon-smile_2.png" /&gt;&lt;/p&gt;  &lt;p&gt;I think it could be really handy if you don’t quite have enough space for your Kinect with your XBox at home.&lt;/p&gt;  &lt;h2&gt;Zoom with PC and Kinect SDK&lt;/h2&gt;  &lt;p&gt;Next up…what does it do for us when we move it to the pc with the Kinect SDK. At the closest point, the depth camera now allowed me to get about 30-40 cm closer to the Kinect before it couldn’t see me anymore. At the furthest point I lose about 1.2 metres in depth.  Not surprising, but it also distorts all the measurements. It picks up all the depth and skeleton information just fine, but instead of thinking I’m 180cm tall it thinks I’m about 140. &lt;/p&gt;  &lt;p&gt;I think this could be really handy if you need to be able to use the sensor at closer ranges as long as you don’t need to use the height etc. data straight from the Kinect.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:85387861-e119-415c-96c0-19070d37c640" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Kinect" rel="tag"&gt;Kinect&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Nyko+Zoom" rel="tag"&gt;Nyko Zoom&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/769/Make-your-room-larger-for-playing-Kinect-with-Nyko-Zoom.aspx</link>
      <comments>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/769/Make-your-room-larger-for-playing-Kinect-with-Nyko-Zoom.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/769/Make-your-room-larger-for-playing-Kinect-with-Nyko-Zoom.aspx</guid>
      <pubDate>Fri, 16 Dec 2011 01:25:28 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.soulsolutions.com.au/DesktopModules/Blog/Trackback.aspx?id=769</trackback:ping>
    </item>
    <item>
      <title>Kinect beta2 clean wpf code and getting started</title>
      <description>&lt;p&gt;&lt;img src="/Portals/0/JohnWeeGo.jpg" /&gt;Since the update to Beta2 of the Kinect for Windows SDK all our Kinect samples are out of date so I thought I’d update them to the latest and greatest and post them all here. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.soulsolutions.com.au/Portals/0/Blog/Files/1/768/Windows-Live-Writer-Simple_11184-kinectcode1_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="kinectcode1" border="0" alt="kinectcode1" src="/Portals/0/Blog/Files/1/768/Windows-Live-Writer-Simple_11184-kinectcode1_thumb.png" width="604" height="111" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;To begin with I want a nice clean framework that is both easy for the first time Kinect coder to understand but also makes use of the new abilities of the Kinect SDK. What I’ve come up with achieves the following 3 goals:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Support all combinations of Kinects be attached/detached/powered off/multiple. &lt;/li&gt;    &lt;li&gt;Exposes a single Kinect Runtime as a property called Nui (It is null if there isn’t a Kinect attached). &lt;/li&gt;    &lt;li&gt;Obvious location to wire up event model (and remove events if Kinect is removed) &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;This is meant to be a good place to start with simple examples with all the code clear in the one file.&lt;/p&gt;  &lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; MainWindow : Window
    {
        &lt;span class="kwrd"&gt;private&lt;/span&gt; Runtime nui;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; Runtime Nui
        {
            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; nui; }
            set
            {
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (nui != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
                {
                    &lt;span class="rem"&gt;//dispose all events and unintialise&lt;/span&gt;

                    nui.Uninitialize();
                }
                nui = &lt;span class="kwrd"&gt;value&lt;/span&gt;;

                &lt;span class="kwrd"&gt;if&lt;/span&gt; (nui != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
                {
                    &lt;span class="rem"&gt;//wire up events and initialise&lt;/span&gt;

                }

            }
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; MainWindow()
        {
            InitializeComponent();
            Closed += WindowClosed;
            Loaded += WindowLoaded;
        }

        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; WindowLoaded(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)
        {
            Runtime.Kinects.StatusChanged += KinectsStatusChanged;
            Nui = Runtime.Kinects.Where(k =&gt; k.Status == KinectStatus.Connected).FirstOrDefault();
        }

        &lt;span class="kwrd"&gt;void&lt;/span&gt; KinectsStatusChanged(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, StatusChangedEventArgs e)
        {
            &lt;span class="rem"&gt;//ignore the case where a 2nd kinect is connected while we are using the 1st kinect.&lt;/span&gt;
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (Nui != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;&amp; Nui.InstanceName != e.KinectRuntime.InstanceName) &lt;span class="kwrd"&gt;return&lt;/span&gt;;

            Nui = Runtime.Kinects.Where(k =&gt; k.Status == KinectStatus.Connected).FirstOrDefault();
        }

        &lt;span class="kwrd"&gt;void&lt;/span&gt; WindowClosed(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)
        {
            Runtime.Kinects.StatusChanged -= KinectsStatusChanged;
            Nui = &lt;span class="kwrd"&gt;null&lt;/span&gt;;
        }

    }&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Here is our classic first demo from our talks where we wire up the video, tilt slider, depth and skeleton using this new framework.&lt;/p&gt;

&lt;p&gt;WPF XAML:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;Window&lt;/span&gt; &lt;span class="attr"&gt;x:Class&lt;/span&gt;&lt;span class="kwrd"&gt;="NuiExample1.MainWindow"&lt;/span&gt;
        &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;/span&gt;
        &lt;span class="attr"&gt;xmlns:x&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/winfx/2006/xaml"&lt;/span&gt; 
        &lt;span class="attr"&gt;xmlns:Skeleton&lt;/span&gt;&lt;span class="kwrd"&gt;="clr-namespace:SoulSolutions.Kinect.Controls.Skeleton;assembly=SoulSolutions.Kinect.Controls.Skeleton"&lt;/span&gt; 
        &lt;span class="attr"&gt;Title&lt;/span&gt;&lt;span class="kwrd"&gt;="Kinect Nui Example 1"&lt;/span&gt; &lt;span class="attr"&gt;WindowStartupLocation&lt;/span&gt;&lt;span class="kwrd"&gt;="CenterScreen"&lt;/span&gt; &lt;span class="attr"&gt;SizeToContent&lt;/span&gt;&lt;span class="kwrd"&gt;="WidthAndHeight"&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;RowDefinition&lt;/span&gt; &lt;span class="kwrd"&gt;/&gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;RowDefinition&lt;/span&gt; &lt;span class="kwrd"&gt;/&gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&lt;/&lt;/span&gt;&lt;span class="html"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;ColumnDefinition&lt;/span&gt; &lt;span class="kwrd"&gt;/&gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;ColumnDefinition&lt;/span&gt; &lt;span class="kwrd"&gt;/&gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&lt;/&lt;/span&gt;&lt;span class="html"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;Image&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="colourImage"&lt;/span&gt; &lt;span class="kwrd"&gt;/&gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;Image&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="depthImage"&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Column&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt; &lt;span class="kwrd"&gt;/&gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;Skeleton:SkeletonControl&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="skeleton"&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Row&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt; &lt;span class="kwrd"&gt;/&gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;StackPanel&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Column&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Row&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt; &lt;span class="attr"&gt;Orientation&lt;/span&gt;&lt;span class="kwrd"&gt;="Horizontal"&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;Slider&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="tiltSlider"&lt;/span&gt; &lt;span class="attr"&gt;Orientation&lt;/span&gt;&lt;span class="kwrd"&gt;="Vertical"&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;="40"&lt;/span&gt; &lt;span class="attr"&gt;Maximum&lt;/span&gt;&lt;span class="kwrd"&gt;="27"&lt;/span&gt; &lt;span class="attr"&gt;Minimum&lt;/span&gt;&lt;span class="kwrd"&gt;="-27"&lt;/span&gt; &lt;span class="attr"&gt;SmallChange&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt; &lt;span class="attr"&gt;TickPlacement&lt;/span&gt;&lt;span class="kwrd"&gt;="TopLeft"&lt;/span&gt; &lt;span class="attr"&gt;Interval&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt; &lt;span class="attr"&gt;IsSnapToTickEnabled&lt;/span&gt;&lt;span class="kwrd"&gt;="True"&lt;/span&gt; &lt;span class="kwrd"&gt;/&gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&lt;&lt;/span&gt;&lt;span class="html"&gt;Button&lt;/span&gt; &lt;span class="attr"&gt;x:Name&lt;/span&gt;&lt;span class="kwrd"&gt;="tiltButton"&lt;/span&gt; &lt;span class="attr"&gt;Content&lt;/span&gt;&lt;span class="kwrd"&gt;="Set Tilt"&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="30"&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;="200"&lt;/span&gt; &lt;span class="attr"&gt;Click&lt;/span&gt;&lt;span class="kwrd"&gt;="TiltButtonClick"&lt;/span&gt; &lt;span class="kwrd"&gt;/&gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&lt;/&lt;/span&gt;&lt;span class="html"&gt;StackPanel&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&lt;/&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&lt;/&lt;/span&gt;&lt;span class="html"&gt;Window&lt;/span&gt;&lt;span class="kwrd"&gt;&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;C#:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Linq;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows;
&lt;span class="kwrd"&gt;using&lt;/span&gt; Coding4Fun.Kinect.Wpf;
&lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Research.Kinect.Nui;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; NuiExample1
{
    &lt;span class="rem"&gt;/// &lt;summary&gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// Interaction logic for MainWindow.xaml&lt;/span&gt;
    &lt;span class="rem"&gt;/// &lt;/summary&gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; MainWindow : Window
    {
        &lt;span class="kwrd"&gt;private&lt;/span&gt; InteropBitmapHelper imageHelper;

        &lt;span class="kwrd"&gt;private&lt;/span&gt; Runtime nui;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; Runtime Nui
        {
            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; nui; }
            set
            {
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (nui != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
                {
                    &lt;span class="rem"&gt;//dispose all events and unintialise&lt;/span&gt;
                    nui.VideoFrameReady -= NuiVideoFrameReady;
                    nui.DepthFrameReady -= NuiDepthFrameReady;
                    nui.SkeletonFrameReady -= NuiSkeletonFrameReady;

                    nui.Uninitialize();
                }
                nui = &lt;span class="kwrd"&gt;value&lt;/span&gt;;

                &lt;span class="kwrd"&gt;if&lt;/span&gt; (nui != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
                {
                    &lt;span class="rem"&gt;//wire up events and initialise&lt;/span&gt;

                    &lt;span class="rem"&gt;//step 1 events&lt;/span&gt;
                    nui.VideoFrameReady += NuiVideoFrameReady;
                    nui.DepthFrameReady += NuiDepthFrameReady;
                    nui.SkeletonFrameReady += NuiSkeletonFrameReady;

                    &lt;span class="rem"&gt;//step 2 initialise&lt;/span&gt;
                    nui.Initialize(RuntimeOptions.UseColor | RuntimeOptions.UseDepth | RuntimeOptions.UseSkeletalTracking);

                    &lt;span class="rem"&gt;//step 3 open streams / settings&lt;/span&gt;
                    nui.VideoStream.Open(ImageStreamType.Video, 2, ImageResolution.Resolution1280x1024, ImageType.Color);
                    nui.DepthStream.Open(ImageStreamType.Depth, 2, ImageResolution.Resolution640x480, ImageType.Depth);

                    &lt;span class="rem"&gt;//Must set to true and set after call to Initialize&lt;/span&gt;
                    nui.SkeletonEngine.TransformSmooth = &lt;span class="kwrd"&gt;true&lt;/span&gt;;

                    &lt;span class="rem"&gt;//Use to transform and reduce jitter&lt;/span&gt;
                    var parameters = &lt;span class="kwrd"&gt;new&lt;/span&gt; TransformSmoothParameters
                                         {
                                             Smoothing = 0.75f,
                                             Correction = 0.0f,
                                             Prediction = 0.0f,
                                             JitterRadius = 0.05f,
                                             MaxDeviationRadius = 0.04f
                                         };

                    nui.SkeletonEngine.SmoothParameters = parameters;

                }

            }
        }

        &lt;span class="kwrd"&gt;void&lt;/span&gt; NuiSkeletonFrameReady(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, SkeletonFrameReadyEventArgs e)
        {
            SkeletonFrame allSkeletons = e.SkeletonFrame;

            &lt;span class="kwrd"&gt;if&lt;/span&gt; (e.SkeletonFrame == &lt;span class="kwrd"&gt;null&lt;/span&gt;) &lt;span class="kwrd"&gt;return&lt;/span&gt;;

            &lt;span class="rem"&gt;//get the first tracked skeleton&lt;/span&gt;
            var skeletonData = (from s &lt;span class="kwrd"&gt;in&lt;/span&gt; allSkeletons.Skeletons
                                &lt;span class="kwrd"&gt;where&lt;/span&gt; s.TrackingState == SkeletonTrackingState.Tracked
                                select s).FirstOrDefault();

            &lt;span class="kwrd"&gt;if&lt;/span&gt; (skeletonData == &lt;span class="kwrd"&gt;null&lt;/span&gt;) &lt;span class="kwrd"&gt;return&lt;/span&gt;;

            skeleton.SkeletonData = skeletonData;

        }

        &lt;span class="kwrd"&gt;void&lt;/span&gt; NuiDepthFrameReady(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, ImageFrameReadyEventArgs e)
        {
            &lt;span class="rem"&gt;//Use Coding4Fun extension method on ImageFrame class for Depth&lt;/span&gt;
            depthImage.Source = e.ImageFrame.ToBitmapSource();
        }

        &lt;span class="kwrd"&gt;void&lt;/span&gt; NuiVideoFrameReady(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, ImageFrameReadyEventArgs e)
        {
            PlanarImage planarImage = e.ImageFrame.Image;

            &lt;span class="rem"&gt;//An interopBitmap is a WPF construct that enables resetting the Bits of the image.&lt;/span&gt;
            &lt;span class="rem"&gt;//This is more efficient than doing a BitmapSource.Create call every frame.&lt;/span&gt;
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (imageHelper == &lt;span class="kwrd"&gt;null&lt;/span&gt;)
            {
                imageHelper = &lt;span class="kwrd"&gt;new&lt;/span&gt; InteropBitmapHelper(planarImage.Width, planarImage.Height, planarImage.Bits);
                colourImage.Source = imageHelper.InteropBitmap;
            }
            &lt;span class="kwrd"&gt;else&lt;/span&gt;
            {
                imageHelper.UpdateBits(planarImage.Bits);
            }
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; MainWindow()
        {
            InitializeComponent();
            Closed += WindowClosed;
            Loaded += WindowLoaded;
        }

        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; WindowLoaded(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)
        {
            Runtime.Kinects.StatusChanged += KinectsStatusChanged;
            Nui = Runtime.Kinects.Where(k =&gt; k.Status == KinectStatus.Connected).FirstOrDefault();
        }

        &lt;span class="kwrd"&gt;void&lt;/span&gt; KinectsStatusChanged(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, StatusChangedEventArgs e)
        {
            &lt;span class="rem"&gt;//ignore the case where a 2nd kinect is connected while we are using the 1st kinect.&lt;/span&gt;
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (Nui != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;&amp; Nui.InstanceName != e.KinectRuntime.InstanceName) &lt;span class="kwrd"&gt;return&lt;/span&gt;;

            Nui = Runtime.Kinects.Where(k =&gt; k.Status == KinectStatus.Connected).FirstOrDefault();
        }

        &lt;span class="kwrd"&gt;void&lt;/span&gt; WindowClosed(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)
        {
            Runtime.Kinects.StatusChanged -= KinectsStatusChanged;
            Nui = &lt;span class="kwrd"&gt;null&lt;/span&gt;;
        }

        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; TiltButtonClick(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)
        {
            &lt;span class="rem"&gt;//Set angle to slider1 value&lt;/span&gt;
            Nui.NuiCamera.ElevationAngle = (&lt;span class="kwrd"&gt;int&lt;/span&gt;) tiltSlider.Value;
        }
    }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&lt;a href="http://www.soulsolutions.com.au/examples/NuiExample1.zip" target="_blank"&gt;Download this full sample here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;What do you think? What kinect code are you looking for? You can catch me on &lt;a href="http://twitter.com/soulsolutions"&gt;http://twitter.com/soulsolutions&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/768/Kinect-beta2-clean-wpf-code-and-getting-started.aspx</link>
      <comments>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/768/Kinect-beta2-clean-wpf-code-and-getting-started.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/768/Kinect-beta2-clean-wpf-code-and-getting-started.aspx</guid>
      <pubDate>Tue, 06 Dec 2011 13:34:14 GMT</pubDate>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://www.soulsolutions.com.au/DesktopModules/Blog/Trackback.aspx?id=768</trackback:ping>
    </item>
    <item>
      <title>Kinect SDK Fun Day at ANU HCI Summer School</title>
      <description>&lt;p&gt;&lt;a href="http://www.soulsolutions.com.au/Portals/0/Blog/Files/1/767/Windows-Live-Writer-Kinect-SDK-Fun-Day-at-ANU-HCI-Summer-Sch_A901-ANU1_2.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="ANU1" border="0" alt="ANU1" src="/Portals/0/Blog/Files/1/767/Windows-Live-Writer-Kinect-SDK-Fun-Day-at-ANU-HCI-Summer-Sch_A901-ANU1_thumb.jpg" width="644" height="355" /&gt;&lt;/a&gt;&lt;img src="/Portals/0/BronwenWeeGo.jpg" /&gt;John and I were invited to help out with the HCI Summer School at ANU to get the students started with the KinectSDK for Windows. In the morning Henry Gardner opened the Summer School quickly followed by a look at some of the Kinect Innovations that have been happening by one of the staff from CSIRO.&lt;/p&gt;  &lt;p&gt;We put together what we titled a KinectSDK “Fun Day”. John and I gave a couple of talks to give the students an introduction to the Kinect SDK. The “naked Kinect”, my gesture demo and John’s depth camera demonstrations proved popular with the audience again. Just before lunch we helped break up the group into smaller groups of 3 or 4 so they could share around the 12 kinects in the labs. KinectSDK is great for collaboration between team members as they have to literally get out of their seats to test their ideas so is ideal for working in groups.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.soulsolutions.com.au/Portals/0/Blog/Files/1/767/Windows-Live-Writer-Kinect-SDK-Fun-Day-at-ANU-HCI-Summer-Sch_A901-ANU3_2.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="ANU3" border="0" alt="ANU3" src="/Portals/0/Blog/Files/1/767/Windows-Live-Writer-Kinect-SDK-Fun-Day-at-ANU-HCI-Summer-Sch_A901-ANU3_thumb.jpg" width="644" height="431" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.soulsolutions.com.au/Portals/0/Blog/Files/1/767/Windows-Live-Writer-Kinect-SDK-Fun-Day-at-ANU-HCI-Summer-Sch_A901-ANU4_2.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="ANU4" border="0" alt="ANU4" src="/Portals/0/Blog/Files/1/767/Windows-Live-Writer-Kinect-SDK-Fun-Day-at-ANU-HCI-Summer-Sch_A901-ANU4_thumb.jpg" width="644" height="418" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The groups of students (including students from high school and universities from interstate) got stuck right into the SDK and fleshing out their ideas for the afternoon.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.soulsolutions.com.au/Portals/0/Blog/Files/1/767/Windows-Live-Writer-Kinect-SDK-Fun-Day-at-ANU-HCI-Summer-Sch_A901-ANU2_2.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="ANU2" border="0" alt="ANU2" src="/Portals/0/Blog/Files/1/767/Windows-Live-Writer-Kinect-SDK-Fun-Day-at-ANU-HCI-Summer-Sch_A901-ANU2_thumb.jpg" width="644" height="132" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;We took a break around 4pm and went around the room and shared the ideas and vision the students had come up with for the day. There was lots of variety across the 12 groups, using all different parts of the SDK. The Skeleton tracking and Audio proved to be very popular. They had a fun day with the Kinect and many of them will get to spend the afternoons of the rest of the week to continue working on their ideas and of course they can take the code home with them and continue with their ideas.  We had lots of fun and look forward to hearing how they went through the week.&lt;/p&gt;  &lt;p&gt;Thanks to Henry and Di from ANU for having us!&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:687b68e9-e9b1-405a-b3bd-c5b34c6a276a" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Kinect+SDK" rel="tag"&gt;Kinect SDK&lt;/a&gt;,&lt;a href="http://technorati.com/tags/ANU" rel="tag"&gt;ANU&lt;/a&gt;,&lt;a href="http://technorati.com/tags/HCI+Summer+School" rel="tag"&gt;HCI Summer School&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/767/Kinect-SDK-Fun-Day-at-ANU-HCI-Summer-School.aspx</link>
      <comments>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/767/Kinect-SDK-Fun-Day-at-ANU-HCI-Summer-School.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/767/Kinect-SDK-Fun-Day-at-ANU-HCI-Summer-School.aspx</guid>
      <pubDate>Tue, 06 Dec 2011 02:12:12 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.soulsolutions.com.au/DesktopModules/Blog/Trackback.aspx?id=767</trackback:ping>
    </item>
    <item>
      <title>DDD Brisbane wrap-up</title>
      <description>&lt;p&gt;&lt;a href="http://www.soulsolutions.com.au/Portals/0/Blog/Files/1/766/Windows-Live-Writer-DDD-Brisbane-wrapup_A64E-dddbrisbane_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 10px 10px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="dddbrisbane" border="0" alt="dddbrisbane" align="left" src="/Portals/0/Blog/Files/1/766/Windows-Live-Writer-DDD-Brisbane-wrapup_A64E-dddbrisbane_thumb.png" width="230" height="117" /&gt;&lt;/a&gt;&lt;img src="/Portals/0/BronwenWeeGo.jpg" /&gt;A little late in coming I know…but on 26th December Brisbane was host to the first DDD Brisbane! We’d sold out quite a lot before the event and had 40+ people on the waitlist so it can only be a good sign that people are keen for these types of events. We were there early to setup to hand out lanyards (which was the secret password for free coffee) and the all important swag.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.soulsolutions.com.au/Portals/0/Blog/Files/1/766/Windows-Live-Writer-DDD-Brisbane-wrapup_A64E-ddd1_2.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="ddd1" border="0" alt="ddd1" src="/Portals/0/Blog/Files/1/766/Windows-Live-Writer-DDD-Brisbane-wrapup_A64E-ddd1_thumb.jpg" width="644" height="431" /&gt;&lt;/a&gt;&lt;a href="http://www.soulsolutions.com.au/Portals/0/Blog/Files/1/766/Windows-Live-Writer-DDD-Brisbane-wrapup_A64E-ddd2_2.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="ddd2" border="0" alt="ddd2" src="/Portals/0/Blog/Files/1/766/Windows-Live-Writer-DDD-Brisbane-wrapup_A64E-ddd2_thumb.jpg" width="644" height="431" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Damian gave the keynote and all important logistical information around rooms, food and how to win free stuff!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.soulsolutions.com.au/Portals/0/Blog/Files/1/766/Windows-Live-Writer-DDD-Brisbane-wrapup_A64E-ddd3_2.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="ddd3" border="0" alt="ddd3" src="/Portals/0/Blog/Files/1/766/Windows-Live-Writer-DDD-Brisbane-wrapup_A64E-ddd3_thumb.jpg" width="644" height="208" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;For lunch we brought in 35 pizzas, 6 platters of subway, 4 platters of sushi. I thought we had way too much food but in the end, all the pizza and sushi went and we were only left with 2 platters of subway.  Lunchtime saw a few people trying on various swag like the bucket hats and the very popular ladies Geekette shirts from Telerik.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.soulsolutions.com.au/Portals/0/Blog/Files/1/766/Windows-Live-Writer-DDD-Brisbane-wrapup_A64E-dd5_2.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="dd5" border="0" alt="dd5" src="/Portals/0/Blog/Files/1/766/Windows-Live-Writer-DDD-Brisbane-wrapup_A64E-dd5_thumb.jpg" width="644" height="431" /&gt;&lt;/a&gt;&lt;a href="http://www.soulsolutions.com.au/Portals/0/Blog/Files/1/766/Windows-Live-Writer-DDD-Brisbane-wrapup_A64E-dd4_2.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="dd4" border="0" alt="dd4" src="/Portals/0/Blog/Files/1/766/Windows-Live-Writer-DDD-Brisbane-wrapup_A64E-dd4_thumb.jpg" width="644" height="431" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;A bunch of great sessions by the presenters and then everyone gathered at the end for their chance to win a bunch of prizes supplied by the sponsors.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.soulsolutions.com.au/Portals/0/Blog/Files/1/766/Windows-Live-Writer-DDD-Brisbane-wrapup_A64E-dd6_2.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="dd6" border="0" alt="dd6" src="/Portals/0/Blog/Files/1/766/Windows-Live-Writer-DDD-Brisbane-wrapup_A64E-dd6_thumb.jpg" width="644" height="171" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Overall I think the day went quite well and I hope we’ll get to see a bigger and better DDD Brisbane next year.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:011f3cfd-a5fc-418f-b435-be324c77ec67" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/DDDBrisbane" rel="tag"&gt;DDDBrisbane&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/766/DDD-Brisbane-wrap-up.aspx</link>
      <comments>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/766/DDD-Brisbane-wrap-up.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/766/DDD-Brisbane-wrap-up.aspx</guid>
      <pubDate>Mon, 28 Nov 2011 01:57:00 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.soulsolutions.com.au/DesktopModules/Blog/Trackback.aspx?id=766</trackback:ping>
    </item>
    <item>
      <title>Speaking at Imagine Cup Smackdown at QUT</title>
      <description>&lt;p&gt;&lt;a href="http://www.soulsolutions.com.au/Portals/0/Blog/Files/1/765/Windows-Live-Writer-Speaking-at-Imagine-Cup-Smackdown-at-QUT_B76E-header_logo_new_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 10px 10px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="header_logo_new" border="0" alt="header_logo_new" align="left" src="/Portals/0/Blog/Files/1/765/Windows-Live-Writer-Speaking-at-Imagine-Cup-Smackdown-at-QUT_B76E-header_logo_new_thumb.png" width="644" height="359" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="/Portals/0/BronwenWeeGo.jpg" /&gt;After being fortunate enough to be a Software Design Finalist Judge for Image Cup for the last 2 years, I’ve been invited to be part of the keynote and give a breakout session at the QUT Image Cup Smackdown Event 23rd November. If you aren’t aware this years worldwide finals are going to be held in Australia! If you can’t make the event and want to more about the competition itself, check out the main website &lt;a title="http://www.imaginecup.com/" href="http://www.imaginecup.com/"&gt;http://www.imaginecup.com/&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Imagine Cup&lt;/strong&gt; is the premier student technology competition in the world challenging students to create solutions for the worlds toughest problems. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Imagine Cup Smackdown&lt;/strong&gt; brings students a prime opportunity to learn about &lt;strong&gt;Imagine Cup&lt;/strong&gt; and learn from experts on what will assist you with solving those tough problems using technology!&lt;/p&gt;  &lt;p&gt;Taking on the concept from the highly successful &lt;strong&gt;Smackdown 2010&lt;/strong&gt; event held at QUT last year, &lt;strong&gt;Imagine Cup Smackdown&lt;/strong&gt; will showcase some of the latest technology and amazing demo's which will blow attendees away. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Imagine Cup Smackdown&lt;/strong&gt; will not only hold a keynote event but will provide attendees the opportunity to deep dive into tracks including Software &amp; Technology, Business and Design &amp; UI.&lt;/p&gt;  &lt;p&gt;See below for the confirmed awesome speakers of &lt;strong&gt;Imagine Cup Smackdown!&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Lawrence Crumpton - Microsoft &lt;/li&gt;    &lt;li&gt;Bronwen Zande - Soul Solutions &lt;/li&gt;    &lt;li&gt;Ben Place - Microsoft &lt;/li&gt;    &lt;li&gt;Danny Rowe - Microsoft&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;So when is it? &lt;strong&gt;Wednesday 23rd of November kicking off at 9am sharp&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;and where is it? &lt;strong&gt;QUT Gardens Point S Block Room 403&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;and how much? &lt;strong&gt;FREE&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Register over here: &lt;a title="http://icsmackdown.eventbrite.com/" href="http://icsmackdown.eventbrite.com/"&gt;http://icsmackdown.eventbrite.com/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:2332f626-aa95-434c-99c7-cab4993538e9" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Imagine+Cup+2012" rel="tag"&gt;Imagine Cup 2012&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Imagine+Cup+Smackdown" rel="tag"&gt;Imagine Cup Smackdown&lt;/a&gt;,&lt;a href="http://technorati.com/tags/QUT" rel="tag"&gt;QUT&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/765/Speaking-at-Imagine-Cup-Smackdown-at-QUT.aspx</link>
      <comments>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/765/Speaking-at-Imagine-Cup-Smackdown-at-QUT.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/765/Speaking-at-Imagine-Cup-Smackdown-at-QUT.aspx</guid>
      <pubDate>Thu, 17 Nov 2011 03:09:15 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.soulsolutions.com.au/DesktopModules/Blog/Trackback.aspx?id=765</trackback:ping>
    </item>
    <item>
      <title>Free tickets to YOW! 2011 Brisbane</title>
      <description>&lt;p&gt;&lt;a href="http://www.soulsolutions.com.au/Portals/0/Blog/Files/1/764/Windows-Live-Writer-4dc2b35f8706_8562-YOW2011_2.gif"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 10px 10px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="YOW2011" border="0" alt="YOW2011" align="left" src="/Portals/0/Blog/Files/1/764/Windows-Live-Writer-4dc2b35f8706_8562-YOW2011_thumb.gif" width="204" height="204" /&gt;&lt;/a&gt;&lt;img src="/Portals/0/BronwenWeeGo.jpg" /&gt;The folks over at YOW! 2011 are putting up a couple of free tickets to the &lt;a href="http://www.yowconference.com.au/" target="_blank"&gt;Brisbane conference&lt;/a&gt; and offering a discount to the Girl Geek Dinner ladies to attend.  For those that aren’t familiar, YOW! is part of the GOTO global conferences which includes QCON.  If you have never been to a YOW! event be ready for some great talks and training.  &lt;/p&gt;  &lt;p&gt;YOW! is known for breadth and depth. Checkout these links for your interest:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://dl.dropbox.com/u/1510283/Agile%2520Experts%2520Speak%2520Architecture%2520and%2520Design%2520at%2520YOW%21%2520Australia.html" target="_blank"&gt;Agile&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://dl.dropbox.com/u/1510283/Dart%2520and%2520V8%2520at%2520YOW.xht" target="_blank"&gt;JavaScript and Web Devs&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://dl.dropbox.com/u/1510283/Ruby%252520JS%252520Web.html" target="_blank"&gt;Ruby, JavaScript and Web&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://dl.dropbox.com/u/1510283/The%2520Future%2520of%2520Java%2520and%2520the%2520JVM%2520at%2520YOW%21.html" target="_blank"&gt;Java and JVM&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://yowaustralia.com.au/YOW2011/general/details.html?speakerId=2287" target="_blank"&gt;Cloud Computing, NoSQL and BigData&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://dl.dropbox.com/u/1510283/Microsoft%20YOW%21%20Brisbane.html" target="_blank"&gt;Microsoft Brisbane&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Free Ticket 1 – &lt;/strong&gt;Anyone attending the &lt;font color="#ff0000"&gt;&lt;strong&gt;SOLD&lt;/strong&gt;&lt;/font&gt; &lt;font color="#ff0000"&gt;&lt;strong&gt;OUT&lt;/strong&gt;&lt;/font&gt; &lt;a href="http://dddbrisbane.com/" target="_blank"&gt;DDD Brisbane&lt;/a&gt; conference on 26th November will get a chance to win a free ticket to the Brisbane event on 5/6 December.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Free Ticket 2 – &lt;/strong&gt;Girl Geek Dinners Brisbane members – a free ticket to the Brisbane event 5/6 December will be randomly selected from those who publicly tweet or post on the &lt;a href="http://www.facebook.com/?ref=tn_tinyman#!/group.php?gid=24311979127" target="_blank"&gt;Girl Geek Dinners Facebook&lt;/a&gt; page before 3pm (Brisbane time) 25th November – Which of the &lt;a href="http://www.yowconference.com.au/YOW2011/general/speakers.html" target="_blank"&gt;YOW! 2011 Conference Speakers&lt;/a&gt; they’d invite to a Girl Geek Dinner. The tweet or facebook post must contain #YOW_OZ and #GGDBNE and a link to &lt;a title="http://www.yowconference.com.au" href="http://www.yowconference.com.au"&gt;http://www.yowconference.com.au&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Plus&lt;/strong&gt; YOW could like to offer members of Girl Geek Dinners a 10% discount to attend the Brisbane or Melbourne Conferences. Please email &lt;a href="http://www.soulsolutions.com.aumailto:bronwen@soulsolutions.com.au"&gt;bronwen@soulsolutions.com.au&lt;/a&gt; to take advantage of the 10% discount. &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:14e04341-d55d-43f7-b1ae-d62cb59c7c7f" class="class"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/YOW" rel="tag"&gt;YOW&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DDDBrisbane" rel="tag"&gt;DDDBrisbane&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Girl+Geek+Dinners" rel="tag"&gt;Girl Geek Dinners&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/764/Free-tickets-to-YOW-2011-Brisbane.aspx</link>
      <comments>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/764/Free-tickets-to-YOW-2011-Brisbane.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/764/Free-tickets-to-YOW-2011-Brisbane.aspx</guid>
      <pubDate>Mon, 14 Nov 2011 23:29:49 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.soulsolutions.com.au/DesktopModules/Blog/Trackback.aspx?id=764</trackback:ping>
    </item>
    <item>
      <title>KinectSDK Beta 2 Released–a few changes to be aware of</title>
      <description>&lt;p&gt;&lt;a href="http://www.soulsolutions.com.au/Portals/0/Blog/Files/1/761/Windows-Live-Writer-28059dfa6bd0_898C-KinectSensor_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 10px 10px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="KinectSensor" border="0" alt="KinectSensor" align="left" src="/Portals/0/Blog/Files/1/761/Windows-Live-Writer-28059dfa6bd0_898C-KinectSensor_thumb.png" width="244" height="104" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="/Portals/0/BronwenWeeGo.jpg" /&gt;While we were sleeping on the weekend the latest version of the Kinect SDK for Windows was released – Beta 2. It also mean a new web address for everything KinectSDK here: &lt;a title="http://kinectforwindows.org/" href="http://kinectforwindows.org/"&gt;http://kinectforwindows.org/&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;There’s been a bunch of changes to the install aswell as the actual SDK. Here’s a few things I found when I upgraded to the newest version.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Installation&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;If you already have a previous version of the SDK installed you must uninstall it first. If you try to install Beta 2 over the top of a previous version you will receive the following error:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.soulsolutions.com.au/Portals/0/Blog/Files/1/761/Windows-Live-Writer-28059dfa6bd0_898C-image_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="/Portals/0/Blog/Files/1/761/Windows-Live-Writer-28059dfa6bd0_898C-image_thumb.png" width="516" height="401" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Install location - &lt;/strong&gt;If you’re having trouble finding the dll locations the samples and documentation now have a new home under &lt;strong&gt;C:\Program Files\Microsoft SDKs\Kinect\v1.0 Beta2 – &lt;/strong&gt;so you’ll have to update all the references in your existing projects to point to the correct directory in here.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;RunTime change – &lt;/strong&gt;The &lt;em&gt;var runtime = new Runtime(); &lt;/em&gt;syntax is now obsolete. You can now access the this using Runtime.Kinects – which returns a KinectDeviceCollection. This also has a StatusChanged event where we can now get access to the state of each Kinect connected to the computer and its current state in the KinectStatus enum : Connected, Disconnected, Not Powered, Not Ready and Error. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Speech&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Download the 64bit options – &lt;/strong&gt;Make sure you have the correct versions of the speech rutime, sdk and language pack and can now build 64 bit applications!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=bb0f72cb-b86b-46d1-bf06-665895a313c7"&gt;Microsoft Speech Platform Runtime, version 10.2&lt;/a&gt; – select 32-bit if you are running 32-bit Windows.  If you have 64-bit Windows, we suggest that you install both the 32-bit and 64-bit runtime.    &lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=1b1604d3-4f66-4241-9a21-90a294a5c9a4&amp;displaylang=en"&gt;Microsoft Speech Platform - Software Development Kit, version 10.2&lt;/a&gt; – select 32-bit or 64-bit according to your Windows installation    &lt;br /&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkId=220942"&gt;Kinect for Windows Runtime Language Pack, version 0.9&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;KinectAudioSource on the UI thread&lt;/strong&gt; – For audio with WPF we no longer need to run the audio on a separate thread.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;KinectAudioDemo – &lt;/strong&gt;new audio demo added to the samples to checkout.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Other Documented changes:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Significant improvements to skeletal tracking: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Accuracy has been improved overall, resulting in more precise tracking. &lt;/li&gt;    &lt;li&gt;Skeletal Frame delivery is faster, resulting in reduced latency. &lt;/li&gt;    &lt;li&gt;Skeletal Tracking is now multi-threaded and can take advantage of multiple CPU cores. &lt;/li&gt;    &lt;li&gt;When using 2 Kinects, developers can now specify which one is used for skeletal tracking. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The driver, runtime, and SDK work correctly on the Windows 8 Developer Preview for desktop applications.    &lt;br /&gt;NuiImageBuffer has been replaced by INuiFrameTexture, defined in MSR_NuiImageCamera.h.  It is no longer necessary to include the file NuiImageBuffer.h in your project.     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;Sample code changes:    &lt;br /&gt;The samples have been updated.  Also the C# samples use helpers, KinectWpfViewers, that may be useful in your apps.     &lt;br /&gt;Driver and runtime stability and performance improvements, especially for the managed API layer.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:145d15fc-b85b-4a0a-923a-a16daee850ef" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/KinectSDK" rel="tag"&gt;KinectSDK&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/761/KinectSDK-Beta-2-Released-ndash-a-few-changes-to-be-aware-of.aspx</link>
      <comments>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/761/KinectSDK-Beta-2-Released-ndash-a-few-changes-to-be-aware-of.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/761/KinectSDK-Beta-2-Released-ndash-a-few-changes-to-be-aware-of.aspx</guid>
      <pubDate>Mon, 07 Nov 2011 01:22:59 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.soulsolutions.com.au/DesktopModules/Blog/Trackback.aspx?id=761</trackback:ping>
    </item>
    <item>
      <title>Mixing things up by adding some colour to your retrospectives</title>
      <description>&lt;p&gt;&lt;a href="http://www.soulsolutions.com.au/Portals/0/Blog/Files/1/760/Windows-Live-Writer-Mixing-things-up-by-adding-some-colour-t_917C-rainbow_2.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 10px 10px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="rainbow" border="0" alt="rainbow" align="left" src="/Portals/0/Blog/Files/1/760/Windows-Live-Writer-Mixing-things-up-by-adding-some-colour-t_917C-rainbow_thumb.jpg" width="244" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="/Portals/0/BronwenWeeGo.jpg" /&gt;I’m a big fan of SCRUM / AGILE / insert other name that helps me actually get on doing my job and be able to get it done more efficiently without being tied up in titles, roles and rank. I’ve always like the retrospectives in the sprints I’ve done. I find it a great way for everyone to reflect on the awesome stuff they did, what things they tried that didn’t work so great and to really decide as a team what you want to improve/change for next time. It’s a great way to air the dirty laundry and start with a clean slate. The problem I’ve often encountered is these meetings can get quite boring after awhile if you do them the same way and ask the exact same questions each time. Inevitably, people fall into roles of being quiet while the more dominant get more airtime.&lt;/p&gt;  &lt;p&gt;Changing up the retrospective to have different formats can be a great way to bring out the voice of different types of people by tapping into different talents and comfort zones. I also find it’s a great way to get people talking about what happened in a different way and makes them think of things that they wouldn’t have come up with with the tried and true method.&lt;/p&gt;  &lt;p&gt;I’d previously taught the team how to run the “emotional” kind of retro, where they plot their happy/sadness on a graph over the duration from the sprint. We got some good results from that but had a few comments about how talking about their feelings was just weird and was waiting for the group hug at the end &lt;img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="/Portals/0/Blog/Files/1/760/Windows-Live-Writer-Mixing-things-up-by-adding-some-colour-t_917C-wlEmoticon-smile_2.png" /&gt;&lt;/p&gt;  &lt;p&gt;I’ve wanted to mix things up a bit last week, so decided to bring some colour into the retrospective by running an artistic retro. I’ve done this type before starting with a blank piece of paper and usually find it really hard (unless the team is quite artistic and in to the whole idea) to get going and get good results from it. I think I get much better participation and results if you give the team a theme/background picture to start with. I’ve seen a few different ideas such as a speedboat, a race track etc. but I think a good one to start with is the sail boat. The abstraction of putting things on the anchors for things that slowed you down, things on the sails that made you go quicker, obstacles in the water for things you had to overcome, canons etc on the bow for battles you had to fight really help people start with the drawing process.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.soulsolutions.com.au/Portals/0/Blog/Files/1/760/Windows-Live-Writer-Mixing-things-up-by-adding-some-colour-t_917C-WP_000030_2.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="WP_000030" border="0" alt="WP_000030" src="/Portals/0/Blog/Files/1/760/Windows-Live-Writer-Mixing-things-up-by-adding-some-colour-t_917C-WP_000030_thumb.jpg" width="644" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Above is the result of my experiment on the team on our latest retrospective. At first I took the black pen away to force some colour but they quickly got right into it so I quickly gave it back as it wasn’t an issue. I’ve taken off all the postits that described what each of part of the drawing represented and how we thought about fixing or changing things but I think you can still see the variety of ideas that came through.&lt;/p&gt;  &lt;p&gt;Love to hear any ideas on base images to start the artistic retro out with if you have them – leave me a comment below.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:30755b74-df8e-43c8-a9ae-f76a833e59dc" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/SCRUM" rel="tag"&gt;SCRUM&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Artistic+Retrospective" rel="tag"&gt;Artistic Retrospective&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/760/Mixing-things-up-by-adding-some-colour-to-your-retrospectives.aspx</link>
      <comments>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/760/Mixing-things-up-by-adding-some-colour-to-your-retrospectives.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/760/Mixing-things-up-by-adding-some-colour-to-your-retrospectives.aspx</guid>
      <pubDate>Mon, 31 Oct 2011 00:40:58 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.soulsolutions.com.au/DesktopModules/Blog/Trackback.aspx?id=760</trackback:ping>
    </item>
    <item>
      <title>Why Open Data Sharing Is Important</title>
      <description>&lt;p&gt;&lt;a href="http://www.soulsolutions.com.au/Portals/0/Blog/Files/1/759/Windows-Live-Writer-561efc8f56a0_9E3E-5_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 10px 10px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="5" border="0" alt="5" align="left" src="/Portals/0/Blog/Files/1/759/Windows-Live-Writer-561efc8f56a0_9E3E-5_thumb.png" width="148" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="/Portals/0/BronwenWeeGo.jpg" /&gt;This week we were able to expand TransHub to 7 cities – now including &lt;a href="http:cbr.transhub.com" target="_blank"&gt;Canberra&lt;/a&gt;. We were able to do this because the dataset for Canberra became available on data.gov.au.&lt;/p&gt;  &lt;p&gt;Just over 5 years ago we saw the first campains to “&lt;a href="http://www.guardian.co.uk/technology/2006/mar/09/education.epublic" target="_blank"&gt;Free Our Data&lt;/a&gt;” in the UK. Governments in every country collect and hold a massive amount of data, much of it very useful in our everyday lives, and quite often data you have to pay to get hold of and not necessarily in a particularly useful format. The idea behind this campaign was the Governments should collect the best quality data possible and then make it available for free to all. &lt;/p&gt;  &lt;p&gt;In recent years there has been a push for Australian government agencies to make more data available to the public. Since then Data.Gov.Au has been created.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Data.gov.au provides an easy way to find, access and reuse public datasets from the Australian Government and state and territory governments. The main purpose of the site is to encourage public access to and reuse of government data by providing it in useful formats and under open licences.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;The great thing about putting up the data so the public can use it, is that developers, businesses and hobbyists can use the data and mash it up in ways that were never before thought of and make useful sites, applications and creations for others to use.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;How we’ve used Data.gov.au for TransHub Canberra&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;To show how powerful publishing data in an open format is I’ll take you through the process we went through of creating &lt;a href="http://cbr.transhub.com" target="_blank"&gt;TransHub Canberra&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;When we created &lt;a href="http://syd.transhub.com" target="_blank"&gt;TransHub Sydney&lt;/a&gt;, we had thought of expanding and reusing the same idea with other cities. Some minor code changes were made from the original competition entry to allow us to apply to different modes of transport in Australia (an other metric countries). This allowed us to easily apply other datasets that we had at our disposal such as Adelaide, Auckland, Cairns, Perth and Townsville.&lt;/p&gt;  &lt;p&gt;In a little over a week we were able to add a whole new set of data through the process:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;We noticed the &lt;a href="http://data.gov.au/dataset/journey-planner-data-act/" target="_blank"&gt;Journey Planner Data for the ACT&lt;/a&gt; had been made available on Wed night 5/10. &lt;/li&gt;    &lt;li&gt;By Thursday 6/10 we had made the necessary adjustments and internal testing to prepare TransHub Canberra for Beta Testing. &lt;/li&gt;    &lt;li&gt;Friday 6/10 we started the Beta and put out a call for Beta testers &lt;/li&gt;    &lt;li&gt;Friday 14/10 &lt;a href="http://cbr.transhub.com" target="_blank"&gt;TransHub Canberra&lt;/a&gt; is live on the marketplace &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;How we’ve used Data.gov.au previously&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;We’ve been a fan of data.gov.au for awhile. This year we were also involved in the &lt;a href="http://libraryhack.org/" target="_blank"&gt;Library Hack&lt;/a&gt; competition.  We placed 2 entries:&lt;/p&gt;  &lt;p&gt;&lt;img src="/Portals/0/Blog/Files/1/725/Windows-Live-Writer-Mosaic-of-Queensland---LibraryHack-Entry_BE22-QLDLibraryFlickrComposite_3.jpg" width="622" height="768" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;QLD Mosaic&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The images are from the State Library of Queensland’s out of copyright photographs from their photograph collection “People and places from across Queensland across time” . Data source is here: &lt;a href="http://data.gov.au/dataset/picture-queensland/"&gt;http://data.gov.au/dataset/picture-queensland/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The image for the mosaic is NASA’s Blue Marble Imagery cropped to the political boundary of Queensland. The mosaic was created using AndreaMosaic’s 64bit professional version, Photoshop CS5 and DeepZoom tools. It was processed on a Dell dual 6 core Xeon X5680 T5500 Workstation with 24GB Ram. It took just under 7 days to compile the images, mosaic, process, tile and upload to our website. The energy used to power the hardware was offset by our 6KW/h Solar System and the awesome Queensland Sun.&lt;/p&gt;  &lt;p&gt;&lt;img src="/Portals/0/Blog/Files/1/726/Windows-Live-Writer-90731a9b48a4_748C-estate_thumb.png" width="640" height="398" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Historical Real Estate Maps&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Soul Solutions has taken the State Library of Queensland's collection of digitized estate maps, advertising new housing estates in Queensland from the early to mid 20th Century. 165 of these have been digitized in the collection that can be found here: &lt;a href="http://data.gov.au/dataset/real-estate-maps/"&gt;http://data.gov.au/dataset/real-estate-maps/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The maps are predominantly from Brisbane but also cover some regional areas of Queensland such as the Gold and Sunshine Coasts.&lt;/p&gt;  &lt;p&gt;We have chosen to visualise these using an enhanced version of the Microsoft PivotViewer control, from &lt;a href="http://lobsterpot.com.au/"&gt;LobsterPot Solutions&lt;/a&gt;, that allows us to presents 100’s of things at once and visualise them in a way that can add value by allowing multiple ways to filter and sort the collection and view details and metadata while showing the estate map image in a “&lt;em&gt;zoomable&lt;/em&gt;” format.&lt;/p&gt;  &lt;p&gt;Here’s a quick video demonstrating the application or you can watch it on YouTube here :&lt;a href="http://www.youtube.com/watch?v=5RpauKnxp2w&amp;feature=channel_video_title"&gt;http://www.youtube.com/watch?v=5RpauKnxp2w&amp;feature=channel_video_title&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What is this GTFS thing anyway?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Many of you have asked us what format we need the data in to be able to use it. There’s a few that are supported by we highly recommend GTFS – General Transit Feed Specification.&lt;/p&gt;  &lt;p&gt;GTFS defines a common format for public transport schedules  and associated geographic information. For more information see &lt;a title="http://en.wikipedia.org/wiki/GTFS" href="http://en.wikipedia.org/wiki/GTFS"&gt;&lt;em&gt;http://en.wikipedia.org/wiki/GTFS&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;It’s now a format accepted through many apis around the world for public transport data including &lt;a href="http://www.bing.com/maps/TransitPartners.aspx" target="_blank"&gt;Bing Maps&lt;/a&gt; and &lt;a href="http://code.google.com/transit/spec/transit_feed_specification.html#transitFeedSubmit" target="_blank"&gt;Google Transit&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Why don’t we have TransHub Brisbane and TransHub Melbourne?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Our top 2 &lt;a href="http://feedback.transhub.com" target="_blank"&gt;feature requests&lt;/a&gt; for TransHub is to create a version for Brisbane and Melbourne. Many of you have asked why we haven’t done it and why can’t we? Currently neither Brisbane nor Melbourne publish their data publically for application developers to use. If we can’t get to the data we can’t make an application.&lt;/p&gt;  &lt;p&gt;As many of you have pointed out we &lt;em&gt;could&lt;/em&gt; screen-scrape or crowd source the timetable and station information we really don’t want to go down this path. We’d prefer to encourage the other cities to get on board with the open formats and publish their data so everyone can benefit and do it properly!&lt;/p&gt;  &lt;p&gt;Our only thoughts are that public pressure may encourage them to change their minds and follow what the other cities in Australia and the world have done. So keep voting for the feature!&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Why is Open Data Sharing important?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In short, let them do what they do best and let us developers develop the best apps possible on their data.&lt;/p&gt;  &lt;p&gt;If we just look at phone application developers – there are many different smart phones out there, and we all like different features and functions in applications – which is why there’s about 66 different “torch” apps just on the WP7 marketplace. The government is good at collecting this data and running it’s services, not necessarily great at writing the applications we all want to use.  The cost for them to develop a fully featured transit application on every smartphone platform, to keep it current, evaluate the features that people want would be enormous, not to mention the time to market for across all of the devices would be substantial.&lt;/p&gt;  &lt;p&gt;If they just publish the data to a known standard, then application developers can make their own applications, with reliable data and bring it to market using their specialist skills much quicker. I’d love to see 10 different Brisbane Transit applications on WP7 and I’m sure many of you would love to see it on your favourite devices.&lt;/p&gt;  &lt;p&gt;For us, it would mean we can take the investment we made in TransHub Sydney, and apply it to the Brisbane data and make an equivalent application in under 2 weeks – I don’t think any government department could match that time to market. As we have customers using each city version of the application we can address, and add feature requests for a specific city and apply them across the range of cities with not much additional effort.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:015aa738-4c56-4b4b-9563-546e20808084" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Open+Data" rel="tag"&gt;Open Data&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Data.gov.au" rel="tag"&gt;Data.gov.au&lt;/a&gt;,&lt;a href="http://technorati.com/tags/TransHub" rel="tag"&gt;TransHub&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Canberra" rel="tag"&gt;Canberra&lt;/a&gt;,&lt;a href="http://technorati.com/tags/LibraryHack2011" rel="tag"&gt;LibraryHack2011&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/759/Why-Open-Data-Sharing-Is-Important.aspx</link>
      <comments>http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/759/Why-Open-Data-Sharing-Is-Important.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.soulsolutions.com.au/Blog/tabid/73/EntryId/759/Why-Open-Data-Sharing-Is-Important.aspx</guid>
      <pubDate>Fri, 14 Oct 2011 03:01:05 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.soulsolutions.com.au/DesktopModules/Blog/Trackback.aspx?id=759</trackback:ping>
    </item>
  </channel>
</rss>
