<?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>Eric Lee - A Humble Blog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/ericlee/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/ericlee/feed.xml</link>
    <description>All things Visual Studio Team System and Team Foundation Server</description>
    <lastBuildDate>Wed, 17 Apr 2019 03:20:30 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>My blog has moved</title>
      <link>https://docs.microsoft.com/archive/blogs/ericlee/my-blog-has-moved</link>
      <pubDate>Tue, 02 Jan 2007 16:26:00 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ericlee/2007/01/02/my-blog-has-moved/</guid>
      <description><![CDATA[Hey guys,
To better coincide with my company, my blog has moved to...]]></description>
      <content:encoded><![CDATA[<P>Hey guys,</P>
<P>To better coincide with my company, my blog has moved to <A href="https://blogs.counterpunchsoftware.com/">https://blogs.counterpunchsoftware.com</A>; I hope to see you at that new location!</P>
<P>Thanks,</P>
<P>Eric.</P>]]></content:encoded>
    </item>
    <item>
      <title>Apologies, forgot to include a file in my Hemi distribution</title>
      <link>https://docs.microsoft.com/archive/blogs/ericlee/apologies-forgot-to-include-a-file-in-my-hemi-distribution</link>
      <pubDate>Mon, 20 Nov 2006 14:56:27 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ericlee/2006/11/20/apologies-forgot-to-include-a-file-in-my-hemi-distribution/</guid>
      <description><![CDATA[Hey guys,
Sorry, in my Hemi tool, I&rsquo;m using a 3rd party control from Component One.&nbsp; I...]]></description>
      <content:encoded><![CDATA[<p>Hey guys,</p>
<p>Sorry, in my Hemi tool, I&rsquo;m using a 3rd party control from Component One.&nbsp; I have a license for their tools and they allow redistribution.&nbsp; The file you need is located here: <a href="https://www.counterpunchsoftware.com/downloads/C1.Win.C1FlexGrid.2.zip">C1.Win.C1FlexGrid.2.zip</a>.</p>
<p>Thanks to Grant for spotting this so quickly.</p>
<p>Eric.<br /></p>]]></content:encoded>
    </item>
    <item>
      <title>Work Item Moving Tool is back!</title>
      <link>https://docs.microsoft.com/archive/blogs/ericlee/work-item-moving-tool-is-back</link>
      <pubDate>Mon, 20 Nov 2006 04:35:45 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ericlee/2006/11/20/work-item-moving-tool-is-back/</guid>
      <description><![CDATA[Hey guys, I've finally had a chance to update my work item moving tool to work with the RTM release...]]></description>
      <content:encoded><![CDATA[<p>Hey guys, I've finally had a chance to update my work item moving tool to work with the RTM release of Team Foundation Server. Along the way, I made some modifications and changes that I've wanted to do for a while. I haven't thought of a better name than 'work item mover' so for now I've code-named it if you will 'Hemi'. </p>
<p>I&rsquo;ve posted the tool to:&nbsp;<a href="https://www.counterpunchsoftware.com/downloads/hemi.release.zip">https://www.counterpunchsoftware.com/downloads/hemi.release.zip</a>.&nbsp; You&rsquo;ll also need: <a href="https://www.counterpunchsoftware.com/downloads/C1.Win.C1FlexGrid.2.zip">C1.Win.C1FlexGrid.2.zip</a>. </p>
<p>I included the Team Foundation Server binaries that it depends on, but the best way to run the tool is just to run Hemi.exe from the Visual Studio Tools Command Prompt.</p>
<p><img alt="Hemi" src="https://www.london54.com/blog_images/hemi.png" border="0" /></p>
<p>Hemi starts up and looks as follows:</p>
<p><a href="https://www.london54.com/blog_images/hemi1.png"><img alt="Hemi1" src="https://www.london54.com/blog_images/hemi1_thumb.jpg" border="0" /></a></p>
<p>I&rsquo;m thinking about using a MDI type of interface in the future; that would enable you to save and re-run moves that you might do on a regular basis.&nbsp; </p>
<p>To start moving work items, the first thing to do is use the File menu&hellip;</p>
<p><img alt="Hemi2" src="https://www.london54.com/blog_images/hemi2.png" border="0" /></p>
<p>This starts the various stages involved in moving work items from one team project to another.&nbsp; </p>
<p><a href="https://www.london54.com/blog_images/hemi3.png"><img alt="Hemi3" src="https://www.london54.com/blog_images/hemi3_thumb.jpg" border="0" /></a></p>
<p>The first thing to do is pick the Team Foundation Server that you want to access.</p>
<p><img alt="Hemi3a" src="https://www.london54.com/blog_images/hemi3a.png" border="0" /></p>
<p>Depending on the authentication that you are using, you may get prompted for credentials.&nbsp; Once you&rsquo;ve chosen a Team Foundation Server, the next step is to select the work items that you want to move.&nbsp; This is done by selecting a Team Foundation Server Query.</p>
<p><img alt="Hemi5" src="https://www.london54.com/blog_images/hemi5.png" border="0" /></p>
<p>Pressing this button will bring up the same work item query control that is used in the Excel integration.&nbsp; </p>
<p><img alt="Hemi6" src="https://www.london54.com/blog_images/hemi6.png" border="0" /></p>
<p>Once you select a query, press the Find button on this dialog to bring up the actual work items.&nbsp; Press OK and you&rsquo;ve established the work items that you are going to move.&nbsp; Now select the Team Project to move these work items to.</p>
<p><img alt="Hemi7" src="https://www.london54.com/blog_images/hemi7.png" border="0" /></p>
<p>Once you&rsquo;ve done that, press Next to move on to the next stage.</p>
<p><img alt="Hemi8" src="https://www.london54.com/blog_images/hemi8.png" border="0" /></p>
<p>Any query that you might use might encompass a few different work item types, so in this stage, you&rsquo;ll decide how to map those work item types to the Team Project you are moving the work items to.&nbsp; In most cases, you&rsquo;ll probably move the work items to the same type in the other Team Project.&nbsp; </p>
<p><img alt="Hemi9" src="https://www.london54.com/blog_images/hemi9.png" border="0" /></p>
<p>But, sometimes work item types are defined differently.&nbsp; For example, in a CMMI project, a bug is defined with two required fields &ndash; Symptoms and Steps to Reproduce.&nbsp; These fields aren&rsquo;t required in an Agile project.&nbsp; So, this stage also gives you the chance to fill these missing values in.&nbsp; Press the Check for Missing Values to see what these missing values are.</p>
<p><img alt="Hemi10" src="https://www.london54.com/blog_images/hemi10.png" border="0" /></p>
<p>If there are any, enter values into the table.</p>
<p><img alt="Hemi12" src="https://www.london54.com/blog_images/hemi12.png" border="0" /></p>
<p>Press Next to move on to the next stage and actually move your work items.</p>
<p><a href="https://www.london54.com/blog_images/hemi13.png"><img alt="Hemi13" src="https://www.london54.com/blog_images/hemi13_thumb.jpg" border="0" /></a></p>
<p>This stage shows you what work items will be moved, as well give you a couple of options for your original work items.&nbsp; Team Foundation Server doesn&rsquo;t support deleting work items, so your original work items will still exist.&nbsp; By default, Hemi will create a Moved state for these work items and assign them to that state.&nbsp; Also, it will create links between the original work items and their new copies, and vice versa.</p>
<p><a href="https://www.london54.com/blog_images/hemi15.png"><img alt="Hemi15" src="https://www.london54.com/blog_images/hemi15_thumb.jpg" border="0" /></a></p>
<p>Once you move to the next stage, your move will be committed!&nbsp; </p>
<p>If you look at your original work items, what you should see is that it is in a Moved state:</p>
<p><img alt="Hemi16" src="https://www.london54.com/blog_images/hemi16.png" border="0" /></p>
<p>And also, your original work item will be linked to the new one, and vice versa.</p>
<p><img alt="Hemi17" src="https://www.london54.com/blog_images/hemi17.png" border="0" /></p>
<p>Anyways, I hope you find Hemi useful &ndash; if you run into any bugs or have suggestions, please let me know.&nbsp; Either through this blog or email me at <a href="mailto:eric@counterpunchsoftware.com">eric@counterpunchsoftware.com</a>.</p>
<p>Thanks!</p>
<p>Eric.</p>]]></content:encoded>
    </item>
    <item>
      <title>A change of address of sorts...</title>
      <link>https://docs.microsoft.com/archive/blogs/ericlee/a-change-of-address-of-sorts</link>
      <pubDate>Wed, 08 Nov 2006 10:44:00 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ericlee/2006/11/08/a-change-of-address-of-sorts/</guid>
      <description><![CDATA[Hey guys,
Well, the time has come.
After 8 years at Microsoft, I've decided to pursue a long-time...]]></description>
      <content:encoded><![CDATA[<P>Hey guys,</P>
<P>Well, the time has come.</P>
<P>After 8 years at Microsoft, I've decided to pursue a long-time dream of running my own business.&nbsp; My new venture will be in a Seattle-based consulting company, CounterPunch Software (<A href="https://www.counterpunchsoftware.com/" mce_href="https://www.counterpunchsoftware.com/">www.counterpunchsoftware.com</A>).&nbsp; Not surprisingly we (or more accurately I) will be focusing on Microsoft technologies and solutions.&nbsp; My last day at Microsoft will be towards the end of November.</P>
<P>Not too much will change blog-wise – I believe that I am still allowed to have my blog on MSDN so I’ll keep it here.&nbsp; MSDN has been pretty good to me, and I’m loathe to change my blogjet settings <IMG src="https://www.london54.com/blog_images/smile1.gif" mce_src="https://www.london54.com/blog_images/smile1.gif"></P>
<P>I will always look back on the past 8 years with fond memories.&nbsp; I'll apologize for not thanking everyone individually, but I've enjoyed the tremendous privilege of working with, and learning from, some of the smartest and most passionate people imaginable.&nbsp; For that, I'll always be grateful.</P>
<P>It's a cliché of course, but it really does seem like yesterday when I walked into building 44 to start my first day at Microsoft.&nbsp; At the time, I thought I was joining what was then known as the Visual Interdev team, little did I know that I had already experienced my first re-org and had been transferred to the Visual J++ team :)&nbsp; In any case, it all worked out very well <IMG src="https://www.london54.com/blog_images/smile1.gif" mce_src="https://www.london54.com/blog_images/smile1.gif"></P>
<P>I’ve always been very passionate about Microsoft products – particularly, but not limited to, developer tools – and the folks who use them.&nbsp; I think, and hope that my new venture will allow me to get closer to that.</P>
<P>My new email address is <A href="mailto:eric@counterpunchsoftware.com" mce_href="mailto:eric@counterpunchsoftware.com">eric@counterpunchsoftware.com</A>.&nbsp;&nbsp;&nbsp;</P>
<P>Anyways, just a personal update <IMG src="https://www.london54.com/blog_images/smile1.gif" mce_src="https://www.london54.com/blog_images/smile1.gif"></P>
<P>Thanks!</P>
<P>Eric.</P>]]></content:encoded>
    </item>
    <item>
      <title>Windows Vista for Extreme Programming?</title>
      <link>https://docs.microsoft.com/archive/blogs/ericlee/windows-vista-for-extreme-programming</link>
      <pubDate>Tue, 24 Oct 2006 22:44:00 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ericlee/2006/10/24/windows-vista-for-extreme-programming/</guid>
      <description><![CDATA[Hey guys,
As you can probably tell, the bright shiny lights of the soon-to-be-released products...]]></description>
      <content:encoded><![CDATA[<P>Hey guys,</P>
<P>As you can probably tell, the bright shiny lights of the soon-to-be-released products like Windows Vista and Office 2007 have caught my eye lately.&nbsp; I promise I’ll be back to Team Foundation Server blogging soon.</P>
<P>I’ve been playing with a feature in Windows Vista that I thought might be useful for development teams who are practicing Extreme Programming.&nbsp; The feature is called Windows Meeting Space and is one of the out-of-the-box applications that takes advantage of Windows Vista Peer-to-Peer networking and more specifically, People Near Me.</P>
<P>Both Peer-to-Peer networking and People Near Me are vast areas that I don’t fully understand; Justin Smith does a nice job of talking about the technology in his recent MSDN <A href="https://msdn.microsoft.com/msdnmag/issues/06/10/peertopeer/default.aspx" mce_href="https://msdn.microsoft.com/msdnmag/issues/06/10/peertopeer/default.aspx">article</A>.</P>
<P>In terms of leveraging what is already there, Windows Meeting Space struck me as an easier to use netmeeting/netsharing/livemeeting technology.&nbsp; It seems perfectly suited for a quick code review, or paired programming session.</P>
<P>I found Windows Meeting Space from the handy search dialog in the start menu:</P>
<P><A href="https://www.london54.com/blog_images/wms1.png" mce_href="https://www.london54.com/blog_images/wms1.png"><IMG alt=Wms1 src="https://www.london54.com/blog_images/wms1.png" border=0 mce_src="https://www.london54.com/blog_images/wms1.png"></A></P>
<P>Starting a meeting is pretty easy – easier than most of the Microsoft collaboration tools I’ve used.&nbsp; Basically pick a name and a password.&nbsp; I like how Windows Meeting Space puts the time into your name automatically.&nbsp; You could also search for existing meetings.&nbsp; Let’s say that we’ll create a code review meeting.</P>
<P><A href="https://www.london54.com/blog_images/wms2.png" mce_href="https://www.london54.com/blog_images/wms2.png"><IMG alt=Wms2 src="https://www.london54.com/blog_images/wms2.png" border=0 mce_src="https://www.london54.com/blog_images/wms2.png"></A></P>
<P>Once created, you can invite people from the menu.&nbsp; This is where People Near Me (PNM) comes into play.&nbsp; PNM is supposed to search your subnet for peopled who have chosen to broadcast their identity.&nbsp; From this list, you can invite people to join your meeting.&nbsp; It might have been because of mismatching versions of Vista, a weird network connection, or something else, but I was never able to get a list populated with people near me.&nbsp;</P>
<P><A href="https://www.london54.com/blog_images/wms3.png" mce_href="https://www.london54.com/blog_images/wms3.png"><IMG alt=Wms3 src="https://www.london54.com/blog_images/wms3.png" border=0 mce_src="https://www.london54.com/blog_images/wms3.png"></A></P>
<P>In any case, you can use the “<STRONG>Invite others…”</STRONG> button to create an invitation file that you email around.&nbsp; Or, people in your network can use Windows Meeting Space to find this meeting, and invite themselves.&nbsp; For example, on my other Windows Vista machine, I’m running Windows Meeting Space and I can see this meeting we’ve just created:</P>
<P><A href="https://www.london54.com/blog_images/wms4.png" mce_href="https://www.london54.com/blog_images/wms4.png"><IMG alt=Wms4 src="https://www.london54.com/blog_images/wms4.png" border=0 mce_src="https://www.london54.com/blog_images/wms4png"></A></P>
<P>Suppose that we were given the password out of band, we’re able to join this meeting.</P>
<P><A href="https://www.london54.com/blog_images/wms5.png" mce_href="https://www.london54.com/blog_images/wms5.png"><IMG alt=Wms5 src="https://www.london54.com/blog_images/wms5.png" border=0 mce_src="https://www.london54.com/blog_images/wms5.png"></A></P>
<P>Now we can start some sharing and do our code review.&nbsp; If you press the sharing icon in the meeting, you get a choice of what kinds of applications you want to share.&nbsp; The PNM API supports a way to determine whether the attendees of your meeting have the same application or not.&nbsp; In our case, since we are doing a code review, we’ll share Visual Studio.</P>
<P><IMG alt=Wms6 src="https://www.london54.com/blog_images/wms6.png" border=0 mce_src="https://www.london54.com/blog_images/wms6.png"></P>
<P>As the person you initiated the sharing, you see a subtle tool bar in your desktop that says you are doing the sharing.&nbsp; You have the option of stopping your sharing, pausing it and even sending it to a projector.</P>
<P><IMG alt=Wms7 src="https://www.london54.com/blog_images/wms7.png" border=0 mce_src="https://www.london54.com/blog_images/wms7.png"></P>
<P>On the other side, for the folks who are attending the meeting, they see Visual Studio embedded into their meeting space window.</P>
<P><A href="https://www.london54.com/blog_images/wms8.png" mce_href="https://www.london54.com/blog_images/wms8.png"><IMG alt=Wms8 src="https://www.london54.com/blog_images/wms8.png" border=0 mce_src="https://www.london54.com/blog_images/wms8.png"></A></P>
<P>The image of VS that I have there is really squeezed, it is because I only have 1 monitor, so I have to show both my host VS instance as well as my shared one on the same real estate. </P>
<P>Anyone in the meeting can request control of the application and make code changes, comments etc.</P>
<P>None of this is necessarily anything new – you could always share with LiveMeeting and Remote Assistance and what not, but somehow Windows Meeting Spaces feels easier to use than all of those technologies.&nbsp; I like that you don’t have to explicitly send out invitations if you don’t want to; you can just search on your network for a meeting to join.&nbsp; Also, I like that there is an API underneath the covers; in theory you could build this type of sharing into right your application.&nbsp; For example, for Visual Studio, maybe you could setup sharing for individual document windows or something?</P>
<P>In any case, I thought this might be an interestig feature in Windows Vista, so I thought I would share.</P>
<P>Thanks!</P>
<P>Eric</P>]]></content:encoded>
    </item>
    <item>
      <title>Fixed my images and uploaded the Exchange sample code...</title>
      <link>https://docs.microsoft.com/archive/blogs/ericlee/fixed-my-images-and-uploaded-the-exchange-sample-code</link>
      <pubDate>Tue, 24 Oct 2006 15:43:00 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ericlee/2006/10/24/fixed-my-images-and-uploaded-the-exchange-sample-code/</guid>
      <description><![CDATA[Not sure what happened, but it seems like BlogJet is struggling with my build of Vista.&nbsp; In any...]]></description>
      <content:encoded><![CDATA[<P>Not sure what happened, but it seems like <A href="https://blogjet.com/" mce_href="https://blogjet.com/">BlogJet</A> is struggling with my build of Vista.&nbsp; In any case, my images are fixed up and I posted the full sample code <A href="https://www.london54.com/blog/exchange.zip" mce_href="https://www.london54.com/blog/exchange.zip">here</A>.</P>
<P>Thanks!</P>
<P>Eric</P>]]></content:encoded>
    </item>
    <item>
      <title>Ugh, messed up my images...</title>
      <link>https://docs.microsoft.com/archive/blogs/ericlee/ugh-messed-up-my-images</link>
      <pubDate>Mon, 23 Oct 2006 00:56:54 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ericlee/2006/10/23/ugh-messed-up-my-images/</guid>
      <description><![CDATA[Apologies, I seem to have hosed something on my hosting site.&nbsp; Other than today, all of the...]]></description>
      <content:encoded><![CDATA[<p>Apologies, I seem to have hosed something on my hosting site.&nbsp; Other than today, all of the images from my posts seem to be gone; hopefully I&rsquo;ll have things up and running again soon.</p>
<p>Thanks,</p>
<p>Eric</p>]]></content:encoded>
    </item>
    <item>
      <title>Exchange Server 2007 Web Service API for Developers!</title>
      <link>https://docs.microsoft.com/archive/blogs/ericlee/exchange-server-2007-web-service-api-for-developers</link>
      <pubDate>Sun, 22 Oct 2006 23:33:00 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ericlee/2006/10/22/exchange-server-2007-web-service-api-for-developers/</guid>
      <description><![CDATA[Hey guys,
Exchange is a Microsoft technology that I’ve used everyday for email, but never really...]]></description>
      <content:encoded><![CDATA[<P>Hey guys,</P>
<P>Exchange is a Microsoft technology that I’ve used everyday for email, but never really delved into as a developer.&nbsp; I’ve been working on some Office 2007 stuff, so I figured I would give it a try.</P>
<P>I was absolutely knocked out by how much you can do as a developer with Exchange Server 2007.&nbsp; There are a number of things, but what really caught my eye was the Web Service API.</P>
<P>I’ve experimented with CDO and MAPI a little bit in the past, but I’ve always struggled with it.&nbsp; It was always a struggle to download the version of CDO/MAPI that matched my server; and even the most trivial task like sending an email seemed really difficult.</P>
<P>But, with Exchange Server 2007, you can access a wide range of its functionality through its web service API.&nbsp; I didn’t find a lot of documentation about the API – a lot of it seems to be a work in progress – but I managed to get some of it working, so I wanted to share what I’ve learned.</P>
<P>First, I downloaded Exchange Server 2007 from <A href="https://www.microsoft.com/technet/prodtechnol/exchange/2007/downloads/beta.mspx" mce_href="https://www.microsoft.com/technet/prodtechnol/exchange/2007/downloads/beta.mspx">https://www.microsoft.com/technet/prodtechnol/exchange/2007/downloads/beta.mspx</A>.&nbsp; The installation was relatively painless.&nbsp; The setup is quite good, there were a few prerequisites that I didn’t have, so I was notified and had a chance to restart the setup.</P>
<P>The exchange web service is located at <A href="https://%3cyourserver%3e/EWS/Exchange.asmx" mce_href="https://%3cyourserver%3e/EWS/Exchange.asmx">https://&lt;yourserver&gt;/EWS/Exchange.asmx</A>, so you can literally just add a web reference to that URL and get a proxy class generated for you.</P>
<P>The main proxy class is <STRONG>ExchangeServiceBinding</STRONG>, you can instantiate it just like any other web proxy class.</P>
<P><IMG alt=Exchange1 src="https://www.london54.com/blog_images/exchange1.png" border=0 mce_src="https://www.london54.com/blog_images/exchange1.png"></P>
<P>The exercise I took myself through was fairly straightforward – what I wanted to do was to expand a distribution list to see who belonged to that list.&nbsp; For each person on that list, I want to check their availability.&nbsp; In other words, I want to see if they are available for a 1–hour meeting today.</P>
<P>The first thing to do is to expand out the distribution alias – Exchange Server 2007 has a web method to do exactly this, so it is just a matter of making the call.</P>
<P><IMG alt=Exchange2 src="https://www.london54.com/blog_images/exchange2.png" border=0 mce_src="https://www.london54.com/blog_images/exchange2.png"></P>
<P>You’ll notice something about the Exchange&nbsp;Server 2007 API that you may love, or you may hate.&nbsp; Notice that the <STRONG>ExpandDL</STRONG> takes a single parameter – an instance of <STRONG>ExpandDLType.&nbsp; </STRONG>That type contains members for all of the information that <STRONG>ExpandDL </STRONG>might need as input.&nbsp; </P>
<P>In my experience, there are essentially two main schools of thought about how to define a Web Service API.&nbsp; </P>
<P>One school of thought is to develop web service methods just like they are ‘regular’ methods.&nbsp; For example, if a web service method needs 4 parameters for input, that web service method signature would have 4 parameters.&nbsp; It is pretty intuitive for developers to use a Web Service API like that.</P>
<P>Another school of thought is to develop web service methods as though they were endpoints to which documents were submitted.&nbsp; I was introduced to this approach when I was a developer on the UDDI feature in Windows Server 2003.&nbsp; That is how we defined our web service API.&nbsp; There are pros and cons to this approach.&nbsp; When you take this approach, you typically start designing the web service method from the XSD schema onwards.&nbsp; When you have to worry about interoperability, this isn’t a bad approach at all.&nbsp; When I worked in UDDI, we worked with other companies to be sure that our UDDI implementatio would work with theirs.&nbsp; Whenever we met, we would work on defining just the XML schema.&nbsp; That helped because some companies used Java, some script and we used .NET to implement our version of UDDI.&nbsp; It would have been difficult to talk about programming interfaces since there were so many in play.&nbsp; What is also helpful about this approach is that you can use XSD schema validation to do some basic parameter checking.&nbsp; For example, consider the following XSD type:</P>
<P><IMG alt=Exchange3 src="https://www.london54.com/blog_images/exchange3.png" border=0 mce_src="https://www.london54.com/blog_images/exchange3.png"></P>
<P>Exchange Server 2007 uses this type&nbsp;as a return value of sorts when&nbsp;you make a request&nbsp;to see a user’s oof (out of office) settings.&nbsp; It’s funny to see a relatively colloquial term like OOF make it into the API of a enterprise messaging solution <IMG src="https://www.london54.com/blog_images/smile1.gif" mce_src="https://www.london54.com/blog_images/smile1.gif">&nbsp; Anyways, the author of this API is using XSD and its ‘minOccurs’ and ‘maxOccurs’ operators to define what is essentially the post-condition the operation to retrieve&nbsp;a user’s oof.</P>
<P>This can be good for both the producer and consumer of the API.&nbsp; For someone who is looking to use this API, the XSD gives them an idea of what to expect as a return value.&nbsp; When you have detailed documentation, this isn’t a big deal, but when you have a new API like with Exchange Server 2007, reading the XSD is critical.&nbsp; For someone who is developing this API, there is validation that is usually done on the outgoing end of the web service.&nbsp; Each outgoing message (i.e.&nbsp;GetUserOofSettingsResponse) is validated against its schema.&nbsp; If it violates something, it is returning something the user is not expecting, so it fails.&nbsp; Essentially, you are checking against the contract you agreed upon with your intended caller.</P>
<P>This approach was really helpful for us in UDDI because our shared UDDI specification was always changing.&nbsp; What we did was put XSD schema validation on the incoming and outgoing ends of our web service.&nbsp; Whenever we got a UDDI message, we validated it against schema before we passed it on to the appropriate method (ASP.NET allows you a hook to do this before it delegates to the appropriate web method).&nbsp; If the incoming message didn’t pass validation, that meant it would give our actual method trouble of some sort.&nbsp; Either the signature didn’t match, or the expected parameters changed.&nbsp; In any case, if the message failed validation, we threw an exception right away.&nbsp; On the outgoing end, we validated each response message we sent against its schema.&nbsp; If something failed validation, that&nbsp;meant whatever we were returning was not what was expected by our caller.&nbsp; Again, we threw an exception in this case.&nbsp; Whenever our UDDI specification changed, we just uploaded the new XSD schemas in our system.&nbsp; Whenever the UDDI design committee decided that a given parameter&nbsp;must occur at least once, but not more than 5 times for example, they put it into the XSD.&nbsp; And through XSD validation, our code automatically checked for that condition.&nbsp; That saved us from spending a lot time writing and changing our input and output validation code.</P>
<P>All that said, there are drawbacks to this approach as well.&nbsp; Mainly, it feels weird if you’re coming from a pure programming perspective, and instantiating a bunch of composite classes can be a pain&nbsp;<IMG src="https://www.london54.com/blog_images/smile1.gif" mce_src="https://www.london54.com/blog_images/smile1.gif">&nbsp; Once you get used to it though, it’s not so bad.</P>
<P>OK, enough about XSD and web service API design methodologies and back to Exchange Server 2007.&nbsp; Once you make the call to expand the DL, you basically get back a set of email addresses (sort of).</P>
<P>What you get back at first is a collection of response messages.&nbsp; I’m not sure when there will be more than one response to your request, maybe if there are clustered/linked Exchange servers.&nbsp; In any case, in any given response, there is a collection of email addresses.&nbsp; The double loop to go through this looks like:</P>
<P><IMG alt=Exchange4 src="https://www.london54.com/blog_images/exchange4.png" border=0 mce_src="https://www.london54.com/blog_images/exchange4.png"></P>
<P>I should mention, I don’t work at a fashion design firm – the context of the code being shown is for a demonstration that I’m working on <IMG src="https://www.london54.com/blog_images/smile1.gif" mce_src="https://www.london54.com/blog_images/smile1.gif"></P>
<P>What our inner loop, as illustrated above, is working through is each member of our distribution list.&nbsp; Each member may be a person or another distribution list itself.&nbsp; I didn’t write this code, but what we should do is check for the type of member that we got back.&nbsp; There is an enumerated type on <STRONG>EmailAddressType </STRONG>that we can check for:</P>
<P><IMG alt=Exchange6 src="https://www.london54.com/blog_images/exchange6.png" border=0 mce_src="https://www.london54.com/blog_images/exchange6.png"></P>
<P><BR>If this is another DL, I suppose you might want to go through and recursively expand each one.&nbsp; We won’t do that in this simple example, so let’s assume that each member we get back is just a person and not another DL.</P>
<P>If that’s the case, the only thing we need to do is define what our meeting time looks like:</P>
<P><IMG alt=Exchange7 src="https://www.london54.com/blog_images/exchange7.png" border=0 mce_src="https://www.london54.com/blog_images/exchange7.png"></P>
<P>And make the call to check the user’s availability.</P>
<P><IMG alt=Exchange8 src="https://www.london54.com/blog_images/exchange8.png" border=0 mce_src="https://www.london54.com/blog_images/exchange8.png"></P>
<P>I skipped some of the plumbing code – mostly setting up some of the parameter types.&nbsp; I’m having some trouble with my FTP server, but I’ll post the rest of my code tomorrow.</P>
<P>That’s about it – the next thing I’d like to look at is actually creating some lists and folders in Exchange 2007.</P>
<P>Thanks!</P>
<P>Eric</P>]]></content:encoded>
    </item>
    <item>
      <title>Presentation/Demo Tips</title>
      <link>https://docs.microsoft.com/archive/blogs/ericlee/presentationdemo-tips</link>
      <pubDate>Tue, 17 Oct 2006 04:03:00 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ericlee/2006/10/17/presentationdemo-tips/</guid>
      <description><![CDATA[Hey guys,
When I first started at Microsoft 8 years ago, I was an awful presenter.&nbsp; I hardly...]]></description>
      <content:encoded><![CDATA[<P>Hey guys,</P>
<P>When I first started at Microsoft 8 years ago, I was an awful presenter.&nbsp; I hardly made any eye contact and I spoke really, really, really fast.&nbsp; Over the years, I’ve had some training by some really good instructors and gotten a lot of practice.&nbsp; Now I like to think of speaking as one of my strong points.</P>
<P>Mentally, I’ve been keeping a little list of tips and tricks – many of which have come from fellow speakers – that have helped me.&nbsp; I thought I would share some of them in this post.&nbsp; A lot has to do with doing technical demos since&nbsp;I feel like that is one of my strong points in any presentation I do.</P>
<P><STRONG><FONT size=4><U>Make sure the audience can see what you’re doing</U></FONT></STRONG></P>
<P>It can be really hard for an audience to see things on the screen when you’re doing a demo;&nbsp;particularly in a complicated&nbsp;user interface like Visual Studio.&nbsp; There are some things you can do, and utilities that you can use to help them out.&nbsp; </P>
<UL>
<LI><A href="https://www.sysinternals.com/Utilities/ZoomIt.html" mce_href="https://www.sysinternals.com/Utilities/ZoomIt.html">ZoomIt</A>&nbsp;is a great tool for zooming in on specific parts of Visual Studio (thanks for the tip <STRONG>Martin Woodward</STRONG>!)</LI></UL>
<P>Try the following from <STRONG>Tools -&gt; Options </STRONG>in Visual Studio</P>
<UL>
<LI>In the <STRONG>Environment-&gt;Fonts and Colors </STRONG>setting, make the&nbsp;text editor font use at least size <STRONG>16</STRONG>&nbsp;and change the font to <STRONG>Lucida Console </STRONG>(I find this font shows the larger text better).&nbsp; Try to make this change before you speak because the first time you access the <STRONG>Fonts and Colors </STRONG>settings it takes a long, long time.</LI>
<LI>Turn your system font up to <STRONG>Large</STRONG> from the properties of your Windows desktop.&nbsp; The Visual Studio tool windows will pick up this larger font.&nbsp; Make sure to test all the windows that you are going to show since some VS windows don’t handle the large system font that well.&nbsp; You might have to restart Visual Studio as well.</LI>
<LI>Try hiding as many tool bars as possible to keep Visual Studio from looking cluttered.</LI></UL>
<P><STRONG><FONT size=4><U>Keep things snappy</U></FONT></STRONG></P>
<P>Performance is always important for any demo that you might do.&nbsp; It goes without saying to get a machine with as much RAM and CPU horsepower as possible; here are some of my other favorite tips.</P>
<UL>
<LI>If you’re running a Virtual PC or Virtual Server, a secondary hard drive is an absolute must.&nbsp; Virtual PC and Virtual Server are really IO intensive, so if you run a virtual image on the same hard drive as your native operating system, you will get a lot of contention on that drive.&nbsp; Another hard drive, either native in your computer or USB does wonders.</LI>
<LI>Buy as much RAM as you can afford/fit into your machine – at least 2 GB is ideal</LI>
<LI>Try to use fast hard drives, at least 7200 RPM.</LI>
<LI>I’m&nbsp;addicted to&nbsp;defragging my VPC drive – I do this after almost every time I run a virtual PC image.&nbsp; The built-in defrag utility in Windows is pretty good.&nbsp; The commercial product from <A href="https://www.diskeeper.com/products/products.asp" mce_href="https://www.diskeeper.com/products/products.asp">Diskeeper</A>&nbsp;seems to defrag faster and can be put on a schedule.&nbsp; I’m not sure if it does a better job or not.&nbsp; I’ve also used a free tool from <A href="https://www.flexomizer.com/PermaLink,guid,ce99367e-158c-487a-879d-b32145cc1957.aspx" mce_href="https://www.flexomizer.com/PermaLink,guid,ce99367e-158c-487a-879d-b32145cc1957.aspx">https://www.flexomizer.com/PermaLink,guid,ce99367e-158c-487a-879d-b32145cc1957.aspx</A>.&nbsp; That tool probably takes the longest, but does the best job I’ve seen.&nbsp; Thanks to <STRONG>David Whitney</STRONG> for writing this tool!&nbsp; </LI>
<LI>There are tons of ways to optimize your VPC images themselves.&nbsp; A good document can be found at: <A href="https://blogs.msdn.com/nolansax/attachment/700992.ashx" mce_href="https://blogs.msdn.com/nolansax/attachment/700992.ashx">https://blogs.msdn.com/nolansax/attachment/700992.ashx</A>.&nbsp; These tips really do make a big, big difference in performance.</LI>
<LI>Before you finalize your VPC image, try running <A href="https://www.ccleaner.com/" mce_href="https://www.ccleaner.com/">CCleaner</A>.&nbsp; This handy tool cleans up IE history, old setup files and a bunch of other bits of data cluttering up your system.</LI>
<LI>If you can, don’t use differencing drives – they are really handy, but they eat up your performance.</LI>
<LI>If you can, don’t enable undo drives – again, undo drives are super handy, but they do eat up performance.&nbsp; Despite this, I tend to run with undo drives enabled.</LI>
<LI>If you turn off themes in the VPC OS, or set the UI to maximize performance, your image will run faster.&nbsp; I don’t usually do this because I don’t like the way the display looks.</LI>
<LI>For Visual Studio Team System demos, my colleague, <STRONG>Ajay Sudan</STRONG> has a nice technique where he runs a Team Foundation Server in a VPC, but uses a natively installed Visual Studio to access it.&nbsp; That’s a nice combination because you can’t beat running the client bits natively when it comes to performance.</LI>
<LI>This can be time consuming, but I think it’s worth it.&nbsp; If you’re showing Visual Studio, open up each file type (i.e. C# files, resource files, etc) and note what tool bars they enable in Visual Studio.&nbsp; To maximize the perceived performance, close every tool bar that every document you are doing to show enables.&nbsp; This way, when you switch from document to document in Visual Studio, there are no delays from drawing the tool bars.</LI></UL>
<P><FONT size=4><U><STRONG>Slow Down!</STRONG></U></FONT></P>
<P>This is something that I use to really, really struggle with - trying to slow down my speaking pace.&nbsp; What I’ve found is that I can’t just tell myself to slow down.&nbsp; What I try to do is concentrate on maintaining my volume from end-to-end when I’m presenting.&nbsp; One thing I’ll notice when I’m speaking quickly is that my voice tends to trail off at the end of a sentence.&nbsp; This is usually because I’ve used one breath for the entire sentence and by the time I get to the end of that sentence, I’ve run out.&nbsp; Using one breath for a sentence like that is usually a sign for me that I’m going too fast.&nbsp; So, I concentrate on making sure I take a breath somewhere in the middle so that I can finish strong.&nbsp;&nbsp;To get that breath in, I’ll need to pause somewhere between my words.&nbsp; With some practice, I’ve been able to take a quick breath and still sound like I’m speaking naturally.&nbsp; That has really helped me slow down.&nbsp; I’m still a fast speaker, and I probably always will be, but what I’ve found with trying to breath better is that I can make myself easier to understand.</P>
<P>A funny thing to keep in mind is that I think that no matter how experienced of a speaker you are, there is some inaccuracy in how you&nbsp;perceive yourself and how your audience perceives you.&nbsp; This is particularly true for pace.&nbsp; What tends to happen is that when&nbsp;you’re trying to&nbsp;slow down your pace a bit on stage, your brain will tell you that you’re speaking way too slowly and that you sound like an idiot.&nbsp; In reality, you sound perfectly normal to your audience.&nbsp; This is where video tape comes in handy.&nbsp; What I’ve done in the past is record myself speaking at various speeds.&nbsp; I’ll go really, really slow; so slow that I can barely take it <IMG src="https://www.london54.com/blog_images/smile1.gif" mce_src="https://www.london54.com/blog_images/smile1.gif">&nbsp;and then go watch myself on tape.&nbsp; What I’ve noticed is that you can go really, really really slow and feel awkward doing it, but it looks and sound perfectly normal.&nbsp; I didn’t have to do this too many times before&nbsp;I got a better at gauging my actual pace versus my perceived pace. </P>
<P>All that said, the last thing you want to do is stretch out every single word and put your audience to sleep.&nbsp; Varying your pace is always good and makes you sound (and be) much more a genuine speaker.&nbsp; If you’re excited about something, let yourself speak a bit faster, a bit louder.&nbsp; Just be sure to slow down now and again when you wanto make a point or do a re-sync with the audience.</P>
<P><STRONG><FONT size=4><U>Enjoy Yourself</U></FONT></STRONG></P>
<P>We’re lucky to be in an industry that is driven by so much passion.&nbsp; If you’ve taken the time to put together a presentation, take the time to enjoy delivering it.&nbsp; No matter how badly you think you did, chances are it wasn’t that bad.&nbsp; Chances are, you did a good job.&nbsp; In almost all cases, your audience wants you to succeed – so if you meet them 1/2 way, you’ll have done a nice job more times than not.</P>
<P>Anyways, just some thoughts I wanted to share.</P>
<P>Eric.</P>]]></content:encoded>
    </item>
    <item>
      <title>A diversion - Windows Live Alerts</title>
      <link>https://docs.microsoft.com/archive/blogs/ericlee/a-diversion-windows-live-alerts</link>
      <pubDate>Sat, 07 Oct 2006 21:26:00 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ericlee/2006/10/07/a-diversion-windows-live-alerts/</guid>
      <description><![CDATA[I’ve been poking around the Windows Live stuff for developers (https://dev.live.com) and someting...]]></description>
      <content:encoded><![CDATA[<P>I’ve been poking around the Windows Live stuff for developers (<A href="https://dev.live.com/" mce_href="https://dev.live.com/">https://dev.live.com</A>) and someting caught my eye.&nbsp; With Live Messenger (formerly MSN Messenger), you can sign up for, as well as provide Alerts.&nbsp; These alerts get delivered to your device of choice (MSN Messenger, Phone, PDA, etc).</P>
<P>One of my projects at work right now is to work on the keynote demo that will be delivered at Tech Ed Barcelona later this fall.&nbsp; Not to give too much away, but one of the things we might try&nbsp;to cover&nbsp;is the developer angle for Windows Live.&nbsp; So, I thought I would give this alerts thing a try.</P>
<P>I went over to <A href="https://signup.alerts.live.com/brochure/index.jsp" mce_href="https://signup.alerts.live.com/brochure/index.jsp">https://signup.alerts.live.com/brochure/index.jsp</A>&nbsp;and registered the RSS feed for my blog as a provider of alerts.&nbsp; The sign-up experience was a pleasant surprise.&nbsp; The form was pretty short and a few minutes after submitting it, I received an email with a confirmation link.&nbsp; After clicking on the confirmation link, I received another email a few minutes later with the following image/link:</P>
<P><A href="https://signup.alerts.live.com/alerts/login.do?PINID=21987150&amp;returnURL=https://blogs.msdn.com/ericlee" mce_href="https://signup.alerts.live.com/alerts/login.do?PINID=21987150&amp;returnURL=https://blogs.msdn.com/ericlee"><IMG alt="Windows Live Alerts" src="https://images.alerts.live.com/mcwebsite/graphics/blog/alert_signup_eng.gif" border=0 mce_src="https://images.alerts.live.com/mcwebsite/graphics/blog/alert_signup_eng.gif"></A> </P>
<P>If you&nbsp;click on that link, you’ll have the option of signing up for alerts from my blog <IMG src="https://www.london54.com/blog_images/smile1.gif" mce_src="https://www.london54.com/blog_images/smile1.gif"></P>
<P>Oh one thing – you’ll notice that my alert is called ‘Fabrikam Design’ – I named it that to match the fictious company name we are using for the demo.</P>
<P>Thanks,</P>
<P>Eric.&nbsp;</P>
<P mce_keep="true">&nbsp;</P>]]></content:encoded>
    </item>
  </channel>
</rss>