Thursday, 13 August 2015

Experiences from using existing projects within VS2015

I've been using VS2015 since an early preview at home but now it's launched I've been trialling it with many of our solutions within work trying to iron out any associated pain before we upgrade every developer (that hasn't already ;)).

One thing I've noticed across a few of our web projects that's caught a few people out is an issue with the new version of IIS Express, and actually if we ever got to deploying to IIS 10.

For many of our web projects we have added additional mimeTypes via the web.config to allow IIS to serve up woff2 files, previously you would have done this via:

        <mimeMap fileExtension=".woff2"mimeType="application/font-woff2" />

However IIS 10, and therefore IIS Express 10, now handles this mimeType automatically. When you run your existing projects via VS2015 you will find all of your websites styling and images suddenly disappear. This can be quite alarming and confusing as the dynamic ASP.Net content loads fine, but all of your static content doesn't.

By using dev tools to investigate the request and response for one of the static resources you will find:
 Failed to load resource: the server responded with a status of 500 (Internal Server Error)
When you then look at the response you find:

HTTP Error 500.19 - Internal Server Error

The requested page cannot be accessed because the related configuration data for the page is invalid.

Config Error   Cannot add duplicate collection entry of type 'mimeMap' with unique key attribute 'fileExtension' set to '.woff2'

This nicely points out the issue, the static file handler already knows about the woff2 mimetype, the trick now is how to solve this for IIS 10 but still maintain the fix for older versions. This is as simple as removing the existing mimemap for the fileExtension before adding it.

        <remove fileExtension=".woff2" /> 
        <mimeMap fileExtension=".woff2" mimeType="application/font-woff2" /> 

This seems a bit mad as I had expected that if an add duplicate would fail wouldnt a removal of a non existing item, but meh it works ;)

So there we have it an odd issue that's actually really simple to resolve. I hope any other issues I find are as easy to fix ;)

Wednesday, 5 August 2015

Developing a Microsoft Band App Using Windows Universal Apps i.e Windows 10

Last week I finally picked myself up a Microsoft Band and instantly started thinking about potential app ideas and that's where they were left, as thoughts :) However unfortunately I also got knocked off my bike last week and ended up with a fractured elbow (at least this is all it was). Today I finally got my sling off and have been given a ton of Physio exercises so I can actually get my arm moving properly again, at the moment it sucks.

These Physio exercises have to be done every hour in order to ensure I regain full mobility of my arm but it's kind of a drag to remember. I started by simply using the Band's Countdown App to remind me to do these, but whilst traveling this afternoon I thought of writing an App that not only reminded me to do these exercises but also logged and could display how many iterations of the exercises I performed and how fast etc. Needless to say tonight I started playing with the Band SDK and decided to start a series of blog posts that outlines how I get on and things I learnt etc.

Stage One - Getting a Windows Universal App up and running.

I started off by getting a new Windows Universal App created and then using Nuget to install the Band SDK Package [Microsoft.Band]. I then looked through the Microsoft Band SDK documentation on how you need to set things up etc. Here's where I noticed that the documentation and infact a lot of the SDK is all targeted at Windows 8.1 but I'm trying to write for the Windows 10 era. So for Universal Windows Apps where in the SDK documentation it talks about "Windows Store Applications Capabilities" you need to do the following:

  1. Open Package.appxmanifest and navigate to the Capabilities tab
  2. Then scroll down to the Proximity checkbox and enable it
  3. Right click your package.appxmanifest within solution explorer and select View Code. Note: if this is still open from the previous step you'll be prompted that the designer will be closed.
  4. Navigate to the Capabilities XML Node and add the following to the bottom:
<DeviceCapability Name="bluetooth.rfcomm">
   <Device Id="any">
    <!-- Used by the Microsoft Band SDK -->
    <Function Type="serviceId:A502CA9A-2BA5-413C-A4E0-13804E47B38F" />
    <!-- Used by the Microsoft Band SDK -->
    <Function Type="serviceId:C742E1A2-6320-5ABC-9643-D206C677E580" />

With this done you can then follow the other code samples within the SDK documentation which I won't document here. What I do want to mention is how on first appearances is quite easy and clear to use. You ensure you have permissions to use a sensor, you start / stop collecting readings and readings are raised via events with some easy to understand structured types, and as you'd expect it's all async. :)

In my next post I'm going to talk about how I've decided to make use of some of the sensor data and how to manage the sheer volume.