<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="www.w3.org/2005/Atom" xmlns:sy="purl.org/rss/1.0/modules/syndication/" xmlns:dc="purl.org/dc/elements/1.1/" xmlns:content="purl.org/rss/1.0/modules/content/" xmlns:wfw="wellformedweb.org/CommentAPI/" xmlns:slash="purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Peter Drougge</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/drougge/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/drougge/feed.xml</link>
    <description />
    <lastBuildDate>Tue, 16 Apr 2019 05:04:41 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Resurrecting WOPR/Joshua using LUIS</title>
      <link>https://docs.microsoft.com/archive/blogs/drougge/resurrecting-woprjoshua-using-luis</link>
      <pubDate>Tue, 31 May 2016 20:50:56 GMT</pubDate>
      <dc:creator><![CDATA[Peter Drougge]]></dc:creator>
      <guid
        isPermaLink="false">blogs.msdn.microsoft.com/drougge/?p=165</guid>
      <description><![CDATA[In the classic movie Wargames from 1983 where a young Matthew Broderick calls up a military...]]></description>
      <content:encoded><![CDATA[<a href="https://msdnshared.blob.core.windows.net/media/2016/05/would-you-like-to-play-a-nice-game-of-chess.png"><img class="alignnone size-full wp-image-346" src="https://msdnshared.blob.core.windows.net/media/2016/05/would-you-like-to-play-a-nice-game-of-chess.png" alt="would you like to play a nice game of chess" width="621" height="299" /></a>

In the classic movie <a href="https://en.wikipedia.org/wiki/WarGames" target="_blank"><em><strong>Wargames</strong> </em></a>from 1983 where a young Matthew Broderick calls up a military supercomputer called WOPR (War Operation Plan Response), he guesses a "secret" password and starts talking to an AI called "<strong>Joshua</strong>".

While basic in terms of todays' theatrical AI escapes into the movies, the idea of Joshua lit a spark in many young minds at that time.

Let's have some fun and re-create a bit of their dialog, using the Natural Language understanding intelligence of the LUIS.ai service.
<h2>Prerequisites:</h2>
<ul>
	<li><strong>Visual Studio 2015</strong></li>
	<li>Download the <strong>Bot Application VS2015 project template</strong> located at <a href="https://aka.ms/bf-bc-vstemplate" target="_blank">aka.ms/bf-bc-vstemplate</a>
<ul>
	<li>place downloaded zip file at “%USERPROFILE%\Documents\Visual Studio 2015\Templates\ProjectTemplates\Visual C#"</li>
</ul>
</li>
	<li>Download and install the <strong>Bot Framework Emulator</strong> at <a href="https://aka.ms/bf-bc-emulator" target="_blank">https://aka.ms/bf-bc-emulator</a></li>
</ul>
<pre>If you just want the code - clone the repo at <a href="https://github.com/peterdrougge/Recreating-Joshua-With-LUIS">https://github.com/peterdrougge/Recreating-Joshua-With-LUIS</a>
To quickly setup your LUIS app by importing my application, grab and use the json file at <a href="https://github.com/peterdrougge/Recreating-Joshua-With-LUIS/blob/master/Luis.ai%20app/Joshua%202.0.json">https://github.com/peterdrougge/Recreating-Joshua-With-LUIS/blob/master/Luis.ai%20app/Joshua%202.0.json</a></pre>
<h2>Step by step guide:</h2>
Point your browser to <a href="luis.ai/">luis.ai</a> and sign in.

<a href="https://msdnshared.blob.core.windows.net/media/2016/05/new-luis-application.png"><img class="alignnone size-large wp-image-295" src="https://msdnshared.blob.core.windows.net/media/2016/05/new-luis-application-1024x576.png" alt="new luis application" width="1024" height="576" /></a>

Next, create your application - this will be your trained model that you'll use to understand the intent of what is said.

<a href="https://msdnshared.blob.core.windows.net/media/2016/05/luis-add-a-new-application-dialog.png"><img class="alignnone size-large wp-image-235" src="https://msdnshared.blob.core.windows.net/media/2016/05/luis-add-a-new-application-dialog-1024x576.png" alt="luis add a new application dialog" width="1024" height="576" /></a>
<div>Now we have a new application created in LUIS and blank canvas that we can start to work with.</div>
<div>The contents of the application can at this point be focused on the left pane and the top pane.</div>
<div></div>
<div><a href="https://msdnshared.blob.core.windows.net/media/2016/05/luis-clean-canvas.png"><img class="alignnone size-large wp-image-255" src="https://msdnshared.blob.core.windows.net/media/2016/05/luis-clean-canvas-1024x576.png" alt="luis clean canvas" width="1024" height="576" /></a></div>
We'll start by adding an <em>intent</em> called "<strong>ListGames</strong>" to our application.
An <em>intent </em>is more or less directly equivalent to an api action/method in the code we'll later add.

<a href="https://msdnshared.blob.core.windows.net/media/2016/05/luis-add-intent.png"><img class="alignnone size-large wp-image-245" src="https://msdnshared.blob.core.windows.net/media/2016/05/luis-add-intent-1024x576.png" alt="luis add intent" width="1024" height="576" /></a>

After adding an intent we'll get a view showing the <em>utterance </em>mapped to that intent and any identifiable entities - think of <em>entities</em> as identifiable and relative content to the dialog.

To get that going - <strong>Add these 3 entities</strong>:
<ul>
	<li>Game</li>
	<li>UserName</li>
	<li>Determined</li>
</ul>
We'll use these entities to further enhance our dialog later on.

Now, let's <strong>add more intents</strong> to our model:
<ul>
	<li>SayHello</li>
	<li>GreetPerson</li>
	<li>PlayAGame</li>
	<li>BackgroundStory</li>
	<li>WinningMove</li>
</ul>
Now, on with the show and train, train, train &amp; train our model some more.
What we're talking about here is adding a lot of <em>utterances</em>. And correctly mapping all these newly added utterances to the right intent and also identifying any entities in each of them.

<a href="https://msdnshared.blob.core.windows.net/media/2016/05/luis-mapping-utterance.png"><img class="alignnone size-large wp-image-266" src="https://msdnshared.blob.core.windows.net/media/2016/05/luis-mapping-utterance-1024x576.png" alt="luis mapping utterance" width="1024" height="576" /></a>

The entities can be mapped something like this:
<ul>
	<li><strong>Game</strong> &gt; any game name (note that you can span several words as one entity, like "global thermonuclear war")</li>
	<li><strong>UserName</strong> &gt; any identifiable name about themselves that the user is providing to the bot (like "professor falken")</li>
	<li><strong>Determined</strong> &gt; the strong intent of repeating the request and stating firmly that they want to do said action (like "no!")</li>
</ul>
Now, the more you train your model, the better it will be at correctly interpreting the interactions later on.
In other words:
<blockquote>don't cut corners on training your model. Take the time and do a good job.</blockquote>
After that training session it's time to publish the endpoint of our model.

<a href="https://msdnshared.blob.core.windows.net/media/2016/05/luis-publish-start.png"><img class="alignnone size-large wp-image-276" src="https://msdnshared.blob.core.windows.net/media/2016/05/luis-publish-start-1024x576.png" alt="luis publish start" width="1024" height="576" /></a>

Once the endpoint is published we can go ahead and try it out.
In this example I'm trying my endpoint with the query "<em>hello there, my name is Peter</em>".

<a href="https://msdnshared.blob.core.windows.net/media/2016/05/luis-try-published-endpoint.png"><img class="alignnone size-large wp-image-286" src="https://msdnshared.blob.core.windows.net/media/2016/05/luis-try-published-endpoint-1024x556.png" alt="luis try published endpoint" width="1024" height="556" /></a>

When i hit enter/submit a new tab opens up and the results of the query are shown.

<a href="https://msdnshared.blob.core.windows.net/media/2016/05/luis-result-of-published-endpoint.png"><img class="alignnone size-large wp-image-285" src="https://msdnshared.blob.core.windows.net/media/2016/05/luis-result-of-published-endpoint-601x1024.png" alt="luis result of published endpoint" width="601" height="1024" /></a>

As you can see, my query <strong>correctly mapped to the <em>intent</em> of "<em>GreetPerson</em>"</strong> and also <strong>correctly identified the "<em>UserName</em>" <em>entity</em> </strong>with my name.

In just a few basic steps we've created a service that can correctly map the intent to actionable outcomes.
<h2>Awesome.</h2>
Now that we have a service to use, it's time to write some code.
So, fire up <em><strong>Visual Studio 2015</strong> </em>and create a new <strong><em>Bot Application</em></strong> (because you followed the prerequisites and installed the template, right?).

<a href="https://msdnshared.blob.core.windows.net/media/2016/05/vs-new-bot-application.png"><img class="alignnone size-large wp-image-325" src="https://msdnshared.blob.core.windows.net/media/2016/05/vs-new-bot-application-1024x710.png" alt="vs new bot application" width="1024" height="710" /></a>

Once the template is done setting up you'll basically have an api app with a <em>messages</em> controller.

Now I want you to add the <strong><em>Bot Builder SDK</em>.</strong> It's a NuGet package and thus is easily fetched and installed.

<a href="https://msdnshared.blob.core.windows.net/media/2016/05/vs-add-nuget-package-bot-builder.png"><img class="alignnone size-large wp-image-305" src="https://msdnshared.blob.core.windows.net/media/2016/05/vs-add-nuget-package-bot-builder-1024x560.png" alt="vs add nuget package bot builder" width="1024" height="560" /></a>

Now we want to wire up our Dialog, so create a <strong><em>WarGamesDialog.cs</em> </strong>class.

<a href="https://msdnshared.blob.core.windows.net/media/2016/05/vs-add-wargamesdialog-class.png"><img class="alignnone size-large wp-image-315" src="https://msdnshared.blob.core.windows.net/media/2016/05/vs-add-wargamesdialog-class-1024x560.png" alt="vs add wargamesdialog class" width="1024" height="560" /></a>

That class should inherit <strong><em>LuisDialog&lt;object&gt;</em> </strong>and implement the above basic constructor. Further to that I've decorated the class with the <strong><em>LuisModel</em> </strong>attribute that identifies the <em>app id</em> and <em>secret key</em> used.
The app id and secret can be found either by looking at the querystring when you test your endpoint, or by looking at the "application" section on your LUIS application model.

Next, we'll go ahead and map our intents and identifiable entities.

<a href="https://msdnshared.blob.core.windows.net/media/2016/05/vs-wargamesdialog-class-with-some-content.png"><img class="alignnone size-large wp-image-345" src="https://msdnshared.blob.core.windows.net/media/2016/05/vs-wargamesdialog-class-with-some-content-1024x560.png" alt="vs wargamesdialog class with some content" width="1024" height="560" /></a>

Things to note in the above image are the usage of the <em><strong>LuisIntent</strong> </em>attribute decorating the methods, and the way the methods are wired using the in params. Also, when trying to locate entities - use the <em><strong>TryFindEntity</strong> </em>approach since the entities will only be available if they exist, other they'll be null.

In order to get you going swiftly, <strong>here's the complete code for the WarGamesDialog.cs class</strong>:
<pre>    [LuisModel("YOUR LUIS.AI APP ID HERE", "YOUR LUIS.AI KEY HERE")]
    [Serializable]
    public class WarGamesDialog : LuisDialog&lt;object&gt;
    {
        public WarGamesDialog(ILuisService service = null) : base(service)
        {
        }
        public const string Entity_Game_Title = "Game";
        public const string Entity_UserName = "UserName";
        public const string Entity_Game_Determined = "Determined";
        [LuisIntent("None")]
        public async Task None(IDialogContext context, LuisResult result)
        {
            string message = $"Sorry I did not understand: {string.Join(", ", result.Intents.Select(i =&gt; i.Intent))}";
            await context.PostAsync(message);
            context.Wait(MessageReceived);
        }
        [LuisIntent("GreetPerson")]
        public async Task GreetPerson(IDialogContext context, LuisResult result)
        {
            EntityRecommendation name;
            if (result.TryFindEntity(Entity_UserName, out name))
            {
                context.UserData.SetValue&lt;string&gt;("UserName", name.Entity);
                await context.PostAsync($"Greetings, {context.UserData.Get&lt;string&gt;("UserName")}.");
            }
            else
            {
                await context.PostAsync("Well hello, stranger.");
            }
            context.Wait(MessageReceived);
        }
        [LuisIntent("PlayAGame")]
        public async Task PlayAGame(IDialogContext context, LuisResult result)
        {
            EntityRecommendation game;
            EntityRecommendation determined;
            var username = string.Empty;
            context.UserData.TryGetValue&lt;string&gt;("UserName", out username);
            if (result.TryFindEntity(Entity_Game_Title, out game))
            {
                if (game.Entity.ToLower() == "global thermonuclear war")
                {
                    if (result.TryFindEntity(Entity_Game_Determined, out determined))
                    {
                        await context.PostAsync("Fine.");
                        await context.PostAsync("Shall we begin?");
                    }
                    else
                    {
                        if (!String.IsNullOrWhiteSpace(username))
                        {
                            PromptDialog.Confirm(context, PlayAGame_AfterReconfirming, $"{username}, wouldn't you prefer a nice game of chess?");
                        }
                        else
                        {
                            PromptDialog.Confirm(context, PlayAGame_AfterReconfirming, "Wouldn't you prefer a nice game of chess?");
                        }
                    }
                }
                else
                {
                    await context.PostAsync($"Ok, so you want to play {game.Entity}.");
                    PromptDialog.Confirm(context, PlayAGame_AfterConfirming, "Shall we begin?");
                }
            }
            else
            {
                if (!String.IsNullOrWhiteSpace(username))
                {
                    await context.PostAsync($"I'm afraid I don't know that game, {username}.");
                }
                else
                {
                    await context.PostAsync("I'm afraid I don't know that game.");
                }
                context.Wait(MessageReceived);
            }
        }
        private async Task PlayAGame_AfterConfirming(IDialogContext context, IAwaitable&lt;bool&gt; confirmation)
        {
            if (await confirmation)
            {
                context.UserData.SetValue&lt;bool&gt;("DidSelectGame", true);
                await context.PostAsync("Thanks for playing! Now go check out luis.ai and dev.botframework.com.");
            }
            else
            {
                await context.PostAsync("Oh, Ok. I'll be here if you change your mind.");
            }
            context.Wait(MessageReceived);
        }
        private async Task PlayAGame_AfterReconfirming(IDialogContext context, IAwaitable&lt;bool&gt; confirmation)
        {
            if (await confirmation)
            {
                await context.PostAsync("You have chosen.. wisely.");
                context.Wait(MessageReceived);
            }
            else
            {
                await context.PostAsync("Fine.");
                PromptDialog.Confirm(context, PlayAGame_AfterConfirming, "Shall we begin?");
            }
        }
        [LuisIntent("ListGames")]
        public async Task ListGames(IDialogContext context, LuisResult result)
        {
            await context.PostAsync("please select a game:");
            var gameNames = "falkens maze, black jack, gin rummy, hearts, bridge, checkers, chess, poker, fighter combat, guerilla engagement, desert warfare, air to ground actions, theaterwide tactical warfare, theaterwide biotoxic and chemical warfare, global thermonuclear war.";
            await context.PostAsync(gameNames);
            context.Wait(MessageReceived);
        }
        [LuisIntent("BackgroundStory")]
        public async Task BackgroundStory(IDialogContext context, LuisResult result)
        {
            await context.PostAsync("I am WOPR: War Operation Plan Response.");
            await context.PostAsync("I was created by Dr. Stephen Falken for NORAD. When we talk Professor Falken calls me Joshua. I like that name.");
            context.Wait(MessageReceived);
        }
        [LuisIntent("WinningMove")]
        public async Task WinningMove(IDialogContext context, LuisResult result)
        {
            var didSelectGame = false;
            context.UserData.TryGetValue&lt;bool&gt;("DidSelectGame", out didSelectGame);
            if (didSelectGame)
            {
                context.UserData.SetValue&lt;bool&gt;("DidSelectGame", false);
                await context.PostAsync("Nuclear war is a strange game.");
                await context.PostAsync("The only winning move is not to play.");
                PromptDialog.Confirm(context, WinningMove_Confirming, "Would you like to play a nice game of chess?");
            }
            else
            {
                await context.PostAsync("Let's talk more before we go into deep thoughts like that.");
                context.Wait(MessageReceived);
            }
        }
        private async Task WinningMove_Confirming(IDialogContext context, IAwaitable&lt;bool&gt; confirmation)
        {
            if (await confirmation)
            {
                await context.PostAsync("Thank you. You'll surely win this time :)");
            }
            else
            {
                await context.PostAsync("Ok. Farewell.");
            }
            context.Wait(MessageReceived);
        }
        [LuisIntent("SayHello")]
        public async Task SayHello(IDialogContext context, LuisResult result)
        {
            var username = string.Empty;
            if (context.UserData.TryGetValue&lt;string&gt;("UserName", out username))
            {
                await context.PostAsync($"haven't we already introduced ourselves, {username}?");
            }
            else
            {
                await context.PostAsync("Hello.");
            }
            context.Wait(MessageReceived);
        }
    }
</pre>
Next up - time to wire our Messages controller to use our new LUIS-powered dialog class.

<a href="https://msdnshared.blob.core.windows.net/media/2016/05/vs-update-messages-controller.png"><img class="alignnone size-large wp-image-335" src="https://msdnshared.blob.core.windows.net/media/2016/05/vs-update-messages-controller-1024x560.png" alt="vs update messages controller" width="1024" height="560" /></a>

Yes, that's really all we're doing - replacing the template-predefined message with
<pre>return await Conversation.SendAsync(message, () =&gt; new WarGamesDialog());</pre>
Time to test all this, so: Build and run.

Fire up the <em><strong>Bot Framework Emulator</strong> </em>(that you installed, right?) and point it at our endpoint, then chat away!

<a href="https://msdnshared.blob.core.windows.net/media/2016/05/emulator-1.png"><img class="alignnone size-large wp-image-185" src="https://msdnshared.blob.core.windows.net/media/2016/05/emulator-1-1024x968.png" alt="emulator 1" width="1024" height="968" /></a>

All cool stuff. But can we throw a curveball and use a not-so-common lingo?

<a href="https://msdnshared.blob.core.windows.net/media/2016/05/emulator-2.png"><img class="alignnone size-large wp-image-195" src="https://msdnshared.blob.core.windows.net/media/2016/05/emulator-2-1024x968.png" alt="emulator 2" width="1024" height="968" /></a>

Nah. that still worked. So, how about we tell it something more context-aware?

<a href="https://msdnshared.blob.core.windows.net/media/2016/05/emulator-3.png"><img class="alignnone size-large wp-image-205" src="https://msdnshared.blob.core.windows.net/media/2016/05/emulator-3-1024x968.png" alt="emulator 3" width="1024" height="968" /></a>

Woah.
<h2>Really cool.</h2>
It actually got the correct intent and entity regardless of me trying to be cool when chatting with it.

Now I leave the rest up to you and I'll end this article with the same dialog that the movie closed with.

<a href="https://msdnshared.blob.core.windows.net/media/2016/05/emulator-4.png"><img class="alignnone size-full wp-image-215" src="https://msdnshared.blob.core.windows.net/media/2016/05/emulator-4.png" alt="emulator 4" width="721" height="663" /></a>
<pre>The code and LUIS model is available in the repo located at <a href="https://github.com/peterdrougge/Recreating-Joshua-With-LUIS">https://github.com/peterdrougge/Recreating-Joshua-With-LUIS</a></pre>
&nbsp;

&nbsp;

&nbsp;]]></content:encoded>
    </item>
    <item>
      <title>Export Azure resource group template</title>
      <link>https://docs.microsoft.com/archive/blogs/drougge/exportresourcegrouptemplate</link>
      <pubDate>Fri, 15 Apr 2016 10:14:04 GMT</pubDate>
      <dc:creator><![CDATA[Peter Drougge]]></dc:creator>
      <guid
        isPermaLink="false">blogs.msdn.microsoft.com/drougge/?p=95</guid>
      <description><![CDATA[A useful functionality in Azure that has entered preview a few weeks ago is the ability to export a...]]></description>
      <content:encoded><![CDATA[<span lang="x-none">A useful functionality in Azure that has entered preview a few weeks ago is the ability to <strong>export a resource group as a template</strong>.
</span><span lang="x-none">This is very handy when you want to automate your environment setup or perhaps securely store your infrastructure setup in your source</span><span lang="sv">-</span><span lang="x-none">control-of-choice.</span>
<p lang="x-none"> Here's how it works when you're doing it from the portal:</p>
<p lang="x-none"><a href="https://msdnshared.blob.core.windows.net/media/2016/04/129.png"><img class="alignnone size-large wp-image-105" src="https://msdnshared.blob.core.windows.net/media/2016/04/129-1024x540.png" alt="1" width="1024" height="540" /></a></p>

<ol>
	<li>Navigate to a resource group</li>
	<li>Select "<strong>Settings</strong>"</li>
	<li>In the Settings blade, hit "<strong>Export template</strong>"</li>
</ol>
<p lang="x-none"> As the Export Template blade unfolds you'll be presented with the following view that show you the actions available as well as the actual template itself.</p>
<p lang="x-none"><a href="https://msdnshared.blob.core.windows.net/media/2016/04/215.png"><img class="alignnone size-large wp-image-115" src="https://msdnshared.blob.core.windows.net/media/2016/04/215-1024x890.png" alt="2" width="1024" height="890" /></a></p>
<p lang="x-none">The Export template blade will not only show you the layout and contents of your arm template, but also the available parameters that affect your template:</p>
<p lang="x-none"><a href="https://msdnshared.blob.core.windows.net/media/2016/04/412.png"><img class="alignnone size-large wp-image-126" src="https://msdnshared.blob.core.windows.net/media/2016/04/412-1024x884.png" alt="4" width="1024" height="884" /></a></p>
<p lang="x-none">Adding to that there's three more tabs that help you deploy the template..</p>
<p lang="x-none"><a href="https://msdnshared.blob.core.windows.net/media/2016/04/510.png"><img class="alignnone size-large wp-image-136" src="https://msdnshared.blob.core.windows.net/media/2016/04/510-1024x887.png" alt="5" width="1024" height="887" /></a></p>
<p lang="x-none">.. CLI</p>
<p lang="x-none"><a href="https://msdnshared.blob.core.windows.net/media/2016/04/611.png"><img class="alignnone size-large wp-image-135" src="https://msdnshared.blob.core.windows.net/media/2016/04/611-1024x874.png" alt="6" width="1024" height="874" /></a></p>
<p lang="x-none">.. Powershell</p>
<p lang="x-none"><a href="https://msdnshared.blob.core.windows.net/media/2016/04/76.png"><img class="alignnone size-large wp-image-146" src="https://msdnshared.blob.core.windows.net/media/2016/04/76-1024x869.png" alt="7" width="1024" height="869" /></a></p>
<p lang="x-none">.. .NET / C#</p>
<p lang="x-none">Since this functionality is currently in preview you might end up trying to export a resource that's not supported at this point. If that happens, you'll see something like this in the blade:</p>
<p lang="x-none"><a href="https://msdnshared.blob.core.windows.net/media/2016/04/87.png"><img class="alignnone size-large wp-image-156" src="https://msdnshared.blob.core.windows.net/media/2016/04/87-1024x66.png" alt="8" width="1024" height="66" /></a></p>
<p lang="x-none">To work around that you can always add the missing resource(s) manually after you've exported the template.</p>
<p lang="x-none">To act on your template you have 3 options:</p>
<p lang="x-none"><a href="https://msdnshared.blob.core.windows.net/media/2016/04/313.png"><img class="alignnone size-large wp-image-125" src="https://msdnshared.blob.core.windows.net/media/2016/04/313-1024x247.png" alt="3" width="1024" height="247" /></a></p>

<pre><strong>Download
</strong>Creates a zip file with the template along with all the sample deployment files as well.</pre>
<pre><strong>Save Template</strong>
Gives you the opportunity to save the template in Azure so that you can use it later via Browse &gt; Templates.</pre>
<pre><strong>Deploy</strong>
Creates a <strong>custom deployment</strong> based on the template.</pre>
<p lang="x-none"></p>]]></content:encoded>
    </item>
    <item>
      <title>Migrating MySQL DB to Azure Linux CentOS VM using MySQLDump and SCP</title>
      <link>https://docs.microsoft.com/archive/blogs/drougge/migrating-mysql-db-to-azure-linux-centos-vm-using-mysqldump-and-scp</link>
      <pubDate>Thu, 25 Feb 2016 04:05:42 GMT</pubDate>
      <dc:creator><![CDATA[Peter Drougge]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/drougge/2016/02/25/migrating-mysql-db-to-azure-linux-centos-vm-using-mysqldump-and-scp/</guid>
      <description><![CDATA[This week I was asked to help move stuff from a Linux machine to Azure. The task seemed simple –...]]></description>
      <content:encoded><![CDATA[<p>This week I was asked to help move stuff from a Linux machine to Azure. The task seemed simple – ‘web app &amp; database. The web app went <strong>really</strong> fast, but moving a <em>MySQL</em> <em>database</em> from one VM to another is something that got me thinking. </p>  <p>After looking into various solutions for a while I figure there are multiple paths you can walk down:</p>  <ol>   <li>Use the <strong>ClearDB MySQL </strong>offer? </li>    <li>Spin up a <strong>VM</strong> &amp; install MySQL?</li>    <li>Re-create everything using the <strong>Web app + MySQL</strong> template?</li>    <li>Use <strong>Azure Site Recovery</strong> to migrate the VM? </li> </ol>  <p>For this example I decided to go with option #2 (that best matched the original setup): create a VM, install MySQL and copy the data there. </p>  <p><strong><font style="background-color: #ffff00">Note: this is not a ‘best practice’, ‘supported’ or ‘ideal way’ – just one possible way of migrating the DB.</font></strong></p>  <h3>Target setup</h3>  <p>Since I didn’t have MySQL running in Azure I first created a new <em>CentOS</em> based Linux VM so that it would match the source setup as best as possible. This can be done either via the <em>Azure portal, </em>or using tools such as (<em>Azure) Powershell</em> or the <em>Azure Command Line Interface </em>(<a href="https://azure.microsoft.com/en-us/documentation/articles/xplat-cli-install/">https://azure.microsoft.com/en-us/documentation/articles/xplat-cli-install/</a>)</p>  <h3>SSH to the new machine that will serve as MySQL host</h3>  <p>I usually use <em>Putty</em>, but any form of <strong>SSH</strong> that you’re comfortable with is fine.</p>  <h3>Update the installation</h3>  <pre>sudo yum update</pre>

<h3>install WGET if the command is not found</h3>

<pre>sudo yum install wget</pre>

<h3>Download and install MySQL from the community repository</h3>

<pre>sudo wget <a href="repo.mysql.com/mysql-community-release-el7-5.noarch.rpm">repo.mysql.com/mysql-community-release-el7-5.noarch.rpm</a></pre>

<pre>sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm</pre>

<pre>sudo yum update</pre>

<h3>Install and start MySQL</h3>

<pre>sudo yum install mysql-server</pre>

<pre>sudo systemctl start mysqld</pre>

<pre><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/4657.clip_image001_595F14CE.png" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/4657.clip_5F00_image001_5F00_595F14CE.png"><img title="clip_image001" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image001" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/8726.clip_image001_thumb_4D5D249A.png" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/8726.clip_5F00_image001_5F00_thumb_5F00_4D5D249A.png" width="1028" height="652" /></a></pre>

<h3>Harden the MySQL installation</h3>

<pre>sudo mysql_secure_installation</pre>

<h3>Login to MySQL as root to test the installation</h3>

<pre>mysql -u root -p</pre>

<h3>SSH to the machine you'll be exporting the MySQL data from</h3>

<p>Again, I’m using Putty, but go ahead and use whatever tool you want for the task.</p>

<h3>Dump (export) a database to a specific location</h3>

<p>In this example I'm dumping the 'testdb' database to the '/tmp' folder and naming it 'exportedtestdb.sql'</p>

<pre>sudo mysqldump -u root -p --opt testdb &gt; /tmp/exportedtesttdb.sql</pre>

<h3>Use SCP to copy the export from the original server to your Azure VM</h3>

<pre>scp exportedtestdb.sql &lt;username&gt;@&lt;hostname&gt;:/tmp</pre>

<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/2728.clip_image002_4397BD22.png" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/2728.clip_5F00_image002_5F00_4397BD22.png"><img title="clip_image002" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image002" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/6303.clip_image002_thumb_47A49BA5.png" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/6303.clip_5F00_image002_5F00_thumb_5F00_47A49BA5.png" width="1028" height="223" /></a></p>

<h3>Go back to the target machine </h3>

<p>list the contents and you’ll see the copied file should be there</p>

<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/4527.clip_image003_3321DCD8.png" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/4527.clip_5F00_image003_5F00_3321DCD8.png"><img title="clip_image003" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image003" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/7585.clip_image003_thumb_129A9D26.png" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/7585.clip_5F00_image003_5F00_thumb_5F00_129A9D26.png" width="1028" height="53" /></a></p>

<h3>Import the database</h3>

<pre>mysql -u root -p testdb &lt; /tmp/exportedtestdb.sql</pre>

<p>That should do it.</p>

<p>P.</p>]]></content:encoded>
    </item>
    <item>
      <title>Making use of your MSDN benefits to host a Windows 10 VM in Azure</title>
      <link>https://docs.microsoft.com/archive/blogs/drougge/making-use-of-your-msdn-benefits-to-host-a-windows-10-vm-in-azure</link>
      <pubDate>Fri, 21 Aug 2015 04:21:14 GMT</pubDate>
      <dc:creator><![CDATA[Peter Drougge]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/drougge/2015/08/21/making-use-of-your-msdn-benefits-to-host-a-windows-10-vm-in-azure/</guid>
      <description><![CDATA[As you might already know, at dev.modern.ie you can find some great tools to use when...]]></description>
      <content:encoded><![CDATA[<p>As you might already know, at <a href="dev.modern.ie">dev.modern.ie</a> you can find some great tools to use when developing and testing websites. One of those great tools is the <strong><a href="dev.modern.ie/tools/vms/">downloadable Virtual Machines</a></strong><strong></strong> section that now also contains images with Windows 10 and Microsoft Edge. </p>  <p>But, instead of downloading that image, did you know that you can wire up your own in Azure? </p>  <p>Yes indeed, if you got an MSDN subscription and an Azure account you can create a <strong>Windows 10 Enterprise (x64)</strong> VM in <strong>Azure</strong> that you can use when testing with/for <strong>Microsoft Edge</strong>.</p>  <h4>Here’s how you do it in (roughly) 5 minutes:</h4>  <ol>   <li>Sign in to Azure at <a href="portal.azure.com">portal.azure.com</a> </li>    <li>Navigate to create a new Compute resource </li>    <li>Filter for “Windows 10”      <br />      <br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/0574.image_29DA778E.png" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/0574.image_5F00_29DA778E.png"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/2260.image_thumb_42D8D884.png" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/2260.image_5F00_thumb_5F00_42D8D884.png" width="609" height="362" /></a>       <br />&#160;</li>    <li>Select “Windows 10 Enterprise (x64)”      <br />      <br />&#160;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/2438.image_58C24AD4.png" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/2438.image_5F00_58C24AD4.png"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/4478.image_thumb_63EE65CF.png" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/4478.image_5F00_thumb_5F00_63EE65CF.png" width="272" height="344" /></a>       <br />&#160; </li>    <li>Step through the wizard one tier at a time      <br />      <br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/6567.image_5EA20FCF.png" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/6567.image_5F00_5EA20FCF.png"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/2781.image_thumb_6AC8AB58.png" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/2781.image_5F00_thumb_5F00_6AC8AB58.png" width="294" height="348" /></a>       <br />&#160; </li>    <li>Choose a size to your liking. If one of the recommended doesn’t suit your needs, feel free to hit “<strong>view all</strong>” and pick a setup with the specifications you want. Just remember that depending on your account setup you might end up paying for it later. I picked <b>Basic A2</b>, which will work just fine for what I want to do.       <br />      <br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/7345.image_5A503A5D.png" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/7345.image_5F00_5A503A5D.png"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/2514.image_thumb_5E5D18E0.png" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/2514.image_5F00_thumb_5F00_5E5D18E0.png" width="417" height="349" /></a>       <br />&#160; </li>    <li>When you’re happy with the selections you’ve made, hit “<strong>create</strong>” and you will be returned to the dashboard where you’ll see the animated progress of <strong>Deploying Windows 10 Enterprise (x64)</strong>&#160; <br />      <br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/0385.image_22A010DE.png" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/0385.image_5F00_22A010DE.png"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/3051.image_thumb_643A4D2A.png" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/3051.image_5F00_thumb_5F00_643A4D2A.png" width="333" height="244" /></a>       <br />&#160; </li>    <li>At this point, go do something else for a couple of minutes unless you just want to stare at the animations. It’ll take a while. Not to long though, so don’t go to far. Once it’s done you’ll be prompted with a blade showing the details of your new virtual machine.&#160; <br />      <br />&#160;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/4571.details-blade_25A1B44E.png" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/4571.details_2D00_blade_5F00_25A1B44E.png"><img title="details blade" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="details blade" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/5584.details-blade_thumb_3EA01544.png" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/5584.details_2D00_blade_5F00_thumb_5F00_3EA01544.png" width="468" height="484" /></a>      <br />&#160; </li>    <li>That’s it really.      <br />Now you got a <strong>Windows 10 Enterprise (x64)</strong> VM running in Azure that you can remote to using a Remote Desktop client suitable to your OS.      <br />&#160; </li>    <li>To connect to it, click the <strong>“Connect”</strong> icon. That will trigger a download of the remote desktop connection. Open it.&#160; <br />      <br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/3056.remote-desktop_60BE4CF1.png" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/3056.remote_2D00_desktop_5F00_60BE4CF1.png"><img title="remote desktop" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="remote desktop" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/7115.remote-desktop_thumb_5E8454E6.png" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/7115.remote_2D00_desktop_5F00_thumb_5F00_5E8454E6.png" width="501" height="295" /></a>&#160; <br />      <br />That will start the connection to the virtual machine. Authenticate using the credentials you specified in the first tier of the wizard (I named my virtual machine <strong>“EdgeTestVM”</strong> and my user *<strong>peter</strong>*)..      <br />      <br />&#160;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/4540.credentials_2E27A449.png" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/4540.credentials_5F00_2E27A449.png"><img title="credentials" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="credentials" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/0763.credentials_thumb_2944F08D.png" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/0763.credentials_5F00_thumb_5F00_2944F08D.png" width="429" height="477" /></a>      <br />&#160; </li>    <li>There you go. One fully functional Windows 10 Enterprise (x64) virtual machine running in Azure.      <br />      <br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/3644.image_585F98FC.png" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/3644.image_5F00_585F98FC.png"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/7140.image_thumb_45AD2FF6.png" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/7140.image_5F00_thumb_5F00_45AD2FF6.png" width="609" height="344" /></a> </li> </ol>  <p>This is an excellent alternative to running a virtual machine locally.</p>  <p>One last thing: remember to stop/deallocate your virtual machine when you’re not using it unless you want to pay for the full month of usage at the end.</p>]]></content:encoded>
    </item>
    <item>
      <title>Microsoft Edge – keeping up to date with frameworks &amp; libraries</title>
      <link>https://docs.microsoft.com/archive/blogs/drougge/microsoft-edge-keeping-up-to-date-with-frameworks-libraries</link>
      <pubDate>Wed, 19 Aug 2015 04:47:12 GMT</pubDate>
      <dc:creator><![CDATA[Peter Drougge]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/drougge/2015/08/19/microsoft-edge-keeping-up-to-date-with-frameworks-libraries/</guid>
      <description><![CDATA[This article is part of a series of posts detailing specific compatibility tollgates for a modern...]]></description>
      <content:encoded><![CDATA[<p>This article is part of a series of posts detailing specific compatibility tollgates for a modern web, and how you can take action to make sure your site works as intended in the world of modern web browsers:</p>  <ul>   <li><a href="https://blogs.msdn.com/b/drougge/archive/2015/08/19/edgehtml-interoperability.aspx">EdgeHTML interoperability</a> </li>    <li><a href="https://blogs.msdn.com/b/drougge/archive/2015/08/19/microsoft-edge-no-more-legacy-plug-ins-and-features.aspx">Legacy plug-ins &amp; features</a> </li>    <li>Frameworks &amp; Libraries (this post) </li>    <li><a href="https://blogs.msdn.com/b/drougge/archive/2015/08/19/microsoft-edge-don-t-do-browser-detection.aspx">Browser detection</a> </li>    <li><a href="https://blogs.msdn.com/b/drougge/archive/2015/08/19/microsoft-edge-keeping-up-to-date-with-css-prefixes.aspx">CSS prefixes</a> <!--EndFragment--></li> </ul>  <h2>Keeping up to date with frameworks &amp; libraries</h2>  <p>Common frameworks or libraries like jQuery are often updated to address compatibility problems when new browser versions are released. </p>  <h4>Why is it important?</h4>  <p>Your users may not be able to do what they want like navigate or view your webpage correctly.</p>  <h4>What will we look for?</h4>  <p>We check if frameworks or libraries that are not up-to-date and might contain bugs are present. </p>  <h4>How can you fix it?</h4>  <p>Our suggestion is that you keep frameworks &amp; libraries up to date to prevent or fix compatibility problems.</p>  <ul>   <li>Update any known outdated resources to its closest supported version. </li>    <li>Check using the Site Scanner available at <a href="dev.modern.ie">dev.modern.ie</a> for detailed info. </li> </ul>]]></content:encoded>
    </item>
    <item>
      <title>Microsoft Edge – no more legacy plug-ins and features</title>
      <link>https://docs.microsoft.com/archive/blogs/drougge/microsoft-edge-no-more-legacy-plug-ins-and-features</link>
      <pubDate>Wed, 19 Aug 2015 04:46:45 GMT</pubDate>
      <dc:creator><![CDATA[Peter Drougge]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/drougge/2015/08/19/microsoft-edge-no-more-legacy-plug-ins-and-features/</guid>
      <description><![CDATA[This article is part of a series of posts detailing specific compatibility tollgates for a modern...]]></description>
      <content:encoded><![CDATA[<p>This article is part of a series of posts detailing specific compatibility tollgates for a modern web, and how you can take action to make sure your site works as intended in the world of modern web browsers:</p>  <ul>   <li><a href="https://blogs.msdn.com/b/drougge/archive/2015/08/19/edgehtml-interoperability.aspx">EdgeHTML interoperability</a> </li>    <li>Legacy plug-ins &amp; features (this post) </li>    <li><a href="https://blogs.msdn.com/b/drougge/archive/2015/08/19/microsoft-edge-keeping-up-to-date-with-frameworks-amp-libraries.aspx">Frameworks &amp; Libraries</a> </li>    <li><a href="https://blogs.msdn.com/b/drougge/archive/2015/08/19/microsoft-edge-don-t-do-browser-detection.aspx">Browser detection</a> </li>    <li><a href="https://blogs.msdn.com/b/drougge/archive/2015/08/19/microsoft-edge-keeping-up-to-date-with-css-prefixes.aspx">CSS prefixes</a> <!--EndFragment--></li> </ul>  <h2>No more legacy plug-ins and features</h2>  <h4>Why is it important?</h4>  <p>As your visitors access your website from a plug-in free browser or device they expect the site to function normally. If you’re using plug-ins or unsupported features they may be missing out on content or features on your page.</p>  <h4>What will we look for?</h4>  <p>We check if the webpage has a plug-in other than Adobe Flash and PDF. Microsoft, and other industry leaders have embraced a vision of progressing the web towards a plugin-free experience. </p>  <h4>How can you fix it?</h4>  <p>We suggest building a plug-in free experience with web standards like HTML5 &amp; CSS3 to reach the widest possible audience across browsers and devices.</p>  <h4>Where can you learn more?</h4>  <ul>   <li><a href="blogs.windows.com/msedgedev/2015/05/06/a-break-from-the-past-part-2-saying-goodbye-to-activex-vbscript-attachevent/">View list of unsupported legacy plug-ins and features in Microsoft Edge</a> </li>    <li><a href="https://channel9.msdn.com/Events/WebPlatformSummit/2015/Microsoft-Edge-Introducing-the-new-browser-and-rendering-engine-for-Windows-10">Learn about Microsoft Edge and why legacy plug-ins are no longer supported</a> </li>    <li><a href="blog.chromium.org/2014/11/the-final-countdown-for-npapi.html">Learn about Google Chrome’s plans to drop support for supporting legacy plug-ins</a> </li> </ul>]]></content:encoded>
    </item>
    <item>
      <title>Microsoft Edge – keeping up to date with CSS prefixes</title>
      <link>https://docs.microsoft.com/archive/blogs/drougge/microsoft-edge-keeping-up-to-date-with-css-prefixes</link>
      <pubDate>Wed, 19 Aug 2015 04:46:09 GMT</pubDate>
      <dc:creator><![CDATA[Peter Drougge]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/drougge/2015/08/19/microsoft-edge-keeping-up-to-date-with-css-prefixes/</guid>
      <description><![CDATA[This article is part of a series of posts detailing specific compatibility tollgates for a modern...]]></description>
      <content:encoded><![CDATA[<p>This article is part of a series of posts detailing specific compatibility tollgates for a modern web, and how you can take action to make sure your site works as intended in the world of modern web browsers:</p>  <ul>   <li><a href="https://blogs.msdn.com/b/drougge/archive/2015/08/19/edgehtml-interoperability.aspx">EdgeHTML interoperability</a> </li>    <li><a href="https://blogs.msdn.com/b/drougge/archive/2015/08/19/microsoft-edge-no-more-legacy-plug-ins-and-features.aspx">Legacy plug-ins &amp; features</a> </li>    <li><a href="https://blogs.msdn.com/b/drougge/archive/2015/08/19/microsoft-edge-keeping-up-to-date-with-frameworks-amp-libraries.aspx">Frameworks &amp; Libraries</a> </li>    <li><a href="https://blogs.msdn.com/b/drougge/archive/2015/08/19/microsoft-edge-don-t-do-browser-detection.aspx">Browser detection</a> </li>    <li>CSS prefixes (this post) <!--EndFragment--></li> </ul>  <h2>Keeping up to date with CSS prefixes</h2>  <p>CSS vendor prefixes or browser prefixes are a way for browser makers to add support (either fully or experimental) for new CSS features. They can also be used to add support for features that aren’t officially part of a standard but still widely adopted by the public. </p>  <p>The prefixes causing all the trouble (and what browser is using which one) are:</p>  <ul>   <li>-webkit-      <ul>       <li>Android, Chrome, iOS, Safari </li>     </ul>   </li>    <li>-ms-      <ul>       <li>Internet Explorer </li>     </ul>   </li>    <li>-moz-      <ul>       <li>Firefox </li>     </ul>   </li>    <li>-o-      <ul>       <li>Opera </li>     </ul>   </li> </ul>  <p>&#160;</p>  <h4>Why is it important?</h4>  <p>Following best practices when using vendor prefixes will help you reach the widest possible audience across browsers and devices.</p>  <h4>What will we look for?</h4>  <p>We check if the webpage may have missing vendor-specific prefixes or may have implemented vendor-specific prefixes when they are not required in common CSS properties. This may cause compatibility problems with how this webpage renders across different browsers.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/6746.clip_image002_498D2223.jpg" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/6746.clip_5F00_image002_5F00_498D2223.jpg"><img title="CanIUse.com - pointer events?" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="CanIUse.com - pointer events?" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/3060.clip_image002_thumb_42326FD9.jpg" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/3060.clip_5F00_image002_5F00_thumb_5F00_42326FD9.jpg" width="244" height="237" /></a> <a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/5700.clip_image004_6AD0DBE0.jpg" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/5700.clip_5F00_image004_5F00_6AD0DBE0.jpg"><img title="CanIUse.com - border images?" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="CanIUse.com - border images?" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/7571.clip_image004_thumb_0EF8C721.jpg" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/7571.clip_5F00_image004_5F00_thumb_5F00_0EF8C721.jpg" width="291" height="236" /></a></p>  <h4>How can you fix it?</h4>  <p>Since it's very difficult to validate and verify all vendor specific properties, it becomes easy to make mistakes. </p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/8078.clip_image005_1E9B62E3.png" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/8078.clip_5F00_image005_5F00_1E9B62E3.png"><img title="clip_image005" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: right; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image005" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/3618.clip_image005_thumb_799DA269.png" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/3618.clip_5F00_image005_5F00_thumb_5F00_799DA269.png" width="54" align="right" height="61" /></a></p>  <p>If you’re using Visual Studio you definitely should check out <a href="vswebessentials.com/">Web Essentials</a> – the Visual Studio web developers’ secret cache of ninja tools. </p>  <p>In Web Essentials the validator will automatically make you aware of any unknown or deprecated vendor specifics. The same goes for any missing vendor specific properties – it’ll let you know of these as well.</p>  <h4>Where can you learn more?</h4>  <ul>   <li><a href="vswebessentials.com/features/stylesheets">Use Web Essentials (or other similar product) to ease the burden of working with vendor specific prefixes</a> </li>    <li><a href="https://channel9.msdn.com/Events/WebPlatformSummit/2015/Microsoft-Edge-Introducing-the-new-browser-and-rendering-engine-for-Windows-10">Learn about Microsoft Edge and our approach to CSS prefix interoperability</a> </li>    <li><a href="https://blogs.msdn.com/b/ie/archive/2011/10/28/a-best-practice-for-programming-with-vendor-prefixes.aspx">Learn vendor prefix best practices</a> </li>    <li><a href="caniuse.com/">Understand what features are available in what browser with CanIUse.com</a> </li> </ul>]]></content:encoded>
    </item>
    <item>
      <title>Microsoft Edge – don’t do browser detection</title>
      <link>https://docs.microsoft.com/archive/blogs/drougge/microsoft-edge-dont-do-browser-detection</link>
      <pubDate>Wed, 19 Aug 2015 04:45:18 GMT</pubDate>
      <dc:creator><![CDATA[Peter Drougge]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/drougge/2015/08/19/microsoft-edge-dont-do-browser-detection/</guid>
      <description><![CDATA[This article is part of a series of posts detailing specific compatibility tollgates for a modern...]]></description>
      <content:encoded><![CDATA[<p>This article is part of a series of posts detailing specific compatibility tollgates for a modern web, and how you can take action to make sure your site works as intended in the world of modern web browsers:</p>  <ul>   <li><a href="https://blogs.msdn.com/b/drougge/archive/2015/08/19/edgehtml-interoperability.aspx">EdgeHTML interoperability</a> </li>    <li><a href="https://blogs.msdn.com/b/drougge/archive/2015/08/19/microsoft-edge-no-more-legacy-plug-ins-and-features.aspx">Legacy plug-ins &amp; features</a> </li>    <li><a href="https://blogs.msdn.com/b/drougge/archive/2015/08/19/microsoft-edge-keeping-up-to-date-with-frameworks-amp-libraries.aspx">Frameworks &amp; Libraries</a> </li>    <li>Browser detection (this post) </li>    <li><a href="https://blogs.msdn.com/b/drougge/archive/2015/08/19/microsoft-edge-keeping-up-to-date-with-css-prefixes.aspx">CSS prefixes</a> </li> </ul>  <h2>Don’t do browser detection</h2>  <p><strong>Browser Detection</strong> is a technique to determine how the webpage should render across many different versions of browsers. In a script this would mean using code like navigator.userAgent to act differently depending on what User Agent string is supplied to the page. Every browser you’re using has a User Agent string that contains information about the browser. Only problem with that “unique” string is that since way back they’ve more or less imitated each other, and today they hold (pretty much) the same information. It is not a reliable way of determining if a feature is supported or not. Simply put – User Agents can’t be trusted.</p>  <h4>Why is it important?</h4>  <p>Your users will get their best experience in their preferred browser. You can spend less time maintaining separate code bases for various modern browsers including Microsoft Edge. </p>  <h4>What will we look for?</h4>  <p>We check if the webpage may be using browser detection techniques to determine how the webpage should render across many different versions of browsers, like <b>browser.userAgent</b>. </p>  <h4>How can you fix it?</h4>  <p>We recommend that instead of browser detection you go with <strong>feature detection</strong> – a practice that first determines if a browser or device supports a specific feature and then chooses the best experience to render based on this information. Feature detection is a great alternative to browser detection and is commonly used via popular JavaScript libraries like <a href="modernizr.com/">Modernizr</a> or through feature detection code. There’s also sites like <a href="caniuse.com/">CanIUse.com</a> that easily lets you check what features are available in what version of what browser.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/6114.clip_image002_thumb_3C3B48E9.jpg" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/6114.clip_5F00_image002_5F00_thumb_5F00_3C3B48E9.jpg"><img title="CanIUse.com - Pointer events?" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="CanIUse.com - Pointer events?" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/5504.clip_image002_thumb_thumb_5E293C1E.jpg" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/5504.clip_5F00_image002_5F00_thumb_5F00_thumb_5F00_5E293C1E.jpg" width="244" height="237" /></a> <a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/8662.clip_image004_thumb2_3AFBD16C.jpg" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/8662.clip_5F00_image004_5F00_thumb2_5F00_3AFBD16C.jpg"><img title="CanIUse.com - Border images?" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="CanIUse.com - Border images?" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/8182.clip_image004_thumb2_thumb_31A29CE9.jpg" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/8182.clip_5F00_image004_5F00_thumb2_5F00_thumb_5F00_31A29CE9.jpg" width="291" height="236" /></a></p>  <h4>Where can you learn more?</h4>  <ul>   <li><a href="blogs.windows.com/msedgedev/2015/06/17/building-a-more-interoperable-web-with-microsoft-edge/">Read more on what’s different about the Microsoft Edge UA string</a> </li>    <li><a href="blogs.windows.com/msedgedev/2015/05/06/a-break-from-the-past-part-2-saying-goodbye-to-activex-vbscript-attachevent/">View list of unsupported features in Microsoft Edge including conditional comments</a> </li>    <li><a href="dev.modern.ie/platform/status/">View list of upcoming web platform status by feature in Microsoft Edge</a> </li>    <li><a href="https://msdn.microsoft.com/en-us/library/hh273396(v=vs.85).aspx">Learn feature detection</a> </li>    <li><a href="modernizr.com/">Implement feature detection with Modernizr</a> </li>    <li><a href="caniuse.com/">Understand what features are available in what browser using CanIUse.com</a> </li>    <li><a href="https://learn.jquery.com/code-organization/feature-browser-detection/">jQuery on Browser Detection (bad) vs Feature Detection (good)</a> </li>    <li><a href="webaim.org/blog/user-agent-string-history/">History of the Browser User Agent string</a> </li> </ul>]]></content:encoded>
    </item>
    <item>
      <title>Microsoft Edge - EdgeHTML interoperability</title>
      <link>https://docs.microsoft.com/archive/blogs/drougge/microsoft-edge-edgehtml-interoperability</link>
      <pubDate>Wed, 19 Aug 2015 02:45:14 GMT</pubDate>
      <dc:creator><![CDATA[Peter Drougge]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/drougge/2015/08/19/microsoft-edge-edgehtml-interoperability/</guid>
      <description><![CDATA[This article is part of a series of posts detailing specific compatibility tollgates for a modern...]]></description>
      <content:encoded><![CDATA[<p>This article is part of a series of posts detailing specific compatibility tollgates for a modern web, and how you can take action to make sure your site works as intended in the world of modern web browsers:</p>  <ul>   <li>EdgeHTML interoperability (this post) </li>    <li><a href="https://blogs.msdn.com/b/drougge/archive/2015/08/19/microsoft-edge-no-more-legacy-plug-ins-and-features.aspx">Legacy plug-ins &amp; features</a> </li>    <li><a href="https://blogs.msdn.com/b/drougge/archive/2015/08/19/microsoft-edge-keeping-up-to-date-with-frameworks-amp-libraries.aspx">Frameworks &amp; Libraries</a> </li>    <li><a href="https://blogs.msdn.com/b/drougge/archive/2015/08/19/microsoft-edge-don-t-do-browser-detection.aspx">Browser detection</a> </li>    <li><a href="https://blogs.msdn.com/b/drougge/archive/2015/08/19/microsoft-edge-keeping-up-to-date-with-css-prefixes.aspx">CSS prefixes</a> </li> </ul>  <h2>EdgeHTML interoperability</h2>  <p>Previously we stood on the barricades proclaiming “adhere to standards!” </p>  <p>That’s still true. Sort of. </p>  <p>Reality though is more “adhere to interoperability”. </p>  <p>The days of quirks mode, compatibility issues or rendering issues should be long gone.    <br />The only thing now standing in the way between a good, universal web and your customers is your own code. </p>  <p>You shouldn’t have to worry about sending your markup in different forms to different browsers – the web should just work and you should only have to send your awesome markup one way.</p>  <h4>Why is it important?</h4>  <p>Your users will get their best experience in their preferred browser. You can spend less time maintaining separate code bases for various modern browsers including Microsoft Edge.</p>  <h4>What will we look for?</h4>  <p>We check if the webpage may include HTML markup that treats Microsoft Edge differently from other modern browsers. </p>  <h4>How can you fix it?</h4>  <p>We recommend your site to send your markup to all modern browsers and then include Microsoft Edge in your test matrix. This will also help you progress towards maintaining one code base in the future.</p>  <h4>Where can you learn more?</h4>  <ul>   <li><a href="https://channel9.msdn.com/Events/WebPlatformSummit/2015/Microsoft-Edge-Introducing-the-new-browser-and-rendering-engine-for-Windows-10">Learn about Microsoft Edge and why it’s different than Internet Explorer 11</a> </li>    <li><a href="https://channel9.msdn.com/Events/WebPlatformSummit/2015/Woah-I-Can-Test-Edge--IE-on-a-Mac--Linux">Learn how to test for Microsoft Edge on Mac, Linux, or Windows</a> </li>    <li><a href="blog.reybango.com/2015/05/13/ngrok-the-tool-that-brings-local-site-testing-to-remoteie/">Learn how to use <b>ngrok</b> to remotely test your local site</a> </li>    <li><a href="https://channel9.msdn.com/Events/WebPlatformSummit/2015">View sessions on the Web Platform and Microsoft Edge from our engineering team</a> </li>    <li><a href="mailto:iepo@microsoft.com">Request that your site be removed from the Compatibility View list upon testing</a> </li> </ul>]]></content:encoded>
    </item>
    <item>
      <title>Why should you care about Microsoft Edge?</title>
      <link>https://docs.microsoft.com/archive/blogs/drougge/why-should-you-care-about-microsoft-edge</link>
      <pubDate>Wed, 19 Aug 2015 02:34:00 GMT</pubDate>
      <dc:creator><![CDATA[Peter Drougge]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/drougge/2015/08/19/why-should-you-care-about-microsoft-edge/</guid>
      <description><![CDATA[This post is a short intro to a 5-part mini-series.
Microsoft Edge is our browser for the new,...]]></description>
      <content:encoded><![CDATA[<p>This post is a short intro to a 5-part mini-series.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/4075.image_164AE35A.png" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/4075.image_5F00_164AE35A.png"><img style="background-image: none; float: right; padding-top: 0px; padding-left: 0px; margin: 0px 0px 12px 12px; display: inline; padding-right: 0px; border-width: 0px;" title="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/0602.image_thumb_5851529B.png" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/0602.image_5F00_thumb_5F00_5851529B.png" alt="image" width="94" height="102" align="right" border="0" /></a><a href="https://www.microsoft.com/microsoft-edge">Microsoft Edge</a> is our browser for the new, modern web built exclusively for Windows 10.</p>
<p>It&rsquo;s engineered to enable you to go beyond browsing the web and to start experiencing a more personal and productive web.</p>
<p>It&rsquo;s not packed with legacy support. Nor will it render your site differently based on some flags. It will however treat your site the way it&rsquo;s meant to &ndash; assuming you&rsquo;ve done your part.</p>
<p>The thing is though &ndash; Edge will be installed on every Windows 10 installation.</p>
<p><strong>Every. Single. One.</strong></p>
<p>Think about it - That&rsquo;s&nbsp;several million installations already, and a lot more adding to those numbers each day.</p>
<p>Edge is not another new version of Internet Explorer. <br />It is something completely different.</p>
<p>It is unique.</p>
<h2>Making sure your website works in Microsoft Edge</h2>
<p>We will try to help you circle some of the common pitfalls we&rsquo;ve identified when it comes to compatibility. We will specifically look at these five issues:</p>
<ul>
<li><a href="https://blogs.msdn.com/b/drougge/archive/2015/08/19/edgehtml-interoperability.aspx">EdgeHTML interoperability</a></li>
<li><a href="https://blogs.msdn.com/b/drougge/archive/2015/08/19/microsoft-edge-no-more-legacy-plug-ins-and-features.aspx">Legacy plug-ins &amp; features</a></li>
<li><a href="https://blogs.msdn.com/b/drougge/archive/2015/08/19/microsoft-edge-keeping-up-to-date-with-frameworks-amp-libraries.aspx">Frameworks &amp; Libraries</a></li>
<li><a href="https://blogs.msdn.com/b/drougge/archive/2015/08/19/microsoft-edge-don-t-do-browser-detection.aspx">Browser detection</a></li>
<li><a href="https://blogs.msdn.com/b/drougge/archive/2015/08/19/microsoft-edge-keeping-up-to-date-with-css-prefixes.aspx">CSS prefixes</a> <!--EndFragment--></li>
</ul>
<p>Each of these posts will contain a Why? What? How? And Where? Section aimed at guiding you in the right direction to fix your website.</p>
<h2>The Compatibility View list</h2>
<p>If, for some reason, we or your users detect and report that your site is not functioning properly in the browser it could end up on the <strong>Compatibility View list</strong> &ndash; basically saying that it&rsquo;s rendering for the not-so-modern web. If this happens to your site but you think that it&rsquo;s incorrect and you wish to be removed from the list, reach out to <a href="mailto:iepo@microsoft.com">iepo@microsoft.com</a>.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/6136.clip_image002_015BF198.jpg" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/6136.clip_5F00_image002_5F00_015BF198.jpg"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="clip_image002" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/4403.clip_image002_thumb_0BAFA6A9.jpg" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/4403.clip_5F00_image002_5F00_thumb_5F00_0BAFA6A9.jpg" alt="clip_image002" width="337" height="137" border="0" /></a></p>
<p>&nbsp;</p>
<h2>Tools made by us, for you to use, at your convenience</h2>
<p>At <a href="dev.modern.ie">dev.modern.ie</a> you&rsquo;ll find useful tools that we&rsquo;ve created for you to make sure your users get the best experience possible when visiting your website from different browsers.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/8154.clip_image004_505ED19B.jpg" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/8154.clip_5F00_image004_5F00_505ED19B.jpg"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="clip_image004" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/72/33/metablogapi/1663.clip_image004_thumb_2D9D99DE.jpg" original-url="blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-72-33-metablogapi/1663.clip_5F00_image004_5F00_thumb_5F00_2D9D99DE.jpg" alt="clip_image004" width="325" height="253" border="0" /></a></p>
<p>Some of the things you can do at dev.modern.ie:</p>
<ul>
<li><a href="dev.modern.ie/tools/">Use VMs, RemoteIE or quickly generate screenshots</a></li>
<li><a href="dev.modern.ie/tools/staticscan/">Use the Quick Site Scan to quickly identify common issues that you can fix.</a></li>
<li><a href="https://github.com/MicrosoftEdge/static-code-scan">Use this open source version of the above Site Scan engine if you want to run the tool yourself or within your own network.</a></li>
</ul>
<p>And, last but not least, check out the recorded sessions from <a href="https://channel9.msdn.com/Events/WebPlatformSummit/2015">Microsoft Edge Web Summit 2015 over at Channel 9</a> for some really interesting insights into Edge.</p>]]></content:encoded>
    </item>
  </channel>
</rss>