<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Michael Entin's notebook</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/michen/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/michen/feed.xml</link>
    <description>Michael Entin&amp;#039;s notebook</description>
    <lastBuildDate>Wed, 17 Apr 2019 03:25:06 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Microsoft &lt;-&gt; Google dictionary</title>
      <link>https://docs.microsoft.com/archive/blogs/michen/microsoft-google-dictionary</link>
      <pubDate>Mon, 30 Jan 2017 23:43:36 GMT</pubDate>
      <dc:creator><![CDATA[Michael Entin]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/michen/?p=23</guid>
      <description><![CDATA[If you know Microspeak, what about a small dictionary -




Microsoft speak
Google...]]></description>
      <content:encoded><![CDATA[If you know <a target="_blank" href="https://blogs.msdn.microsoft.com/oldnewthing/tag/microspeak">Microspeak</a>, what about a small dictionary -<!--more-->

<table class="table-condensed table-striped" border="1" width="90%">
<thead>
<tr>
<th style="text-align: center;width: 25%">Microsoft speak</th>
<th style="text-align: center;width: 25%">Google speak</th>
<th style="text-align: center">Explanation</th>
</tr>
</thead>

<tbody>
<tr>
<td style="text-align: left">By design</td>
<td>WAI 
(Working as intended)</td>
<td>Bug status when the developer considers the behavior described in bug report correct</td>
</tr>

<tr>
<td>Approve</td>
<td>LGTM / SGTM
(looks or seems good to me)</td>
<td>Signals approval of code review and other things</td>
</tr>

<tr>
<td>Review</td>
<td>Perf</td>
<td>Performance review - periodic employee performance evaluation</td>
</tr>

<tr>
<td>Objectives and Goals</td>
<td>OKRs 
(Objective Key results)</td>
<td>Things you plan to accomplish in the next performance review cycle</td>
</tr>

<tr>
<td><a target="_blank" href="https://www.microsoft.com/en-us/research/publication/autopilot-automatic-data-center-management/">Autopilot</a></td>
<td><a target="_blank" href="https://research.google.com/pubs/pub43438.html">Borg</a></td>
<td>Datacenter management software</td>
</tr>

<tr>
<td>Live site</td>
<td>Prod 
(from 'production')</td>
<td>Customer visible service or web site, usually in context of support, monitoring, emergency response, capability planning etc</td>
</tr>

<tr>
<td>Ops 
(Operations)</td>
<td>SRE
(Site Reliability Engineer)</td>
<td>People supporting live site / production service</td>
</tr>
<tr>
<td><a href="https://blogs.msdn.microsoft.com/oldnewthing/20150825-00/?p=91741">DRI</a></td>
<td><a href="https://dictionary.cambridge.org/us/dictionary/english/on-call">oncall</a></td>
<td>Person handling any emergencies today, usually members of a team rotate this duty on schedule</td>
</tr>
<tr>
<td colspan="3">Suggest new topics in comments below</td>
</tr>
</tbody>
</table>]]></content:encoded>
    </item>
    <item>
      <title>Trust Services Lab updated</title>
      <link>https://docs.microsoft.com/archive/blogs/michen/trust-services-lab-updated</link>
      <pubDate>Mon, 09 Jul 2012 18:56:00 GMT</pubDate>
      <dc:creator><![CDATA[Michael Entin]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/michen/2012/07/09/trust-services-lab-updated/</guid>
      <description><![CDATA[Trust Services Lab has been updated...]]></description>
      <content:encoded><![CDATA[<p>Trust Services Lab has been updated today:</p>
<p><a title="Trust Services Lab Page" href="https://www.microsoft.com/en-us/sqlazurelabs/labs/trust-services.aspx" target="_blank">https://www.microsoft.com/en-us/sqlazurelabs/labs/trust-services.aspx</a></p>
<p>The update does not need registration code anymore (ignore "Get Invited" link - it is leftover from previous release and will be removed). Just <a title="https://go.microsoft.com/fwlink/?LinkID=242244" href="https://go.microsoft.com/fwlink/?LinkID=242244" target="_blank">download SDK</a>, visit <a title="https://trustservices2.cloudapp.net/" href="https://trustservices2.cloudapp.net/" target="_blank">the portal</a> to create server, and check the <a title="https://social.technet.microsoft.com/wiki/contents/articles/7041.learn-more-about-microsoft-codename-trust-services.aspx" href="https://social.technet.microsoft.com/wiki/contents/articles/7041.learn-more-about-microsoft-codename-trust-services.aspx" target="_blank">documentation and samples</a>.</p>
<p>&nbsp;</p>
<p>Note that if you are using previous release - the current and previous services are&nbsp;now both alive, as completely independent services. Each is only compatible with appropriate SDK. You cannot get to the previous service using new SDK or vise versa. Please update to the new SDK/service - it offers many new features (and the old service will be disabled some time in future).</p>]]></content:encoded>
    </item>
    <item>
      <title>Microsoft Codename "Trust Services" Lab at RSA</title>
      <link>https://docs.microsoft.com/archive/blogs/michen/microsoft-codename-trust-services-lab-at-rsa</link>
      <pubDate>Mon, 27 Feb 2012 18:33:15 GMT</pubDate>
      <dc:creator><![CDATA[Michael Entin]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/michen/2012/02/27/microsoft-codename-trust-services-lab-at-rsa/</guid>
      <description><![CDATA[We have a Trust Services booth at the RSA conference in San Fancisco - good time to come, learn...]]></description>
      <content:encoded><![CDATA[<p>We have a Trust Services booth at the RSA conference in San Fancisco - good time to come, learn more&nbsp;and see several cool demos.</p>]]></content:encoded>
    </item>
    <item>
      <title>Microsoft Codename "Trust Services" Lab</title>
      <link>https://docs.microsoft.com/archive/blogs/michen/microsoft-codename-trust-services-lab</link>
      <pubDate>Fri, 03 Feb 2012 12:07:00 GMT</pubDate>
      <dc:creator><![CDATA[Michael Entin]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/michen/2012/02/03/microsoft-codename-trust-services-lab/</guid>
      <description><![CDATA[I did not post for a long time, was mostly working on internal and not-yet-released projects.
But...]]></description>
      <content:encoded><![CDATA[<p>I did not post for a long time, was mostly working on internal and not-yet-released projects.</p>
<p>But today the project I've been working recently has shipped our first Lab:</p>
<p><a title="Trust Services Lab" href="https://www.microsoft.com/en-us/sqlazurelabs/labs/trust-services.aspx" target="_blank">Microsoft Codename "Trust Services"</a></p>
<p>Trust and Security have been hot topics for the public cloud since its inception.&nbsp; Corporate IT departments and CIOs have repeatedly expressed concerns over the loss of control associated with moving various levels of sensitive data to a public cloud.&nbsp; At the same time, the overall benefits of a public cloud are tremendous and continue to gain momentum.&nbsp; This means that many organizations have a pressing need to migrate to public cloud infrastructure in spite of ongoing concerns about security.</p>
<p>Encryption is one of the fundamental required tools for protecting data in the cloud.&nbsp;However, when you start encrypting data, you are facing with question how do you manage encryption keys and encryption policies? There are several options (you will probably recognize the products using them):</p>
<ul>
<li>Have keys owned by the cloud as well, but stored separately from data (Server Side Encryption) - this provides a bit of improvement, but not much of a real security</li>
<li>Use&nbsp;a single key that unlocks the data (Simple Encrypting Client) - secure, but not manageable, you have to give the same key to all the parties, have no way to revoke keys when one of the parties leaves, etc</li>
<li>Have an on-premise&nbsp;security middleware&nbsp;- secure, but not very useful, since now all the users (even mobile users) have to go through this middleware - you lose most of the benefits of the cloud, plus have to purchase and maintain on-premises hardware and software</li>
<li>Store keys, authorizations&nbsp;and encryption policies in the cloud, but signed and encrypted with individual keys given to each party - so that&nbsp;each party can locally verify authenticity of the policies and only authorized parties have access to&nbsp;and are able to decrypt the sensitive data</li>
</ul>
<p>You can guess the Trust Services follows the latest approach, and provides a unique combination of end-to-end application level encryption and power of the cloud to roam encryption keys, while leaving the owner in full control of his data. It enables data driven applications to work with sensitive data, securely stored in different cloud-based storages while continuing to maintain control over access to this data.</p>
<p>Today we shipped the service (<a title="the service signup link" href="https://connect.microsoft.com/SQLServer/Survey/Survey.aspx?SurveyID=13835" target="_blank">sign up link)</a>, the <a title="Client SDK download page" href="https://www.microsoft.com/download/en/details.aspx?id=28791" target="_blank">client SDK</a> and <a title="Links to samples code and description" href="https://social.technet.microsoft.com/wiki/contents/articles/7041.learn-more-about-microsoft-codename-trust-services.aspx" target="_blank">four samples of client applications</a> utilizing the service+SDK.</p>
<p>Check out the video at the <a title="Trust Services Lab" href="https://www.microsoft.com/en-us/sqlazurelabs/labs/trust-services.aspx" target="_blank">Trust Services Lab Link</a>, then read more at the <a title="Trust Services TechNet article" href="https://social.technet.microsoft.com/wiki/contents/articles/7041.learn-more-about-microsoft-codename-trust-services.aspx" target="_blank">Trust Services TechNet article</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Computer display size calculator</title>
      <link>https://docs.microsoft.com/archive/blogs/michen/computer-display-size-calculator</link>
      <pubDate>Thu, 07 Jul 2011 00:31:00 GMT</pubDate>
      <dc:creator><![CDATA[Michael Entin]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/michen/2011/07/07/computer-display-size-calculator/</guid>
      <description><![CDATA[Surprisingly, could not find quick tool to compare various screen sizes and resolutions.

It is...]]></description>
      <content:encoded><![CDATA[Surprisingly, could not find quick tool to compare various screen sizes and resolutions.

It is useful to understand why a modern 14 inch display (with 16:9 ratio) is almost a centimeter shorter vertically than older 12 inch (with 4:3 ratio).

So here it is:

<a href="https://mentin.github.io/misc/screen_size.html" rel="noopener" target="_blank">https://mentin.github.io/misc/screen_size.html</a>]]></content:encoded>
    </item>
    <item>
      <title>PowerPivot beginner journey 3</title>
      <link>https://docs.microsoft.com/archive/blogs/michen/powerpivot-beginner-journey-3</link>
      <pubDate>Tue, 15 Feb 2011 15:38:00 GMT</pubDate>
      <dc:creator><![CDATA[Michael Entin]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/michen/2011/02/15/powerpivot-beginner-journey-3/</guid>
      <description><![CDATA[PowerPivot lesson #3 - if the data can't be refreshed, it should be in Excel, or copied to...]]></description>
      <content:encoded><![CDATA[<p>PowerPivot lesson #3 - if the data can't be refreshed, it should be in Excel, or copied to PowerPivot.</p>
<p>I added zip code data from CSV file by loading to PowerPivot, and discarded the CSV since I did not plan to update it. Bad idea. PowerPivot wants to update all data when you do Refresh All, and missing CSV file prevents it from refreshing all other tables too.</p>
<p>What I should have done: load data to my Excel file, then import it to PowerPivot from Excel. Or load data to temporary Excel and copy/paste it to PowerPivot. Later solution is better, since it avoids data duplication.</p>]]></content:encoded>
    </item>
    <item>
      <title>PowerPivot beginner journey 2</title>
      <link>https://docs.microsoft.com/archive/blogs/michen/powerpivot-beginner-journey-2</link>
      <pubDate>Fri, 28 Jan 2011 22:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Michael Entin]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/michen/2011/01/28/powerpivot-beginner-journey-2/</guid>
      <description><![CDATA[I was&nbsp;exploring the data, and&nbsp;found lots of interesting info from my data set. But&nbsp;I...]]></description>
      <content:encoded><![CDATA[<p>I was&nbsp;exploring the data, and&nbsp;found lots of interesting info from my data set. But&nbsp;I could not find how to join some tables in PowerPivot, and after looking at the source data - it turned out&nbsp;my source data used&nbsp;GUID columns, stored as binary, for row IDs&nbsp;- and PowerPivot silently hid it.&nbsp;I would expect it at least show the column and tell me it can't use it. Even better - offer convertion options. But PowerPivot does not even divulge column existense.</p>
<p>The&nbsp;lesson - learn your data <strong>before </strong>importing it to PowerPivot, afterward it might be too late.</p>
<p>The workaround is of course easy - use SQL query rather than table import, but tedious since PowerPivot makes you re-run the wizard for every single table. Here is the query just in case:</p>
<pre class="scroll"><code class="mysql">select *, convert(VARCHAR(40), guid, 1) AS GuidStr from MyTable</code>&nbsp;</pre>
<p>Then I've imported data, added relationships,&nbsp;and started to create calculated columns. One of the DAX expressions got wrong results, and I realized I missed one relationship which would make the expression return correct result. I've tried to add relationship, but PowerPivot did not let me do it, failing with some very obscure error message (An unexpected error occurred, file 'xmvsquery.cpp', line 1739, ...). Only once I've deleted that calculated column, I could create relationship, then add the column back, and finally get the correct results.</p>
<p>Second lesson for me - tell PowerPivot about all the relationships before doing anything with the data.</p>
<p>Overall, I find PowerPivot useful, but such problems make it way less useable as exploratory tool - you've to know all your columns and all your relationships in advance, and tell PowerPivot about everything. If you miss something you might need to go back and start from scratch,&nbsp;e.g. delete a table with all the calculated columns, and re-import it again to get binary column, or delete the calculated columns to be able to define relationships.</p>]]></content:encoded>
    </item>
    <item>
      <title>Undocumented PowerPivot installation requirement</title>
      <link>https://docs.microsoft.com/archive/blogs/michen/undocumented-powerpivot-installation-requirement</link>
      <pubDate>Fri, 28 Jan 2011 02:13:00 GMT</pubDate>
      <dc:creator><![CDATA[Michael Entin]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/michen/2011/01/28/undocumented-powerpivot-installation-requirement/</guid>
      <description><![CDATA[Trying to use PowerPivot, just found undocumented PowerPivot installation requirement: Excel .NET...]]></description>
      <content:encoded><![CDATA[<p>Trying to use PowerPivot, just found undocumented PowerPivot installation requirement: Excel .NET Programmability Support.</p>
<p>If PowerPivot silently fails to load, and in Event Viewer you've got an event like below, run Office Setup / Add or Remove Features, then check .NET Programmability Support under Microsoft Excel.</p>
<p>Here is the event you might find in event viewer:</p>
<p><span lang="EN">
<p>Customization URI: file:///C:/Program Files (x86)/Microsoft Analysis Services/AS Excel Client/10/Microsoft.AnalysisServices.Modeler.FieldList.vsto</p>
<p>Exception: Customization could not be loaded because the application domain could not be created.　</p>
<p>************** Exception Text **************</p>
<p>Microsoft.VisualStudio.Tools.Applications.Runtime.CannotCreateCustomizationDomainException: Customization could not be loaded because the application domain could not be created. ---&gt; System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---&gt; System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.Office.Interop.Excel, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c' or one of its dependencies. The system cannot find the file specified.</p>
<p>File name: 'Microsoft.Office.Interop.Excel, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c'</p>
<p>at Microsoft.AnalysisServices.Modeler.FieldList.ThisAddIn..ctor()</p>
</span></p>]]></content:encoded>
    </item>
    <item>
      <title>Making Asynchronous Programming Easy</title>
      <link>https://docs.microsoft.com/archive/blogs/michen/making-asynchronous-programming-easy</link>
      <pubDate>Sat, 30 Oct 2010 00:30:00 GMT</pubDate>
      <dc:creator><![CDATA[Michael Entin]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/michen/2010/10/30/making-asynchronous-programming-easy/</guid>
      <description><![CDATA[Great post by&nbsp;Somasegar about upcoming&nbsp;language support for async...]]></description>
      <content:encoded><![CDATA[<p>Great post by&nbsp;Somasegar about upcoming&nbsp;language support for async programming:</p>
<p><a href="https://blogs.msdn.com/b/somasegar/archive/2010/10/28/making-asynchronous-programming-easy.aspx">https://blogs.msdn.com/b/somasegar/archive/2010/10/28/making-asynchronous-programming-easy.aspx</a></p>
<p>I guess soon the <a href="https://blogs.msdn.com/b/michen/archive/2006/03/30/using-c-2-0-iterators-to-simplify-writing-asynchronous-code.aspx"><span style="text-decoration: line-through;">idea</span>&nbsp;hack of using C#&nbsp;iterators</a> as poor-man's <a href="https://blogs.msdn.com/b/michen/archive/2006/04/01/using-c-2-0-iterators-to-simplify-writing-asynchronous-code-part-2.aspx">language support</a> (that caused me to start this blog :)) will finally&nbsp;be deprecated.</p>]]></content:encoded>
    </item>
    <item>
      <title>SSIS custom component performance tidbit</title>
      <link>https://docs.microsoft.com/archive/blogs/michen/ssis-custom-component-performance-tidbit</link>
      <pubDate>Mon, 24 May 2010 22:27:00 GMT</pubDate>
      <dc:creator><![CDATA[Michael Entin]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/michen/2010/05/24/ssis-custom-component-performance-tidbit/</guid>
      <description><![CDATA[I was helping a friend of mine to debug performance issue with his SSIS package. The package was...]]></description>
      <content:encoded><![CDATA[<p>I was helping a friend of mine to debug performance issue with his SSIS package. The package was pretty simple &ndash; he needed to read data, <a target="_blank" href="https://en.wikipedia.org/wiki/Shard_(database_architecture)" title="Sharding @ wikipedia">shard</a> it using some partitioning scheme, then insert the results into 8 SQL destinations. The hashing algorithm used for partitioning was rather complex for conditional split, so he created a simple custom transform component that&nbsp;calculates the partition ID and&nbsp;adds it as a new column; the package then used this column in conditional split and finally there were OLEDB destinations for each shard.</p>
<p>But performance was not good &ndash; it took about 10 minutes to push ~32mln rows.</p>
<p>I started with simplest debugging technique &ndash; remove destination to check if it is the cause, then remove conditional split, etc. We quickly found the problem is caused by the custom component. But it is very simple:</p>
<pre>public override void ProcessInput(int inputID, PipelineBuffer buffer)
{
    while( buffer.NextRow() )
    {<br />        byte[] guid = buffer.GetBytes(m_inputColumn);<br />        int partition = Partition(guid);<br />        buffer.SetInt32(m_outputColumn, partition);

        buffer.DirectRow(ComponentMetaData.OutputCollection[0].ID);
    }
}</pre>
<p>Can you guess why is it so slow?</p>
<p>There are many potential inefficiencies here, e.g. due to the buffer API we&rsquo;ve to allocate and copy byte array for every row. But the code that took most of the overall execution time was</p>
<pre>    buffer.DirectRow(ComponentMetaData.OutputCollection[0].ID);</pre>
<p>Why so slow? You see, the PipelineBuffer object is optimized for performance, but ComponentMetaData object and various collections of inputs/outputs/columns/etc are mostly for design time and were not optimized for performance at all. And there is a good reason for this: these collections do not change during runtime, so one should not call them at runtime. So we moved their usage to PreExecute and then used the cached output ID:</p>
<pre>public override void PreExecute ()<br />{<br />    m_outputID = ComponentMetaData.OutputCollection[0].ID;<br />}</pre>
<p>and somewhere in ProcessInput(..) - </p>
<pre>    buffer.DirectRow(m_outputID);</pre>
<p>Actually, this particular component did not need to call DirectRow at all, and using default exclusion group was enough, so we finally removed it. But if you do need to call it &ndash; cache the output ID in advance. Our performance has improved about 20 times by this simple change.</p>]]></content:encoded>
    </item>
  </channel>
</rss>