<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>A load of stuff about Azure IaaS and Azure IoT</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/david/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/david/feed.xml</link>
    <description>Thinking about Azure IaaS and IoT....and some other dev stuff that floats me boat.</description>
    <lastBuildDate>Tue, 11 Sep 2018 10:42:17 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Building Azure Stream Analytics Resources via ARM Templates - Part 2 - The Template.</title>
      <link>https://docs.microsoft.com/archive/blogs/david/building-azure-stream-analytics-resources-via-arm-templates-part-2-the-template</link>
      <pubDate>Thu, 20 Jul 2017 17:39:50 GMT</pubDate>
      <dc:creator><![CDATA[Dave The Engineer]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/david/?p=825</guid>
      <description><![CDATA[Check out Part 1 of this post.

In this 2nd part of my post on building Azure Stream Analytics...]]></description>
      <content:encoded><![CDATA[<a href="https://blogs.msdn.microsoft.com/david/2017/03/13/715/">Check out Part 1 of this post.</a>

In this 2nd part of my post on building Azure Stream Analytics Resources using ARM Templates we are going to get down and actually build something :)

You've probably ended up here because you can't find a lot of really good help anywhere else on how to create Stream Analytics resources in ARM templates. Here is a good reason for this....it's not officially supported. Yes that's right, the reason you can't find any proper documentation on the MSDN or Azure documentation website is that it doesn't exist. Even the formal ARM template schemas which we discussed in part 1 don't exist.

For example, take a look at this snippet from a Stream Analytics template which you might have seen elsewhere on the intertubes:
<pre>{
      "apiVersion": "2016-03-01",
      "name": "[variables('streamAnalyticsJobName')]",
      "location": "[resourceGroup().location]",
      "type": "Microsoft.StreamAnalytics/StreamingJobs",
      "dependsOn": [
        "[concat('Microsoft.Devices/IotHubs/', parameters('iotHubName'))]"
      ],
      .........
</pre>
See that <strong>apiVersion</strong> bit and the <strong>type</strong> bit? Go and take a look at the schema reference file <strong>Microsoft.StreamAnalytics.json</strong> in the location I told you about last time, i.e. in the<a href="https://github.com/Azure/azure-resource-manager-schemas/tree/master/schemas/2016-03-01"> https://github.com/Azure/azure-resource-manager-schemas/tree/master/schemas/2016-03-01</a> folder.

Did you enjoy reading the file? Of course you didn't....it doesn't exist :( and so here-in lies the problem.

<span style="color: #ff0000"><strong>[Update on 11th September 2018 - I've just looked again and the file was added on the 14th October 2017 - https://github.com/Azure/azure-resource-manager-schemas/commits/master/schemas/2016-03-01/Microsoft.StreamAnalytics.json]</strong></span>

Quite why this was never published or made official is something I'm not able to answer. My assumption is that either 1) there is some (possibly technical) blocker which is preventing it from being published, 2) it's not seen as a priority. In either case you can provide feedback at <a href="https://feedback.azure.com/forums/270577-stream-analytics">https://feedback.azure.com/forums/270577-stream-analytics</a> which is the official location where the Stream Analytics team look for new feature requests. There is already an item opened for just this issue: <a href="https://feedback.azure.com/forums/270577-stream-analytics/suggestions/18611194-make-stream-analitics-fully-configurable-from-arm">https://feedback.azure.com/forums/270577-stream-analytics/suggestions/18611194-make-stream-analitics-fully-configurable-from-arm</a> - you'll probably want to go and vote it up.
<h4>But it's not all sad news :)</h4>
After a few days playing with examples I could find, some trial and error and a good dose of reverse engineering using <a href="https://resources.azure.com">https://resources.azure.com</a> I was able to get a fully working template which created a Stream Analytics job and created both input and output locations <em>(an IoTHub as input and PowerBI Streaming Dataset as output)</em>. Creating the job was the easy bit, there are lots of places on the web which show this. Adding Inputs and Outputs took some more effort but I got it working. The only things which where <strong>not</strong> possible using a template where:-
<ol>
 	<li><strong>Starting the job.</strong> Once the input, query and output settings have been specified you'll have to manually start the job in the Azure Portal UI or by calling the REST API.</li>
 	<li><strong>Fully configuring the PowerBI OAuth credentials.</strong> My output is configured as a PowerBI (PBI) Streaming Dataset. In order to connect and send data the Stream Analytics jobs needs the correct permissions - specifically it needs an OAuth token. You can't specify this in the template because it's generated on the fly by AzureAD. You will need to deploy the template which creates the job and output which <em>thinks</em> it's connected to PBI using the user principal name you supply. Then you will need to via the Azure Portal go in to the output definition, and click on "Re-authorize". This makes the AzurePortal talk to AzureAD and obtain an OAuth token (which is then stored inside the job definition). It will be used whenever the job output needs to send data to PBI.</li>
</ol>
Of course that 2nd issue might not be a problem for you if you want to output to somewhere other than PBI.
<h4>How did I work out the template when it's not documented?</h4>
Blah..blah..to do when I get time/reminders/comments/requests etc.
<h4>How do I connect to input X or send to output Y?</h4>
Chances are you want to read from or send to another input or output and I didn't cover that here. If you need help, leave a comment and as soon as I get time I'll add it to this document (or probably start a part 3).
<h4>Show me your fully working example.</h4>
The original goal of the template was to:
<ol>
 	<li><strong>Read messages from an IoT Hub</strong>. <em>Messages are JSON in UTF-8.</em></li>
 	<li><strong>Perform a simple query</strong>. <em>Err, it just copies the input to the output. You can add your own query in place of mine.</em></li>
 	<li><strong>Output to a PowerBI Streaming Dataset</strong>. You specify in the template output the name of the dataset and table. You will see these appear automatically in the PBI Portal once the first message has been sent there <em>(i.e. they don't get created when you create your Stream Analytics job output and configure the authentication). This caught me out a few times.</em></li>
</ol>
This template creates the IoT Hub, the Stream Analytics job, the Input to read from the IoT Hub, and defines the Output to send stuff to PBI. I've left my original parameters and variable references in place and I'm sure you'll be able to replace those with something suitable.
<ol>
 	<li><strong>iotHubName</strong>: <em>The name of the IoTHub you want to create. Must be unique across the whole of Azure.</em></li>
 	<li><strong>userDisplayName</strong>: <em>A human readable name to associate the OAuth token for connecting to the PBI Streaming Dataset. It doesn't seem to really matter what you enter here but something is required.</em></li>
 	<li><strong>userLoginName</strong>: <em>The username in user@domain.com format that you want to use for authenticating against PowerBI.</em></li>
 	<li><strong>streamAnalyticsJobName</strong>: <em>The name of the main job which will be created.</em></li>
</ol>
Now here it is in all it's glory......
<pre>{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "iotHubName": {
      "type": "string",
      "minLength": 3,
      "defaultValue": "wibblehub66",
      "metadata": {
        "description": "Name of the IoT Hub instance to provision."
      }
    },
    "userDisplayName": {
      "type": "string",
      "minLength": 3,
      "defaultValue": "Billy Bunter",
      "metadata": {
        "description": "Your name for connecting Stream Analytics to PowerBI."
      }
    },
    "userLoginName": {
      "type": "string",
      "minLength": 3,
      "defaultValue": "billybunter@microsoft.com",
      "metadata": {
        "description": "Your loginname/alias for connecting Stream Analytics to PowerBI."
      }
    }
  },
  "variables": {
    "streamAnalyticsJobName": "MyAceJobName"
  },
  "resources": [
    {
      "apiVersion": "2016-02-03",
      "location": "[resourceGroup().location]",
      "name": "[parameters('iotHubName')]",
      "type": "Microsoft.Devices/IotHubs",
      "properties": {
        "eventHubEndpoints": {
          "events": {
            "retentionTimeInDays": 1,
            "partitionCount": 2
          }
        },
        "cloudToDevice": {
          "defaultTtlAsIso8601": "PT1H",
          "maxDeliveryCount": 10,
          "feedback": {
            "maxDeliveryCount": 10,
            "ttlAsIso8601": "PT1H",
            "lockDurationAsIso8601": "PT60S"
          }
        },
        "location": "[resourceGroup().location]"
      },
      "sku": {
        "name": "S1",
        "capacity": 2
      }
    },
    {
      "apiVersion": "2016-03-01",
      "name": "[variables('streamAnalyticsJobName')]",
      "location": "[resourceGroup().location]",
      "type": "Microsoft.StreamAnalytics/StreamingJobs",
      "dependsOn": [
        "[concat('Microsoft.Devices/IotHubs/', parameters('iotHubName'))]"
      ],
      "properties": {
        "sku": {
          "name": "standard"
        },
        "outputErrorPolicy": "stop",
        "eventsOutOfOrderPolicy": "adjust",
        "eventsOutOfOrderMaxDelayInSeconds": 0,
        "eventsLateArrivalMaxDelayInSeconds": 5,
        "dataLocale": "en-US",
        "inputs": [
          {
            "Name": "IoTHub",
            "Properties": {
              "DataSource": {
                "Properties": {
                  "iotHubNamespace": "[parameters('iothubname')]",
                  "sharedAccessPolicyKey": "[listkeys(resourceId('Microsoft.Devices/IotHubs/IotHubKeys',parameters('iothubname'), 'iothubowner'),'2016-02-03').primaryKey]",
                  "sharedAccessPolicyName": "iothubowner",
                  "endpoint": "messages/events"
                },
                "Type": "Microsoft.Devices/IotHubs"
              },
              "Serialization": {
                "Properties": {
                  "Encoding": "UTF8"
                },
                "Type": "Json"
              },
              "Type": "Stream"
            }
          }
        ],
        "transformation": {
          "name": "Transformation",
          "properties": {
            "streamingUnits": 1,
            "query": "SELECT\r\n    *\r\nINTO\r\n    [PBI]\r\nFROM\r\n    [IoTHub]"
          }
        },
        "outputs": [
          {
            "name": "PBI",
            "properties": {
              "dataSource": {
                "type": "PowerBI",
                "outputPowerBISource": {
                  "dataSet": "HeartDataSet",
                  "table": "HeartDataTable",
                  "groupId": "",
                  "groupName": "My Workspace",
                  "refreshToken": "dummytoken",
                  "tokenUserDisplayName": "[parameters('userDisplayName')]",
                  "tokenUserPrincipalName": "[parameters('userLoginName')]"
                },
                "properties": {
                  "dataSet": "HeartDataSet",
                  "table": "HeartDataTable",
                  "groupId": "",
                  "groupName": "My Workspace",
                  "refreshToken": "dummytoken",
                  "tokenUserDisplayName": "[parameters('userDisplayName')]",
                  "tokenUserPrincipalName": "[parameters('userLoginName')]"
                }
              },
              "serialization": null,
              "diagnostics": null
            }
          }
        ]
      }
    }
  ],
  "outputs": {
    "IoTHub": {
      "type": "object",
      "value": "[reference(resourceId('Microsoft.Devices/IotHubs',parameters('iotHubName')), '2016-02-03')]"
    },
    "SharedAccessPolicyKey": {
      "value": "[listkeys(resourceId('Microsoft.Devices/IotHubs/IotHubKeys',parameters('iothubname'), 'iothubowner'),'2016-02-03').primaryKey]",
      "type": "string"
    },
    "Hostname": {
      "value": "[reference(resourceId('Microsoft.Devices/IotHubs',parameters('iotHubName')), '2016-02-03').hostname]",
      "type": "string"
    }
  }
}
</pre>
<h3></h3>]]></content:encoded>
    </item>
    <item>
      <title>Setting up Raspian and .NET Core 2.0 on a Raspberry Pi</title>
      <link>https://docs.microsoft.com/archive/blogs/david/setting_up_raspian_and_dotnet_core_2_0_on_a_raspberry_pi</link>
      <pubDate>Thu, 20 Jul 2017 17:20:30 GMT</pubDate>
      <dc:creator><![CDATA[Dave The Engineer]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/david/?p=736</guid>
      <description><![CDATA[Here's a little something I wrote for a customer who wants to use .Net Core on a Raspberry Pi. You...]]></description>
      <content:encoded><![CDATA[Here's a little something I wrote for a customer who wants to use .Net Core on a Raspberry Pi. You might find it useful as well.
<table>
<tbody>
<tr>
<td><img src="https://msdnshared.blob.core.windows.net/media/2017/07/raspian.png" alt="" width="256" height="179" class="alignnone size-full wp-image-755" /></td>
<td></td>
<td><a href="https://www.raspberrypi.org/downloads/raspbian/">Raspbian</a> Linux is the <a href="https://www.raspberrypi.org">Raspberry Pi Foundation</a>'s officially supported operating system for running the Raspberry Pi.</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><img src="https://msdnshared.blob.core.windows.net/media/2017/07/net-core.png" alt="" width="256" height="192" class="alignnone size-full wp-image-746" /></td>
<td></td>
<td><a href="https://www.microsoft.com/net/download/core">.NET Core</a> is Microsoft's new modular open source implementation of .NET for creating web applications and services that run on Windows, Linux and Mac.</td>
</tr>
</tbody>
</table>
Don't worry if you've never used either of these technologies before, this post will take you though the steps to get Raspian and .NET Core installed and working on a Raspberry Pi device.

Both these technologies are well maintained and supported by their creators and each has excellent documentation which is always up to date. To keep this post as small as possible it will act as a guide, describing each task to be carried out in brief but providing references to external documentation when more details are required.
<h2>Step 1 - Prepare a Raspian Linux SD card.</h2>
In order to start-up a Raspberry Pi, it must have an operating system installed onto an SD card which has been inserted into the device. Raspian Linux is one of the <a href="https://www.raspberrypi.org/downloads/">officially supported operating systems</a> along with 3rd party options such as Windows 10 IoT Core.

The process of installing an operating system onto an SD card is known as<em> flashing</em> the card. Flashing is carried out using a tool or utility which is capable of reading an <em>image</em> file which has been downloaded from an O/S vendor. The image file is typically a binary file and the utility is capable of reading the image and writing it to the SD card.
<h3>Task:  Install Raspian Linux onto an SD card.</h3>
<em>Reference: <a href="https://www.raspberrypi.org/documentation/installation/installing-images/README.md">https://www.raspberrypi.org/documentation/installation/installing-images/README.md</a></em>
<ol>
 	<li><a href="https://downloads.raspberrypi.org/raspbian_latest">Download</a> the latest <strong><em>Raspbian Jessie with desktop</em></strong> Linux image to your local machine. <em>Other download options are available at <a href="https://www.raspberrypi.org/downloads/raspbian/">Download Raspian</a>.</em></li>
 	<li><a href="https://etcher.io/">Download</a> the <em><strong>Etcher</strong></em> image writing utility and install it.</li>
 	<li>Insert the SD card into your computer.</li>
 	<li>Open Etcher and select from your hard drive the .zip file you downloaded in step 1.</li>
 	<li>Select the SD card you wish to write your image to.</li>
 	<li>Review your selections and click 'Flash!' to begin writing data to the SD card.</li>
 	<li>Once flashing is complete, create a new empty file named <strong>ssh</strong> (with no extension) in the root of the drive that holds the SD card. This will ensure that the SSH daemon is enabled once the Raspberry Pi has started and you can logon over the network.</li>
</ol>
<h2>Step 2 - Boot the Raspberry Pi and connect over the network.</h2>
Ensure your Raspberry Pi has the following cables connected:
<ul>
 	<li>HDMI - so you can watch the boot process from a screen.</li>
 	<li>Ethernet cable - avoid connecting to corporate networks as firewalls and proxies/proxy authentication problems can waste setup time.</li>
 	<li>Keyboard and mouse.</li>
</ul>
<h3>Task: Power up the Raspberry Pi and obtain its IP address.</h3>
<ul>
 	<li>Insert the SD card into the base of the Raspberry Pi. <em>Ensure the electric contacts are facing upwards</em>.</li>
 	<li>Power-up the RPi by plugging in the micro-USB power supply. <em>Wait until it reaches the desktop</em>.</li>
</ul>
<img src="https://msdnshared.blob.core.windows.net/media/2017/07/RPiBoot-300x227.gif" alt="" width="300" height="227" class="alignnone size-medium wp-image-806" />

<img src="https://msdnshared.blob.core.windows.net/media/2017/07/pixel-300x264.png" alt="" width="300" height="264" class="alignnone size-medium wp-image-795" />

<img src="https://msdnshared.blob.core.windows.net/media/2017/07/desktop-300x168.png" alt="" width="300" height="168" class="alignnone size-medium wp-image-765" />
<ul>
 	<li>Click on the <strong>Terminal</strong> icon on the top menu to open a prompt and type <strong>ifconfig</strong> to obtain the IP address which has been assigned by your DHCP server to the Raspberry Pi.</li>
</ul>
<img src="https://msdnshared.blob.core.windows.net/media/2017/07/ipaddress-300x189.png" alt="" width="300" height="189" class="alignnone size-medium wp-image-786" />
<ul>
 	<li><a href="https://www.putty.org/">Download</a> the PuTTY SSH and Telnet client and launch it.</li>
 	<li>Enter the IP address of the Raspberry Pi and click <strong>Open</strong>. <em>Accept the message about keys</em>.</li>
</ul>
<img src="https://msdnshared.blob.core.windows.net/media/2017/07/putty-300x282.png" alt="" width="300" height="282" class="alignnone size-medium wp-image-805" />
<ul>
 	<li>Enter <strong>pi</strong> as the logon name, and <strong>raspberry</strong> as the password.</li>
 	<li>Once you have reached the command line, <a href="https://www.raspberrypi.org/documentation/linux/usage/users.md">change the default password</a> for the <strong>pi</strong> user.</li>
</ul>
<h3>Step 3 - Install the .NET Core Runtime.</h3>
Three components are typically required to create and run a .NET Core application:-
<ol>
 	<li><strong>.NET Core Runtime.</strong> <em>Needs to be installed on any machine where a .NET Core application will run.</em></li>
 	<li><strong>.NET Core SDK</strong>. <em>Needs to be installed on any machine used to develop .NET Core applications.</em></li>
 	<li><strong>IDE Tools.</strong> <em>Adds-on for your chosen IDE to automate the development process.</em></li>
</ol>
The .NET Core Runtime is available for Windows, MacOS and various flavours of Linux however only the most recent version; .NET Core Runtime 2.0 is supported for running on Raspian Linux on the ARM32 processor architecture. This means it is possible to run .NET Core applications on the Raspberry Pi.

However there is currently no .NET Core SDK available for Raspian Linux running on the Raspberry Pi (i.e. ARM32).

The end result? It is not as yet possible to develop a .NET Core application *directly* on the RPi itself. Instead an application must be developed on a <em>supported platform</em> (i.e. another machine running Windows, MacOS or one of the various flavours of Linux running on x86 or x64) then deployed to the Raspberry Pi.

See the <a href="https://github.com/dotnet/core/blob/master/samples/RaspberryPiInstructions.md">dotnet/Core repository</a> for an official statement.
<h3>Task: Install the .NET Core Runtime on the Raspberry Pi.</h3>
The following commands need to be run on the Raspberry Pi whilst connected over an SSH session or via a terminal in the PIXEL desktop environment.
<ul>
 	<li>Run <strong>sudo apt-get install curl libunwind8 gettext</strong>. This will use the apt-get package manager to install three prerequiste packages.</li>
 	<li>Run <strong>curl -sSL -o dotnet.tar.gz https://dotnetcli.blob.core.windows.net/dotnet/Runtime/release/2.0.0/dotnet-runtime-latest-linux-arm.tar.gz</strong> to download the latest .NET Core Runtime for ARM32. <em>This is refereed to as <strong>armhf</strong> on the <a href="https://github.com/dotnet/core-setup">Daily Builds</a> page.</em></li>
 	<li>Run <strong>sudo mkdir -p /opt/dotnet &amp;&amp; sudo tar zxf dotnet.tar.gz -C /opt/dotnet</strong> to create a destination folder and extract the downloaded package into it.</li>
 	<li>Run <strong>sudo ln -s /opt/dotnet/dotnet /usr/local/bin</strong>` to set up a symbolic link...a shortcut to you Windows folks ;) to the <strong>dotnet</strong> executable.</li>
 	<li>Test the installation by typing <strong>dotnet --help</strong>.</li>
</ul>
<img src="https://msdnshared.blob.core.windows.net/media/2017/07/dotnetcommand-300x103.png" alt="" width="300" height="103" class="alignnone size-medium wp-image-775" />
<ul>
 	<li>Try to create a new .NET Core project by typing <strong>dotnet new console</strong>. Note this will prompt you to install the .NET Core SDK however this link won't work for Raspian on ARM32. This is expected behaviour.</li>
</ul>
<img src="https://msdnshared.blob.core.windows.net/media/2017/07/dotnetnewfail-300x65.png" alt="" width="300" height="65" class="alignnone size-medium wp-image-785" />
<ul>
 	<li><em>Optional:</em> Follow the steps outlined in the <a href="https://github.com/dotnet/core/blob/master/samples/RaspberryPiInstructions.md">.NET Core on Raspberry Pi</a> guide to create a test console application on your local development machine then run it on the RPi. <em>The key action here is that you will create an application then publish the it using the <strong>dotnet publish -r linux-arm</strong> command.</em></li>
</ul>]]></content:encoded>
    </item>
    <item>
      <title>Azure AD Groups, Claims and the Graph API.</title>
      <link>https://docs.microsoft.com/archive/blogs/david/azure-ad-groups-claims-and-the-graph-api</link>
      <pubDate>Tue, 02 May 2017 12:44:13 GMT</pubDate>
      <dc:creator><![CDATA[Dave The Engineer]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/david/?p=735</guid>
      <description><![CDATA[As part of my role as a Premier Field Engineer I deliver training workshops on Azure. Recently the...]]></description>
      <content:encoded><![CDATA[<span style="color: #000000;font-family: Calibri">As part of my role as a Premier Field Engineer I deliver training workshops on Azure. Recently the customer wanted to know all about the Graph API, the REST interface for interacting with Azure Active Directory from a custom application. The information below is a summary I wrote for them on the subject with content pulled from a number of places. Their main aim was to create groups in Azure AD, add users then use those groups to turn on/off certain features in their application.</span>

<span style="color: #000000;font-family: Calibri">They wanted to do this from a web application but I’m also going to include some information on how this is also achieved from a native (desktop) application.</span>

<span style="color: #000000;font-family: Calibri">You won’t find anything in here that is secret or hidden, it’s all public information that comes from either the official Azure documentation or other public blogs.</span>

<span style="color: #000000;font-family: Calibri">One item worth noting is that by default, Azure AD does NOT send the claims which details the groups an account is a member of</span><span><span style="color: #000000;font-family: Calibri">  </span></span><span style="color: #000000;font-family: Calibri">- this needs to be turned on manually. There is no way to do this via the “Classic” interface however you download the “Manifest fest” aka the configuration file for Azure AD, update that and then reupload it. The </span><a href="https://www.simple-talk.com/cloud/security-and-compliance/azure-active-directory-part-4-group-claims/"><span style="color: #0563c1;font-family: Calibri">https://www.simple-talk.com/cloud/security-and-compliance/azure-active-directory-part-4-group-claims/</span></a><span style="color: #000000;font-family: Calibri"> article has details on how to do this.</span>

<span style="color: #000000;font-family: Calibri">Articles from others worth reading:</span>

<a href="https://rickrainey.com/2015/02/21/introducing-the-azure-ad-graph-api/"><span style="color: #0563c1;font-family: Calibri">https://rickrainey.com/2015/02/21/introducing-the-azure-ad-graph-api/</span></a>

<a href="https://rickrainey.com/2015/03/27/extending-azure-ad-using-the-graph-api/"><span style="color: #0563c1;font-family: Calibri">https://rickrainey.com/2015/03/27/extending-azure-ad-using-the-graph-api/</span></a>

<a href="https://rickrainey.com/"><span style="color: #0563c1;font-family: Calibri">https://rickrainey.com/</span></a>

<a href="https://www.dushyantgill.com/blog/2014/12/10/roles-based-access-control-in-cloud-applications-using-azure-ad/"><span style="color: #0563c1;font-family: Calibri">https://www.dushyantgill.com/blog/2014/12/10/roles-based-access-control-in-cloud-applications-using-azure-ad/</span></a>

<a href="https://www.cloudidentity.com/blog/2013/01/22/group-amp-role-claims-use-the-graph-api-to-get-back-isinrole-and-authorize-in-windows-azure-ad-apps/"><span style="color: #0563c1;font-family: Calibri">https://www.cloudidentity.com/blog/2013/01/22/group-amp-role-claims-use-the-graph-api-to-get-back-isinrole-and-authorize-in-windows-azure-ad-apps/</span></a>

&nbsp;

<span style="color: #000000;font-family: Calibri">Series of articles worth reading:</span>

<a href="https://www.simple-talk.com/cloud/security-and-compliance/azure-active-directory-part-3-developing-native-client-applications/"><span style="color: #0563c1;font-family: Calibri">https://www.simple-talk.com/cloud/security-and-compliance/azure-active-directory-part-3-developing-native-client-applications/</span></a>

<a href="https://www.simple-talk.com/cloud/security-and-compliance/azure-active-directory-part-4-group-claims/"><span style="color: #0563c1;font-family: Calibri">https://www.simple-talk.com/cloud/security-and-compliance/azure-active-directory-part-4-group-claims/</span></a>

<a href="https://www.simple-talk.com/cloud/security-and-compliance/azure-active-directory-part-5-graph-api/"><span style="color: #0563c1;font-family: Calibri">https://www.simple-talk.com/cloud/security-and-compliance/azure-active-directory-part-5-graph-api/</span></a>

<a href="https://www.simple-talk.com/cloud/security-and-compliance/azure-active-directory-part-6-schema-extensions/"><span style="color: #0563c1;font-family: Calibri">https://www.simple-talk.com/cloud/security-and-compliance/azure-active-directory-part-6-schema-extensions/</span></a>

<span style="color: #000000;font-family: Calibri"> </span>]]></content:encoded>
    </item>
    <item>
      <title>Building Azure Stream Analytics Resources via ARM Templates - Part 1 - Background information.</title>
      <link>https://docs.microsoft.com/archive/blogs/david/715</link>
      <pubDate>Mon, 13 Mar 2017 10:56:34 GMT</pubDate>
      <dc:creator><![CDATA[Dave The Engineer]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/david/?p=715</guid>
      <description><![CDATA[Check out part 2 of this post.

[Update 11th September 2018 - A schema file has now been published...]]></description>
      <content:encoded><![CDATA[<a href="https://blogs.msdn.microsoft.com/david/2017/07/20/building-azure-stream-analytics-resources-via-arm-templates-part-2-the-template/">Check out part 2 of this post</a>.

<span style="color: #ff0000"><strong>[Update 11th September 2018 - A schema file has now been published for creating StreamAnalytics jobs with Inputs and Outputs. You can use this to determine the schema you need - <a href="https://github.com/Azure/azure-resource-manager-schemas/blob/master/schemas/2016-03-01/Microsoft.StreamAnalytics.json">https://github.com/Azure/azure-resource-manager-schemas/blob/master/schemas/2016-03-01/Microsoft.StreamAnalytics.json</a>]</strong></span>

One of the big advantages of using the "new" Azure Portal (<a href="https://portal.azure.com/">https://portal.azure.com</a>) is that it provides the ability to deploy Azure resources via the <strong>Azure Resource Manager</strong> (ARM) which I often describe to my customers as “Azure v2.0”.

Under the covers this ARM version of Azure is really just a bunch of REST web services which can be called to create, manipulate and delete resources which you normally create via the portal user interface. In fact when you use the portal you are really making real time calls to these APIs to access and retrieve the data in question.

An “ARM Template” is officially described as consisting of “JSON and expressions that you can use to construct values for your deployment” (<a href="https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-authoring-templates">https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-authoring-templates</a>). What this means in practice is that the content of an ARM template consists of the input data that would normally be sent as input to the ARM REST services. In other words, you don’t need to call the REST API directly, you can instead pass a template (aka a configuration file) to “something” which will do all the calling for you.

These “somethings” are correctly known as <strong>Resource Providers</strong>. Think of them as workmen that sit and wait for a template to be uploaded and if there is any work for them to do, they read their specific bit of the configuration and call the appropriate REST API to carry out their work (whether that be creating a VM or starting a website). As Azure grows, new resource providers are added to allow the control and manipulation of that service. Rather than explain the structure of the resource template, I suggest you take some time out and read this: <a href="https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-authoring-templates">https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-authoring-templates</a>

To help people write their own templates for deploying Azure resources Microsoft (along with community contributors) have provided a whole load of examples: <a href="https://github.com/Azure/azure-quickstart-templates">https://github.com/Azure/azure-quickstart-templates</a>.

Now if you examine any ARM template, you’ll notice there are several references to an <strong>apiVersion</strong>, e.g. this JSON snippet for creating a Storage Account

&nbsp;
<table width="100%">
<tbody>
<tr>
<td>"resources": [</td>
</tr>
<tr>
<td width="6%"></td>
<td>{</td>
</tr>
<tr>
<td width="6%"></td>
<td>"type": "Microsoft.Storage/storageAccounts",</td>
</tr>
<tr>
<td width="6%"></td>
<td>"name": "[variables('storageAccountName')]",</td>
</tr>
<tr>
<td width="6%"></td>
<td>"apiVersion": "2016-01-01",</td>
</tr>
<tr>
<td width="6%"></td>
<td>"location": "[resourceGroup().location]",</td>
</tr>
<tr>
<td width="6%"></td>
<td>"sku": {</td>
</tr>
<tr>
<td width="6%"></td>
<td>"name": "Standard_LRS"</td>
</tr>
<tr>
<td width="6%"></td>
<td>},</td>
</tr>
<tr>
<td width="6%"></td>
<td>"kind": "Storage",</td>
</tr>
<tr>
<td width="6%"></td>
<td>"properties": {}</td>
</tr>
<tr>
<td width="6%"></td>
<td>}</td>
</tr>
<tr>
<td width="6%">]</td>
<td></td>
</tr>
</tbody>
</table>
&nbsp;

What does this API Version mean?

Well if you take a look in the “Azure Schemas” repository <a href="https://github.com/Azure/azure-resource-manager-schemas">https://github.com/Azure/azure-resource-manager-schemas</a>, specifically at the <a href="https://github.com/Azure/azure-resource-manager-schemas/blob/master/schemas/2016-01-01/Microsoft.Storage.json">https://github.com/Azure/azure-resource-manager-schemas/blob/master/schemas/2016-01-01/Microsoft.Storage.json</a> file you’ll notice that it is inside folder called “2016-01-01” and you’ll find the file is called Microsoft.Storage.json. This contains the schema for the that particular version of that particular Resource Provider and in this case, that particular resource (storageAccount). This basically defines what you can pass into this Resource Provider that is understands and can create.

Ok so far? How does this relate to Azure Stream Analytics being deployed via ARM Templates? <a href="https://blogs.msdn.microsoft.com/david/2017/07/20/building-azure-stream-analytics-resources-via-arm-templates-part-2-the-template/">Check out part 2 of this post</a>.]]></content:encoded>
    </item>
    <item>
      <title>IoT Starter Kits for Azure</title>
      <link>https://docs.microsoft.com/archive/blogs/david/iot-starter-kits-for-azure</link>
      <pubDate>Mon, 13 Feb 2017 13:00:13 GMT</pubDate>
      <dc:creator><![CDATA[Dave The Engineer]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/david/?p=646</guid>
      <description><![CDATA[Microsoft has worked with a number of vendors to build a series of starter kits to help you get your...]]></description>
      <content:encoded><![CDATA[Microsoft has worked with a number of vendors to build a series of starter kits to help you get your internet "thing" up and connected to Azure with minimal effort. These are in essence kits which contain a hardware board of some description, a breadboard, a number of connectors and sensors.

The board that is contained in these kits all support running Windows 10 IoT Core, the minimal version of Windows 10 for small devices with low memory onboard.

Microsoft Premier Services uses the <em>Adafruit Raspberry Pi 3 Kit</em> with all our customer engagements when helping them get started with IoT and Azure.

Here you'll find a great walk through of the kits available.
<h3>The Maker Show: Azure IoT Starter Kits</h3>
<iframe width="960" height="540" src="https://channel9.msdn.com/Shows/themakershow/starterkits/player" allowfullscreen="allowfullscreen" frameborder="0"></iframe>

You can read more at: <a href="https://azure.microsoft.com/en-gb/develop/iot/starter-kits/">https://azure.microsoft.com/en-gb/develop/iot/starter-kits/</a>

The kits available are a follows....
<h2>Adafruit Raspberry Pi 3 Kit</h2>
<img width="150" height="150" class="alignnone size-full wp-image-655" alt="raspberry-pi" src="https://msdnshared.blob.core.windows.net/media/2017/02/raspberry-pi.png" />

Powered by Windows 10, this credit-card sized computer is capable of many of the things that your desktop PC does, such as spreadsheets, word-processing or even playing video games. This kit provides all the necessary sensors and components to get started using Raspberry Pi and Azure IoT.

<a href="https://www.adafruit.com/azure" title="">Buy</a> | <a href="https://docs.microsoft.com/api/Redirect/en-gb/documentation/articles/iot-hub-raspberry-pi-kit-node-get-started/" rel="nofollow" title="">Getting started</a>
<h2>Adafruit Feather M0 Kit (Arduino-compatible)</h2>
<img width="150" height="150" class="alignnone size-full wp-image-665" alt="adafruit-feather-m0" src="https://msdnshared.blob.core.windows.net/media/2017/02/adafruit-feather-m0.png" />
Feather is the new development board from Adafruit and, like its namesake, it is thin and light. Adafruit designed Feather to be a new standard for portable microcontroller cores. This is the Adafruit Feather M0 WiFi w/ATWINC1500 – our take on an ‘all-in-one’ Arduino-compatible, high-speed, reliable WiFi with built-in USB and battery charging.

<a href="https://www.adafruit.com/azure" title="">Buy</a> | <a href="https://docs.microsoft.com/en-gb/azure/iot-hub/iot-hub-adafruit-feather-m0-wifi-kit-arduino-get-started" title="">Getting started</a>
<h2>Adafruit Feather HUZZAH ESP8266 Kit (Arduino-compatible)</h2>
<img width="150" height="150" class="alignnone size-full wp-image-675" alt="adafruit-huzzah-feather" src="https://msdnshared.blob.core.windows.net/media/2017/02/adafruit-huzzah-feather.png" />
Designed for those who want to use the new low-cost Adafruit Feather HUZZAH with ESP8266 WiFi microcontroller and are comfortable with using that platform to explore Azure IoT. An Arduino or other microcontroller is not required.

<a href="https://www.adafruit.com/azure" title="">Buy</a> | <a href="https://azure.microsoft.com/en-gb/resources/samples/iot-hub-c-huzzah-getstartedkit/" title="">Getting started</a>
<h2>Seeed – Intel Edison Kit</h2>
<img width="150" height="150" class="alignnone size-full wp-image-685" alt="seed-intel-edison" src="https://msdnshared.blob.core.windows.net/media/2017/02/seed-intel-edison.png" />
Designed for expert makers, entrepreneurs and some industrial IoT applications, the Intel® Edison compute module provides ease of development for a range of prototyping projects or commercial ventures when performance matters.

<a href="https://www.seeedstudio.com/depot/Grove-IoT-Developer-Kit-Microsoft-Azure-Edition-p-2631.html?ref=newInBazaar" title="">Buy</a> | <a href="https://docs.microsoft.com/en-gb/azure/iot-hub/iot-hub-intel-edison-kit-c-get-started" title="">Getting started</a>
<h2>SparkFun Thing ESP8266 Dev Kit (Arduino-Compatible)</h2>
<img width="150" height="150" class="alignnone size-full wp-image-695" alt="sparkfun-thing" src="https://msdnshared.blob.core.windows.net/media/2017/02/sparkfun-thing.png" />
Designed around the ESP8266 SOC, the Thing Dev board is a cost-effective, and very capable WiFi-enabled microcontroller. This kit provides all the necessary sensors and components to get started using the ThingDev microcontroller and Azure IoT.

<a href="https://www.sparkfun.com/products/13799" title="">Buy</a> | <a href="https://azure.microsoft.com/en-gb/resources/samples/iot-hub-c-thingdev-getstartedkit/" title="">Getting started</a>
<h2>Seeed – Grove IoT Commercial Gateway Kit</h2>
<img width="150" height="150" class="alignnone size-full wp-image-705" alt="iot-commercial-gateway" src="https://msdnshared.blob.core.windows.net/media/2017/02/iot-commercial-gateway.png" />
Intel and Microsoft have partnered to create a kit for rapid prototyping commercial gateway scenarios. Using an Intel® NUC gateway ensures that you can connect new and legacy devices, and perform edge analytics, whilst the Azure IoT Gateway SDK easily ingests data into the cloud for processing and analytics, meaning you can get started quickly on the Azure IoT.

<a href="https://www.seeedstudio.com/Grove-IoT-Commercial-Gateway-Kit-p-2724.html" title="">Buy</a> | <a href="https://aka.ms/gateway-kit-tutorial" title="">Getting started</a>

&nbsp;]]></content:encoded>
    </item>
    <item>
      <title>Free Stuff</title>
      <link>https://docs.microsoft.com/archive/blogs/david/free-stuff</link>
      <pubDate>Thu, 01 Dec 2016 10:40:44 GMT</pubDate>
      <dc:creator><![CDATA[Dave The Engineer]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/david/?p=645</guid>
      <description><![CDATA[I spend most of my working life on customer sites sat in their IT department looking at bookshelves...]]></description>
      <content:encoded><![CDATA[I spend most of my working life on customer sites sat in their IT department looking at bookshelves full of old outdated books (Exchange 5.5 anyone?) . Why don't these just get sent to recycling?

We all know that the pace of change in the modern IT world means that by the time a traditional print book is released, the content is already out of date.
<h3>Step-forward <a href="https://mva.microsoft.com/ebooks">Free Microsoft EBooks</a>.</h3>
These provide just enough information for you to get started on a new subject or version of a product, are published in a timely manner, are often written by or reviewed by Microsoft staff in the know and most importantly are my favourite price.....Free.

&nbsp;

<a href="https://mva.microsoft.com/ebooks">Check out the full list of Free Microsoft EBooks</a>.

&nbsp;]]></content:encoded>
    </item>
    <item>
      <title>Azure Migration from ASM to ARM</title>
      <link>https://docs.microsoft.com/archive/blogs/david/azure-migration-from-asm-to-arm</link>
      <pubDate>Sat, 12 Nov 2016 16:36:29 GMT</pubDate>
      <dc:creator><![CDATA[Dave The Engineer]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/david/?p=625</guid>
      <description><![CDATA[Now that ARM (aka Azure v2.0) is quite well established people are starting to ask how they migrate...]]></description>
      <content:encoded><![CDATA[Now that ARM (aka Azure v2.0) is quite well established people are starting to ask how they migrate their stuff over from the old ASM world to the new portal.

Up to now that's been done using mainly custom PowerShell scripting. Other tools might have existed but like PowerShell they just called the public API to move stuff. There has also been some <a href="https://azure.microsoft.com/en-gb/documentation/articles/virtual-machines-windows-migration-classic-resource-manager/">support added to the new portal </a>to help with this.

There is now a new tool to help with migration called <strong>AzMig</strong> which is designed to help with the process.

You can <a href="https://aka.ms/migaz">download this new AzMig tool from https://aka.ms/migaz</a>

To help you learn there are also two new videos available which walk you though the process.
<h3>Migrate Azure IaaS Solutions from ASM to ARM Using migAz, Part 1</h3>
<iframe width="960" height="540" frameborder="0" allowfullscreen="allowfullscreen" src="https://channel9.msdn.com/Shows/Azure-Friday/Migrate-Azure-IaaS-Solutions-from-ASM-to-ARM-Using-migAz-Part-1/player"></iframe>

&nbsp;
<h3>Migrate Azure IaaS Solutions from ASM to ARM Using migAz, Part 2</h3>
<iframe width="960" height="540" frameborder="0" allowfullscreen="allowfullscreen" src="https://channel9.msdn.com/Shows/Azure-Friday/Migrate-Azure-IaaS-Solutions-from-ASM-to-ARM-Using-migAz-Part-2/player"></iframe>]]></content:encoded>
    </item>
    <item>
      <title>Building an Azure DevTest environment from the command line</title>
      <link>https://docs.microsoft.com/archive/blogs/david/building-an-azure-devtest-environment-from-the-command-line</link>
      <pubDate>Fri, 11 Nov 2016 14:42:31 GMT</pubDate>
      <dc:creator><![CDATA[Dave The Engineer]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/david/?p=595</guid>
      <description><![CDATA[Here are some scripts I wrote to automate the building of a little development environment I needed...]]></description>
      <content:encoded><![CDATA[Here are some scripts I wrote to automate the building of a little development environment I needed for a project I was working on with a customer.

These scripts where all generated in Visual Studio using the "Resource Group" template from the Azure SDK. I've tweaked them a little here and there but nothing major. Basically the two "Create" scripts will deploy resources defined in an ARM template and the RemoveVM script uses plain old PowerShell to remove a machine and it's related disks.
<h3><a href="https://github.com/UKNorthernlad/PowerShell/tree/master/CreateBasicDevTestEnvironment">Get the scripts from GitHub</a></h3>
These do the following:-
<ol>
 	<li><strong>CreateBaseResources</strong> - This will create an Azure Virtual Network and Storage Account. You only need to run this once.</li>
 	<li><strong>CreateOOBImage</strong> - This will create a virtual machine (Win2012R2) and add it to the above network and use the storage account for the main OS disk. You'll run this whenever you need to build a new machine and add it to the network, however you'll need to change some basic settings like machine name etc. in the parameters.json file each time you do. <em>One of the more interesting things is that it's configured with a custom script extension which will download a PowerShell script from a location you configure (in the parameters.json file) and run this once the VM has built. This was needed to trigger the post-configuration of the machine.</em></li>
 	<li><strong>RemoveVM</strong> - This will remove (duh) a virtual machine from the network and clean-up the left over .vhd files from the storage account.</li>
</ol>
Inside each folder you'll find some basic instructions on how to use each scripts (in an example.txt file) along with a list of things you might want to change for each deployment.]]></content:encoded>
    </item>
    <item>
      <title>The Machine Learning Process</title>
      <link>https://docs.microsoft.com/archive/blogs/david/the-machine-learning-process</link>
      <pubDate>Fri, 11 Nov 2016 14:03:23 GMT</pubDate>
      <dc:creator><![CDATA[Dave The Engineer]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/david/?p=585</guid>
      <description><![CDATA[Whilst working on some material for customers I needed to learn all about Machine Learning as...]]></description>
      <content:encoded><![CDATA[Whilst working on some material for customers I needed to learn all about Machine Learning as quickly as possible....at least I needed to understand the concepts as quickly as possible.

Long story short I was pointed at this document:

&nbsp;
<h2><a target="_blank" href="https://download.microsoft.com/download/3/B/9/3B9FBA69-8AAD-4707-830F-6C70A545C389/Introducing_Azure_Machine_Learning.pdf">Introducing Machine Learning - A guide for technical professionals</a></h2>
&nbsp;

It covers the core principals of ML and what tooling is available in Azure without going deep into each area. The process of going from raw data to consuming a "trained" model (as shown in the diagram below) seemed pretty straight forward and I'm now ready to start tackling the tools themselves for which there is plenty of videos on <a href="https://channel9.msdn.com/Search?term=machine%20learning%20studio#lang-en=en&amp;ch9Search">Channel 9</a> or in the <a href="https://azure.microsoft.com/en-gb/documentation/services/machine-learning/">Azure Documentation</a>.

[caption id="attachment_586" align="alignnone" width="353"]<img width="353" height="152" class=" wp-image-586" alt="Machine Learning Process" src="https://msdnshared.blob.core.windows.net/media/2016/11/machinelearning-300x129.png" /> Machine Learning Process[/caption]]]></content:encoded>
    </item>
    <item>
      <title>Learning Guide for Azure Stream Analytics.</title>
      <link>https://docs.microsoft.com/archive/blogs/david/learning-guide-for-azure-stream-analytics</link>
      <pubDate>Mon, 12 Sep 2016 11:38:57 GMT</pubDate>
      <dc:creator><![CDATA[Dave The Engineer]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/david/?p=505</guid>
      <description><![CDATA[What are Azure Stream Analytics?
Azure Stream Analytics is a fully managed and hosted system that...]]></description>
      <content:encoded><![CDATA[<h1>What are Azure Stream Analytics?</h1>
<img width="150" height="150" class="size-full wp-image-575 alignleft" alt="Stream-Analytics-150x150" src="https://msdnshared.blob.core.windows.net/media/2016/09/Stream-Analytics-150x150.png" />Azure Stream Analytics is a fully managed and hosted system that helps you to spot patterns in data as it enters your application in real-time with the data coming from any one of a number of different locations.
<div></div>
This makes it easy to build real-time analytic applications on data streaming from devices, sensors, web sites, social media, applications, infrastructure systems or anything which is network enabled and capable of pushing data to a location on the internet.
<div></div>
&nbsp;

&nbsp;

With a few clicks in the Azure portal, you can author what is known as a Stream Analytics job which specifies:-
<div></div>
<ol>
 	<li>The input source of the streaming data (perhaps messages being sent from an embedded device or people posting on Twitter).</li>
 	<li>What patterns of data you are interested in. This is done via a SQL-like language.</li>
 	<li>The output location for the results of the analysis.</li>
</ol>
<h1>What can I use Stream Analytics for?</h1>
With vast amounts of data flowing over the network, an organization that can process and act on this streaming data in real time can make themselves more efficient and give themselves an edge over their competitors.
<div></div>
Common scenarios of the use of real-time streaming analytics include:
<div></div>
<ol>
 	<li>Personalized, real-time stock-trading analysis and alerts offered by financial services companies.</li>
 	<li>Real-time fraud detection.</li>
 	<li>Data and identity protection services.</li>
 	<li>Reliable input and analysis of data generated by sensors and actuators embedded in physical objects (Internet of Things, or IoT).</li>
 	<li>Web clickstream analytics.</li>
 	<li>Customer relationship management (CRM) applications issuing alerts when customer experience within a time frame is degraded.</li>
</ol>
<div></div>
<h1>So how do I get started?</h1>
If you have plenty of time, I suggest you start off with the offical Azure Stream Analytics Learning Plan which you'll find at:
<h3><a href="https://azure.microsoft.com/en-gb/documentation/learning-paths/stream-analytics/">https://azure.microsoft.com/en-gb/documentation/learning-paths/stream-analytics/</a></h3>
On the other hand if you only have smaller chunks of time available you could watch or read items from the following list (ideally in turn). I will keep this list upto date so it will probably change as new content is published and old stuff becomes less relavent etc.
<ul>
 	<li><a href="https://channel9.msdn.com/Shows/Azure-Friday/Introduction-to-Azure-Stream-Analytics-with-Santosh-Balasubramanian">Introduction to Azure Stream Analytics with Santosh Balasubramanian</a></li>
 	<li><a href="https://channel9.msdn.com/Shows/Azure-Friday/Handling-IoT-data-with-Azure-Stream-Analytics">Handling IoT data with Azure Stream Analytics</a></li>
 	<li><a href="https://channel9.msdn.com/blogs/Cloud-and-Enterprise-Premium/Deep-Dive-Azure-Stream-Analytics-Query-Language">Deep Dive: Azure Stream Analytics Query Language</a></li>
 	<li><a>https://channel9.msdn.com/Blogs/Windows-Azure/Azure-Stream-Analytics-Overview</a></li>
 	<li><a href="https://channel9.msdn.com/blogs/Cloud-and-Enterprise-Premium/An-Introduction-to-Azure-Stream-Analytics">An Introduction to Azure Stream Analytics</a></li>
</ul>
<em>Last update and review: 12th September 2016</em>

&nbsp;

Finally you can find more videos on Channel 9 at <a href="https://channel9.msdn.com/Search?term=stream%20analytics#ch9Search">https://channel9.msdn.com/Search?term=stream%20analytics#ch9Search</a>

Don't forget you can find the main document repository at: https://azure.microsoft.com/en-gb/documentation/services/stream-analytics/]]></content:encoded>
    </item>
  </channel>
</rss>