<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Michiel van Otegem’s Blog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/mioteg/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/mioteg/feed.xml</link>
    <description>The Azure Composer</description>
    <lastBuildDate>Tue, 16 Apr 2019 05:19:42 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Measuring Latency and Throughput Between Azure Regions</title>
      <link>https://docs.microsoft.com/archive/blogs/mioteg/measuring-latency-and-throughput-between-azure-regions</link>
      <pubDate>Mon, 20 Nov 2017 13:51:49 GMT</pubDate>
      <dc:creator><![CDATA[Michiel van Otegem - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mioteg/?p=156</guid>
      <description><![CDATA[If you want to implement disaster recovery, latency and throughput between your primary and...]]></description>
      <content:encoded><![CDATA[If you want to implement disaster recovery, latency and throughput between your primary and secondary location are key factors. These determine how quickly and how much data you can transport to the secondary location, and hence how much data will be lost in case of failure of the primary location. More formally, the latency and throughput determine the possible recovery point objective. In this post I will walk through measuring latency and throughput between Azure regions, so you can determine the best configuration for your scenario.

Latency is determined by the speed of light and the number of infrastructure components between the source and destination. This means that the closer the primary and secondary location are, the lower the latency. The catch is that if the primary and secondary location are too close together, they could potentially be hit by the same (natural) disaster. When Microsoft picks locations for Azure regions, they are selected to be a safe distance apart for most major disasters (earthquake, flood, and so on).
<h3>Options for connecting virtual networks in different regions</h3>
In Azure there are three ways to connect virtual networks in different regions:
<ul>
 	<li><span><a href="https://docs.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-about-vpngateways#V2V">VPN (with VPN Gateway)</a></span></li>
 	<li><span><a href="https://docs.microsoft.com/en-us/azure/virtual-network/virtual-network-peering-overview">Cross-region virtual network peering (preview)</a></span></li>
 	<li><span><a href="https://docs.microsoft.com/en-us/azure/expressroute/expressroute-introduction">ExpressRoute</a></span></li>
</ul>
In this post I will focus on VPN and virtual network peering, but you could use the same method to measure latency and throughput in a configuration with ExpressRoute. Before I go into how you measure latency and throughput, let’s look at the architectural differences between the three options.
<h4>VPN</h4>
With VPN, you link two virtual networks together by deploying a VPN gateway in both virtual networks, and then set up a connection between the two, as shown below.

<img src="https://msdnshared.blob.core.windows.net/media/2017/11/peeringlatency1.png" alt="" width="817" height="191" class="alignnone size-full wp-image-195" />
<em>Diagram 1: Virtual networks VNET1 and VNET2 in different Azure regions connected via VPN</em>
<h4>Cross-region virtual network peering</h4>
The downside of using a VPN is the need for VPN gateways, which incur cost, add latency, and limit bandwidth. Within a region, you can use virtual network peering instead, which connects virtual networks without a gateway. Cross-region virtual network peering recently went into preview, and this allows you to securely connect virtual networks across regions, effectively stretching your network across regions in Azure, as shown below.

<img src="https://msdnshared.blob.core.windows.net/media/2017/11/peeringlatency2.png" alt="" width="553" height="131" class="alignnone size-full wp-image-165" />
<em>Diagram 2: Virtual networks VNET1 and VNET2 in different Azure regions connected via virtual network peering (preview)</em>
<h4>Express Route</h4>
ExpressRoute is a dedicated private connection from your on-premises location to Azure (and Office 365) data centers. You can link virtual networks to ExpressRoute, and with the ExpressRoute Premium feature you can link virtual networks from multiple regions, as shown below.

<img src="https://msdnshared.blob.core.windows.net/media/2017/11/peeringlatency3.png" alt="" width="809" height="303" class="alignnone size-full wp-image-175" />
<em>Diagram 3: Virtual networks VNET1 and VNET2 in different Azure regions connected via ExpressRoute</em>

When you connect two virtual networks in different Azure regions with VPN or virtual network peering, the traffic between the two regions runs over the Microsoft backbone, and the traffic is routed as any normal IP-based traffic. Although we currently don’t offer an SLA on latency and throughput, the fact that the traffic stays within our backbone means latency and throughput typically stay within a certain range.

When using ExpressRoute (with the Premium Add On) this is mostly the same, but there is a subtle difference: the virtual networks aren’t connected directly. Each virtual network is connected to the same Microsoft Edge your Partner Edge is connected to. In most cases that won’t make a lot of difference, but I’ll illustrate the impact through an extreme case. Suppose your on-premises location in Australia is connected via ExpressRoute, and terminates at a Microsoft Edge in Australia. If you connect virtual networks in West Europe and North Europe to this ExpressRoute, the traffic between the virtual networks will now run over the Microsoft Edge in Australia.
<h2>Creating two virtual networks connected by VPN</h2>
Creating two virtual networks in different regions that are connected through VPN is quite easy using this <span><a href="https://github.com/Azure/azure-quickstart-templates/tree/master/201-vnet-to-vnet">ARM template from the Azure QuickStarts</a></span>. You can download my parameter file <a href="https://msdnshared.blob.core.windows.net/media/2017/11/parametersFile.json_.txt">here</a>, so you can see what kind of values you need to fill in. I used IP ranges for the virtual networks as shown in diagram 1. Note that I used IP address ranges that don’t overlap. Also, the VPN VIPs will be different, as these are automatically assigned.

Deploying the template will take a while, mostly due to the VPN gateway configuration. You can continue with the next steps in the setup once the virtual networks have been created. You don’t have to wait for the VPN gateway configuration to finish.
<h3>Adding virtual machines</h3>
To measure latency and throughput, you need a virtual machine in both virtual networks. For the tests I’m using Windows Server 2016 on a D3_v2 virtual machine. A D3_v2 virtual machne has 4 CPUs, which may seem like overkill. However, the size of your virtual machine impacts the network bandwidth assigned to the virtual machine. By choosing a larger virtual machine I’m making sure I have some bandwidth to play with. Of course, if you are targeting a certain size machine for your workload, it makes sense to use that size to test with.

<em>Note: you could select accelerated networking when deploying the virtual machine, but that feature mainly impacts networking within a single region. </em>

Once the virtual machines are created, each has an internal IP address. If you used the subnet configuration I used, and deployed in Subnet-1 in each region, the internal IP addresses are 10.10.1.4 for the West Central US virtual network and 10.20.1.4 for the US West 2 virtual network.

Go to the first virtual machine in the portal, and connect to it with remote desktop protocol (RDP). Once the VPN gateway configuration is finished, you can test connectivity by using RDP to connect from the first virtual machine to the second virtual machine on the internal IP address.
<ol>
 	<li>Press Ctrl+R.</li>
 	<li>Enter mstsc.</li>
 	<li>In the RDP dialog that pops up, enter the IP-address of the second virtual machine (in my case 10.20.1.4).</li>
 	<li>Click <strong>Connect</strong>.</li>
 	<li>Click <strong>Confirm</strong>.</li>
 	<li>You should now be logged into the second virtual machine. If this doesn’t work, there may be a configuration error in the connection between the virtual networks, but be sure to check if you have the right IP-address, and try connecting from the portal to the second virtual machine like you did with the first virtual machine.</li>
</ol>
<h3>Measuring latency and throughput</h3>
The easiest way to measure latency and throughput is using PsPing. You can download PsPing from <span><a href="https://technet.microsoft.com/en-us/sysinternals/psping.aspx">here</a></span>. PsPing can be used for simple ping functionality without a server, but for latency and bandwidth tests you need to setup a server.
<h4>Start the PsPing server</h4>
<ol>
 	<li>Open or switch to the remote desktop connection to one of the virtual machines you created.</li>
 	<li>Open a command prompt and change directory to the location where you extracted PsPing.</li>
 	<li>Type <code>psping -f -s &lt;ipaddress&gt;:&lt;port&gt;</code>, for example, <strong><code>psping -f -s 10.20.1.4:81</code></strong> to listen on port 81 on a virtual machine that has a local IP address of 10.20.1.4.</li>
</ol>
<h4>Run the PsPing client</h4>
<ol>
 	<li>Open or switch to the remote desktop connection to the other virtual machine.</li>
 	<li>Open a command prompt and change directory to the location where you extracted PsPing.</li>
 	<li>Type <code>psping -l &lt;message size&gt; -n &lt;number of messages&gt; -f &lt;ipaddress&gt;:&lt;port&gt;</code>, for example, <strong><code>psping -l 8k -n 1000 -f 10.20.1.4:81</code></strong> to send 1000 messages of 8 kilobytes to port 81 on the virtual machine with IP address 10.20.1.4.</li>
</ol>
This will get you a measurement over VPN, but for reference we also want a measurement over the public IP address, bypassing the VPN. To enable this, you need to modify the network security group on the virtual machine running the server, so it doesn’t block traffic over the port PsPing is listening to (port 81 in my case). It also makes sense to use different size blocks, to see how that affects the latency.

To test the bandwidth, you can use the -b parameter with PsPing, as follows:

<code>Psping -b -l &lt;message size&gt; -n &lt;number of messages&gt; -f &lt;ipaddress&gt;:&lt;port&gt;</code>, for example, <strong><code>psping -l 8k -n 1000 -f 10.20.1.4:81</code></strong> to send 1000 messages of 8 kilobytes.
<h3>Public IP vs. VPN gateway</h3>
The table below shows the differences between going over the public IP address versus going through the VPN gateway.
<table>
<tbody>
<tr>
<th style="padding: 5px;border: 1px solid black"></th>
<th style="padding: 5px;border: 1px solid black">Public IP</th>
<th style="padding: 5px;border: 1px solid black">VPN</th>
</tr>
<tr>
<th style="padding: 5px;border: 1px solid black">10000 x 8k</th>
<td style="padding: 5px;border: 1px solid black"></td>
<td style="padding: 5px;border: 1px solid black"></td>
</tr>
<tr>
<th style="padding: 5px;border: 1px solid black">Avg</th>
<td style="padding: 5px;border: 1px solid black">21.48 ms</td>
<td style="padding: 5px;border: 1px solid black">23.47 ms</td>
</tr>
<tr>
<th style="padding: 5px;border: 1px solid black">Min</th>
<td style="padding: 5px;border: 1px solid black">21.15 ms</td>
<td style="padding: 5px;border: 1px solid black">21.93 ms</td>
</tr>
<tr>
<th style="padding: 5px;border: 1px solid black">Max</th>
<td style="padding: 5px;border: 1px solid black">31.62 ms</td>
<td style="padding: 5px;border: 1px solid black">148.56 ms</td>
</tr>
<tr>
<th style="padding: 5px;border: 1px solid black">1000x 1000k</th>
<td style="padding: 5px;border: 1px solid black"></td>
<td style="padding: 5px;border: 1px solid black"></td>
</tr>
<tr>
<th style="padding: 5px;border: 1px solid black">Avg</th>
<td style="padding: 5px;border: 1px solid black">23.70 ms</td>
<td style="padding: 5px;border: 1px solid black">38.31 ms</td>
</tr>
<tr>
<th style="padding: 5px;border: 1px solid black">Min</th>
<td style="padding: 5px;border: 1px solid black">23.15 ms</td>
<td style="padding: 5px;border: 1px solid black">30.07 ms</td>
</tr>
<tr>
<th style="padding: 5px;border: 1px solid black">Max</th>
<td style="padding: 5px;border: 1px solid black">45.54 ms</td>
<td style="padding: 5px;border: 1px solid black">80.20 ms</td>
</tr>
</tbody>
</table>
&nbsp;

<em>Disclaimer: Measurement results will vary between different Azure regions, time of day, and other factors. The maximum value, in particular, varies greatly from test to test. Please test thoroughly to understand the impact on your scenario. </em>

With the small packet size the difference is only a few milliseconds on average, but the maximum latency may vary. The increased latency with a VPN gateway is caused by the additional hop of going over the gateway. The difference between connecting over the public IP address and through the VPN gateway becomes significant with larger requests. This is due to the bandwidth limitations of the VPN gateway. I used the Basic SKU, which has the least bandwidth and using a more powerful SKU (see <span><a href="https://docs.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-about-vpngateways">About VPN Gateway</a></span>) will likely have positive impact.

<em>Note: For maximum throughput and minimum latency you can </em><span><a href="https://docs.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-about-vpn-devices#known"><em>you can turn of encryption of the traffic between two virtual networks connected using VPN gateways</em></a></span><em>. Do not use this unless you understand the security implications.</em>
<h3>Measuring with cross-region virtual network peering</h3>
With the tests over the public IP and through the VPN done, it’s time to move on to cross-region peering. You could setup two entirely new virtual networks and virtual machines, but you can also remove the connection between the VPN gateways, and then setup virtual network peering. You don’t have to delete the VPN gateways, but you can. To remove the connections, take the following steps:
<ol>
 	<li>Open the Azure portal.</li>
 	<li>Open the resource group you created for the environment.</li>
 	<li>Click the <strong>USWC-USW2</strong> connection.</li>
 	<li>Click <strong>Delete</strong>.</li>
 	<li>Close the blade.</li>
 	<li>Repeat steps 3-5 for the <strong>USW2-USWC</strong> connection.</li>
</ol>
To configure virtual network peering, take the following steps:
<ol>
 	<li>Open the Azure portal.</li>
 	<li>Open the resource group you created for the environment.</li>
 	<li>Click the <strong>USWC-VNET</strong> connection.</li>
 	<li>Click <strong>Peerings</strong>.</li>
 	<li>Click <strong>Add</strong>.</li>
 	<li>Create a peering to the <strong>USW2-VNET</strong>, as shown below.
<img src="https://msdnshared.blob.core.windows.net/media/2017/11/peeringlatency4.png" alt="" width="560" height="638" class="alignnone size-full wp-image-185" />
Note that if you don’t see the virtual network in the West US 2 region, virtual network peering is not enabled yet for your subscription. You can register for the public preview <span><a href="https://docs.microsoft.com/en-us/azure/virtual-network/virtual-network-create-peering">here</a></span>.</li>
 	<li>Provide a name and select the virtual network to peer to, the click <strong>OK</strong>.</li>
 	<li>Repeat steps 2 through 7 to create a connection from the <strong>USW2-VNET</strong> back to the <strong>USWC-VNET</strong>.</li>
</ol>
<h2>Public IP vs. cross-region virtual network peering</h2>
The table below shows the differences between going over the public IP address versus going through virtual network peering.
<table>
<tbody>
<tr>
<th style="padding: 5px;border: 1px solid black"></th>
<th style="padding: 5px;border: 1px solid black">Public IP</th>
<th style="padding: 5px;border: 1px solid black">Virtual network peering</th>
</tr>
<tr>
<th style="padding: 5px;border: 1px solid black">10000 x 8k</th>
<td style="padding: 5px;border: 1px solid black"></td>
<td style="padding: 5px;border: 1px solid black"></td>
</tr>
<tr>
<th style="padding: 5px;border: 1px solid black">Avg</th>
<td style="padding: 5px;border: 1px solid black">21.48 ms</td>
<td style="padding: 5px;border: 1px solid black">21.29 ms</td>
</tr>
<tr>
<th style="padding: 5px;border: 1px solid black">Min</th>
<td style="padding: 5px;border: 1px solid black">21.15 ms</td>
<td style="padding: 5px;border: 1px solid black">21.03 ms</td>
</tr>
<tr>
<th style="padding: 5px;border: 1px solid black">Max</th>
<td style="padding: 5px;border: 1px solid black">31.62 ms</td>
<td style="padding: 5px;border: 1px solid black">27.68 ms</td>
</tr>
<tr>
<th style="padding: 5px;border: 1px solid black">1000x 1000k</th>
<td style="padding: 5px;border: 1px solid black"></td>
<td style="padding: 5px;border: 1px solid black"></td>
</tr>
<tr>
<th style="padding: 5px;border: 1px solid black">Avg</th>
<td style="padding: 5px;border: 1px solid black">23.70 ms</td>
<td style="padding: 5px;border: 1px solid black">23.55 ms</td>
</tr>
<tr>
<th style="padding: 5px;border: 1px solid black">Min</th>
<td style="padding: 5px;border: 1px solid black">23.15 ms</td>
<td style="padding: 5px;border: 1px solid black">22.81 ms</td>
</tr>
<tr>
<th style="padding: 5px;border: 1px solid black">Max</th>
<td style="padding: 5px;border: 1px solid black">45.54 ms</td>
<td style="padding: 5px;border: 1px solid black">45.40 ms</td>
</tr>
</tbody>
</table>
The difference between public IP and cross-region virtual network peering is only a few microseconds, and as such negligible. This makes sense, as the traffic pretty much takes the same physical route through the Microsoft backbone.
<h3>Conclusion</h3>
Using PsPing you can measure the latency and bandwidth characteristics between different regions. This will help you determine the best options for scenarios such as disaster recovery, and how you should configure synchronization between systems in different regions.

Cross-region virtual network peering is a great addition to Azure networking. It provides lower latency and higher throughput than connections over VPN gateway. Once it becomes generally available, it will be the preferred method to peer networks in different regions.

<em>--- Thanks to Steffen Vorein and RoAnn Corbisier for editing. ---</em>]]></content:encoded>
    </item>
    <item>
      <title>Converting XML to JSON with Azure Logic Apps</title>
      <link>https://docs.microsoft.com/archive/blogs/mioteg/converting-xml-to-json-with-azure-logic-apps</link>
      <pubDate>Thu, 06 Jul 2017 13:11:29 GMT</pubDate>
      <dc:creator><![CDATA[Michiel van Otegem - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mioteg/?p=135</guid>
      <description><![CDATA[With Logic Apps you can quickly build small workflows to perform common tasks. An interesting...]]></description>
      <content:encoded><![CDATA[With Logic Apps you can quickly build small workflows to perform common tasks. An interesting feature of Logic Apps is its ability to run serverless, so you only pay for the actual compute power needed to execute your workflow. This feature is perfect for what I set out to do: convert XML files to JSON in bulk.
<h3>My Test Setup</h3>
For testing purposes I used a OneDrive folder as source, and another OneDrive folder as destination. The LogicApps trigger for OneDrive executes the workflow anytime a new file is added to the folder. Technically it works on a interval that you configure, for example every minute, at which point it scans for all the new files since the last time the trigger executed. The view below shows the general idea.

<img src="https://msdnshared.blob.core.windows.net/media/2017/07/LogicAppsXml2Json01.png" alt="" class="alignnone size-full wp-image-137" width="628" height="542" />
<h3>Converting to JSON</h3>
As you can see in the image above, the content of the new file is created using the <strong>json</strong> function available in Logic Apps. Based on the documentation in <a href="https://docs.microsoft.com/en-us/azure/logic-apps/logic-apps-workflow-definition-language">Workflow Definition Language schema for Azure Logics Apps</a>, this function accepts string or XML input. In my first attempt I used the following function: <strong>json(triggerBody())</strong>, where <strong>triggerBody()</strong> is shorthand for <strong>trigger().outputs.body</strong>, which represents the file contents. To my surprise this yielded the following error:
<pre>InvalidTemplate. Unable to process template language expressions in action 'Create_file' inputs at line '1'
and column '2295': 'The template language function 'json' parameter is not valid. The provided value
'&lt;?xml version="1.0"?&gt; &lt;body&gt; &lt;item attr1="1" attr2="2" /&gt; &lt;item attr1='1' attr3='3' /&gt; &lt;/body&gt;' cannot be
parsed: 'Unexpected character encountered while parsing value: <span style="color: #ff0000">&lt;</span>. Path '', line 0, position 0.'. Please see
<a href="https://aka.ms/logicexpressions#json">https://aka.ms/logicexpressions#json</a> for usage details.'.</pre>
Apparently the <strong>json</strong> function is stumbling over the '&lt;' character (the red character in the error message), even though the documentation says it supports XML input. My first assumption was that this had something to do with an invisible character, so I tried different editing tools to create the XML, but that didn't help. Jeff Hollan on the Logic Apps team helped me understand the actual problem is the way Logic Apps interprets the file content of a file on OneDrive. Hence, Logic Apps doesn't understand you are feeding XML to the <strong>json</strong> function unless you explicitly tell it what it's dealing with. To do so, you need to use the <strong>xml</strong> function to cast the input to XML. The correct expression therefore is
<pre><strong>json(xml(triggerBody()))</strong></pre>
<h3>Using a different source/destination</h3>
My test setup was with OneDrive, but the expression will work with any input/trigger that doesn't stumble over XML content. You could just as easily use blob, queue, or table storage, or another method such as email, FTP, or Azure Service Bus.

&nbsp;]]></content:encoded>
    </item>
    <item>
      <title>Separating environments in Azure Data Catalog</title>
      <link>https://docs.microsoft.com/archive/blogs/mioteg/separating-environments-in-azure-data-catalog</link>
      <pubDate>Mon, 24 Oct 2016 10:50:34 GMT</pubDate>
      <dc:creator><![CDATA[Michiel van Otegem - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mioteg/?p=36</guid>
      <description><![CDATA[Azure Data Catalog is a services that enables discovery of data assets in your organization. Users...]]></description>
      <content:encoded><![CDATA[<a href="https://azure.microsoft.com/en-us/services/data-catalog/">Azure Data Catalog</a> is a services that enables discovery of data assets in your organization. Users can search for data sources entered into the catalog in various ways, so they can (re)use the data sources, instead of creating duplicate and potentially inconsistent sources for the same data. As explained in the <a href="https://azure.microsoft.com/en-us/documentation/articles/data-catalog-developer-concepts/">Azure Data Catalog developer concepts</a>, you can only have one Data Catalog per Azure account. If an Azure account contains multiple subscriptions, the same Data Catalog applies to all subscriptions. This means that if you use subscriptions to separate environments (e.g. dev/test/production or finance/marketing/manufacturing), then these environments still share the same Data Catalog. From the perspective of a Data Catalog that holds information on all data sources in your organization, this makes sense, but it also raises a question: <span style="text-decoration: underline">how do you separate data sources from different environments?</span>

Let's look at an example situation where we have three subscriptions under the same account: dev, test, and production. As services are being developed, the same data source may exist in dev, test, and production with slight variations because of version differences. You need to ensure that a developer doesn't use wrong (version of the) data source, and inadvertently writes development data into a production system. It is important to realize that in itself this is not a discovery problem, it's a rights management problem. If the rights to a production system allow a developer to manipulate production data, this issue exists regardless of whether you have a discovery mechanism in place or not. Separating information in the Data Catalog will not solve this issue. However, making clear in the Data Catalog whether a particular data source is for dev, test, or production can help a little.
<h3>How NOT to use Data Catalog</h3>
I've added two assets to the Data Catalog, both named <em>Contacts</em>. When searching for these, you get a result like this:
<img src="https://msdnshared.blob.core.windows.net/media/2016/10/adc1.png" alt="Two almost similar assets in Azure Data Catalog" class="alignnone wp-image-45 size-full" width="900" height="530" />
<p>&nbsp;<p>
If you look at the details of both assets, you can see they are almost similar, except for the location:
<img src="https://msdnshared.blob.core.windows.net/media/2016/10/adc2.png" alt="Two assets with only different location" class="alignnone wp-image-46 size-full" width="700" height="790" />

For someone that is not knowledgeable about your data sources and locations, the above doesn't help. In this case you can still infer whether it's a development asset, but with more usual data source names, this is less likely.
<h3>Data Catalog Best Practices</h3>
To avoid situations like the one shown above, you should follow the guidelines below.
<ol>
 	<li>Use a consistent naming scheme, for example <em>contacts.dev</em> and <em>contacts.prod</em>. The friendly name can be the same or something like <em>Contacts (Development)</em> and <em>Contacts (Production)</em>.</li>
 	<li>Use tags to identify the environment the asset belongs to.
<img src="https://msdnshared.blob.core.windows.net/media/2016/10/adc3-300x182.png" alt="Data Catalog asset with Development tag" class="alignnone size-medium wp-image-55" width="300" height="182" /></li>
 	<li>If naming convention and tags are not sufficient, limit visibility to different user groups, for example only make development assets visible to people in the developers group. You can do this as follows:
<ol>
 	<li>In Azure Active Directory create the needed groups and add users.</li>
 	<li>Select an asset and Take Ownership*.
<img src="https://msdnshared.blob.core.windows.net/media/2016/10/adc4-300x93.png" alt="adc4" class="alignnone size-medium wp-image-65" width="300" height="93" /></li>
 	<li>Set Visibility to Owners &amp; These Users.</li>
 	<li>Click Add... to add the group(s) you want to grant visibility.
<img src="https://msdnshared.blob.core.windows.net/media/2016/10/adc5-300x296.png" alt="adc5" class="alignnone size-medium wp-image-75" width="300" height="296" /></li>
</ol>
</li>
</ol>
* The guidance in <a href="https://azure.microsoft.com/en-us/documentation/articles/data-catalog-how-to-manage/">How to Manage Data Assets</a> is to have at least two individuals as owner of an asset.]]></content:encoded>
    </item>
    <item>
      <title>Hello Azure!</title>
      <link>https://docs.microsoft.com/archive/blogs/mioteg/hello-azure</link>
      <pubDate>Wed, 07 Sep 2016 13:47:43 GMT</pubDate>
      <dc:creator><![CDATA[Michiel van Otegem - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mioteg/?p=35</guid>
      <description><![CDATA[Welcome to my new MSDN blog. I joined Microsoft a while back and from this point forward I'll used...]]></description>
      <content:encoded><![CDATA[Welcome to my new MSDN blog. I joined Microsoft a while back and from this point forward I'll used this space to blog about Microsoft technology in general and Azure specifically. My personal blog http://michiel.vanotegem.nl won't go away, but you'll likely find references to this blog there, and maybe some other non-Microsoft related stuff.

So what about the name of my blog? 20 years ago I started my own little company called IT Composer. When dealing with customers and when speaking at customers I often got the question "IT Composer, is that your company name or is that your job title?" The answer was: both. At the time the term (Software) Architect wasn't widely used yet, and even though we've got processes around IT that are very similar to manufacturing, I still think IT is a creative process. IMHO the term "composer" better reflects this than "architect" (although I don't want to imply architects are not creative!).

Even though my company no longer exists, I still identify with the term IT Composer. In fact, working with Azure I've found that composing your solution with the right Azure services is extremely important if you want to get the most benefits from Cloud computing and the Azure platform. Hence I've decided to stick with the IT Composer name, but with a twist because of my Azure focus.]]></content:encoded>
    </item>
  </channel>
</rss>