<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/" version="2.0">
    <channel>
        <title>Matthew M. Osborn</title>
        <link>http://blog.osbornm.com/Default.aspx</link>
        <description>Digital Daydream</description>
        <language>en-US</language>
        <copyright>Matthew M. Osborn</copyright>
        <generator>Subtext Version 2.1.0.5</generator>
        <image>
            <title>Matthew M. Osborn</title>
            <url>http://blog.osbornm.com/images/RSS2Image.gif</url>
            <link>http://blog.osbornm.com/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/MatthewMOsborn" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
            <title>MVC Script &amp;amp; Css Helpers</title>
            <category>MVC 2</category>
            <link>http://blog.osbornm.com/archive/2009/10/12/mvc-script-css-helpers.aspx</link>
            <description>&lt;p&gt;During development of &lt;a href="http://blog.osbornm.com/archive/2009/10/01/72.aspx"&gt;MVC 2 Preview 2&lt;/a&gt; I was lucky enough (I’m on the QA team after all) to get to code and check in a feature that I wanted to MVC Futures. In all actuality it is two separate “features” that basically do the same thing. Okay, I think I might be blowing it out of proportion they are basically two new HTML helpers “&lt;em&gt;Script&lt;/em&gt;” and “&lt;em&gt;Css&lt;/em&gt;”&lt;/p&gt;
&lt;h3&gt;The Problem:&lt;/h3&gt;
&lt;p&gt;When you add links to to files (aka Scripts and CSS) the URLs are normally relative to the current page’s URL. This means that if you have “../../Scripts/jquery-1.3.2.js” it means go up two segments then down to the scripts segment. This works great but when you start using routing the pattern starts to fall apart. By this I mean that because routes change often and don’t map nicely to folders going up two segments and down one might not get you to the right folder on all your pages. To get around this most people use app rooted paths &lt;em&gt;“~/Script/jquery-1.3.2.js&lt;/em&gt;”. The “&lt;em&gt;~&lt;/em&gt;” basically means go to the app root and then go down. However, this is not a concept that browsers understand “&lt;em&gt;~&lt;/em&gt;” is handled by the web framework in this case ASP.NET and ends up getting converted to the proper relative path before being sent to the client. Like I just said HTML has no concept of what “&lt;em&gt;~&lt;/em&gt;” means when you use it in the &lt;em&gt;href&lt;/em&gt; or &lt;em&gt;src&lt;/em&gt; of and HTML element “most” of the time the framework detects that and converts it for you. For instance ASP.NET will convert Link tags if they are in the head tag with the attribute “&lt;em&gt;runat&lt;/em&gt;” set to “server”. However other tags like Script tags will not have their paths converted. So to get around this it is best practice to use the “&lt;em&gt;Content&lt;/em&gt;” method hanging off the “&lt;em&gt;URL&lt;/em&gt;” helper which will convert an app rooted path to the correct path.&lt;/p&gt;
&lt;div style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; DISPLAY: inline; FLOAT: left; PADDING-TOP: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:aa5b1d23-6e2c-4840-87d0-c86c182576c3" class="wlWriterEditableSmartContent"&gt;
&lt;div style="BORDER-BOTTOM: #000080 1px solid; BORDER-LEFT: #000080 1px solid; FONT-FAMILY: &amp;quot;Courier New&amp;quot;, Courier, Monospace; COLOR: #000; FONT-SIZE: 10pt; BORDER-TOP: #000080 1px solid; BORDER-RIGHT: #000080 1px solid"&gt;
&lt;div style="BACKGROUND: #ddd; MAX-HEIGHT: 300px; OVERFLOW: auto"&gt;
&lt;ol style="PADDING-BOTTOM: 0px; MARGIN: 0px 0px 0px 2em; PADDING-LEFT: 5px; PADDING-RIGHT: 0px; BACKGROUND: #ffffff; PADDING-TOP: 0px"&gt;
    &lt;li&gt;&lt;span style="COLOR: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;head&lt;/span&gt; &lt;span style="COLOR: #ff0000"&gt;runat&lt;/span&gt;&lt;span style="COLOR: #0000ff"&gt;="server"&amp;gt;&lt;/span&gt;&lt;/li&gt;
    &lt;li style="BACKGROUND: #f3f3f3"&gt;    &lt;span style="COLOR: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;title&lt;/span&gt;&lt;span style="COLOR: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;asp&lt;/span&gt;&lt;span style="COLOR: #0000ff"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ContentPlaceHolder&lt;/span&gt; &lt;span style="COLOR: #ff0000"&gt;ID&lt;/span&gt;&lt;span style="COLOR: #0000ff"&gt;="TitleContent"&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;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;title&lt;/span&gt;&lt;span style="COLOR: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;
    &lt;li&gt;    &lt;span style="COLOR: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&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;/li&gt;
    &lt;li style="BACKGROUND: #f3f3f3"&gt;    &lt;span style="COLOR: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;script&lt;/span&gt; &lt;span style="COLOR: #ff0000"&gt;src&lt;/span&gt;&lt;span style="COLOR: #0000ff"&gt;="&lt;/span&gt;&lt;span style="BACKGROUND: #ffee62"&gt;&amp;lt;%&lt;/span&gt;= Url.Content("~/Scripts/jquery-1.3.2.js")&lt;span style="BACKGROUND: #ffee62"&gt;%&amp;gt;&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"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;script&lt;/span&gt;&lt;span style="COLOR: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;
    &lt;li&gt;&lt;span style="COLOR: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;head&lt;/span&gt;&lt;span style="COLOR: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3 style="PADDING-TOP: 20px"&gt;The Solution:&lt;/h3&gt;
&lt;p&gt;So you can see for yourself how this can make your code look ugly and then you have that “runat” attribute on the head tag that is some kind of left over from your web forms programming days. I soon grew very tried of copy and pasting the same tag over and over for each script and just changing the name. so I figured that the ASP.NET MVC framework had helpers for everything else so why not Scripts and CSS? So after a little bit of clever coding there is now a Script helper and a CSS helper.&lt;/p&gt;
&lt;p&gt;There are a couple of ways to use them first and the most simple to to just give it a file name or a folder that is inside the default location. For Scripts that is &lt;em&gt;“~/Scripts&lt;/em&gt;” and for CSS that is “&lt;em&gt;~/Content&lt;/em&gt;”.&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:19153eed-1aa6-475f-af51-7984fcf494c6" class="wlWriterEditableSmartContent"&gt;
&lt;div style="BORDER-BOTTOM: #000080 1px solid; BORDER-LEFT: #000080 1px solid; FONT-FAMILY: &amp;quot;Courier New&amp;quot;, Courier, Monospace; COLOR: #000; FONT-SIZE: 10pt; BORDER-TOP: #000080 1px solid; BORDER-RIGHT: #000080 1px solid"&gt;
&lt;div style="BACKGROUND: #ddd; MAX-HEIGHT: 300px; OVERFLOW: auto"&gt;
&lt;ol style="PADDING-BOTTOM: 0px; MARGIN: 0px 0px 0px 2em; PADDING-LEFT: 5px; PADDING-RIGHT: 0px; BACKGROUND: #ffffff; PADDING-TOP: 0px"&gt;
    &lt;li&gt;&lt;span style="COLOR: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;head&lt;/span&gt;&lt;span style="COLOR: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;
    &lt;li style="BACKGROUND: #f3f3f3"&gt;    &lt;span style="COLOR: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;title&lt;/span&gt;&lt;span style="COLOR: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;asp&lt;/span&gt;&lt;span style="COLOR: #0000ff"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ContentPlaceHolder&lt;/span&gt; &lt;span style="COLOR: #ff0000"&gt;ID&lt;/span&gt;&lt;span style="COLOR: #0000ff"&gt;="TitleContent"&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;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;title&lt;/span&gt;&lt;span style="COLOR: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;
    &lt;li&gt;    &lt;span style="BACKGROUND: #ffee62"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="COLOR: #0000ff"&gt;=&lt;/span&gt; Html.Css(&lt;span style="COLOR: #a31515"&gt;"BlueTheme/site.css"&lt;/span&gt;) &lt;span style="BACKGROUND: #ffee62"&gt;%&amp;gt;&lt;/span&gt;&lt;/li&gt;
    &lt;li style="BACKGROUND: #f3f3f3"&gt;    &lt;span style="BACKGROUND: #ffee62"&gt;&lt;span style="BACKGROUND: #ffee62"&gt;&amp;lt;%&lt;/span&gt;&lt;font style="BACKGROUND-COLOR: #ffffff"&gt;&lt;span style="COLOR: #0000ff"&gt;=&lt;/span&gt; Html.Script(&lt;span style="COLOR: #a31515"&gt;"jquery-1.3.2.js"&lt;/span&gt;) &lt;/font&gt;&lt;span style="BACKGROUND: #ffee62"&gt;%&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
    &lt;li&gt;&lt;span style="COLOR: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;head&lt;/span&gt;&lt;span style="COLOR: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style="PADDING-TOP: 20px"&gt;Basically there is some very simple logic that says if the path doesn’t start with “&lt;em&gt;~&lt;/em&gt;”, “&lt;em&gt;../&lt;/em&gt;”, “&lt;em&gt;HTTP&lt;/em&gt;”, or “&lt;em&gt;HTTPS&lt;/em&gt;” it is a file name or a path that is under the default folder for each type. That leads me to my next point which is that if the path you give the helper looks like you are trying to give it a full path (aka the strings mentioned above) then it will still create the nice tag for you but wont add to the file path. This means that you can use this with the &lt;a href="http://weblogs.asp.net/scottgu/archive/2009/09/15/announcing-the-microsoft-ajax-cdn.aspx"&gt;New AJAX CDN&lt;/a&gt; and still have all your script tags look the same at that top of the page. Hey call me vain but I like to have pretty code. &lt;/p&gt;
&lt;div style="PADDING-BOTTOM: 20px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; DISPLAY: inline; FLOAT: none; PADDING-TOP: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:2d72f22d-fdcc-4931-a67f-18fe55ad76b9" class="wlWriterEditableSmartContent"&gt;
&lt;div style="BORDER-BOTTOM: #000080 1px solid; BORDER-LEFT: #000080 1px solid; FONT-FAMILY: &amp;quot;Courier New&amp;quot;, Courier, Monospace; COLOR: #000; FONT-SIZE: 10pt; BORDER-TOP: #000080 1px solid; BORDER-RIGHT: #000080 1px solid"&gt;
&lt;div style="BACKGROUND: #ddd; MAX-HEIGHT: 300px; OVERFLOW: auto"&gt;
&lt;ol style="PADDING-BOTTOM: 0px; MARGIN: 0px 0px 0px 2em; PADDING-LEFT: 5px; PADDING-RIGHT: 0px; BACKGROUND: #ffffff; PADDING-TOP: 0px"&gt;
    &lt;li&gt;&lt;span style="COLOR: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;head&lt;/span&gt;&lt;span style="COLOR: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;
    &lt;li style="BACKGROUND: #f3f3f3"&gt;    &lt;span style="COLOR: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;title&lt;/span&gt;&lt;span style="COLOR: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;asp&lt;/span&gt;&lt;span style="COLOR: #0000ff"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ContentPlaceHolder&lt;/span&gt; &lt;span style="COLOR: #ff0000"&gt;ID&lt;/span&gt;&lt;span style="COLOR: #0000ff"&gt;="TitleContent"&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;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;title&lt;/span&gt;&lt;span style="COLOR: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;
    &lt;li&gt;    &lt;span style="BACKGROUND: #ffee62"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="COLOR: #0000ff"&gt;=&lt;/span&gt; Html.Css(&lt;span style="COLOR: #a31515"&gt;"~/myThemes/BlueTheme/site.css"&lt;/span&gt;) &lt;span style="BACKGROUND: #ffee62"&gt;%&amp;gt;&lt;/span&gt;&lt;/li&gt;
    &lt;li style="BACKGROUND: #f3f3f3"&gt;    &lt;span style="BACKGROUND: #ffee62"&gt;&lt;span style="BACKGROUND: #ffee62"&gt;&amp;lt;%&lt;/span&gt;&lt;font style="BACKGROUND-COLOR: #ffffff"&gt;&lt;span style="COLOR: #0000ff"&gt;=&lt;/span&gt; Html.Script("&lt;span style="COLOR: #a31515"&gt;http://ajax.microsoft.com/ajax/jquery/jquery-1.3.2.js"&lt;/span&gt;) &lt;/font&gt;&lt;span style="BACKGROUND: #ffee62"&gt;%&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
    &lt;li&gt;&lt;span style="COLOR: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;head&lt;/span&gt;&lt;span style="COLOR: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style="PADDING-TOP: 20px"&gt;However there is an extra overload that the CSS helper that allows you to pass a media type. For those unfamiliar with CSS every time you link to a StyleSheet you can add the media type attribute that allows you to specify when to apply that style. The most common use of this is to define a “&lt;em&gt;Print&lt;/em&gt;” style so when a user goes to print out part of your page the website will optimize itself for printing. If you choose not to specify a media type that style will be used for all the media that doesn’t have a StyleSheet defined for it (no media type is the helpers default).&lt;/p&gt;
&lt;div style="PADDING-BOTTOM: 20px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; DISPLAY: inline; FLOAT: none; PADDING-TOP: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:6af4025e-0f26-4d68-ba9c-a086d6c10e7e" class="wlWriterEditableSmartContent"&gt;
&lt;div style="BORDER-BOTTOM: #000080 1px solid; BORDER-LEFT: #000080 1px solid; FONT-FAMILY: &amp;quot;Courier New&amp;quot;, Courier, Monospace; COLOR: #000; FONT-SIZE: 10pt; BORDER-TOP: #000080 1px solid; BORDER-RIGHT: #000080 1px solid"&gt;
&lt;div style="BACKGROUND: #ddd; MAX-HEIGHT: 300px; OVERFLOW: auto"&gt;
&lt;ol style="PADDING-BOTTOM: 0px; MARGIN: 0px 0px 0px 2em; PADDING-LEFT: 5px; PADDING-RIGHT: 0px; BACKGROUND: #ffffff; PADDING-TOP: 0px"&gt;
    &lt;li&gt;&lt;span style="COLOR: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;head&lt;/span&gt;&lt;span style="COLOR: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;
    &lt;li style="BACKGROUND: #f3f3f3"&gt;    &lt;span style="COLOR: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;title&lt;/span&gt;&lt;span style="COLOR: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;asp&lt;/span&gt;&lt;span style="COLOR: #0000ff"&gt;:&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;ContentPlaceHolder&lt;/span&gt; &lt;span style="COLOR: #ff0000"&gt;ID&lt;/span&gt;&lt;span style="COLOR: #0000ff"&gt;="TitleContent"&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;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;title&lt;/span&gt;&lt;span style="COLOR: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;
    &lt;li&gt;    &lt;span style="BACKGROUND: #ffee62"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="COLOR: #0000ff"&gt;=&lt;/span&gt; Html.Css(&lt;span style="COLOR: #a31515"&gt;"~/myThemes/BlueTheme/site.css"&lt;/span&gt;, &lt;span style="COLOR: #a31515"&gt;"screen"&lt;/span&gt;) &lt;span style="BACKGROUND: #ffee62"&gt;%&amp;gt;&lt;/span&gt;&lt;/li&gt;
    &lt;li style="BACKGROUND: #f3f3f3"&gt;    &lt;span style="BACKGROUND: #ffee62"&gt;&lt;span style="BACKGROUND: #ffee62"&gt;&amp;lt;%&lt;/span&gt;&lt;font style="BACKGROUND-COLOR: #ffffff"&gt;&lt;span style="COLOR: #0000ff"&gt;=&lt;/span&gt; Html.Css(&lt;span style="COLOR: #a31515"&gt;"~/myThemes/BlueTheme/print.css"&lt;/span&gt;, &lt;span style="COLOR: #a31515"&gt;"print"&lt;/span&gt;) &lt;/font&gt;&lt;span style="BACKGROUND: #ffee62"&gt;%&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
    &lt;li&gt;&lt;span style="COLOR: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR: #a31515"&gt;head&lt;/span&gt;&lt;span style="COLOR: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style="PADDING-TOP: 20px"&gt;Also as I mentioned before notice that you no longer need to include the “&lt;em&gt;runat&lt;/em&gt;” attribute on the head tag. This isn’t anything special but hey it looks cleaner.&lt;/p&gt;
&lt;h3&gt;The drawback:&lt;/h3&gt;
&lt;p&gt;Okay so this solution isn’t perfect, sorry I know I got you all excited and now I’m letting you down. The problem is that Visual Studio does not know to parse these new helpers when it updates intellisense. So yes that means not intellisense, sorry! However if you followed best practice and used the URL helpers you wouldn’t have got intellisense either. Previously I found myself not using the URL helper when I was developing and then just changing it to use the URL helper after I was done and I do the same thing with the new helpers.&lt;/p&gt;
&lt;h3&gt;Conclusion:&lt;/h3&gt;
&lt;p&gt;Like I said its not perfect but its a small improvement over the way things were done before. I would love to continue to improve these and maybe even bring them into the main framework if there is enough requests for them so please let me know what you think! But be nice this is my first try at coding a “feature”. You can download MVC Futures &lt;a href="http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=33836"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blog.osbornm.com/aggbug/73.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3Rb9x9sU60EhrvGMcAYC8KS2RCI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3Rb9x9sU60EhrvGMcAYC8KS2RCI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3Rb9x9sU60EhrvGMcAYC8KS2RCI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3Rb9x9sU60EhrvGMcAYC8KS2RCI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
            <dc:creator>Matthew M. Osborn</dc:creator>
            <guid>http://blog.osbornm.com/archive/2009/10/12/mvc-script-css-helpers.aspx</guid>
            <pubDate>Tue, 13 Oct 2009 06:46:26 GMT</pubDate>
            <wfw:comment>http://blog.osbornm.com/comments/73.aspx</wfw:comment>
            <comments>http://blog.osbornm.com/archive/2009/10/12/mvc-script-css-helpers.aspx#feedback</comments>
            <slash:comments>8</slash:comments>
            <wfw:commentRss>http://blog.osbornm.com/comments/commentRss/73.aspx</wfw:commentRss>
        </item>
        <item>
            <title>ASP.NET MVC 2 Preview 2 Released</title>
            <category>MVC 2</category>
            <category>Releases</category>
            <link>http://blog.osbornm.com/archive/2009/10/01/asp.net-mvc-2-preview-2-released.aspx</link>
            <description>&lt;p&gt;I am proud to announce that ASP.NET MVC 2 Preview 2 has been released! So what are you waiting for? Go &lt;a target="_blank" href="http://go.microsoft.com/fwlink/?LinkID=154414"&gt;download it&lt;/a&gt;, its okay I’ll wait here… If you are running MVC 1.0 the good news is that just like Preview 1, Preview 2 can live side by side with it. However, as with previous preview releases, it is recommended that you uninstall Preview 1 prior to installing Preview 2. Currently there is no glamorous way of converting a MVC 1.0 project to a MVC 2 project but it is a pretty simple process and instructions can be found in the &lt;a target="_blank" href="http://go.microsoft.com/fwlink/?LinkID=157066"&gt;released notes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Okay now for some more interesting stuff, the new features that are in Preview 2. If you missed Preview 1 you can read &lt;a target="_blank" href="http://haacked.com/archive/2009/07/30/asp.net-mvc-released.aspx"&gt;Phil’s post&lt;/a&gt; to see what was in that release. &lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Single-Project Areas&lt;/strong&gt;: For those of you familiar with Multi-Project Areas from Preview one this should be a span. If not, an area is simply a way of segregating logical units of  your application. For instance, think of segmenting the blog and store in a company website. The difference now is that this can all be done inside of a single project file.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Client Side Validation&lt;/strong&gt;: Client side validation was something that the ASP.NET MVC framework was missing, well not anymore. Basically out of the box we support the ability to have nice client side validation when you annotate your model objects use Data Annotations. However, this is completely extensible and you can create your providers both for client side and server side validation.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;&lt;em&gt;ModelMetaData&lt;/em&gt;&lt;/strong&gt;: As MVC 2 started to grow in its feature set it became apparent that the ability to easily access metadata about the model was very important. So after a few rubs on the oil lamp and a chat with a genie, poof we now have and object call &lt;em&gt;ModelMetaData&lt;/em&gt; that hangs off of the &lt;em&gt;ViewDataDictionary&lt;/em&gt;. Just like client validation this is completely extensible and you have the ability to create your own provider. Out of the box we have built in functionality for Data Annotations. &lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;HTTP Verb Overrides&lt;/strong&gt;: Anyone that has worked with ASP.NET MVC for any amount of time is familiar with HTTP Verbs. Basically a HTTP Verb is a value passed to the server such as GET or POST that tell the server what the client is trying to do. However, there are several lesser known verbs like PUT and DELETE, because quite simply most browser can only use three verbs, HEAD, GET, and POST. This is not true anymore! Well at least for ASP.NET MVC 2 that is. We know allow you to override the POST verb with any of the others. Along with that we have also create some nice shortcut attributes to use when marking actions in your controller just like the &lt;em&gt;HttpPost&lt;/em&gt; one in Preview 1.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Tons of Other Stuff&lt;/strong&gt;: To try to keep this post some what short I decide to wrap some of the smaller items into one bullet point as it would take a long time to explain them all. The short of it is that there is lots of cool features, bug fixes, and some API changes in Preview 2. Some of the notable ones are new code snippets, additional default templated helpers, and a new attribute to mark an action as needing HTTPS.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So please go &lt;a target="_blank" href="http://go.microsoft.com/fwlink/?LinkID=154414"&gt;download it&lt;/a&gt;, try it out, and give us your feedback! After all that is the whole idea of releasing these previews. Also I would like to give a big thanks to everyone on the team that helped to make this a successful release! &lt;/p&gt;&lt;img src="http://blog.osbornm.com/aggbug/72.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wg6xE6F61Cuy9hOR_Je0lJaKhAk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wg6xE6F61Cuy9hOR_Je0lJaKhAk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/wg6xE6F61Cuy9hOR_Je0lJaKhAk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wg6xE6F61Cuy9hOR_Je0lJaKhAk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
            <dc:creator>Matthew M. Osborn</dc:creator>
            <guid>http://blog.osbornm.com/archive/2009/10/01/asp.net-mvc-2-preview-2-released.aspx</guid>
            <pubDate>Thu, 01 Oct 2009 07:28:00 GMT</pubDate>
            <wfw:comment>http://blog.osbornm.com/comments/72.aspx</wfw:comment>
            <comments>http://blog.osbornm.com/archive/2009/10/01/asp.net-mvc-2-preview-2-released.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blog.osbornm.com/comments/commentRss/72.aspx</wfw:commentRss>
        </item>
        <item>
            <title>We want you! If you&amp;rsquo;re a test ninja</title>
            <category>ASP .NET</category>
            <link>http://blog.osbornm.com/archive/2009/09/01/71.aspx</link>
            <description>&lt;p&gt;&lt;img style="border-right-width: 0px; margin: 0px 10px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="We Want You! If you're a test ninja" border="0" alt="We Want You! If you're a test ninja" align="left" src="http://blog.osbornm.com/Images/WewantyouIfyoureatestninja_631/we_want_you_thumb.jpg" width="211" height="271" /&gt; Okay everyone, here is the deal, the ASP.NET QA Team has a position open and we are looking for the stealthiest ninja we can find! We are looking for someone who is able to help evolve the team processes, improve our tooling, and join us in the trenches as we test one of the best technologies out there. Overall the team is responsible for ASP.NET WebForms, ASP.NET MVC, Microsoft AJAX, and a whole slew of other technologies &lt;/p&gt;  &lt;p&gt;We would like to find someone that shares our passion for our technology and our trade and someone that has spent sometime in the trenches. So if this sounds like something you’re interested in pick up your best uniform from the dry cleaner, polish your throwing stars, and visit our &lt;a href="https://careers.microsoft.com/JobDetails.aspx?jid=6745&amp;amp;lang=en" target="_blank"&gt;job posting&lt;/a&gt;. [If the job listing site is having trouble email your resume to &lt;a href="mailto:leslied@microsoft.com?subject=SDET Position"&gt;Leslie Dietz&lt;/a&gt;, our test manager, please include “SDET Position” in the subject line]&lt;/p&gt;  &lt;p&gt;FYI: If you listen to the &lt;a href="http://www.codingqa.com" target="_blank"&gt;Coding QA&lt;/a&gt; podcast you can get a good feel for what it is like being the frontline testing ninjas for ASP.NET.&lt;/p&gt;&lt;img src="http://blog.osbornm.com/aggbug/71.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/avAHt1mQ7iJD6z98RAsjL52TIsU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/avAHt1mQ7iJD6z98RAsjL52TIsU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/avAHt1mQ7iJD6z98RAsjL52TIsU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/avAHt1mQ7iJD6z98RAsjL52TIsU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
            <dc:creator>Matthew M. Osborn</dc:creator>
            <guid>http://blog.osbornm.com/archive/2009/09/01/71.aspx</guid>
            <pubDate>Tue, 01 Sep 2009 07:34:49 GMT</pubDate>
            <wfw:comment>http://blog.osbornm.com/comments/71.aspx</wfw:comment>
            <comments>http://blog.osbornm.com/archive/2009/09/01/71.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blog.osbornm.com/comments/commentRss/71.aspx</wfw:commentRss>
        </item>
        <item>
            <title>1 year, 12 months, 52 weeks, 365 days</title>
            <link>http://blog.osbornm.com/archive/2009/06/07/70.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://blog.osbornm.com/images/1yeardown24moretogo_1E1F/myOffice_2_3.jpg" rel="lightbox"&gt;&lt;img style="border-right-width: 0px; margin: 0px 10px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="myOffice_2" border="0" alt="myOffice_2" align="left" src="http://blog.osbornm.com/images/1yeardown24moretogo_1E1F/myOffice_2_thumb_3.jpg" width="244" height="164" /&gt;&lt;/a&gt; Somewhere around a year and half ago I decided that I need a change of pace in my life. I applied to Microsoft thinking that there was no harm in trying and got an interview. A little over a year ago I packed up two suite cases with some clothes, packed up my house, and got on a &lt;a href="http://blog.osbornm.com/archive/2008/05/05/the-big-blue-monster--my-move-to-redmond-wa.aspx"&gt;plane to Seattle&lt;/a&gt;. It honestly doesn’t seem &lt;a href="http://blog.osbornm.com/archive/2008/07/20/one-month--microsoft.aspx"&gt;that long ago&lt;/a&gt; that it all happened, but the following Monday morning there I was in NEO (new employee orientation).&lt;/p&gt;  &lt;p&gt;Through my year at Microsoft I have grown leaps and bounds both technically and personally. Let’s take a look back on what I have been able to do with this year.  Well the biggest thing was simply learning how to do my job. Prior to joining I had little to no experience with QA. I don’t claim to be an expert but I feel I know what I am doing now. I started off working on ASP.NET 4 and have had the opportunity to work on the web forms feature crew (anything and everything to do with web forms).  This includes the new ClientID abilities, Routing, and some SEO features.  Along with working on our product I have also been busy helping to improve &lt;a href="http://blog.osbornm.com/archive/2009/02/11/59.aspx"&gt;The Lightweight Test Automation Framework&lt;/a&gt; that our team uses for some of it’s testing.  This also includes making a public release on the &lt;a href="http://aspnet.codeplex.com/Wiki/View.aspx?title=ASP.NET%20QA"&gt;asp.net codeplex.com site&lt;/a&gt;.  Another exciting venture that I have started in my year is starting up an ASP.NET QA related podcast, &lt;a href="http://blog.osbornm.com/archive/2009/05/06/69.aspx"&gt;Coding QA&lt;/a&gt;. Coding QA is a podcast that I produce with Federico where we ramble on about everything QA related.&lt;/p&gt;  &lt;p&gt;Now on to the good stuff, the lessons learned, and let me say some of these lesson were hard learned! First, I have learned that to deliver a successful product members of a team must be aware of that team.  By this I mean that everyone should be focused on their work but they should also look out for other team members.  This could be as simple as walking over and asking someone if they could use any help when they are stressed. Basically, make sure you keep the machine well oiled. I think the biggest and best lesson that I have learned is one of our PUMs favorite things to say “Come to me with solutions not problems.” This is a simple saying but I think that it really sums up several key points. First, don’t waste time medaling on what is wrong but on what you can do to make it better.  Second, in life no one is going to help you, you need to be willing to help yourself. I know some of these are pretty deep and cheesy but like I said I have also grown personally.  &lt;/p&gt;  &lt;p&gt;Not all of my time has been spent hard at work, I have been able to have some fun along the way. I have been able to take advantage of the perks of working for a big company (company picnic and the company meeting where Rainn Wilson hosted). Also Microsoft, &lt;a href="http://blog.osbornm.com/archive/2008/10/16/techmiddoted-emea-2008.aspx"&gt;sent me to Tech·Ed EMEA&lt;/a&gt; which was in Barcelona, Spain! I have also been able to meet some many new and interesting people.&lt;/p&gt;  &lt;p&gt;When I left to come up to Seattle lots of people warning me about the “honeymoon phase.”  Meaning that while I would love the job at first, I would get bored and wore out with it shortly after.  I am very pleased to say “I TOLD YOU SO,” a year later and I still love waking up every morning and going to work. Here is too many more years to come! I’d also like to say thank you to everyone that has helped me along the way. A very special thanks go out to my family who have been extremely supportive of me even though I am thousands of miles away!&lt;/p&gt;&lt;img src="http://blog.osbornm.com/aggbug/70.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5i9oMQh-50e72D6BVo9G3hFSeXE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5i9oMQh-50e72D6BVo9G3hFSeXE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5i9oMQh-50e72D6BVo9G3hFSeXE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5i9oMQh-50e72D6BVo9G3hFSeXE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
            <dc:creator>Matthew M. Osborn</dc:creator>
            <guid>http://blog.osbornm.com/archive/2009/06/07/70.aspx</guid>
            <pubDate>Sun, 07 Jun 2009 10:02:15 GMT</pubDate>
            <wfw:comment>http://blog.osbornm.com/comments/70.aspx</wfw:comment>
            <comments>http://blog.osbornm.com/archive/2009/06/07/70.aspx#feedback</comments>
            <slash:comments>6</slash:comments>
            <wfw:commentRss>http://blog.osbornm.com/comments/commentRss/70.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Coding QA Podcast Launched!</title>
            <category>Podcast</category>
            <link>http://blog.osbornm.com/archive/2009/05/06/69.aspx</link>
            <description>&lt;p&gt;It is my pleasure to announce to you the official launch of the &lt;a href="http://www.codingqa.com/"&gt;Coding QA Podcast&lt;/a&gt;. Federico and I have been working on this for several months and have already released four shows with a fifth waiting to be edited.  &lt;a href="http://www.codingqa.com"&gt;Coding QA&lt;/a&gt; is a weekly show about testing from the trenches. Federico and I are members of the ASP.NET QA team, and in this podcast we share our views about everything that has to do with testing and our experience of being the front line testers of a web platform. This is just one of several ways the &lt;a href="http://weblogs.asp.net/asptest"&gt;QA team&lt;/a&gt; is engaging with our customers and we have received positive feedback.  So please, visit the site, &lt;a href="http://www.codingqa.com/"&gt;tune in&lt;/a&gt;, and let us know what you think. &lt;/p&gt;&lt;img src="http://blog.osbornm.com/aggbug/69.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/jy_nSwVclz2Ds-5K5tgg9P7oJZs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jy_nSwVclz2Ds-5K5tgg9P7oJZs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/jy_nSwVclz2Ds-5K5tgg9P7oJZs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jy_nSwVclz2Ds-5K5tgg9P7oJZs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
            <dc:creator>Matthew M. Osborn</dc:creator>
            <guid>http://blog.osbornm.com/archive/2009/05/06/69.aspx</guid>
            <pubDate>Wed, 06 May 2009 07:20:35 GMT</pubDate>
            <wfw:comment>http://blog.osbornm.com/comments/69.aspx</wfw:comment>
            <comments>http://blog.osbornm.com/archive/2009/05/06/69.aspx#feedback</comments>
            <wfw:commentRss>http://blog.osbornm.com/comments/commentRss/69.aspx</wfw:commentRss>
        </item>
        <item>
            <title>ASP.NET QA Podcast &amp;ndash; Episode 4</title>
            <link>http://blog.osbornm.com/archive/2009/04/13/68.aspx</link>
            <description>&lt;p&gt;&lt;font size="2"&gt;&lt;strong&gt;Download :&lt;/strong&gt; &lt;/font&gt;&lt;font size="2"&gt;&lt;a href="http://cid-b387831f07f582b4.skydrive.live.com/self.aspx/ASP.NET%20QA%20Podcast/AspNetQAPodcast4.mp3"&gt;Episode 4&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;In the fourth installment of the ASP.NET QA Podcast Federico and Matthew discuss “&lt;strong&gt;The Good&lt;/strong&gt;,” “&lt;strong&gt;The Bad&lt;/strong&gt;,” and “&lt;strong&gt;The Ugly&lt;/strong&gt;” of the history of the ASP.NET QA Team. Discussion ranges from the dark ages, to the renaissance, to the industrial revolution, to the “21st and half century”.  Join them as they discuss the lessons learned and how the team has improved over time. &lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;The team released the April update to the Lightweight Test Automation Framework. &lt;/li&gt;
    &lt;li&gt;“&lt;strong&gt;The Dark Ages&lt;/strong&gt;” ASP.NET 1.0/2.0
    &lt;ul&gt;
        &lt;li&gt;During this time the team was very focused on automating everything. &lt;/li&gt;
        &lt;li&gt;(&lt;em&gt;disadvantage&lt;/em&gt;) This approach is not good with a changing Spec. &lt;/li&gt;
        &lt;li&gt;(&lt;em&gt;disadvantage&lt;/em&gt;) Bugs were being found to late in the process. &lt;/li&gt;
        &lt;li&gt;(advantage) Excellent automation coverage. &lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;“&lt;strong&gt;The Renaissance&lt;/strong&gt;” Atlas/Microsoft Ajax
    &lt;ul&gt;
        &lt;li&gt;The division moved to a feature crew model for development and QA. &lt;/li&gt;
        &lt;li&gt;(advantage) The team adopted a heavy unit testing practice. Increase in code coverage. &lt;/li&gt;
        &lt;li&gt;(&lt;em&gt;disadvantage&lt;/em&gt;) The QA team still worked has it had before. It would automate everything is less time. &lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;“&lt;strong&gt;The Industrial Revolution&lt;/strong&gt;” ASP.NET 3.5
    &lt;ul&gt;
        &lt;li&gt;The QA team began to adopt the Feature crew model and started the process of agile testing with exploratory testing. &lt;/li&gt;
        &lt;li&gt;(&lt;em&gt;advantage&lt;/em&gt;) Bugs were being found at the beginning of the process. &lt;/li&gt;
        &lt;li&gt;(&lt;em&gt;disadvantage&lt;/em&gt;) The team still wrote a large amount of automation. &lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;“&lt;strong&gt;21st and half century&lt;/strong&gt;” ASP.NET 3.5 SP1/ASP.NET 4.0/vNext
    &lt;ul&gt;
        &lt;li&gt;The team has really started moving away from automating everything and is spending more time investigating user scenarios. &lt;/li&gt;
        &lt;li&gt;The team has formed its own unique blend of agile, scrum, and any other buzz word project management theory. &lt;/li&gt;
        &lt;li&gt;(&lt;em&gt;advantage&lt;/em&gt;) Creating and automating sample applications provides feedback for real world customer scenarios. &lt;/li&gt;
        &lt;li&gt;(&lt;em&gt;disadvantage&lt;/em&gt;) The team is young and is still learning the best practices. &lt;/li&gt;
        &lt;li&gt;(&lt;em&gt;Struggle&lt;/em&gt;) Costing has become less of a clear cut process. &lt;/li&gt;
        &lt;li&gt;(&lt;em&gt;Struggle&lt;/em&gt;) The is still a barrier between the QA and Dev teams. &lt;/li&gt;
        &lt;li&gt;(&lt;em&gt;Struggle&lt;/em&gt;) No one wants the blame when a bug is found. &lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Links from the show :&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=25887"&gt;Lightweight Test Automation Framework April Release&lt;/a&gt; &lt;/li&gt;
    &lt;li&gt;&lt;a mce_href="mailto:farmas@microsoft.com" href="mailto:farmas@microsoft.com"&gt;Federico’s Email&lt;/a&gt; &lt;/li&gt;
    &lt;li&gt;&lt;a mce_href="mailto:mosborn@microsoft.com" href="mailto:mosborn@microsoft.com"&gt;Matthew’ Email&lt;/a&gt; &lt;/li&gt;
    &lt;li&gt;&lt;a mce_href="http://weblogs.asp.net/asptest" href="http://weblogs.asp.net/asptest"&gt;ASP.NET QA Team Blog&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://blog.osbornm.com/aggbug/68.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/hLvXe_GEZXgytRuPqPuY_7rcZEs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hLvXe_GEZXgytRuPqPuY_7rcZEs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/hLvXe_GEZXgytRuPqPuY_7rcZEs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hLvXe_GEZXgytRuPqPuY_7rcZEs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
            <dc:creator>Matthew M. Osborn</dc:creator>
            <guid>http://blog.osbornm.com/archive/2009/04/13/68.aspx</guid>
            <pubDate>Mon, 13 Apr 2009 21:56:29 GMT</pubDate>
            <wfw:comment>http://blog.osbornm.com/comments/68.aspx</wfw:comment>
            <comments>http://blog.osbornm.com/archive/2009/04/13/68.aspx#feedback</comments>
            <wfw:commentRss>http://blog.osbornm.com/comments/commentRss/68.aspx</wfw:commentRss>
            <enclosure url="http://media.libsyn.com/media/aspnetqa/CodingQAPodcast4.mp3" length="12869429" type="audio/mpeg" />
        </item>
        <item>
            <title>Lightweight Test Automation Framework April Release</title>
            <category>Lightweight Test Automation Framework</category>
            <link>http://blog.osbornm.com/archive/2009/04/09/67.aspx</link>
            <description>&lt;p&gt;The April release of the Lightweight Test Automation Framework for ASP.NET has just been posted and you can download it &lt;a title="April Update" href="http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=25887"&gt;here&lt;/a&gt;. For this release, the team has worked hard to include the following bug fixes and new features. Please continue to give us your feedback as many of the fixes and features are based what we have heard from the community.&lt;/p&gt;
&lt;h3&gt;Improvements to the user interface&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;
    &lt;div align="left"&gt;A new look has been given to the test name when it passes or fails.  There is both color and visual queues that indicate weather a test has passed or failed.  Failed test names also appear slightly larger to help them stand out. &lt;/div&gt;
    &lt;/li&gt;
    &lt;li&gt;
    &lt;div align="left"&gt;There is now a “Run Failed Tests” button. This button will open a new browser window that will select and run only the failed tests, for easy verification of fixes. &lt;/div&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;img style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN-LEFT: 0px; BORDER-LEFT-WIDTH: 0px; MARGIN-RIGHT: 0px" title="NewUI2" border="0" alt="NewUI2" align="left" width="504" height="363" src="http://blog.osbornm.com/images/886b4c04d3f6_86CC/NewUI2.png" /&gt; &lt;br style="CLEAR: both" /&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3&gt;The ability to automate popup windows&lt;/h3&gt;
&lt;p&gt;In previous versions of the framework there was no way to verify the contents of a popup window.  With this release we have far better support for opening and verifying the contents of popup windows.&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="COLOR: #2b91af"&gt;HtmlPage &lt;/span&gt;page = &lt;span style="COLOR: blue"&gt;new &lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;HtmlPage&lt;/span&gt;(&lt;span style="COLOR: #a31515"&gt;"MyPage.aspx"&lt;/span&gt;);
page.Elements.Find(&lt;span style="COLOR: #a31515"&gt;"OpenPopup"&lt;/span&gt;).Click();
&lt;span style="COLOR: green"&gt;// get popup window
&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;HtmlPage &lt;/span&gt;popup = page.GetPopupWindow(1);
&lt;span style="COLOR: green"&gt;// verify title of popup
&lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;Assert&lt;/span&gt;.AreEqual(&lt;span style="COLOR: #a31515"&gt;"This is the Popup Page"&lt;/span&gt;, popup.Elements.Find(&lt;span style="COLOR: #a31515"&gt;"h1"&lt;/span&gt;, 0).GetInnerText());&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;The GetPopupWindow method returns a HtmlPage object that is representative of the window at that index.  This is pulled from the collection that is maintained by the framework with index zero being the main, or starting, window. In this example index zero is MyPage.aspx, while index one is the popup window.  &lt;/p&gt;
&lt;h3&gt;The ability to find elements by partial attribute values&lt;/h3&gt;
&lt;p&gt;In previous versions of the framework when finding elements on a page you could only use the ID attribute to match against.  So if you wanted to match all the elements that had a CSS class applied to them, as is common in jQuery, you had to supply that whole value for the class attribute.  So, in previous versions of the framework if you wanted to find elements that had a CSS class applied to them you had to specify the whole value for the class attribute.  Meaning that if the element has more than only class and you search based on only one class that element would not be returned.  Now you have the ability to match based on any part of the value for the attribute. Below is an example of how to find elements that have the CSS Class “blue” applied to them.&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="COLOR: #2b91af"&gt;HtmlElementFindParams &lt;/span&gt;find = &lt;span style="COLOR: blue"&gt;new &lt;/span&gt;&lt;span style="COLOR: #2b91af"&gt;HtmlElementFindParams&lt;/span&gt;();
find.Attributes.Add(&lt;span style="COLOR: #a31515"&gt;"class"&lt;/span&gt;, &lt;span style="COLOR: #a31515"&gt;"blue"&lt;/span&gt;, &lt;span style="COLOR: #2b91af"&gt;MatchMethod&lt;/span&gt;.Contains);
&lt;span style="COLOR: #2b91af"&gt;ReadOnlyCollection&lt;/span&gt;&amp;lt;&lt;span style="COLOR: #2b91af"&gt;HtmlElement&lt;/span&gt;&amp;gt; elements = page.Elements.FindAll(find);&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;h3&gt;Assembly name change&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;The assembly name has been changed from “&lt;em&gt;Microsoft.Web.Testing.Light&lt;/em&gt;” to “&lt;em&gt;Microsoft.Web.Testing.Lightweight.&lt;/em&gt;” The namespaces have not changed. &lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://blog.osbornm.com/aggbug/67.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/m6HV-nm1bAQFjNvCKZRREB4PSHU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/m6HV-nm1bAQFjNvCKZRREB4PSHU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/m6HV-nm1bAQFjNvCKZRREB4PSHU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/m6HV-nm1bAQFjNvCKZRREB4PSHU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
            <dc:creator>Matthew M. Osborn</dc:creator>
            <guid>http://blog.osbornm.com/archive/2009/04/09/67.aspx</guid>
            <pubDate>Thu, 09 Apr 2009 19:10:50 GMT</pubDate>
            <wfw:comment>http://blog.osbornm.com/comments/67.aspx</wfw:comment>
            <comments>http://blog.osbornm.com/archive/2009/04/09/67.aspx#feedback</comments>
            <wfw:commentRss>http://blog.osbornm.com/comments/commentRss/67.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Podcast Playlist</title>
            <category>Code Tips &amp; Tricks</category>
            <link>http://blog.osbornm.com/archive/2009/04/07/66.aspx</link>
            <description>&lt;p&gt;Each day my commute takes anywhere from 45 minutes to 1 hour depending on the traffic and if I ride the bus.  About a year ago, I decided to make the most of the stop and go traffic and start listening to podcasts in hopes that I might learn a thing or two. Most people at work know that I am an avid podcast listener and always ask me for my favorites, so I figured I would compile a list of my top tech/geek podcasts.&lt;/p&gt;
&lt;table id="podcasts" class="zebraTable"&gt;
    &lt;thead&gt;
        &lt;tr&gt;
            &lt;th class="rating"&gt;Rating * &lt;/th&gt;
            &lt;th class="name"&gt;Name &lt;/th&gt;
            &lt;th class="genre"&gt;Type &lt;/th&gt;
        &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td class="rating"&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;/td&gt;
            &lt;td class="name"&gt;&lt;a href="http://www.pwop.com/feed.aspx?show=dotnetrocks&amp;amp;filetype=master"&gt;&lt;img title="badge_rss" border="0" alt="subscribe" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/badge_rss.png" /&gt;&lt;/a&gt; .NET Rocks &lt;/td&gt;
            &lt;td class="genre"&gt;Code/Interview&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="rating"&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;/td&gt;
            &lt;td class="name"&gt;&lt;a href="http://feeds.feedburner.com/altnetpodcast"&gt;&lt;img title="badge_rss" border="0" alt="subscribe" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/badge_rss.png" /&gt;&lt;/a&gt; Alt.NET &lt;/td&gt;
            &lt;td class="genre"&gt;Code&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="rating"&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;/td&gt;
            &lt;td class="name"&gt;&lt;a href="http://www.researchchannel.org/podcasts/dynamic_rc.aspx?fid=1806&amp;amp;type=2"&gt;&lt;img title="badge_rss" border="0" alt="subscribe" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/badge_rss.png" /&gt;&lt;/a&gt; Behind the Code &lt;/td&gt;
            &lt;td class="genre"&gt;Code/Interview&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="rating"&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;/td&gt;
            &lt;td class="name"&gt;&lt;a href="http://blog.stackoverflow.com/index.php?feed=podcast"&gt;&lt;img title="badge_rss" border="0" alt="subscribe" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/badge_rss.png" /&gt;&lt;/a&gt; StackOverFlow &lt;/td&gt;
            &lt;td class="genre"&gt;Code&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="rating"&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;/td&gt;
            &lt;td class="name"&gt;&lt;a href="http://feeds.feedburner.com/boagworldpodcast/"&gt;&lt;img title="badge_rss" border="0" alt="subscribe" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/badge_rss.png" /&gt;&lt;/a&gt; Boagworld&lt;/td&gt;
            &lt;td class="genre"&gt;Web Design&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="rating"&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;/td&gt;
            &lt;td class="name"&gt;&lt;a href="http://channel9.msdn.com/Feeds/RSS/"&gt;&lt;img title="badge_rss" border="0" alt="subscribe" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/badge_rss.png" /&gt;&lt;/a&gt; Channel 9 &lt;/td&gt;
            &lt;td class="genre"&gt;Code/Interview&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="rating"&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;/td&gt;
            &lt;td class="name"&gt;&lt;a href="http://on10.net/Feeds/RSS/"&gt;&lt;img title="badge_rss" border="0" alt="subscribe" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/badge_rss.png" /&gt;&lt;/a&gt; Channel 10 &lt;/td&gt;
            &lt;td class="genre"&gt;Interview/Misc&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="rating"&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;/td&gt;
            &lt;td class="name"&gt;&lt;a href="http://feeds2.feedburner.com/elegantcodecast"&gt;&lt;img title="badge_rss" border="0" alt="subscribe" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/badge_rss.png" /&gt;&lt;/a&gt; Elegant Code &lt;/td&gt;
            &lt;td class="genre"&gt;Code&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="rating"&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;/td&gt;
            &lt;td class="name"&gt;&lt;a href="http://feeds.feedburner.com/GoogleDeveloperPodcast"&gt;&lt;img title="badge_rss" border="0" alt="subscribe" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/badge_rss.png" /&gt;&lt;/a&gt; Google Developer Podcast &lt;/td&gt;
            &lt;td class="genre"&gt;Code&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="rating"&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;/td&gt;
            &lt;td class="name"&gt;&lt;a href="http://feeds.feedburner.com/HanselminutesCompleteMP3"&gt;&lt;img title="badge_rss" border="0" alt="subscribe" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/badge_rss.png" /&gt;&lt;/a&gt; Hanselminutes &lt;/td&gt;
            &lt;td class="genre"&gt;Code/Interview&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="rating"&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;/td&gt;
            &lt;td class="name"&gt;&lt;a href="http://herdingcode.com/?feed=rss2"&gt;&lt;img title="badge_rss" border="0" alt="subscribe" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/badge_rss.png" /&gt;&lt;/a&gt; Herding Code &lt;/td&gt;
            &lt;td class="genre"&gt;Code&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="rating"&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;/td&gt;
            &lt;td class="name"&gt;&lt;a href="http://pixel8.infragistics.com/podcast/feed"&gt;&lt;img title="badge_rss" border="0" alt="subscribe" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/badge_rss.png" /&gt;&lt;/a&gt; Pixel8 &lt;/td&gt;
            &lt;td class="genre"&gt;Code/Interview&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="rating"&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;/td&gt;
            &lt;td class="name"&gt;&lt;a href="http://feeds.feedburner.com/rubyonrailspodcast"&gt;&lt;img title="badge_rss" border="0" alt="subscribe" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/badge_rss.png" /&gt;&lt;/a&gt; Ruby on Rails Podcast &lt;/td&gt;
            &lt;td class="genre"&gt;Code&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="rating"&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;/td&gt;
            &lt;td class="name"&gt;&lt;a href="http://revision3.com/systm/feed/quicktime-high-definition/"&gt;&lt;img title="badge_rss" border="0" alt="subscribe" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/badge_rss.png" /&gt;&lt;/a&gt; System &lt;/td&gt;
            &lt;td class="genre"&gt;Hardware/Geek&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="rating"&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;/td&gt;
            &lt;td class="name"&gt;&lt;a href="http://therissingtonpodcast.co.uk/feedmemp3"&gt;&lt;img title="badge_rss" border="0" alt="subscribe" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/badge_rss.png" /&gt;&lt;/a&gt; The Rissington Podcast &lt;/td&gt;
            &lt;td class="genre"&gt;Web Design&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="rating"&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;/td&gt;
            &lt;td class="name"&gt;&lt;a href="http://leoville.tv/podcasts/twit.xml"&gt;&lt;img title="badge_rss" border="0" alt="subscribe" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/badge_rss.png" /&gt;&lt;/a&gt; This Week in Tech (twit) &lt;/td&gt;
            &lt;td class="genre"&gt;Geek&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="rating"&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;/td&gt;
            &lt;td class="name"&gt;&lt;a href="http://revision3.com/pixelperfect/#subscribe"&gt;&lt;img title="badge_rss" border="0" alt="subscribe" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/badge_rss.png" /&gt;&lt;/a&gt; Pixel Perfect &lt;/td&gt;
            &lt;td class="genre"&gt;Photoshop&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td class="rating"&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt;&lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;img class="ratingstar" title="star" border="0" alt="star" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/star.png" /&gt; &lt;/td&gt;
            &lt;td class="name"&gt;&lt;a href="http://codingqa.com/rss"&gt;&lt;img title="badge_rss" border="0" alt="subscribe" width="16" height="16" src="http://blog.osbornm.com/images/PodcastPlaylist_1315D/badge_rss.png" /&gt;&lt;/a&gt; Coding QA Podcast &lt;/td&gt;
            &lt;td class="genre"&gt;Code/QA&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;span&gt;&lt;font color="#c0c0c0" size="1"&gt;* Based on the frequency I listien to them and overall content&lt;/font&gt;&lt;/span&gt;&lt;img src="http://blog.osbornm.com/aggbug/66.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/V7U_PmoyPLuZEsHn3nIZHZb-FYc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/V7U_PmoyPLuZEsHn3nIZHZb-FYc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/V7U_PmoyPLuZEsHn3nIZHZb-FYc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/V7U_PmoyPLuZEsHn3nIZHZb-FYc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
            <dc:creator>Matthew M. Osborn</dc:creator>
            <guid>http://blog.osbornm.com/archive/2009/04/07/66.aspx</guid>
            <pubDate>Wed, 08 Apr 2009 06:22:00 GMT</pubDate>
            <wfw:comment>http://blog.osbornm.com/comments/66.aspx</wfw:comment>
            <comments>http://blog.osbornm.com/archive/2009/04/07/66.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blog.osbornm.com/comments/commentRss/66.aspx</wfw:commentRss>
        </item>
        <item>
            <title>ASP.NET QA Podcast &amp;ndash; Episode 3</title>
            <category>ASP .NET</category>
            <category>Podcast</category>
            <link>http://blog.osbornm.com/archive/2009/03/31/64.aspx</link>
            <description>&lt;p&gt;&lt;font size="2"&gt;&lt;strong&gt;Download :&lt;/strong&gt; &lt;/font&gt;&lt;font size="2"&gt;&lt;a href="http://cid-b387831f07f582b4.skydrive.live.com/self.aspx/ASP.NET%20QA%20Podcast/AspNetQAPodcast3%7C_Small.mp3"&gt;Episode 3&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;In the third installment of the ASP.NET QA Podcast Federico and Matthew interview Mark Berryman, a test lead on the ASP.NET QA Team.  Join them as they learn the ins and outs of test management through Mark’s eyes. &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Release of the Mobile Browser Database by Live Dublin. &lt;/li&gt;    &lt;li&gt;April refresh of the Lightweight Test Automation Framework. &lt;/li&gt;    &lt;li&gt;Interview with Mark Berryman.      &lt;ul&gt;       &lt;li&gt;What is the difference between Test Manager and Test Lead. &lt;/li&gt;        &lt;li&gt;A little history of Mark and how he came to join the ASP.NET QA team. &lt;/li&gt;        &lt;li&gt;Responsibilities of a Test Lead / What Mark is working on. &lt;/li&gt;        &lt;li&gt;What Mark looks for in a tester on his team. &lt;/li&gt;        &lt;li&gt;Challenges Mark faced when he was an IC (individual Contributor). &lt;/li&gt;        &lt;li&gt;What Mark would change on items he has tested in the past. &lt;/li&gt;        &lt;li&gt;How Mark Manages risk on his team. &lt;/li&gt;        &lt;li&gt;Who is Marks favorite person in the whole world. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Links from the show :&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://mdbf.codeplex.com/"&gt;Mobile Browser Database&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="mailto:farmas@microsoft.com"&gt;Federico’s Email&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="mailto:mosborn@microsoft.com"&gt;Matthew’ Email&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://weblogs.asp.net/asptest"&gt;ASP.NET QA Team Blog&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blog.osbornm.com/aggbug/64.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Uly89b7Cbu3qaUCJMexxS-tur1A/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Uly89b7Cbu3qaUCJMexxS-tur1A/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Uly89b7Cbu3qaUCJMexxS-tur1A/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Uly89b7Cbu3qaUCJMexxS-tur1A/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
            <dc:creator>Matthew M. Osborn</dc:creator>
            <guid>http://blog.osbornm.com/archive/2009/03/31/64.aspx</guid>
            <pubDate>Tue, 31 Mar 2009 23:08:59 GMT</pubDate>
            <wfw:comment>http://blog.osbornm.com/comments/64.aspx</wfw:comment>
            <comments>http://blog.osbornm.com/archive/2009/03/31/64.aspx#feedback</comments>
            <wfw:commentRss>http://blog.osbornm.com/comments/commentRss/64.aspx</wfw:commentRss>
        </item>
        <item>
            <title>ASP.NET QA Podcast &amp;ndash; Episode 2</title>
            <link>http://blog.osbornm.com/archive/2009/03/20/63.aspx</link>
            <description>&lt;p&gt;In the second installment of the ASP.NET QA Podcast Federico and Matthew discuss MIX 09 announcements and the ins and outs of supporting various browser versions on the ASP.NET QA team.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;MIX 09 Conference announcements      &lt;ul&gt;       &lt;li&gt;MVC RTM 1.0 &lt;/li&gt;        &lt;li&gt;Silverlight 3.0 &lt;/li&gt;        &lt;li&gt;Web Application Installer &lt;/li&gt;        &lt;li&gt;Web Application Gallery &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;What browsers the team tests on and how they decided which browsers to test. &lt;/li&gt;    &lt;li&gt;What it means when the team says they support a browser. &lt;/li&gt;    &lt;li&gt;How the team manages the risk of not testing on every possible browser. &lt;/li&gt;    &lt;li&gt;The timeline for testing features on multiple browsers. &lt;/li&gt;    &lt;li&gt;The infrastructure the team has to test on multiple browsers. &lt;/li&gt;    &lt;li&gt;How the team keeps up with the fast growing browser market, such as the release of four major browsers in just a few months. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Links from the show :&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=53289097-73ce-43bf-b6a6-35e00103cb4b&amp;amp;displaylang=en"&gt;ASP.NET MVC RTM 1.0&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://silverlight.net/getstarted/silverlight3/default.aspx"&gt;Silverlight 3.0&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/web/downloads/platform.aspx"&gt;Web application installer&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/web/gallery/"&gt;Web application gallery&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="mailto:farmas@microsoft.com"&gt;Federico’s Email&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="mailto:mosborn@microsoft.com"&gt;Matthew’ Email&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://weblogs.asp.net/asptest"&gt;ASP.NET QA Team Blog&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;strong&gt;Download :&lt;/strong&gt; &lt;/font&gt;&lt;a title="ASP.NET QA Podcast - Episode 1" href="http://cid-b387831f07f582b4.skydrive.live.com/self.aspx/ASP.NET%20QA%20Podcast/AspNetQAPodcast2%7C_Small.mp3"&gt;&lt;font size="2"&gt;Episode 2&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blog.osbornm.com/aggbug/63.aspx" width="1" height="1" /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/sPFX3qcmXWnWx813rGpGcoYeQqc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sPFX3qcmXWnWx813rGpGcoYeQqc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/sPFX3qcmXWnWx813rGpGcoYeQqc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sPFX3qcmXWnWx813rGpGcoYeQqc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
            <dc:creator>Matthew M. Osborn</dc:creator>
            <guid>http://blog.osbornm.com/archive/2009/03/20/63.aspx</guid>
            <pubDate>Fri, 20 Mar 2009 18:52:26 GMT</pubDate>
            <wfw:comment>http://blog.osbornm.com/comments/63.aspx</wfw:comment>
            <comments>http://blog.osbornm.com/archive/2009/03/20/63.aspx#feedback</comments>
            <wfw:commentRss>http://blog.osbornm.com/comments/commentRss/63.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>
