<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>ASP.NET Weblogs</title><link>http://weblogs.asp.net/</link><description /><dc:language>en-US</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>IP Throttling in ASP.NET Web API</title><link>http://weblogs.asp.net/cibrax/archive/2013/05/22/ip-throttling-in-asp-net-web-api.aspx</link><pubDate>Wed, 22 May 2013 14:43:11 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:10327127</guid><dc:creator>cibrax</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Some Web APIs use the client IP address to enforce Service Level Agreements such as limit the number of calls in a period of time. The client IP address can be used as a replacement for an authentication key sometimes when a previous registration of client applications is not required. &lt;/p&gt;  &lt;p&gt;This is relatively simple to implement in a message handler,&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; IPThrottlingMessageHandler : DelegatingHandler
{
  IIPRepository repository;
  &lt;span class="kwrd"&gt;int&lt;/span&gt; maxRequestsHour;

  &lt;span class="kwrd"&gt;public&lt;/span&gt; IPThrottlingMessageHandler(IIPRepository repository, &lt;span class="kwrd"&gt;int&lt;/span&gt; maxRequestsHour = 150)
            : &lt;span class="kwrd"&gt;base&lt;/span&gt;()
  {
    &lt;span class="kwrd"&gt;this&lt;/span&gt;.repository = repository;
    &lt;span class="kwrd"&gt;this&lt;/span&gt;.maxRequestsHour = maxRequestsHour;
   }

   &lt;span class="kwrd"&gt;public&lt;/span&gt; IPThrottlingMessageHandler(HttpMessageHandler inner, IIPRepository repository, &lt;span class="kwrd"&gt;int&lt;/span&gt; maxRequestsHour = 150)
            : &lt;span class="kwrd"&gt;base&lt;/span&gt;(inner)
  {
     &lt;span class="kwrd"&gt;this&lt;/span&gt;.repository = repository;
     &lt;span class="kwrd"&gt;this&lt;/span&gt;.maxRequestsHour = maxRequestsHour;
   }

   &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; System.Threading.Tasks.Task&amp;lt;HttpResponseMessage&amp;gt; SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
  {
     var ip = GetClientIp(request);
            
      &lt;span class="kwrd"&gt;if&lt;/span&gt; (ip == &lt;span class="kwrd"&gt;null&lt;/span&gt;)
      {
         &lt;span class="kwrd"&gt;return&lt;/span&gt; ToResponse(request, HttpStatusCode.Forbidden, &lt;span class="str"&gt;&amp;quot;The client ip couldn't be found&amp;quot;&lt;/span&gt;);
       }

       &lt;span class="kwrd"&gt;if&lt;/span&gt;(&lt;span class="kwrd"&gt;this&lt;/span&gt;.repository.Increment(DateTime.Now.Hour, ip) &amp;gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.maxRequestsHour)
       {
          &lt;span class="kwrd"&gt;return&lt;/span&gt; ToResponse(request, HttpStatusCode.Forbidden, &lt;span class="str"&gt;&amp;quot;Quota exceeded&amp;quot;&lt;/span&gt;);
        }
            
       &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;base&lt;/span&gt;.SendAsync(request, cancellationToken);
  }

  &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetClientIp(HttpRequestMessage request)
  {
     &lt;span class="kwrd"&gt;if&lt;/span&gt; (request.Properties.ContainsKey(&lt;span class="str"&gt;&amp;quot;MS_HttpContext&amp;quot;&lt;/span&gt;))
     {
        &lt;span class="kwrd"&gt;return&lt;/span&gt; ((HttpContextWrapper)request.Properties[&lt;span class="str"&gt;&amp;quot;MS_HttpContext&amp;quot;&lt;/span&gt;]).Request.UserHostAddress;
      }
     &lt;span class="kwrd"&gt;else&lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (request.Properties.ContainsKey(RemoteEndpointMessageProperty.Name))
     {
        RemoteEndpointMessageProperty prop;
        prop = (RemoteEndpointMessageProperty)request.Properties[RemoteEndpointMessageProperty.Name];
        &lt;span class="kwrd"&gt;return&lt;/span&gt; prop.Address;
      }
      &lt;span class="kwrd"&gt;else&lt;/span&gt;
      {
          &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;null&lt;/span&gt;;
       }
   }

   &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; Task&amp;lt;HttpResponseMessage&amp;gt; ToResponse(HttpRequestMessage request, HttpStatusCode code, &lt;span class="kwrd"&gt;string&lt;/span&gt; message)
   {
       var tsc = &lt;span class="kwrd"&gt;new&lt;/span&gt; TaskCompletionSource&amp;lt;HttpResponseMessage&amp;gt;();

       var response = request.CreateResponse(code);
       response.ReasonPhrase = message;
       response.Content = &lt;span class="kwrd"&gt;new&lt;/span&gt; StringContent(message);

       tsc.SetResult(response);

        &lt;span class="kwrd"&gt;return&lt;/span&gt; tsc.Task;
    }
 }&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;This handler uses a repository to store the number of calls with a given IP in one hour. If the number of requests per hour exceeds the quota, an error response is returned to the client.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=10327127" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/cibrax/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/cibrax/archive/tags/.NET/default.aspx">.NET</category></item><item><title>Dynamically Loading Controllers and Views with AngularJS and RequireJS</title><link>http://weblogs.asp.net/dwahlin/archive/2013/05/22/dynamically-loading-controllers-and-views-with-angularjs-and-requirejs.aspx</link><pubDate>Wed, 22 May 2013 07:06:32 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:10325246</guid><dc:creator>dwahlin</dc:creator><slash:comments>7</slash:comments><description>&lt;div class="highlightBox"&gt;   &lt;p&gt;     &lt;br /&gt;New to AngularJS? Check out the &lt;a href="http://weblogs.asp.net/dwahlin/archive/2013/04/12/video-tutorial-angularjs-fundamentals-in-60-ish-minutes.aspx" target="_blank"&gt;AngularJS in 60-ish Minutes&lt;/a&gt; video to get a jumpstart on using the framework to build Single Page Applications (SPAs).&lt;/p&gt;    &lt;p&gt;&lt;a href="http://weblogs.asp.net/dwahlin/archive/2013/04/12/video-tutorial-angularjs-fundamentals-in-60-ish-minutes.aspx" target="_blank"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://weblogs.asp.net/blogs/dwahlin/image_68AB6009.png" width="221" height="164" /&gt;&lt;/a&gt;       &lt;br /&gt;&lt;/p&gt; &lt;/div&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;h2&gt;Dynamically Loading Controllers and Views    &lt;br /&gt;&lt;/h2&gt;  &lt;p&gt;AngularJS provides a simple way to associate a view with a controller and load everything at runtime using the $routeProvider object. Routing code is typically put in a module’s config() function and looks similar to the following:    &lt;br /&gt;&lt;/p&gt;  &lt;pre class="csharpcode"&gt;$routeProvider
     .when(&lt;span class="str"&gt;'/customers'&lt;/span&gt;,
        {
            controller: &lt;span class="str"&gt;'CustomersController'&lt;/span&gt;,
            templateUrl: &lt;span class="str"&gt;'/app/views/customers.html'&lt;/span&gt;
        })
    .when(&lt;span class="str"&gt;'/customerorders/:customerID'&lt;/span&gt;,
        {
            controller: &lt;span class="str"&gt;'CustomerOrdersController'&lt;/span&gt;,
            templateUrl: &lt;span class="str"&gt;'/app/views/customerOrders.html'&lt;/span&gt;
        })
    .when(&lt;span class="str"&gt;'/orders'&lt;/span&gt;,
        {
            controller: &lt;span class="str"&gt;'OrdersController'&lt;/span&gt;,
            templateUrl: &lt;span class="str"&gt;'/app/views/orders.html'&lt;/span&gt;
        })
    .otherwise({ redirectTo: &lt;span class="str"&gt;'/customers'&lt;/span&gt; });&lt;/pre&gt;
&lt;style type="text/css"&gt;














.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;
  &lt;br /&gt;While this type of code works great for defining routes it requires controller scripts to be loaded upfront in the main shell page by default. That works fine in some scenarios but what if you have a lot of controller scripts and views in a given application and want to dynamically load them on-the-fly at runtime? One way of dealing with that scenario is to define a &lt;strong&gt;resolve&lt;/strong&gt; property on each route and assign it a function that returns a promise. The function can handle dynamically loading the script containing the target controller and resolve the promise once the load is complete. An example of using the resolve property is shown next:&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;pre class="csharpcode"&gt;$routeProvider
    .when(&lt;span class="str"&gt;'/customers'&lt;/span&gt;,
        {
            templateUrl: &lt;span class="str"&gt;'/app/views/customers.html'&lt;/span&gt;,
            resolve: resolveController(&lt;span class="str"&gt;'/app/controllers/customersController.js'&lt;/span&gt;)
        });&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;This approach works well in cases where you don’t want all of your controller scripts loaded upfront, but it still doesn’t feel quite right – at least to me. I personally don’t like having to define two paths especially if you’ll be working with a lot of routes. If you’ve ever worked with a framework that uses convention over configuration then you’ll know that we can clean up this code by coming up with a standard convention for naming views and controllers. Coming up with a convention can help simplify routes and maintenance of the application over time. The approach that I’ll demonstrate in this post uses the following routing code to define the path, view and controller: 
  &lt;br /&gt;&lt;/p&gt;

&lt;pre class="csharpcode"&gt;$routeProvider
    .when(&lt;span class="str"&gt;'/customers'&lt;/span&gt;, route.resolve(&lt;span class="str"&gt;'Customers'&lt;/span&gt;))
    .when(&lt;span class="str"&gt;'/customerorders/:customerID'&lt;/span&gt;, route.resolve(&lt;span class="str"&gt;'CustomerOrders'&lt;/span&gt;))
    .when(&lt;span class="str"&gt;'/orders'&lt;/span&gt;, route.resolve(&lt;span class="str"&gt;'Orders'&lt;/span&gt;))
    .otherwise({ redirectTo: &lt;span class="str"&gt;'/customers'&lt;/span&gt; });&lt;/pre&gt;

&lt;p&gt;
  &lt;br /&gt;Notice that a single value is passed into the route.resolve() function. Behind the scenes the function will automatically create the path to the view and the path to the controller based on some simple conventions and then load the appropriate files dynamically. You can access a sample (work in progress) project at &lt;a href="https://github.com/DanWahlin/CustomerManager"&gt;https://github.com/DanWahlin/CustomerManager&lt;/a&gt;. Let’s take a look at how it works. 

  &lt;br /&gt;

  &lt;br /&gt;&lt;/p&gt;

&lt;h2&gt;Dynamically Loading Controllers&lt;/h2&gt;

&lt;p&gt;The following diagram shows the different players involved in simplifying routes and dynamically loading controllers. RequireJS is used to dynamically load controller JavaScript files and make an application’s main module available to the controllers so that they’re registered properly after they’re loaded. 
  &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/dwahlin/image_6EF23697.png"&gt;&lt;img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://weblogs.asp.net/blogs/dwahlin/image_thumb_77E1C8D6.png" width="765" height="561" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Here’s how it works:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;A file named &lt;strong&gt;main.js&lt;/strong&gt; defines custom scripts that will be loaded using RequireJS. I originally defined 3rd party libraries such as AngularJS in main.js as well but decided there simply wasn’t enough benefit over loading them at the bottom of the initial page using a &amp;lt;script&amp;gt; tag and pulled them out as a result. Only custom scripts are added into main.js in the sample application. 

    &lt;br /&gt;&lt;/li&gt;

  &lt;li&gt;The &lt;strong&gt;routeResolver.js&lt;/strong&gt; script creates an AngularJS provider. It’s loaded by RequireJS and used in &lt;strong&gt;app.js &lt;/strong&gt;within the config() function to define routes and resolve them dynamically at runtime. 

    &lt;br /&gt;&lt;/li&gt;

  &lt;li&gt;The &lt;strong&gt;app.js &lt;/strong&gt;file is loaded by RequireJS. It defines the main AngularJS module used in the application as well as the config for the module. The config section accesses compiler providers (such as $controllerProvider) needed to dynamically load controllers, directives, etc. and also uses the routeResolver to define views and controllers that need to be dynamically loaded (see diagram above). Views and routes are defined using a single name. For example, route.resolve(“Customers”) will cause customers.html to be loaded from the views folder and customersController.js from the controllers folder.&amp;#160; &lt;br /&gt;&lt;/li&gt;

  &lt;li&gt;Each controller is passed the AngularJS module created in app.js by RequireJS. This allows the controllers to dynamically register themselves with AngularJS using a $controllerProvider behind the scenes. 
    &lt;br /&gt;&lt;/li&gt;

  &lt;li&gt;At runtime the routes defined in app.js are dynamically resolved using the routeResolver provider that is injected into the config() function located in app.js. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let’s break down each of the files one by one now that you’ve seen how they integrate with each other.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h2&gt;Defining Scripts in main.js&lt;/h2&gt;

&lt;p&gt;RequireJS is used to load all of the custom scripts used in the sample application. It’s useful to ensure dependencies are loaded in the proper order and also helps dynamically loaded controllers, directives and other AngularJS objects easily access the application’s module so that they can be properly registered. An example of the main.js file used to configure RequireJS is shown next. All third party scripts are loaded directly in the shell page (index.html) rather than using RequireJS. Services used across multiple controllers are loaded upfront as well as some controllers needed immediately. However, the services could certainly be loaded dynamically if desired with a little more work (that feature isn’t currently implemented).&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;pre class="csharpcode"&gt;require.config({
    baseUrl: &lt;span class="str"&gt;'/app'&lt;/span&gt;,
    urlArgs: &lt;span class="str"&gt;'v=1.0'&lt;/span&gt;
});

require(
    [
        &lt;span class="str"&gt;'app'&lt;/span&gt;,
        &lt;span class="str"&gt;'services/routeResolver'&lt;/span&gt;,
        &lt;span class="str"&gt;'services/config'&lt;/span&gt;,
        &lt;span class="str"&gt;'services/customersBreezeService'&lt;/span&gt;,
        &lt;span class="str"&gt;'services/customersService'&lt;/span&gt;,
        &lt;span class="str"&gt;'services/dataService'&lt;/span&gt;,
        &lt;span class="str"&gt;'controllers/navbarController'&lt;/span&gt;,
        &lt;span class="str"&gt;'controllers/orderChildController'&lt;/span&gt;
    ],
    &lt;span class="kwrd"&gt;function&lt;/span&gt; () {
        angular.bootstrap(document, [&lt;span class="str"&gt;'customersApp'&lt;/span&gt;]);
    });&lt;/pre&gt;

&lt;p&gt;
  &lt;br /&gt;Since the &lt;strong&gt;app.js&lt;/strong&gt; file is loaded dynamically (it defines the main application module) an ng-app=”customersApp” attribute isn’t hard-coded into the shell page that initially loads as with standard AngularJS applications. Instead, it’s added at runtime by calling angular.bootstrap().&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h2&gt;The routeResolver.js File&lt;/h2&gt;

&lt;p&gt;The routeResolver.js file handles creating an AngularJS module and provider that can dynamically load views and controllers. AngularJS already comes with built-in support for loading views dynamically and with a little more work controllers can be loaded dynamically as well. Loading controller scripts can be done by assigning the &lt;strong&gt;resolve&lt;/strong&gt; property mentioned earlier to a function that handles loading the controller. What’s unique about routeResolver is that it doesn’t accept hard-coded paths to the target view or controller. Instead, you define a base name such as “Customers” and the resolver will generate the path to the appropriate view and controller based on a standard convention.&lt;/p&gt;

&lt;p&gt;Here’s the complete code for the &lt;strong&gt;routeResolver&lt;/strong&gt; provider as well as a &lt;strong&gt;routeConfig&lt;/strong&gt; object used to configure view and controller directories. The code starts by defining a new AngularJS module named &lt;strong&gt;routeResolverServices&lt;/strong&gt;. A provider was chosen (as opposed to a service or factory) because the routeResolver needs to be injected into the config() function of a given application’s module (in app.js for example). The config() function uses the routeResolver to define the routes based on the conventions mentioned earlier.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="str"&gt;'use strict'&lt;/span&gt;;

define([], &lt;span class="kwrd"&gt;function&lt;/span&gt; () {

    &lt;span class="kwrd"&gt;var&lt;/span&gt; services = angular.module(&lt;span class="str"&gt;'routeResolverServices'&lt;/span&gt;, []);

    &lt;span class="rem"&gt;//Must be a provider since it will be injected into module.config()    &lt;/span&gt;
    services.provider(&lt;span class="str"&gt;'routeResolver'&lt;/span&gt;, &lt;span class="kwrd"&gt;function&lt;/span&gt; () {

        &lt;span class="kwrd"&gt;this&lt;/span&gt;.$get = &lt;span class="kwrd"&gt;function&lt;/span&gt; () {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;;
        };

        &lt;span class="kwrd"&gt;this&lt;/span&gt;.routeConfig = &lt;span class="kwrd"&gt;function&lt;/span&gt; () {
            &lt;span class="kwrd"&gt;var&lt;/span&gt; viewsDirectory = &lt;span class="str"&gt;'/app/views/'&lt;/span&gt;,
                controllersDirectory = &lt;span class="str"&gt;'/app/controllers/'&lt;/span&gt;,

            setBaseDirectories = &lt;span class="kwrd"&gt;function&lt;/span&gt; (viewsDir, controllersDir) {
                viewsDirectory = viewsDir;
                controllersDirectory = controllersDir;
            },

            getViewsDirectory = &lt;span class="kwrd"&gt;function&lt;/span&gt; () {
                &lt;span class="kwrd"&gt;return&lt;/span&gt; viewsDirectory;
            },

            getControllersDirectory = &lt;span class="kwrd"&gt;function&lt;/span&gt; () {
                &lt;span class="kwrd"&gt;return&lt;/span&gt; controllersDirectory;
            };

            &lt;span class="kwrd"&gt;return&lt;/span&gt; {
                setBaseDirectories: setBaseDirectories,
                getControllersDirectory: getControllersDirectory,
                getViewsDirectory: getViewsDirectory
            };
        }();

        &lt;span class="kwrd"&gt;this&lt;/span&gt;.route = &lt;span class="kwrd"&gt;function&lt;/span&gt; (routeConfig) {

            &lt;span class="kwrd"&gt;var&lt;/span&gt; resolve = &lt;span class="kwrd"&gt;function&lt;/span&gt; (baseName) {
                &lt;span class="kwrd"&gt;var&lt;/span&gt; routeDef = {};
                routeDef.templateUrl = routeConfig.getViewsDirectory() + baseName + &lt;span class="str"&gt;'.html'&lt;/span&gt;;
                routeDef.controller = baseName + &lt;span class="str"&gt;'Controller'&lt;/span&gt;;
                routeDef.resolve = {
                    load: [&lt;span class="str"&gt;'$q'&lt;/span&gt;, &lt;span class="str"&gt;'$rootScope'&lt;/span&gt;, &lt;span class="kwrd"&gt;function&lt;/span&gt; ($q, $rootScope) {
                        &lt;span class="kwrd"&gt;var&lt;/span&gt; dependencies = [routeConfig.getControllersDirectory() + baseName + &lt;span class="str"&gt;'Controller.js'&lt;/span&gt;];
                        &lt;span class="kwrd"&gt;return&lt;/span&gt; resolveDependencies($q, $rootScope, dependencies);
                    }]
                };

                &lt;span class="kwrd"&gt;return&lt;/span&gt; routeDef;
            },

            resolveDependencies = &lt;span class="kwrd"&gt;function&lt;/span&gt; ($q, $rootScope, dependencies) {
                &lt;span class="kwrd"&gt;var&lt;/span&gt; defer = $q.defer();
                require(dependencies, &lt;span class="kwrd"&gt;function&lt;/span&gt; () {
                    defer.resolve();
                    $rootScope.$apply()
                });

                &lt;span class="kwrd"&gt;return&lt;/span&gt; defer.promise;
            };

            &lt;span class="kwrd"&gt;return&lt;/span&gt; {
                resolve: resolve
            }
        }(&lt;span class="kwrd"&gt;this&lt;/span&gt;.routeConfig);
    });

});&lt;/pre&gt;

&lt;p&gt;
  &lt;br /&gt;Looking through the code you can see that a &lt;strong&gt;routeConfig&lt;/strong&gt; object is defined that allows the views and controllers directory to be set using code similar to the following (this code goes in the module.config() function that’ll be shown later):&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;//Change default views and controllers directory using the following:&lt;/span&gt;
routeResolverProvider.routeConfig.setBaseDirectories(&lt;span class="str"&gt;'/app/myViews'&lt;/span&gt;, &lt;span class="str"&gt;'/app/myControllers'&lt;/span&gt;);&lt;/pre&gt;

&lt;p&gt;
  &lt;br /&gt;The routeConfig object defaults to the following directories:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Views&lt;/strong&gt;:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /app/views&lt;/p&gt;

  &lt;p&gt;&lt;strong&gt;Controllers&lt;/strong&gt;:&amp;#160;&amp;#160;&amp;#160; /app/controllers 

    &lt;br /&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In addition to &lt;strong&gt;routeConfig&lt;/strong&gt; you’ll also find a &lt;strong&gt;route&lt;/strong&gt; object with a &lt;strong&gt;resolve()&lt;/strong&gt; function that handles dynamically loading controller scripts. It handles setting the &lt;strong&gt;templateUrl&lt;/strong&gt; and &lt;strong&gt;controller&lt;/strong&gt; name for a given route. It also takes advantage of AngularJS’s &lt;strong&gt;&lt;a href="http://docs.angularjs.org/api/ng.$routeProvider" target="_blank"&gt;resolve&lt;/a&gt;&lt;/strong&gt; property to dynamically load the target controller script using RequireJS. The &lt;strong&gt;resolve()&lt;/strong&gt; function shown above delegates loading controller scripts to another function named &lt;strong&gt;resolveDependencies()&lt;/strong&gt; which handles getting a deferral, returning a promise, and resolving the deferral once the controller script loads.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h2&gt;Defining Routes in app.js 
  &lt;br /&gt;&lt;/h2&gt;

&lt;p&gt;The app.js file defines the application’s main module and also handles configuring routes. It’s wrapped with a define() call to RequireJS to ensure that the routeResolver is loaded and available. The customersApp module defined in app.js requires routeResolverServices. &lt;/p&gt;

&lt;p&gt;The config() function has several different providers injected into it including the routeResolver provider (note that the actual name of the provider is routeResolver but that you must add “Provider” on the end of the name for it to work properly when injecting it). The AngularJS providers that are injected into config() are used to dynamically register controllers, directives, filters and more after a given script is dynamically loaded. &lt;/p&gt;

&lt;p&gt;Notice that within the config() function an object literal is assigned to &lt;strong&gt;app.register&lt;/strong&gt; (&lt;em&gt;app&lt;/em&gt; represents the application’s module). The object literal contains properties that can be used to dynamically register a controller and other AngularJS objects that are downloaded on-the-fly (thanks to &lt;a href="https://github.com/matys84pl/angularjs-requirejs-lazy-controllers/blob/master/app/js/app.js" target="_blank"&gt;Mateusz Bilski&lt;/a&gt; for the initial code that started me thinking about this more). You’ll learn more about that process in a moment. Application routes are defined using the routeResolver provider’s &lt;strong&gt;route.resolve()&lt;/strong&gt; function which accepts the base name to use to lookup views and controllers as mentioned earlier based on conventions.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="str"&gt;'use strict'&lt;/span&gt;;

define([&lt;span class="str"&gt;'services/routeResolver'&lt;/span&gt;], &lt;span class="kwrd"&gt;function&lt;/span&gt; () {

    &lt;span class="kwrd"&gt;var&lt;/span&gt; app = angular.module(&lt;span class="str"&gt;'customersApp'&lt;/span&gt;, [&lt;span class="str"&gt;'routeResolverServices'&lt;/span&gt;]);

    app.config([&lt;span class="str"&gt;'$routeProvider'&lt;/span&gt;, &lt;span class="str"&gt;'routeResolverProvider'&lt;/span&gt;, &lt;span class="str"&gt;'$controllerProvider'&lt;/span&gt;, &lt;span class="str"&gt;'$compileProvider'&lt;/span&gt;, &lt;span class="str"&gt;'$filterProvider'&lt;/span&gt;, &lt;span class="str"&gt;'$provide'&lt;/span&gt;,
        &lt;span class="kwrd"&gt;function&lt;/span&gt; ($routeProvider, routeResolverProvider, $controllerProvider, $compileProvider, $filterProvider, $provide) {

            &lt;span class="rem"&gt;//Change default views and controllers directory using the following:&lt;/span&gt;
            &lt;span class="rem"&gt;//routeResolverProvider.routeConfig.setBaseDirectories('/app/views', '/app/controllers');&lt;/span&gt;

            app.register =
            {
                controller: $controllerProvider.register,
                directive: $compileProvider.directive,
                filter: $filterProvider.register,
                factory: $provide.factory,
                service: $provide.service
            };

            &lt;span class="rem"&gt;//Define routes - controllers will be loaded dynamically&lt;/span&gt;
            &lt;span class="kwrd"&gt;var&lt;/span&gt; route = routeResolverProvider.route;

            $routeProvider
                .when(&lt;span class="str"&gt;'/customers'&lt;/span&gt;, route.resolve(&lt;span class="str"&gt;'Customers'&lt;/span&gt;))
                .when(&lt;span class="str"&gt;'/customerorders/:customerID'&lt;/span&gt;, route.resolve(&lt;span class="str"&gt;'CustomerOrders'&lt;/span&gt;))
                .when(&lt;span class="str"&gt;'/orders'&lt;/span&gt;, route.resolve(&lt;span class="str"&gt;'Orders'&lt;/span&gt;))
                .otherwise({ redirectTo: &lt;span class="str"&gt;'/customers'&lt;/span&gt; });

                }]);

            &lt;span class="kwrd"&gt;return&lt;/span&gt; app;
});&lt;/pre&gt;
&lt;font size="2" face="Consolas"&gt;
  &lt;br /&gt;&lt;/font&gt;

&lt;h2&gt;
  &lt;br /&gt;Defining Controllers 

  &lt;br /&gt;&lt;/h2&gt;

&lt;p&gt;Controllers in the application rely on RequireJS to access the object representing the application’s module and then access the &lt;strong&gt;register&lt;/strong&gt; property shown earlier to register a controller script with AngularJS. This type of registration is required since using the standard &lt;em&gt;angular.module(“ModuleName”).controller()&lt;/em&gt; code won’t work properly with dynamically loaded controller scripts (at least at the current time). An example of a controller named customersController.js is shown next. Notice that it uses RequireJS’s define() function to get to the app object and then uses it to register the controller. The app.register.controller() function points to AngularJS’s $controllerProvider.register() function behind the scenes as shown earlier with app.js. All of the controllers in the application follow this pattern. 

  &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="str"&gt;'use strict'&lt;/span&gt;;

define([&lt;span class="str"&gt;'app'&lt;/span&gt;], &lt;span class="kwrd"&gt;function&lt;/span&gt; (app) {

    &lt;span class="rem"&gt;//This controller retrieves data from the customersService and associates it with the $scope&lt;/span&gt;
    &lt;span class="rem"&gt;//The $scope is ultimately bound to the customers view&lt;/span&gt;
    app.register.controller(&lt;span class="str"&gt;'CustomersController'&lt;/span&gt;, [&lt;span class="str"&gt;'$scope'&lt;/span&gt;, &lt;span class="str"&gt;'config'&lt;/span&gt;, &lt;span class="str"&gt;'dataService'&lt;/span&gt;, &lt;span class="kwrd"&gt;function&lt;/span&gt; ($scope, config, dataService) {

        &lt;span class="rem"&gt;//Controller code goes here&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;&lt;/span&gt;    }]);
});&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h2&gt;What about Directives, Filters and other Types? 
  &lt;br /&gt;&lt;/h2&gt;

&lt;p&gt;The current routeResolver implementation only supports dynamically loading controllers. However, all of the necessary plumbing is in place so I may add that functionality at some point in the future.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h2&gt;
  &lt;br /&gt;Summary&lt;/h2&gt;

&lt;p&gt;
  &lt;br /&gt;If you’re new to AngularJS this may seem like a lot of code to perform a simple task like dynamically downloading a controller script. However, once you get the main.js and app.js scripts in place the rest takes care of itself if you follow the pattern outlined above for defining controllers.&lt;/p&gt;

&lt;p&gt;The word on the street is that AngularJS will eventually provide a built-in way to dynamically load controllers and other scripts. I’ll certainly welcome that feature when it’s available but until then the routeResolver and RequireJS functionality shown here gets the job done. Although I’ve been through several iterations and variations of this code I expect it’ll change as I use it more and get feedback. Access the sample (work in progress) project that shows all of this in action at &lt;a href="https://github.com/DanWahlin/CustomerManager"&gt;https://github.com/DanWahlin/CustomerManager&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=10325246" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/dwahlin/archive/tags/AngularJS/default.aspx">AngularJS</category><category domain="http://weblogs.asp.net/dwahlin/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://weblogs.asp.net/dwahlin/archive/tags/patterns/default.aspx">patterns</category><category domain="http://weblogs.asp.net/dwahlin/archive/tags/RequireJS/default.aspx">RequireJS</category><category domain="http://weblogs.asp.net/dwahlin/archive/tags/SPA/default.aspx">SPA</category><category domain="http://weblogs.asp.net/dwahlin/archive/tags/.NET/default.aspx">.NET</category></item><item><title>The holy grail: Automatically diagnose IIS + ASP.NET website hangs</title><link>http://blogs.iis.net/mvolo/archive/2013/05/21/the-holy-grail-automatically-diagnose-iis-asp-net-website-hangs.aspx</link><pubDate>Tue, 21 May 2013 14:17:52 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:10321599</guid><dc:creator>The Official Microsoft IIS Site</dc:creator><slash:comments>0</slash:comments><description>We finally did it. LeanSentry now automatically detects and diagnoses IIS and ASP.NET hangs! Read More......( read more ) Read More......(&lt;a href="http://blogs.iis.net/mvolo/archive/2013/05/21/the-holy-grail-automatically-diagnose-iis-asp-net-website-hangs.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=10321599" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/iis/archive/tags/CodeProject/default.aspx">CodeProject</category><category domain="http://weblogs.asp.net/iis/archive/tags/IIS/default.aspx">IIS</category><category domain="http://weblogs.asp.net/iis/archive/tags/LeanSentry/default.aspx">LeanSentry</category><category domain="http://weblogs.asp.net/iis/archive/tags/troubleshooting/default.aspx">troubleshooting</category></item><item><title>The powerful .NETMF on your wrist! Meet the Agent</title><link>http://weblogs.asp.net/christoc/archive/2013/05/21/the-powerful-netmf-on-your-wrist-meet-the-agent.aspx</link><pubDate>Tue, 21 May 2013 12:16:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:10320697</guid><dc:creator>Chris Hammond</dc:creator><slash:comments>0</slash:comments><description>So if you've been under a rock lately, you might have missed this little phenom known as KickStarter. Well today you're going to want to check it out. Secret Labs, the folks who brought you Netduino (hey, I'm wearing a Netduino t-shirt today, what a coincidence) have teamed up with a watch maker in New York City (SL is based there as well) to bring you Agent! http://www.agentwatches.com/ So what is Agent? I could write this whole long blog post about it, but you'd be better off just reading the KickStarter...(&lt;a href="http://weblogs.asp.net/christoc/archive/2013/05/21/the-powerful-netmf-on-your-wrist-meet-the-agent.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=10320697" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/christoc/archive/tags/.NETMF/default.aspx">.NETMF</category><category domain="http://weblogs.asp.net/christoc/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/christoc/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://weblogs.asp.net/christoc/archive/tags/Netduino/default.aspx">Netduino</category><category domain="http://weblogs.asp.net/christoc/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://weblogs.asp.net/christoc/archive/tags/Visual+Studio+2012/default.aspx">Visual Studio 2012</category><category domain="http://weblogs.asp.net/christoc/archive/tags/.net/default.aspx">.net</category><category domain="http://weblogs.asp.net/christoc/archive/tags/.NET+Micro+Framework/default.aspx">.NET Micro Framework</category></item><item><title>Tricky issue with HTML5 drag and drop</title><link>http://weblogs.asp.net/bipinjoshi/archive/2013/05/21/tricky-issue-with-html5-drag-and-drop.aspx</link><pubDate>Tue, 21 May 2013 07:41:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:10319205</guid><dc:creator>bipinjoshi</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Recently a reader asked about a tricky issue with HTML5 drag and drop. The 
issue is this: &lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="ctl00_ContentPlaceHolder1_DetailsView1_Label3"&gt;HTML5 supports 
native drag and drop through draggable property and several events such 
as dragstart, drag, dragenter, dragleave, dragover and drop. Normally 
dragstart event handler is where you set the data that is to be 
transferred between the drag source and drop target. The drop event 
handler is where you handle the drop of a drag source, access the data 
transferred and process it further. Now, in this particular case only 
the dragstart and drop events were handled. And the drop event handler 
never used to get called. In other words dragging operation was 
successful but dropping operation was not.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.bipinjoshi.net/articles/9ce78d52-7927-4fce-9dbc-d0d3f2bd6f70.aspx" mce_href="http://www.bipinjoshi.net/articles/9ce78d52-7927-4fce-9dbc-d0d3f2bd6f70.aspx"&gt;http://www.bipinjoshi.net/articles/9ce78d52-7927-4fce-9dbc-d0d3f2bd6f70.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=10319205" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/bipinjoshi/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/bipinjoshi/archive/tags/HTML5/default.aspx">HTML5</category><category domain="http://weblogs.asp.net/bipinjoshi/archive/tags/Drag+and+Drop/default.aspx">Drag and Drop</category></item><item><title>Everyone else is doing it (incorrectly)!</title><link>http://weblogs.asp.net/jeff/archive/2013/05/18/everyone-else-is-doing-it-incorrectly.aspx</link><pubDate>Sat, 18 May 2013 20:51:12 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:10307075</guid><dc:creator>Jeff</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;em&gt;[This is actually a &lt;a href="http://jeffputz.com/blog/everyone-else-is-doing-it-incorrectly" target="_blank"&gt;repost&lt;/a&gt; from my personal blog, but I think the technical audience might “dig” it as well.]&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Innovation is hard. You can definitely foster it, but you can't really force it. It's completely fascinating when people innovate in a massively disruptive way. While you can't make innovation happen, it's something I try to strive for. There are certain ways that I've had a great deal of success innovating, and others where I haven't. Professionally, it's easy to get into the rut of doing things a certain way, because everyone else does it that way. The first step to doing it in a better way often requires questioning the establishment. While my inner rebel is all about that, it's also an exhausting practice.&lt;/p&gt;  &lt;p&gt;Coaching volleyball is one of those scenarios where the questioning comes easy. For example, before a match, you're given several minutes of court time to warm up (the actual time depends on the governing organization). Since I was in high school, that time was always used by coaches to send perfectly tossed balls into the air for hitting, while your one or two short defensive specialists tried to dig those hit balls. This results in a lot of &amp;quot;whoo-hoo's&amp;quot; and pleasure on the part of your athletes, but I wasn't sure if it was constructive.&lt;/p&gt;  &lt;p&gt;Attacking the ball is always step three in volleyball. Someone has to expertly pass the ball first, then someone has to set it for the hitter. Without those two things, there is no hitting. So after a season or two, I thought, why am I wasting time on this, especially when my kids can't pass to save their lives? So despite the protest of the kids (and parents, who always have the answers), I ditched the hitting lines. I put six kids on the other side of the net, and tossed balls in for them to pass, set and hit. I rotated them around. This exercised all of the skills necessary to score, including the ever important transition on and off the net. It was &lt;em&gt;real&lt;/em&gt;, core to the game, and made a huge difference. It also happened to be noisy and menacing in appearance, which freaked out the other team, so that was a plus.&lt;/p&gt;  &lt;p&gt;I tossed out what everyone else was doing, and tried something that seemed to better serve the scenario. I try to do this with all things in life. And yes, it can be exhausting questioning everything, especially if you end up where you started, and &amp;quot;everyone&amp;quot; had it right.&lt;/p&gt;  &lt;p&gt;It's a lot harder to innovate your way out of the norm in my line of work. In terms of the actual computer science, sure, there are a lot of things that have been thought to death and they're good ideas. It tends to be the process and the associated people issues that are harder to change. There is an important parallel though to the volleyball warm-up. It turns out that process is almost always wrought with wasted time for things that don't matter, that don't get to something real and valuable. Even in celebrated (capital &amp;quot;A&amp;quot;) Agile practices, teams have a hard time identifying the things they do that aren't adding value, let alone innovating.&lt;/p&gt;  &lt;p&gt;Innovation isn't easy, but you can get practice at it. It starts when you stop accepting sheep behavior and ask if there's a better way.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=10307075" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jeff/archive/tags/agile/default.aspx">agile</category><category domain="http://weblogs.asp.net/jeff/archive/tags/Career/default.aspx">Career</category><category domain="http://weblogs.asp.net/jeff/archive/tags/culture/default.aspx">culture</category><category domain="http://weblogs.asp.net/jeff/archive/tags/General+Software+Development/default.aspx">General Software Development</category></item><item><title>modern.ie</title><link>http://weblogs.asp.net/lichen/archive/2013/05/17/modern-ie.aspx</link><pubDate>Fri, 17 May 2013 01:33:21 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:10298491</guid><dc:creator>dotneteer</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;We are planning to update our very old web application so that it works better with modern web browsers. I have heard of &lt;a href="http://modern.ie"&gt;modern.ie&lt;/a&gt; in the past and decided to give it a try. The site has a scanner that can scan a URL entered by a user. Unfortunately, our site requires log-in before getting to the page we want to scan. Fortunately, the site also offers a &lt;a href="http://virtualization.modern.ie/vhd/modern.ie.zip?10e3374d847343a78531a3fd386598a8"&gt;downloadable scanner&lt;/a&gt; that we can use in our local development environment.&lt;/p&gt;  &lt;p&gt;I downloaded the scanner. It is packaged as a zip file. I unzipped the package and open the readme file. The tools requires node.js to work. Fortunately, it is fairly easy to setup the tool following the instructions. Firstly, download and install &lt;a href="http://nodejs.org/"&gt;node.js&lt;/a&gt;; accept all defaults. The setup will add Node.js to the path. Although Node.js is known for hosting asynchronous web applications, it is actually just a javascript executing environment. Next, I open the command prompt, change to the directory that I unzipped the modern.ie tool and run “node lib/service.js”. A node hosted web server is listening on port 1337 so we just need to open a web browser and points to &lt;a title="http://localhost:1337/" href="http://localhost:1337/"&gt;http://localhost:1337/&lt;/a&gt;. We can then enter the URL of a web page to scan. The scanner submits the data to modern.ie and a report is generated. The report is very good and it offers many suggestions and links that helps us to improve the page.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=10298491" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/lichen/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/lichen/archive/tags/Javascript/default.aspx">Javascript</category></item><item><title>Red Gate Is Looking For Feedback On Its ASP.NET MVC Web Development Education Website</title><link>http://weblogs.asp.net/paulomorgado/archive/2013/05/16/red-gate-is-looking-for-feedback-on-its-asp-net-mvc-web-development-education-website.aspx</link><pubDate>Thu, 16 May 2013 22:43:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:10298097</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>1</slash:comments><description>&lt;p align="justify"&gt;&lt;a title="redgate - ingeniously simple tools" href="http://www.red-gate.com/" target="_blank" mce_href="http://www.red-gate.com/"&gt;Red Gate&lt;/a&gt; is looking for feedback on its &lt;a title="Simple-Talk: Web Developers" href="http://webdev.simple-talk.com/" target="_blank" mce_href="http://webdev.simple-talk.com/"&gt;ASP.NET Web Development Education&lt;/a&gt; website.&lt;/p&gt;
&lt;p align="justify"&gt;Visit their website and answer the &lt;a title=".NET Publishing Feedback Survey" href="https://www.surveymk.com/s/B7GS522" target="_blank" mce_href="https://www.surveymk.com/s/B7GS522"&gt;survey&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=10298097" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/paulomorgado/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category><category domain="http://weblogs.asp.net/paulomorgado/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/paulomorgado/archive/tags/redgate/default.aspx">redgate</category><category domain="http://weblogs.asp.net/paulomorgado/archive/tags/Web/default.aspx">Web</category></item><item><title>70-484 exam: Essentials of Developing Windows Store Apps using C#</title><link>http://weblogs.asp.net/lduveau/archive/2013/05/15/70-484-exam-essentials-of-developing-windows-store-apps-using-c.aspx</link><pubDate>Wed, 15 May 2013 19:20:05 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:10292835</guid><dc:creator>pluginbaby</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Just got this one! Here is a little tip for you:   &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;While studying a new exam the first thing to do is to consult the “Skills Measured” section of the official page of Microsoft Learning website:   &lt;br /&gt;&lt;a href="http://www.microsoft.com/learning/en/us/Exam.aspx?ID=70-484#fbid=aUGT9o8UOSO?tab2" target="_blank"&gt;http://www.microsoft.com/learning/en/us/Exam.aspx?ID=70-484&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Better than that, &lt;a href="http://www.vic.ms/" rel="nofollow" target="_blank"&gt;Vitor Ciaramella&lt;/a&gt;, put together this nice sheet with direct hyperlinks to MSDN resources for each topics covered by the exam:    &lt;br /&gt;&lt;a href="http://www.vic.ms/microsoft/windows-8/exam-70-484-essentials-of-developing-windows-store-apps-using-c/"&gt;http://www.vic.ms/microsoft/windows-8/exam-70-484-essentials-of-developing-windows-store-apps-using-c/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=10292835" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/lduveau/archive/tags/Community+News/default.aspx">Community News</category><category domain="http://weblogs.asp.net/lduveau/archive/tags/Tips+and+Tricks/default.aspx">Tips and Tricks</category><category domain="http://weblogs.asp.net/lduveau/archive/tags/Training/default.aspx">Training</category><category domain="http://weblogs.asp.net/lduveau/archive/tags/Windows+8/default.aspx">Windows 8</category><category domain="http://weblogs.asp.net/lduveau/archive/tags/WinRT/default.aspx">WinRT</category></item><item><title>Come support us at TechEd 2013 and get awesome stuff!</title><link>http://blogs.iis.net/mvolo/archive/2013/05/15/come-support-us-at-teched-2013-and-get-awesome-stuff.aspx</link><pubDate>Wed, 15 May 2013 18:00:38 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:10321601</guid><dc:creator>The Official Microsoft IIS Site</dc:creator><slash:comments>0</slash:comments><description>Are you going to TechEd this year? Be sure to come see us, and get some awesome stuff - including an exclusive LeanSentry discount, and a chance to win a Microsoft Surface! We&amp;#39;ve been working hard to to bring better monitoring and production troubleshooting Read More......( read more ) Read More......(&lt;a href="http://blogs.iis.net/mvolo/archive/2013/05/15/come-support-us-at-teched-2013-and-get-awesome-stuff.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=10321601" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/iis/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/iis/archive/tags/IIS/default.aspx">IIS</category><category domain="http://weblogs.asp.net/iis/archive/tags/LeanSentry/default.aspx">LeanSentry</category><category domain="http://weblogs.asp.net/iis/archive/tags/TechEd/default.aspx">TechEd</category></item></channel></rss>