<?xml version="1.0" encoding="utf-8"?><rss version="2.0"><channel><title>Rachel Appel</title><link>http://www.rachelappel.com:80/</link><description>Rachel Appel</description><item><title>How to Connect to SQL Azure through SQL Server Management Studio 2008 (SSMS 2008)</title><link>http://www.rachelappel.com:80/how-to-connect-to-sql-azure-using-sql-server-management-studio-2008-ssms-2008</link><description>&lt;p&gt;Most developers on the Microsoft stack that use SQL Server, and who are migrating their databases to &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200082756" target="_blank"&gt;SQL Azure&lt;/a&gt;, likely work in SQL Server Management Studio 2008 (SSMS 2008), Visual Studio, or a mixture of both, for DBA and data management tasks. Fortunately, SQL Azure has two options for those who need to administer, create, maintain, and develop using SQL Azure: &lt;a href="http://www.windowsazure.com/" target="_blank"&gt;The SQL Azure Management Portal&lt;/a&gt; and SSMS 2008.&lt;/p&gt;
&lt;p&gt;Before you start -- If you want to try out the online tools or see take SQL Azure for a spin with SSMS 2008, &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200082756" target="_blank"&gt;sign up for a 90 day free trial&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Connect to SQL Azure from SSMS 2008&lt;/h2&gt;
&lt;p&gt;You can use SQL Server Management Studio (including, and especially, SQL Express) to connect to SQL Azure, but you first need to have some information handy that you can find in the SQL Azure Online Management Portal. Once there, you can view your subscription information including the information you need to connect to a SQL Azure server or database.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rachelappel.com/Media/Default/Windows-Live-Writer/How-to-Connect-to-SQL-Azure-using-SQL-Se_1207C/image3.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/How-to-Connect-to-SQL-Azure-using-SQL-Se_1207C/image3_thumb.png" width="500" height="271" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here is the information you need:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The fully qualified server name. See the blocked out, red, parts of above image, as to where you can locate your server info.&lt;/li&gt;
&lt;li&gt;Valid credentials that you have already setup via the online SQL Azure Management Portal (of course, the password is not available for viewing, as it should be memorized anyway)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Enter this information into the SQL Server 2008 Connect to Server dialog, and click the Connect button to authenticate. Don't forget you must choose SQL Server Authentication before you may enter credentials.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rachelappel.com/Media/Default/Windows-Live-Writer/How-to-Connect-to-SQL-Azure-using-SQL-Se_1207C/image16.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/How-to-Connect-to-SQL-Azure-using-SQL-Se_1207C/image16_thumb.png" width="400" height="303" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Upon successful authentication, SQL Server Management Studio opens. This is the exact same SSMS you are familiar with, with the only difference being that you have connected to SQL Azure instead of a SQL Server on your LAN.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rachelappel.com/Media/Default/Windows-Live-Writer/How-to-Connect-to-SQL-Azure-using-SQL-Se_1207C/SNAGHTMLa64d4e1.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="SNAGHTMLa64d4e1" border="0" alt="SNAGHTMLa64d4e1" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/How-to-Connect-to-SQL-Azure-using-SQL-Se_1207C/SNAGHTMLa64d4e1_thumb.png" width="604" height="378" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;From here you can run queries, manage tables, and do all the SQL administrative tasks you need to. Note there is a SQL Azure Database node in the Template Explorer that you can access from the View menu. Of course if you are using SQL Azure you'll want the &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200082739" target="_blank"&gt;SQL Azure SDK for Visual Studio 2010&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Connect to SQL Azure from Visual Studio&lt;/h2&gt;
&lt;p&gt;The same credentials and authentication happen in both tools, SSMS and Visual Studio. This means all that you need to do is open the SQL Server Object explorer and connect exactly as you would any SQL Server in your LAN. Once connected, you can enjoy administering and working with SQL Azure inside of Visual Studio.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rachelappel.com/Media/Default/Windows-Live-Writer/How-to-Connect-to-SQL-Azure-using-SQL-Se_1207C/SNAGHTMLcf0cc28_1.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="SNAGHTMLcf0cc28" border="0" alt="SNAGHTMLcf0cc28" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/How-to-Connect-to-SQL-Azure-using-SQL-Se_1207C/SNAGHTMLcf0cc28_thumb_1.png" width="304" height="381" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Troubleshooting SQL Azure Connectivity&lt;/h2&gt;
&lt;p&gt;The Firewall check failed error is very common, as you need to enter an IP Address range to connect to SQL Azure from various client programs (i.e., SSMS). Here's the error text:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Firewall check failed. Cannot open server 'SERVERNAME' requested by the login. Client with IP address XXX.XXX.XXX.XXX is not allowed to access the server. To enable access, use the SQL Azure Portal or run sp_set_firewall_rule on the master database to create a firewall rule for this IP address or address range. It may take up to five minutes for this change to take effect.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If you get this error you can reset it from the Windows Azure Mgmt Portal. Just navigate to the server you need access to, then add in the IP Range, as shown in the image below:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rachelappel.com/Media/Default/Windows-Live-Writer/How-to-Connect-to-SQL-Azure-using-SQL-Se_1207C/image_4.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/How-to-Connect-to-SQL-Azure-using-SQL-Se_1207C/image_thumb.png" width="504" height="273" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Alternatively, you can use SQLCMD in the Windows command prompt which will look something like this:&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas;" face="Consolas"&gt;C:\&amp;gt;SQLCMD &amp;ndash;U&amp;lt;user&amp;gt;@&amp;lt;server&amp;gt; -P&amp;lt;password&amp;gt; -S&amp;lt;server&amp;gt;.database.windows.net&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas;" face="Consolas"&gt;exec sp_set_firewall_rule N'Allow Windows Azure','0.0.0.0','0.0.0.0'&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;SQLCMD Azure commands: &lt;a title="http://msdn.microsoft.com/en-us/library/windowsazure/ee621783.aspx" href="http://msdn.microsoft.com/en-us/library/windowsazure/ee621783.aspx"&gt;http://msdn.microsoft.com/en-us/library/windowsazure/ee621783.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;NOTE: Only the server-level principal login (this is the primary/master login that you use to connect to the Windows Azure Portal online, a Windows Live Id), while connected to the master database, can configure firewall settings for your SQL Azure server. Also, check out the &lt;a href="http://social.technet.microsoft.com/wiki/contents/articles/sql-azure-connectivity-troubleshooting-guide.aspx" target="_blank"&gt;SQL Azure troubleshooting&lt;/a&gt; for other common errors, troubleshooting, and help.&lt;/p&gt;</description><pubDate>Fri, 27 Apr 2012 14:18:31 GMT</pubDate><guid isPermaLink="true">http://www.rachelappel.com:80/how-to-connect-to-sql-azure-using-sql-server-management-studio-2008-ssms-2008</guid></item><item><title>Get Started Building Data Driven Apps with Windows Azure and SQL Azure</title><link>http://www.rachelappel.com:80/get-started-building-data-driven-apps-with-windows-azure-and-sql-azure</link><description>&lt;p&gt;This post is part of a series called “&lt;a href="http://blogs.msdn.com/b/uscloud/archive/2012/03/22/windows-azure-for-the-asp-net-developer-series.aspx"&gt;Windows Azure for the ASP.NET Developer&lt;/a&gt;”, so if you've been considering migrating your ASP.NET Web Forms or MVC app to Windows Azure or SQL Azure, take some time to review the posts in this series. Here you will find answers to questions like "&lt;a href="http://www.stratospher.es/blog/post/Why-Move-My-ASP-NET-to-the-Cloud"&gt;Why Move My ASP.NET Development To The Cloud?&lt;/a&gt;" and "&lt;a href="http://rachelappel.com/the-differences-between-development-on-windows-azure-and-windows-server"&gt;What Are The Differences Between Windows Azure &amp;amp; Windows Server?&lt;/a&gt;" that frequently arise. &lt;/p&gt; &lt;p&gt;ASP.NET Business applications are most often forms-over-data that provide basic &lt;a href="http://en.wikipedia.org/wiki/Create,_read,_update_and_delete" target="_blank"&gt;CRUD&lt;/a&gt; operations plus business logic. For those looking to port CRUD apps, you can move your code, the data, or both, over the Windows Azure platform. Naturally, if you are porting your app to Windows Azure, you will need to consider these different approaches in data storage and retrieval.&lt;/p&gt; &lt;h2&gt;Approaches to working with data on Windows Azure&lt;/h2&gt; &lt;p&gt;The Windows Azure platform offers &lt;a href="http://www.windowsazure.com/en-us/develop/net/fundamentals/cloud-storage/#sql" target="_blank"&gt;SQL Azure&lt;/a&gt; as an RDBMS, as well as these &lt;a href="http://www.windowsazure.com/en-us/develop/net/fundamentals/cloud-storage/" target="_blank"&gt;data storage options&lt;/a&gt;:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;BLOB (Binary Large OBject) storage:&lt;/strong&gt; BLOB Storage is the simplest way to store large amounts of unstructured text or binary data such as video, audio and images.  &lt;li&gt;&lt;strong&gt;Table storage:&lt;/strong&gt; Table Storage is used by applications requiring storing large amounts of data storage that need additional structure. While a table stores structured data, it does not provide any way to represent relationships between the data, sometimes called a NoSQL database. You can use &lt;a href="http://www.windowsazure.com/en-us/home/features/sql-azure/"&gt;SQL Azure for relational database service&lt;/a&gt; on Windows Azure.  &lt;li&gt;&lt;strong&gt;Queue:&lt;/strong&gt; Queues are used for reliable, persistent messaging between applications. You can use Queues to transfer messages between applications or services in Windows Azure.  &lt;li&gt;&lt;strong&gt;Windows Azure Drive:&lt;/strong&gt; Windows Azure Drive allows applications to mount a Blob formatted as a single volume NTFS VHD. You can move your VHDs between private and public clouds using Windows Azure Drive.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Of course, you can choose to host your app in the cloud and keep your data on premise, or vice versa. Lastly, hybrid solutions are a great way to both offload some hardware and management costs while migrating to a full cloud solution. The Windows Azure &amp;amp; SQL Azure suite of products has something for everyone.&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;p&gt;Since most applications are brownfield development (i.e., in maintenance mode), &lt;a href="http://www.windowsazure.com/en-us/develop/net/fundamentals/hybrid-solutions" target="_blank"&gt;hybrid solutions&lt;/a&gt; are key. Hybrid Azure solutions can have any combination of data and/or software and/or &lt;a href="http://blogs.msdn.com/b/appfabriccat/archive/2010/11/29/hybrid-cloud-solutions-with-windows-azure-appfabric-middleware.aspx" target="_blank"&gt;services&lt;/a&gt;, in the cloud and/or on premise. Because the architecture is so flexible, you will likely have data in multiple locations that require management and &lt;a href="http://msdn.microsoft.com/en-us/sync/bb736753" target="_blank"&gt;synchronization services&lt;/a&gt;. Fortunately, &lt;a href="http://social.technet.microsoft.com/wiki/contents/articles/1591.aspx" target="_blank"&gt;SQL Azure Data Sync&lt;/a&gt; provides data synchronization and transfer services in an easy to use UI, so there is little need to spend lots of time on complex SQL statements, though you can use them if you already a set of stored procedures or queries that you regularly run for maintenance.  &lt;p&gt;ASP.NET developers accessing objects in Windows Azure Blob storage have two options for their data management code, a REST API and a Managed Library, samples of both shown below.  &lt;p&gt;REST API GET &lt;/p&gt; &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:5cf2fa2f-0072-4f2b-b2af-51ed1f44d73b" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; max-height: 300px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;http://azureaccount.blob.core.windows.net/container/restblob?comp=blocklist&amp;amp;snapshot=2012-09-30T20%3a11%3a15.2735974Z&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt;Managed Library via C#&lt;/p&gt; &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:7f3a8867-bb5b-49d8-9194-2984fac1c421" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; max-height: 500px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;BlobStream stream = blob.OpenRead();&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;int&lt;/span&gt; bufferSize = 16;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;int&lt;/span&gt; readCount;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&lt;span style="color:#0000ff"&gt;byte&lt;/span&gt;[] buffer1 = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#0000ff"&gt;byte&lt;/span&gt;[bufferSize];&lt;/li&gt; &lt;li&gt;stream.Seek(100, System.IO.&lt;span style="color:#2b91af"&gt;SeekOrigin&lt;/span&gt;.Begin);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;readCount = stream.Read(buffer1, 0, bufferSize);&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt;For a complete list of BLOB operations in Windows Azure, see "&lt;a href="http://msdn.microsoft.com/en-us/library/gg433040.aspx" target="_blank"&gt;Storing and Accessing Data in Windows Azure&lt;/a&gt;".  &lt;h2&gt;What to do with your existing data: SQL Azure or SQL Server &lt;/h2&gt; &lt;p&gt;For those ASP.NET developers who have existing SQL Server databases, fear not, you have choices. You can use &lt;a href="http://www.windowsazure.com/en-us/develop/net/how-to-guides/sql-azure/#using-sql-server" target="_blank"&gt;ADO.NET to access SQL Azure&lt;/a&gt;, just as you would when developing against SQL Server in any .NET language. If you want broader access to your data with less administration &lt;a href="http://msdn.microsoft.com/en-us/library/windowsazure/gg619386.aspx" target="_blank"&gt;SQL Azure&lt;/a&gt; is just as friendly and familiar for ASP.NET developers (and the IT Pros they work with) as SQL Server, as it offers an online &lt;a href="http://www.windowsazure.com/en-us/develop/overview/" target="_blank"&gt;management portal&lt;/a&gt; that anyone can use. The &lt;a href="http://msdn.microsoft.com/en-us/library/windowsazure/gg619386.aspx" target="_blank"&gt;SQL Azure landing page&lt;/a&gt; is a great place to start familiarizing yourself as you &lt;a href="http://blogs.msdn.com/b/peterlau/archive/2012/02/28/get-started-with-sql-azure-resources.aspx" target="_blank"&gt;get started with SQL Azure&lt;/a&gt;.  &lt;p&gt;As you might expect, SQL Azure is an RDBMS much like SQL Server, and it can function entirely as a replacement to SQL Server, although there &lt;a href="http://msdn.microsoft.com/en-us/library/windowsazure/ff394102.aspx" target="_blank"&gt;could be some limitations&lt;/a&gt;, depending on your individual scenario. You can expect the wide range of SQL features that are familiar such as &lt;a href="http://msdn.microsoft.com/en-us/library/windowsazure/ee336280.aspx" target="_blank"&gt;sqlcmd for command line access&lt;/a&gt; to DDL &amp;amp; DML commands, &lt;a href="http://msdn.microsoft.com/en-us/library/windowsazure/ee621781.aspx" target="_blank"&gt;ASP.NET data binding tools and code&lt;/a&gt;, and support for &lt;a href="http://msdn.microsoft.com/en-us/library/windowsazure/ee336245.aspx#ts" target="_blank"&gt;transactions&lt;/a&gt;.  &lt;p&gt;The easiest migration path for most databases is to use the &lt;a href="http://channel9.msdn.com/posts/SQL-Azure-Migration-Wizard-Part-1-SQL-Azure-What-is-it" target="_blank"&gt;SQL Azure Migration Wizard&lt;/a&gt; to move your SQL Server databases directly to SQL Azure. The SQL Azure Migration Wizard offers a number of &lt;a href="http://social.technet.microsoft.com/wiki/contents/articles/overview-of-options-for-migrating-data-and-schema-to-sql-azure.aspx" target="_blank"&gt;options for migrating data to the cloud&lt;/a&gt;, so you can create a full cloud, or hybrid, solution, and with all the available options in Windows Azure Platform, you can drive the migration path exactly as you want.  &lt;p&gt;If you are using ASP.NET MVC you can use &lt;a href="http://msdn.microsoft.com/en-us/library/windowsazure/ff951633.aspx" target="_blank"&gt;Entity Framework to access SQL Azure&lt;/a&gt;, SQL Server, and Windows Azure, and your stored procedures will remain the same if you port them to SQL Azure from SQL Server. Those developers working on ASP.NET Web Forms will continue to enjoy accessing data through the familiar SQLDatasource, ObjectDataSource, and other drag and drop controls.  &lt;p&gt;ASP.NET developers also have to migrate ASP.NET Membership databases, and while the process is smooth overall, there can be some &lt;a href="http://rbonini.wordpress.com/2011/03/05/deploying-your-database-to-sql-azure-and-using-asp-net-membership-with-it/" target="_blank"&gt;gotchas&lt;/a&gt;.  &lt;h2&gt;Summary&lt;/h2&gt; &lt;p&gt;Getting started with Windows Azure &amp;amp; SQL Azure data access is easy for ASP.NET developers. The Windows Azure Platform offers many management and storage options for your data, old or new. If you are migrating your on premise apps to Windows Azure, in whole or part, see&amp;nbsp; &lt;a href="http://msdn.microsoft.com/en-us/library/gg186051.aspx" target="_blank"&gt;Migrating Applications to Windows Azure&lt;/a&gt; for more details.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200082739" target="_blank"&gt;Don't forget to download the Windows Azure SDK&lt;/a&gt;!&lt;/p&gt; &lt;p&gt;For the rest of the posts in this series, see “&lt;a href="http://blogs.msdn.com/b/uscloud/archive/2012/03/22/windows-azure-for-the-asp-net-developer-series.aspx"&gt;Windows Azure for the ASP.NET Developer&lt;/a&gt;” on &lt;a href="http://blogs.msdn.com/b/uscloud"&gt;US DPE Azure Connection&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 25 Apr 2012 19:49:04 GMT</pubDate><guid isPermaLink="true">http://www.rachelappel.com:80/get-started-building-data-driven-apps-with-windows-azure-and-sql-azure</guid></item><item><title>A device emulator guide for cross platform development on ASP.NET and jQuery Mobile development</title><link>http://www.rachelappel.com:80/a-device-emulator-guide-for-cross-platform-development-on-asp.net-and-jquery-mobile-development</link><description>&lt;p&gt;You want a Web site that renders mobile friendly content that is viewable, accessible, and interactive for the user. Native device developers have a bit of convenience when it comes to this as they target a specific device OS and browser. It is impossible for Mobile Web developers to test for every device browser he or she needs to target, since there are so many variations and combinations of operating systems + browsers. This is where emulators help. Emulators are software that behave the same way the physical device itself would behave. For example, a WP7 emulator looks and acts just like a real WP7 phone. It loads pages, displays content, and allows you to fill in HTML forms, and interact with HTML pages.&lt;/p&gt;
&lt;p&gt;Device testing is a lot like cross browser testing for desktop browsers such as IE, Chrome, FireFox, Safari, etc... (which you still have to do). While you will be unlikely to be able to test for every single type of device and browser on the market, this post will cover some the more popular platforms.&lt;/p&gt;
&lt;h2&gt;Windows Phone 7 Emulator&lt;/h2&gt;
&lt;p&gt;The Windows Phone 7 emulator ships as part of the &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200082772" target="_blank"&gt;Windows Phone SDK 7.1&lt;/a&gt; and integrates with Visual Studio 2010 automatically for WP7 project templates. When working with Web development projects like ASP.NET MVC or Web Forms, the emulator is run from the Start menu, desktop shortcut, or Visual Studio Tools menu; however, before using it in Visual Studio you must add it as an external tool first.&lt;/p&gt;
&lt;p&gt;The WP7 emulator executable name is &lt;em&gt;XdeLauncher.exe&lt;/em&gt; and it lives in the C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v7.1\Tools\XDE Launcher\ folder, so it's easily added to the Visual Studio Tools menu. Choose Tools-&amp;gt;External Tools, and when the External Tools dialog appears, add a new command by entering the following information:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Title&lt;/strong&gt;: Phone Emulator&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Command&lt;/strong&gt;: C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v7.1\Tools\XDE Launcher\XdeLauncher.exe&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Arguments&lt;/strong&gt; (with double quotes): "Windows Phone 7" "Windows Phone Emulator"&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Initial directory&lt;/strong&gt;: C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v7.1\Tools\XDE Launcher&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Prompt for arguments&lt;/strong&gt;: Uncheck the checkbox&lt;/p&gt;
&lt;p&gt;Your dialog should look similar to the image below:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rachelappel.com/Media/Default/Windows-Live-Writer/609d69929f11_929B/image_thumb_2.png"&gt;&lt;img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image_thumb" border="0" alt="image_thumb" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/609d69929f11_929B/image_thumb_thumb.png" width="354" height="347" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can then access the phone emulator from the Tools menu in Visual Studio 2010.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rachelappel.com/Media/Default/Windows-Live-Writer/609d69929f11_929B/image_thumb4_2.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image_thumb4" border="0" alt="image_thumb4" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/609d69929f11_929B/image_thumb4_thumb.png" width="254" height="379" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you prefer, you can run the Windows Phone Emulator solo instead by pressing the Windows key, then typing in &lt;em&gt;Phone Emulator&lt;/em&gt; (not case sensitive), to run the program. Of course, you can always use the command line. The WP7 emulator also has some very cool extras like the accelerometer, geolocation/mapping tools, and more. You can even &lt;a href="http://blogs.msdn.com/b/devfish/archive/2012/03/12/windows-phone-7-1-1-sdk-and-emulator-options.aspx" target="_blank"&gt;run multiple WP7 emulators simultaneously&lt;/a&gt;. For those looking for the master WP7 emulator reference, see &lt;a href="http://msdn.microsoft.com/en-us/library/ff402563(v=VS.92).aspx" target="_blank"&gt;everything you need to know about the WP7 emulator&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;iOS Emulators&lt;/h2&gt;
&lt;p&gt;There are many iOS emulators out there, both online, and as desktop versions of software, so you have quite a bit of choice. Here are some iOS simulators that work well:&lt;/p&gt;
&lt;p&gt;Electric Plum's &lt;a href="http://code.google.com/p/ibbdemo2/" target="_blank"&gt;ibbdemo&lt;/a&gt; iOS simulator runs both iPhone and iPad emulators in the simulator software. The nice thing about desktop software is that you can &lt;a href="http://encosia.com/using-an-iphone-with-the-visual-studio-development-server/" target="_blank"&gt;integrate it with Visual Studio&lt;/a&gt;. Online emulators have the advantage of no software installations, and therefore are sysadmin friendly. Below are a few online emulators:&lt;/p&gt;
&lt;p&gt;&lt;a title="http://www.testiphone.com/" href="http://www.testiphone.com/"&gt;http://www.testiphone.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a title="http://iphonetester.com/" href="http://iphonetester.com/"&gt;http://iphonetester.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://demos.kendoui.com/mobile/simulator/" target="_blank"&gt;KendoUI also has an awesome online multi-device simulator&lt;/a&gt;; however, it runs only in Webkit browsers, so you'll need Chrome to use it.&lt;/p&gt;
&lt;p&gt;Fun tip: Run online emulators inside of desktop emulator, or on the physical device for 1000 nerd points!&lt;/p&gt;
&lt;h2&gt;Android &amp;amp; Others&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Android&lt;/strong&gt; | You'll need to do some legwork in the Android space to get setup. The Android emulator is part of the Android SDK, with &lt;a href="http://developer.android.com/guide/developing/tools/emulator.html" target="_blank"&gt;complete instructions&lt;/a&gt;. There is also a nice tutorial about &lt;a href="http://buildcontext.com/blog/2011/android-browser-emulator-windows-7-nexus-s-xoom-tablet" target="_blank"&gt;installing, configuring and using the Andoid browser emulator&lt;/a&gt; for Windows.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Opera Mini/Multi Device &lt;/strong&gt;| &lt;a title="http://www.opera.com/developer/tools/mobile/" href="http://www.opera.com/developer/tools/mobile/"&gt;http://www.opera.com/developer/tools/mobile/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Blackberry/Multi Blackberry OS:&lt;/strong&gt; | &lt;a title="http://us.blackberry.com/developers/resources/simulators.jsp" href="http://us.blackberry.com/developers/resources/simulators.jsp"&gt;http://us.blackberry.com/developers/resources/simulators.jsp&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Of course there's still plenty of devices out in the public, and other emulators on the market if you need them. Check out this &lt;a href="http://www.mobilexweb.com/emulators" target="_blank"&gt;comprehensive list of mobile device emulators&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;You can start cross browser development immediately with the emulators shown in this post, and some integrate directly with Visual Studio tools. If you didn't &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200082772" target="_blank"&gt;download the Windows Phone SDK 7.1&lt;/a&gt; yet, now is the time!&lt;/p&gt;
&lt;p&gt;Note: All emulators listed in this post are free.&lt;/p&gt;
&lt;p&gt;What's your favorite emulator (free/paid)? What's your favorite device? What devices do you &lt;em&gt;want&lt;/em&gt; to develop for and what devices &lt;em&gt;must you&lt;/em&gt; develop for?&lt;/p&gt;</description><pubDate>Thu, 12 Apr 2012 14:28:54 GMT</pubDate><guid isPermaLink="true">http://www.rachelappel.com:80/a-device-emulator-guide-for-cross-platform-development-on-asp.net-and-jquery-mobile-development</guid></item><item><title>NYC Women in Tech Connect Event</title><link>http://www.rachelappel.com:80/nyc-women-in-tech-connect-event</link><description>&lt;h2&gt;Women in Technology NYC Connect (FREE)&lt;/h2&gt; &lt;h3&gt;May 5th at Microsoft NYC&lt;/h3&gt; &lt;p&gt;1290 Ave of the Americas, 6th Floor, NY NY 10104&lt;/p&gt; &lt;h3&gt;&lt;a title="http://witnycconnect.eventbrite.com/" href="http://witnycconnect.eventbrite.com/" target="_blank"&gt;REGISTER HERE&lt;/a&gt;&lt;/h3&gt; &lt;p&gt;&lt;em&gt;Featuring presentations on Technology, Personal Growth and Perspectives to propel us into the future. &lt;/em&gt; &lt;p&gt;&lt;em&gt;Why? Because when we connect, we become inspired and we can accomplish anything!!&lt;/em&gt; &lt;p&gt;&lt;strong&gt;Who should attend:&lt;/strong&gt; Any Technical Women in the NYC Metro Area. College students are also strongly encouraged to attend. &lt;p&gt;&lt;strong&gt;Speakers:&lt;/strong&gt; Email &lt;em&gt;Melissa Demsak (&lt;/em&gt;&lt;a href="mailto:melissa.demsak@gmail.com"&gt;&lt;em&gt;melissa.demsak@gmail.com&lt;/em&gt;&lt;/a&gt;&lt;em&gt;) or Rachel Appel (&lt;/em&gt;&lt;a href="mailto:Rachel.Appel@microsoft.com"&gt;&lt;em&gt;Rachel.Appel@microsoft.com&lt;/em&gt;&lt;/a&gt;&lt;em&gt;) with your topic, abstract, speech length and bio by 4/9/12.&lt;/em&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;Volunteers:&lt;/strong&gt; If you have an interest in volunteering to make this event the best it can be, please email Melissa or Rachel.&lt;/em&gt; &lt;p&gt;&lt;strong&gt;Agenda:&lt;br&gt;&lt;/strong&gt;8:30am: Registration&lt;br&gt;9am-11:30am: Kick-Off/Presentations&lt;br&gt;11:30am-1pm: Lunch on your own / Networking&lt;br&gt;1pm-3pm: Presentations / Closing &lt;p&gt;&lt;strong&gt;Event Site:&lt;/strong&gt; &lt;a href="http://njwomenintech.wordpress.com/"&gt;http://njwomenintech.wordpress.com/&lt;/a&gt;&lt;/p&gt;</description><pubDate>Tue, 03 Apr 2012 02:27:17 GMT</pubDate><guid isPermaLink="true">http://www.rachelappel.com:80/nyc-women-in-tech-connect-event</guid></item><item><title>The Road to Windows 8 - NEW YORK CITY!</title><link>http://www.rachelappel.com:80/the-road-to-windows-8---new-york-city</link><description>&lt;h4&gt;&lt;font color="#ff0000"&gt;by Markus Egger &lt;/font&gt;&lt;/h4&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;&lt;b&gt;When:&lt;/b&gt; April 30, 2012, 1:30 PM - 4:30 PM&lt;br&gt;&lt;b&gt;Where:&lt;/b&gt; Microsoft Corporation, 1290 Avenue of the Americas, Sixth Floor, New York, NY 10104&lt;/font&gt;&lt;/p&gt; &lt;p&gt;A free, unbiased look at the current and future development with Windows 8 and .NET. &lt;/p&gt; &lt;p&gt;The industry is in a state of flux. What does that mean for your software projects today and tomorrow? Will your skills be outdated? Will your current investment become obsolete? What should you focus on right now? And what will become important a year or two down the road? Will there be .NET in the future? And what other technologies do you need to learn?  &lt;p&gt;This series of free State of .NET events attempts to answer these questions and more, by taking an unbiased look at current and future development with .NET and other relevant Microsoft technologies. This includes Visual Studio 2010 technologies as well as an in-depth look at what is coming in the next version of Visual Studio (“VS11”) and Windows 8.  &lt;p&gt;Join Markus Egger, Microsoft RD and one of the longest running MVPs, for an afternoon of free information. CODE/EPS is in a unique position to share information based on real world experience in projects that are either our own or one of the many projects we get to see in our role as mentors, trainers and consultants, as well as feedback we receive from CODE Magazine readers. This is NOT marketing hype! We will tell you which information you should invest time and money in, and which ones to avoid.  &lt;p&gt;This event is completely free of charge and is designed for developers as well as IT decision makers. Specific prior knowledge is not required. Attendees of this event will come away with a clear understanding of which technologies to use for various technical challenges.  &lt;p&gt;Topics Include:  &lt;ul&gt; &lt;li&gt;Windows 8  &lt;ul&gt; &lt;li&gt;"Metro" Development  &lt;li&gt;The impact of Windows 8 on today’s development effort  &lt;li&gt;The future of C# and VB  &lt;li&gt;The future of HTML and JavaScript  &lt;li&gt;The future of C++&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;WPF, Silverlight, and other XAML technologies today and tomorrow  &lt;li&gt;Architecture to serve the needs of modern applications  &lt;li&gt;The need for SOA (Service Oriented Architecture) today and tomorrow  &lt;li&gt;HTML 5, CSS3, and JavaScript  &lt;li&gt;ASP.NET MVC, Razor and jQuery  &lt;li&gt;"Visual Studio Async"  &lt;li&gt;Windows Phone 7 and other mobile devices  &lt;li&gt;and more!  &lt;p&gt;Attendees of this event will come away with a clear understanding of which technologies to use for various technical challenges. Questions? Please e-mail &lt;a href="mailto:info@eps-software.com"&gt;info@eps-software.com&lt;/a&gt; or call 832-717-4445 x13.  &lt;p&gt;Note: This event is co-hosted by &lt;i&gt;EPS Software Corp.&lt;/i&gt; and &lt;i&gt;Microsoft Corporation&lt;/i&gt;. EPS is responsible for all content presented at this event.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt; &lt;h2&gt;&lt;font color="#ff0000"&gt;&lt;a href="https://www.codemag.com/signup/b09e7be1-1b79-4621-a312-5f7a9700d26a" target="_blank"&gt;REGISTER NOW&lt;/a&gt;&lt;/font&gt;&lt;/h2&gt;</description><pubDate>Mon, 02 Apr 2012 16:54:11 GMT</pubDate><guid isPermaLink="true">http://www.rachelappel.com:80/the-road-to-windows-8---new-york-city</guid></item><item><title>What you need to know about the Microsoft MVP Award</title><link>http://www.rachelappel.com:80/what-you-need-to-know-about-the-microsoft-mvp-award</link><description>&lt;p&gt;Each turn of the Microsoft MVP award cycle raises many questions in the developer and IT Pro communities as to what the award is about, who gets the award, and why we have it. This post aims to answer those and other frequently asked questions.&lt;/p&gt; &lt;h2&gt;About The Microsoft MVP Award program&lt;/h2&gt; &lt;p&gt;&lt;a href="http://rachelappel.com/Media/Default/Windows-Live-Writer/MVP_BB58/images_8.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="images" border="0" alt="images" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/MVP_BB58/images_thumb_2.jpg" width="200" height="81"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;The &lt;a href="http://mvp.support.microsoft.com" target="_blank"&gt;MVP Website&lt;/a&gt; states:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;"The MVP Award recognizes exceptional technical community leaders from around the world who voluntarily share their deep, real-world knowledge about Microsoft technologies with others." &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Each quarter, selected nominees receive the MVP award for their contributions to Microsoft technical communities in the past year. One can become a Microsoft MVP by way of nomination process, and anyone can nominate someone for an MVP award. Nominations do not guarantee receipt of the award. &lt;/p&gt; &lt;p&gt;The &lt;a href="http://mvp.support.microsoft.com/gp/mvpbecoming" target="_blank"&gt;Becoming an MVP&lt;/a&gt; page of the MVP Website gives some details as to what happens once someone is nominated for the award.&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;"To receive the Microsoft MVP Award, MVP nominees undergo a rigorous review process. A panel that includes members of the MVP team and Microsoft product groups evaluates each nominee's technical expertise and voluntary community contributions for the past 12 months. The panel considers the quality, quantity, and level of impact of the MVP nominee's contributions. Active MVPs receive the same level of scrutiny as other new candidates each year."&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;The panel consists of members of the MVP program with input from product team members and the field. The MVP program admins then invite awardees to participate in the MVP Award Program benefits for a one year award cycle. If the awardee accepts the MVP award, they must adhere to both a code of conduct and an NDA (a non disclosure agreement, which is a legally binding contract).  &lt;p&gt;Here is what the award welcome gift looks like for 2012 (placard on the left, certificate on the right).  &lt;p&gt;&lt;a href="http://rachelappel.com/Media/Default/Windows-Live-Writer/MVP_BB58/WP_000202_2.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="WP_000202" border="0" alt="WP_000202" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/MVP_BB58/WP_000202_thumb.jpg" width="520" height="396"&gt;&lt;/a&gt;  &lt;p&gt;There are some frequently confused sentiments about MVPs and the award program:  &lt;ul&gt; &lt;li&gt;Obtaining the award one year does not guarantee or influence next year's decision. Much like the Grammy's or Oscars, or other awards, it's an award based on work in a particular area, for the previous year.  &lt;li&gt;There is no prescriptive way or particular set of actions to become an MVP, since a prescriptive guide means it's a certification, not an award.  &lt;li&gt;Open Source Software is not an award category, since awards are hosted by product teams. Contributions to OSS projects can be, but are not necessarily, taken into consideration for the award.  &lt;li&gt;Criticism of Microsoft products does not disqualify people from becoming an MVP, nor does it cause MVPs to "lose their MVP".  &lt;li&gt;The MVP award is not the result of a competition. One person never wins the MVP award in favor of another.&amp;nbsp;&amp;nbsp; &lt;li&gt;The MVP award is not a membership or club. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href="http://mvp.support.microsoft.com/gp/mvpfaqs" target="_blank"&gt;Read the full set of FAQs here!&lt;/a&gt; If you're not familiar with the varying Microsoft awards, certifications, and other programs, it's easy to confuse them.&lt;/p&gt; &lt;h2&gt;Certifications, Insiders, &amp;amp; Regional Directors Programs&lt;/h2&gt; &lt;p&gt;Because programs like certifications are often confused with the MVP program, here is a quick rundown of Microsoft programs &amp;amp; certifications:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Certificationss:&lt;/strong&gt; Microsoft certifications exist for nearly every active product. Certifications are 100% prescriptive, so there will always be an exam, lecture, or other set predetermined activities, that one must complete, while meeting a quality metric (i.e., a minimum score). Since certifications require exams, the certification candidate must pay to take the related exams, whereas there are no costs associated with receiving the MVP award. For more on MS certs, see the &lt;a href="http://www.microsoft.com/learning/en/us/certification/cert-overview.aspx" target="_blank"&gt;Certification Overview&lt;/a&gt; page. &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Insiders: &lt;/strong&gt;Microsoft maintains relationships with customers and partners of all types, from an individual contributor to companies and organizations. The &lt;a href="http://aspinsiders.com/" target="_blank"&gt;ASP Insiders&lt;/a&gt; (and other insider programs) are Microsoft sponsored programs whose members participate in by providing feedback to ASP.NET, Visual Studio, or other product teams. &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Regional Directors&lt;/strong&gt; are trusted experts that Microsoft engineers in the field rely on for help with directing the best technical solutions for both the RD's and Microsoft's customers. Read more about RDs at the &lt;a href="http://msdn.microsoft.com/en-us/isv/bb190468" target="_blank"&gt;RD Home Page&lt;/a&gt;.&lt;/p&gt; &lt;h2&gt;Summary&lt;/h2&gt; &lt;p&gt;Congratulations to all of our new and renewed MVPs! Thank you all very much for sharing your expertise, experiences, and knowledge with the technical communities surrounding technology. I know many MVPs who get the award each year and it is because of their passion for Microsoft technologies, and a love of sharing their expertise.&lt;/p&gt; &lt;p&gt;The fine print: &lt;/p&gt; &lt;p&gt;MVPs, RDs, and Insiders, are not employees of Microsoft.&lt;/p&gt; &lt;p&gt;Previous to joining Microsoft, I had received the MVP award for multiple years, and also participated as an ASPInsider, and an MCT. I hold multiple certifications from Microsoft and other tech companies. &lt;/p&gt;</description><pubDate>Fri, 30 Mar 2012 15:01:39 GMT</pubDate><guid isPermaLink="true">http://www.rachelappel.com:80/what-you-need-to-know-about-the-microsoft-mvp-award</guid></item><item><title>The Differences Between Development on Windows Azure and Windows Server</title><link>http://www.rachelappel.com:80/the-differences-between-development-on-windows-azure-and-windows-server</link><description>&lt;p&gt;&lt;em&gt;This post is part of a series called “&lt;a href="http://blogs.msdn.com/b/uscloud/archive/2012/03/22/windows-azure-for-the-asp-net-developer-series.aspx"&gt;Windows Azure for the ASP.NET Developer&lt;/a&gt;” written by &lt;a href="http://www.rachelappel.com/"&gt;Rachel Appel&lt;/a&gt; (that's me!), &lt;a href="http://www.stratospher.es/"&gt;Adam Hoffman&lt;/a&gt;, and &lt;a href="http://www.peterlaudati.com/"&gt;Peter Laudati&lt;/a&gt; (they're my awesome coworkers!). You can see the complete list of posts in the series at the &lt;a href="http://blogs.msdn.com/b/uscloud" target="_blank"&gt;US Cloud Connection&lt;/a&gt; site.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;ASP.NET developers, particularly those writing enterprise applications, have to think carefully about the more than business requirements. The environment, team, tools, deployment, performance, security, and other factors weigh in when it comes to building robust Web applications.&amp;nbsp; When thinking about using ASP.NET on Azure, you or your team might wonder what challenges an ASP.NET deployment on Azure will entail. Let's take a look at some of the common concerns of ASP.NET developers today and how Azure helps alleviate those concerns, by highlighting a few of the differences between developing on Windows Azure vs. Windows Server.&lt;/p&gt; &lt;h2&gt;Azure Architecture and State Management&lt;/h2&gt; &lt;p&gt;The big architecture decisions are the first topics of consideration for any type of ASP.NET application, and it is no different in the cloud. Some of those important topics you need to consider are:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Overall application architecture, e.g., n-Tier or SOA, and where the code should live and execute.  &lt;li&gt;Defining which tiers are services and which tiers are customer facing  &lt;li&gt;Where to store primary data, reporting data, or lookup data.  &lt;li&gt;State Management &amp;amp; Performance  &lt;li&gt;Security&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;If you're already running ASP.NET on IIS and need to map out architectural concerns of moving to Azure, the &lt;a href="http://go.microsoft.com/?linkid=9737837" target="_blank"&gt;Azure Application profile guidance&lt;/a&gt; [PDF] details migration concerns for ASP.NET developers.&lt;/p&gt; &lt;p&gt;ASP.NET developers are also used to struggling with (or without, to be precise), state over HTTP. Having to deal with the issue of state vs. statelessness imposes requirements on application design, especially when it comes to performance and scalability. Caching in particular, is important, as it allows you to form a strategy around what data is to be static data, and for how long, and with what parameters. While the overall nature of what type of data should be cached doesn't differ (i.e., data that doesn't change often is the best for caching), there are technical &lt;a href="http://msdn.microsoft.com/en-us/library/windowsazure/gg185678.aspx" target="_blank"&gt;differences between caching on-premise and Azure caching&lt;/a&gt;. The &lt;a title="Output Cache Provider for Windows Azure Caching" href="http://msdn.microsoft.com/en-us/library/windowsazure/gg185662.aspx" target="_blank"&gt;output cache provider for windows Azure&lt;/a&gt; works well for all your pages that need standard page output caching.&lt;/p&gt; &lt;p&gt;If you're already using ASP.NET features such as session state or the output cache, those providers are available in Windows Azure as well, so there is no need to change your code to make it fit on Windows Azure. The &lt;a title="Session State Provider for Winddows Azure Caching" href="http://msdn.microsoft.com/en-us/library/windowsazure/gg185668.aspx" target="_blank"&gt;session state provider for Windows Azure&lt;/a&gt; is particularly useful. The session state provider adds cache data into its own process on Windows Azure, rather than the usual in-process state management. At first this may seem odd to ASP.NET developers but keep in mind that Windows Azure is a different platform that can scale rapidly to handle the load, and the cross-process expense is more than justified. More details are available in this introduction to &lt;a href="http://msdn.microsoft.com/en-us/magazine/gg983488.aspx"&gt;Windows Azure Caching Services&lt;/a&gt;.&lt;/p&gt; &lt;h2&gt;Tool and Project Differences&lt;/h2&gt; &lt;p&gt;Fortunately for ASP.NET Web Forms and ASP.NET MVC developers, there are no major tooling or project differences that will catch you off guard when you &lt;a href="http://msdn.microsoft.com/en-us/library/windowsazure/ff687127.aspx" target="_blank"&gt;get started with the Windows Azure tools&lt;/a&gt;. You will need the &lt;a href="http://bit.ly/w3WSv7" target="_blank"&gt;Windows Azure SDK for .NET&lt;/a&gt;, which includes the Windows Azure Tools for Visual Studio. The SDK &amp;amp; tools integrate seamlessly as part of Visual Studio. &lt;/p&gt; &lt;p&gt;One small difference in tooling is the use of the &lt;a href="http://blogs.msdn.com/b/buckwoody/archive/2011/02/01/windows-azure-emulators-on-your-desktop.aspx" target="_blank"&gt;Windows Azure developer emulator&lt;/a&gt; rather than the built-in Cassini ASP.NET development Web server or IIS Express for &lt;a href="http://msdn.microsoft.com/en-us/library/windowsazure/gg432983.aspx#bk_Run" target="_blank"&gt;local machine testing&lt;/a&gt;. While you test your ASP.NET application as you normally would using standard debugging tools, the Windows Azure developer emulator shows what's happening in two console windows inside the emulator windows itself: compute and storage. You can watch basic activity logged as you interact with the application locally. &lt;/p&gt; &lt;p&gt;You can learn more about the tools in the next post in this series. &lt;p&gt;Greenfield ASP.NET Web applications in Windows Azure tend to fall into two categories, the Web Role and the Worker Role, and Visual Studio contains &lt;a href="http://msdn.microsoft.com/en-us/library/windowsazure/ee405487.aspx" target="_blank"&gt;project types to reflect that&lt;/a&gt;. Project types targeting Windows Azure are standard ASP.NET MVC or Web Forms applications that have additional references to Microsoft.Windows Azure and related namespaces as well as .config files containing information for an Windows Azure deployment.&lt;/p&gt; &lt;h2&gt;Deployment Differences&lt;/h2&gt; &lt;p&gt;The application deployment process is unique to the combined concerns of the application and its environment. In corporate settings you might have mounds of red tape in the deployment process, or can only deploy on the third Thursday of the month because of the systems patch schedule. In some shops, devs deploy to internal server(s), others to a hosted environment, and some are already running the cloud. &lt;/p&gt; &lt;p&gt;If you are dealing with a currently existing ASP.NET application, your initial deployment will be the migration to Azure. When you want to &lt;a href="http://blogs.msdn.com/b/jnak/archive/2010/02/08/migrating-an-existing-asp-net-app-to-run-on-windows-azure.aspx" target="_blank"&gt;port your existing ASP.NET project over to Windows Azure&lt;/a&gt;, all that you need is to add a new Azure Deployment project type to your Visual Studio solution. Azure Deployment projects are simple projects that contain installation and configuration commands in XML. &lt;/p&gt; &lt;p&gt;As an ASP.NET developer, deployment is not just the initial deployment, but incremental deployments (patches), and complete site upgrades, as well. Fortunately, &lt;a href="http://msdn.microsoft.com/en-us/library/windowsazure/ff683672.aspx" target="_blank"&gt;Azure Deployment Tools in Visual Studio&lt;/a&gt; make deployment a snap, and the &lt;a href="http://rachelappel.com/azure/automate-azure-application-management-with-wasm-cmdlets"&gt;Windows Azure PowerShell Cmdlets&lt;/a&gt; help you automate everything you need, and work alongside your IT sysadmin with less friction on all deployment projects. &lt;/p&gt; &lt;p&gt;Running your application in production post deployment means you now have a product to support, and with that comes diagnostics and bug fixes.&lt;/p&gt; &lt;h2&gt;Diagnostics and Instrumentation&lt;/h2&gt; &lt;p&gt;Of course, once deployed, you need to rely on instrumentation and server diagnostics, customarily the realm of the sysadmin. Fortunately for .NET developers and sysadmins alike, Windows Azure has a full range of diagnostics, instrumentation, and health monitoring of applications. For example, error logging and app auditing are usually the responsibility of the developer, while things like the IIS logs are that of the sysadmin. Azure brings the necessary IT tasks that developers also need to do right into your browser.&lt;/p&gt; &lt;p&gt;Additionally, when developing on Azure, you will enjoy a set of &lt;a href="http://wappowershell.codeplex.com/" target="_blank"&gt;Windows Azure PowerShell Cmdlets&lt;/a&gt;, which are tools you can use for &lt;a href="http://rachelappel.com/azure/automate-azure-application-management-with-wasm-cmdlets"&gt;automating the configuration and management of Windows Azure&lt;/a&gt; services. &lt;/p&gt; &lt;p&gt;Though diagnostics in a cloud environment can be different in technical implementation, the necessary data you need to make correct decisions about the app's health remains the same. In the article, &lt;a href="http://msdn.microsoft.com/en-us/magazine/ff872379.aspx" target="_blank"&gt;Tips for Migrating Your Applications to the Cloud&lt;/a&gt;, the authors detail how to setup, monitor, and manage, diagnostics from Azure in Visual Studio. While the Windows Azure tools for Visual Studio provide you with a full debugging experience on our workstation, instrumentation takes on a greater importance in the cloud because you cannot attach a debugger to a production deployment.&lt;/p&gt; &lt;h2&gt;Capacity Monitoring, QOS, and Uptime&lt;/h2&gt; &lt;p&gt;Traditionally, teams create applications that run on one or more IIS Web servers, or an internal Web farm, depending on the expected load capacity. If the app and team behind it is large enough, you might be fortunate enough to have a sysadmin that monitors all the key indicators of a crash. Or you might be the one who gets the text message during family dinner hour to fix the app when it breaks, and if you're that person, you probably don't enjoy having to RDP into a server and fish around various tools like the Event Viewer and Perfmon. Azure makes all this unnecessary by providing a set of Web based administrative tools that are easy to use, and a &lt;a href="http://www.windowsazure.com/en-us/develop/net/common-tasks/diagnostics/" target="_blank"&gt;complete set of diagnostic APIs&lt;/a&gt; for use in code. &lt;/p&gt; &lt;p&gt;Azure ensures almost infallible uptime, and the &lt;a href="http://blogs.msdn.com/b/windowsazurestorage" target="_blank"&gt;Windows Azure Storage blog&lt;/a&gt; demonstrates this with lots of great info &lt;a href="http://blogs.msdn.com/b/windowsazurestorage/archive/2011/11/20/windows-azure-storage-a-highly-available-cloud-storage-service-with-strong-consistency.aspx" target="_blank"&gt;about highly available storage&lt;/a&gt;. &lt;/p&gt; &lt;h2&gt;Summary&lt;/h2&gt; &lt;p&gt;If you're an ASP.NET developer just getting started on the Windows Azure platform, or are in need of information about migrating your existing application to Azure, you'll definitely want to &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200082756" target="_blank"&gt;try out the 90 Day Azure Free Trial&lt;/a&gt;. You won't be billed a single penny unless you subscribe to full Azure services. Once you have your Azure account and free trial, download the &lt;a href="http://www.microsoft.com/download/en/details.aspx?id=8396" target="_blank"&gt;Windows Azure Training Kit&lt;/a&gt; (&lt;a href="http://www.windowsazure.com/en-us/develop/net/other-resources/training-kit/" target="_blank"&gt;or use it online&lt;/a&gt;) &lt;/p&gt; &lt;p&gt;&lt;i&gt;For the rest of the posts in this series, see “&lt;a href="http://bit.ly/AzureSeries" target="_blank"&gt;Windows Azure for the ASP.NET Developer&lt;/a&gt;” on &lt;a href="http://bit.ly/USCloud" target="_blank"&gt;US Cloud Connection&lt;/a&gt;.&lt;/i&gt; &lt;p&gt;&lt;i&gt;Are you a startup? Get &lt;a href="http://www.microsoft.com/bizspark/Azure/Default.aspx?WT.mc_id=azure_offer" target="_blank"&gt;BizSpark cloud access&lt;/a&gt;. Got MSDN? Get up to $3,700 of &lt;a href="http://www.windowsazure.com/en-us/pricing/member-offers/msdn-benefits/"&gt;cloud benefits&lt;/a&gt;. Don’t have MSDN? Try the cloud &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200082756" target="_blank"&gt;free for 90 days&lt;/a&gt;!&lt;/i&gt;&lt;/p&gt;</description><pubDate>Thu, 22 Mar 2012 15:43:34 GMT</pubDate><guid isPermaLink="true">http://www.rachelappel.com:80/the-differences-between-development-on-windows-azure-and-windows-server</guid></item><item><title>A guide to element display and positioning with the CSS Box Model</title><link>http://www.rachelappel.com:80/a-guide-to-element-display-and-positioning-with-the-css-box-model</link><description>&lt;p&gt;&lt;font face="Segoe UI"&gt;Web developers tend to shy away from design &amp;amp; style and focus on the business logic, data structures, messaging, and systems development when dealing with web applications. W&lt;/font&gt;&lt;font face="Segoe UI"&gt;ithout a good grasp on positioning, which is often left to the designer, your websites can look very different between competing browsers, and downright ugly in some. Many native development platforms (XAML, Winforms, etc...) and tools implement the positioning of elements on screen as tables or grids. Tables also have been the de facto way to position &lt;a href="http://bit.ly/W3CDOM" target="_blank"&gt;DOM&lt;/a&gt; elements for a decade. However, with the rise of CSS 2/3, sporting new elements and selectors, positioning is more fluid and flexible. &lt;/font&gt;&lt;/p&gt; &lt;h2&gt;&lt;font face="Segoe UI"&gt;Page layout with the Box Model and display attribute&lt;/font&gt;&lt;/h2&gt; &lt;p&gt;&lt;font face="Segoe UI"&gt;Browsers render Web page content using the &lt;font face="Segoe UI"&gt;&lt;a href="http://bit.ly/CSSBoxModel" target="_blank"&gt;Box Model&lt;/a&gt;, meaning that the display, position, margin, padding, and border attributes, combine to render each element as a box. You can inspect the box model for any element in Internet Explorer by using the &lt;a href="http://rachelappel.com/ie-9/investigate-web-pages-using-the-ie9-developer-tools/"&gt;IE F12 tools&lt;/a&gt;. Below shows part of the IE F12 tools displaying the box model for an element.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://rachelappel.com/Media/Default/Windows-Live-Writer/5-things-every-developer-needs-to-know-a_8C1B/image_9.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/5-things-every-developer-needs-to-know-a_8C1B/image_thumb_2.png" width="304" height="199"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Segoe UI"&gt;&lt;font face="Segoe UI"&gt;Setting the display attribute affects the box model by determining whether or not elements render by their default display style or not - block or inline. &lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Segoe UI"&gt;&lt;font face="Segoe UI"&gt;Below is a compare and contrast of block and inline elements: &lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font style="background-color: #ffffff"&gt;&lt;font color="#000000"&gt;&lt;font face="Segoe UI"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;font face="Segoe UI"&gt;&lt;strong&gt;&lt;a href="http://en.wikipedia.org/wiki/Block-level_element#Block_elements" target="_blank"&gt;Block&lt;/a&gt;&lt;/strong&gt;:&lt;/font&gt; Block elements define the structure and layout of the page. &lt;/font&gt; &lt;ul&gt; &lt;li&gt;&lt;font color="#000000"&gt;Can contain other block or inline elements. &lt;/font&gt; &lt;li&gt;&lt;font face="Segoe UI"&gt;&lt;font color="#000000"&gt;Render line breaks both before and after the element.&lt;/font&gt;&lt;/font&gt;  &lt;li&gt;A block element will take up 100% of the width of its container element.&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;&lt;font face="Segoe UI"&gt;&lt;font color="#000000"&gt;&lt;a href="http://en.wikipedia.org/wiki/Block-level_element#Inline_elements" target="_blank"&gt;Inline&lt;/a&gt;: Inline elements render inside of block or other inline elements and meant to markup, contain, or style the content, but not define its structure. &lt;/font&gt;&lt;/font&gt; &lt;ul&gt; &lt;li&gt;Can contain other inline elements only.  &lt;li&gt;&lt;font face="Segoe UI"&gt;&lt;font color="#000000"&gt;Do not render any line breaks.&lt;/font&gt;&lt;/font&gt;  &lt;li&gt;An inline element will size to match that of the content inside of it.&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;&lt;font face="Segoe UI"&gt;&lt;font color="#000000"&gt;Fixed: Fixed elements position relative to &lt;em&gt;browser&lt;/em&gt;, and out of the normal flow of the page.&lt;/font&gt; &lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font color="#000000"&gt;&lt;strong&gt;Block elements:&lt;/strong&gt; &lt;font face="Consolas"&gt;&amp;lt;div&amp;gt; &amp;lt;h1&amp;gt;…&amp;lt;h6&amp;gt; &amp;lt;p&amp;gt; &amp;lt;ul&amp;gt; &amp;lt;ol&amp;gt; &amp;lt;table&amp;gt; &amp;lt;form&amp;gt;&lt;/font&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Inline elements:&lt;/strong&gt; &lt;font face="Consolas"&gt;&amp;lt;span&amp;gt; &amp;lt;a&amp;gt; &amp;lt;strong&amp;gt; &amp;lt;em&amp;gt; &amp;lt;img /&amp;gt;&lt;/font&gt; &lt;/p&gt; &lt;p&gt;Setting the &lt;font face="Consolas"&gt;display&lt;/font&gt; attribute resets the natural way the element renders to the value of your choosing. In the example below, the #sample element will render as a block element even if its default behavior is inline. &lt;/p&gt; &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:da0d49be-f1b7-42cb-bad1-ee659548e6a8" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; max-height: 500px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#800000"&gt;#sample&lt;/span&gt; {    &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;span style="color:#ff0000"&gt;display&lt;/span&gt;:&lt;span style="color:#0000ff"&gt;block&lt;/span&gt;;&lt;/li&gt; &lt;li&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt;Block and inline elements won't be of much help without the &lt;font face="Consolas"&gt;position&lt;/font&gt; property to put them in the right place.&lt;/p&gt; &lt;h2&gt;Positioning elements in the page&lt;/h2&gt; &lt;p&gt;Your choices in positioning with CSS include:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Static:&lt;/strong&gt; The default, and something you'll probably never use.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Absolute:&lt;/strong&gt; Absolute positioning is the position of an element in relation to the top:left or 0:0 coordinates of the HTML document.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Relative:&lt;/strong&gt; Relative positioning is when an element is positioned in relation to its parent or predecessor&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Relative + Absolute:&lt;/strong&gt; This is absolute positioning within a relatively positioned parent. &lt;/p&gt; &lt;p&gt;All elements position from their top and left by default, but you can override this by setting the right or bottom attributes, and the element will position itself from those coordinates instead.&lt;/p&gt; &lt;p&gt;This tutorial &lt;a href="http://www.barelyfitz.com/screencast/html-training/css/positioning/" target="_blank"&gt;sums up positioning&lt;/a&gt; nicely.&amp;nbsp; &lt;/p&gt; &lt;h2&gt;Padding and Margins&lt;/h2&gt; &lt;p&gt;&lt;font face="Segoe UI"&gt;Padding and margins also play an important role in positioning. Padding is the amount of space between the element edge and the content or children elements inside it, and margins are the space between elements. CSS contains p&lt;font face="Segoe UI"&gt;adding and margin &lt;/font&gt;settings for top, left, bottom, and right, and you can set any combination of them. Setting too much or too little of either will shift the elements, often far out of line, or overlapping other elements. &lt;/font&gt;Below is some CSS that sets padding and margins: &lt;/p&gt; &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:5f722403-26eb-4c0d-9983-366350063ab0" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; max-height: 500px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#800000"&gt;#sample&lt;/span&gt; {    &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;     &lt;span style="color:#ff0000"&gt;padding-top&lt;/span&gt;:&lt;span style="color:#0000ff"&gt;5px&lt;/span&gt;;    &lt;/li&gt; &lt;li&gt;     &lt;span style="color:#ff0000"&gt;padding-right&lt;/span&gt;:&lt;span style="color:#0000ff"&gt;0px&lt;/span&gt;;    &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;     &lt;span style="color:#ff0000"&gt;padding-bottom&lt;/span&gt;:&lt;span style="color:#0000ff"&gt;0px&lt;/span&gt;;    &lt;/li&gt; &lt;li&gt;     &lt;span style="color:#ff0000"&gt;padding-left&lt;/span&gt;:&lt;span style="color:#0000ff"&gt;5px&lt;/span&gt;;    &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt;You can use this shortcut syntax to specify one or more of the padding/margin parameters.&lt;/p&gt; &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:52711995-91dc-4d25-83f9-d9ab4ab08071" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; max-height: 500px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#800000"&gt;#sample&lt;/span&gt; {    &lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;     &lt;span style="color:#ff0000"&gt;padding&lt;/span&gt;:&lt;span style="color:#0000ff"&gt;5px&lt;/span&gt; &lt;span style="color:#0000ff"&gt;5px&lt;/span&gt; &lt;span style="color:#0000ff"&gt;5px&lt;/span&gt; &lt;span style="color:#0000ff"&gt;5px&lt;/span&gt;;&lt;/li&gt; &lt;li&gt;     &lt;span style="color:#ff0000"&gt;margin&lt;/span&gt;:&lt;span style="color:#0000ff"&gt;5px&lt;/span&gt; &lt;span style="color:#0000ff"&gt;5px&lt;/span&gt; &lt;span style="color:#0000ff"&gt;5px&lt;/span&gt; &lt;span style="color:#0000ff"&gt;5px&lt;/span&gt;;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt;An easy way to remember the the order of the values in the shortcut syntax is to use the mnemonic hint TRBL, pronounced "trouble" (very fitting for CSS)&amp;nbsp; Top, Right, Bottom, Left.&lt;/p&gt; &lt;h2&gt;CSS Units of Measurement&lt;/h2&gt; &lt;p&gt;Many elements have what appears to be a myriad of options for sizing and placement of content, (e.g., ems, pcts, or points) and this a point of confusion for developers. You can apply different UOMs to any attribute requiring them. The important UOMs to know:  &lt;p&gt;&lt;strong&gt;Percent&lt;/strong&gt;: Units render the attribute according to a percentage you set. Since percentages deal in relatives, a unit of percent in CSS is always relative to its parent element.  &lt;p&gt;&lt;strong&gt;Pixels&lt;/strong&gt;: Pixels have long been the ruling measurement for on-screen displays in programs on both desktops and the Web. Although pixels have their place, they are not as fluid nor flexible as percent and ems.  &lt;p&gt;&lt;strong&gt;em&lt;/strong&gt;: Pronounced "em". 1em is equal to the current font size. This means that 2 em is twice the current font size, while a 1.5em is one and a half times the current size. The default size in browsers set to render medium sized text (which is most), renders 16pt font, so ems weigh against that.  &lt;p&gt;&lt;strong&gt;pt&lt;/strong&gt;: 1 point equals 1/72 inch. Points usually specify font sizes.&amp;nbsp; &lt;p&gt;&lt;strong&gt;The others&lt;/strong&gt;:  &lt;p&gt;Although far less frequently seen on the web, these measurements also exist:  &lt;ul&gt; &lt;li&gt;cm/mm: Centimeter and millimeter. This is for you sciency types out there, you might want to display something in exact scale.  &lt;li&gt;ex: 1 ex is the x-height of a font, or roughly half the font size. Or you could just use an em and it will be easier.  &lt;li&gt;pc: 1 pica equals 12 points, for those who like to do extra calculations for no reason.  &lt;li&gt;in: Inches. Seriously? Imperial units are so 19th century.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Regardless of the visual model (See &lt;em&gt;Display and positioning&lt;/em&gt;), elements position by their top and left coordinates by default; however, you can position elements from any side you'd like.&lt;/p&gt; &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:7c4f873e-9fbc-4ff2-a458-e3300e9e9156" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #fff; max-height: 500px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#800000"&gt;#uom-sample&lt;/span&gt; {&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;span style="color:#ff0000"&gt;position&lt;/span&gt;:&lt;span style="color:#0000ff"&gt;absolute&lt;/span&gt;;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#ff0000"&gt;margin&lt;/span&gt;:&lt;span style="color:#0000ff"&gt;0px&lt;/span&gt;;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;span style="color:#ff0000"&gt;bottom&lt;/span&gt;:&lt;span style="color:#0000ff"&gt;5px&lt;/span&gt;;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#ff0000"&gt;left&lt;/span&gt;:&lt;span style="color:#0000ff"&gt;5px&lt;/span&gt;;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt;The above code sample demonstrates positioning an element &lt;em&gt;from&lt;/em&gt; the bottom/left rather than the top/left. &lt;/p&gt; &lt;p&gt;&lt;font face="Segoe UI"&gt;&lt;/font&gt;&lt;/p&gt; &lt;h2&gt;&lt;font face="Segoe UI"&gt;Summary&lt;/font&gt;&lt;/h2&gt; &lt;p&gt;&lt;font face="Segoe UI"&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Segoe UI"&gt;Knowing the quirks of CSS is important, even when there's a designer on the team, since most web developers render code on the server and send it to the browser, where the browser then renders the content, HTML, client side script, and CSS. Below are five things that will make your life in CSS easier.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;Looking for a nice, lightweight, CSS editor? Try &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200082795" target="_blank"&gt;WebMatrix&lt;/a&gt;: full featured CSS intellisense &amp;amp; tooltips without the overhead of full IDEs (It is what I use for CSS).&lt;/p&gt;</description><pubDate>Thu, 08 Mar 2012 18:00:02 GMT</pubDate><guid isPermaLink="true">http://www.rachelappel.com:80/a-guide-to-element-display-and-positioning-with-the-css-box-model</guid></item><item><title>Add HTML5 Geolocation plus Bing Maps into ASP.NET MVC views</title><link>http://www.rachelappel.com:80/add-html5-geolocation-plus-bing-maps-into-asp.net-mvc-views</link><description>&lt;p&gt;&lt;strong&gt;The &lt;/strong&gt;&lt;a href="http://www.microsoft.com/maps/developers/web.aspx" target="_blank"&gt;&lt;strong&gt;Bing Maps API&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; is a free, easy to use API&lt;/strong&gt;, that allows you to incorporate mapping features into your ASP.NET MVC or application by using Web standards such as JavaScript, and the now &lt;a title="Bing Maps HTML5 Geolocation support" href="http://blogs.msdn.com/b/giorgio/archive/2011/08/07/bing-maps-add-support-for-html5-geolocation.aspx" target="_blank"&gt;supported&lt;/a&gt; HTML5 Geolocation. &lt;/p&gt; &lt;h2&gt;Bing Maps and ASP.NET MVC&lt;/h2&gt; &lt;p&gt;A Bing maps API key is required when using the API. The Bing Maps key allows you to access Geolocation data, and to manipulate an in-view Map object with JavaScript via the Bing Maps API. The &lt;a title="http://www.bingmapsportal.com/" href="http://www.bingmapsportal.com/" target="_blank"&gt;Bing Maps Developer Portal&lt;/a&gt; is where you can get a key by registering with your &lt;a href="https://signup.live.com/?lic=1" target="_blank"&gt;Windows Live ID&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;Once you're set with a key, you'll need these files in your MVC project to develop with Bing Maps:&lt;/p&gt; &lt;p&gt;\Scripts\YourBingMapsScript.js - This file contains your script that works with Bing Maps &amp;amp; Geolocation. &lt;/p&gt; &lt;p&gt;\Content\Site.css - A small bit of CSS is required to style the Map &lt;/p&gt; &lt;p&gt;\Views\BingMaps\Index.cshtml - The MVC view that contains the Bing Map HTML &lt;/p&gt; &lt;p&gt;Since the code is HTML &amp;amp;CSS that conform to Web standards, the bulk of the lives is in the .js file and/or the view. Although using MVC, the model and controller are not necessary for manipulating maps with client side script, but don't throw out the model and controller yet, as you will need them to work with other data.&lt;/p&gt; &lt;h2&gt;The Bing Maps Interactive SDK&lt;/h2&gt; &lt;p&gt;If you're writing code that uses Bing Maps, the &lt;a href="http://bit.ly/BingMapsSDK" target="_blank"&gt;Interactive Bing Maps SDK&lt;/a&gt; is a "must visit" Web site. By choosing the options on the left of the page, the Bing Maps Interactive SDK creates usable JavaScript, and a "View HTML " button that exposes the page source. &lt;/p&gt; &lt;p&gt;&lt;a href="http://rachelappel.com/Media/Default/Windows-Live-Writer/6847e0fb0c5b_E8C7/image_thumb1_2.png" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image_thumb1" border="0" alt="image_thumb1" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/6847e0fb0c5b_E8C7/image_thumb1_thumb.png" width="604" height="469"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;The Bing Maps API &amp;amp; SDK contain more than an interactive website. Bing Maps development gives you access to many productive development tools such as:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;The Bing Maps AJAX Control (multiple versions)  &lt;li&gt;The Bing Maps iOS Control  &lt;li&gt;A Bing Maps Silverlight Control  &lt;li&gt;SOAP and REST services  &lt;li&gt;More...&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;You can use the Bing Maps Interactive API to create the equivalent code as the samples shown in this post.&lt;/p&gt; &lt;h2&gt;Render Bing Maps in MVC views with the Bing Maps AJAX control.&lt;/h2&gt; &lt;p&gt;While it's called the Bing Maps AJAX control, it's not a control at all, but a JavaScript library instead. HTML and client side script (JavaScript, jQuery, etc...) are the enabling technologies for Bing Maps on the ASP.NET (or any Web) platform. To reference the Bing Maps AJAX Control, your view needs the &amp;lt;script&amp;gt; reference below. &lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;src&lt;/span&gt;&lt;span class="kwrd"&gt;="http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=7.0"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="text/javascript"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;If you plan to use the Bing Maps AJAX control in multiple views, the &amp;lt;script&amp;gt; reference can go in the _Layout.cshtml file, otherwise you can add it to the required views or a different layout page. Inside a view, a &amp;lt;div&amp;gt; element should contain and display the map, and is also the DOM object that you manipulate in code, so it needs an &lt;font face="Courier New"&gt;id&lt;/font&gt; attribute. &lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="map"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;font face="Calibri"&gt;Since the browser renders a tiny &amp;lt;div&amp;gt; by default, some CSS is necessary, such as the position, width, and height, in which to create a suitable DOM shape for maps. You can save the CSS in the \Content\Site.css file, or its own file, for reusability across views.  &lt;/font&gt;&lt;/pre&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;style&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;#map&lt;/pre&gt;&lt;pre class="alt"&gt;{&lt;/pre&gt;&lt;pre&gt;    position:relative; &lt;/pre&gt;&lt;pre class="alt"&gt;    width: 500px; &lt;/pre&gt;&lt;pre&gt;    height: 500px; &lt;/pre&gt;&lt;pre class="alt"&gt;    border:0px&lt;/pre&gt;&lt;pre&gt;}&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;style&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&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;pre class="csharpcode"&gt;&lt;font face="Calibri"&gt;After the HTML is in place, you can write code to capture the user's positional data to display a Bing map showing the location, nearby restaurants, or other information requested by the user. &lt;/font&gt;&lt;/pre&gt;
&lt;div class="csharpcode"&gt;
&lt;h2&gt;&lt;font face="Calibri"&gt;Display a Bing Map with a Pushpin.&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font face="Calibri"&gt;You first need positional data from the user before displaying the map. Once you have the positional data points, i.e., latitude and longitude, you can add a Bing Map to any MVC view. To learn how to obtain positional data for your Web site or app, see this post on &lt;/font&gt;&lt;a href="http://rachelappel.com/use-the-w3c-geolocation-api-to-create-location-aware-web-sites" target="_blank"&gt;&lt;font face="Calibri"&gt;creating location aware Web sites with the HTML5 Geolocation&lt;/font&gt;&lt;/a&gt;&lt;font face="Calibri"&gt;.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Calibri"&gt;The code below retrieves the latitude and longitude coordinates from the position argument of a showMap method, then creates an instance of a Map object the position, credentials, center, map type, and zoom level. The code continues on by centering the Pushpin to represent the user's location in the map.&lt;/font&gt;&lt;/p&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; showMap(position) {&lt;/pre&gt;&lt;pre&gt; &lt;/pre&gt;&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;var&lt;/span&gt; latitude = position.coords.latitude;&lt;/pre&gt;&lt;pre&gt;    &lt;span class="kwrd"&gt;var&lt;/span&gt; longitude = position.coords.longitude;&lt;/pre&gt;&lt;pre class="alt"&gt; &lt;/pre&gt;&lt;pre&gt;    &lt;span class="kwrd"&gt;var&lt;/span&gt; map = &lt;span class="kwrd"&gt;new&lt;/span&gt; Microsoft.Maps.Map($(&lt;span class="str"&gt;"#map"&lt;/span&gt;)[0],&lt;/pre&gt;&lt;pre class="alt"&gt;    { &lt;/pre&gt;&lt;pre&gt;        credentials: &lt;span class="str"&gt;"Your Bing Maps API Key"&lt;/span&gt;,&lt;/pre&gt;&lt;pre class="alt"&gt;        center: &lt;span class="kwrd"&gt;new&lt;/span&gt; Microsoft.Maps.Location(latitude, longitude),&lt;/pre&gt;&lt;pre&gt;        mapTypeId:   Microsoft.Maps.MapTypeId.road,&lt;/pre&gt;&lt;pre class="alt"&gt;        zoom:        10&lt;/pre&gt;&lt;pre&gt;    });   &lt;/pre&gt;&lt;pre class="alt"&gt; &lt;/pre&gt;&lt;pre&gt;    &lt;span class="kwrd"&gt;var&lt;/span&gt; center = map.getCenter();&lt;/pre&gt;&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;var&lt;/span&gt; pin = &lt;span class="kwrd"&gt;new&lt;/span&gt; Microsoft.Maps.Pushpin(center, { width: 50, height: 50, draggable: &lt;span class="kwrd"&gt;false&lt;/span&gt; });&lt;/pre&gt;&lt;pre&gt;    map.entities.push(pin);&lt;/pre&gt;&lt;pre class="alt"&gt;}&lt;/pre&gt;&lt;/div&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;font face="Calibri"&gt;The result should look something like this (but with your coordinates):&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rachelappel.com/Media/Default/Windows-Live-Writer/6847e0fb0c5b_E8C7/SNAGHTML1015b426_thumb2_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML1015b426_thumb2" border="0" alt="SNAGHTML1015b426_thumb2" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/6847e0fb0c5b_E8C7/SNAGHTML1015b426_thumb2_thumb.png" width="500" height="535"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Calibri"&gt;Should you want to customize the Pushpin icon, just change the Pushpin construction arguments, and pass in the path and name of the graphics file (.png, .jpg., and standard Web formats).&lt;/font&gt;&lt;/p&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; pin = &lt;span class="kwrd"&gt;new&lt;/span&gt; Microsoft.Maps.Pushpin(center, {icon: &lt;span class="str"&gt;'CustomPushpin.png'&lt;/span&gt;, width: 50, height: 50, draggable: &lt;span class="kwrd"&gt;true&lt;/span&gt;}); &lt;/pre&gt;&lt;/div&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;font face="Calibri"&gt;Customizing the map further by adding an Infobox, which is a small rectangle with information about a particular location, takes only a few lines of code. Make sure the clear method is run before pushing an Infobox onto a map or the latest Infobox, Pushpin, or other object will overlay the previous.&lt;/font&gt;&lt;/p&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt; map.entities.clear(); &lt;/pre&gt;&lt;pre&gt; &lt;span class="kwrd"&gt;var&lt;/span&gt; infoboxOptions = {title:&lt;span class="str"&gt;'Bing Maps Rock!'&lt;/span&gt;, description:&lt;span class="str"&gt;'Add an Infobox to a map with very little JavaScript!'&lt;/span&gt;}; &lt;/pre&gt;&lt;pre class="alt"&gt; &lt;span class="kwrd"&gt;var&lt;/span&gt; defaultInfobox = &lt;span class="kwrd"&gt;new&lt;/span&gt; Microsoft.Maps.Infobox(map.getCenter(), infoboxOptions );    &lt;/pre&gt;&lt;pre&gt; map.entities.push(defaultInfobox);&lt;/pre&gt;&lt;/div&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;font face="Calibri"&gt;The above code creates an Infobox on the map similar to the one shown here:&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="file:///C:/Users/rachel/AppData/Local/Temp/WindowsLiveWriter1286139640/supfiles13DE76EC/SNAGHTML101866d15.png"&gt;&lt;font face="Calibri"&gt;&lt;a href="http://rachelappel.com/Media/Default/Windows-Live-Writer/6847e0fb0c5b_E8C7/SNAGHTML101866d1_thumb2_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML101866d1_thumb2" border="0" alt="SNAGHTML101866d1_thumb2" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/6847e0fb0c5b_E8C7/SNAGHTML101866d1_thumb2_thumb.png" width="500" height="535"&gt;&lt;/a&gt;&lt;/font&gt;&lt;/a&gt;&lt;font face="Calibri"&gt; &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Calibri"&gt;These are just a few simple, but core examples, of what you can do with Bing Maps. For more information on developing for Bing Maps, see below in the Summary &amp;amp; Resources.&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;
&lt;h2&gt;Summary &amp;amp; Resources&lt;/h2&gt;
&lt;p&gt;&lt;font size="2"&gt;The Bing Maps AJAX control is a handy library you can use to add geo-interactivity to your Web sites with little code. Additionally, you can incorporate other APIs to make full featured location aware mapping apps.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;a title="http://rachelappel.com/use-the-w3c-geolocation-api-to-create-location-aware-web-sites" href="http://rachelappel.com/use-the-w3c-geolocation-api-to-create-location-aware-web-sites" target="_blank"&gt;&lt;font size="2"&gt;Use the W3C Geolocation API to create location aware Web sites&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/gg427624.aspx" href="http://msdn.microsoft.com/en-us/library/gg427624.aspx" target="_blank"&gt;&lt;font size="2"&gt;The Bings Map control (Bing Maps API)&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb545001.aspx" target="_blank"&gt;&lt;font size="2"&gt;Bing Maps Articles&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/gg508987.aspx" href="http://msdn.microsoft.com/en-us/library/gg508987.aspx" target="_blank"&gt;&lt;font size="2"&gt;Customizing Bing Maps Pushpins&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://devhammer.net/blog/reuse-in-action-bing-maps-rest-api-and-community-megaphone" target="_blank"&gt;&lt;font size="2"&gt;G. Andrew Duthie demonstrates bing maps in action with CommunityMegaphone.com&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Tue, 24 Jan 2012 21:38:42 GMT</pubDate><guid isPermaLink="true">http://www.rachelappel.com:80/add-html5-geolocation-plus-bing-maps-into-asp.net-mvc-views</guid></item><item><title>A New MSDN Magazine Column: The Web Development Report</title><link>http://www.rachelappel.com:80/a-new-msdn-magazine-column-the-web-development-report</link><description>&lt;p&gt;&lt;strong&gt;Announcing my new monthly column at MSDN Magazine...&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rachelappel.com/Media/Default/Windows-Live-Writer/aca9a69a0db7_96CB/msdn-magazine_2.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="msdn-magazine" border="0" alt="MSDN Magazine Issue" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/aca9a69a0db7_96CB/msdn-magazine_thumb.png" width="120" height="159" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight: bold;"&gt;The Web Development Report&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Each month I'll discuss the latest and greatest topics and issues in Web application development using technologies such as HTML5, ASP.NET, jQuery, Mobile Web and more! You can read the inaugural column and article for the January 2012 issue titled &lt;a href="http://bit.ly/zmpjpH" target="_blank"&gt;&lt;em&gt;Getting Started with Mobile Web Development Using HTML5, jQuery Mobile and ASP.NET MVC 4&lt;/em&gt;&lt;/a&gt;.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;If you'd like to leave feedback, there's plenty of options: This blog, in the article comments, email, or at any of the social networking options available from the homepage: &lt;a href="http://rachelappel.com"&gt;http://rachelappel.com&lt;/a&gt;. Let me know what you think and what topics you want to read about in the world of Web.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bit.ly/MSDN-Mag" target="_blank"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="msdnmag-banner" border="0" alt="MSDN Magazine" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/aca9a69a0db7_96CB/msdnmag-banner_5.png" width="244" height="78" /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Sat, 21 Jan 2012 18:14:48 GMT</pubDate><guid isPermaLink="true">http://www.rachelappel.com:80/a-new-msdn-magazine-column-the-web-development-report</guid></item><item><title>Use the W3C Geolocation API to create location aware web sites</title><link>http://www.rachelappel.com:80/use-the-w3c-geolocation-api-to-create-location-aware-web-sites</link><description>Location aware services and applications are becoming more important than ever before, as smartphones, tablets, and other fully featured mobile devices become ubiquitous. The &lt;a href="http://dev.w3.org/geo/api/spec-source.html" target="_blank"&gt;W3C Geolocation API&lt;/a&gt; gives developers an easy way to integrate client side location aware services within their web pages.  &lt;h2&gt;Hello, location aware world!&lt;/h2&gt; &lt;p&gt;With the advent of geolocation services and mapping APIs, web sites and applications are popping up daily providing the following types location aware software:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Games and social applications, (e.g., Foursquare, Twitter, Trip It, Facebook, etc...)  &lt;li&gt;Search applications for local services (e.g., restaurants, shops, entertainment, etc...)  &lt;li&gt;Navigation &amp;amp; maps  &lt;li&gt;Package shipping/tracking &amp;amp; transportation services  &lt;li&gt;Personal health &amp;amp; fitness  &lt;li&gt;More...&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Notice there's a good mix of both business and consumer applications that benefit from using geolocation. Fortunately, for developers, &lt;strong&gt;location aware web sites and apps are easy to create with web standards like HTML5, JavaScript, and CSS&lt;/strong&gt;. On top of that, APIs like Bing&amp;nbsp; or Google Maps make great companions to these sites - and don't forget 3rd party APIs such as Foursquare or Yelp. &lt;/p&gt; &lt;h2&gt;How location aware web sites work&lt;/h2&gt; &lt;p&gt;Geolocation apps work by detecting the user's location via positional data that it receives from a geolocation source. &lt;/p&gt; &lt;p&gt;There are three basic steps to the process:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;The client browses to a web page that attempts to access the geolocation source.  &lt;li&gt;The app requests permission to send access the geolocation source.  &lt;li&gt;If the user permits, the app or web site can access and use the user's positional data. (If not, an error occurs. See below &lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Once you have obtained the user's coordinates from the API, you can display maps, give directions,show nearby points of interest&lt;/p&gt; &lt;p&gt;However, keep in mind that &lt;strong&gt;the device is the deciding factor regarding the accuracy of the positional data.&lt;/strong&gt; For example, using a 3G smart phone should yield more accurate results than a desktop machine that connects through an ISP a mile away, using an IP address based method. Devices can use one or more of these methods:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Coordinate triangulation  &lt;li&gt;Global Positioning System (GPS)  &lt;li&gt;Wi-Fi with MAC addresses from RFID, Wi-Fi, and Bluetooth  &lt;li&gt;IP address  &lt;li&gt;GSM or CDMA cell phone IDs  &lt;li&gt;Custom sources: Some phone manufacturers like Nokia &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Many smart phones provide a way for users to switch between sources such as 3G or WIFI.&lt;/p&gt; &lt;h2&gt;Obtaining the user's positional data using the HTML5 Geolocation API. &lt;/h2&gt; &lt;p&gt;For creating web sites either straight-up JavaScript or jQuery will work fine with the geolocation API. It's quite small, with only three methods:&lt;/p&gt; &lt;p&gt; &lt;table border="1" cellspacing="1" cellpadding="1" width="600"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="181"&gt;&lt;strong&gt;Method&lt;/strong&gt;&lt;/td&gt; &lt;td valign="top" width="419"&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="181"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/gg593066(v=vs.85).aspx"&gt;clearWatch&lt;/a&gt;&lt;/td&gt; &lt;td valign="top" width="419"&gt;Stops listening for updates to the current geographical location. &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="181"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/gg593067(v=vs.85).aspx"&gt;getCurrentPosition&lt;/a&gt;&lt;/td&gt; &lt;td valign="top" width="419"&gt;Obtains the geographic position, in terms of latitude and longitude coordinates. &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="181"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/gg593068(v=vs.85).aspx"&gt;watchPosition&lt;/a&gt;&lt;/td&gt; &lt;td valign="top" width="419"&gt;Begins listening for updates to the current geographical location of the device running the client. Use this method to listen for location updates.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;Before obtaining the user's coordinates, a call to &lt;a title="Modernizr" href="http://modernizr.com" target="_blank"&gt;Modernizr&lt;/a&gt; performs &lt;a title="IE FireFox Chrome Opera - Detect HTML5 features with Modernizr" href="http://rachelappel.com/detect-html5-amp-css-3-features-in-your-asp.net-web-forms-mvc-or-razor-pages-with-modernizr" target="_blank"&gt;feature detection&lt;/a&gt; for geolocation support. If the browser supports geolocation, the code calls the &lt;font face="Courier New"&gt;watchPosition()&lt;/font&gt; method, and passes success and error callback methods as arguments. Below is the code sample outlining&amp;nbsp; the call to &lt;font face="Courier New"&gt;watchPosition()&lt;/font&gt;.&lt;/p&gt; &lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;$(&lt;span class="kwrd"&gt;function&lt;/span&gt; () {&lt;/pre&gt;&lt;pre&gt;    &lt;span class="kwrd"&gt;var&lt;/span&gt; watchID;&lt;/pre&gt;&lt;pre class="alt"&gt;    $(&lt;span class="str"&gt;"#watch"&lt;/span&gt;).click(&lt;span class="kwrd"&gt;function&lt;/span&gt; () {&lt;/pre&gt;&lt;pre&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (Modernizr.geolocation) {&lt;/pre&gt;&lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;var&lt;/span&gt; nav = window.navigator;&lt;/pre&gt;&lt;pre&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (nav != &lt;span class="kwrd"&gt;null&lt;/span&gt;) {&lt;/pre&gt;&lt;pre class="alt"&gt;                &lt;span class="kwrd"&gt;var&lt;/span&gt; geoloc = nav.geolocation;&lt;/pre&gt;&lt;pre&gt;                watchID = geoloc.watchPosition(successCallback, errorCallback);&lt;/pre&gt;&lt;pre class="alt"&gt;            }&lt;/pre&gt;&lt;pre&gt;        }&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;        { $(&lt;span class="str"&gt;"#message"&lt;/span&gt;).text(&lt;span class="str"&gt;"You'll need to enter your address manually."&lt;/span&gt;); }&lt;/pre&gt;&lt;pre class="alt"&gt;    });   &lt;/pre&gt;&lt;pre&gt;});&lt;/pre&gt;&lt;/div&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;A successful completion of the &lt;font face="Courier New"&gt;watchPosition()&lt;/font&gt; method triggers the &lt;font face="Courier New"&gt;successCallback()&lt;/font&gt; method. At this time, the code can access the positional data returned from the Geolocation service in order to display Bing maps, list nearby attractions, or whatever is required. Below shows code that obtains the user's coordinates, then displays the latitude and longitude in a web page &lt;font face="Courier New"&gt;&amp;lt;div&amp;gt;&lt;/font&gt; element (&lt;font face="Courier New"&gt;&amp;lt;div id="message"&amp;gt;&lt;/font&gt;). Notice that the &lt;em&gt;position&lt;/em&gt; argument&amp;nbsp; is populated with data, however not all the properties will contain values (e.g., altitude), depending on the capabilities the device and service.&lt;/p&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; successCallback(position) {&lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;var&lt;/span&gt; latitude = position.coords.latitude;&lt;/pre&gt;&lt;pre&gt;    &lt;span class="kwrd"&gt;var&lt;/span&gt; longitude = position.coords.longitude;&lt;/pre&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;    $(&lt;span class="str"&gt;"#message"&lt;/span&gt;).text(&lt;span class="str"&gt;"There you are at "&lt;/span&gt; + latitude + &lt;span class="str"&gt;" "&lt;/span&gt; + longitude);&lt;/pre&gt;&lt;pre class="alt"&gt;}&lt;/pre&gt;&lt;/div&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;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;Of course, the code won't always run successfully. There are many things that can get in the way: bad weather, permission denied, timeouts, no cell reception, and gremlins, to name a few. &lt;/p&gt;
&lt;h2&gt;Dealing with errors and timeouts&lt;/h2&gt;
&lt;p&gt;The &lt;font face="Courier New"&gt;errorCallback()&lt;/font&gt; function does what you might expect, it runs when an error occurs. There are three frequently occurring errors to look for when the &lt;font face="Courier New"&gt;errorCallback()&lt;/font&gt; executes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;PERMISSION_DENIED&lt;/li&gt;
&lt;li&gt;POSITION_UNAVAILABLE&amp;nbsp; &lt;/li&gt;
&lt;li&gt;TIMEOUT&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;A switch statement works nicely to determine the error source and take corrective action, as each case checks value in the &lt;font face="Courier New"&gt;error.code&lt;/font&gt; property against a set of constants that correspond to error numbers.&lt;/p&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; handle_errors(error) {&lt;/pre&gt;&lt;pre&gt;    &lt;span class="kwrd"&gt;switch&lt;/span&gt; (error.code) {&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;case&lt;/span&gt; error.PERMISSION_DENIED: &lt;/pre&gt;&lt;pre&gt;            alert(&lt;span class="str"&gt;"User did not share geolocation data"&lt;/span&gt;);&lt;/pre&gt;&lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="kwrd"&gt;case&lt;/span&gt; error.POSITION_UNAVAILABLE: &lt;/pre&gt;&lt;pre class="alt"&gt;            alert(&lt;span class="str"&gt;"Could not detect current position"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;            &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;case&lt;/span&gt; error.TIMEOUT: &lt;/pre&gt;&lt;pre&gt;            alert(&lt;span class="str"&gt;"Time out"&lt;/span&gt;);&lt;/pre&gt;&lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;        &lt;span class="kwrd"&gt;default&lt;/span&gt;: &lt;/pre&gt;&lt;pre class="alt"&gt;            alert(&lt;span class="str"&gt;"Unknown error"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;            &lt;span class="kwrd"&gt;break&lt;/span&gt;;&lt;/pre&gt;&lt;pre class="alt"&gt;    }&lt;/pre&gt;&lt;pre&gt;} &lt;/pre&gt;&lt;/div&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;&amp;nbsp;&lt;/p&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;h2&gt;&lt;font face="Calibri"&gt;Summary&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;Location aware web sites are becoming more important than ever before, and since the W3C Geolocation API is a standard, it works with any technology ranging from plain HTML to ASP.NET. &lt;/p&gt;
&lt;p&gt;To get started creating location aware sites, check out the following resources:&lt;/p&gt;
&lt;p&gt;&lt;a title="W3C Geolocation API" href="http://dev.w3.org/geo/api/spec-source.html#introduction" target="_blank"&gt;W3C Geolocation Introduction&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;a title="http://www.codeproject.com/Articles/190201/Geolocation-API-and-Client-Side-Maps-Frameworks?display=Print" href="http://www.codeproject.com/Articles/190201/Geolocation-API-and-Client-Side-Maps-Frameworks?display=Print" target="_blank"&gt;Geolocation APIs &amp;amp; client side frameworks on Code Project&lt;/a&gt;&lt;/p&gt;</description><pubDate>Tue, 20 Dec 2011 19:43:29 GMT</pubDate><guid isPermaLink="true">http://www.rachelappel.com:80/use-the-w3c-geolocation-api-to-create-location-aware-web-sites</guid></item><item><title>Stats, data, and answers, as to why there are so few women in technology fields.</title><link>http://www.rachelappel.com:80/stats-data-and-answers-as-to-why-there-are-so-few-women-in-technology-fields</link><description>&lt;p&gt;Women today represent an abysmal percentage of the population of most &lt;a href="http://www.mn-stem.com/" target="_blank"&gt;&lt;strong&gt;STEM&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; fields (Science, Technology, Engineering, and Math)&lt;/strong&gt;, and that number is shrinking, rather than expanding. At the same time, fewer young women are entering the STEM workforce than in previous years. &lt;/p&gt; &lt;h2&gt;Why are women leaving STEM fields?&lt;/h2&gt; &lt;p&gt;Researchers have been gathering volumes of data as to the why there are fewer women are staying in, or entering STEM fields, and from that data we can see many issues that cover a spectrum from that need to be addressed:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Sexism: overt and subtle (hostile macho cultures)&lt;/strong&gt;  &lt;li&gt;Harassment, threats, or potential or actual violence toward women  &lt;li&gt;Childcare  &lt;li&gt;Financial Independence  &lt;li&gt;Gender Stereotyping  &lt;li&gt;Work-life balance &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Considering the number of challenges, addressing the lack of women in technology is a multifaceted phenomenon with no single solution, with each matter deserving attention. The primary goals of this post will focus on demonstrating...&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Incidents of sexism at industry events, and online conversations, and their link to the decline of women in STEM fields.  &lt;li&gt;The effects sexism has on women and the STEM industries as a whole, both now and in the future.  &lt;li&gt;A call to action to drive awareness and take a proactive stance in promoting women friendly STEM workplaces, conferences, schools, and meeting places.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;By understanding these influences women in technology, particularly in software development, we can take corrective and proactive stances, in the retention, engagement, and attraction of top female talent.  &lt;h2&gt;Incidents of sexism are major contributors to a declining female STEM workforce.&lt;/h2&gt; &lt;p&gt;The National Center for Women In Technology &lt;a href="http://www.ncwit.org/images/practicefiles/Assessments_IdentifyingOvertSexism_OneWay_AddressOvertSexism_ImproveWomenRentionIT.pdf" target="_blank"&gt;describes sexist incidents&lt;/a&gt; [.pdf] in various ways including, &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;"experienced/observed exclusionary cliques, unwanted sexual teasing, being bullied, and homophobic jokes".&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Consider that&amp;nbsp; &lt;strong&gt;between January and October 2011, women reported 20 sexist incidents to the&lt;/strong&gt; &lt;a href="http://geekfeminism.wikia.com/wiki/Timeline_of_incidents" target="_blank"&gt;Geek Feminism Wiki&lt;/a&gt;, with some common themes:&amp;nbsp; &lt;/p&gt; &lt;ul&gt; &lt;li&gt;Several talks at tech conferences contained pornographic style imagery, or sexual imagery.  &lt;li&gt;Multiple presentations referenced women in a derogatory or demeaning way, (e.g., "women can't program", "women are stupid") or by &lt;a href="http://scienceblogs.com/notrocketscience/2010/01/how_sexual_objectification_silences_women_-_the_male_glance.php" target="_blank"&gt;overt or subtle objectification of women&lt;/a&gt;.  &lt;li&gt;Overt harassment, inappropriate touching, and groping are still commonplace at technical conferences.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Roughly one incident every two weeks this year&lt;/strong&gt; means that this happens more than we'd like to think - and that's only the reports from a single website.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Exclusionary, offensive, incidents at conferences,&lt;/strong&gt; along with threats, violence, and harassment, against women in technology (and women in general) &lt;strong&gt;are simply not isolated occasions.&lt;/strong&gt; They have profound implications that directly impact the declining numbers of women in technology. &lt;a href="http://www.washingtonpost.com/wp-dyn/content/article/2007/04/29/AR2007042901555.html"&gt;The Washington Post&lt;/a&gt; outlines some statistics demonstrating this, in a study on interactions between men and women during online chat sessions.&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;"A 2006 University of Maryland study on chat rooms found that &lt;strong&gt;female participants received 25 times as many sexually explicit and malicious messages as males&lt;/strong&gt;. A 2005 study by the Pew Internet &amp;amp; American Life Project found that the proportion of &lt;strong&gt;Internet users who took part in chats and discussion groups plunged from 28 percent in 2000 to 17 percent in 2005, entirely because of the exodus of women&lt;/strong&gt;." [emphasis mine]&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Those numbers have barely improved, five years later. Additionally, the participants in this study belong to a general online audience and not solely the STEM fields, so one must consider the fact that STEM fields are male dominated, resulting in a larger amount of sexist behavior. &lt;/p&gt; &lt;p&gt;Though not the only reason, the numbers show that in software development specifically, sexist and overtly offensive behavior (both online and off) is one of two &lt;a href="http://abcnews.go.com/Technology/story?id=5227334&amp;amp;page=1" target="_blank"&gt;key factors as to why women are leaving technical fields&lt;/a&gt; as reported by ABC News. This article quotes Laura Sherbin, director at the Center for Work-Life Policy, who published a study in the Harvard Business Review titled &lt;a href="http://app.post.hbsp.harvard.edu/athena/athena2/index.html" target="_blank"&gt;&lt;em&gt;"Reversing the Brain Drain in Science, Engineering, and Technology"&lt;/em&gt;&lt;/a&gt;. Laura goes on to explain the primary reasons women leave STEM fields...&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;"The top two reasons why women leave are the hostile macho cultures — the hard hat culture of engineering, the geek culture of technology or the lab culture of science … and extreme work pressures"&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Sherbin also highlights just how critical and surprising the numbers are, even to researchers.&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;"The dropping out was a surprise to us. We knew anecdotally that women were leaving these careers. We didn't expect to see the number 52 percent." &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;strong&gt;To reiterate: 52% or just over half, of the female STEM workforce leaves because of hostile macho cultures.&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Let's do the math:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Assume the average tech conference has 300 attendees.  &lt;li&gt;The average turnout of females at a technical conference is at about 15%, or 45 women in this example.  &lt;li&gt;52%, or 23 of the women at that event will leave the industry&lt;sup&gt;[1]&lt;/sup&gt;.  &lt;li&gt;At a rate approximately of 26 events per year affecting 23 women each time, 598 women will be subjected to a hostile environment each year&lt;sup&gt;[1]&lt;/sup&gt;. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The cost in human terms and individual well-being is immeasurable.&lt;/p&gt; &lt;h2&gt;A look at the negative effects and human cost of sexist behavior in STEM fields.&lt;/h2&gt; &lt;p&gt;Considering the above numbers, try out this thought exercise, showing the implications of sexist incidents on women in software.&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Think of the names 23 women developers that you work alongside, have worked with, or know. Try it without looking at social networks, checking address books, etc...  &lt;li&gt;Think about these women. Are they your coworkers? Presenters you admire? Are they women with whom you enjoy having technical conversations, perhaps at conferences, code camps, or over social networks?  &lt;li&gt;There's essentially a 50/50 chance, or the same chance as the toss of a coin, that those 23 women won't be developers for much longer. &lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;strong&gt;Once they're gone, can you name 23 more women to replace them? &lt;/strong&gt;It won't be the younger girls entering the field.&lt;/p&gt; &lt;p&gt;The consequences have a stifling effect on younger girls wanting to enter the technology fields before they have a chance to start. Numbers show that &lt;strong&gt;a huge impasse in attracting young girls into the STEM fields, is &lt;/strong&gt;&lt;a title="Girls need role models in technology fields" href="http://easterniowaschools.com/2011/08/19/girls-need-positive-role-models-to-increase-presence-in-stem-careers/" target="_blank"&gt;&lt;strong&gt;a serious lack of women role models in those fields.&lt;/strong&gt;&lt;/a&gt; Less women staying in the field means fewer role models for young girls, which in turn means fewer STEM girls overall. &lt;/p&gt; &lt;p&gt;It's not just about sexist incidents though, subtle sexism can bleed into the everyday atmosphere of in tech fields and cause the same amount of negative barriers. While the day to day activities of most technical women might not vary much from that of men, as far as actual programming, sitting in meetings, mundane business tasks, etc... What do differ are the interactions between the sexes, as well as both overt and subconscious behavior that manifests as sexist incidents, though primarily non-malicious, and most often subconscious. For example, here are some commonplace scenarios where subtle sexism happens in companies large and small&lt;sup&gt;[2][3]&lt;/sup&gt;:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Men who repeatedly ask only the women attending meeting to take notes, or get coffee, when the woman is not a secretary or in a similar role.  &lt;li&gt;Colleagues that routinely ignore women during meetings, or a female states an idea that is promptly ignored, then raised again by a man who gets the credit. (in a consistent, frequent, pattern) &lt;li&gt;Women, rather than men, are routinely stuck into "softer" positions, often to answer phones. Management gives women more remedial tasks that are clearly not aligned with their job description or what they were hired to do.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The sentiments above are detailed in a report by Level Playing Field Institute titled &lt;a href="http://www.lpfi.org/sites/default/files/tilted_playing_field_lpfi_9_29_11.pdf" target="_blank"&gt;&lt;em&gt;"The Tilted Playing Field: Hidden bias in information technology workspaces"&lt;/em&gt;&lt;/a&gt;&amp;nbsp; [.pdf]. Reading about &lt;a href="http://geekfeminism.org/2011/10/13/on-being-harassed-a-little-gf-history-and-some-current-events/" target="_blank"&gt;recent events&lt;/a&gt; and &lt;a href="http://lwn.net/Articles/417952/" target="_blank"&gt;stories&lt;/a&gt; of everything from demeaning comments, to outright harassment, stalking, and groping, are still commonplace in the tech industry. I must agree that I've personally been privy to a number of these types of scenarios, but that's not all... &lt;/p&gt; &lt;p&gt;&lt;strong&gt;When an incident at a conference happens, I inevitably get a call or email from a female colleague who has just given up, and is now looking at non-technical career alternatives&lt;/strong&gt;. &lt;/p&gt; &lt;p&gt;If we are to keep our technical industries healthy, and full of diverse creativity, things must change, and soon. So what can you do?&lt;/p&gt; &lt;h2&gt;A Call to Action: Drive awareness and take the lead to promote diversity in STEM fields.&lt;/h2&gt; &lt;p&gt;Below are just &lt;em&gt;some&lt;/em&gt; of the things you can do to drive diversity and promote women in STEM fields:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Drive awareness.&lt;/strong&gt; &lt;/p&gt; &lt;p&gt;It may seem obvious, but without awareness, it's impossible to know there's a problem. &lt;/p&gt; &lt;p&gt;You can drive awareness by blogging, tweeting, or otherwise telling your story, or commenting on blogs to show your support. The Level Playing field's report shows a real lack of awareness in populations at large. The more blog posts, articles, and events, mean more information people can use to take proactive stances to create technical communities and workspaces that are welcoming to everyone.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Be proactive.&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Does your company have a &lt;a href="http://www.microsoft.com/about/diversity/en/us/default.aspx" target="_blank"&gt;diversity and inclusion policy&lt;/a&gt;? Even if you work for a small business or startup, a formal policy of inclusion fosters a welcoming environment for everyone. If you company doesn't have one, get involved and ask your HR department to work on one with you. Don't let your policy be a paper form of lip service, make it part of how you do business.  &lt;li&gt;Does your HR department have a clear open door policy, with a trusted employee to listen to concerns?  &lt;li&gt;Attend women in technology events. Hint: Take your favorite gal developer with you. At the &lt;a href="http://rachelappel.com/the-code-camp-nyc-retrospective" target="_blank"&gt;Code Camp NYC 2011 WIT luncheon&lt;/a&gt;, a healthy mix of men and women joined in for a productive, round-table discussion.  &lt;li&gt;Ask technical women work on a joint talk with you for a user group or code camp, and invite them to technical events.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Awesome guys like &lt;a href="http://zblock.net/" target="_blank"&gt;John Zablocki&lt;/a&gt; and coworkers like &lt;a href="http://devfish.net" target="_blank"&gt;Joe Healy&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/b/peterlau/" target="_blank"&gt;Peter Laudati&lt;/a&gt;, and &lt;a href="http://brianhprince.com" target="_blank"&gt;Brian Prince&lt;/a&gt;, are just a few of the many guys I see at WIT related events.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Presenters &amp;amp; conference organizers:&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Speakers can use the &lt;a href="http://msdn.microsoft.com/en-us/library/hh184842(v=VS.92).aspx" target="_blank"&gt;Windows Phone 7 app content guidelines&lt;/a&gt;, or the &lt;a href="http://www.google.com/support/androidmarket/developer/bin/answer.py?&amp;amp;&amp;amp;answer=188189" target="_blank"&gt;Android app marketplace rating guide&lt;/a&gt; when s/he's not sure what material should be considered offensive.&lt;/p&gt; &lt;p&gt;Organizers can create written guidelines to ensure a harassment-free environment for everyone at your conference, user group, or other meeting.&lt;/p&gt; &lt;p&gt;&lt;a href="http://codestock.org" target="_blank"&gt;CodeStock 2010&lt;/a&gt; set a perfect example to follow by embracing a WIT centered theme, including a female keynote speaker (*ahem* that would be me :) ).&lt;/p&gt; &lt;h2&gt;Summary&lt;/h2&gt; &lt;p&gt;I would love to see every company behave as MS DPE East does, and I hope that you, dear readers of this blog, will step up to foster an environment in your workplaces and homes that support and celebrate women and diversity in STEM fields.&lt;/p&gt; &lt;p&gt;Should an incident occur at an event you're attending, take corrective action as soon as possible. If you're in a conference session and you feel offended or uncomfortable, walk out calmly, and write down exactly what you feel is offensive or inappropriate. Take the evaluation to the conference staff, and ask that they check out the session in question.&lt;/p&gt; &lt;p&gt;&lt;font size="1"&gt;[1] The numbers in this sample represent one source of reports, so the actual numbers are much higher. Additionally, the number 23 is rounded from 23.4. Also assuming a single track conference, which is fairly common. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="1"&gt;[2] These aren't just manufactured scenarios - they're real life stories from female contemporaries.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="1"&gt;[3] As for large companies, my experiences at Microsoft DPE have been great!. I work on an highly functioning team with awesome people who celebrate diversity in technology and are quite supportive of each other.&lt;/font&gt;&lt;/p&gt;</description><pubDate>Mon, 31 Oct 2011 19:02:49 GMT</pubDate><guid isPermaLink="true">http://www.rachelappel.com:80/stats-data-and-answers-as-to-why-there-are-so-few-women-in-technology-fields</guid></item><item><title>Silverlight in the Enterprise Training at MS NYC</title><link>http://www.rachelappel.com:80/silverlight-in-the-enterprise-training-at-ms-nyc</link><description>&lt;p&gt;&lt;a href="http://slinenterprise.com/" target="_blank"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="silverlight_logo" border="0" alt="silverlight_logo" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/1a82e97e0531_12024/silverlight_logo_3.png" width="239" height="80" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span style="color: #ff0000;" color="#ff0000"&gt;&lt;span style="font-weight: bold;"&gt;Where &amp;amp; When?&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style="color: #ff0000;" color="#ff0000"&gt;Microsoft New York&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #ff0000;" color="#ff0000"&gt;1290 Ave of the Americas, 6th Floor&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #ff0000;" color="#ff0000"&gt;Date: 11/18/2011 8:00a-5:00p&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bit.ly/v5H5E6"&gt;&lt;span style="color: #ff0000; font-size: x-large;" size="6" color="#ff0000"&gt;&lt;strong&gt;REGISTER HERE&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span style="font-weight: bold;"&gt;What's Covered?&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;Building simple silverlight applications is very easy, we have all seen the simple hello world samples that are out there but what about solving real enterprise problems with them such as scalability, testability, ease of maintenance, and extensibility and interoperability? The Silverlight in the enterprise event will aim to show real meaningful demos in these areas. The sessions will be devoted to the following:&lt;/p&gt;
&lt;h3&gt;&lt;span style="font-weight: bold;"&gt;8:00 - 8:30 - welcome with breakfast &lt;/span&gt;&lt;/h3&gt;
&lt;h3&gt;&lt;span style="font-weight: bold;"&gt;8:30 - 9:00 Leveraging state to reduce server load &lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;In this session we will discuss the benefits that client side state brings us from a server load reduction point of view. We will look at how leveraging this can dramatically reduce server load and resource requirements vs a typical &lt;a href="http://ASP.NET/"&gt;ASP.NET&lt;/a&gt; application. We will also look at how to fully leverage the client side state silverlight provides&lt;/p&gt;
&lt;h3&gt;&lt;span style="font-weight: bold;"&gt;9:00 - 10:00 Silverlight Extensibility with MEF&amp;nbsp; &lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;One of the key focuses of most enterprise applications is long term maintaince and extensibility and both of theses stories can be centered around MEF. We will look at how to go about building modular applications with MEF that can grow over time with your business needs. The core example we will discuss centers around a common host application and several business units that will make use of it.&lt;/p&gt;
&lt;h3&gt;&lt;span style="font-weight: bold;"&gt;10:00 - 11:00 Prism in the real world &lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Prism is a great platform and a very useful one in most enterprise project settings. We will look at what prism is all about and what choices you have when using it. We will show some samples related to prism and discuss how you can use all or parts of prism to get the best fit of functionality for your applications&lt;/p&gt;
&lt;h3&gt;&lt;span style="font-weight: bold;"&gt;11:00 - 12:00 Silverlight unit testing &lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;We will not only cover how to use the unit testing tools out there for silverlight but also along the way discuss how to design your code to be testable with Silverlight.&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;12:00 - 12:30 lunch &lt;/strong&gt;&lt;/h3&gt;
&lt;h3&gt;&lt;strong&gt;12:30 - 3:00 SharePoint, SQL &amp;amp; Silverlight&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;SharePoint is an &lt;a href="http://ASP.NET/"&gt;ASP.NET&lt;/a&gt; and SQL Server platform for portal sites, communities, content, search, insights, and composites. Silverlight 3 is used to enhance the user experience in several product areas out of the box including rich media handling. Developers can build Silverlight applications that work inside SharePoint pages. We will first look at three methods of deploying these apps. The first uses a Document Library to store a typical XAP file which is displayed using a built-in web part. The second uses a custom coded visual web part to add more control. The third approach creates a SharePoint sandbox solution module that includes the Silverlight XAP in the deployment. Silverlight can also use the SharePoint client object model to access site data while an application is running. Several examples of SharePoint data access combined with rich Silverlight display capabilities will be demonstrated.&lt;/p&gt;
&lt;h3&gt;&lt;span style="font-weight: bold;"&gt;3:00 - 5:00 Late Afternoon Sessions &amp;amp; Wrap-up&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Afternoon session content TBD&lt;/p&gt;
&lt;p&gt;Will have raffles and giveaways at the end!&lt;/p&gt;
&lt;h3&gt;&lt;span style="font-weight: bold;"&gt;Get the latest Silverlight in the Enterprise news on social networking...&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://twitter.com/slinenterprise"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="twitter-logo" border="0" alt="twitter-logo" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/1a82e97e0531_12024/twitter-logo_3.jpg" width="45" height="45" /&gt;&lt;/a&gt;&lt;a href="http://www.facebook.com/pages/SL-in-Enterprise/247846081914135?ref=ts&amp;amp;sk=wall" target="_blank"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="facebook-logo" border="0" alt="facebook-logo" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/1a82e97e0531_12024/facebook-logo_3.jpg" width="45" height="45" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;twitter/facebook&lt;/p&gt;</description><pubDate>Thu, 27 Oct 2011 01:44:08 GMT</pubDate><guid isPermaLink="true">http://www.rachelappel.com:80/silverlight-in-the-enterprise-training-at-ms-nyc</guid></item><item><title>The Code Camp NYC Retrospective!</title><link>http://www.rachelappel.com:80/the-code-camp-nyc-retrospective</link><description>&lt;p&gt;&lt;a href="http://codecampnyc.org" target="_blank"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="NYCCC2" border="0" alt="NYCCC2" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/ea58268410d2_123F2/NYCCC2_020b904e-d155-4edb-b55a-74a422ef06ae.png" width="615" height="64"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Thanks to all the organizers, volunteers, sponsors, and speakers that made the Fall 2011 New York City Code Camp a raging success!&lt;/strong&gt; &lt;/p&gt; &lt;p&gt;The Stats:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;500 Attendees  &lt;li&gt;40 Speakers  &lt;li&gt;50 &lt;a href="http://www.codecampnyc.org/speakers-sessions/" target="_blank"&gt;Sessions&lt;/a&gt;  &lt;li&gt;Tons of drinks, snacks, prizes, and fun!&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;This year's end of day raffle included 3 Xbox/Kinect Bundles, WP7 devices, and software licenses from the many Code Camp &lt;a href="http://www.codecampnyc.org/" target="_blank"&gt;sponsors&lt;/a&gt;. Without them, we would have no Code Camp.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;The Welcome Session/Keynote:&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blog.unhandled-exceptions.com/" target="_blank"&gt;Steve Bohlen&lt;/a&gt; kicked off the Code Camp NYC Fall 2011 in front of a packed house in an auditorium at &lt;a href="http://pace.edu" target="_blank"&gt;Pace University NYC&lt;/a&gt;. &lt;/p&gt;&lt;a href="http://rachelappel.com/Media/Default/Windows-Live-Writer/ea58268410d2_123F2/nyccodecamp-001_thumb_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="nyccodecamp-001_thumb" border="0" alt="nyccodecamp-001_thumb" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/ea58268410d2_123F2/nyccodecamp-001_thumb_thumb.png" width="572" height="266"&gt;&lt;/a&gt;  &lt;p&gt;&lt;strong&gt;The sessions:&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Those who've attended the Code Camp NYC know that the variety in both sessions and speakers was well balanced. Attendees were treated to presentations such as...&lt;/p&gt; &lt;ul&gt; &lt;li&gt;HTML5 &amp;amp; JavaScript  &lt;li&gt;Presentation Skills  &lt;li&gt;Mobile Development  &lt;li&gt;Cloud  &lt;li&gt;Web development  &lt;li&gt;SQL &amp;amp; Databases&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Topics ranged from Microsoft centric to any other technology available. Attendees were treated to sessions on ASP.NET, SOLID development, PHP, Cloud, SQL &amp;amp; BI, PowerShell, F#, and not-so-tech talks such as consulting, ISVs, presentation tips and other soft skills.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;The Windows Phone 7 track was a hit!:&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://smallandmighty.net/" target="_blank"&gt;Dani Diaz&lt;/a&gt;, led a Phone/Mobile track, starting the day by starting a Windows Phone 7 app, from start to finish. After sitting in Dani's session, most attendees were immediately able to start writing and monetizing WP7 apps! Attending a Code Camp or &lt;a title="PhoneCamps by Dani, Dave, Joe, &amp;amp; Glen, our awesome WP7 DEs" href="http://smallandmighty.net/blog/dont-be-crappy-write-an-appy-windows-phone-camp" target="_blank"&gt;PhoneCamp is the best way to fast track your mobile development skills, and earn a few bucks in the process&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Here's Dani rockin' the house with his WP7 talks. It was a packed room!&lt;/p&gt; &lt;p&gt;&lt;a href="http://rachelappel.com/Media/Default/Windows-Live-Writer/ea58268410d2_123F2/nyccodecamp-004_thumb_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="nyccodecamp-004_thumb" border="0" alt="nyccodecamp-004_thumb" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/ea58268410d2_123F2/nyccodecamp-004_thumb_thumb.png" width="354" height="208"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;The Women in Technology Lunch Session&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;The NY Metro ladies (and a few guys) joined together to eat, drink, and celebrate women in computing, just about a week before &lt;a href="http://en.wikipedia.org/wiki/Ada_Lovelace" target="_blank"&gt;Ada Lovelace&lt;/a&gt; day. &lt;a href="http://rachelreese.us" target="_blank"&gt;Rachel Reese&lt;/a&gt; and I led a roundtable style dicsussion, with topics ranging from work-life balance, to negotiating skills, to everything in between, in a fun, casual, setting. &lt;/p&gt; &lt;p&gt;Though they weren't the only two guys in attendance, &lt;a href="http://bluebadgeinsights.com/" target="_blank"&gt;Andrew Brust&lt;/a&gt; &amp;amp; &lt;a href="http://www.cptloadtest.com/" target="_blank"&gt;Jay Harris&lt;/a&gt; were a huge hit! Andrew &amp;amp; Jay have always been great supporters of women in technology, and had lots of valuable info for us gals! Thanks, guys! &lt;/p&gt; &lt;p&gt;&lt;strong&gt;And finally, introducing....The Code Camp NYC Mobile App!&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.gregshackles.com" target="_blank"&gt;Greg Shackles&lt;/a&gt; developed one &lt;a href="http://www.gregshackles.com/2011/09/nyc-code-camp-6-mobile-apps/" target="_blank"&gt;awesome mobile app&lt;/a&gt; for Windows Phone 7, iPhone, and Android. Greg's app kept everyone informed and up to date. Download it now for the next Code Camp NYC.&lt;/p&gt;</description><pubDate>Wed, 12 Oct 2011 00:46:43 GMT</pubDate><guid isPermaLink="true">http://www.rachelappel.com:80/the-code-camp-nyc-retrospective</guid></item><item><title>Common JavaScript mistakes and pitfalls you can avoid</title><link>http://www.rachelappel.com:80/common-javascript-mistakes-and-pitfalls-you-can-avoid</link><description>&lt;p&gt;Having solid JavaScript skills is more important than ever in today's web applications, and will continue to grow in importance as more browsers, IDEs, etc..., boast of HTML5 feature support. New HTML5 elements such as &amp;lt;canvas&amp;gt; , and features like Web Storage, Web Sockets, or Geolocation depend heavily on JavaScript. Despite tons of freely available, open source, or 3rd party libraries such as jQuery, Prototype, or Script.aculo.us, we still need to keep in mind that they're just JavaScript layered on top of JavaScript - a level of abstraction. Knowing the under the hood workings and "gotchas" of JavaScript will certainly give you a boost with writing better code. &lt;/p&gt; &lt;p&gt;Developers that use strongly typed languages tend to treat JavaScript as a restricted rather than an expressive language, as they're used to working with many compiler restrictions. On top of that, JavaScript's reputation as a "toy, browser-only, language" precedes itself; many developers don't bother to look deeply at some of its powerful features, as well as some language quirks that can really cause trouble.&lt;/p&gt; &lt;h2&gt;The truth is out there: Dealing with truthy/falsy values&lt;/h2&gt; &lt;p&gt;Dealing with comparisons and equality is usually straightforward, but JavaScript has a few caveats. Because of the way JavaScript deals with expressions, it has two sets of equality operators and some complicated rules around one of them (==/!==). The first set...&lt;/p&gt; &lt;p&gt;&lt;strong&gt;The "Equals" operator&amp;nbsp; ( = = )&amp;nbsp; and The "Does-not-equal" Operator ( ! = ) &lt;/strong&gt;&lt;/p&gt; &lt;p&gt;And the second set...&lt;/p&gt; &lt;p&gt;&lt;strong&gt;The "Strict Equals" operator ( = = = ) and The "Strict Does-not-equal" Operator ( ! = = ) &lt;/strong&gt;&lt;/p&gt; &lt;p&gt;If you're wondering why JavaScript has two sets of equality(ish) operators, it's because JavaScript works on the premise of &lt;em&gt;&lt;a href="http://isolani.co.uk/blog/javascript/TruthyFalsyAndTypeCasting" target="_blank"&gt;truthy and falsy values&lt;/a&gt;&lt;/em&gt;.&amp;nbsp; The == / != operators will work as you might expect &lt;strong&gt;&lt;em&gt;if&lt;/em&gt;&lt;/strong&gt; the operands are of the same type (boolean), but if they are not, the == and != operators try to coerce the values, using &lt;a href="http://www.sitepoint.com/javascript-truthy-falsy/" target="_blank"&gt;a rather large and drawn out ritual&lt;/a&gt; to determine the result. Truthy/falsy values are a means for JavaScript to deal with non-Boolean expressions, by pretending as if they are Boolean anyway. &lt;/p&gt; &lt;p&gt;As a rule of thumb, JavaScript evaluates the values in the list below as false, and everything else as true: &lt;/p&gt; &lt;ul&gt; &lt;li&gt;false  &lt;li&gt;null  &lt;li&gt;empty string ("")  &lt;li&gt;0  &lt;li&gt;NaN &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Since values like null, "", and NaN, aren't boolean values but are still treated as such, that makes them falsy. In short, when you compare expressions that aren't actual boolean values, JavaScript can produce results that are &lt;a href="http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/" target="_blank"&gt;inconsistent with what you might expect&lt;/a&gt;. For example, if you compare the value 0 to false, this is what you get:&lt;/p&gt;&lt;pre class="csharpcode"&gt;(0 == &lt;span class="kwrd"&gt;false&lt;/span&gt;)  &lt;span class="rem"&gt;// true &lt;/span&gt;
(0 === &lt;span class="kwrd"&gt;false&lt;/span&gt;) &lt;span class="rem"&gt;// false (correct)&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;When expressions accept anything, including NaN, undefined, etc..., there's a lot of room for mistakes, even by experienced developers. Amplify that with the many rules involved to mentally juggle, and it too easy to see how == and != disrupt your thought processes while coding. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The take-away: the strict === and !== operators are the best way to go,&lt;/strong&gt; but don't shrug off the equals operator just yet, as you'll likely run across them daily in the JavaScript world, making this valuable information for the maintenance coder.&lt;/p&gt;
&lt;h2&gt;What exactly is an isNaN(NaN); anyway? &lt;/h2&gt;
&lt;p&gt;NaN, or Not-A-Number, is a construct of JavaScript that's useful only in &lt;a href="http://freewebdesigntutorials.com/javaScriptTutorials/jsNumberObject/numberNaNProperty.htm" target="_blank"&gt;very specific edge cases&lt;/a&gt;. Why then, is this important to know? Being a mischievous little code gremlin, NaN pops up everywhere. It's a property of the Number object, (Number.NaN), and default value of NaN is NaN, yet it's a falsy value. When trying use NaN in an expression, NaN returns a false every time. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://rachelappel.com/Media/Default/Windows-Live-Writer/JavaScript-Its-more-important-than-ever_99E4/SNAGHTML6fc7755.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML6fc7755" border="0" alt="SNAGHTML6fc7755" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/JavaScript-Its-more-important-than-ever_99E4/SNAGHTML6fc7755_thumb.png" width="604" height="388"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Since NaN is no help in determining what is actually non-numeric, you'll need an alternative. Fortunately there is a very reliable &lt;font face="Courier New"&gt;isNaN()&lt;/font&gt; function you can use. Notice when the &lt;font face="Courier New"&gt;isNaN()&lt;/font&gt; function evaluates an alphanumeric string, the result is true, and a false for numeric values. To further investigate how &lt;font face="Courier New"&gt;isNaN()&lt;/font&gt; behaves, enter a few of the following statements in the Console tab of any browser's dev tools and browse the results. (IE F12 dev tools featured below).&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rachelappel.com/Media/Default/Windows-Live-Writer/JavaScript-Its-more-important-than-ever_99E4/SNAGHTML754d7ed.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML754d7ed" border="0" alt="SNAGHTML754d7ed" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/JavaScript-Its-more-important-than-ever_99E4/SNAGHTML754d7ed_thumb.png" width="604" height="404"&gt;&lt;/a&gt; 
&lt;p&gt;&lt;font face="Courier New"&gt;isNaN()&lt;/font&gt; works as expected with numbers and alphanumerical data. 
&lt;p&gt;&lt;strong&gt;The conculsion: use &lt;font face="Courier New"&gt;isNaN()&lt;/font&gt;.&lt;/strong&gt; 
&lt;h2&gt;Is eval() evil or just misunderstood?&lt;/h2&gt;
&lt;p&gt;eval()is the little function that wants to do everything for you, including dynamically creating and executing JavaScript.&amp;nbsp; Want to parse JSON? eval(). Want to clump a bunch of stuff together? eval(). Want to make up code to run on the fly? eval(). eval() finds ways to do something, anything, with what you give it, making it easy for developers to do both &lt;a href="http://www.bennadel.com/blog/1926-Exploring-Javascript-s-eval-Capabilities-And-Closure-Scoping.htm" target="_blank"&gt;awesome&lt;/a&gt; and &lt;a href="http://thedailywtf.com/Articles/JavaScript_eval().aspx" target="_blank"&gt;horrible&lt;/a&gt; things with it. &lt;/p&gt;
&lt;p&gt;In an attempt to keep eval() innocent, many suggest limiting eval() usage to the following scenarios:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;1) You need to allow script to run dynamically.&lt;/em&gt; &lt;/p&gt;
&lt;p&gt;This opens up your page to potential security issues, so only use this when it's necessary, as there are a few different ways to execute code dynamically in JavaScript (a &lt;a href="http://www.bing.com/search?q=running+javascript+dynamically&amp;amp;qs=n&amp;amp;sk=&amp;amp;sc=8-18&amp;amp;form=QBRE" target="_blank"&gt;quick Bing search&lt;/a&gt; shows many different techniques). That leaves...&lt;/p&gt;
&lt;p&gt;&lt;em&gt;2) Parsing JSON&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;You can use eval() for JSON parsing; however, you are still going to run into the same security issues. On top of that, the JSON.parse() method works much better as it's meant just for JSON handling. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In general, stay away from eval() where you can, it has the potential to get evil quickly, and there's usually a decent alternative.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Avoid function faux pas.&lt;/h2&gt;
&lt;p&gt;Functions live a first class life In JavaScript, so they're not just functions, they're objects too. It all depends very much on how you them. Take, for example, the following simple function to calculate two numbers:&lt;/p&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; result = &lt;span class="kwrd"&gt;function&lt;/span&gt; (a, b) { &lt;span class="kwrd"&gt;return&lt;/span&gt; a + b;};&lt;/pre&gt;&lt;/div&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;In many languages, the result passed back from the function will contain the sum of the values of the arguments, a, and b. In JavaScript; however, there is more to the story. Opening any browser's developer tools and inspecting the code, shows the type as an &lt;em&gt;"Object (Function)" &lt;/em&gt;and its value as the function itself. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://rachelappel.com/Media/Default/Windows-Live-Writer/JavaScript-Its-more-important-than-ever_99E4/SNAGHTML45e09f_1.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML45e09f" border="0" alt="SNAGHTML45e09f" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/JavaScript-Its-more-important-than-ever_99E4/SNAGHTML45e09f_thumb_1.png" width="604" height="219"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You don't need to, but you can, define and name functions. If you don't provide a name when creating an inline function, it's an anonymous function. &lt;/p&gt;
&lt;p&gt;Having the knowledge that functions are objects allows you to better understand and work with Open Source or 3rd Party libraries, such as jQuery or Script.aculo.us. Consider jQuery's chaining feature, that allows you to "tack on", i.e., chain, other methods to the end of the previous method, in a single statement. Since the function is also an object, you can expect to call methods on it using dot notation, as the following simple jQuery chaining example demonstrates:&lt;/p&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;$(&lt;span class="str"&gt;"#inputBox"&lt;/span&gt;).removeClass(&lt;span class="str"&gt;"normal"&lt;/span&gt;).addClass(&lt;span class="str"&gt;"error"&lt;/span&gt;);&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;&lt;/h1&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;In addition to function behavior, it's necessary to know how to write good, clean, functions. Since JavaScript throws everything into a global namespace, you'll want to encapsulate your functions into namespaces with classes and members (see below). And watch out for globals... &lt;/p&gt;
&lt;h2&gt;A variable of global proportions.&lt;/h2&gt;
&lt;p&gt;The authors of JavaScript intended it to be a language with a very low barrier for entry for the internet pioneers circa 1995. Because of this, they made the decision to allow, and even encourage, globally scoped variables. One or two global variables in a very small program can be useful, even manageable, and was certainly not a big issue at the time since HTML had only a few tags and the DOM a handful of nodes. However, JavaScript has grown into arguably the most popular language in the world, and has powered a spectrum of applications from the smallest to the largest. Anything other than the simplest of sites can contain nasty bugs because of the global space. &lt;/p&gt;
&lt;p&gt;When possible, avoid global variables, and here's why:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It's too easy to have variable naming clashes in large applications. 
&lt;li&gt;It's too easy to overwrite the wrong variable, or the right variable at the wrong time, when there are many variables accessible from anywhere. 
&lt;li&gt;Not needing to declare variables means there are often "floaters" hanging around in globally-scoped memory, but doing nothing.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;A good workaround to this language gotcha is to &lt;a href="http://msdn.microsoft.com/en-us/magazine/cc163419.aspx" target="_blank"&gt;create your own namespace and classes in it&lt;/a&gt;, and store any would-be global variables as properties of that object instead. Though they're not real namespaces, they are objects that can behave like namespaces, making it easier for you to organize your code. The code below provides an outline of how you can create and access your own namespace:&lt;/p&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; SampleNamespace = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;function&lt;/span&gt; () { };&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;SampleNamespace.SampleGlobalObject = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;function&lt;/span&gt; () {&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;    &lt;span class="rem"&gt;// Private function &lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;var&lt;/span&gt; privateFunction = &lt;span class="kwrd"&gt;function&lt;/span&gt; ()&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;    { }&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;    &lt;span class="rem"&gt;// Public function&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;this&lt;/span&gt;.publicFunction = &lt;span class="kwrd"&gt;function&lt;/span&gt; ()&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;    { }&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="rem"&gt;// Calling the public function&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; publicFunctionTest = &lt;span class="kwrd"&gt;function&lt;/span&gt; () {&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;    SampleNamespace.SampleGlobalObject.publicFunction();&lt;/pre&gt;&lt;/div&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Global variables aren't the only problematic variables in JavaScript. &lt;strong&gt;JavaScript doesn't perform block scope, so variables you define can inadvertently become as error prone as global variables&lt;/strong&gt;. The only scope smaller than the global scope is function scope. This means that you can access variables where you might expect otherwise, such as outside an if/else or for loop. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Although JavaScript is a dynamic, expressive, language, you need to organize it into namespaces, classes, and other units for a solid maintenance experience.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;Watch out for some of the most common pitfalls that developers encounter, even while using Open Source libraries such as jQuery. There are, of course, many more language quirks and features that can also cause trouble, as with any language. If you want to go deeper into JavaScript, here are two highly recommended books. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/0596517742/ref=as_li_tf_il?ie=UTF8&amp;amp;tag=httpwwwrach0d-20&amp;amp;linkCode=as2&amp;amp;camp=217145&amp;amp;creative=399369&amp;amp;creativeASIN=0596517742"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="JavaScript The Good Parts" border="0" alt="JavaScript The Good Parts" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;amp;Format=_SL110_&amp;amp;ASIN=0596517742&amp;amp;MarketPlace=US&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;tag=httpwwwrach0d-20&amp;amp;ServiceVersion=20070822"&gt;&lt;/a&gt;&lt;img style="border-bottom: medium none; border-left: medium none; margin: 0px; border-top: medium none; border-right: medium none" border="0" alt="" src="http://www.assoc-amazon.com/e/ir?t=httpwwwrach0d-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0596517742&amp;amp;camp=217145&amp;amp;creative=399369" width="1" height="1"&gt;&amp;nbsp;&lt;a href="http://www.amazon.com/gp/product/0596806752/ref=as_li_tf_il?ie=UTF8&amp;amp;tag=httpwwwrach0d-20&amp;amp;linkCode=as2&amp;amp;camp=217145&amp;amp;creative=399369&amp;amp;creativeASIN=0596806752"&gt;&lt;img title="JavaScript Patterns" border="0" alt="JavaScript Patterns" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;amp;Format=_SL110_&amp;amp;ASIN=0596806752&amp;amp;MarketPlace=US&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;tag=httpwwwrach0d-20&amp;amp;ServiceVersion=20070822"&gt;&lt;/a&gt;&lt;img style="border-bottom: medium none; border-left: medium none; margin: 0px; border-top: medium none; border-right: medium none" border="0" alt="" src="http://www.assoc-amazon.com/e/ir?t=httpwwwrach0d-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0596806752&amp;amp;camp=217145&amp;amp;creative=399369" width="1" height="1"&gt;&lt;/p&gt;</description><pubDate>Tue, 04 Oct 2011 16:51:15 GMT</pubDate><guid isPermaLink="true">http://www.rachelappel.com:80/common-javascript-mistakes-and-pitfalls-you-can-avoid</guid></item><item><title>You're invited to a Windows PhoneCamp event!</title><link>http://www.rachelappel.com:80/you-re-invited-to-a-windows-phonecamp-event</link><description>&lt;p&gt;&lt;a title="I &amp;lt;3 Windows Phone" href="http://www.microsoft.com/windowsphone/en-us/default.aspx" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="I &amp;lt;3 Windows Phone" border="0" alt="I &amp;lt;3 Windows Phone" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/ae0bed983dc9_13256/clip_image001%5B4%5D_1.jpg" width="504" height="93"&gt;&lt;/a&gt;  &lt;h2&gt;What’s a Windows Phone Camp? &lt;/h2&gt; &lt;p&gt;For those who went to our "Windows Phone Garage" series last year, it’s one of those. For those new to the scene, it’s a free, full day event chocked full of everything you need to know to develop a Windows Phone application. Whether you’re a seasoned veteran or just getting started with phone app development this full-day event is for you.  &lt;p&gt;Interested in profit? We’ll also lead discussions on how to monetize your applications and generate profits with your apps.  &lt;p&gt;Don’t miss the new Windows Phone 7.5 (codename "Mango") features as well - with detailed sessions in the afternoon around Fast Application Switching, Multitasking, Live Tiles, Push Notifications, and more.  &lt;p&gt;The day will be capped with an open lab hands-on session and prizes for apps completed. This is the perfect opportunity to begin work on your dream application, or finish that app you’ve already started, with Windows Phone experts there to guide you every step of the way. Bring your own laptop to join in the fun and show off your killer app! &lt;/p&gt; &lt;h2&gt;Sessions&lt;/h2&gt; &lt;table border="1" cellspacing="1" cellpadding="1" width="600"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="108"&gt;&lt;strong&gt;Time&lt;/strong&gt;&lt;/td&gt; &lt;td valign="top" width="492"&gt;&lt;strong&gt;Session&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="108"&gt;9:00 AM &lt;/td&gt; &lt;td valign="top" width="492"&gt;Welcome Campers&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="108"&gt;9:15 AM&lt;/td&gt; &lt;td valign="top" width="492"&gt;How to make money with your Windows Phone App&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="108"&gt;10:00 AM&lt;/td&gt; &lt;td valign="top" width="492"&gt;Frameworks for fun and profit &amp;gt; Silverlight and XNA&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="108"&gt;noon-ish&lt;/td&gt; &lt;td valign="top" width="492"&gt;Canteen &amp;gt; Install Fest&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="108"&gt;1:00 PM &lt;/td&gt; &lt;td valign="top" width="492"&gt;Hands-on lab&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="108"&gt;3:00 PM &lt;/td&gt; &lt;td valign="top" width="492"&gt;Cool stuff your app can do&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="108"&gt;4:00 PM &lt;/td&gt; &lt;td valign="top" width="492"&gt;To the Cloud!&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="108"&gt;4:45 PM &lt;/td&gt; &lt;td valign="top" width="492"&gt;Be What's Next &amp;gt; Peoples Choice Awards&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;h2&gt;Events &amp;amp; Registration&lt;/h2&gt; &lt;table style="border-collapse: collapse" border="1" cellspacing="0" cellpadding="0" width="494"&gt; &lt;colgroup&gt; &lt;col style="width: 95pt; mso-width-source: userset; mso-width-alt: 4608" width="126"&gt; &lt;col style="width: 145pt; mso-width-source: userset; mso-width-alt: 7058" width="193"&gt; &lt;col style="width: 131pt" width="175"&gt; &lt;tbody&gt; &lt;tr style="height: 15pt; mso-yfti-irow: 0; mso-yfti-firstrow: yes" height="20"&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: windowtext 0.5pt solid; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: windowtext 0.5pt solid; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl67" height="20" width="126" align="right"&gt;9/20/2011&lt;/td&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: windowtext 0.5pt solid; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl68" width="193"&gt;Charlotte, NC&lt;/td&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: windowtext 0.5pt solid; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl65" width="174"&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200053354&amp;amp;CR_EAC=300024780"&gt;&lt;font color="#0000ff"&gt;Registration&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="height: 15pt; mso-yfti-irow: 1" height="20"&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: windowtext 0.5pt solid; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl67" height="20" width="126" align="right"&gt;9/22/2011&lt;/td&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl68" width="193"&gt;Atlanta GA&lt;/td&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl65" width="174"&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200053354&amp;amp;CR_EAC=300024781"&gt;&lt;font color="#0000ff"&gt;Registration&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="height: 15pt; mso-yfti-irow: 2" height="20"&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: windowtext 0.5pt solid; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl67" height="20" width="126" align="right"&gt;9/27/2011&lt;/td&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl68" width="193"&gt;Malvern PA&lt;/td&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl65" width="174"&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200053354&amp;amp;CR_EAC=300024782"&gt;&lt;font color="#0000ff"&gt;Registration&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="height: 15pt; mso-yfti-irow: 3" height="20"&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: windowtext 0.5pt solid; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl67" height="20" width="126" align="right"&gt;9/29/2011&lt;/td&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl68" width="193"&gt;Reston VA&lt;/td&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl65" width="174"&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200053354&amp;amp;CR_EAC=300024783"&gt;&lt;font color="#0000ff"&gt;Registration&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="height: 30pt; mso-yfti-irow: 4" height="40"&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: windowtext 0.5pt solid; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl67" height="40" width="126" align="right"&gt;10/12/2011&lt;/td&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl68" width="193"&gt;Cambridge MA&lt;/td&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl68" width="174"&gt;National Event - Two day - Registration URL pending&lt;/td&gt;&lt;/tr&gt; &lt;tr style="height: 15pt; mso-yfti-irow: 5" height="20"&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: windowtext 0.5pt solid; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl67" height="20" width="126" align="right"&gt;10/18/2011&lt;/td&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl68" width="193"&gt;Chevy Chase MD&lt;/td&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl65" width="174"&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200053354&amp;amp;CR_EAC=300024785"&gt;&lt;font color="#0000ff"&gt;Registration&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="height: 15pt; mso-yfti-irow: 6" height="20"&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: windowtext 0.5pt solid; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl67" height="20" width="126" align="right"&gt;10/19/2011&lt;/td&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl68" width="193"&gt;New York City, NY&lt;/td&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl65" width="174"&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200053354&amp;amp;CR_EAC=300024786"&gt;&lt;font color="#0000ff"&gt;Registration&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="height: 15pt; mso-yfti-irow: 7" height="20"&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: windowtext 0.5pt solid; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl67" height="20" width="126" align="right"&gt;10/25/2011&lt;/td&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl68" width="193"&gt;Tampa FL&lt;/td&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl65" width="174"&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200053354&amp;amp;CR_EAC=300024787"&gt;&lt;font color="#0000ff"&gt;Registration&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="height: 30pt; mso-yfti-irow: 8" height="40"&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: windowtext 0.5pt solid; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl67" height="40" width="126" align="right"&gt;10/27/2011&lt;/td&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl68" width="193"&gt;Champlain College, Burlington VT&lt;/td&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl65" width="174"&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200053354&amp;amp;CR_EAC=300024788"&gt;&lt;font color="#0000ff"&gt;Registration&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="height: 15pt; mso-yfti-irow: 9" height="20"&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: windowtext 0.5pt solid; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl67" height="20" width="126" align="right"&gt;11/2/2011&lt;/td&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl68" width="193"&gt;NCSU, Raleigh NC&lt;/td&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl65" width="174"&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200053354&amp;amp;CR_EAC=300024789"&gt;&lt;font color="#0000ff"&gt;Registration&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="height: 15pt; mso-yfti-irow: 10" height="20"&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: windowtext 0.5pt solid; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl67" height="20" width="126" align="right"&gt;11/4/2011&lt;/td&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl68" width="193"&gt;Fort Lauderdale, FL&lt;/td&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl65" width="174"&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200053354&amp;amp;CR_EAC=300024790"&gt;&lt;font color="#0000ff"&gt;Registration&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="height: 15pt; mso-yfti-irow: 11" height="20"&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: windowtext 0.5pt solid; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl67" height="20" width="126" align="right"&gt;11/8/2011&lt;/td&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl68" width="193"&gt;UCF, Orlando FL&lt;/td&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl65" width="174"&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200053354&amp;amp;CR_EAC=300024791"&gt;&lt;font color="#0000ff"&gt;Registration&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="height: 30pt; mso-yfti-irow: 12" height="40"&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: windowtext 0.5pt solid; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl67" height="40" width="126" align="right"&gt;11/10/2011&lt;/td&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl68" width="193"&gt;Univ of Miami, Coral Gables FL&lt;/td&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl65" width="174"&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200053354&amp;amp;CR_EAC=300024793"&gt;&lt;font color="#0000ff"&gt;Registration&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="height: 15pt; mso-yfti-irow: 13" height="20"&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: windowtext 0.5pt solid; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl67" height="20" width="126" align="right"&gt;11/10/2011&lt;/td&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl68" width="193"&gt;SUNY (New Paltz), New York&lt;/td&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl65" width="174"&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200053354&amp;amp;CR_EAC=300024792"&gt;&lt;font color="#0000ff"&gt;Registration&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="height: 15pt; mso-yfti-irow: 14" height="20"&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: windowtext 0.5pt solid; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl67" height="20" width="126" align="right"&gt;11/15/2011&lt;/td&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl68" width="193"&gt;Virginia Tech&lt;/td&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl65" width="174"&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200053354&amp;amp;CR_EAC=300024794"&gt;&lt;font color="#0000ff"&gt;Registration&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="height: 30pt; mso-yfti-irow: 15" height="40"&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: windowtext 0.5pt solid; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl67" height="40" width="126" align="right"&gt;11/17/2011&lt;/td&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl68" width="193"&gt;Howard University, Washington DC&lt;/td&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl65" width="174"&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200053354&amp;amp;CR_EAC=300024795"&gt;&lt;font color="#0000ff"&gt;Registration&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="height: 15pt; mso-yfti-irow: 16" height="20"&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: windowtext 0.5pt solid; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl67" height="20" width="126" align="right"&gt;11/29/2011&lt;/td&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl68" width="193"&gt;Pittsburg, PA&lt;/td&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl65" width="174"&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200053354&amp;amp;CR_EAC=300024796"&gt;&lt;font color="#0000ff"&gt;Registration&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="height: 15pt; mso-yfti-irow: 17" height="20"&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: windowtext 0.5pt solid; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl67" height="20" width="126" align="right"&gt;12/1/2011&lt;/td&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl68" width="193"&gt;Hofstra, Long Island NY&lt;/td&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl65" width="174"&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200053354&amp;amp;CR_EAC=300024797"&gt;&lt;font color="#0000ff"&gt;Registration&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="height: 15pt; mso-yfti-irow: 18; mso-yfti-lastrow: yes" height="20"&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: windowtext 0.5pt solid; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl67" height="20" width="126" align="right"&gt;11/29/2011&lt;/td&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl68" width="193"&gt;Georgia Tech, Atlanta GA&lt;/td&gt; &lt;td style="border-bottom: windowtext 0.5pt solid; border-left: medium none; padding-left: 1px; padding-right: 1px; vertical-align: middle; border-top: medium none; border-right: windowtext 0.5pt solid; padding-top: 1px" class="xl65" width="174"&gt;&lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200053354&amp;amp;CR_EAC=300024798"&gt;&lt;font color="#0000ff"&gt;Registration&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;h2&gt;What you'll need:&lt;/h2&gt; &lt;p&gt;Bring a notebook computer and identification. Also check out the APP HUB where you can &lt;a href="http://create.msdn.com/en-us/home/getting_started"&gt;get developer tools&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/ff402551(v=VS.92).aspx"&gt;learn about application features&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/ff967556(v=VS.92).aspx"&gt;understand common task for Apps&lt;/a&gt; and &lt;a href="http://create.msdn.com/en-us/home/membership"&gt;register and load your APP&lt;/a&gt;. &lt;/p&gt;</description><pubDate>Mon, 19 Sep 2011 17:35:31 GMT</pubDate><guid isPermaLink="true">http://www.rachelappel.com:80/you-re-invited-to-a-windows-phonecamp-event</guid></item><item><title>Come to the New York City Code Camp Fall 2011!</title><link>http://www.rachelappel.com:80/come-to-the-new-york-city-code-camp-fall-2011</link><description>&lt;p&gt;&lt;a href="http://rachelappel.com/Media/Default/Windows-Live-Writer/New-York-City-Code-Camp-2011_9D0E/NYCCC_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="NYCCC" border="0" alt="NYCCC" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/New-York-City-Code-Camp-2011_9D0E/NYCCC_thumb.png" width="604" height="63"&gt;&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;&lt;font style="font-weight: bold" color="#000000"&gt;The New York City Code Camp is now in October!&lt;/font&gt;&lt;/h3&gt; &lt;p&gt;&lt;font color="#000000"&gt;This is the NYC developer community's sixth Code Camp!&lt;/font&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;When?&lt;/strong&gt; &lt;br&gt;October 1, 2011. &lt;br&gt;Check in starts at 7:30 AM.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Where?&lt;/strong&gt;&lt;br&gt;&lt;a href="http://www.pace.edu/" target="_blank"&gt;Pace University&lt;/a&gt;&lt;br&gt;One Pace Plaza New York, NY 10038.&lt;/p&gt; &lt;div id="mapviewer"&gt;&lt;iframe id="map" height="400" src="http://www.bing.com/maps/embed/?v=2&amp;amp;cp=40.711674112041585~-74.006142&amp;amp;lvl=16&amp;amp;dir=0&amp;amp;sty=r&amp;amp;where1=1%20Pace%20Plaza%2C%20New%20York%2C%20NY%2010038-1502&amp;amp;form=LMLTEW&amp;amp;pp=40.711674~-74.006142&amp;amp;emid=03934e2e-b268-b354-6f6b-d1598a7ee4b4" frameborder="0" width="500" scrolling="no"&gt;&lt;/iframe&gt; &lt;div style="line-height: 20px" id="LME_maplinks"&gt;&lt;a style="margin: 0px 7px" id="LME_largerMap" href="http://www.bing.com/maps/?v=2&amp;amp;cp=40.711674112041585~-74.006142&amp;amp;lvl=16&amp;amp;dir=0&amp;amp;sty=r&amp;amp;where1=1%20Pace%20Plaza%2C%20New%20York%2C%20NY%2010038-1502&amp;amp;form=LMLTEW" target="_blank"&gt;View Larger Map&lt;/a&gt;&lt;a style="margin: 0px 7px" id="LME_directions" href="http://www.bing.com/maps/?v=2&amp;amp;cp=40.711674112041585~-74.006142&amp;amp;lvl=16&amp;amp;dir=0&amp;amp;sty=r&amp;amp;where1=1%20Pace%20Plaza%2C%20New%20York%2C%20NY%2010038-1502&amp;amp;form=LMLTEW&amp;amp;rtp=%7Epos.40.711674112041585_-74.006142_Downtown" target="_blank"&gt;Driving Directions&lt;/a&gt;&lt;/div&gt;&lt;/div&gt; &lt;h2&gt;What's a Code Camp and why should I go?&lt;/h2&gt; &lt;p&gt;A Code Camp is technical event for professional software developers and students. The Code Camp event are hosted by software developers, technologists, and those in related technical fields, who have volunteered their time to organize an event packed with technical sessions in a variety of topics. You'll find industry expert speakers presenting on a range of topics from the practical, everyday advice of dealing with legacy code, to demonstrations of the latest, shiniest, technology. &lt;/p&gt; &lt;p&gt;A Code Camp isn't just about sitting in sessions - there's a lot of professional and social networking, both during and after the events. If you're looking for work, it's a great way to scope out opportunities. &lt;/p&gt; &lt;p&gt;Although Code Camps are usually free, NYC is an expensive place. Even with the help of our awesome sponsors, there's many costs left, so this Code Camp has a $15 fee. But it's more than worth it...&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Developers! Here's what you get:&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Talk tech with industry experts and &lt;a href="http://mvp.support.microsoft.com/gp/aboutmvp" target="_blank"&gt;MVPs&lt;/a&gt;, or chat with Microsoft employees.  &lt;li&gt;There's lots of great sessions and content for all developers on both Microsoft and non Microsoft platforms.  &lt;li&gt;Network and find freelance opportunities or full time jobs.  &lt;li&gt;Sharpen your skills!  &lt;li&gt;Yes, there's food! The attendance fee covers Breakfast, lunch, snacks and beverages.  &lt;li&gt;Lots of SWAG, free software, giveaways, and prizes.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Students! Jump ahead of your classmates in your career! &lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;See real world software development, in action, before you graduate.  &lt;li&gt;Talk to real world developers, and get advice on your projects, careers, interviewing, and more.  &lt;li&gt;Learn how to leverage your academic knowledge in the workplace.  &lt;li&gt;Learn how to monetize apps, and make some extra cash!&lt;/li&gt;&lt;/ul&gt; &lt;h2&gt;&lt;a href="http://codecampnyc.eventbrite.com/" target="_blank"&gt;&lt;font color="#ff0000"&gt;Spaces are filling up fast! Register here!&lt;/font&gt;&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Once you've registered... &lt;p&gt;We're excited to provide the opportunity for attendees of the code camp to vote for the sessions you'd most like to see! We'll tally up the votes, and your votes will weigh heavily in the final schedule. BUT… you &lt;em&gt;must&lt;/em&gt; be &lt;a href="http://codecampnyc.eventbrite.com/"&gt;registered&lt;/a&gt; for the code camp in order for your votes to count! &lt;p&gt;You must also be &lt;em&gt;&lt;a href="http://www.codecampnyc.org/wp-login.php?action=register"&gt;registered on the code camp site with the SAME email address&lt;/a&gt;&lt;/em&gt; in order to vote. &lt;p&gt;&lt;strong&gt;Voting is only opened from midnight, September 6, 2011, through 11:59:59 PM, September 8, 2011!&lt;/strong&gt;&lt;em&gt; &lt;/em&gt; &lt;p&gt;When you have registered, and are ready to vote, please visit our &lt;a href="http://www.codecampnyc.org/poll-session-selections/"&gt;voting page&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 06 Sep 2011 13:17:11 GMT</pubDate><guid isPermaLink="true">http://www.rachelappel.com:80/come-to-the-new-york-city-code-camp-fall-2011</guid></item><item><title>Break away from the debugging cycle of doom in ASP.NET MVC with unit tests</title><link>http://www.rachelappel.com:80/break-away-from-the-debugging-cycle-of-doom-in-asp.net-mvc-with-unit-tests</link><description>&lt;p&gt;The process of using F5 to start a debugging session is a ubiquitous practice in .NET development with Visual Studio. Despite that, developers are noticing and employing other methods of testing and writing software as these methods can provide better results and a more smooth development experience. &lt;/p&gt; &lt;h2&gt;The debugging cycle of doom &lt;/h2&gt; &lt;p&gt;The entire process of writing some code, compiling, then pressing F5 to walk through code, can be a tedious way to develop software, especially in larger applications. In general, many consider this type of testing as a smoke test. Smoke tests are fragile, error prone, and nowhere near as comprehensive as they should be, except in cases of automated testing (e.g., record/playback). &lt;/p&gt; &lt;p&gt;Consider the following common development scenario: You need to fix a bug in your code that calculates the total for an order. You would normally start debugging via F5, and try to reproduce the problem, so you can get to the code to fix it. This involves only a few steps; however, they're very time consuming, interwoven, efforts:&lt;/p&gt; &lt;p&gt;Reviewing the steps...&lt;/p&gt; &lt;ol&gt; &lt;li&gt;F5  &lt;li&gt;Navigate to the section of application as described by the bug report, using the UI as a user would.  &lt;li&gt;Attempt to reproduce the problem by interacting with the UI. This means filling in forms, submitting data, and using links and other page UI elements, again, just as a user would.  &lt;li&gt;Step through and investigate code with debugging tools.  &lt;li&gt;Return to code editor, locate source with error, and modify code.&amp;nbsp; &lt;li&gt;Repeat steps 1-5 several times.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Because this is the customary way to debug using Visual Studio, this may not seem time consuming, especially in a small application. However, &lt;strong&gt;this process often takes much more time than is needed to write code, fix bugs or resolve issues&lt;/strong&gt;. It's also rare that developers - even ninja developers - will actually fix the bug on the first shot without causing other bugs, so the process continues over and over again, except now, you're aiming at a moving target. As often as not, it's easy enough to find yourself "going down the rabbit hole", which usually ends up with a rather unpleasant &lt;em&gt;undo checkout &lt;/em&gt;command at the end of it all.&lt;/p&gt; &lt;p&gt;&lt;a href="http://rachelappel.com/Media/Default/Windows-Live-Writer/Avoid-the-F5-ant.NET-MVC-with-unit-tests_8AF1/dotnotry_4.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="You look like this when you use F5 " border="0" alt="You look like this when you use F5 " src="http://rachelappel.com/Media/Default/Windows-Live-Writer/Avoid-the-F5-ant.NET-MVC-with-unit-tests_8AF1/dotnotry_thumb_1.jpg" width="170" height="240"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;sup&gt;(Yep, it feels like this, doesn't it? Img src: &lt;a title="http://www.seussville.com/" href="http://www.seussville.com/"&gt;http://www.seussville.com/&lt;/a&gt;)&lt;/sup&gt;&lt;/p&gt; &lt;p&gt;Let's not forget, after you fix the bug, you still need to update the requirements documentation. This step is usually brushed off as a low priority, and then causes the requirements to become out of sync with the code base. As you can see, The F5 Way does nothing to help you code understand requirements, produce documentation, or add any extra business value. &lt;/p&gt; &lt;h2&gt;Break away from debugging tedium with unit tests.&lt;/h2&gt; &lt;p&gt;Now, consider the same development scenario: You need to fix a bug in your code that calculates the total for an order, but this time, going the unit test route. &lt;/p&gt; &lt;p&gt;The steps...&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Run tests.  &lt;li&gt;Inspect failed test and fix the bug in the code it tests.  &lt;li&gt;Repeat steps 1-2 if red. If green, your bug is fixed. &lt;sup&gt;[1]&lt;/sup&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;sup&gt;&lt;strong&gt;Note/Disclaimer for purists:&lt;/strong&gt; Depending on whether you're doing TDD or not, the exact process (e.g., test first vs.test later) will be different. This blog post in particular is trying to demonstrate what I believe is more likely to be seen in real world apps based on personal experience - i.e., test later, rather than test first, if they're testing at all! Your mileage may vary.&lt;/sup&gt;&lt;/p&gt; &lt;p&gt;Not only are there less steps involved with unit testing, but you're also saving a great deal of time. Unit tests also serve as documentation, not only saving even more time, but also while &lt;strong&gt;adding value by using unit tests as living, up to date, requirements documentation&lt;/strong&gt;. &lt;/p&gt; &lt;p&gt;Additionally, try to ensure your tests are isolated to one unit of code (one primary/entry point method a maybe a few supporting ones) as it’s easier to find the defect since you aren’t looking through n layers of architecture, classes and methods to find where the defect is occurring. This helps you test easier, as well as leads you toward writing cleaner code.  &lt;h3&gt;Fixing bugs with unit tests&lt;/h3&gt; &lt;p&gt;After a user files a bug report claiming that the the program calculates the total incorrectly, you investigate the code at question, which might not appear out of order at first glance.&lt;/p&gt; &lt;div id="codeSnippetWrapper"&gt; &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;decimal&lt;/span&gt; CalculateTotal(&lt;span style="color: #0000ff"&gt;decimal&lt;/span&gt; subtotal, &lt;span style="color: #0000ff"&gt;decimal&lt;/span&gt; tax, &lt;span style="color: #0000ff"&gt;decimal&lt;/span&gt; discount)&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;{&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    var tempTax = (subtotal - discount) * tax;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    var total = (subtotal - discount) + tempTax;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; total;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;}&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;But, how can you know for sure? You can run the application from Visual Studio, using breakpoints and other debugging tools. Since this code doesn't throw an exception, the app appears to be doing what it should. However, an important calculation is incorrect! We can know that the code is correct with unit tests.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A unit test that will verify if the code is indeed, doing what it should be doing&lt;/strong&gt;. Inside the unit test method that you specify the exact parameter values to test as inputs, and exactly what you expect as a result. Once the test is setup, call the code in question, and then verify the results&lt;font face="Calibri"&gt;. The best way to structure the tests by using the fashionable &lt;em&gt;"Arrange, Act, Assert"&lt;/em&gt; technique, as described here: &lt;/font&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Arrange:&lt;/strong&gt; Declare variables and instantiate objects or mocks needed for the test. 
&lt;li&gt;&lt;strong&gt;Act:&lt;/strong&gt; Execute the code in question, by calling a method or property of the object. 
&lt;li&gt;&lt;strong&gt;Assert:&lt;/strong&gt; Use the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.assert.aspx"&gt;Assert&lt;/a&gt; object to determine if the results are what you expect.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;The unit test code below demonstrates testing the calculation for an order using &lt;em&gt;Arrange, Act, Assert&lt;/em&gt;.&lt;/p&gt;
&lt;div&gt;
&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;[TestMethod()]&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Calculate_The_Total_Of_An_Order()&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;{&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #008000"&gt;//Arrange&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    Order order = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Order();&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    OrdersBLL target = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; OrdersBLL(order);&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    Decimal subtotal = 10M;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    Decimal tax = .54M;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    Decimal discount = 1.0M;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    Decimal expected = 9.54M;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    Decimal actual;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #008000"&gt;//Act&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    actual = target.CalculateTotal(subtotal, tax, discount);&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #008000"&gt;//Assert&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    Assert.AreEqual(expected, actual);&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;}&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;The &lt;font face="Courier New"&gt;[TestMethod()]&lt;/font&gt; attribute denotes that this particular method is only meant for unit testing. Aside from the &lt;font face="Courier New"&gt;[TestMethod()]&lt;/font&gt; attribute, the code inside unit tests is the same type of code you would normally write any other day. Code that creates instances of objects, calls methods, and uses assertions and logic.&lt;/p&gt;
&lt;p&gt;Unit test classes live in their own code files and projects, separate from other projects in the solution, so they won't get in your way, and you can run them separately from your core projects. &lt;/p&gt;
&lt;p&gt;When you run the test(s), you can see right away, which ones passed and which ones failed.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rachelappel.com/Media/Default/Windows-Live-Writer/Avoid-the-F5-ant.NET-MVC-with-unit-tests_8AF1/SNAGHTML735712f.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="" border="0" alt="Visual Studio 2010 &amp;amp; MS Test are awesome for unit testing" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/Avoid-the-F5-ant.NET-MVC-with-unit-tests_8AF1/SNAGHTML735712f_thumb.png" width="604" height="445"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;sup&gt;Note: This sample demonstrates using MS Test, however any good testing framework will provide a test runner that does the same basic thing - run tests and output pass/fail statuses.&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Since the test failed, you then need to investigate the &lt;font face="Courier New"&gt;OrdersBLL.CalculateTotal()&lt;/font&gt; method in the &lt;font face="Courier New"&gt;OrdersBLL&lt;/font&gt; class, since that's the method this unit test is testing. &lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;decimal&lt;/span&gt; CalculateTotal(&lt;span style="color: #0000ff"&gt;decimal&lt;/span&gt; subtotal, &lt;span style="color: #0000ff"&gt;decimal&lt;/span&gt; tax, &lt;span style="color: #0000ff"&gt;decimal&lt;/span&gt; discount)&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;{&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    var tempTax = (subtotal - discount) * tax;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    var total = (subtotal - discount) + tempTax;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; total;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;}&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;The original developer is using the &lt;font face="Courier New"&gt;tax&lt;/font&gt; argument as a percentage, rather than just adding the pre-calculated tax amount, which is the original intent of this method. Now that you've found the bug, you can modify the code and re-run the tests. &lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;decimal&lt;/span&gt; CalculateTotal(&lt;span style="color: #0000ff"&gt;decimal&lt;/span&gt; subtotal, &lt;span style="color: #0000ff"&gt;decimal&lt;/span&gt; tax, &lt;span style="color: #0000ff"&gt;decimal&lt;/span&gt; discount)&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;{&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    var total = (subtotal - discount) + tax;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; total;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;}&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://rachelappel.com/Media/Default/Windows-Live-Writer/Avoid-the-F5-ant.NET-MVC-with-unit-tests_8AF1/SNAGHTML76e2b6a.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="The unit test passed!" border="0" alt="The unit test passed!" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/Avoid-the-F5-ant.NET-MVC-with-unit-tests_8AF1/SNAGHTML76e2b6a_thumb.png" width="604" height="124"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now that the test(s) show green, you can feel safe knowing that you've fixed the issue.&lt;/p&gt;
&lt;p&gt;Although you may have to modify and run the tests a few times, there will be no UI interaction, as the testing framework will output the results quickly and clearly. To reiterate, the time saved compared to F5 debugging are huge, as &lt;strong&gt;most tests can complete running before Visual Studio can even load a web application&lt;/strong&gt;. This means you'll already be in the code making the right modification rather than wasting time fishing around in the UI and guessing.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rachelappel.com/Media/Default/Windows-Live-Writer/Avoid-the-F5-ant.NET-MVC-with-unit-tests_8AF1/cute-kitten-sleeps-on-computer_2.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="" border="0" alt="A programming kitty who uses unit tests on his nap break" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/Avoid-the-F5-ant.NET-MVC-with-unit-tests_8AF1/cute-kitten-sleeps-on-computer_thumb.jpg" width="240" height="210"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;sup&gt;(Development feels more like this when unit testing. Img source: &lt;a title="http://tamdiego.wordpress.com/" href="http://www.cattearoom.com/uncategorized/when-my-cats-arent-happy-im-not-happy/" target="_blank"&gt;cattearoom.com&lt;/a&gt;)&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;&lt;sup&gt;&lt;/sup&gt;This doesn't mean you'll never use F5 again, since you'll still need to run smoke tests, but with far less hunting, pecking, and changing than with F5 debugging. Plus, most developers just like to poke around in the code, tweak, and refactor as well.&lt;/p&gt;
&lt;p&gt;Now that you've seen the benefits of unit testing, here are some popular frameworks you can use to get started. &lt;/p&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;MS Test:&lt;/strong&gt; Built into Visual Studio 2010, &lt;strong&gt;MS Test&lt;/strong&gt; &lt;sup&gt;[2]&lt;/sup&gt; is a nice testing framework, especially for those getting started. There's no extra installation required and, of course, it's fully integrated with the IDE, so there's less friction for testing novices.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;xUnit&lt;/strong&gt;: &lt;a href="http://xunit.codeplex.com" target="_blank"&gt;xUnit&lt;/a&gt; is a unit testing framework written by ASP.NET team member &lt;a href="http://bradwilson.typepad.com/" target="_blank"&gt;Brad Wilson&lt;/a&gt;&amp;nbsp;&lt;sup&gt;[3]&lt;/sup&gt;, and Jim Newkirk. xUnit is easy to use, and works with many Visual Studio add-ins and 3rd party libraries. xUnit also has built in MVC test project support, and works with .NET versions 2.0 and later.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;nUnit&lt;/strong&gt;: &lt;a href="http://www.nunit.org/" target="_blank"&gt;nUnit&lt;/a&gt;, like xUnit, nUnit is a testing framework that is also easy to use, and like xUnit, integrates with Visual Studio add-ins and 3rd party libraries. nUnit is one of the more mature unit testing libraries available for .NET developers.&lt;/p&gt;
&lt;p&gt;Want to compare these frameworks? Check out the &lt;a href="http://xunit.codeplex.com/wikipage?title=Comparisons&amp;amp;referringTitle=Home" target="_blank"&gt;unit testing features comparison at the xUnit site on CodePlex&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There will always be at least some learning curve and friction to those beginning anything new and unit testing is no different. However, most developers are quick to get the hang of it, and quick to start enjoying writing tests and seeing results quickly. &lt;strong&gt;It does take a shift in mindset, but the payoff is more than worth it, as unit testing is one of the best ways to bake quality into your application from the start.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Resources:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://jamescbender.com/bendersblog/Default.aspx" target="_blank"&gt;James Bender&lt;/a&gt; &amp;amp; &lt;a href="http://mcwherter.net/" target="_blank"&gt;Jeff McWherter&lt;/a&gt; have paired together to write an excellent book, &lt;em&gt;"Test Driven Development with C#"&lt;/em&gt;, and at 305 pages, it shows that &lt;strong&gt;unit testing and TDD are not rocket surgery!&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/047064320X/ref=as_li_qf_sp_asin_il_tl?ie=UTF8&amp;amp;tag=httpwwwrach0d-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=047064320X"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="James &amp;amp; Jeff's awesome book!" border="0" alt="James &amp;amp; Jeff's awesome book!" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/Avoid-the-F5-ant.NET-MVC-with-unit-tests_8AF1/51n9WRcu6lL__SL500_AA300__3.jpg" width="240" height="240"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The book is an enjoyable read, with great explanations and well written code.&lt;/p&gt;
&lt;p&gt;Footnotes:&lt;/p&gt;
&lt;p&gt;&lt;sup&gt;[1] It is possible that you have written your test(s) incorrectly, but for the purposes of demonstration, this sample assumes the tests are well written.&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;&lt;sup&gt;[2] See the &lt;a href="http://www.microsoft.com/visualstudio/en-us/products/2010-editions/product-comparison" target="_blank"&gt;Visual Studio 2010 features&lt;/a&gt; to determine if your edition of VS works with MS Test.&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;&lt;sup&gt;[3] Brad is my BFF. :-D&lt;/sup&gt;&lt;/p&gt;</description><pubDate>Mon, 15 Aug 2011 16:15:13 GMT</pubDate><guid isPermaLink="true">http://www.rachelappel.com:80/break-away-from-the-debugging-cycle-of-doom-in-asp.net-mvc-with-unit-tests</guid></item><item><title>Detect HTML5 &amp; CSS 3 features in your ASP.NET Web Forms, MVC, or Razor Pages with Modernizr</title><link>http://www.rachelappel.com:80/detect-html5-amp-css-3-features-in-your-asp.net-web-forms-mvc-or-razor-pages-with-modernizr</link><description>&lt;p&gt;Over the course of web history, browser detection, rather than feature detection, has been the de facto way to customize the browsing experience. However, this is an antiquated technique which is also very error prone, making the ability to deliver targeted markup &amp;amp; content difficult, at best. As browsers continue to evolve and release new versions, the list of capabilities that you need to worry about can grow exponentially. However, &lt;a href="http://modernizr.com" target="_blank"&gt;Modernizr&lt;/a&gt; aims to change that.&lt;/p&gt;
&lt;h2&gt;What can Modernizr do for you?&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://rachelappel.com/Media/Default/Windows-Live-Writer/be35c300b04d_10C75/image_2.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Modernizr" border="0" alt="Modernizr" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/be35c300b04d_10C75/image_thumb.png" width="244" height="53" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Modernizr is a JavaScript library that you can use to perform feature detection of emerging web technologies&lt;/strong&gt;, in particular, feature sets found in HTML5 and CSS 3. In addition to its core feature detection library, Modernizr also offers the following features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A tiny footprint (about 16k if you use &lt;em&gt;everything&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;Simple to use API&lt;/li&gt;
&lt;li&gt;Asynchronous script loading&lt;/li&gt;
&lt;li&gt;Back filling with polyfills &amp;amp; shims (see below)&lt;/li&gt;
&lt;li&gt;Ways to test your own features not included in the Modernizr library with tests&lt;/li&gt;
&lt;li&gt;Integrates with other libraries, such as yepnope.js and respond.js&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;span style="font-weight: bold;"&gt;Modernizr Overview&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;Visit &lt;a href="http://modernizr.com/" target="_blank"&gt;Modernizr.com&lt;/a&gt; where you can select which tests you want to download and use. Modernizr detects over 40 features including the new popular CSS attributes, HTML5 elements, and other APIs, as illustrated in the image below:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rachelappel.com/Media/Default/Windows-Live-Writer/be35c300b04d_10C75/image3.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Modernizr features" border="0" alt="Modernizr features" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/be35c300b04d_10C75/image3_thumb.png" width="600" height="405" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Use this utility to generate minified script(s) to include in your \Scripts folder as the &lt;strong&gt;production version&lt;/strong&gt;.&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;&lt;strong&gt;For development&lt;/strong&gt;, download and reference &lt;a title="Development Uncompressed, 42 Kb" href="http://www.modernizr.com/downloads/modernizr-2.0.6.js"&gt;Modernizr's uncompressed development file&lt;/a&gt;, weighing in at 42k. If you prefer, but only for development purposes, you can point to the &lt;a href="http://www.asp.net/ajaxlibrary/cdn.ashx#Modernizr_Releases_on_the_CDN_5" target="_blank"&gt;Microsoft CDN development version of the .js file&lt;/a&gt;. Currently, Modernizr's production scripts do not exist at the popular &lt;a href="http://code.google.com/apis/libraries/"&gt;Google&lt;/a&gt; or &lt;a href="http://www.asp.net/ajaxlibrary/cdn.ashx"&gt;Microsoft&lt;/a&gt; CDNs. Modernizr &lt;em&gt;is&lt;/em&gt; gaining popularity and momentum, and it's entirely reasonable to speculate that it will be hosted at one or more of the major CDNs soon, so you may want to check the CDNs regularly for updates.&lt;/div&gt;
&lt;p&gt;Once you've decided which script to use, you can start using Modernizr.&lt;/p&gt;
&lt;h2&gt;&lt;span style="font-weight: bold;"&gt;Setting up Modernizr&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;There is &lt;strong&gt;very little you need to do&lt;/strong&gt; to use Modernizr.&lt;/p&gt;
&lt;p&gt;Add a &lt;span style="font-family: Courier New;" face="Courier New"&gt;&amp;lt;script&amp;gt;&lt;/span&gt; tag inside the &lt;span style="font-family: Courier New;" face="Courier New"&gt;&amp;lt;head&amp;gt;&lt;/span&gt; tag &lt;sup&gt;[1]&lt;/sup&gt;, and reference the CDN or a downloaded Modernizr script.&lt;/p&gt;
&lt;p&gt;The code below demonstrates a standard HTML document head section, including Modernizr in the script references.&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;" id="codeSnippet"&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: #800000;"&gt;DOCTYPE&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;html&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;html&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="no-js"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;head&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;meta&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;charset&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="utf-8"&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;title&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;Trying out Modernizr&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;title&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;link&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;href&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="../../Content/Site.css"&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;rel&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="stylesheet"&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="text/css"&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;script&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;src&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="http://ajax.aspnetcdn.com/ajax/modernizr/modernizr-2.0.6-development-only.js "&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="text/javascript"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;script&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;    &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;head&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;You'll also want to modify the &lt;span style="font-family: Courier New;" face="Courier New"&gt;&amp;lt;html&amp;gt;&lt;/span&gt; element by inserting a &lt;span style="font-family: Courier New;" face="Courier New"&gt;class&lt;/span&gt; attribute and setting it to "no-js". Modernizr uses this as a fallback for browsers that do not support JavaScript.&lt;/p&gt;
&lt;p&gt;Once you've prepared your project to use the Modernizr library, it's time to dig in and see how it works.&lt;/p&gt;
&lt;h2&gt;&lt;span style="font-weight: bold;"&gt;How Modernizr Works&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;During the Modernizr startup process, the initialization code performs the following tasks:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;The script creates a global Modernizr object&lt;/strong&gt;, which contains a property for each feature that Modernizr exposes, along with a few methods, most notably for adding tests so you can extend Modernizr.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The script sets up integration with yepnope.js&lt;/strong&gt;, a conditional resource loader that allows you to optimize page performance by loading scripts only when you need them.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;A great way to see Modernizr in action is to use it in a simple HTML page, then investigate it in debug mode using debugging tools in a browser. Open the &lt;a href="http://rachelappel.com/Tags/IE%20Developer%20Tools"&gt;IE F12 Developer Tools&lt;/a&gt; and navigate to the Script tab, then select the Modernizr script from the dropdown list. You can then set a breakpoint at the end of the file. This is when Modernizr is ready to return the Modernizr object, so it's fully populated and easy to investigate.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rachelappel.com/Media/Default/Windows-Live-Writer/be35c300b04d_10C75/SNAGHTML6cc034_1.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="IE Developer tools with Modernizr" border="0" alt="IE Developer tools with Modernizr" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/be35c300b04d_10C75/SNAGHTML6cc034_thumb_1.png" width="604" height="276" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Switching over to the HTML tab in the developer tools will reveal the &lt;span style="font-family: Courier New;" face="Courier New"&gt;&amp;lt;html&amp;gt;&lt;/span&gt; element at runtime that Modernizr creates to expose supported features.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rachelappel.com/Media/Default/Windows-Live-Writer/be35c300b04d_10C75/SNAGHTMLa93eb6e.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Use IE F12 Tools to investigate Modernizr's HTML modifications" border="0" alt="Use IE F12 Tools to investigate Modernizr's HTML modifications" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/be35c300b04d_10C75/SNAGHTMLa93eb6e_thumb.png" width="604" height="349" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here's the complete output from the screenshot highlight above:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;span style="font-family: Courier New; font-size: xx-small;" size="1" face="Courier New"&gt;&amp;lt;html class= "js no-flexbox canvas canvastext no-webgl no-touch geolocation postmessage no-websqldatabase no-indexeddb hashchange no-history draganddrop no-websockets rgba hsla multiplebgs backgroundsize no-borderimage borderradius boxshadow no-textshadow opacity no-cssanimations no-csscolumns no-cssgradients no-cssreflections csstransforms no-csstransforms3d no-csstransitions fontface generatedcontent video audio localstorage sessionstorage no-webworkers no-applicationcache svg inlinesvg smil svgclippaths"&amp;gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Fortunately, you &lt;strong&gt;won't&lt;/strong&gt; see this output in &lt;em&gt;View Source,&lt;/em&gt; but you can see it while using the developer tools of just about any browser - it works the same in IE, Firefox, &amp;amp; Chrome&lt;em&gt;. &lt;/em&gt;That's because the code in the Modernizr.js file works with the &lt;strong&gt;document.documentElement&lt;/strong&gt; property, which is part of the XML DOM, not the HTML DOM. You can scan the Modernizr script file to reveal various lines of code that use the documentElement property.&lt;/p&gt;
&lt;p&gt;Another great way to see how Modernizr works is to investigate the annotated source code online at &lt;a title="http://modernizr.github.com/Modernizr/annotatedsource.html" href="http://modernizr.github.com/Modernizr/annotatedsource.html"&gt;http://modernizr.github.com/Modernizr/annotatedsource.html&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Now you're ready to start using Modernizr's powerful feature detection library by writing plain JavaScript, jQuery, or any client side JS library of your choice, to go along with any server side framework of your choice, such as Web Forms or MVC.&lt;/p&gt;
&lt;h2&gt;&lt;span style="font-weight: bold;"&gt;Modernizr &amp;amp; ASP.NET Development: Web Forms/MVC/Web Pages&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;Since Modernizr is just a JavaScript library, it works with all three ASP.NET development platforms: ASP.NET Web Forms, ASP.NET MVC, and ASP.NET Web Pages, so let's investigate each...&lt;/p&gt;
&lt;h3&gt;&lt;span style="font-weight: bold;"&gt;ASP.NET Web Forms &lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;You can use &lt;a href="http://rachelappel.com/nuget/find-amp-install-3rd-party-libraries-lightning-fast-with-nuget-for-visual-studio-2010/"&gt;NuGet&lt;/a&gt; to download, install, and upgrade your Modernizr scripts, by choosing &lt;em&gt;References-&amp;gt;Add Library Package Reference&lt;/em&gt; from Solution Explorer, or choosing the &lt;em&gt;Add Library Package&lt;/em&gt; option from the Visual Studio &lt;em&gt;Project&lt;/em&gt; menu. This command installs a development version of the Modernizr script that you can use, by downloading the script and adding the appropriate code to your Master Page.&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;" id="codeSnippet"&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="background-color: #ffff00;"&gt;&amp;lt;%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="WebApplication1.SiteMaster" %&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: #800000;"&gt;DOCTYPE&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;html&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;PUBLIC&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;"-//W3C//DTD XHTML 1.0 Strict//EN"&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;html &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="http://www.w3.org/1999/xhtml"&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;xml:lang&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="en"&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="no-js"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;head&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="server"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;title&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;title&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;link&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;href&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Styles/Site.css"&lt;/span&gt;  &lt;span style="color: #ff0000;"&gt;rel&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="stylesheet"&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="text/css"&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;script&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;src&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="../Scripts/&lt;span style="color: #ff0000;" color="#ff0000"&gt;modernizr-2.0.6.js&lt;/span&gt;"&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="text/javascript"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;script&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt; &amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;script&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;src&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="../Scripts/&lt;span style="color: #ff0000;"&gt;jquery-1.5.1&lt;/span&gt;.&lt;span style="color: #ff0000;"&gt;js&lt;/span&gt;"&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="text/javascript"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;script&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt; &amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;script&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;src&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="../Scripts/&lt;span style="color: #ff0000;"&gt;juqery-ui-1&lt;/span&gt;.&lt;span style="color: #ff0000;"&gt;8&lt;/span&gt;.&lt;span style="color: #ff0000;"&gt;11&lt;/span&gt;.&lt;span style="color: #ff0000;"&gt;js&lt;/span&gt;"&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="text/javascript"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;script&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;asp:ContentPlaceHolder&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="HeadContent"&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="server"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;asp:ContentPlaceHolder&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;head&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;strong&gt;Pro Tip:&lt;/strong&gt; Consider changing both the &lt;span style="font-family: Courier New;" face="Courier New"&gt;&amp;lt;!DOCTYPE html PUBLIC...&amp;gt;&lt;/span&gt; and the &lt;span style="font-family: Courier New;" face="Courier New"&gt;&amp;lt;html&amp;gt;&lt;/span&gt; elements, included by default in the in Web Forms templates, to the new, lightweight, HTML5 versions.&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;" id="codeSnippet"&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: #800000;"&gt;DOCTYPE&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;html&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;html &lt;span style="color: #ff0000;"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="no-js"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style="font-family: Consolas;" face="Consolas"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;Add some code to any Web Form that uses the Modernizd Master Page to test any property of your choice, and for this example, we'll test to see if IE 9 supports local &lt;a href="http://www.rachelappel.com/managing-data-in-web-applications-with-html5-web-storage"&gt;Web Storage&lt;/a&gt;.&lt;/p&gt;
&lt;p id="codeSnippetWrapper"&gt;&lt;/p&gt;
&lt;div style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;" id="codeSnippet"&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;script&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="text/javascript"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (Modernizr.localstorage !== &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;) {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        $(&lt;span style="color: #006080;"&gt;"h1"&lt;/span&gt;).text(&lt;span style="color: #006080;"&gt;"This browser supports local storage"&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;        $(&lt;span style="color: #006080;"&gt;"h1"&lt;/span&gt;).text(&lt;span style="color: #006080;"&gt;"This browser does not support local storage"&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;script&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;div id="codeSnippetWrapper"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;Viewing the results shows that Modernizr does work, and that Web Storage support exists in IE9.&lt;/div&gt;
&lt;p&gt;&lt;a href="http://rachelappel.com/Media/Default/Windows-Live-Writer/be35c300b04d_10C75/SNAGHTML280921e.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="SNAGHTML280921e" border="0" alt="SNAGHTML280921e" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/be35c300b04d_10C75/SNAGHTML280921e_thumb.png" width="600" height="394" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="font-weight: bold;"&gt;ASP.NET MVC&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;ASP.NET MVC3 project templates include the Modernizr script references for those who have installed either the &lt;a href="http://www.microsoft.com/download/en/details.aspx?id=1491" target="_blank"&gt;MVC 3 Tools Update&lt;/a&gt; or the &lt;a href="http://visualstudiogallery.msdn.microsoft.com/a15c3ce9-f58f-42b7-8668-53f6cdc2cd83" target="_blank"&gt;Web Standards Update&lt;/a&gt; (note: the WSU requires VS2010 SP1). When you create a new ASP.NET MVC 3 project, Visual Studio adds the Modernizr .js files to the \Scripts folder and adds the necessary &lt;span style="font-family: Courier New;" face="Courier New"&gt;&amp;lt;script&amp;gt;&lt;/span&gt; tags to the Layout Page (\Views\Shared\_Layout.cshtml).&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;" id="codeSnippet"&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: #800000;"&gt;DOCTYPE&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;html&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;html&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="no-js"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;head&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;meta&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;charset&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="utf-8"&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;title&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;@ViewBag.Title&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;title&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;link&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;href&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="@Url.Content("&lt;/span&gt;~/&lt;span style="color: #ff0000;"&gt;Content&lt;/span&gt;/&lt;span style="color: #ff0000;"&gt;Site&lt;/span&gt;.&lt;span style="color: #ff0000;"&gt;css&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;")"&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;rel&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="stylesheet"&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="text/css"&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;script&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;src&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="@Url.Content("&lt;/span&gt;~/&lt;span style="color: #ff0000;"&gt;Scripts&lt;/span&gt;/&lt;span style="color: #ff0000;"&gt;modernizr-2&lt;/span&gt;.&lt;span style="color: #ff0000;"&gt;0&lt;/span&gt;.&lt;span style="color: #ff0000;"&gt;6&lt;/span&gt;.&lt;span style="color: #ff0000;"&gt;js&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;")"&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="text/javascript"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;script&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;script&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;src&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="@Url.Content("&lt;/span&gt;~/&lt;span style="color: #ff0000;"&gt;Scripts&lt;/span&gt;/&lt;span style="color: #ff0000;"&gt;jquery-1.5.1&lt;/span&gt;.&lt;span style="color: #ff0000;"&gt;js&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;")"&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="text/javascript"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;script&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;script&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;src&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="@Url.Content("&lt;/span&gt;~/&lt;span style="color: #ff0000;"&gt;Scripts&lt;/span&gt;/&lt;span style="color: #ff0000;"&gt;juqery-ui-1&lt;/span&gt;.&lt;span style="color: #ff0000;"&gt;8&lt;/span&gt;.&lt;span style="color: #ff0000;"&gt;11&lt;/span&gt;.&lt;span style="color: #ff0000;"&gt;js&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;")"&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="text/javascript"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;script&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #0000ff;"&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;head&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Alternatively, you can use NuGet to download and install the Modernizr scripts, much the same way you would do so for Web Forms, and as always, manual installation is an option.&lt;/p&gt;
&lt;p&gt;You can then write code to detect features, like the below example demonstrating if the browser supports the Geolocation API.&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;" id="codeSnippet"&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;script&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="text/javascript"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;!--CRLF--&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (Modernizr.geolocation)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;$(&lt;span style="color: #006080;"&gt;"h1"&lt;/span&gt;).text(&lt;span style="color: #006080;"&gt;"Hello, Modernizd World, I can find you with Geolocation!"&lt;/span&gt;);&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;script&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The code above creates the following results:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rachelappel.com/Media/Default/Windows-Live-Writer/be35c300b04d_10C75/SNAGHTML2625b64.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="SNAGHTML2625b64" border="0" alt="SNAGHTML2625b64" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/be35c300b04d_10C75/SNAGHTML2625b64_thumb.png" width="600" height="226" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="font-weight: bold;"&gt;ASP.NET Web Pages&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;You can manually download Modernizr for use in your ASP.NET Web Pages apps. After downloading, add the Modernizr scripts to your project, then add script references and code modifications to the _SiteLayout.cshtml page. When working with Razor pages you can use Html Helpers such as the @Href helper.&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;" id="codeSnippet"&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: #800000;"&gt;DOCTYPE&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;html&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;html&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;lang&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="en" &lt;span style="color: #ff0000;"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="no-js"&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;head&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;meta&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;charset&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="utf-8"&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;title&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;My ASP.NET Web Page - @Page.Title&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;title&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;link&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;href&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="@Href("&lt;/span&gt;~/&lt;span style="color: #ff0000;"&gt;Styles&lt;/span&gt;/&lt;span style="color: #ff0000;"&gt;Site&lt;/span&gt;.&lt;span style="color: #ff0000;"&gt;css&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;")"&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;rel&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="stylesheet"&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;script&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;src&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="@Href("&lt;/span&gt;~/&lt;span style="color: #ff0000;"&gt;Scripts&lt;/span&gt;/&lt;span style="color: #ff0000;"&gt;modernizr-2&lt;/span&gt;.&lt;span style="color: #ff0000;"&gt;0&lt;/span&gt;.&lt;span style="color: #ff0000;"&gt;6&lt;/span&gt;.&lt;span style="color: #ff0000;"&gt;js&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;")"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;script&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;!--CRLF--&gt;&lt;/pre&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt; &amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;script&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;src&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="@Href("&lt;/span&gt;~/&lt;span style="color: #ff0000;"&gt;Scripts&lt;/span&gt;/&lt;span style="color: #ff0000;"&gt;jquery-1.5.1&lt;/span&gt;.&lt;span style="color: #ff0000;"&gt;js&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;")"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;script&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;    &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;link&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;href&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="@Href("&lt;/span&gt;~/&lt;span style="color: #ff0000;"&gt;favicon&lt;/span&gt;.&lt;span style="color: #ff0000;"&gt;ico&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;")"&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;rel&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="shortcut icon"&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="image/x-icon"&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;head&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;After the leading code is setup in the Layout Page, test out a Razor page by adding code that checks for a feature, in this case &lt;span style="font-family: Courier New;" face="Courier New"&gt;&amp;lt;canvas&amp;gt;&lt;/span&gt;.&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;" id="codeSnippet"&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;script&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="text/javascript"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;!--CRLF--&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (Modernizr.canvas) {&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;$(&lt;span style="color: #006080;"&gt;"h1"&lt;/span&gt;).text(&lt;span style="color: #006080;"&gt;"This Modernizd browser supports the canvas element!"&lt;/span&gt;);&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="color: #606060;" id="lnum5"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;script&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Run the page from WebMatrix to verify Modernizr is working, and the &lt;span style="font-family: Courier New;" face="Courier New"&gt;&amp;lt;canvas&amp;gt;&lt;/span&gt; element is supported by IE 9.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rachelappel.com/Media/Default/Windows-Live-Writer/be35c300b04d_10C75/SNAGHTML2885675.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="SNAGHTML2885675" border="0" alt="SNAGHTML2885675" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/be35c300b04d_10C75/SNAGHTML2885675_thumb.png" width="600" height="340" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span style="font-weight: bold;"&gt;Summary &amp;amp; Resources&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;Modernizr is a quick and easy way to detect modern web technologies with a few lines of script, and Modernizr works well with all three ASP.NET technologies. Browser detection is &lt;strong&gt;OUT&lt;/strong&gt;! Feature detection is &lt;strong&gt;IN&lt;/strong&gt;!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Related Posts:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For more on the IE developer tools, see my list of blog posts tagged as &lt;a href="http://rachelappel.com/Tags/Developer%20Tools"&gt;IE Developer Tools&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rachelappel.com/managing-data-in-web-applications-with-html5-web-storage"&gt;HTML5 Web Storage&lt;/a&gt; (local and session storage)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rachelappel.com/html5ify-your-asp.net-mvc-3-applications"&gt;HTML5ify your ASP.NET MVC Applications&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a title="Find &amp;amp; install 3rd party libraries lightning fast with NuGet for Visual Studio 2010" href="http://rachelappel.com/nuget/find-amp-install-3rd-party-libraries-lightning-fast-with-nuget-for-visual-studio-2010/"&gt;Find &amp;amp; install 3rd party libraries lightning fast with NuGet for Visual Studio 2010&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rachelappel.com/Tags/HTML5"&gt;HTML5 &lt;/a&gt;and &lt;a href="http://rachelappel.com/Tags/HTML"&gt;HTML&lt;/a&gt; tagged Blog posts&lt;/p&gt;
&lt;p&gt;&lt;iframe style="background-color: #fcfcfc; width: 98px; height: 115px; padding: 0px;" title="Preview" marginheight="0" src="https://skydrive.live.com/embedicon.aspx/Downloads/HTML5Samples.zip?cid=aceca4426b669c50&amp;amp;sc=documents" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;Footnotes:&lt;/p&gt;
&lt;p&gt;&lt;sup&gt;[1] Modernizr.com suggests: &lt;/sup&gt;&lt;sup&gt;&lt;em&gt;"For best performance, you should have them follow after your stylesheet references. The reason we recommend placing Modernizr in the head is two-fold: the HTML5 Shiv (that enables HTML5 elements in IE) must execute before the &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt;, and if you&amp;rsquo;re using any of the CSS classes that Modernizr adds, you&amp;rsquo;ll want to prevent a &lt;abbr&gt;FOUC&lt;/abbr&gt;."&lt;/em&gt; (flash of unstyled content) -&lt;a href="http://modernizr.com"&gt;Modernizr.com&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;</description><pubDate>Mon, 08 Aug 2011 20:10:08 GMT</pubDate><guid isPermaLink="true">http://www.rachelappel.com:80/detect-html5-amp-css-3-features-in-your-asp.net-web-forms-mvc-or-razor-pages-with-modernizr</guid></item><item><title>Use HTML5 semantic tags to add new meaning to your MVC views</title><link>http://www.rachelappel.com:80/use-html5-semantic-tags-to-add-new-meaning-to-your-mvc-views</link><description>&lt;p&gt;While HTML5 promises to be THE future of the web, there's no need to wait - you can have some of that future now. As the W3C Working Groups finalize the HTML5 standards, many browsers are already implementing them, so developers can already take advantage of these cutting-edge features. Semantic elements are one of these features that you can use in your code, right now.&lt;/p&gt; &lt;h2&gt;&lt;strong&gt;The HTML5 semantic element set&lt;/strong&gt;&lt;/h2&gt; &lt;p&gt;Since HTML is a markup language, elements are at its core, and semantic elements in particular allow you to express the content and meaning of the content in a more precise, clear, way than you can with traditional elements. Semantic elements give you the ability to format data like HTML does, but also to describe the meaning of the content, similar in concept to XML. That means you're looking at smaller, cleaner, expressive, markup as a result.&lt;/p&gt; &lt;p&gt;Since semantic elements are part of the HTML5 specification, your page will need the much improved &amp;lt;!DOCTYPE&amp;gt; element, shown here:&lt;/p&gt; &lt;div id="codeSnippetWrapper"&gt; &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: #800000"&gt;DOCTYPE&lt;/span&gt; &lt;span style="color: #ff0000"&gt;html&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;This back-to-basics &amp;lt;!DOCTYPE&amp;gt; works everywhere, in every browser, with no ridiculously long syntax to deal with. Once your &amp;lt;!DOCTYPE&amp;gt; is setup, the rest of the page can go semantic as well, as some of the new elements deal with describing structure of the content rather than providing just basic markup. Below is a list of semantic elements for structuring page content:&lt;/p&gt;
&lt;table border="1" cellspacing="1" cellpadding="1" width="600"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="153" align="center"&gt;&lt;strong&gt;Element&lt;/strong&gt;&lt;/td&gt;
&lt;td width="447" align="center"&gt;&lt;strong&gt;Purpose&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="153"&gt;&amp;lt;article&amp;gt;&lt;/td&gt;
&lt;td valign="top" width="447"&gt;Use this to encase content, particularly syndicated content such as blog entries. As it's name denotes, the &amp;lt;article&amp;gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="153"&gt;&amp;lt;aside&amp;gt;&lt;/td&gt;
&lt;td valign="top" width="447"&gt;Great for side-bars, quotes, notes, and other content related to the article content that you want to emphasize.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="153"&gt;&amp;lt;figcaption&amp;gt;&lt;/td&gt;
&lt;td valign="top" width="447"&gt;A caption for a Figure&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="153"&gt;&amp;lt;figure&amp;gt;&lt;/td&gt;
&lt;td valign="top" width="447"&gt;A Figure&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="153"&gt;&amp;lt;footer&amp;gt;&lt;/td&gt;
&lt;td valign="top" width="447"&gt;This element is the footer of an article or of the page/document itself. Pages can contain multiple &amp;lt;footer&amp;gt; tags for varying purposes.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="153"&gt;&amp;lt;header&amp;gt;&lt;/td&gt;
&lt;td valign="top" width="447"&gt;The &amp;lt;header&amp;gt; tags belong in between &amp;lt;article&amp;gt; article tags to denote the header of an article. They're not to be confused with the &amp;lt;head&amp;gt; tag that signifies the entire document heading.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="153"&gt;&amp;lt;hgroup&amp;gt;&lt;/td&gt;
&lt;td valign="top" width="447"&gt;Use this element to group heading elements &amp;lt;h1&amp;gt; - &amp;lt;h6&amp;gt;. This will group the elements together for rendering titles and subtitles.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="153"&gt;&amp;lt;mark&amp;gt;&lt;/td&gt;
&lt;td valign="top" width="447"&gt;Highlights (yellow, in many browsers) some content for emphasis. Use this tag to highlight notes much as you would with a highlighter pen on paper.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="153"&gt;&amp;lt;nav&amp;gt;&lt;/td&gt;
&lt;td valign="top" width="447"&gt;Use this to designate a navigational section of a page. Great for menus.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="153"&gt;&amp;lt;section&amp;gt;&lt;/td&gt;
&lt;td valign="top" width="447"&gt;This element designates a generic section of a document. Because this tag is generic, it doesn't describe the content in the best possible way. Use the other semantic tags first and the &amp;lt;section&amp;gt; tag for misc. content.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;You can create content that is more meaningful to both humans and machines with the new semantic elements in HTML5.&lt;/p&gt;
&lt;h2&gt;&lt;font style="font-weight: bold"&gt;Today's web with standard non-semantic elements&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;Traditionally, developers have implemented &amp;lt;div&amp;gt; tags with a class attribute to define the structure and express the meaning of content. The sample code below shows a classic style HTML page with &amp;lt;div&amp;gt; elements for structure.&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: #800000"&gt;DOCTYPE&lt;/span&gt; &lt;span style="color: #ff0000"&gt;html&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;html&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;head&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;meta&lt;/span&gt; &lt;span style="color: #ff0000"&gt;charset&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="utf-8"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;title&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;HTML5 Non Semantic Elements Document Structure&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;title&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;head&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;body&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="page"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="header"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;h1&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;HTML5 Semantic Tags&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;h1&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;h2&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Demonstrating HTML5 Document Structure&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;h2&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;      &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="content"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        HTML5 is the future of the web!         &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="figures"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;   &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;img&lt;/span&gt; &lt;span style="color: #ff0000"&gt;src&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Content\Images\html5.jpg"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;height&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="200"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;width&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="200"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;             &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;sub&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;1. HTML5 Official Logo&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;sub&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        Follow &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;a&lt;/span&gt; &lt;span style="color: #ff0000"&gt;href&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="http://twitter.com/html5"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Rachel&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;a&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; and &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        HTML5 &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;a&lt;/span&gt; &lt;span style="color: #ff0000"&gt;href&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="http://twitter.com/html5"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;HTML5&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;a&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; for the latest updates on HTML5!        &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;br&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;        &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        Visit the &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;b&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;W3c Website&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;b&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; for more information on the following specs and standards as they are developed.&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ul&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;li&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;HTML5&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;li&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;li&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;ECMAScript&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;li&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;li&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;SVG&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;li&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ul&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="content"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="footer"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;HTML5 Footer&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;body&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;html&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;The above code saturates today's web, growing in popularity since around the time CSS2 (&lt;a href="http://en.wikipedia.org/wiki/Cascading_Style_Sheets#History" target="_blank"&gt;1997&lt;/a&gt;). In the era before CSS2,&amp;nbsp; the &amp;lt;table&amp;gt; tag had reigned as the de facto way to organize a web page; however, tables do little more than render boxes in a browser. While &amp;lt;div&amp;gt; elements are more expressive than &amp;lt;table&amp;gt; elements when it comes down to conveying the meaning of the contents, semantic elements have an even better way to express meaning, since that meaning is built right into the tag's name.&lt;/p&gt;
&lt;h2&gt;&lt;font style="font-weight: bold"&gt;Today's web with semantic elements&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;Now you can create documents that are more clear in their content, structure, and meaning, by using HTML5 semantic elements. Below is a rework of the same code sample as previously mentioned, but using HTML5 semantic tags instead.&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: #800000"&gt;DOCTYPE&lt;/span&gt; &lt;span style="color: #ff0000"&gt;html&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;html&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;head&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;meta&lt;/span&gt; &lt;span style="color: #ff0000"&gt;charset&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="utf-8"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;title&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;HTML5 Semantic Elements Document Structure&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;title&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;head&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;body&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;article&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;header&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;hgroup&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;                &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;h1&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;HTML5 Semantic Tags&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;h1&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;                &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;h2&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Demonstrating HTML5 Document Structure&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;h2&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;      &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;hgroup&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;time&lt;/span&gt; &lt;span style="color: #ff0000"&gt;datetime&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="2011-06-01"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;June 01, 2011&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;time&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;header&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;   &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        HTML5 is the future of the web!         &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;figure&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;   &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;img&lt;/span&gt; &lt;span style="color: #ff0000"&gt;src&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Content\Images\html5.jpg"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;height&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="200"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;width&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="200"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;figcaption&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;                Fig 1. HTML5 Official Logo&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;figcaption&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;figure&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        Follow &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;a&lt;/span&gt; &lt;span style="color: #ff0000"&gt;href&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="http://twitter.com/html5"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Rachel&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;a&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; and &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        HTML5 &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;a&lt;/span&gt; &lt;span style="color: #ff0000"&gt;href&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="http://twitter.com/html5"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;HTML5&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;a&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; for the latest updates on HTML5!        &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;br&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;        &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        Visit the &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;mark&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;W3c Website&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;mark&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; for more information on the following specs and standards as they are developed.&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ul&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;li&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;HTML5&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;li&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;li&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;ECMAScript&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;li&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;li&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;SVG&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;li&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ul&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;footer&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Article Footer&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;footer&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;article&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;     &lt;/pre&gt;&lt;!--CRLF--&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;footer&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;Document Footer&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;footer&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;body&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;html&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;As you can see, the only real structural non-semantic element is the &amp;lt;div class="page"&amp;gt;. Inside this element are many of the semantic elements listed in the table above. These elements describe an online article about HTML5 Semantic tags and document structure, including a complete figure with caption. You'll notice it's very easy to read and understand the meaning that the author has intended.&lt;/p&gt;
&lt;p&gt;Additionally, semantic and standard elements can mix in the page easily. This also means that current HTML elements won't be going away, although a few rarely used elements went up for deprecation, such as the &amp;lt;marquee&amp;gt; tag.&lt;/p&gt;
&lt;h2&gt;&lt;font style="font-weight: bold"&gt;HTML5 semantic tags &amp;amp; cross browser support&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;The most important question for developers is whether or not they can &lt;em&gt;actually use&lt;/em&gt; these new features, and if not, when. The good news is that you can use HTML5 semantic tags today because of their wide cross browser support. The browsers that don't support these elements will display them as inline content, since browsers just ignore things they don't understand and move to the next element. That means basic CSS styling can enforce a level of semantic element support, even if only for aesthetic reasons.&lt;/p&gt;
&lt;p&gt;The &lt;a href="http://samples.msdn.microsoft.com/ietestcenter" target="_blank"&gt;IE Test Center&lt;/a&gt;&amp;nbsp; web site boasts: &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;"We developed &lt;strong&gt;270 new test cases and updated 13 test cases&lt;/strong&gt; in conjunction with development of IE10 Platform Preview 2. &lt;strong&gt;The IE Testing Center now offers a total of 6668 test cases&lt;/strong&gt;. We are working closely with these two web standards organizations to submit these test cases officially within each working group’s official process." (Important numbers highlighted in bold)&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;At the test center, you can run any of these 6400+ HTML5, CSS, SVG, or other test cases that exist, and in the future, many more. Inspecting the image below from the IE Test Center illustrates current information on cross browser support for these elements.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rachelappel.com/Media/Default/Windows-Live-Writer/972f13b9fdf3_12A1E/image_2.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/972f13b9fdf3_12A1E/image_thumb.png" width="602" height="252"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;During the May 2011 update shown in the above image, Opera had the least amount of support for HTML5 semantic elements. Since then, Opera's added more support and appears that they'll continue development on semantic element support.&lt;/p&gt;
&lt;h2&gt;&lt;font style="font-weight: bold"&gt;HTML5 semantic tags and developer tools support&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;Many developer tools such as Visual Studio 2010 are providing HTML5 support to varying degrees and with that of course, HTML5 semantic element support as well. To turn on HTML5 validation for all web applications going forward in Visual Studio 2010 SP1, use the Tools-&amp;gt;Options menu item, then navigate to the Text Editor's HTML tab.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rachelappel.com/Media/Default/Windows-Live-Writer/972f13b9fdf3_12A1E/SNAGHTML3524591e.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML3524591e" border="0" alt="SNAGHTML3524591e" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/972f13b9fdf3_12A1E/SNAGHTML3524591e_thumb.png" width="604" height="353"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; You must have Service Pack 1 installed to use the HTML5 validation. Previous versions of VS2010 will only validate to HTML 4.0.1 as the default.&lt;/p&gt;
&lt;p&gt;Additionally, the new MVC3 project templates in VS2010 SP1 give you the option to use HTML5 semantic markup.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rachelappel.com/Media/Default/Windows-Live-Writer/972f13b9fdf3_12A1E/SNAGHTML35290322.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML35290322" border="0" alt="SNAGHTML35290322" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/972f13b9fdf3_12A1E/SNAGHTML35290322_thumb.png" width="504" height="455"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Selecting this checkbox will create the following HTML5 markup in the _Layout.cshtml Layout Page in the \Views\Shared folder:&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: #800000"&gt;DOCTYPE&lt;/span&gt; &lt;span style="color: #ff0000"&gt;html&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;html&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;head&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;meta&lt;/span&gt; &lt;span style="color: #ff0000"&gt;charset&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="utf-8"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;title&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;@ViewBag.Title&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;title&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;link&lt;/span&gt; &lt;span style="color: #ff0000"&gt;href&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="@Url.Content("&lt;/span&gt;~/&lt;span style="color: #ff0000"&gt;Content&lt;/span&gt;/&lt;span style="color: #ff0000"&gt;Site&lt;/span&gt;.&lt;span style="color: #ff0000"&gt;css&lt;/span&gt;&lt;span style="color: #0000ff"&gt;")"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;rel&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="stylesheet"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="text/css"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;script&lt;/span&gt; &lt;span style="color: #ff0000"&gt;src&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="@Url.Content("&lt;/span&gt;~/&lt;span style="color: #ff0000"&gt;Scripts&lt;/span&gt;/&lt;span style="color: #ff0000"&gt;jquery-1&lt;/span&gt;.&lt;span style="color: #ff0000"&gt;5&lt;/span&gt;.&lt;span style="color: #ff0000"&gt;1&lt;/span&gt;.&lt;span style="color: #ff0000"&gt;min&lt;/span&gt;.&lt;span style="color: #ff0000"&gt;js&lt;/span&gt;&lt;span style="color: #0000ff"&gt;")"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="text/javascript"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;script&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;script&lt;/span&gt; &lt;span style="color: #ff0000"&gt;src&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="@Url.Content("&lt;/span&gt;~/&lt;span style="color: #ff0000"&gt;Scripts&lt;/span&gt;/&lt;span style="color: #ff0000"&gt;modernizr-1.7.min.js&lt;/span&gt;&lt;span style="color: #0000ff"&gt;")"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="text/javascript"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;script&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;script&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;head&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;body&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="page"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;header&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="title"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;                &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;h1&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;My MVC Application&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;h1&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="logindisplay"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;                @Html.Partial("_LogOnPartial")&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;nav&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;                &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ul&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="menu"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;                    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;li&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;@Html.ActionLink("Home", "Index", "Home")&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;li&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;                    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;li&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;@Html.ActionLink("About", "About", "Home")&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;li&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;                &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ul&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;nav&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;header&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;section&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="main"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;            @RenderBody()&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;section&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;footer&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;footer&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;body&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;html&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Although the &amp;lt;div&amp;gt; shows up a few times in the page, most of it is semantic. The &amp;lt;header&amp;gt;, &amp;lt;nav&amp;gt;, &amp;lt;section&amp;gt;, and &amp;lt;footer&amp;gt; elements are added into this basic page layout template, where appropriate, making it easy to express the content's meaning. You can customize the layout and other default view templates to use more semantic elements or other &lt;a href="http://bit.ly/iGyLYq" target="_blank"&gt;new HTML5 features that Visual Studio 2010 supports&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In addition to the service pack and tools update, you can visit the MSDN Visual Studio Code Gallery online to download the &lt;em&gt;&lt;a href="http://visualstudiogallery.msdn.microsoft.com/a15c3ce9-f58f-42b7-8668-53f6cdc2cd83" target="_blank"&gt;"Visual Studio Web Standards Update"&lt;/a&gt;&lt;/em&gt; extension for Visual Studio. You can use the new tools to keep up to date with the status of HTML5 and related technologies. The Visual Studio Web Standards Update provides support for HTML5 Intellisense, the Geolocation API, and many other features.&lt;/p&gt;
&lt;p&gt;There's more information about the VS Web Standards Update, and other tools to get you moving along quickly with HTML5 development &lt;a href="http://www.rachelappel.com/html5ify-your-asp.net-mvc-3-applications" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;&lt;font style="font-weight: bold"&gt;Summary&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;Visual Studio 2010 SP1 already has some nice support for HTML5 development. As you might imagine, there will be more support and features added to Visual Studio as more of the HTML5 specs become finalized, but in the meantime, there are many NuGet packages and extensions like the VS Web Standards Update that will help you become more productive in HTML5 development now.&lt;/p&gt;
&lt;p&gt;Resources:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bit.ly/iGyLYq" target="_blank"&gt;My previous post on HTML5 support in Visual Studio 2010&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/ie/ff468705.aspx#_HTML5_Semantic_Elements" target="_blank"&gt;IE Developer center: HTML5 Semantic elements&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://ubelly.com/2010/09/how-to-use-semantic-tags-in-html5/" target="_blank"&gt;How to use semantic tags&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://bitly.com/HTML5WebCamps" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://rachelappel.com/Media/Default/Windows-Live-Writer/972f13b9fdf3_12A1E/image_5.png" width="200" height="55"&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Mon, 01 Aug 2011 16:06:41 GMT</pubDate><guid isPermaLink="true">http://www.rachelappel.com:80/use-html5-semantic-tags-to-add-new-meaning-to-your-mvc-views</guid></item></channel></rss>
