<?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>Michael Li</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/micl/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/micl/feed.xml</link>
    <description>Would you know my name, if I saw you in heaven......</description>
    <lastBuildDate>Wed, 17 Apr 2019 03:25:15 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>7 tips about building smart contract on NEO</title>
      <link>https://docs.microsoft.com/archive/blogs/micl/7-tips-about-building-smart-contract-on-neo</link>
      <pubDate>Wed, 20 Jun 2018 07:59:28 GMT</pubDate>
      <dc:creator><![CDATA[Michael Lee2]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/micl/?p=295</guid>
      <description><![CDATA[Build your own NEO private chain

The operation of NEO smart contracts is inseparable from the...]]></description>
      <content:encoded><![CDATA[<ol>
 	<li>Build your own NEO private chain</li>
</ol>
The operation of NEO smart contracts is inseparable from the NEO blockchain support. In most cases, smart contracts need to access the underlying NEO storage services through the NEO blockchain. At the same time, when the smart contract is invoked, it needs to make a valid judgment on the information of the call initiator when it is invoked, such as verifying the signature and so on. All of these need to be completed in the NEO blockchain to complete the test.

The cost of deploying smart contracts on the NEO blockchain is very expensive. A simple smart contract deployment costs 500 gas. If you need to access NEO storage services and support dynamic calls for smart contracts, the cost of deploying a smart contract is 1000Gas. Although NEO provides a test network, NEO and Gas of the test network are not easily available. Developers can apply to the NEO organization to get some test networks Gas and NEO for testing. But given the deployment of NEO's smart contracts up to 1000Gas (actually, really functional smart contracts such as ICO contracts must access NEO's underlying storage services). Even if NEO issues 20,000 Gases to developers, developers can only complete the deployment of 20 smart contracts.

Therefore, it is very necessary for developers to deploy a NEO private service on their own. This reliance on 100 million NEO coins and 100 million NEO coins derived from Gas. There is no need to worry about the cost of deploying the smart contract when debugging.

Another advantage of building a NEO private chain for development is that it allows developers to more easily query the transactions that have taken place. If the NEO test chain is used for debugging, each block contains not only the developer's own transaction but also the developer's transaction. Because the NEO test chain is open, all transactions that occur in the test chain are mixed together. As a result, developers find their own transaction information in the block, which increases the difficulty invisibly. Will reduce developers' development efficiency to varying degrees. At the same time, it will also expose the developer's own immature code to the public's field of vision prematurely, which will bring security risks.

NEO has provided documentation to teach users how to deploy a NEO private service. Please refer to:

<span><a href="http://docs.neo.org/en-us/network/private-chain.html">http://docs.neo.org/en-us/network/private-chain.html</a></span>

After the deployment is completed, it is also necessary to expose a node that supports the RPC interface according to the exchange docking process document to provide services to developers. NEO adapting exchange documents please refer to: <span><a href="http://docs.neo.org/en-us/exchange/v2.7.4.html">http://docs.neo.org/en-us/exchange/v2.7.4.html</a></span>
<ol start="2">
 	<li>Avoid using floating point data in smart contracts</li>
</ol>
NEO blockchain natively does not support floating point data. In order to represent a floating-point number, such as NEO's minimum unit of 0.00000001, the actual approach is that NEO will process this data by 10 million times as an integer.

In the NEO virtual machine itself, it does not have a floating point data conversion byte array/byte array conversion floating point data and similar APIs. Therefore, if a floating-point data needs to be saved and read, it is very troublesome to handle it in a smart contract.

The correct approach is to deal with the floating-point data of incoming/outgoing smart contracts, first become an integer to access and calculate, and so on for display, and then back to a floating-point data outside the smart contract.
<ol start="3">
 	<li>Avoid string manipulation in smart contract</li>
</ol>
Since the virtual machine that runs the NEO smart contract does not have an API for handling strings, even for case conversions, the ToString() method is not supported for some other types. If a developer wants to process a string in a smart contract, he or she must read and verify it byte by byte. Even if the string processing is completed, the consumption of Gas will increase and the volume of the smart contract will also increase.

The correct approach is that data needs to handle string data outside smart contracts. For some flags, you can use integers instead of strings. For some smart contract output results, it should also be replaced with an error code. It is better not to transfer strings directly.
<ol start="4">
 	<li>NEO VM does not support exception handling mechanism</li>
</ol>
The execution environment of the NEO smart contract, that is, the NEO virtual machine itself does not support the exception handling mechanism. This means that try-catch segments cannot be used when writing smart contract code. The NEON compiler does not allow such code to generate AVM files by compiling.

Therefore, when writing NEO smart contract code, we must pay special attention to the robustness of the code, do a good job of checking the parameters, and check the return value of the function, and avoid using the exception data to perform the next operation to avoid exceptions. Developers of NEO smart contracts should also not expect to determine the execution path of the code by catching exceptions. This does not work.

The developer of the NEO smart contract should make a parameter check inside the function when writing a function and clearly define the meaning of the return value.

In fact, the other two C# keywords ref and out are not supported. So don't expect a function in a smart contract to return multiple values at once.
<ol start="5">
 	<li>Handle byte stream operations carefully</li>
</ol>
In the NEO virtual machine, the byte[] data is treated as a special data type and is immutable. Once you need to modify the value of a byte in the byte array, you need to regenerate a new byte array object.

In the actual running process, once the code similar to the following is executed, this smart contract call will crash and return directly to "FAULT BREAK".
<table>
<tbody>
<tr>
<td width="553">byte[] byteArray = new byte[]{0x0a, 0x0b, 0x0c, 0x0d};

byteArray[2] = 0x01;</td>
</tr>
</tbody>
</table>
The correct way is to use the Range function to truncate the previously unmodified part of the code. Add the 0x01 to the array through the Concat function, then dock the parts of the original array that do not need to be modified. code show as below:
<table>
<tbody>
<tr>
<td width="553">byte[] byteArray = new byte[]{0x0a, 0x0b, 0x0c, 0x0d};

byte[] temp = byteArray.Range(0, 2);

temp = temp.Concat(new byte[]{0x01});

temp = temp.Concat(byteArray.Range(3, 1));</td>
</tr>
</tbody>
</table>
In addition to this, there is no better way to implement changes to the byte[] element.
<ol start="6">
 	<li>Need to push the stack from right to left when calling multi-parameter smart contract function</li>
</ol>
In the NEO test article (http://docs.neo.org/en-us/sc/quickstart/test.html), examples of how to invoke smart contracts with parameters are given. But that is limited to smart contract functions with a single input parameter. If you need to call smart contract functions with multiple parameters, you need to pay attention to the stacking order of function parameters. For example, the following smart contract function:
<table>
<tbody>
<tr>
<td width="553">bool CallMe(string param1, int param2, bool param3, byte[] param4)</td>
</tr>
</tbody>
</table>
Then when the code is called, the order in which the functions are stacked should be param4, param3, param2, param1. And before the actual call, pass in the packed instruction sb.Emit(Neo.VM.OpCode.PACK); Package all the parameters. Otherwise, the smart contract function call will fail to return "FAULT BREAK" because of the mismatch of the parameter types.
<ol start="7">
 	<li>Using Map class which is in devpack</li>
</ol>
NEO provides developers with a generic container object of type Map&lt;TKey, TValue&gt; in the devpack. Developers can use Map-type objects to store a series of complex data in key-value pairs in the NEO store. Advanced packaging of Storage.Get, Storage.Put, and Storage.Delete methods for the Map type. It is easier and more convenient for developers to use Map objects to manipulate NEO underlying storage than three static methods that use Storage directly.]]></content:encoded>
    </item>
    <item>
      <title>Edge Extension: Create a custom Edge extension</title>
      <link>https://docs.microsoft.com/archive/blogs/micl/edge-extension-create-a-custom-edge-extension</link>
      <pubDate>Sat, 03 Sep 2016 12:15:40 GMT</pubDate>
      <dc:creator><![CDATA[Michael Lee2]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/micl/?p=185</guid>
      <description><![CDATA[Since Windows 10 Anniversary Update has been released, Microsoft Edge has officially support...]]></description>
      <content:encoded><![CDATA[Since Windows 10 Anniversary Update has been released, Microsoft Edge has officially support extension feature. In this blog post, I want to share you my experience about creating custom extension for Edge.
<h4>Objective: Create a custom Edge extension to convert URL to QR code for mobile app sharing.</h4>
In china everyone has a mobile IM application WeChat (looks like WhatsApp), If someone wants to share a web page to others, he usually uses WeChat scan QRCode and then send a message that includes web page link.
<h4>Tools: Visual Studio Code.</h4>
It can be download at: <a href="https://code.visualstudio.com/">https://code.visualstudio.com/</a>. It supports OS X, Linux and Windows. So it means that you can create a custom extension for Edge even you are using Linux.

Now, let getting start......
<h4>Implementation Edge extension</h4>
Step 1. Create a folder on you disk eg. EdgeQRCode, and then open it by Visual Studio Code File-&gt;Open Folder......

Step 2. Create a configuration file manifest.json in EdgeQRCode folder.

You can get a sample file from <a href="https://developer.microsoft.com/en-us/microsoft-edge/platform/documentation/extensions/api-support/supported-manifest-keys/json-manifest-example/">https://developer.microsoft.com/en-us/microsoft-edge/platform/documentation/extensions/api-support/supported-manifest-keys/json-manifest-example/ </a> Yes, it very looks like Mozilla Web extension's configuration file. Actually Edge does not support full JSON schema as Mozilla. The key properties please check https://developer.microsoft.com/en-us/microsoft-edge/platform/documentation/extensions/api-support/supported-manifest-keys/ .  In this case, I removed some keys from sample file like this:

<a href="https://msdnshared.blob.core.windows.net/media/2016/09/31.png"><img width="987" height="752" class="alignnone size-full wp-image-195" alt="3" src="https://msdnshared.blob.core.windows.net/media/2016/09/31.png" /></a>

Since this extension doesn't need running at background I removed background key from sample file. All paths in configuration file are relative path. The root is EdgeQRCode folder.

Step 3. Create a js folder to implement functional of Edge extension.  The jquery.min.js and jquery.qrcode.min.js are downloaded from their official sites. Only index.js is custom code.

<a href="https://msdnshared.blob.core.windows.net/media/2016/09/4.png"><img width="989" height="613" class="alignnone size-full wp-image-205" alt="4" src="https://msdnshared.blob.core.windows.net/media/2016/09/4.png" /></a>

For security reason, extension doesn't allow javascript embedded in html file. So we have to set event binding by addEventLinstener(). We can suppose there is a &lt;div&gt; element which id is 'qrcode' used for display QR code. And other div element with 'title' id used for display page title.

Step 4. Create a index.html file for popup UI that already defined in manifest.json file. It has to claim two &lt;div&gt; elements title and qrcode in HTML body.

<a href="https://msdnshared.blob.core.windows.net/media/2016/09/5.png"><img width="987" height="352" class="alignnone size-full wp-image-215" alt="5" src="https://msdnshared.blob.core.windows.net/media/2016/09/5.png" /></a>

Step 5. <span>Complement</span> <span>the other elements</span> like CSS file and icons.
<h4>Debugging</h4>
Before debugging extension, you have to enable sideloading feature on your Edge. To achieve this please follow section two of below link

<a href="https://developer.microsoft.com/en-us/microsoft-edge/platform/documentation/extensions/troubleshooting/">https://developer.microsoft.com/en-us/microsoft-edge/platform/documentation/extensions/troubleshooting/ </a>

And then open Edge menu-&gt;Extensions-&gt;Load Extension, locate EdgeQRCode folder to load. After loading finished, you have to set "Edge QRCode" on and "Show button next to the address bar" on. like this:

<a href="https://msdnshared.blob.core.windows.net/media/2016/09/21.png"><img width="363" height="617" class="alignnone size-full wp-image-225" alt="2" src="https://msdnshared.blob.core.windows.net/media/2016/09/21.png" /></a>

Debugging popup UI is a little bit specific. You can use ms-browser-extension://[Extension_Id]/index.html to let Edge load your popup UI. The extension id is shown in extension properties UI. In this case the URL should be: ms-browser-extension://EdgeQRCode_08b2vmtxn4krp/index.html

<a href="https://msdnshared.blob.core.windows.net/media/2016/09/6.png"><img width="577" height="389" class="alignnone size-full wp-image-235" alt="6" src="https://msdnshared.blob.core.windows.net/media/2016/09/6.png" /></a>

When html and javascript has been loaded. You can enable Edge debugging tool by press F12.
<h4>Appendix</h4>
The source code can be found here: <a href="https://github.com/micli/EdgeQRCode-Extension">https://github.com/micli/EdgeQRCode-Extension</a>

For more information about web extension, please visit: <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions">https://developer.mozilla.org/en-US/Add-ons/WebExtensions </a>

Edge team wants to compatible Mozilla standard, but there is a gap by now.

If you want to convert an existing Chrome/Firefox extension to Edge, please check: <a href="http://bav0.com/converting-any-chrome-extension-to-edge-in-theory/">http://bav0.com/converting-any-chrome-extension-to-edge-in-theory/</a>

The extension running like this:

<a href="https://msdnshared.blob.core.windows.net/media/2016/09/7.png"><img width="813" height="388" class="alignnone size-full wp-image-245" alt="7" src="https://msdnshared.blob.core.windows.net/media/2016/09/7.png" /></a>

&nbsp;

&nbsp;

&nbsp;

&nbsp;

&nbsp;]]></content:encoded>
    </item>
    <item>
      <title>Is it a security issue on SQL Azure firewall ?</title>
      <link>https://docs.microsoft.com/archive/blogs/micl/is-it-a-security-issue-on-sql-azure-firewall</link>
      <pubDate>Wed, 02 Mar 2016 09:15:37 GMT</pubDate>
      <dc:creator><![CDATA[Michael Lee2]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/micl/?p=122</guid>
      <description><![CDATA[Today I found a terrible fact: Anyone can use Azure PowerShell manipulation SQL Azure firewall...]]></description>
      <content:encoded><![CDATA[Today I found a terrible fact: Anyone can use Azure PowerShell manipulation SQL Azure firewall without Azure login. Today, I wanted to create a firewall exception by PowerShell and I found this blog: http://blogs.msdn.com/b/umits/archive/2012/11/20/windows-azure-sql-database-how-to-manage-your-firewall-rules-with-powershell.aspx

It works fine. But when PowerShell finished, I realized I never did Add-AzureAccount or Login-AzureAccount before. God, It means anyone who knows my SQL Azure Server name can freely CRUD my SQL Azure firewall rules. I can't belive my eyes.  And I signed off my Azure account and did it again. Then I reproduced it. You see I executed Get-AzureSqlDatabaseServerFirewallRule after PowerShell initialized. NO login required.

<a href="https://msdnshared.blob.core.windows.net/media/2016/03/Untitled.png"><img class="alignnone size-medium wp-image-131" src="https://msdnshared.blob.core.windows.net/media/2016/03/Untitled-300x166.png" alt="Untitled" width="300" height="166" /></a>

So I just wondering is it a security issue on SQL Azure firewall?]]></content:encoded>
    </item>
    <item>
      <title>Something I want to share you about beta version UWP exam</title>
      <link>https://docs.microsoft.com/archive/blogs/micl/something-i-want-to-share-you-about-beta-version-uwp-exam</link>
      <pubDate>Thu, 14 Jan 2016 14:09:54 GMT</pubDate>
      <dc:creator><![CDATA[Michael Lee2]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/micl/?p=112</guid>
      <description><![CDATA[I have already taken the beta version of UWP development exams. They are:

70-354 Universal...]]></description>
      <content:encoded><![CDATA[I have already taken the beta version of UWP development exams. They are:

<a href="https://www.microsoft.com/en-us/learning/exam-70-354.aspx">70-354 Universal Windows Platform – App Architecture and UX/UI (beta) </a>

<a href="https://www.microsoft.com/en-us/learning/exam-70-355.aspx">70-355 Universal Windows Platform – App Data, Services, and Coding Patterns (beta)</a>

Due to its very less information for prepare examinations, I want to share some key points about these two exams.

<strong>Summary:</strong>

70-354 has 56 questions, 70-355 has 59 questions. Each exam has 3 case studies. Each case study has 6~7 questions.

The max time of taking each exam is 160 mins.

<strong>Key points of knowledge:</strong>

1. Services in Azure: Mobile Service, OneDrive, API Service

2. Data Binding: Binding path, DataContext, ItemsSource

3. Design Patterns: Dependency Injection, Singleton, Factory, Decorate,Observation

4. OOP: public, private, protected,internal

5.Controls: AppBar,Page,Frame,List control,Splash Screen,TextBox

6.Control Events: LostFocus,PointerExited,PointerMoved,PointerPressed,PointerReleased,Item_Selected,Item_SelectedChanged

7.Data Sync: pull/push data from/to Mobile Service

8.XAML: namespace,VisualStateManager and sub elements,Control Template,Data Template,MediaElement

9.Project structure: App.xaml.cs, package.manifest

10.Source Control: VSO,Git client, branch and merge strategy

11.Sign app or assembly: sn.exe makecert.exe, pfx

12..NET basic: assembly versioning,GAC,assembly binding

13.Security: Role-based security, full trust, PasswordVault, Credential class

14.Testing:Unit Test,Test Manager,Performance Wizard

15.Store: pricing strategy,App validate strategy

16.Background Task: IBackgroundTask,Triggers,Schedule Job(Mobile Service)

17.Notifications: Toast,Tile

18.Cortana: voice commands definition

19. Authentication: Azure AD integration

20. Ink: InkCanvas, How to detect pen device?

That's all my remembered. Enjoy your testing experience!]]></content:encoded>
    </item>
    <item>
      <title>The new Visual Studio 2015 extension for Linux Debug</title>
      <link>https://docs.microsoft.com/archive/blogs/micl/the-new-visual-studio-2015-extension-for-linux-debug</link>
      <pubDate>Mon, 26 Oct 2015 23:15:00 GMT</pubDate>
      <dc:creator><![CDATA[Michael Lee2]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/micl/2015/10/26/the-new-visual-studio-2015-extension-for-linux-debug/</guid>
      <description><![CDATA[Recently, Microsoft Visual Studio team has released a amazing VC++&nbsp;extension to support remote...]]></description>
      <content:encoded><![CDATA[<p>Recently, Microsoft Visual Studio team has released a amazing VC++&nbsp;extension to support remote debugging Linux application by Visual Studio 2015. Using this extension you will have unified debugging&nbsp;experience on Windows, Linux even Android. By this feature, we can debugging a Linux application looks like debugging native app on Windows. The extension can&nbsp;offer developers&nbsp;Quick/Add Watch, Run to cursor,&nbsp; Go into and so on.</p>
<p>Please follow this steps to setup debugging environment:</p>
<p>1. Please install VSLinuxDebugger.visx extension. It can be download from:</p>
<p>https://visualstudiogallery.msdn.microsoft.com/35dbae07-8c1a-4f9d-94b7-bac16cad9c01</p>
<p>2. You need create a Linux physical or virtual machine. I will create a Ubuntu Linux virtual machine on Azure.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/28/8877.CreateLinux.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-28/8877.CreateLinux.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/28/8877.CreateLinux.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-28/8877.CreateLinux.png" alt="" border="0" /></a></p>
<p>3. After Linux virtual machine provisioning, you'd better get PuTTY tool set (PuTTY.zip)&nbsp;from: <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html">http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html</a></p>
<p>It used to connect Linux console via SSH and copy source code file to Linux.</p>
<p>4. On PuTTY folder, please run PUTTYGEN.EXE to generate key for SSH connection.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/28/3073.generatekey.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-28/3073.generatekey.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/28/3073.generatekey.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-28/3073.generatekey.png" alt="" border="0" /></a></p>
<p>&nbsp;Please copy key raw data from&nbsp;TextBox and paste&nbsp;to notepad. And then save public key to file via Save private key button.</p>
<p>5. Please use PuTTY to connect Linux machine by user name and password.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/28/6433.LinuxLogon.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-28/6433.LinuxLogon.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/28/6433.LinuxLogon.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-28/6433.LinuxLogon.png" alt="" border="0" /></a></p>
<p>6. Please run sudo apt-get install gcc g++ nano to install gcc and g++ compiler.</p>
<p>7. Run nano ~/.ssh/authorized_keys to edit SSH connection key file. And then copy key raw data from notepad and paste key raw data to nano editor&nbsp;in one line. At last, press Ctrl + X, Y&nbsp;and Enter to save file.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/28/4442.savekey.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-28/4442.savekey.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/28/4442.savekey.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-28/4442.savekey.png" alt="" border="0" /></a></p>
<p>8. Run mkdir /home/dbg&nbsp;to create a folder named dbg.</p>
<p>9. Run logout to disconnect&nbsp;linux</p>
<p>10. Open Visual Sudio 2015,&nbsp; Select Visual C++ as language, Cross-platform category, Linux Makefile project</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/28/0317.VSPrj.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-28/0317.VSPrj.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/28/0317.VSPrj.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-28/0317.VSPrj.png" alt="" border="0" /></a></p>
<p>11. Open project properties window, Select Debug Tab. And then set below properties:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/28/7384.VSProperties.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-28/7384.VSProperties.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/28/7384.VSProperties.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-28/7384.VSProperties.png" alt="" border="0" /></a></p>
<p>Host Name: $(LinuxHostName)<br />User Name: $(LinuxUsername)<br />Private Key: $(PrivateKey)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The ppk file you saved on step 4.<br />PuTTY Home: $(PuttyHome)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;Please DO NOT use a path with whitespace.<br />Remote Working Directory: $(WorkingDirectory)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /home/dbg<br />Remote Executable Name: $(RemoteExecutable)&nbsp;&nbsp;&nbsp;Whatever you want.</p>
<p>12. After you completed above steps, you can debug your Linux app remotely&nbsp;like a normal VC++ Win32 app on Windows.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/28/5008.final.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-28/5008.final.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/28/5008.final.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-28/5008.final.png" alt="" border="0" /></a></p>
<p>&nbsp;Enjoy!</p>]]></content:encoded>
    </item>
    <item>
      <title>How fast is Microsoft Edge?</title>
      <link>https://docs.microsoft.com/archive/blogs/micl/how-fast-is-microsoft-edge</link>
      <pubDate>Mon, 20 Jul 2015 22:47:00 GMT</pubDate>
      <dc:creator><![CDATA[Michael Lee2]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/micl/2015/07/20/how-fast-is-microsoft-edge/</guid>
      <description><![CDATA[I did some testing between the newest version of Chrome, firefox and Microsoft Edge by Sunspider...]]></description>
      <content:encoded><![CDATA[<span style="font-family: Calibri; font-size: small;">I did some testing between the newest version of Chrome, firefox and Microsoft Edge by Sunspider tool. The Sunspider is a tool focus on testing JavaScript performance for modern web browsers that was created by apple WebKit project. </span><span style="font-family: Calibri; font-size: small;">The less time consumption means the faster Web Browser you have. Here is the testing result:</span>

<span style="font-family: Calibri; font-size: small;">Microsoft Edge(version:20.10240.16384.0):</span>

<span style="font-family: Calibri; font-size: small;">Total:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #888888;"><strong><span style="font-family: Calibri; font-size: small;">256.8ms</span></strong></span><span style="font-family: Calibri; font-size: small;">+/- 5.8%</span>

<span style="font-family: Calibri; font-size: small;">Chrome(version: 43.0.2357.134):</span>

<span style="font-family: Calibri; font-size: small;">Total:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 635.1ms +/- 5.6%</span>

<span style="font-family: Calibri; font-size: small;">Firefox(39.0):</span>

<span style="font-family: Calibri; font-size: small;">Total:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 589.3ms +/- 9.8%</span><span style="font-family: Calibri; font-size: small;">&nbsp;</span>

<span style="font-family: Calibri; font-size: small;">By now, Microsoft Edge is the fastest Web browser! Compare with Chrome, Edge has a significant performance improvement that faster 2.7 times than Chrome:</span>

<span style="font-family: Calibri; font-size: small;">TEST&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; COMPARISON&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DETAILS</span>

<span style="font-family: Calibri; font-size: small;">===============================================================================</span>

<span style="font-family: Calibri; font-size: small;">** TOTAL **:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.47x as fast&nbsp;&nbsp;&nbsp;&nbsp; 635.1ms +/- 5.6%&nbsp;&nbsp;&nbsp; 256.8ms +/- 5.8%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; significant</span>

<span style="font-family: Calibri; font-size: small;">===============================================================================</span>

<span style="font-family: Calibri; font-size: small;">&nbsp; 3d:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.21x as fast&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 98.5ms +/- 11.9%&nbsp;&nbsp;&nbsp; 30.7ms +/- 20.3%&nbsp;&nbsp;&nbsp;&nbsp; significant</span>

<span style="font-family: Calibri; font-size: small;">&nbsp;&nbsp;&nbsp; cube:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.97x as fast&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 26.7ms +/- 27.1%&nbsp;&nbsp;&nbsp;&nbsp; 9.0ms +/- 17.6%&nbsp;&nbsp;&nbsp;&nbsp; significant</span>

<span style="font-family: Calibri; font-size: small;">&nbsp;&nbsp;&nbsp; morph:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 15.9x as fast&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 38.2ms +/- 15.0%&nbsp;&nbsp;&nbsp;&nbsp; 2.4ms +/- 25.1%&nbsp;&nbsp;&nbsp;&nbsp; significant</span>

<span style="font-family: Calibri; font-size: small;">&nbsp;&nbsp;&nbsp; raytrace:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.74x as fast&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 33.6ms +/- 11.6%&nbsp;&nbsp;&nbsp; 19.3ms +/- 27.6%&nbsp;&nbsp;&nbsp;&nbsp; significant</span>

<span style="font-family: Calibri; font-size: small;">&nbsp;</span>

<span style="font-family: Calibri; font-size: small;">&nbsp; access:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.45x as fast&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 39.5ms +/- 16.3%&nbsp;&nbsp;&nbsp; 16.1ms +/- 6.1%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; significant</span>

<span style="font-family: Calibri; font-size: small;">&nbsp;&nbsp;&nbsp; binary-trees:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5.3ms +/- 38.2%&nbsp;&nbsp;&nbsp;&nbsp; 4.2ms +/- 10.8% </span>

<span style="font-family: Calibri; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;fannkuch:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.55x as fast&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 18.8ms +/- 14.4%&nbsp;&nbsp;&nbsp;&nbsp; 5.3ms +/- 14.3% &nbsp;&nbsp;&nbsp;&nbsp;significant</span>

<span style="font-family: Calibri; font-size: small;">&nbsp;&nbsp;&nbsp; nbody:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.33x as fast&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9.8ms +/- 35.9%&nbsp;&nbsp;&nbsp;&nbsp; 4.2ms +/- 10.8%&nbsp;&nbsp;&nbsp;&nbsp; significant</span>

<span style="font-family: Calibri; font-size: small;">&nbsp;&nbsp;&nbsp; nsieve:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.33x as fast&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5.6ms +/- 23.5%&nbsp;&nbsp;&nbsp;&nbsp; 2.4ms +/- 20.8%&nbsp;&nbsp;&nbsp;&nbsp; significant</span>

<span style="font-family: Calibri; font-size: small;">&nbsp;</span>

<span style="font-family: Calibri; font-size: small;">&nbsp; bitops:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.01x as fast&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 33.9ms +/- 14.6%&nbsp;&nbsp;&nbsp; 16.9ms +/- 13.9%&nbsp;&nbsp;&nbsp;&nbsp; significant</span>

<span style="font-family: Calibri; font-size: small;">&nbsp;&nbsp;&nbsp; 3bit-bits-in-byte: 4.67x as fast&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.2ms +/- 15.6%&nbsp;&nbsp;&nbsp;&nbsp; 0.9ms +/- 45.1%&nbsp;&nbsp;&nbsp;&nbsp; significant</span>

<span style="font-family: Calibri; font-size: small;">&nbsp;&nbsp;&nbsp; bits-in-byte:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.32x as fast&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10.8ms +/- 28.6%&nbsp;&nbsp;&nbsp;&nbsp; 2.5ms +/- 33.7%&nbsp;&nbsp;&nbsp;&nbsp; significant</span>

<span style="font-family: Calibri; font-size: small;">&nbsp;&nbsp;&nbsp; bitwise-and:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ??&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6.9ms +/- 17.9%&nbsp;&nbsp;&nbsp;&nbsp; 8.4ms +/- 21.3%&nbsp;&nbsp;&nbsp;&nbsp; not conclusive: might be *1.22x as slow*</span>

<span style="font-family: Calibri; font-size: small;">&nbsp;&nbsp;&nbsp; nsieve-bits:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.35x as fast&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 12.0ms +/- 20.8%&nbsp;&nbsp;&nbsp;&nbsp; 5.1ms +/- 19.2%&nbsp;&nbsp;&nbsp;&nbsp; significant</span>

<span style="font-family: Calibri; font-size: small;">&nbsp;</span>

<span style="font-family: Calibri; font-size: small;">&nbsp; controlflow:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.50x as fast&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8.5ms +/- 31.0%&nbsp;&nbsp;&nbsp;&nbsp; 3.4ms +/- 10.9%&nbsp;&nbsp;&nbsp;&nbsp; significant</span>

<span style="font-family: Calibri; font-size: small;">&nbsp;&nbsp;&nbsp; recursive:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.50x as fast&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8.5ms +/- 31.0%&nbsp;&nbsp;&nbsp;&nbsp; 3.4ms +/- 10.9%&nbsp;&nbsp;&nbsp;&nbsp; significant</span>

<span style="font-family: Calibri; font-size: small;">&nbsp;</span>

<span style="font-family: Calibri; font-size: small;">&nbsp; crypto:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.55x as fast&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 55.0ms +/- 18.5%&nbsp;&nbsp;&nbsp; 15.5ms +/- 26.0%&nbsp;&nbsp;&nbsp;&nbsp; significant</span>

<span style="font-family: Calibri; font-size: small;">&nbsp;&nbsp;&nbsp; aes:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.39x as fast&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 19.1ms +/- 27.2%&nbsp;&nbsp;&nbsp;&nbsp; 8.0ms +/- 25.6%&nbsp;&nbsp;&nbsp;&nbsp; significant</span>

<span style="font-family: Calibri; font-size: small;">&nbsp;&nbsp;&nbsp; md5:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.67x as fast&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 17.1ms +/- 28.9%&nbsp;&nbsp;&nbsp;&nbsp; 6.4ms +/- 39.1%&nbsp;&nbsp;&nbsp;&nbsp; significant</span>

<span style="font-family: Calibri; font-size: small;">&nbsp;&nbsp;&nbsp; sha1:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 17.1x as fast&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 18.8ms +/- 22.7%&nbsp;&nbsp;&nbsp;&nbsp; 1.1ms +/- 36.9%&nbsp;&nbsp;&nbsp;&nbsp; significant</span>

<span style="font-family: Calibri; font-size: small;">&nbsp;</span>

<span style="font-family: Calibri; font-size: small;">&nbsp; date:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 52.2ms +/- 17.8%&nbsp;&nbsp;&nbsp; 43.8ms +/- 5.4%&nbsp; </span>

<span style="font-family: Calibri; font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;format-tofte:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.70x as fast&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 26.2ms +/- 25.9%&nbsp;&nbsp;&nbsp; 15.4ms +/- 9.6%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; significant</span>

<span style="font-family: Calibri; font-size: small;">&nbsp;&nbsp;&nbsp; format-xparb:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ??&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;26.0ms +/- 14.5%&nbsp;&nbsp;&nbsp; 28.4ms +/- 5.3%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; not conclusive: might be *1.092x as slow*</span>

<span style="font-family: Calibri; font-size: small;">&nbsp;</span>

<span style="font-family: Calibri; font-size: small;">&nbsp; math:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.10x as fast&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 68.1ms +/- 14.1%&nbsp;&nbsp;&nbsp; 16.6ms +/- 5.8%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; significant</span>

<span style="font-family: Calibri; font-size: small;">&nbsp;&nbsp;&nbsp; cordic:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.44x as fast&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 16.0ms +/- 26.1%&nbsp;&nbsp;&nbsp;&nbsp; 3.6ms +/- 19.2%&nbsp;&nbsp;&nbsp;&nbsp; significant</span>

<span style="font-family: Calibri; font-size: small;">&nbsp;&nbsp;&nbsp; partial-sums:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.43x as fast&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 41.2ms +/- 14.0%&nbsp;&nbsp;&nbsp; 12.0ms +/- 7.9%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; significant</span>

<span style="font-family: Calibri; font-size: small;">&nbsp;&nbsp;&nbsp; spectral-norm:&nbsp;&nbsp;&nbsp;&nbsp; 10.9x as fast&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10.9ms +/- 30.2%&nbsp;&nbsp;&nbsp;&nbsp; 1.0ms +/- 0.0%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; significant</span>

<span style="font-family: Calibri; font-size: small;">&nbsp;</span>

<span style="font-family: Calibri; font-size: small;">&nbsp; regexp:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.63x as fast&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 18.8ms +/- 15.3%&nbsp;&nbsp;&nbsp; 11.5ms +/- 20.6%&nbsp;&nbsp;&nbsp;&nbsp; significant</span>

<span style="font-family: Calibri; font-size: small;">&nbsp;&nbsp;&nbsp; dna:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.63x as fast&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 18.8ms +/- 15.3%&nbsp;&nbsp;&nbsp; 11.5ms +/- 20.6%&nbsp;&nbsp;&nbsp;&nbsp; significant</span>

<span style="font-family: Calibri; font-size: small;">&nbsp;</span>

<span style="font-family: Calibri; font-size: small;">&nbsp; string:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.55x as fast&nbsp;&nbsp;&nbsp;&nbsp; 260.6ms +/- 8.0%&nbsp;&nbsp;&nbsp; 102.3ms +/- 5.5%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; significant</span>

<span style="font-family: Calibri; font-size: small;">&nbsp;&nbsp; &nbsp;base64:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.86x as fast&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 16.6ms +/- 14.2%&nbsp;&nbsp;&nbsp;&nbsp; 4.3ms +/- 34.2%&nbsp;&nbsp;&nbsp;&nbsp; significant</span>

<span style="font-family: Calibri; font-size: small;">&nbsp;&nbsp;&nbsp; fasta:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.57x as fast&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 53.2ms +/- 10.9%&nbsp;&nbsp;&nbsp; 14.9ms +/- 9.4%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; significant</span>

<span style="font-family: Calibri; font-size: small;">&nbsp;&nbsp;&nbsp; tagcloud:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.91x as fast&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 74.5ms +/- 13.2%&nbsp;&nbsp;&nbsp; 39.1ms +/- 5.4%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; significant</span>

<span style="font-family: Calibri; font-size: small;">&nbsp;&nbsp;&nbsp; unpack-code:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.37x as fast&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 74.5ms +/- 9.8%&nbsp;&nbsp;&nbsp;&nbsp; 31.5ms +/- 11.2%&nbsp;&nbsp;&nbsp;&nbsp; significant</span>

<span style="font-family: Calibri; font-size: small;">&nbsp;&nbsp;&nbsp; validate-input:&nbsp;&nbsp;&nbsp; 3.34x as fast&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 41.8ms +/- 17.8%&nbsp;&nbsp;&nbsp; 12.5ms +/- 6.2%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; significant</span>

<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>]]></content:encoded>
    </item>
    <item>
      <title>DevOps for Azure Cloud Service</title>
      <link>https://docs.microsoft.com/archive/blogs/micl/devops-for-azure-cloud-service</link>
      <pubDate>Fri, 10 Jul 2015 00:56:00 GMT</pubDate>
      <dc:creator><![CDATA[Michael Lee2]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/micl/2015/07/10/devops-for-azure-cloud-service/</guid>
      <description><![CDATA[Wanna implement DevOps process on Azure Cloud Service?&nbsp; I created a document can help you...]]></description>
      <content:encoded><![CDATA[Wanna implement DevOps process on Azure Cloud Service?&nbsp; I created a document can help you resolve related issues on Cloud Service. I really hope it can help more and more Azure IT Professionals. The download link is <a href="https://micl.blob.core.windows.net/docs/DevOps%20for%20Azure%20Cloud%20Serice.docx">HERE</a>.<p>1.&nbsp;Overview<br>1.1&nbsp;What&rsquo;s DevOps?<br>1.2&nbsp;Why Choose Azure Cloud Service?<br>2.&nbsp;Deploy Web application to Cloud Service<br>2.1 &nbsp;Create a Cloud Service Project in Visual Studio<br>2.2 &nbsp;Build deploy package<br>3.&nbsp;Implement Scale computing on Cloud Service<br>3.1 &nbsp;Scale computing on Cloud Service<br>3.2 &nbsp;Planning scale computing under Cloud Service<br>3.3 &nbsp;Cloud Service scaling settings<br>4.&nbsp;Implement Staging/Production Switch<br>4.1 &nbsp;What&rsquo;s is Staging Environment?<br>4.2 &nbsp;Switch Staging deployment to Production<br>5.&nbsp;Monitoring Web Application<br>5.1&nbsp;The real time monitoring<br>5.2&nbsp;The Diagnostics data<br>5.3 &nbsp;Configure Cloud Service to output log files<br>5.4 &nbsp;Collecting log files from Cloud Service<br>5.5 &nbsp;Add the AzureLogCollector as a VM Extension<br>5.6 &nbsp;Analysis Cloud Service log files with tools<br>5.6.1 &nbsp;Retrieve unhandled exceptions from Windows application log<br>5.6.2 &nbsp;Retrieve the slowest web pages from IIS log<br>5.6.3 &nbsp;Analysis crash dump by DebugDiag<br>6.&nbsp;Conclusions</p>]]></content:encoded>
    </item>
    <item>
      <title>The AzureLogCollector extension cannot be deleted?</title>
      <link>https://docs.microsoft.com/archive/blogs/micl/the-azurelogcollector-extension-cannot-be-deleted</link>
      <pubDate>Wed, 08 Jul 2015 04:44:18 GMT</pubDate>
      <dc:creator><![CDATA[Michael Lee2]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/micl/2015/07/08/the-azurelogcollector-extension-cannot-be-deleted/</guid>
      <description><![CDATA[Recently I got a interesting case when I want to collect log files from a Azure Cloud Service. As...]]></description>
      <content:encoded><![CDATA[<p>Recently I got a interesting case when I want to collect log files from a Azure Cloud Service. As you know, I use Set-AzureServiceExtension Cmdlet to enable AzureLogCollector retrieve diagnostics log files from VM instance. For details you can visit:</p>
<p><a href="http://azure.microsoft.com/blog/2015/03/09/simplifying-virtual-machine-troubleshooting-using-azure-log-collector/">http://azure.microsoft.com/blog/2015/03/09/simplifying-virtual-machine-troubleshooting-using-azure-log-collector/</a></p>
<p>And then&nbsp;I want to disable AzureLogCollector extension after&nbsp;I had got log files from Azure Storage. Unfortunatly, It seems I cannot disable this extension. PowerShell like this:</p>
<pre class="scroll"><code class="mysql"># First time, I list all service extension in specified Cloud Service<br /> PS &gt; Get-AzureServiceExtension -ServiceName "devopssample" -Slot Staging<br /> <br /> Role : DevOpsWebSite<br /> Extension : AzureLogCollector<br /> ProviderNameSpace : Microsoft.WindowsAzure.Compute<br /> Version : 1.0<br /> Id : Default-AzureLogCollector-Staging-Ext-0<br /> PublicConfiguration : {<br /> "Instances": "*",<br /> "Mode": "Full",<br /> "SasUri": "################################"<br /> }<br /> OperationDescription : Get-AzureServiceExtension<br /> OperationId : b7c4c5e1-4f90-b07c-9524-97e74d1a06d5<br /> OperationStatus : Succeeded<br /> <br /> #Now I am going to remove AzureLogCollector by Remove-AzureServiceExtension. And it seems succeed.<br /> PS &gt; Remove-AzureServiceExtension -ServiceName "DevOpsSample" -Role "DevOpsWebSite" -Slot Staging -ProviderNamespace "Microsoft.WindowsAzure.Compute" -ExtensionName "AzureLogCollector"<br /> Warning: Removing AzureLogCollector configuration for DevOpsWebSite from Cloud Service DevOpsSample.<br /> <br /> OperationDescription OperationId OperationStatus <br /> -------------------- ----------- --------------- <br /> Remove-AzureServiceExtension 99d1c589-3b60-b88b-b390-ee90a0459d43 Succeeded <br /> <br /> <br /> #After Remove extension succeed. The extension still working.<br /> PS &gt; Get-AzureServiceExtension -ServiceName "devopssample" -Slot Staging<br /> <br /> Role : DevOpsWebSite<br /> Extension : AzureLogCollector<br /> ProviderNameSpace : Microsoft.WindowsAzure.Compute<br /> Version : 1.0<br /> Id : Default-AzureLogCollector-Staging-Ext-0<br /> PublicConfiguration : {<br /> "Instances": "*",<br /> "Mode": "Full",<br /> "SasUri": "####################################"<br /> }<br /> OperationDescription : Get-AzureServiceExtension<br /> OperationId : 488b5e87-a7c1-b9b5-a44b-2b7449a9ade0<br /> OperationStatus : Succeeded</code></pre>
<p>&nbsp;</p>
<p>Does any guy know why?</p>]]></content:encoded>
    </item>
    <item>
      <title>A way to retrieve SQL statement from SharePoint native call stack</title>
      <link>https://docs.microsoft.com/archive/blogs/micl/a-way-to-retrieve-sql-statement-from-sharepoint-native-call-stack</link>
      <pubDate>Thu, 13 Nov 2014 23:27:01 GMT</pubDate>
      <dc:creator><![CDATA[Michael Lee2]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/micl/2014/11/13/a-way-to-retrieve-sql-statement-from-sharepoint-native-call-stack/</guid>
      <description><![CDATA[In some situations of SharePoint slow is caused by SQL SERVER or poor SQL statements. To resolve...]]></description>
      <content:encoded><![CDATA[<p>In some situations of SharePoint slow is caused by SQL SERVER or poor SQL statements. To resolve issue, we usually catch a hang dump and figure out what exactly SharePoint doing at that hanging moment. If the performance issue caused by customized code. There are too much easy way to display SharePoint callstack like !clrstack/!dumpstack etc in windbg.&nbsp;Another way is that&nbsp;you can analysis automatically hang dump by <a href="http://www.microsoft.com/en-us/download/details.aspx?id=42933">DebugDiag 2.0</a>&nbsp;If you want to enum all SQL statements from hang dump, you can also execute windbg command like this:</p>
<pre class="scroll"><code class="cplusplus">.foreach(s {!dumpheap -type System.Data.SqlClient.SqlCommand<br /> -short}){r $t1 = poi(${s}+20);!do -nofields $t1;}</code></pre>
<p>&nbsp;</p>
<p>All of above ways are dedicated on managed callstack in SharePoint. As we know, SharePoint service has some COM objects. That's why we have to dispose some SharePoint objects after using. Inappropriate using SharePoint objects would cause memory leak and let your SharePoint site slowly down. For more information please visit: <a href="http://msdn.microsoft.com/en-us/library/office/ee557362(v=office.14).aspx">http://msdn.microsoft.com/en-us/library/office/ee557362(v=office.14).aspx</a></p>
<p>Meanwhile these COM object in SharePoint also access database by OLE DB. We usually can get callstack from SharePoint hang dump like this:</p>
<pre class="scroll"><code class="cplusplus"><br /> 0:035&gt; kpM<br />&nbsp;# Child-SP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RetAddr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call Site<br />00 00000000`0e8a9f28 000007ff`76f15280 ntdll!NtWaitForSingleObject+0xa<br />01 00000000`0e8a9f30 000007ff`7705173e mswsock!WSPRecv+0x66b<br /><span style="color: #ff0000;"><strong>02 00000000`0e8aa070 000007ff`76ff3518 ws2_32!WSARecv+0x166</strong></span><br /><span style="color: #ff0000;"><strong>03 00000000`0e8aa120 000007ff`72729c0e wsock32!recv+0x38</strong></span><br /><span style="color: #ff0000;"><strong>04 00000000`0e8aa180 000007ff`60761ae7 dbnetlib!ConnectionRead+0x4fe</strong></span><br /><span style="color: #ff0000;"><strong>05 00000000`0e8aa260 000007ff`60762f2d sqloledb!CDataSource::ConnectionTransact+0xf7</strong></span><br /><span style="color: #ff0000;"><strong>06 00000000`0e8aa2e0 000007ff`607bac34 sqloledb!CDBConnection::SendPacket+0x25d</strong></span><br /><span style="color: #ff0000;"><strong>07 00000000`0e8aa3a0 000007ff`60754b69 sqloledb!CStmt::SQLExecRPC+0x4d4</strong></span><br /><span style="color: #ff0000;"><strong>08 00000000`0e8aa4b0 000007ff`60755df3 sqloledb!CCommand::ExecuteHelper+0x2a9</strong></span><br /><span style="color: #ff0000;"><strong>09 00000000`0e8aa550 000007ff`60756cc7 sqloledb!CCommand::Execute+0xc73</strong></span><br />0a 00000000`0e8aa640 000007ff`63f3e4cc sqloledb!CImpICommandText::Execute+0x187<br />0b 00000000`0e8aa6c0 000007ff`63f3f65b oledb32!CCommandText::DoExecute+0x4fc<br />0c 00000000`0e8aa900 00000000`108159ca oledb32!CCommandText::Execute+0x8ab<br />0d 00000000`0e8aabb0 00000000`3561ccb1 STSWEL!Voledb::ExecQuery+0x37e<br />0e 00000000`0e8aad10 00000000`3561dbee OWSSVR!GetExtensionVersion+0x62c5<br />0f 00000000`0e8ad5c0 00000000`35622540 OWSSVR!GetExtensionVersion+0x7202<br />10 00000000`0e8ad650 00000000`35650e0a OWSSVR!GetExtensionVersion+0xbb54<br />11 00000000`0e8adda0 00000642`7f600887 OWSSVR!GetExtensionVersion+0x3a41e<br /><br /> </code></pre>
<p>In this case you should watch this line: <strong>sqloledb!CStmt::SQLExecRPC. </strong></p>
<pre class="scroll"><code class="cplusplus">0:035&gt; .frame /r 7 <br /> 07 00000000`0e8aa3a0 000007ff`60754b69 sqloledb!CStmt::SQLExecRPC+0x4d4<br /> rax=0000000000000105 rbx=0000000010a311f0 rcx=0000000000000000<br /> rdx=000000000ddcac78 rsi=0000000000000000 rdi=00000000173c5be0<br /> rip=000007ff607bac34 rsp=000000000e8aa3a0 rbp=0000000010a22e30<br /> r8=000000000ddcac7e r9=000000ffffffffff r10=0000000000000000<br /> r11=0000000000000139 r12=00000000ffffffff r13=000000000e8aa5b8<br /> r14=0000000000000045 r15=<strong><span style="color: #ff0000;">00000000173cd390</span></strong><br /> iopl=0 nv up ei ng nz na pe cy<br /> cs=0033 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000283<br /> sqloledb!CStmt::SQLExecRPC+0x4d4:<br /> 000007ff`607bac34 83f8ff cmp eax,0FFFFFFFFh<br /> </code></pre>
<p>The address of SQL statement&nbsp;is located in register 15.</p>
<pre class="scroll"><code class="cplusplus">0:035&gt; du <strong><span style="color: #ff0000;">00000000173cd390</span></strong><br /> 00000000`173cd390 "{?=call proc_GetTpWebMetaDataAnd"<br /> 00000000`173cd3d0 "ListMetaData(?,NULL,?,NULL,1,?,?"<br /> 00000000`173cd410 ",18)}."<br /> </code></pre>
<p>Hope it would be useful :)</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Migrating IIS 6.0 Web Application to New Version Guidance</title>
      <link>https://docs.microsoft.com/archive/blogs/micl/migrating-iis-6-0-web-application-to-new-version-guidance</link>
      <pubDate>Thu, 17 Jul 2014 06:47:00 GMT</pubDate>
      <dc:creator><![CDATA[Michael Lee2]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/micl/2014/07/17/migrating-iis-6-0-web-application-to-new-version-guidance/</guid>
      <description><![CDATA[The date of ending support Windows Server 2003 is approaching. Recently many customers want to...]]></description>
      <content:encoded><![CDATA[<p>The date of ending support Windows Server 2003 is approaching. Recently many customers want to migrate their old web application to new version of Windows Server. There is a significant difference between IIS 6.0 and IIS 7.x and 8.x. Migrate web application to new Windows not only means upgrade Windows but also means migrate web app from 32 bit to 64 bit, account type changes, change classic pipeline to integrated pipeline and so on. It seems a little bit complicated. I created a IIS migrate guidance that based on my work experience of recent years. Hopefully it can help engineers who want to migrate their web application to new version of IIS.</p>
<p>You can download from <a title="Migrating IIS 6.0 Web Application to New Version Guidance" href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/60/28/0451.Migrating%20IIS%206.0%20Web%20Application%20to%20New%20Version%20Guidance.pdf" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-60-28/0451.Migrating-IIS-6.0-Web-Application-to-New-Version-Guidance.pdf">HERE</a></p>
<p><br />&nbsp;</p>]]></content:encoded>
    </item>
  </channel>
</rss>