Tuesday
Nov252014

GesturePak v2.0 Public Beta

GesturePak is both an app that records you making gestures and an SDK for WPF (.NET 4.5) that determines when user has made those gestures.  It requires the Kinect for Windows v2 Sensor or the XBox One Kinect Sensor with the optional Kinect Adapter for Windows ($49 US). It also requires the Kinect for Windows 2.0 SDK.

An all new User Interface makes it easy to record and edit gestures.

Download the beta code here

 

Tuesday
Nov252014

Introducing KinectTools v2.0 for Kinect for Windows v2.0

KinectTools

Tools for simplifying Kinect for Windows v2.0 programming in WPF

KinectTools offers three classes for simplifying the Kinect for Windows v2 SDK.

https://github.com/carlfranklin/KinectToolsV2

BodyViewer

Exposes a WPF ImageSource property you can bind to an Image control for displaying a 3D Body stick figure. You have control over all of the brushes and pens used to draw the stick figure.

BodyViewer exposes an event that occurs when a frame is available, and passes you a Body object. You can inspect the X, Y, an Z values of each Joint.

You can optionally turn off drawing and just handle the data.

BodyViewer also gives you the ability to draw an image from a PNG file over the head of the body.

ColorViewer

Exposes a WPF ImageSource property you can bind to an Image control for displaying full color video.

ColorAndBodyViewer

Exposes two ImageSource properties that you can display in XAML Image controls. Has all of the features of both ColorViewer and BodyViewer except the Body and Color images line up and can be shown in a grid like so:

    <Grid x:Name="MainGrid">
        <!-- Color Video -->
        <Border Background="Black" >
            <Image x:Name="VideoImage" Margin="5" Source="{Binding VideoImageSource}" Stretch="Uniform" />
        </Border>
        <!-- Superimposed Body Video -->
        <Border Background="Transparent"  >
            <Image x:Name="BodyImage" Margin="5" Source="{Binding BodyImageSource}" Stretch="Uniform" />
        </Border>
    </Grid>

Note:

The ColorViewer may in fact give you a lower frame rate as the ColorAndBodyViewer. That is because the ColorAndBodyViewer does not grab frames the same way as the ColorViewer.

The ColorAndBodyViewer tracks the Body, and hooks the FrameArrived event on the BodyFrameReader, then captures the latest color frame from a ColorFrameReader. The result is 30FPS, even if there are duplicate video frames.

Wednesday
Sep172014

MacBook Pro + Parallels + Windows 8.1 + Visual Studio + Xamarin = awesome

I went searching for the ultimate developer machine setup, and I've found it. The title of this post says it all.

I started with a full blown MacBook Pro. It's got 16GB of RAM, the retina display, and a 1TB PCIeX-based flash drive, supposedly faster than SSD. Basically, I got all the options, and I'm not regretting it. I don't miss the touch screen, either.

At first I thought I should sign in to all of my social services, so I did. That got very annoying very fast. I started by turning off notifications, then I just decided to remove the accounts. This is a developer machine. I use my phone to check Facebook, and the web-based GMail client works just fine for me.

Then, I added Parallels, which lets me run Windows and OSX at the same time. You can either switch full screen or use "Coherence," a mode in which Windows apps can run right alongside Mac apps on the same desktop.

Parallels let me install Windows 8.1 with the option to make it look like Windows 7. This option actually installs the Stardock apps, Start8 (gives you a Windows 7 style start menu) and ModernMix (lets you run Windows Store apps on the desktop). That was a seamless experience that just delighted me to no end.

After figuring out how to navigate Windows with Parallels (switching in and out of Coherence mode) I made sure all the latest updates were installed, and then started installing Windows apps: 

NOTE: In order for you to get the Visual Studio experience you know and love, you must disable the Function Key mapping that the Mac imposes. Go to System Preferences/Keyboard. From the Keyboard Tab, check the box that says Use all F1, F2, etc. keys as standard function keys. Then go to the Shortcuts Tab, Select Mission Control and uncheck Show Desktop (F11) and Show Dashboard (F12). That will give you back your function keys in Visual Studio. :)

On the Mac side I installed the following:

I also had to install the Samsung USB Driver for Mobile Phones so I could connect my Galaxy S5 and use it for development. If you plan on using an Android device, there are instructions on Xamarin's website, but I found this didn't go so far as to explain that you might need to go online to find your phone manufacturer's USB drivers. I had to find that by GoogleBinging it. 

Also, as noted in the documentation, I had to enable USB debugging on my S5. That's tricky. First you have to enable developer mode on the phone by standing on your head and reciting a spell. Then, you have to enable USB debugging. This won't work unless the USB Driver is installed.

After all that I was able to create a new Xamarin Forms app with Visual Studio 2013. I created a Shared project in VS2013. I set the Android project to be the startup project, ran it, and after a few minutes I saw "Hello Forms" on my S5 screen. Great.

The Windows Phone option was easy. It ran in the emulator, which is pretty good.

The iOS app was a bit trickier to set up.

First, you need to run the Xamarin iOS Build Host app on the Mac side, an app which comes with Xamarin Tools, and press the Pair button. 

The Xamarin tools in Visual Studio will look for this app on the same machine. This is the reason why I chose a MacBook Pro with Parallels. It just works.

In Visual Studio you select the iOS emulator, and then you get to select which iOS device you wish to emulate. Set the iOS project as the startup project and run the app.

To summarize, if you want to minimize the cross-platform headaches involved in developing with Xamarin tools, go with a MacBook and Parallels.

Tuesday
Jul292014

"Stay away from Buffalo Hard Drives"

That's what they told me at The Oliver Group, a local data recovery company where I took my Buffalo DriveStation Axis Velocity external 3TB hard drive. "They have their own software that sits on a controller board between the drive and the OS. We've seen it cook the hard drives to the point of physical damage."

I tested the theory by taking the Seagate 3TB drive out of the enclosure and connecting it to my PC with a USB3 dock I use for many other drives. Turns out Windows sees it as an uninitialized drive, and only in Drive Manager. Pop it back in the Buffalo enclosure and everything is there.

It all started when I was recording a .NET Rocks! show with Ted Pattison. The recording stopped abruptly and I was unable to access the files I was just recording to. Other files started giving me trouble as well. I could read the directory data just fine. There was no typical skipping noise or churning noise coming from the drive indicating bad sectors. There was only a problem when I went to copy or otherwise access the files. The OS hung like it no idea how to deal with the issue. That's becuase it didn't. 

The Oliver Group was able to restore all the data onto a new hard drive except for about 50MB worth of files, some of which hadn't been touched in over a year. $500 later, as the technician was handing me my drives he said, "a word of warning. Stay away from these Buffalo external drives."

And so I shall.

Monday
Jun232014

Prepare your Mac for use with Xamarin iOS.

Before you can get started with Xamarin.iOS, whether or not you plan to use Xamarin Forms, you must prepare your Mac for network use. This document will show you how to configure the network, install VNC for remote access, and connect using either a crossover cable or a network hub.

The Connection

I recommend making a hard Ethernet connection to your Mac using a Static IP address. You can either use a network hub or a crossover cable to make the physical connection.

If you use a hub or switch, connect both your Windows machine and the Mac to the hub/switch using standard network patch cables. If you want to avoid the extra hardware, just connect the Windows machine directly to the mac using a crossover cable, a network cable in which the Transmit and Receive wires are crossed. You can get one online at MonoPrice for less than $2.00.

Select an IP Address for your Mac

If you're already using the network port on your Windows machine, you'll have to find an available IP address. If you're behind a NAT router your Windows IP address will be something like 192.168.X.X or 10.1.X.X. That means you need to know what IP addresses are available and which are reserved for DHCP. You can find this by connecting to your router as an admin.

First, we need to find the address of the router. This would be listed as your Default Gateway in your network settings. You can find this by opening a command prompt and typing "ipconfig/all". My default gateway is 192.168.1.1. Connect to this address with your browser ("http://192.186.1.1"), log in as the admin and find your DHCP settings. There will be a range of addresses to use for DHCP. In my case, the range is 192.168.1.2 to 192.168.1.100. That means we can safely use 192.168.1.101 and higher for static IP addresses.

My Windows machine actually has a static IP address of 192.168.1.101, so I will assign my Mac Mini to use 192.168.1.102.

If you're not using the Ethernet port on your Windows machine, you can give it any IP address you like, so long as it doesn't conflict with your current IP address. To be safe, make up something non-standard. Give yourself 100.9.33.1 and give the Mac 100.9.33.2. The rest of this document assumes the first scenario: 192.168.1.101 for the Windows machine and 192.168.1.102 for the Mac.

Windows Network Settings

IP Address: 192.168.1.101

Subnet Mask: 255.255.255.0

Default Gateway: 192.168.1.1

Refer to this document if you don't know how to change your IP address on Windows.

Mac Network Settings

Open up System Preferences on the Mac and navigate to the Network screen. Select Ethernet Connected and enter the following settings:

Click to enlarge

IP Address: 192.168.1.102

Subnet Mask: 255.255.255.0

Default Gateway: 192.168.1.1

 

 

 

Add DNS Server

Click the Advanced button and navigate to the DNS Tab. Click the + button in the bottom left, and enter 192.168.1.1 (or whatever your Default Gateway address is). Click the Apply button. You are networked!

Install VNC

VNC is a free remote-desktop app with support for every platform. You can get this for free from http://realvnc.com. Go there with Safari on your Mac and download VNC. Make sure you download the complete version, not just the viewer. Follow the installation instructions.

Run VNC Server

Run the VNC Server app on the mac and configure a password from the Options menu.

click to enlargeOnce you enter a password you're good to go. 

Install VNC on your Windows machine, run the VNC Viewer, and enter the Mac's IP address and the VNC password, and you should be able to connect to it.

Now you are ready to rock and roll in the world of Xamarin.