<?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>Say what? Microsoft Malaysia One ISV Technology Blog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/fai/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/fai/feed.xml</link>
    <description />
    <lastBuildDate>Tue, 16 Apr 2019 05:08:08 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Tailspin Travel demo released for ASP.NET MVC 2/VS2008</title>
      <link>https://docs.microsoft.com/archive/blogs/fai/tailspin-travel-demo-released-for-asp-net-mvc-2vs2008</link>
      <pubDate>Tue, 02 Mar 2010 19:22:48 GMT</pubDate>
      <dc:creator><![CDATA[Faister]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/fai/2010/03/02/tailspin-travel-demo-released-for-asp-net-mvc-2vs2008/</guid>
      <description><![CDATA[Before I go about writing the actual content of this post, let me just say how glad I am that I'd...]]></description>
      <content:encoded><![CDATA[<p>Before I go about writing the actual content of this post, let me just say how glad I am that I'd finally got rid of the procrastination to resume blogging. Blogging again for the first time since my last post gives me a sense of dejavu, and it’s great. I hope to be posting more, and I’m contemplating to change the title of my blog. That will be for another post. But here’s the actual content of this post:</p>  <p>We have released a new version of the Tailspin Travel demo in January that is focused exclusively on showing off some of the new features in <b>ASP.NET MVC 2.</b> A large number of the developers looking to learn/evaluate the use of ASP.NET MVC 2 are still using Visual Studio 2008, so we wanted to make sure to provide them with an option. That means that the only requirement for developers to make use of this demo is (assuming they have VS2008 and SQL Express installed) the ASP.NET MVC 2 bits.</p>  <p>You can download the demo <a href="http://tailspintravel.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=38433">here</a>. This is a “slimmed” down version, so it should be easier to configure and set up. I’ve heard that there are a few kinks in setting up its heavier sibling version.</p>]]></content:encoded>
    </item>
    <item>
      <title>Granting permission to certificate</title>
      <link>https://docs.microsoft.com/archive/blogs/fai/granting-permission-to-certificate</link>
      <pubDate>Fri, 17 Apr 2009 00:39:48 GMT</pubDate>
      <dc:creator><![CDATA[Faister]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/fai/2009/04/17/granting-permission-to-certificate/</guid>
      <description><![CDATA[For the past few days, I’ve been delving really deep into Geneva, though it can be really...]]></description>
      <content:encoded><![CDATA[<p>For the past few days, I’ve been delving really deep into <a href="https://connect.microsoft.com/content/content.aspx?ContentID=10106&amp;SiteID=642" target="_blank">Geneva</a>, though it can be really frustrating at times because it takes awhile to learn the definitions. Although I’m somewhat familiar with terms like Relying Party (RP), Identity Provider (IP), and Security Token Service (STS) due to my little research on Cardspace a couple years ago, it’s still a daunting task when more terms are unravelled before you. So far the best article I’ve read is from the beautiful <a href="http://dasblonde.net" target="_blank">Michele Leroux Bustamante</a> in her article named “<a href="http://msdn.microsoft.com/en-us/magazine/2009.01.genevests.aspx" target="_blank">Building a Custom Security Token Service</a>”. I tried out her sample app and it shows how to build a custom active STS. However my aim is to build a custom passive STS because the client is accessing through a web browser and all my RPs are web apps. This <a href="http://travisspencer.com/blog/2009/01/gotya-when-authing-to-a-passiv.html" target="_blank">article</a> was very informative in explaining the gotcha when authenticating using a passive STS. I’m far from completing my little POC but I feel compelled to write what I’ve learnt before I totally forgot about it.</p>  <p>&#160;</p>  <p>In order for Michele’s active STS to work you have to import a number of certificates into your LocalComputer cert store. Her <a href="http://www.dasblonde.net/downloads/code/CertificatesSetup.zip" target="_blank">Certificates Setup</a> document was pretty good in explaining how to create and install the certificates. However I got lost in her section on Certificates Security. The section talks about private keys installed into the LocalMachine cert store must be accessible at runtime by the host running the RP or STS. Since these are web apps, the ASP.NET account must have access. It then talks about running the Certificate Key File Tool (certkeyfiletool.exe) which is located in the \bin directory of the Windows SDK. After searching high and low, I found a webpage on MSDN that says that this tool no longer exists. To replace it somewhat is a sample app called <a href="http://msdn.microsoft.com/en-us/library/aa717039.aspx" target="_blank">FindPrivateKey.exe</a>. This sample app has to be extracted from the WCF samples archive in C:\Program Files\Microsoft SDKs\Windows\<em>version</em>\Samples. I trust you do not want to extract all the sample apps in this archive. Since the files in the archive are already sorted by its respective path, look for TechnologySamples\Setup\CS\FindPrivateKey.</p>  <p>&#160;</p>  <p>Build the FindPrivateKey project in Visual Studio 2008. In order to find the private key, you need to get the thumbprint of your certificate. Assuming you have a certificate called “localhost” and it is already imported into your LocalComputer’s Personal cert store. Run mmc, add the Certificates snap-in, choose Local Computer Account, and under Personal, open the localhost certificate.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/fai/WindowsLiveWriter/Grantingpermissiontocertificate_B1EB/image_2.png" original-url="http://blogs.msdn.com/blogfiles/fai/WindowsLiveWriter/Grantingpermissiontocertificate_B1EB/image_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/fai/WindowsLiveWriter/Grantingpermissiontocertificate_B1EB/image_thumb.png" original-url="http://blogs.msdn.com/blogfiles/fai/WindowsLiveWriter/Grantingpermissiontocertificate_B1EB/image_thumb.png" width="316" height="392" /></a> </p>  <p>Copy the thumbprint.</p>  <p>Run the Windows SDK CMD Command Shell as Administrator, and type this at the command prompt:</p>  <p>FindPrivateKey.exe My LocalMachine -t &quot;c1 37 df 00 92 07 40 6b 6f 26 20 10 a8 74 57 bb 35 92 e1 3e&quot; –a</p>  <p>(of course replace the string in quotes with the thumbprint of your certificate).</p>  <p>Running this returns the physical location of your certificate. Copy the entire path from the CMD shell and paste it onto Notepad. You will need to remove the leading spaces on the 2nd line of the path.</p>  <p>Next run the <em>cacls.exe</em> utility from the same CMD shell.</p>  <p>cacls &quot;C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\51fd35739bae502ad67f4   <br />d4086d32400_3271abe4-895a-4463-82fe-267f8027cb2a&quot; /E /G &quot;Users&quot;:R</p>  <p>For starters, I just grant permission to <em>User</em> group on my machine. However the permission should be granted to the user account under which the application code may be running.&#160; For example, if the ASP.NET application always runs under a dedicated user account, you will use that account. You can determine the name of the account by calling WindowsIdentity.GetCurrent().Name to find what account you need to grant access.&#160; You may put this in your web application to find out the account of the IIS default application pool. If all is default, you should see the computer account as IIS APPPOOL\\DefaultAppPool.</p>  <p>Run the following command again:</p>  <p>cacls &quot;C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\51fd35739bae502ad67f4   <br />d4086d32400_3271abe4-895a-4463-82fe-267f8027cb2a&quot; /E /G &quot;IIS APPPOOL\DefaultAppPool&quot;:R</p>  <p>&#160;</p>  <p>You may also try the steps above if you get this error:</p>  <p><b></b>System.Security.Cryptography.CryptographicException: The system cannot find the file specified.</p>  <p><b>Source Error:</b></p>  <p><code>An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.</code></p>]]></content:encoded>
    </item>
    <item>
      <title>I’m presenting a Live Session on MS Virtual TechDays 2009</title>
      <link>https://docs.microsoft.com/archive/blogs/fai/im-presenting-a-live-session-on-ms-virtual-techdays-2009</link>
      <pubDate>Tue, 31 Mar 2009 07:56:52 GMT</pubDate>
      <dc:creator><![CDATA[Faister]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/fai/2009/03/31/im-presenting-a-live-session-on-ms-virtual-techdays-2009/</guid>
      <description><![CDATA[My Live Session information was just published on the Microsoft TechDays 2009 website. Here’s a...]]></description>
      <content:encoded><![CDATA[<p>My Live Session information was just published on the Microsoft TechDays 2009 <a href="http://www.msfttechdays.com/public/sessionlist.aspx">website</a>. Here’s a screen clipping of it:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/fai/WindowsLiveWriter/ImpresentingaLiveSessiononMSVirtualTechD_1187C/image_2.png" original-url="http://blogs.msdn.com/blogfiles/fai/WindowsLiveWriter/ImpresentingaLiveSessiononMSVirtualTechD_1187C/image_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/fai/WindowsLiveWriter/ImpresentingaLiveSessiononMSVirtualTechD_1187C/image_thumb.png" original-url="http://blogs.msdn.com/blogfiles/fai/WindowsLiveWriter/ImpresentingaLiveSessiononMSVirtualTechD_1187C/image_thumb.png" width="690" height="176" /></a> </p>  <p>Catch me live tomorrow at 10:30 am (UTC+08:00) Kuala Lumpur, Singapore.</p>]]></content:encoded>
    </item>
    <item>
      <title>Want to learn the latest and greatest in .NET Framework</title>
      <link>https://docs.microsoft.com/archive/blogs/fai/want-to-learn-the-latest-and-greatest-in-net-framework</link>
      <pubDate>Tue, 09 Dec 2008 07:38:58 GMT</pubDate>
      <dc:creator><![CDATA[Faister]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/fai/2008/12/09/want-to-learn-the-latest-and-greatest-in-net-framework/</guid>
      <description><![CDATA[Just released - the first preview of the Visual Studio 2010 and .NET Framework 4.0 Training Kit!...]]></description>
      <content:encoded><![CDATA[<p></p>  <p>Just released - the first preview of the <b>Visual Studio 2010 and .NET Framework 4.0 Training Kit!</b></p>  <p>This training kit preview includes presentations, hands-on labs, and demos for Visual Studio 2010 and .NET Framework 4.0. The content is designed to help developers learn how to utilize the Visual Studio 2010 features and a variety of framework technologies including: C# 4.0, Visual Basic 10, F#, Parallel Computing Platform, ASP.NET AJAX 4.0, and ASP.NET MVC Dynamic Data.</p>  <p><a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=752CB725-969B-4732-A383-ED5740F02E93&amp;displaylang=en">Download the training kit</a> - <strong>November 2008 Preview </strong>today!</p>]]></content:encoded>
    </item>
    <item>
      <title>Please authenticate</title>
      <link>https://docs.microsoft.com/archive/blogs/fai/please-authenticate</link>
      <pubDate>Tue, 25 Nov 2008 05:33:38 GMT</pubDate>
      <dc:creator><![CDATA[Faister]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/fai/2008/11/25/please-authenticate/</guid>
      <description><![CDATA[For the past 3 days, I’ve been engrossed in finishing an IE8 accelerator for my pet project...]]></description>
      <content:encoded><![CDATA[<p>For the past 3 days, I’ve been engrossed in finishing an IE8 accelerator for my pet project codenamed as Arc Reactor. The IE8 Accelerator is simply known as Arc Accelerator. None of these names are final yet, as my team mates and I are still deliberating what will be the actual name of this project. </p>  <p>Anyway the Arc Accelerator is meant to allow users to select a chunk of text in IE8, and save it as a tag. The saved tag can be populated into a “tag cloud” (again no actual name decided yet) maintained by the Arc Reactor client, which is developed as a WPF application.</p>  <p>In order to save the tag, a “session” of some sort needs to be created. It needs to be persistently stored (at least until after the saved tag had been retrieved by the Arc Reactor client). In order to have something like this, I need to identify the user, and to identify a user, that requires some sort of authentication. I’ve pondered over implementing my own authentication function by means of using the ASP.NET membership provider. However, that’s too inflexible as it means yet another set of credentials to be maintained by the user. I thought about using Windows Live ID, but I had no clue how to develop such an authentication function. The fear of the unknown can be rather counter-productive sometimes. I went to check out <a target="_blank" href="http://dev.live.com/liveid/">how to create identity-aware applications</a>, downloaded the <a target="_blank" href="http://go.microsoft.com/fwlink/?LinkID=91761">WebAuth sample</a> which was made available in the Windows Live ID Web SDK (C# code available, woo hoo!), and it was such a simple thing to do.</p>  <p>Before I could use Windows Live ID authentication, I need to create a new project on the <a target="_blank" href="https://lx.azure.microsoft.com/">Azure Services Developer Portal</a>. To gain access to this, you just have add the Azure Services Invitation in your Connections Dashboard. Yes it is an invitation-only program, hence you might have to wait a bit before access is granted to you. While you’re at it, also add other Connection programs such as Live Framework CTP Developer Connection, Live Mesh Beta, SQL Server Data Services, and Windows Live Dev Connect. Here’s a sneak peak of all the Connection programs I have under my dashboard:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/fai/WindowsLiveWriter/Pleaseauthenticate_F858/image_2.png" original-url="http://blogs.msdn.com/blogfiles/fai/WindowsLiveWriter/Pleaseauthenticate_F858/image_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/fai/WindowsLiveWriter/Pleaseauthenticate_F858/image_thumb.png" original-url="http://blogs.msdn.com/blogfiles/fai/WindowsLiveWriter/Pleaseauthenticate_F858/image_thumb.png" width="355" height="388" /></a>&#160; </p>  <p>On the Azure Serviced Developer Portal, click to create a new project. The service component to choose is “Live Services: Existing APIs” as shown below. As you could see, I don’t have access to the other bits, which is a bummer. But anyway, let’s take one step at a time. In due time, I will be able to develop and provision my Azure and Mesh application. I can’t wait.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/fai/WindowsLiveWriter/Pleaseauthenticate_F858/image_4.png" original-url="http://blogs.msdn.com/blogfiles/fai/WindowsLiveWriter/Pleaseauthenticate_F858/image_4.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/fai/WindowsLiveWriter/Pleaseauthenticate_F858/image_thumb_1.png" original-url="http://blogs.msdn.com/blogfiles/fai/WindowsLiveWriter/Pleaseauthenticate_F858/image_thumb_1.png" width="372" height="300" /></a> </p>  <p>Enter your project details in the following web page:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/fai/WindowsLiveWriter/Pleaseauthenticate_F858/image_6.png" original-url="http://blogs.msdn.com/blogfiles/fai/WindowsLiveWriter/Pleaseauthenticate_F858/image_6.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/fai/WindowsLiveWriter/Pleaseauthenticate_F858/image_thumb_2.png" original-url="http://blogs.msdn.com/blogfiles/fai/WindowsLiveWriter/Pleaseauthenticate_F858/image_thumb_2.png" width="371" height="267" /></a> </p>  <p>The 2 most important fields are Domain and Return URL. Return URL is especially important because this is the URL of your web page handler that will process all the goodies that are returned after Windows Live had authenticated your user. The one and only goodie that I’m keen to get is the user ID so that I can associate the saved tag to an Windows Live ID. After creating your project, you will get 2 very important fields which are the AppID and the SecretKey. You will use these properties in your Windows Live ID login control at a later stage.</p>  <p>Pretty soon I’ll either post my web application here on my blog, or include it in the Arc Reactor project on Codeplex. Stay tuned. In my following posts, I will expound on other things which I have developed such as:</p>  <ul>   <li><a target="_blank" href="http://msdn.microsoft.com/en-us/library/aa395208(VS.85).aspx">REST and POX</a> service: To return all the saved tags by Windows Live ID</li>    <li>WCF service that is based on the <a target="_blank" href="http://msdn.microsoft.com/en-us/library/ms752254.aspx">List-based Publish-Subscribe pattern</a></li>    <li>Using LINQ to SQL class to write the SavedTag into DB</li>    <li>Clients to test the REST service, WCF service, and ultimately the Arc Reactor client implementation.</li> </ul>]]></content:encoded>
    </item>
    <item>
      <title>Continuous Integration</title>
      <link>https://docs.microsoft.com/archive/blogs/fai/continuous-integration</link>
      <pubDate>Thu, 20 Nov 2008 00:24:17 GMT</pubDate>
      <dc:creator><![CDATA[Faister]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/fai/2008/11/20/continuous-integration/</guid>
      <description><![CDATA[If you can’t wait to download my slides from the Adopting ALM event, it’s right here:   The other...]]></description>
      <content:encoded><![CDATA[<p>If you can’t wait to download my slides from the Adopting ALM event, it’s right here:</p> <iframe style="border-bottom: #dde5e9 1px solid; border-left: #dde5e9 1px solid; padding-bottom: 0px; background-color: #ffffff; margin: 3px; padding-left: 0px; width: 240px; padding-right: 0px; height: 66px; border-top: #dde5e9 1px solid; border-right: #dde5e9 1px solid; padding-top: 0px" marginheight="0" src="http://cid-77527ae3878b3eec.skydrive.live.com/embedrowdetail.aspx/Preso/ContinuousIntegration-Fai.pptx" frameborder="0" marginwidth="0" scrolling="no"></iframe>  <p>The other thing I demo’ed at my session was how to set up an interactive TFS Build agent. There’s a good reason why you would want to run an interactive TFS Build Agent. This is the scenario. You have associated a test list that includes a UI functional test case to your build definition, you want TFS Build to bring out the application window so that your tester could perform UI functional testing, and then decide whether the test passed or failed.&#160; </p>  <p>It’s pretty simple. Go to the following folder (the installation folder of Visual Studio 2008).</p>  <p>C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies</p>  <p>Edit tfsbuildservice.exe.config file. Locate the following element:</p>  <blockquote>   <p>&lt;add key=&quot;InteractivePort&quot; value=&quot;9192&quot; /&gt;</p> </blockquote>  <p>Open a Visual Studio 2008 Command Prompt and make sure you run it as administrator if you are using Windows Vista or Windows Server 2008. </p>  <p>Reserve the port using the wcfhttpconfig utility. The commands you could use below:</p>  <blockquote>   <p>C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies&gt;wcfhttpconfig     <br />wcfhttpconfig.exe &lt;command&gt; &lt;options&gt;      <br />Commands:      <br />&#160; reserve &lt;user&gt; &lt;port&gt;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Used to reserve a port for a particular user      <br />&#160; free &lt;port&gt;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Used to remove a port reservation </p>    <p>Examples:     <br />&#160; wcfhttpconfig.exe reserve DOMAIN\User 9191      <br />&#160; wcfhttpconfig.exe free 9191 </p>    <p>C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies&gt;wcfhttpconfig reserve tfsrtm08\darren 9192 </p> </blockquote>  <p>Then run the TFSBuildService like below. Essentially you are running another instance of TFSBuildService that listens at the port 9192.</p>  <blockquote>   <p>C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies&gt;TFSBuildService.exe     <br />Press the Escape key (Esc) to exit...</p> </blockquote>  <p>When you queue your build, just select the interactive build agent. The properties of an interactive build agent:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/fai/WindowsLiveWriter/ContinuousIntegration_BC64/image_2.png" original-url="http://blogs.msdn.com/blogfiles/fai/WindowsLiveWriter/ContinuousIntegration_BC64/image_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/fai/WindowsLiveWriter/ContinuousIntegration_BC64/image_thumb.png" original-url="http://blogs.msdn.com/blogfiles/fai/WindowsLiveWriter/ContinuousIntegration_BC64/image_thumb.png" width="320" height="294" /></a></p>]]></content:encoded>
    </item>
    <item>
      <title>How to customize TFS Build project</title>
      <link>https://docs.microsoft.com/archive/blogs/fai/how-to-customize-tfs-build-project</link>
      <pubDate>Thu, 20 Nov 2008 00:02:35 GMT</pubDate>
      <dc:creator><![CDATA[Faister]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/fai/2008/11/20/how-to-customize-tfs-build-project/</guid>
      <description><![CDATA[A couple days ago, I presented a session called “Continuous Integration throughout the Entire...]]></description>
      <content:encoded><![CDATA[<p>A couple days ago, I presented a session called “Continuous Integration throughout the Entire Development Lifecycle” at an Application Lifecycle Management (ALM) event held at Auditorium East, Level 29, Microsoft Malaysia’s office. As promised I will blog about my findings and what I’d demo at my session. I’ll be explaining how to customize your TFS Build project so that you could override an existing target with a custom task.</p>  <p>&#160;</p>  <p>TFS Build is essentially built on top of the foundation provided by MSBuild. Having said that, you could customize TFS Build just like how you would customize your MSBuild script. To find out what are the customizable Team Foundation Build targets, there is a <a target="_blank" href="http://msdn.microsoft.com/en-us/library/aa337604(VS.80).aspx">good article on MSDN</a> that explains it well. I’m not exactly adept at creating my own custom tasks, so to my delight I found the <a target="_blank" href="http://www.codeplex.com/MSBuildExtensionPack">MSBuild Extension pack</a> which you could download from Codeplex.</p>  <p>&#160;</p>  <p>After installing the MSBuild Extension pack, the next thing to do is to edit the TFSBuild.proj file which can be found under the default source control folder named TeamBuildTypes. You may have a number of Team Build types already defined. Each Team Build type corresponds to a build definition. Take note that this is the file that you had set along with its version control folder in the Build definition wizard as shown in the following screen clipping:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/fai/WindowsLiveWriter/HowtocustomizeTFSBuildproject_B657/image_6.png" original-url="http://blogs.msdn.com/blogfiles/fai/WindowsLiveWriter/HowtocustomizeTFSBuildproject_B657/image_6.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/fai/WindowsLiveWriter/HowtocustomizeTFSBuildproject_B657/image_thumb_2.png" original-url="http://blogs.msdn.com/blogfiles/fai/WindowsLiveWriter/HowtocustomizeTFSBuildproject_B657/image_thumb_2.png" width="458" height="146" /></a> </p>  <p>In the following task, I am editing the TFSBuild.proj that corresponds to my build definition called “ALM111908Build”.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/fai/WindowsLiveWriter/HowtocustomizeTFSBuildproject_B657/image_2.png" original-url="http://blogs.msdn.com/blogfiles/fai/WindowsLiveWriter/HowtocustomizeTFSBuildproject_B657/image_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/fai/WindowsLiveWriter/HowtocustomizeTFSBuildproject_B657/image_thumb.png" original-url="http://blogs.msdn.com/blogfiles/fai/WindowsLiveWriter/HowtocustomizeTFSBuildproject_B657/image_thumb.png" width="706" height="223" /></a> </p>  <p>Check out to edit the TFSBuild.proj file. Open up the file in the Visual Studio editor. I’ll be customizing the Team Foundation Build target, BeforeDropBuild, with a task I am borrowing from the MSBuild extension pack called MSBuild.ExtensionPack.Communication.Email. The definition of the BeforeDropBuild target is:</p>  <blockquote>   <p>BeforeDropBuild      <br /> Called before saving the built binaries, build log files, and test results to the build-drop directory on the release server. Insert your task into this target to run custom tasks before the built files are saved to the drop-directory.</p> </blockquote>  <p>This task I’m borrowing may be similar to the “A build completes” in the Project Alerts in TFS as illustrated in the following screen clipping.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/fai/WindowsLiveWriter/HowtocustomizeTFSBuildproject_B657/image_4.png" original-url="http://blogs.msdn.com/blogfiles/fai/WindowsLiveWriter/HowtocustomizeTFSBuildproject_B657/image_4.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/fai/WindowsLiveWriter/HowtocustomizeTFSBuildproject_B657/image_thumb_1.png" original-url="http://blogs.msdn.com/blogfiles/fai/WindowsLiveWriter/HowtocustomizeTFSBuildproject_B657/image_thumb_1.png" width="390" height="197" /></a> </p>  <p>However I have more control over how the notification email is composed such as including attachments, recipients, subject and body of the email. And I could also decide when to send an email notification at any stage along the TFS Build process, not just when a build completes.</p>  <p>At the end of the TFSBuild.proj file, right before the &lt;/Project&gt; closing element, I add the following:</p>  <blockquote>   <p>&lt;UsingTask AssemblyFile=&quot;$(MSBuildExtensionsPath)\\ExtensionPack\\MSBuild.ExtensionPack.dll&quot; TaskName=&quot;MSBuild.ExtensionPack.Communication.Email&quot;/&gt; </p>    <p>&lt;Target Name=&quot;BeforeDropBuild&quot;&gt;     <br />&#160; &lt;ItemGroup&gt;      <br />&#160;&#160;&#160; &lt;!-- Specify some attachments --&gt;      <br />&#160;&#160;&#160; &lt;Attachment Include=&quot;C:\demo.txt&quot;/&gt;      <br />&#160;&#160;&#160; &lt;!-- Specify some recipients --&gt;      <br />&#160;&#160;&#160; &lt;Recipient Include=&quot;darren@tfs.local&quot;/&gt;      <br />&#160; &lt;/ItemGroup&gt;      <br />&#160; &lt;MSBuild.ExtensionPack.Communication.Email TaskAction=&quot;Send&quot; Subject=&quot;Email After Build 5pm&quot; SmtpServer=&quot;tfsrtm08&quot; MailFrom=&quot;tfsbuild@tfs.local&quot; MailTo=&quot;@(Recipient)&quot; Body=&quot;This email is sent after ALM Build&quot; Attachments=&quot;@(Attachment)&quot;/&gt;      <br />&lt;/Target&gt;</p> </blockquote>  <p>Be sure to check in the TFSBuild.proj into the source control. Otherwise, your current build definition will not be able to invoke the overriden TFS Build target. If you have set up continuous integration, which in other words each check-in will trigger a TFS Build, you will realize that checking in TFSBuild.proj will not trigger any build. This is an expected behavior because only files within your solution will trigger a build. So if you want to see that the customized email task for the BeforeDropBuild target is successfully performed, you can just queue a new build in the Team Explorer Build menu. You can then check out the BuildLog.txt file, and search for BeforeDropBuild. The first thing you see if the following:</p>  <blockquote>   <p>Overriding target &quot;BeforeDropBuild&quot; in project &quot;C:\Program Files\MSBuild\Microsoft\VisualStudio\TeamBuild\Microsoft.TeamFoundation.Build.targets&quot; with target &quot;BeforeDropBuild&quot; from project &quot;C:\Documents and Settings\TFSBUILD\Local Settings\Temp\Demo\ALM111808Build\BuildType\TFSBuild.proj&quot;.</p> </blockquote>  <p>&#160;</p>  <p>This means that TFS Build understands that you are overriding the the “BeforeDropBuild” with a custom task. Subsequently when you search for another occurrence of the target, you will see the following:</p>  <blockquote>   <p>Target &quot;BeforeDropBuild&quot; in file &quot;C:\Documents and Settings\TFSBUILD\Local Settings\Temp\Demo\ALM111808Build\BuildType\TFSBuild.proj&quot; from project &quot;C:\Documents and Settings\TFSBUILD\Local Settings\Temp\Demo\ALM111808Build\BuildType\TFSBuild.proj&quot;:     <br />Using &quot;MSBuild.ExtensionPack.Communication.Email&quot; task from assembly &quot;C:\Program Files\MSBuild\\ExtensionPack\\MSBuild.ExtensionPack.dll&quot;.      <br />Task &quot;MSBuild.ExtensionPack.Communication.Email&quot;      <br />&#160; Sending email: Email After Build 5pm      <br />&#160; Adding recipient: darren@tfs.local      <br />&#160; Adding attachment: C:\demo.txt      <br />Done executing task &quot;MSBuild.ExtensionPack.Communication.Email&quot;.      <br />Done building target &quot;BeforeDropBuild&quot; in project &quot;TFSBuild.proj&quot;.</p> </blockquote>  <p>The final check before you shout VOILA is when you see this email in your inbox:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/fai/WindowsLiveWriter/HowtocustomizeTFSBuildproject_B657/image_8.png" original-url="http://blogs.msdn.com/blogfiles/fai/WindowsLiveWriter/HowtocustomizeTFSBuildproject_B657/image_8.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/fai/WindowsLiveWriter/HowtocustomizeTFSBuildproject_B657/image_thumb_3.png" original-url="http://blogs.msdn.com/blogfiles/fai/WindowsLiveWriter/HowtocustomizeTFSBuildproject_B657/image_thumb_3.png" width="341" height="360" /></a> </p>  <p>Just remember that there are plenty of other tasks you could borrow from the MSBuild Extension Pack. For instance I can compress the assemblies after the build, deploy my web app to IIS 7, create an event log in Windows, and basically anything you have in mind that you want to associate to your TFS Build.</p>]]></content:encoded>
    </item>
    <item>
      <title>Innovate In Malaysia</title>
      <link>https://docs.microsoft.com/archive/blogs/fai/innovate-in-malaysia</link>
      <pubDate>Tue, 11 Nov 2008 02:24:56 GMT</pubDate>
      <dc:creator><![CDATA[Faister]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/fai/2008/11/11/innovate-in-malaysia/</guid>
      <description><![CDATA[FAQ for Innovate On  Q. I have already profiled my solution on Innovate On portal but I didn’t print...]]></description>
      <content:encoded><![CDATA[<p>FAQ for Innovate On</p>  <p>Q. I have already profiled my solution on Innovate On portal but I didn’t print out any web pages during the solution profiling process. How do I go back to my solution profile details?</p>  <p>A. Login to <a href="http://www.innovateon.com">www.innovateon.com</a> using your Windows Live ID. You will see the following Innovate On homepage. You solutions are listed in the “My Solutions” section somewhere in the upper right-hand corner. Please note that you may have multiple solutions profiled. </p>  <p><a href="https://blogs.msdn.com/blogfiles/fai/WindowsLiveWriter/InnovateInMalaysia_D8BC/clip_image002_2.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002" border="0" alt="clip_image002" src="https://blogs.msdn.com/blogfiles/fai/WindowsLiveWriter/InnovateInMalaysia_D8BC/clip_image002_thumb.jpg" width="244" height="206" /></a></p>  <p>Click on the solution link. This brings you to the solution profile web pages. Example of the first page is illustrated below.   <table cellspacing="0" cellpadding="0"><tbody>       <tr>         <td width="3"></td>       </tr>        <tr>         <td></td>          <td><a href="https://blogs.msdn.com/blogfiles/fai/WindowsLiveWriter/InnovateInMalaysia_D8BC/clip_image005_2.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image005" border="0" alt="clip_image005" src="https://blogs.msdn.com/blogfiles/fai/WindowsLiveWriter/InnovateInMalaysia_D8BC/clip_image005_thumb.jpg" width="231" height="244" /></a></td>       </tr>     </tbody></table></p>]]></content:encoded>
    </item>
    <item>
      <title>To be profitable or not to be profitable?</title>
      <link>https://docs.microsoft.com/archive/blogs/fai/to-be-profitable-or-not-to-be-profitable</link>
      <pubDate>Tue, 11 Nov 2008 02:19:27 GMT</pubDate>
      <dc:creator><![CDATA[Faister]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/fai/2008/11/11/to-be-profitable-or-not-to-be-profitable/</guid>
      <description><![CDATA[You might think which idiot would want to run a business that is not profitable. True. So wouldn’t...]]></description>
      <content:encoded><![CDATA[<p>You might think which idiot would want to run a business that is not profitable. True. So wouldn’t you want to invest some time to estimate the P&amp;L for new business opportunities using a tool. </p>  <p>This is perhaps the best-kept secret on the Microsoft Partner Program. Check out this tool <a href="https://roianalyst.alinean.com/microsoft/business_partner/launch.html">here</a>.</p>  <p>I’ve often mentioned this to my ISV partners that whether they move into a software-plus-services world, or while they are debating whether to offer an on-premise solution or hosted solution, it all boils down to their own business model. While Microsoft is more ready than ever with the recent announcements about the Azure Services Platform at PDC, the parallel thought process should be about whether they are prepared for this new business model. I found this very good whitepaper that talks about how <a href="http://www.microsoft.com/presspass/events/wwpc/docs/MeasurableSpSWP.pdf">Microsoft delivers measurable business opportunities for partners in software-plus-services today</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Innovation - Ready</title>
      <link>https://docs.microsoft.com/archive/blogs/fai/innovation-ready</link>
      <pubDate>Thu, 30 Oct 2008 01:30:22 GMT</pubDate>
      <dc:creator><![CDATA[Faister]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/fai/2008/10/30/innovation-ready/</guid>
      <description><![CDATA[Microsoft Innovation Day MSC Technology Commercialization Center @Cyberjaya (21st October 2008)...]]></description>
      <content:encoded><![CDATA[<p>Microsoft Innovation Day MSC Technology Commercialization Center @Cyberjaya (21st October 2008)    <br />This event had attracted 43 attendees. Developers from Shell IT, Jabatan Perkhidmatan Awam (JPA) and Sapura IT were among the attendees.&#160; <br />The technology focus for this month is Windows Presentation Foundation and the next generation browser, Internet Explorer 8. Mr Peter Tam, Senior ISV Manager from Microsoft gave a welcome remark which emphasized on Metro Early adopter program and InnovateOn. Chris Leong, the Technology Advisor from Microsoft then demonstrated to audience on how to differentiate their product from competitors by employing Microsoft's presentation frameworks such as Windows Presentation Foundation (WPF) and Silverlight.&#160; <br />Another hot topic were addressed by Mr Rohan Thomas, a Senior Web Platform and User Experience Technology Advisor who had demonstrated what makes IE8 the best browser to render Web 2.0 web solutions. The session was ended with the entrepreneurial talk by Aila Zafira, the Assessment Manager from MDeC on Technopreneur fund, which is a conditional grant given to Malaysian to develop their business idea into commercially viable ICT projects. </p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/fai/WindowsLiveWriter/InnovationReady_1376D/image_2.png" original-url="http://blogs.msdn.com/blogfiles/fai/WindowsLiveWriter/InnovationReady_1376D/image_2.png"><img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/fai/WindowsLiveWriter/InnovationReady_1376D/image_thumb.png" original-url="http://blogs.msdn.com/blogfiles/fai/WindowsLiveWriter/InnovationReady_1376D/image_thumb.png" width="508" height="507" /></a></p>]]></content:encoded>
    </item>
  </channel>
</rss>