<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Mark Chouanard</title><link>http://markchouanard.com/</link><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/MarkChouanard" /><description>Design, Development and Life on the Web</description><language>en</language><generator>Tumblr (3.0; @chouanard)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/MarkChouanard" /><feedburner:info uri="markchouanard" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://tumblr.superfeedr.com/" /><image><link>http://markchouanard.com</link><url>http://chouanardcreative.com/Images/MAC_120_120.jpg</url><title>Mark Chouanard</title></image><item><title>Access IIS on Windows7 VM from the Mac OS</title><link>http://feedproxy.google.com/~r/MarkChouanard/~3/uhQzTtuWfHA/39426320201</link><category>IIS</category><category>Xcode</category><category>Visual Studio</category><category>development</category><category>mvc</category><category>web api</category><pubDate>Tue, 01 Jan 2013 16:47:00 PST</pubDate><guid isPermaLink="false">http://markchouanard.com/post/39426320201</guid><description>&lt;p&gt;&lt;strong&gt;Challenge&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Developing both native and web application components targeted to different platforms can prove to be challenging for developers running the Mac OS and Windows VM on the same physical machine.&lt;/p&gt;
&lt;p&gt;When developing a native iOS client application using Xcode on the Mac and an ASP.NET MVC web application using Visual Studio 2012 running on Windows Internet Information Services (IIS), I needed the ability to make a Web API call from Xcode&amp;#8217;s iOS Simulator on the Mac to the IIS web application running on the Win7 VM.&lt;/p&gt;
&lt;p&gt;With a few simple steps you can setup your Mac to allow http access between the Mac OS and the Windows VM to make development and testing much easier.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Windows7 VM (Parallels)&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;From the Windows Control Panel, open up the Windows Firewall client.&lt;/li&gt;
&lt;li&gt;From the Firewall client, click on &lt;em&gt;Advanced Settings&lt;/em&gt; and select &lt;em&gt;Inbound Rules&lt;/em&gt;.&lt;br/&gt;&lt;br/&gt;&lt;img alt="image" src="http://www.chouanard.com/images/blog/Posts/Mac-IIS-1.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/li&gt;
&lt;li&gt;Scroll down to the rule titled: &lt;em&gt;World Wide Web Services (HTTP Traffic-In)&lt;/em&gt;, right-click and select &lt;em&gt;Properties&lt;/em&gt;.&lt;br/&gt;&lt;br/&gt;&lt;img alt="image" src="http://www.chouanard.com/images/blog/Posts/Mac-IIS-3.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/li&gt;
&lt;li&gt;Set to &lt;em&gt;Enabled&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Open a Windows Command Prompt and type: &lt;em&gt;ipconfig&lt;/em&gt; to get your current IP address.&lt;br/&gt;&lt;br/&gt;&lt;img alt="image" src="http://www.chouanard.com/images/blog/Posts/Mac-IIS-2.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;&lt;u&gt;Mac OS&lt;br/&gt;&lt;/u&gt;&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Use the current IP address when calling the web application URL within your iOS code on the Mac.&lt;br/&gt;&lt;br/&gt;&lt;img alt="image" src="http://www.chouanard.com/images/blog/Posts/Mac-IIS-4.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/li&gt;
&lt;li&gt;Now you can access the IIS web server on the Win7 VM from any browser or web tool residing on the Mac.&lt;/li&gt;
&lt;/ol&gt;&lt;img src="http://feeds.feedburner.com/~r/MarkChouanard/~4/uhQzTtuWfHA" height="1" width="1"/&gt;</description><feedburner:origLink>http://markchouanard.com/post/39426320201</feedburner:origLink></item><item><title>Amazing Hickory-Smoked Grilled Turkey</title><link>http://feedproxy.google.com/~r/MarkChouanard/~3/0jZ8VEf55iA/36311927000</link><category>do-it-yourself</category><category>grilling</category><category>organic</category><pubDate>Thu, 22 Nov 2012 14:32:10 PST</pubDate><guid isPermaLink="false">http://markchouanard.com/post/36311927000</guid><description>&lt;p&gt;&lt;p class="p1"&gt;&lt;img src="http://www.chouanard.com/images/blog/Posts/GrillTurkey-9.jpg"/&gt;&lt;/p&gt;
&lt;p class="p1"&gt;Over the years, I&amp;#8217;ve tried many different ways of preparing our Thanksgiving turkey but none have produced a bird as succulent and delicious as charcoal grilling with hickory smoking chips.&lt;/p&gt;
&lt;p class="p1"&gt;Here&amp;#8217;s my can&amp;#8217;t miss, do-it-yourself guide to grilling the perfect bird.&lt;/p&gt;
&lt;p class="p1"&gt;&lt;strong&gt;Food Preparation&lt;/strong&gt;&lt;/p&gt;
&lt;p class="p1"&gt;We always prefer naturally grown, organic foods. Today&amp;#8217;s turkey is vegetatian fed and contains no antibiotics preservatives or added hormones.&lt;/p&gt;
&lt;p class="p1"&gt;Brining the turkey is the process of soaking the bird in a salt-water &amp;#8216;brine&amp;#8217; for 12-24 hours prior to cooking. There&amp;#8217;s many different opinions on whether the brining process actually contributes to cooking a moister, more tender turkey. After years of trying it both ways, I&amp;#8217;m convinced that brining is always the best way to go.&lt;/p&gt;
&lt;p class="p1"&gt;&lt;span&gt;The &lt;span class="s1"&gt;night before&lt;/span&gt; grilling&lt;/span&gt;, I mix up a simple brine concoction of mostly salt water, seasonings and vegetables. Use any brine recipe you&amp;#8217;d like, I happen to be partial to &lt;a href="http://www.marthastewart.com/343940/turkey-brine" title="Martha Stewart Turkey Brine" target="_blank"&gt;Matha Stewart&amp;#8217;s recipe&lt;/a&gt;.&lt;/p&gt;
&lt;p class="p1"&gt;Put the turkey inside doubled plastic cooking bags, inside a large cooking pot. Pour the brine mixture over the turkey, inside the cooking bags. Seal up the bags and place in the refrigerator overnight.&lt;/p&gt;
&lt;p class="p1"&gt;&lt;strong&gt;Grill Preparation&lt;/strong&gt;&lt;/p&gt;
&lt;p class="p1"&gt;I use a Weber, kettle-style, charcoal grill which works great for turkeys up to about 22 pounds. Today&amp;#8217;s turkey weighs in at a bit over 13 pounds which is a perfect size for a smaller gathering.&lt;/p&gt;
&lt;p class="p1"&gt;Before starting, get yourself a bag of decent quality charcoal briquettes and a bag of hickory smoking chips.&lt;/p&gt;
&lt;p class="p1"&gt;&lt;img src="http://www.chouanard.com/images/blog/Posts/GrillTurkey-1.jpg"/&gt;&lt;/p&gt;
&lt;p class="p1"&gt;Starting with a clean grill, fire up about 60-80 charcoal briquettes. I prefer to use a stovepipe charcoal starter which holds about 80 regular sized briquets (yes, I counted).&lt;/p&gt;
&lt;p class="p1"&gt;&lt;img src="http://www.chouanard.com/images/blog/Posts/GrillTurkey-2.jpg"/&gt;&lt;/p&gt;
&lt;p class="p1"&gt;When coals are mostly white hot (20-30 minutes), spread out evenly in a 12-16 inch diameter. Place clean grill grate directly over hot coals.&lt;/p&gt;
&lt;p class="p1"&gt;Prepare the smoking bags by filling two pieces of heavy duty aluminum foil (approximately 12&amp;#8221; x 24&amp;#8221;) with hickory chips. &lt;/p&gt;
&lt;p class="p1"&gt;&lt;img src="http://www.chouanard.com/images/blog/Posts/GrillTurkey-3.jpg"/&gt;&lt;/p&gt;
&lt;p class="p1"&gt;Fold the foil into 6&amp;#8221; x 6&amp;#8221; packets and make sever holes in the top of the foil.&lt;/p&gt;
&lt;p class="p1"&gt;Fully open the top and bottom vents on the gril.&lt;/p&gt;
&lt;p class="p1"&gt;&lt;strong&gt;The Grilling Process&lt;/strong&gt;&lt;/p&gt;
&lt;p class="p1"&gt;The general rule of thumb for grilling a turkey is approximately one hour per 5 pounds of bird. Using this formula, our 13 pound turkey should take a little over 2.5 hours to grill but depending on grill size, charcoal and even outdoor temperature, your actual cooking time will vary. I recommend using a meat thermometer to be sure you don&amp;#8217;t under or over cook your bird.&lt;/p&gt;
&lt;p class="p1"&gt;Remove the turkey from the brine mixture and pat dry.&lt;/p&gt;
&lt;p class="p1"&gt;Brush the turkey liberally with olive or grapeseed oil to prevent bird skin from sticking to grill.&lt;/p&gt;
&lt;p class="p1"&gt;Place bird directly onto grill, rolling slightly every 2 minutes until all sides of the turkey have kissed the grill grate and have a niced browned tone.&lt;/p&gt;
&lt;p class="p1"&gt;&lt;img src="http://www.chouanard.com/images/blog/Posts/GrillTurkey-4.jpg"/&gt;&lt;/p&gt;
&lt;p class="p1"&gt;Remove turkey and grate from the grill.&lt;/p&gt;
&lt;p class="p1"&gt;Add a few handfuls of briquets and throw on the foil smoking bags containing the hickory chips.&lt;/p&gt;
&lt;p class="p1"&gt;After 5-10 minutes, spread the charcoals around the outside edges of the grill, leaving the center of the grill open.&lt;/p&gt;
&lt;p class="p1"&gt;Place the smoking bags directly onto the hot coals on either side of the grill, leaving the center open.&lt;/p&gt;
&lt;p class="p1"&gt;&lt;img src="http://www.chouanard.com/images/blog/Posts/GrillTurkey-5.jpg"/&gt;&lt;/p&gt;
&lt;p class="p1"&gt;Place the grill grate onto the grill.&lt;/p&gt;
&lt;p class="p1"&gt;Put the turkey in a disposable foil pan or some rolled up heavy duty aluminum oil big enough to catch and contain the drippings.&lt;/p&gt;
&lt;p class="p1"&gt;&lt;img src="http://www.chouanard.com/images/blog/Posts/GrillTurkey-6.jpg"/&gt;&lt;/p&gt;
&lt;p class="p1"&gt;Pour 1 cup of water into the body cavity, place turkey onto grill and cover.&lt;/p&gt;
&lt;p class="p1"&gt;Check every 30 minutes. Baste the turkey and add additional coals as needed (depending on bird size and cooking time).&lt;/p&gt;
&lt;p class="p1"&gt;&lt;img src="http://www.chouanard.com/images/blog/Posts/GrillTurkey-7.jpg"/&gt;&lt;/p&gt;
&lt;p class="p1"&gt;Begin checking meat temperature well in advance of the predetermined cooking time. The grill should have a steady stream of sweet smelling hickory smoke for most of the cooking cycle.&lt;/p&gt;
&lt;p class="p1"&gt;&lt;img src="http://www.chouanard.com/images/blog/Posts/GrillTurkey-8.jpg"/&gt;&lt;/p&gt;
&lt;p class="p1"&gt;When the temperature deep within the breast reaches 160º F, remove the bird from the grill. Remove the turkey from cooking pan, cover with aluminum foil and let stand for 30-40 minutes before carving.&lt;/p&gt;
&lt;p class="p1"&gt;&lt;strong&gt;The Finale&lt;/strong&gt; &lt;/p&gt;
&lt;p class="p1"&gt;Our 13 pound turkey hit 160º F at exactly the 2 hour mark. After setting for 45 minutes, here&amp;#8217;s what we have to carve:&lt;/p&gt;
&lt;p class="p1"&gt;&lt;img src="http://www.chouanard.com/images/blog/Posts/GrillTurkey-9.jpg"/&gt;&lt;/p&gt;
&lt;p class="p1"&gt;This grilled turkey was simple to make and may be the very best we&amp;#8217;ve ever eaten. Give it a try yourself and let me know what you think. I can guarantee you won&amp;#8217;t be disappointed.&lt;/p&gt;
&lt;p class="p1"&gt;Bon appétit&lt;/p&gt;
&lt;p class="p1"&gt;&lt;img alt="Mark Chouanard" height="56" src="http://www.chouanard.com/images/blog/sig.png" width="160"/&gt;&lt;/p&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MarkChouanard/~4/0jZ8VEf55iA" height="1" width="1"/&gt;</description><feedburner:origLink>http://markchouanard.com/post/36311927000</feedburner:origLink></item><item><title>Executing Cross Domain POST Using jQuery and ASP.NET Web API</title><link>http://feedproxy.google.com/~r/MarkChouanard/~3/5JV1jzkZgNo/35052747409</link><pubDate>Mon, 05 Nov 2012 04:30:16 PST</pubDate><guid isPermaLink="false">http://markchouanard.com/post/35052747409</guid><description>&lt;p&gt;&lt;strong&gt;Challenge&lt;/strong&gt;&lt;/p&gt;
&lt;p class="p1"&gt;Many of us find ourselves developing and supporting basic HTML websites without the ability to do much, if any, server side programming on the hosting domain. One reoccurring requirement I see is to provide the user the ability to submit form information to a web service which could be used for simple contact, email or event sign-up processing. &lt;/p&gt;
&lt;p class="p1"&gt;The problem with executing this seemingly trivial task is the inability to POST data from a form on one domain to a web service residing on another domain. This is for good reason. Web browsers by default, do not allow XMLHttpRequest (Ajax) requests to be made from one domain to another. This is to prevent cross-site request forgery which can occur when a malicious website causes a user’s browser to perform an unwanted action on a trusted site for which the user is currently authenticated.&lt;/p&gt;
&lt;p class="p1"&gt;There are however, valid reasons to allow the use of this cross domain functionality which has led to the development of the &lt;a href="http://www.w3.org/TR/cors/" title="CORS" target="_blank"&gt;Cross-Origin Resource Sharing (CORS) specification&lt;/a&gt; from the &lt;a href="http://www.w3.org/" title="W3" target="_blank"&gt;World Wide Web Consortium (W3C)&lt;/a&gt;. This specification allows the server to process POST requests from the client based on the use of custom HTTP headers, as well as the browsers native ability to support the CORS standard. As of this writing, CORS is fully supported in the most current versions of Chrome, Firefox and Opera. CORS is partially supported in IE8 and above via the XDomainRequest object.&lt;/p&gt;
&lt;p class="p1"&gt;&lt;strong&gt;Objective&lt;/strong&gt;&lt;/p&gt;
&lt;p class="p1"&gt;My goal here was to build a simple web service using the new ASP.NET Web API that would receive and process contact information submitted from multiple websites. Each website would have a simple form containing Name, Email Address and a general comment type field. The user would fill out and submit the form which will POST to an ASP.NET Web API. The service would determine which domain the request came from and process it accordingly (logging to database, email response or forward, etc.).&lt;/p&gt;
&lt;p class="p1"&gt;&lt;strong&gt;Solution&lt;/strong&gt;&lt;/p&gt;
&lt;p class="p1"&gt;To accomplish this task, we&amp;#8217;ll need to employ the &lt;a href="http://www.w3.org/TR/cors/" title="CORS" target="_blank"&gt;Cross-Origin Resource Sharing Specification&lt;/a&gt;. I found &lt;a href="http://blogs.msdn.com/b/carlosfigueira/archive/2012/02/20/implementing-cors-support-in-asp-net-web-apis.aspx" title="CORS and ASP.Net API" target="_blank"&gt;a great article by Carlos Figueira&lt;/a&gt; describing in detail how you can overcome this cross domain challenge by using a custom MessageHandler in our WebAPI to add the CORS required HTTP Headers to the request. I&amp;#8217;ve also added my own twists on his solution and created a &lt;span class="s1"&gt;CrossDomainDemo application to demonstrate this functionality. This demo application is a solution containing two projects:&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;&lt;span class="s1"&gt;WebAPIApp is the application containing the Web API Controller w&lt;/span&gt;hich is called to process the form data posted from the client html site.&lt;/li&gt;
&lt;li&gt;&lt;span class="s1"&gt;SimpleWebApp is t&lt;/span&gt;he html web client from which the POST is executed.&lt;/li&gt;
&lt;/ol&gt;&lt;p class="p2"&gt;Here are the basic steps involved in creating this solution.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;SERVER SIDE&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p class="p1"&gt;&lt;strong&gt;Build the CORS MessageHandler&lt;/strong&gt;&lt;/p&gt;
&lt;p class="p1"&gt;I&amp;#8217;ve used Carlos Figueira&amp;#8217;s example to create the CorsHandler class. Each HTTP request is passed through a series of message handlers. The handler will then use the routing table to route the request to a Web API controller. Our CorsHandler will add the required headers which will enable the controller to process the cross-domain request successfully.&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net.Http;
using System.Threading.Tasks;
using System.Threading;
using System.Net;

namespace WebAPIApp.Handlers
{
    public class CorsHandler : DelegatingHandler
    {
        const string Origin = "Origin";
        const string AccessControlRequestMethod = "Access-Control-Request-Method";
        const string AccessControlRequestHeaders = "Access-Control-Request-Headers";
        const string AccessControlAllowOrigin = "Access-Control-Allow-Origin";
        const string AccessControlAllowMethods = "Access-Control-Allow-Methods";
        const string AccessControlAllowHeaders = "Access-Control-Allow-Headers";

        protected override Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            bool isCorsRequest = request.Headers.Contains(Origin);
            bool isPreflightRequest = request.Method == HttpMethod.Options;
            if (isCorsRequest)
            {
                if (isPreflightRequest)
                {
                    HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
                    response.Headers.Add(AccessControlAllowOrigin, request.Headers.GetValues(Origin).First());

                    string accessControlRequestMethod = request.Headers.GetValues(AccessControlRequestMethod).FirstOrDefault();
                    if (accessControlRequestMethod != null)
                    {
                        response.Headers.Add(AccessControlAllowMethods, accessControlRequestMethod);
                    }

                    string requestedHeaders = string.Join(", ", request.Headers.GetValues(AccessControlRequestHeaders));
                    if (!string.IsNullOrEmpty(requestedHeaders))
                    {
                        response.Headers.Add(AccessControlAllowHeaders, requestedHeaders);
                    }

                    TaskCompletionSource tcs = new TaskCompletionSource();
                    tcs.SetResult(response);
                    return tcs.Task;
                }
                else
                {
                    return base.SendAsync(request, cancellationToken).ContinueWith(t =&amp;gt;
                    {
                        HttpResponseMessage resp = t.Result;
                        resp.Headers.Add(AccessControlAllowOrigin, request.Headers.GetValues(Origin).First());
                        return resp;
                    });
                }
            }
            else
            {
                return base.SendAsync(request, cancellationToken);
            }
        }
    }
} &lt;/pre&gt;
&lt;p class="p1"&gt;&lt;strong&gt;Register the new MessageHandler&lt;/strong&gt;&lt;/p&gt;
&lt;p class="p1"&gt;Add the new CorsHandler to our list of message handlers from the Application_Start method in Global.asax&lt;/p&gt;
&lt;pre class="brush: c-sharp; highlight: [12]"&gt;        
       protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            // Use LocalDB for Entity Framework by default
            Database.DefaultConnectionFactory = new SqlConnectionFactory("Data Source=(localdb)\v11.0; Integrated Security=True; MultipleActiveResultSets=True");

            RegisterGlobalFilters(GlobalFilters.Filters);
            RegisterRoutes(RouteTable.Routes);

            BundleTable.Bundles.RegisterTemplateBundles();
            GlobalConfiguration.Configuration.MessageHandlers.Add(new CorsHandler());
        }
&lt;/pre&gt;
&lt;p class="p1"&gt;&lt;strong&gt;Build the Model&lt;/strong&gt;&lt;/p&gt;
&lt;p class="p1"&gt;Create a Contact class containing the 3 basic data elements passed in from the form.&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace WebAPIApp.Models
{
    public class Contact
    {
        public string Name { get; set; }
        public string Email { get; set; }
        public string Message { get; set; }
    }
}
&lt;/pre&gt;
&lt;p class="p1"&gt;&lt;strong&gt;Build an API Controller with Post Method&lt;/strong&gt;&lt;/p&gt;
&lt;pre class="brush: c-sharp; "&gt;[HttpPost]
public HttpResponseMessage Post(Contact contact)
{
    // Process the Form data
    // contact.Name, contact.Email and contact.Message

    // Send the client an HTML message indicating the status of processing the Form
    string responseMessageHTML = ('"Thank You! Thanks for contacting XYZ Company. Someone from our marketing team will be contacting '" + contact.Name + '", at '" + contact.Email);

    // Build an HTTPResponseMessage and return to client
    HttpResponseMessage responseMessage = new HttpResponseMessage();
    responseMessage.Content = new StringContent(responseMessageHTML);
    responseMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
    return responseMessage;
}
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;CLIENT SIDE&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p class="p1"&gt;&lt;strong&gt;Add the web form to your html page&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.chouanard.com/images/blog/Posts/CrossDomainExample.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Add the jQuery AJAX call&lt;/strong&gt;&lt;/p&gt;
&lt;pre class="brush: js;"&gt;$("#submit").click(function () {

    if ($("#contact-form").valid()) {
        var formData = $('#contact-form').serialize();
        $.support.cors = true;
        $.ajax({
            url: "http://apidomain/api/Contactform/Post",
            type: "POST",
            crossDomain: true,
            data: formData,
            dataType: "html",
            success: function (result) {
                $('#contactForm').html(result);
            },
            error: function (jqXHR, tranStatus, errorThrown) {
                $('#contactForm').html('"POST Error! Browser may not support &lt;a href="%22http://en.wikipedia.org/wiki/Cross-origin_resource_sharing#Browser_support" target="_blank"&gt;Cross Origin Resource Sharing&lt;/a&gt; ');
        });
    }
});
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Using these basic steps outlined above, I&amp;#8217;ve now successfully built and deployed a single web service which processes form data posted from multiple html sites.&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s a simple way to provide extended functionality when you don&amp;#8217;t have access to server side programming on the hosting site&amp;#8217;s domain or when you want to use a single web service to process and manage this common form data posted from multiple sites.&lt;/p&gt;
&lt;p&gt;For more information I would highly recommend &lt;a href="http://blogs.msdn.com/b/carlosfigueira/archive/2012/02/20/implementing-cors-support-in-asp-net-web-apis.aspx" title="CORS and ASP.Net API" target="_blank"&gt;Carlos Figueira&amp;#8217;s article&lt;/a&gt; and checkout the simple &lt;a href="https://github.com/chouanard/CrossDomainDemo" target="_blank"&gt;CrossDomainDemo project&lt;/a&gt; I&amp;#8217;ve built and published over on Github.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MarkChouanard/~4/5JV1jzkZgNo" height="1" width="1"/&gt;</description><feedburner:origLink>http://markchouanard.com/post/35052747409</feedburner:origLink></item><item><title>Solving SQL Server Management Studio Connection Errors: 64 and 10054</title><link>http://feedproxy.google.com/~r/MarkChouanard/~3/Vy5J7QH-w5A/34185779777</link><category>development</category><category>sql</category><category>sqlserver</category><pubDate>Tue, 23 Oct 2012 16:29:00 PDT</pubDate><guid isPermaLink="false">http://markchouanard.com/post/34185779777</guid><description>&lt;p&gt;I recently encountered an interesting problem when connecting SQL Server Management Studio client to a remote Windows Server 2008 R2 database server. When connecting using Windows Authentication, I received the following error message:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.chouanard.com/images/blog/Posts/SSMS-Error-10054.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;After some investigation, I discovered several potential causes but honed in on one in particular relating to &lt;a href="http://support.microsoft.com/?kbid=327825" target="_blank"&gt;kerberos&lt;/a&gt;. I found that there can be connection issues using Windows Authentication when the user belongs to &amp;#8216;too many&amp;#8217; Active Directory groups.&lt;/p&gt;
&lt;p&gt;Turns out the kerberos token (ticket to communicate) can actually become too big as a result of membership in a large number of AD groups. The solution to this problem is to increase the token size (default is 12000 bytes). Due to HTTP’s base64 encoding of authentication tokens limit, it&amp;#8217;s recommended that the token size also not exceed 48000 bytes.&lt;/p&gt;
&lt;p&gt;A simple fix for this issue is to set, or add, a &lt;span&gt;&lt;strong&gt;MaxTokenSize&lt;/strong&gt; Registry Key on the server offending database server. &lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;&lt;span&gt;Locate or create the following key in the registry:&lt;br/&gt;&lt;/span&gt;&lt;strong&gt;&lt;em&gt;System\CurrentControlSet\Control\Lsa\Kerberos\Parameters&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Add the following registry value:&lt;/span&gt;&lt;br/&gt;&lt;em&gt;&lt;span&gt;Name: &lt;strong&gt;MaxTokenSize&lt;/strong&gt;&lt;br/&gt;&lt;/span&gt;&lt;/em&gt;&lt;em&gt;&lt;span&gt;Data type: &lt;strong&gt;REG_DWORD&lt;/strong&gt;&lt;br/&gt;&lt;/span&gt;&lt;span&gt;Radix: &lt;strong&gt;Decimal&lt;/strong&gt;&lt;br/&gt;&lt;/span&gt;&lt;span&gt;Value: &lt;strong&gt;48000&lt;/strong&gt;&lt;/span&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Reboot server&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;I discovered this error on multiple database servers throwing both Error 64 and Error 10054. The above solution fixed all issues on all servers.&lt;/p&gt;
&lt;p&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MarkChouanard/~4/Vy5J7QH-w5A" height="1" width="1"/&gt;</description><feedburner:origLink>http://markchouanard.com/post/34185779777</feedburner:origLink></item><item><title>Changing Menu Case in Visual Studio 2012</title><link>http://feedproxy.google.com/~r/MarkChouanard/~3/AF2qNViy6Xg/29575576169</link><category>development</category><category>visual studio</category><pubDate>Thu, 16 Aug 2012 14:54:00 PDT</pubDate><guid isPermaLink="false">http://markchouanard.com/post/29575576169</guid><description>&lt;p&gt;&lt;img src="http://www.chouanard.com/images/blog/Posts/EmbraceTheCase.jpg"/&gt;&lt;/p&gt;
&lt;p class="p1"&gt;&lt;strong&gt;EMBRACE THE CASE?&lt;/strong&gt;&lt;/p&gt;
&lt;p class="p1"&gt;Much has been made of the menu styling for the Visual Studio 2012 IDE being in ALL CAPS. Although I am not a big fan of the all caps menu, I do think some tend to go a bit overboard with the intense level of criticism of this UI design decision.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.chouanard.com/images/blog/Posts/IDE-Before.jpg"/&gt;&lt;/p&gt;
&lt;p class="p2"&gt;Nevertheless, if you&amp;#8217;re not one who likes your IDE menu SHOUTING at you all day, there is a simple resolution to all of this. Install the &lt;a href="http://visualstudiogallery.msdn.microsoft.com/a83505c6-77b3-44a6-b53b-73d77cba84c8" title="VSCommands" target="_blank"&gt;VSCommands for Visual Studio 2012 extension&lt;/a&gt; from Squared Infinity.&lt;/p&gt;
&lt;p class="p1"&gt;&lt;strong&gt;Procedure&lt;/strong&gt;&lt;/p&gt;
&lt;p class="p1"&gt;1) From the VS2012 menu, select TOOLS &amp;#8212;&amp;gt; Extensions and Updates…&lt;/p&gt;
&lt;p class="p1"&gt;2) Go the the Visual Studio Gallery and search for &lt;em&gt;&amp;#8216;vscommands&amp;#8217;&lt;/em&gt;.&lt;/p&gt;
&lt;p class="p1"&gt;&lt;img src="http://www.chouanard.com/images/blog/Posts/IDE-Install.jpg"/&gt;&lt;/p&gt;
&lt;p class="p1"&gt;3) Download and install the extension, then restart VS2012.&lt;/p&gt;
&lt;p class="p1"&gt;4) From the VS2012 menu, select TOOLS &amp;#8212;&amp;gt; Options&lt;/p&gt;
&lt;p class="p1"&gt;5) The VSCommands options should now appear in your list&lt;/p&gt;
&lt;p class="p1"&gt;&lt;img src="http://www.chouanard.com/images/blog/Posts/IDE-Options.jpg"/&gt;&lt;/p&gt;
&lt;p class="p1"&gt;6) Click the Open Configuration button&lt;/p&gt;
&lt;p class="p1"&gt;7) Under IDE Enhancements, select Main Menu.&lt;/p&gt;
&lt;p class="p1"&gt;8) Change Main Menu letter case to Sentence Case and Save.&lt;/p&gt;
&lt;p class="p1"&gt;&lt;img src="http://www.chouanard.com/images/blog/Posts/IDE-Config.jpg"/&gt;&lt;/p&gt;
&lt;p class="p1"&gt;&lt;strong&gt;Result&lt;/strong&gt;&lt;/p&gt;
&lt;p class="p1"&gt;And there you have it:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.chouanard.com/images/blog/Posts/IDE-After.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;The menu should now appear in sentence case, as normal.&lt;/p&gt;
&lt;p&gt;There are several other interesting configuration options you may want to check out as well, so download the &lt;a href="http://visualstudiogallery.msdn.microsoft.com/a83505c6-77b3-44a6-b53b-73d77cba84c8" title="VSCommands" target="_blank"&gt;VSCommands for Visual Studio 2012 extensions&lt;/a&gt; today.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MarkChouanard/~4/AF2qNViy6Xg" height="1" width="1"/&gt;</description><feedburner:origLink>http://markchouanard.com/post/29575576169</feedburner:origLink></item><item><title>Feasible Multitasking: Technology Podcasts</title><link>http://feedproxy.google.com/~r/MarkChouanard/~3/ydjjlfPwGEQ/26642573904</link><category>productivity</category><category>technology</category><pubDate>Fri, 06 Jul 2012 11:46:06 PDT</pubDate><guid isPermaLink="false">http://markchouanard.com/post/26642573904</guid><description>&lt;p&gt;&lt;img src="http://www.chouanard.com/images/blog/Posts/Earbuds.jpg"/&gt;&lt;/p&gt;
&lt;p class="p1"&gt;As demands on our time increase from all areas of our lives and the technologies we work with on a daily basis continue to change at a dizzying pace, it becomes more and more of a challenge for us to stay on top of the technology industry landscape. The sheer number of new JavaScript libraries alone is enough to give you heartburn by the thought of not using the right framework on your next project or not being in-the-know with your hipster colleagues and uber-geek friends.&lt;/p&gt;
&lt;p class="p1"&gt;&lt;strong&gt;Feasible Multitasking&lt;/strong&gt;&lt;/p&gt;
&lt;p class="p1"&gt;In an excellent video presentation of his &lt;a href="http://www.hanselman.com/blog/ItsNotWhatYouReadItsWhatYouIgnoreVideoOfScottHanselmansPersonalProductivityTips.aspx" title="Scott Hanselman's Personal Productivity Tips" target="_blank"&gt;Personal Productivity Tips&lt;/a&gt;, &lt;a href="https://twitter.com/#!/shanselman" target="_blank"&gt;Scott Hanselman&lt;/a&gt; discusses the use of multitasking to improve productivity. Scott uses the term &amp;#8216;Feasible Multitasking&amp;#8217; to describe this intentional activity and gives other examples and tips on being a successful mutitasker. If you haven&amp;#8217;t seen Scott&amp;#8217;s video, I promise you that it is more than worth the 40 minutes is takes to watch.&lt;/p&gt;
&lt;p class="p1"&gt;Feasible multitasking is simply the art of increasing your productivity by doing simple, doable, ordinary things simultaneously. For example: reading the news on your iPad while commuting on public transportation, watching your favorite DVR&amp;#8217;d television show while running on the treadmill, or one of my favorites; listening to podcasts while commuting to work, working out in the gym or even cutting the lawn.&lt;/p&gt;
&lt;p class="p1"&gt;&lt;strong&gt;Technology Podcasts&lt;/strong&gt;&lt;/p&gt;
&lt;p class="p1"&gt;I start most weekdays with a 2 mile walk/run, after which I spend some time in the gym. I&amp;#8217;ve learned that this is an ideal time to listen to podcasts. On alternating days, I have a lengthy commute to offices located in one of two cities. This drive time provides another great opportunity for me to pull out the iPod and catch up on the latest technology news and web development chatter.&lt;/p&gt;
&lt;p class="p1"&gt;There&amp;#8217;s a lot of good podcasts available today, with great content on most any subject matter you can imagine, but I thought I&amp;#8217;d share with you my current list of favorite technology podcasts:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://5by5.tv/bigwebshow/" title="The Big Web Show" target="_blank"&gt;&lt;span class="headerLink"&gt;The Big Web Show&lt;/span&gt;&lt;br/&gt;&lt;/a&gt;Hosted by &lt;a href="https://twitter.com/#!/zeldman" target="_blank"&gt;Jeffrey Zeldman&lt;/a&gt;, the godfather of web standards and all things web, The Big Web Show features interesting, high profile guests from the web industry with a heavy emphasis on web design, typography and content strategy.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.thisdeveloperslife.com/" title="This Developer's Life" target="_blank"&gt;&lt;span class="headerLink"&gt;This Developer&amp;#8217;s Life&lt;/span&gt;&lt;/a&gt;&lt;br/&gt;This is an interesting and well done podcast geared toward software developers. Hosted by &lt;a href="https://twitter.com/#!/robconery" target="_blank"&gt;Rob Conery&lt;/a&gt; and &lt;a href="https://twitter.com/#!/shanselman" target="_blank"&gt;Scott Hanselman&lt;/a&gt;, This Developer&amp;#8217;s Life is a quirky but relavent discussion on issues important to developers. Single word episodes titles such as; Revolt, Obsession, Typo and Dinosaurs give you some idea of the range and flavor of this show. Only drawback with TDL is that new episodes seem to be few and far between.&lt;/p&gt;
&lt;p class="p1"&gt;&lt;a href="http://5by5.tv/amplified" title="Amplified" target="_blank"&gt;&lt;span class="headerLink"&gt;Amplified&lt;/span&gt;&lt;/a&gt;&lt;br/&gt;I&amp;#8217;ve recently discovered this podcast and have really grown to love it. Hosted by &lt;a href="https://twitter.com/#!/danbenjamin" target="_blank"&gt;Dan Benjamin&lt;/a&gt; and &lt;a href="https://twitter.com/#!/jdalrymple" target="_blank"&gt;Jim Dalrymple&lt;/a&gt;, Amplified focuses primarily on Apple technologies (Mac, iOS, iPhone, iPad, etc&amp;#8230;) but also has a fair amount of guitar, music and recording talk. What a fabulous combination! This is a great podcast for long commutes. The last few episodes have clocked in at more than 90 minutes each.&lt;/p&gt;
&lt;p class="p1"&gt;&lt;a href="http://5by5.tv/buildanalyze/" title="Build and Analyze" target="_blank"&gt;&lt;span class="headerLink"&gt;Build and Analyze&lt;/span&gt;&lt;/a&gt;&lt;br/&gt;Another &lt;a href="http://5by5.tv/" title="5 by 5" target="_blank"&gt;5by5&lt;/a&gt; production hosted by &lt;a href="https://twitter.com/#!/danbenjamin" target="_blank"&gt;Dan Benjamin&lt;/a&gt; and &lt;a href="https://twitter.com/#!/marcoarment" target="_blank"&gt;Marco Arment&lt;/a&gt; (founder of Instapaper) , Build and Analyze focuses largely on native and mobile mobile development and leans heavily toward the iOS platform.&lt;/p&gt;
&lt;p class="p1"&gt;&lt;a href="http://www.hanselminutes.com/" title="Hanselminutes" target="_blank"&gt;&lt;span class="headerLink"&gt;Hanselminutes&lt;/span&gt;&lt;/a&gt;&lt;br/&gt;This weekly podcast is probably my favorite in the technology genre. Geared primarily toward (but not limited to) the Microsoft development stack, &lt;a href="https://twitter.com/#!/shanselman" target="_blank"&gt;Scott Hanselman&amp;#8217;s&lt;/a&gt; weekly show covers a wide range of relevant topics of interest to anyone in the technology industry. Also most likely the longest running of the bunch, Hanselminutes is at show #325 of this writing. If there&amp;#8217;s only one podcast on this list you&amp;#8217;re able to work into your rotation, this is definitely the one.&lt;/p&gt;
&lt;p class="p1"&gt;&lt;a href="http://herdingcode.com/" title="Herding Code" target="_blank"&gt;&lt;span class="headerLink"&gt;Herding Code&lt;/span&gt;&lt;/a&gt;&lt;br/&gt;Focused on Microsoft development technologies, Herding code covers a wide range of software development topics and is group hosted by &lt;a href="https://twitter.com/#!/OdeToCode" target="_blank"&gt;K. Scott Allen&lt;/a&gt;, &lt;a href="https://twitter.com/#!/kevindente" target="_blank"&gt;Kevin Dente&lt;/a&gt;, &lt;a href="https://twitter.com/#!/lazycoder" target="_blank"&gt;Scott Koon&lt;/a&gt; and &lt;a href="https://twitter.com/#!/jongalloway" target="_blank"&gt;Jon Galloway&lt;/a&gt;.&lt;/p&gt;
&lt;p class="p1"&gt;&lt;a href="http://5by5.tv/webahead" title="The Web Ahead" target="_blank"&gt;&lt;span class="headerLink"&gt;The Web Ahead&lt;/span&gt;&lt;/a&gt;&lt;br/&gt;This is another &lt;a href="http://5by5.tv/" title="5 by 5" target="_blank"&gt;5by5&lt;/a&gt; weekly podcast, hosted by &lt;a href="https://twitter.com/#!/jensimmons" target="_blank"&gt;Jen Simmons&lt;/a&gt; along with many high profile industry guests. The Web Ahead focuses on web development tools and technologies along with the most current trends in web design.&lt;/p&gt;
&lt;p class="p1"&gt;&lt;strong&gt;Wrap Up&lt;/strong&gt;&lt;/p&gt;
&lt;p class="p1"&gt;Feasible multitasking can be a great way to improve your personal productivity and is most likely something you already do in some form or fashion. Multitasking while listening to podcasts is an easy way to efficiently and effectively utilize our time to expand our knowledge and remain current with our ever changing industry.&lt;/p&gt;
&lt;p class="p1"&gt;I believe the challenge for us is to become more intentional about this activity and to use it as an opportunity to gain knowledge and grow as technical professionals and realize improvement in other areas of our lives.&lt;/p&gt;
&lt;p class="p1"&gt;&lt;img alt="Mark Chouanard" height="56" src="http://www.chouanard.com/images/blog/sig.png" width="160"/&gt;&lt;/p&gt;
&lt;p class="p1"&gt;Do you utilize feasible multitasking? What are the activities and best times for you to multitask? Have a favorite technology podcast you&amp;#8217;d like to share?&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MarkChouanard/~4/ydjjlfPwGEQ" height="1" width="1"/&gt;</description><feedburner:origLink>http://markchouanard.com/post/26642573904</feedburner:origLink></item><item><title>Using Web Fonts In Your ASP.NET MVC Application</title><link>http://feedproxy.google.com/~r/MarkChouanard/~3/jqnGM5cUmxc/25542393378</link><category>typography</category><category>design</category><category>MVC</category><category>ux</category><pubDate>Wed, 20 Jun 2012 18:00:00 PDT</pubDate><guid isPermaLink="false">http://markchouanard.com/post/25542393378</guid><description>&lt;p&gt;&lt;img alt="image" src="http://www.chouanard.com/images/blog/Posts/WebFontsHeader.jpg"/&gt;&lt;/p&gt;
&lt;p class="p1"&gt;&lt;strong&gt;Typography in Web Design&lt;/strong&gt;&lt;/p&gt;
&lt;p class="p2"&gt;For many hardcore developers, the design of a web application may be no more than an afterthought. Unless they have the luxury of working with a designer, or they themselves have a keen sense for design, the developer can easily overlook the need or importance of typography and focus on only the basic visual or graphical design elements that go into building a web application.&lt;/p&gt;
&lt;p class="p2"&gt;This may be why HTML/CSS Frameworks like Twitter Bootstrap, HTML5 Boilerplate and 52 Framework are becoming more and more popular today. These frameworks can provide a quick and easy way to build nice looking web applications without spending much time on the design process. But even beyond making a website or application visually appealing, typography is most likely the last thing many developers think about. &lt;/p&gt;
&lt;p class="p2"&gt;Typography can be a great way to enhance the visual appearance of your application and improve the overall user experience. Selecting the appropriate font types, weights and stylings can help convey ideas, importance and emotion to the user. It can also improve the readability and comprehension of your content and greatly enhance usability and the overall quality of your design.&lt;/p&gt;
&lt;p class="p1"&gt;&lt;strong&gt;Choosing and Using Fonts&lt;/strong&gt;&lt;/p&gt;
&lt;p class="p2"&gt;The challenge with selecting fonts for the web is knowing how they&amp;#8217;ll actually render for the user. For the fonts to render as intended by the designer, the browser must have access to the dependent font files which may or may not be available depending on the operating system in which the browser is running. &lt;/p&gt;
&lt;p class="p2"&gt;For many years, web designers focused on using only the fonts which were likely to be present on a wide range of computers. Those considered &amp;#8216;web-safe&amp;#8217; were: &lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Arial&lt;/li&gt;
&lt;li&gt;Courier New&lt;/li&gt;
&lt;li&gt;Helvetica&lt;/li&gt;
&lt;li&gt;Times New Roman&lt;/li&gt;
&lt;li&gt;Trebuchet&lt;/li&gt;
&lt;li&gt;Georgia&lt;/li&gt;
&lt;li&gt;Verdana&lt;/li&gt;
&lt;/ul&gt;&lt;p class="p2"&gt;This short list offered little variety to the designer. Work arounds for this limitation included using images of text or embedded replacement techniques which required a browser plug-in (can you say Flash?). The problem with both of these methods was that the text in this form was not semantic, selectable or searchable.&lt;/p&gt;
&lt;p class="p1"&gt;&lt;strong&gt;Enter Web Fonts&lt;/strong&gt;&lt;/p&gt;
&lt;p class="p2"&gt;One solution to this limitation was the development of web fonts, which could be available on any platform and served from an http request. In addition to having accessibility to a much wider range of typefaces, web fonts are also semantic, selectable, searchable and translatable into other languages.  And because most all of today&amp;#8217;s browsers support the use of web fonts, they can be reliably rendered on most any platform.&lt;/p&gt;
&lt;p class="p2"&gt;&lt;strong&gt;Integrating Web Fonts in Your ASP.NET MVC Web Application&lt;/strong&gt;&lt;/p&gt;
&lt;p class="p2"&gt;So, how can you use web fonts in your ASP.NET MVC application? Here&amp;#8217;s a simple, step-by-step procedure for adding web fonts to a generic ASP.NET MVC Internet application.&lt;/p&gt;
&lt;p&gt;1) Choose a font service. There&amp;#8217;s a growing list of web font services and providers which offer a wide array of free and paid for services. A few of the more popular services, in no particular order, would be:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://google.com/webfonts" title="Google Web Fonts" target="_blank"&gt;Google Web Fonts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://fonts.com/web-fonts" title="Fonts.com" target="_blank"&gt;Fonts.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://typekit.com/" title="Typekit" target="_blank"&gt;Typekit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://fontsquirrel.com/" title="Font Squirrel" target="_blank"&gt;Font Squirrel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://webtype.com/" title="Webtype" target="_blank"&gt;Webtype&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://fontdeck.com/" title="Fontdeck" target="_blank"&gt;Fontdeck&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://webink.com/" title="WebINK" target="_blank"&gt;WebINK&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p class="p1"&gt;I have a subscription to Typekit which I use for all of my web projects. For the purposes of this demonstration I&amp;#8217;ll be using Typekit, but know that most all other font services work basically the same way.&lt;/p&gt;
&lt;p class="p1"&gt;2) Select the desired font. Typekit has a large library of available fonts and a rich user interface which allows you to see how the font will render. You can easily browse the font families by properties, classification or recommended use. For this demonstration, I&amp;#8217;ve selected Bistro Script Web.&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://www.chouanard.com/images/blog/Posts/TypeKit1.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;3) Generate your JavaScipt code provided by your font service:&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://www.chouanard.com/images/blog/Posts/TypeKit2.jpg"/&gt;&lt;/p&gt;
&lt;p&gt; 4) Copy the JavaScript snippet into the &amp;lt;head&amp;gt; tag of your view engine&amp;#8217;s _Layout.cshtml (Razor) or Site.Master (ASPX) file.&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://www.chouanard.com/images/blog/Posts/VS12-1.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;5) Generate your css selectors for the desired font families:&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://www.chouanard.com/images/blog/Posts/TypeKit3.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;6) Add the css code into the Site.css file. For this example, I&amp;#8217;ll change the font-family for the entire application by adding my &amp;#8220;bistro-script-web&amp;#8221; font to the css selector for the body tag:&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://www.chouanard.com/images/blog/Posts/VS12-2.jpg"/&gt;&lt;/p&gt;
&lt;p class="notetext"&gt;NOTE: The generic &amp;#8216;cursive&amp;#8217; font is set as a fallback font in the unlikelihood the primary font is unable to render correctly. &lt;/p&gt;
&lt;p&gt;And that&amp;#8217;s all there is to it. Now, instead of the default font-family: &amp;#8221;Segoe UI&amp;#8221; which renders the page like this:&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://www.chouanard.com/images/blog/Posts/DefaultFont.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;You can see the web application now uses the Typekit &amp;#8220;Bistro Script Web&amp;#8221; font which renders like this:&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://www.chouanard.com/images/blog/Posts/WebFont.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;Now of course in the real world, I&amp;#8217;d never recommend using a script font like this for an entire application. The point of this exercise is to easily show the difference between how the default font and web font render in a browser and to demonstrate how easy it is to implement web fonts into your projects.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The availability of web fonts opens up a wide range of possibilities for web designers and developers to use typography to enhance their web designs and to clearly deliver content and improve usability. As I hope you can see from this simple demonstration, implementing web fonts in an ASP.NET MVC web application is quick and easy. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; This article has been translated to&lt;a href="http://science.webhostinggeeks.com/web-fontovi" target="_blank"&gt;Serbo-Croatian&lt;/a&gt; by Anja Skrba from &lt;a href="http://webhostinggeeks.com/" target="_blank"&gt; Webhostinggeeks.com&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MarkChouanard/~4/jqnGM5cUmxc" height="1" width="1"/&gt;</description><feedburner:origLink>http://markchouanard.com/post/25542393378</feedburner:origLink></item><item><title>Thoughts on CodeStock 2012</title><link>http://feedproxy.google.com/~r/MarkChouanard/~3/mGubxoXvq1s/25333371132</link><category>CodeStock</category><category>technology</category><category>development</category><pubDate>Sun, 17 Jun 2012 18:45:00 PDT</pubDate><guid isPermaLink="false">http://markchouanard.com/post/25333371132</guid><description>&lt;p&gt;&lt;img src="http://www.chouanard.com/images/blog/Posts/CodeStock2012.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;Attending technical conferences and events can be a great way to remain current with the software development industry&amp;#8217;s continually changing technologies and expanding list of latest-and-greatest, must-haves, and gotta-be-using tools, libraries and frameworks. Billed as a two day event for technology and information exchange, created by the community, for the community, CodeStock 2012 didn&amp;#8217;t disappoint.&lt;/p&gt;
&lt;p&gt;Software developers, IT professionals, and entrepreneurs from a wide variety of technical industries gathered at the University of Tennessee&amp;#8217;s Conference Center in Knoxville to listen, learn and share their knowledge and experiences through both formal talks and presentations as well as impromptu conversations before and after sessions, over lunch or in the hallways between the sessions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Content is King&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This was my first year attending CodeStock and I wasn&amp;#8217;t really sure what to expect going in. In all honesty, my expectations weren&amp;#8217;t very high, in part, due to the very low registration fee of $85, only $60 if you registered before mid-April. During the course of my career, I&amp;#8217;ve attended many large scale events such as &lt;a href="http://www.oracle.com/javaone/index.html" title="JavaOne" target="_blank"&gt;JavaOne&lt;/a&gt; and &lt;a href="http://www.microsoft.com/events/mix/" title="MIX" target="_blank"&gt;MIX&lt;/a&gt; where the costs were much higher as were the attendance, venue profiles and production values alike. After all, how much value could you really get from a $60 technical conference?&lt;/p&gt;
&lt;p&gt;So with the low cost to attend this two-day event, I was happy to see the variety of relevant, high quality sessions and broad spectrum of subject matter being presented. The speakers at the sessions I attended, had a noticeably wide range of skills and experiences presenting to technical audiences. Some were very polished and for a few it was obvious it was their first time presenting at an event of this kind. All did a good job of communicating their material, engaging the audience and answering questions. A conference like CodeStock would a great venue for someone that has the interest and desire to get started speaking at technical events.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Highlights and Takeaways&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Some of the session highlights and takeaways for me from this year&amp;#8217;s CodeStock were:&lt;/p&gt;
&lt;p&gt;&lt;u&gt;Thinking in Patterns with Matt Ruma&lt;/u&gt; (&lt;a href="https://twitter.com/#!/mattruma" title="Matt Ruma" target="_blank"&gt;@mattruma&lt;/a&gt;)&lt;br/&gt;An interesting presentation on recognizing patterns in our everyday lives and how patterns are discovered and not created. I thought Matt did a nice job of describing several pattern families, reviewing the pro&amp;#8217;s and perceived con&amp;#8217;s of using patterns, and laying out a solid case for using patterns in software development and developing your own pattern library.&lt;/p&gt;
&lt;p class="p1"&gt;&lt;u&gt;What&amp;#8217;s New in .NET 4.5 with Layla Driscoll&lt;/u&gt; (&lt;a href="https://twitter.com/#!/layladriscoll" title="Layla Driscoll" target="_blank"&gt;@layladriscoll&lt;/a&gt;)&lt;br/&gt;A nice presentation from Layla Driscoll on some of the newest features of the .NET 4.5 Framework along with with a live demonstration using the Web API, Entity Framework migration and asynchronous methods to assemble into a useable, Metro style UI application. This session provided a good overview of these new features including a demonstration of what it takes to put them all together.&lt;/p&gt;
&lt;p class="p1"&gt;&lt;u&gt;Awesome Web Apps With Knockout.js and SignalR with Josh Carroll&lt;/u&gt; (&lt;a href="https://twitter.com/#!/@jwcarroll" title="Josh Carroll" target="_blank"&gt;@jwcarroll&lt;/a&gt;)&lt;br/&gt;In perhaps the most entertaining and informative session I attended, Josh Carroll demonstrated the use of the Knockout.js JavaScript framework and the SignalR asynchronous library for .NET. Josh put together a great demo example using these technologies in a real world way. His code is &lt;a href="https://github.com/jwcarroll/KanBan.Demo" title="KanBan Demo Code" target="_blank"&gt;available on GitHub&lt;/a&gt; and you can see the application at &lt;a href="http://kanbandemo.apphb.com" title="KanBan Demo" target="_blank"&gt;&lt;a href="http://kanbandemo.apphb.com" target="_blank"&gt;http://kanbandemo.apphb.com&lt;/a&gt;&lt;/a&gt;. I came to this session knowing very little about either technology but knowing that they were (as Josh did a great job of humorously playing up) all the rage which all the &amp;#8216;hipsters&amp;#8217; will be using. I left this session wanting to learn more and thinking about opportunities to implement these technologies on future projects.&lt;/p&gt;
&lt;p class="p1"&gt;&lt;u&gt;Single Page Applications With ASP.NET MVC4 with Roberto Hernandez&lt;/u&gt; (&lt;span class="s1"&gt;&lt;a href="http://twitter.com/hernandezrobert" target="_blank"&gt;@hernandezrobert&lt;/a&gt;) &lt;br/&gt;There&amp;#8217;s a lot of attention today being focused on building highly responsive web applications that have a native mobile or desktop user experience. Roberto presented a step-by-step demonstration of building an SPA using ASP.NET MVC4 along with several of the newer features Visual Studio 12 provides and even included the Knockout.js framework. I thought he did a great job of demonstrating how to wire up all the pieces and utilizing the features of the Visual Studio IDE to build a single page application.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;Microsoft Hosted Pre-Conference Events&lt;/u&gt;&lt;br/&gt;In addition to the two days of CodeStock sessions, there were two, full day, pre-conference events hosted by Microsoft; Windows Azure Kick Start Developer Training and the &lt;a href="http://chcr.tv/MTZMo6" title="Windows 8 Developer Camp" target="_blank"&gt;Windows 8 Developer Camp&lt;/a&gt; presented by Jennifer Marsman (&lt;a href="https://twitter.com/#!/jennifermarsman" title="Jennifer Marsman" target="_blank"&gt;&lt;span class="s1"&gt;@&lt;/span&gt;jennifermarsman&lt;/a&gt;). I had the opportunity to attend the Windows 8 event and previously &lt;a href="http://chcr.tv/MTZMo6" title="Windows 8 Developer Camp" target="_blank"&gt;posted some of my notes&lt;/a&gt; from this session.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Final Thoughts&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I thought that the event organizers and sponsors did a great job of putting things together and coordinating the venue with all the sessions and panel discussions as well as snacks, drinks and lunches. The logistics of the daily sessions at the conference center, the after hours events and the hotel accommodations were also nicely done.&lt;/p&gt;
&lt;p&gt;The one and only drawback or negative comment I could think of was that the room size for some of the sessions was a bit too small for the size of the audience. This forced people to sit on the floor or not get into the room at all. I&amp;#8217;m sure this is a common issue for events like this where you can&amp;#8217;t always accurately gauge the interest of a particular subject or session. Aside from that, the event seemed to go off without a noticeable hitch.&lt;/p&gt;
&lt;p&gt;So was CodeStock 2012 worth the $60, two days and 3.5 hour drive from Nashville? Absolutely! This two-day event, along with the one-day pre-conference session was well worth the cost, time spent and effort to get there.  The organizers did a great job of putting together an agenda which covered a wide range on technologies and topics that are of great interest to our technical community today.&lt;/p&gt;
&lt;p&gt;Watch the &lt;a href="http://codestock.org/" title="CodeStock" target="_blank"&gt;CodeStock&lt;/a&gt; site for the announcement of next year&amp;#8217;s event dates and to get in on the early registration. You&amp;#8217;ll be glad you did.&lt;/p&gt;
&lt;p&gt;See you next year at CodeStock 2013!&lt;/p&gt;
&lt;p class="p1"&gt;&lt;img alt="Mark Chouanard" height="56" src="http://www.chouanard.com/images/blog/sig.png" width="160"/&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MarkChouanard/~4/mGubxoXvq1s" height="1" width="1"/&gt;</description><feedburner:origLink>http://markchouanard.com/post/25333371132</feedburner:origLink></item><item><title>Windows 8 Developer Camp</title><link>http://feedproxy.google.com/~r/MarkChouanard/~3/HyLNRvBfEb4/25126198798</link><category>Metro</category><category>UX</category><category>Windows 8</category><category>Design</category><pubDate>Thu, 14 Jun 2012 17:34:00 PDT</pubDate><guid isPermaLink="false">http://markchouanard.com/post/25126198798</guid><description>&lt;p&gt;&lt;img src="http://www.chouanard.com/images/blog/Posts/Windows8DevCamp.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;Today, I had the opportunity to attend the Windows 8 Developer Camp in preparation for tomorrow&amp;#8217;s CodeStock 2012 kickoff in Knoxville, TN. The event was sponsored by Microsoft and presented by &lt;a href="http://blogs.msdn.com/jennifer" title="Jennifer Marsman" target="_blank"&gt;Jennifer Marsman&lt;/a&gt;, Principal Developer Evangelist with Microsoft. The all-day session was packed full of both lecture and hands-on lab work and was a great introduction to developing applications on the Windows 8 platform.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Introducing Metro&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The most interesting and informative aspect of the session for me was the heavy emphasis on the &amp;#8216;Touch First&amp;#8217; approach used by Windows 8 to better optimize applications across a wide variety of form factors such as slates, tablets, laptops and desktops. The &amp;#8216;Metro&amp;#8217; design language is at the core of this approach. &lt;/p&gt;
&lt;p class="p1"&gt;Metro is intended to provide an instinctive and natural user experience. It employs touch, navigation, branding and commanding design patterns. A great resource for for designing Metro applications with detailed design and UX guidelines, including Photoshop templates can be found at &lt;a href="http://design.windows.com" title="Metro Design Resources" target="_blank"&gt;&lt;a href="http://design.windows.com" target="_blank"&gt;http://design.windows.com&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class="p1"&gt;&lt;strong&gt;Metro Design Principals&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Content should always comes first (content before chrome)&lt;/li&gt;
&lt;li&gt;Immerse your users in the content&lt;/li&gt;
&lt;li&gt;Keep the most relevant elements on screen and minimize distractions&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Layout&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Give content breathing room&lt;/li&gt;
&lt;li&gt;Create intentional white space&lt;/li&gt;
&lt;li&gt;Remove lines and boxes for organizing groups of content&lt;/li&gt;
&lt;li&gt;Use typography to create sense of structure and hierarchy&lt;/li&gt;
&lt;li&gt;Fixed font sizes and weights will convey feeling and importance&lt;/li&gt;
&lt;li&gt;Let content flow from edge to edge&lt;/li&gt;
&lt;li&gt;Pan only on single axis to create stability&lt;/li&gt;
&lt;li&gt;Don&amp;#8217;t forget ergonomics using portrait or horizontal appropriately&lt;/li&gt;
&lt;/ul&gt;&lt;p class="p1"&gt;&lt;strong&gt;&lt;span class="s1"&gt;Interaction&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Integrate commands into the content&lt;/li&gt;
&lt;li&gt;Leverage the edge (left, right, top and bottom)&lt;/li&gt;
&lt;li&gt;Provide commands contextually using the App bar and Charms bar&lt;/li&gt;
&lt;/ul&gt;&lt;p class="p1"&gt;&lt;strong&gt;&lt;span class="s1"&gt;Navigation&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Views should be about where you are, not where you could be&lt;/li&gt;
&lt;li&gt;Integrate navigational elements into the content&lt;/li&gt;
&lt;li&gt;Hierarchical or Flat navigational patterns&lt;/li&gt;
&lt;li&gt;Make heavy but appropriate use of semantic zoom&lt;/li&gt;
&lt;/ul&gt;&lt;p class="p1"&gt;&lt;strong&gt;&lt;span class="s1"&gt;Fast and Fluid&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Continuity through motion&lt;/li&gt;
&lt;li&gt;Use motion and animation to tell the story&lt;/li&gt;
&lt;li&gt;Built in controls exist in Visual Studio templates&lt;/li&gt;
&lt;/ul&gt;&lt;p class="p1"&gt;&lt;strong&gt;&lt;span class="s1"&gt;Design for Touch First&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Keep hands and fingers in mind&lt;/li&gt;
&lt;li&gt;Controls should be where users can easily use them&lt;/li&gt;
&lt;li&gt;Provide visual feedback&lt;/li&gt;
&lt;li&gt;Take advantage of sliding interactions&lt;/li&gt;
&lt;li&gt;Pan 1-axis only&lt;/li&gt;
&lt;/ul&gt;&lt;p class="p1"&gt;&lt;strong&gt;&lt;span class="s1"&gt;Snap and Scale Beautifully&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Design for multiple views or layouts (a snap view is required)&lt;/li&gt;
&lt;li&gt;Snapping is built into Windows 8 scenario&lt;/li&gt;
&lt;li&gt;A great snapped view keeps your app on the screen&lt;/li&gt;
&lt;li&gt;Design a purposeful snapped state which maintains state &lt;/li&gt;
&lt;li&gt;Design for wide range of screen sizes and resolutions&lt;/li&gt;
&lt;li&gt;Use fluid layouts to optimize real estate&lt;/li&gt;
&lt;li&gt;Scale to fit fixed layouts&lt;/li&gt;
&lt;li&gt;Use SVG or provide 3 asset sizes (100%, 140% and 180%)&lt;/li&gt;
&lt;/ul&gt;&lt;p class="p1"&gt;&lt;strong&gt;&lt;span class="s1"&gt;Use the Right Contracts&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Leverage other apps to complete scenarios&lt;/li&gt;
&lt;li&gt;Charms provide consistent invocation model&lt;/li&gt;
&lt;li&gt;Share as source and/or target&lt;/li&gt;
&lt;li&gt;Leverage search to your content from anywhere in Windows&lt;/li&gt;
&lt;li&gt;Place all application settings under one roof&lt;/li&gt;
&lt;li&gt;Keep it simple, minimize number of settings&lt;/li&gt;
&lt;/ul&gt;&lt;p class="p1"&gt;&lt;strong&gt;&lt;span class="s1"&gt;Invest in a Great Tile&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Tiles are the front door to your application&lt;/li&gt;
&lt;li&gt;Use secondary tiles to promote interesting content&lt;/li&gt;
&lt;li&gt;Provide Pin command when content is pinnable&lt;/li&gt;
&lt;/ul&gt;&lt;p class="p1"&gt;&lt;strong&gt;&lt;span class="s1"&gt;Connected and Alive&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Live tiles draw users to your app&lt;/li&gt;
&lt;li&gt;Cycle through last 5 updates&lt;/li&gt;
&lt;li&gt;Toast notifications deliver transient messages outside app context&lt;/li&gt;
&lt;li&gt;Use for time sensitive information&lt;/li&gt;
&lt;li&gt;Use only where needed&lt;/li&gt;
&lt;/ul&gt;&lt;p class="p1"&gt;&lt;strong&gt;&lt;span class="s1"&gt;Roam to The Cloud&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Maintains state and preferences across machines&lt;/li&gt;
&lt;li&gt;Preferences maintained in users account&lt;/li&gt;
&lt;li&gt;Users can continue tasks across devices by roaming app data&lt;/li&gt;
&lt;li&gt;Roaming is best for user preferences, links and small data files&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Overall, a great session and great presenter. I learned a lot about developing for the Windows 8 platform and am now excited to jump in with both feet. The Windows 8 Developer Camp was well worth the extra day spent in Knoxville and a great warm-up for CodeStock 2012.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MarkChouanard/~4/HyLNRvBfEb4" height="1" width="1"/&gt;</description><feedburner:origLink>http://markchouanard.com/post/25126198798</feedburner:origLink></item><item><title>Test Your Responsive Web Design With The Responsinator</title><link>http://feedproxy.google.com/~r/MarkChouanard/~3/lERf0Qavv-0/24579590866</link><category>Mobile</category><category>Design</category><category>Development</category><category>Responsive</category><pubDate>Wed, 06 Jun 2012 18:40:17 PDT</pubDate><guid isPermaLink="false">http://markchouanard.com/post/24579590866</guid><description>&lt;p&gt;&lt;img src="http://www.chouanard.com/images/blog/Posts/TheResponsinator.jpg"/&gt;&lt;/p&gt;
&lt;p class="p1"&gt;Web analytics and usage statistics continue to show the meteoric rise in the use of mobile devices on the web, creating the need to develop websites that dynamically respond and adapt to a widening number of display sizes across an array of mobile devices. &lt;/p&gt;
&lt;p class="p1"&gt;One of the biggest challenges when coding the responsive design is knowing how it will look across multiple devices and viewports. A few months back, I came across a handy tool which can help both the designer and developer effectively create a responsive website.&lt;/p&gt;
&lt;p class="p1"&gt;&lt;a href="http://www.responsinator.com/" title="The Responsinator" target="_blank"&gt;The Responsinator&lt;/a&gt; is a simple, easy to use web tool which can help you optimize your responsive design and visualize how your site responds on a variety of today&amp;#8217;s most popular mobile devices. This tool works great for testing the breakpoints of your media queries and seeing how font and image resizing or fluid grid and layout changes will look on devices displayed in both portrait and landscape modes. You can also evaluate your fixed width sites by simply adding &lt;em&gt;&amp;amp;fixed_width=x&lt;/em&gt; to the end of the URL where x is the fixed width of your site.&lt;/p&gt;
&lt;p class="p1"&gt;I&amp;#8217;ve used this on a few projects now and it&amp;#8217;s proven to be incredibly helpful for evaluating my design and testing my code. And even though it&amp;#8217;s proved to be a valuable tool to have in your toolbox, nothing can compare to the real thing. &lt;a href="http://www.responsinator.com/" title="The Responsinator" target="_blank"&gt;The Responsinator&lt;/a&gt; will closely approximate how your site will look on a mobile device, but of course the most accurate testing will always be on the device itself.&lt;/p&gt;
&lt;p class="p1"&gt;Are you working on a responsive web project? Try it out for yourself at: &lt;a href="http://www.responsinator.com/" title="The Responsinator" target="_blank"&gt;responsinator.com&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MarkChouanard/~4/lERf0Qavv-0" height="1" width="1"/&gt;</description><feedburner:origLink>http://markchouanard.com/post/24579590866</feedburner:origLink></item><item><title>Shattered Glass: Repairing My iPhone 4S Rear Cover</title><link>http://feedproxy.google.com/~r/MarkChouanard/~3/mMtiO0YGw90/24239776850</link><category>Mobile</category><category>Technology</category><category>Do-It-Yourself</category><pubDate>Fri, 01 Jun 2012 20:42:24 PDT</pubDate><guid isPermaLink="false">http://markchouanard.com/post/24239776850</guid><description>&lt;p&gt;&lt;p class="p1"&gt;&lt;img alt="Mark Chouanard" src="http://www.chouanard.com/images/blog/Posts/iPhoneHeader.jpg"/&gt;&lt;/p&gt;
&lt;p class="p1"&gt;&lt;img align="right" src="http://www.chouanard.com/images/blog/Posts/iPhoneRepair-1.jpg"/&gt;&lt;strong&gt;The Problem&lt;/strong&gt;&lt;/p&gt;
&lt;p class="p1"&gt;After returning home from a long day at the office, I clumsily dropped my iPhone 4S out of my top shirt pocket and onto the concrete garage floor, completely shattering the rear glass cover. Being a techno-tinkerer as well as a bit frugal and always looking to save a buck or two, I set out to see if this was something I might be able to repair myself.&lt;/p&gt;
&lt;p class="p1"&gt;&lt;strong&gt;The Approach&lt;/strong&gt;&lt;/p&gt;
&lt;p class="p1"&gt;Before beginning, I checked around to get an idea of the cost of having it repaired by an &amp;#8216;Apple Authorized Professional&amp;#8217;. Interestingly enough, the prices varied widely from a low of around $49.00 to upwards of $199.00. This was more than enough to convince me to give it a go and see if I could do it myself. &lt;/p&gt;
&lt;p class="p1"&gt;First, I needed to locate a replacement glass cover. I found many sources for the iPhone rear glass on the web and decided to go with the &lt;a href="http://www.amazon.com/dp/B0063TZVGK/ref=pe_175190_21431760_C1_cs_sce_3p_dp_1" target="_blank"&gt;iPhone 4s Back Cover Housing&lt;/a&gt; from &lt;a href="http://www.amazon.com/" target="_blank"&gt;Amazon&lt;/a&gt;. The cost when making the purchase was a mere $3.49 plus an additional $4.99 for shipping and handling bringing the total cost of the project to $8.48.  Also included with the glass cover are two pentalobe screwdrivers which are required for removing the screws holding the rear cover.&lt;/p&gt;
&lt;p class="p1"&gt;&lt;strong&gt;The Procedure&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Power off the iPhone. &lt;/li&gt;
&lt;li&gt;Using the appropriate sized pentalobe screwdriver, carefully remove the two small screws located at the bottom of your iPhone case. &lt;br/&gt;&lt;img src="http://www.chouanard.com/images/blog/Posts/iPhoneRepair-3.jpg"/&gt;&lt;/li&gt;
&lt;li&gt;Holding your iPhone upright with both hands, holding it between your thumbs and forefingers, use your thumbs to slowly slide the rear glass upward about 1/8&amp;#8221; and lift off the glass back from the iPhone case.&lt;br/&gt;&lt;img src="http://www.chouanard.com/images/blog/Posts/iPhoneRepair-4.jpg"/&gt;&lt;/li&gt;
&lt;li&gt;Reversing the previous step, position the new rear glass cover over the body and gently slide it downward into position. Press down from the top of the iPhone to seat the rear cover tightly to the bottom of the case.&lt;br/&gt;&lt;img src="http://www.chouanard.com/images/blog/Posts/iPhoneRepair-5.jpg"/&gt;&lt;/li&gt;
&lt;li&gt;Carefully reinsert and tighten the two bottom screws. This may actually prove to be the most difficult step in the entire process due to the extremely small size of the screw heads. The screwdriver is magnetized which is very helpful when you have ham-hocks for hands as I do.  &lt;/li&gt;
&lt;/ol&gt;&lt;p class="p1"&gt;&lt;img align="right" src="http://www.chouanard.com/images/blog/Posts/iPhoneRepair-6.jpg"/&gt;&lt;strong&gt;The Outcome&lt;/strong&gt;&lt;/p&gt;
&lt;p class="p1"&gt;So there you have it. The shattered rear glass cover of my iPhone 4S was successfully replaced in less than 5 minutes for a total cost of $8.48. This also proved to be an easy do-it-yourself repair most anyone can do.&lt;/p&gt;
&lt;p class="p1"&gt;In the course of my research for this project, I also discovered that there&amp;#8217;s a wide variety of styles, materials and colors available if you just want to change up the look of your phone. So if you have an interest in personalizing your mobile device with some fine hardwood, classy leather or brushed metal, or going for that jungle look with some cheetah or leopard skin print, there are a wide variety of replacement cases available to choose from.&lt;/p&gt;
&lt;div class="notetext"&gt;DISCLAIMER: Please remember that removing the rear cover of your iPhone may void your warranty and/or any service agreements with your wireless provider. Proceed at your own risk.&lt;/div&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MarkChouanard/~4/mMtiO0YGw90" height="1" width="1"/&gt;</description><feedburner:origLink>http://markchouanard.com/post/24239776850</feedburner:origLink></item><item><title>DevExpress MVC Extensions: Initializing Edit Templates</title><link>http://feedproxy.google.com/~r/MarkChouanard/~3/s22yXDVnaJU/23614023595</link><category>DevExpress</category><category>MVC</category><category>UI</category><category>UX</category><pubDate>Wed, 23 May 2012 09:51:00 PDT</pubDate><guid isPermaLink="false">http://markchouanard.com/post/23614023595</guid><description>&lt;p&gt;&lt;p class="p1"&gt;Creating new records in a grid view often requires the need to initialize default values in the edit template.  This can be easily accomplished using the InitNewRow property on the MVC GridViewSettings class.&lt;/p&gt;
&lt;p class="p1"&gt;&lt;strong&gt;Technical Architecture&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;ASP.Net MCV3&lt;/li&gt;
&lt;li&gt;Razor View Engine&lt;/li&gt;
&lt;li&gt;DevExpress v11.2 MVC Grid View Extension&lt;/li&gt;
&lt;li&gt;Entity Framework v4.2&lt;/li&gt;
&lt;/ol&gt;&lt;p class="p1"&gt;&lt;strong&gt;Requirements&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;When the user creates a new record, initialize the ‘Month’ and ‘Year’ values.&lt;/li&gt;
&lt;li&gt;Default values to the current month and current year.&lt;/li&gt;
&lt;/ol&gt;&lt;p class="p1"&gt;&lt;strong&gt;Execution&lt;/strong&gt;&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;      settings.InitNewRow = (s, e) =&amp;gt;
      {
           e.NewValues["month"] = System.DateTime.Now.Month;
           e.NewValues["year"] = System.DateTime.Now.Year;
      };&lt;/pre&gt;
&lt;p class="p1"&gt;&lt;strong&gt;Result&lt;/strong&gt;&lt;/p&gt;
&lt;p class="p1"&gt;You can see that the Month and Year fields are initialized to the current Month and Year whenever a new record is created.&lt;/p&gt;
&lt;p class="p1"&gt;&lt;img align="bottom" src="http://chouanard.com/images/blog/posts/DevExInitializeEditTemplates.jpg"/&gt;&lt;/p&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MarkChouanard/~4/s22yXDVnaJU" height="1" width="1"/&gt;</description><feedburner:origLink>http://markchouanard.com/post/23614023595</feedburner:origLink></item><item><title>DevExpress MVC Extensions: Changing Cell Appearance Based on Data Values</title><link>http://feedproxy.google.com/~r/MarkChouanard/~3/kLkntvQDlE4/23355452747</link><category>DevExpress</category><category>MVC</category><category>UI</category><category>UX</category><pubDate>Sat, 19 May 2012 09:26:00 PDT</pubDate><guid isPermaLink="false">http://markchouanard.com/post/23355452747</guid><description>&lt;p&gt;&lt;p class="p2"&gt;&lt;strong&gt;Objective&lt;/strong&gt;&lt;/p&gt;
&lt;p class="p2"&gt;On a recent project, I was asked to create a simple dashboard component that would display the background color of a specific cell within a DevExpress GridView, based on the comparison of values between two columns in the row.&lt;/p&gt;
&lt;p class="p1"&gt;&lt;strong&gt;Technical Architecture&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;ASP.Net MCV3&lt;/li&gt;
&lt;li&gt;Razor View Engine &lt;/li&gt;
&lt;li&gt;DevExpress v11.2 MVC Grid View Extensions &lt;/li&gt;
&lt;li&gt;Entity Framework v4.2&lt;/li&gt;
&lt;/ol&gt;&lt;p class="p1"&gt;&lt;strong&gt;Requirements&lt;/strong&gt;&lt;/p&gt;
&lt;ol class="ol1"&gt;&lt;li class="li2"&gt;The user enters both a ‘Target’ and ‘Actual’ value, by month and by year, into the DevExpress Grid View.&lt;/li&gt;
&lt;li class="li2"&gt;The ‘Actual’ columns grid view cell will change to green if the ‘Actual’ value is greater than, or equal to the ‘Target’ value.&lt;/li&gt;
&lt;li class="li2"&gt;The ‘Actual’ columns grid view cell will change to red if the ‘Actual’ value is less than the ‘Target’ value.&lt;/li&gt;
&lt;/ol&gt;&lt;p class="p1"&gt;&lt;strong&gt;Execution&lt;br/&gt;&lt;/strong&gt;&lt;br/&gt;Utilizing the GridView&amp;#8217;s HtmlDataCellPrepared property event handler, I implemented the following code:&lt;strong&gt;&lt;br/&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;settings.HtmlDataCellPrepared = (s, e) =&amp;gt;
{
    if ((e.GetValue("target") != null) &amp;amp;&amp;amp; (e.GetValue("actual") != null))
    {
        Int32 iTargetValue = Convert.ToInt32(e.GetValue("target"))  
        Int32 iActualValue = Convert.ToInt32(e.GetValue("actual")); 
        if (e.DataColumn.FieldName.Equals("actual"))
        {
            if (iActualValue &amp;gt;= iTargetValue)
            {
                 e.Cell.BackColor = System.Drawing.ColorTranslator.FromHtml("#BFFFD7");
            }
            else
            {
                e.Cell.BackColor = System.Drawing.ColorTranslator.FromHtml("#FFBFBF");
            }
        }
    }             
};&lt;/pre&gt;
&lt;p class="p1"&gt;&lt;strong&gt;Result&lt;br/&gt;&lt;br/&gt;&lt;/strong&gt;The resulting output appears as desired with the cells of the &amp;#8216;Actual&amp;#8217; column displaying a green background when the value is greater than or equal to the &amp;#8216;Target&amp;#8217; value. A red cell bacground displays when the &amp;#8216;Actual&amp;#8217; value is less than the &amp;#8216;Target&amp;#8217; value.&lt;/p&gt;
&lt;p class="p1"&gt;&lt;strong&gt;&lt;img align="bottom" src="http://chouanard.com/images/blog/posts/DevExChangeCellAppearance.jpg"/&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MarkChouanard/~4/kLkntvQDlE4" height="1" width="1"/&gt;</description><feedburner:origLink>http://markchouanard.com/post/23355452747</feedburner:origLink></item><item><title>Taking the Leap</title><link>http://feedproxy.google.com/~r/MarkChouanard/~3/KzKHayvJft0/23182493953</link><category>Musings</category><pubDate>Tue, 15 May 2012 18:58:00 PDT</pubDate><guid isPermaLink="false">http://markchouanard.com/post/23182493953</guid><description>&lt;p&gt;&lt;p class="p1"&gt;&lt;img alt="Mark Chouanard" src="http://www.chouanard.com/images/blog/Posts/TakingTheLeap.jpg"/&gt;&lt;/p&gt;
&lt;p class="p1"&gt;There comes pivotal events and experiences in one&amp;#8217;s life in which we&amp;#8217;re forced to reassess our current life path and priorities to determine if changes may be needed, or desired, to improve our overall health and well-being. The kind of changes we need and are willing to make to improve our own lives and have a more positive impact on the lives of those we love and of those around us. A time such as this has come for me.&lt;/p&gt;
&lt;p class="p1"&gt;For far too long I&amp;#8217;ve been telling myself that it&amp;#8217;s time to start writing about my experiences with web design and development technologies but never actually taking the leap to start blogging. I have been somewhat successful in regularly tweeting from &lt;span class="s1"&gt;&lt;a href="http://twitter.com/chouanard" target="_blank"&gt;my twitter account&lt;/a&gt;&lt;/span&gt;, which itself is just a form of micro-blogging, but my intention now is to take this to a higher and more productive level.&lt;/p&gt;
&lt;p class="p1"&gt;My motivation in this endeavor is to hopefully give back in some small way to the design and development community from which I have learned so much. Many individuals whom I respect and have greatly benefited from their experience, wisdom and willingness to take the time to document the how&amp;#8217;s and why&amp;#8217;s of our industry. People like &lt;a href="http://andyrutledge.com/" target="_blank"&gt;&lt;span class="s1"&gt;Andy Rutledge&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://www.hanselman.com/blog/" target="_blank"&gt;&lt;span class="s1"&gt;Scott Hanselman&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://www.thisisaaronslife.com/" target="_blank"&gt;&lt;span class="s1"&gt;Aaron Irazarry&lt;/span&gt;&lt;/a&gt; and &lt;a href="http://weblogs.asp.net/scottgu/" target="_blank"&gt;&lt;span class="s1"&gt;Scott Guthrie&lt;/span&gt;&lt;/a&gt; to name only a few. At the end of the day, my goal is to be able to honestly say that I actually create and give back more than I consume.&lt;/p&gt;
&lt;p class="p1"&gt;What I hope to do is focus mostly on the web deign and development technologies that truly interest me and which I use on an almost daily basis. I also intend to provide commentary on the processes used to achieve the melding of great design with superior functionality. The intersection of creativity and technology. My writing perspective should be that of a technology implementer and practitioner, not necessarily an authority or expert. One of my favorite quotes actually sums it up quite nicely:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p class="p1"&gt;I am always doing that which I cannot do, in order that I may learn how to do it. - Pablo Picasso&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p class="p1"&gt;In addition to writing on web technology I hope to sprinkle in additional, interesting and helpful content related two two other passions in my life.&lt;/p&gt;
&lt;p class="p1"&gt;As a long time wood craftsman, I would like to use this medium to chronicle a few of my more challenging and creative woodworking projects. I plan to share with you the design, building process and results of my efforts. Soup to nuts, start to finish, successes and failures alike.&lt;/p&gt;
&lt;p class="p1"&gt;And finally, being blessed to be a stage-4 cancer survivor, I have an interest in health and fitness by way of eating in a more natural and healthy way as well as weight lifting and resistance training. I hope to share a few insights and learnings I&amp;#8217;ve had along the road to recovery and possibly provide hope and encouragement for anyone who has, or knows someone who may be battling this disease.&lt;/p&gt;
&lt;p class="p1"&gt;Once again, this a realization I&amp;#8217;ve come to as a result of prayerfully stepping back and (hopefully) honestly evaluating the current state of my life and professional career and reevaluating my desired path forward. A large part of this directional life shift for me will be an attempt to carve out some dedicated time, on a regular basis, to writing and reflecting on these specific aspects of my life. Only time will tell how successful and resolute I will be.&lt;/p&gt;
&lt;p class="p1"&gt;Thanks for reading.&lt;/p&gt;
&lt;p class="p1"&gt;&lt;img alt="Mark Chouanard" height="56" src="http://www.chouanard.com/images/blog/sig.png" width="160"/&gt;&lt;/p&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MarkChouanard/~4/KzKHayvJft0" height="1" width="1"/&gt;</description><feedburner:origLink>http://markchouanard.com/post/23182493953</feedburner:origLink></item></channel></rss>
