<?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:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Jon Galloway</title><link>http://weblogs.asp.net/jgalloway/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/jongalloway" /><feedburner:info uri="jongalloway" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><media:category scheme="http://www.itunes.com/dtds/podcast-1.0.dtd">Technology/Tech News</media:category><itunes:explicit>no</itunes:explicit><itunes:subtitle></itunes:subtitle><itunes:category text="Technology"><itunes:category text="Tech News" /></itunes:category><geo:lat>32.761801</geo:lat><geo:long>-117.012737</geo:long><creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.0/</creativeCommons:license><image><url>http://farm1.static.flickr.com/175/buddyicons/36836555@N00.jpg?1169797019</url><title>Jon Galloway</title></image><feedburner:emailServiceId>jongalloway</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item><title>Interesting Things Circa March 2013</title><link>http://feedproxy.google.com/~r/jongalloway/~3/3imS-0v9lKw/interesting-things-circa-march-2013.aspx</link><pubDate>Thu, 28 Mar 2013 00:31:57 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:10060626</guid><dc:creator>Jon Galloway</dc:creator><slash:comments>7</slash:comments><wfw:commentRss>http://weblogs.asp.net/jgalloway/rsscomments.aspx?PostID=10060626</wfw:commentRss><comments>http://weblogs.asp.net/jgalloway/archive/2013/03/27/interesting-things-circa-march-2013.aspx#comments</comments><description>&lt;p&gt;Back in 2008 I had a blog series going where I did occasional blog post / news recaps with lists of interesting things. (Fun note: I ran that using &lt;a href="http://en.wikipedia.org/wiki/Ma.gnolia"&gt;ma.gnolia.com&lt;/a&gt; and stopped around the same time, but not necessarily because, they bit the dust.). I used that to post interesting things I'd been reading about, and given unlimited time would write long, insightful blog posts about. &lt;/p&gt;  &lt;p&gt;I've noticed lately that I've been declaring browser tab bankruptcy quite often, and that these interesting things deserved a home. Around that same time, I've started enjoying &lt;a href="http://www.hanselman.com/blog/CategoryView.aspx?category=Newsletter"&gt;Scott Hanselman's fun, &amp;quot;no worries, have some links!&amp;quot; style newsletter posts&lt;/a&gt; lately. So, for an unspecified amount of time, I am reinstituting the &amp;quot;here's some neat stuff&amp;quot; series. I will intend to follow up with long, insightful posts about some of these things, but probably will not. On with the show!&lt;/p&gt;  &lt;h2&gt;Working from home&lt;/h2&gt;  &lt;p&gt;Yahoo recently required remote employees to stop being remote or stop being employees. As a remote employee since 2005, I can definitely see both sides. It works for some companies, some employee, and some roles. When it's good it's great, but I've seen it abused.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://techcrunch.com/2013/02/27/mayers-means/"&gt;http://techcrunch.com/2013/02/27/mayers-means/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="http://blog.penelopetrunk.com/2013/02/27/yahoo-kills-telecommuting-three-cheers-for-marissa-mayer/" href="http://blog.penelopetrunk.com/2013/02/27/yahoo-kills-telecommuting-three-cheers-for-marissa-mayer/"&gt;http://blog.penelopetrunk.com/2013/02/27/yahoo-kills-telecommuting-three-cheers-for-marissa-mayer/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="http://www.bobcowherd.com/2013/03/managing-remote-teams.html" href="http://www.bobcowherd.com/2013/03/managing-remote-teams.html"&gt;http://www.bobcowherd.com/2013/03/managing-remote-teams.html&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.hanselman.com/blog/BeingARemoteWorkerSucksLongLiveTheRemoteWorker.aspx"&gt;http://www.hanselman.com/blog/BeingARemoteWorkerSucksLongLiveTheRemoteWorker.aspx&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.cnn.com/2013/03/02/opinion/weinberger-work-from-home/"&gt;http://www.cnn.com/2013/03/02/opinion/weinberger-work-from-home/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.businessinsider.com/how-marissa-mayer-figured-out-work-at-home-yahoos-were-slacking-off-2013-3?0=sai"&gt;http://www.businessinsider.com/how-marissa-mayer-figured-out-work-at-home-yahoos-were-slacking-off-2013-3?0=sai&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://news.ycombinator.com/item?id=5267030"&gt;http://news.ycombinator.com/item?id=5267030&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Goodbye Google Reader, what's ahead for RSS?&lt;/h2&gt;  &lt;p&gt;Google announced they're shutting down Google Reader. I used to follow 1500+ individual RSS feeds (actually read them all), but lately haven't quite so much. Still, sad to see this go and hope those who predict this will help rather than exterminate RSS as a technology are right.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.theverge.com/2013/3/14/4105006/why-rss-still-matters"&gt;http://www.theverge.com/2013/3/14/4105006/why-rss-still-matters&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://inessential.com/2013/03/14/why_i_love_rss_and_you_do_too"&gt;http://inessential.com/2013/03/14/why_i_love_rss_and_you_do_too&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.marco.org/2013/03/19/free-works"&gt;http://www.marco.org/2013/03/19/free-works&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="http://www.marco.org/2013/03/26/power-of-rss" href="http://www.marco.org/2013/03/26/power-of-rss"&gt;http://www.marco.org/2013/03/26/power-of-rss&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://brianbailey.me/the-world-wide-web-is-moving-to-aol"&gt;http://brianbailey.me/the-world-wide-web-is-moving-to-aol&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="http://code.google.com/p/pubsubhubbub/" href="http://code.google.com/p/pubsubhubbub/"&gt;http://code.google.com/p/pubsubhubbub/&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Glimpse 1.0 Ships&lt;/h2&gt;  &lt;p&gt;Glimpse is a great web debugging aid which provides in-browser information about what's happening on the server. They recently released versions 1.0 and 1.1. We interviewed them on Herding Code in February.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a title="http://blog.getglimpse.com/2013/02/20/glimpse-1-0-ships/" href="http://blog.getglimpse.com/2013/02/20/glimpse-1-0-ships/"&gt;http://blog.getglimpse.com/2013/02/20/glimpse-1-0-ships/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="http://blog.getglimpse.com/2013/03/04/glimpse-on-channel-9/" href="http://blog.getglimpse.com/2013/03/04/glimpse-on-channel-9/"&gt;http://blog.getglimpse.com/2013/03/04/glimpse-on-channel-9/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="http://blog.getglimpse.com/2013/03/19/glimpse-1-1-released-with-support-for-mvc-4/" href="http://blog.getglimpse.com/2013/03/19/glimpse-1-1-released-with-support-for-mvc-4/"&gt;http://blog.getglimpse.com/2013/03/19/glimpse-1-1-released-with-support-for-mvc-4/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="http://herdingcode.com/?p=519" href="http://herdingcode.com/?p=519"&gt;http://herdingcode.com/?p=519&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Semantic Release Notes&lt;/h2&gt;  &lt;p&gt;The Glimpse developers also just released the Semantic Release Notes proposal: &lt;em&gt;Semantic Release Notes (SRN) is a text-to-object-to-html conversion tool for application authors. SRN specifically aims to produce semantic &lt;strong&gt;release notes&lt;/strong&gt; from a Markdown document. This allows authors to write using an easy-to-read, easy-to-write plain text document, convert it to a structured data format (typically JSON or XML) and from this format, convert it into any styled representation (typically html) or to consume the information programatically within 3rd party applications. &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.semanticreleasenotes.org/" href="http://www.semanticreleasenotes.org/"&gt;http://www.semanticreleasenotes.org/&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;scriptcs - Living on the edge in C# without a project on the wings of Roslyn and NuGet&lt;/h2&gt;  &lt;p&gt;Glenn Block and friends have spun up a neat project which allows you to &lt;em&gt;write .NET apps with your favorite text editor, NuGet and the power of &lt;/em&gt;&lt;a href="http://msdn.microsoft.com/en-us/vstudio/roslyn.aspx"&gt;&lt;em&gt;Roslyn!&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a title="http://codebetter.com/glennblock/2013/02/28/scriptcs-living-on-the-edge-in-c-without-a-project-on-the-wings-of-roslyn-and-nuget/" href="http://codebetter.com/glennblock/2013/02/28/scriptcs-living-on-the-edge-in-c-without-a-project-on-the-wings-of-roslyn-and-nuget/"&gt;http://codebetter.com/glennblock/2013/02/28/scriptcs-living-on-the-edge-in-c-without-a-project-on-the-wings-of-roslyn-and-nuget/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="http://scriptcs.net/" href="http://scriptcs.net/"&gt;http://scriptcs.net/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="https://github.com/scriptcs/scriptcs" href="https://github.com/scriptcs/scriptcs"&gt;https://github.com/scriptcs/scriptcs&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="https://github.com/scriptcs/scriptcs-samples" href="https://github.com/scriptcs/scriptcs-samples"&gt;https://github.com/scriptcs/scriptcs-samples&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="https://twitter.com/scriptcsnet" href="https://twitter.com/scriptcsnet"&gt;https://twitter.com/scriptcsnet&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;CoffeeScript releases&lt;/h2&gt;  &lt;p&gt;Some cool new features in the recent CoffeeScript releases, including Literate CoffeeScript and Source Maps support.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a title="http://coffeescript.org/#changelog" href="http://coffeescript.org/#changelog"&gt;http://coffeescript.org/#changelog&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="http://coffeescript.org/#literate" href="http://coffeescript.org/#literate"&gt;http://coffeescript.org/#literate&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="http://coffeescript.org/#source-maps" href="http://coffeescript.org/#source-maps"&gt;http://coffeescript.org/#source-maps&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Icon Fonts and SVG&lt;/h2&gt;  &lt;p&gt;As a long time fan of replacing web bitmap images (gif, jpg, png) with vector based formats when possible, I've been happy to see both the emergence of icon fonts as well as renewed interest in SVG for high-DPI display support.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a title="http://www.css-tricks.com/examples/IconFont/" href="http://www.css-tricks.com/examples/IconFont/"&gt;http://www.css-tricks.com/examples/IconFont/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="http://css-tricks.com/flat-icons-icon-fonts/" href="http://css-tricks.com/flat-icons-icon-fonts/"&gt;http://css-tricks.com/flat-icons-icon-fonts/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://fortawesome.github.com/Font-Awesome/"&gt;Font Awesome: The iconic font designed for use with Twitter Bootstrap&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://fontello.com/"&gt;Fontello - icon fonts generator&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blog.fogcreek.com/trello-uses-an-icon-font-and-so-can-you/"&gt;Trello uses an icon font and so can you!&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.webdesignerdepot.com/2012/01/how-to-make-your-own-icon-webfont/"&gt;How to make your own icon webfont&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://intridea.github.com/stately/"&gt;http://intridea.github.com/stately/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="http://kristerkari.github.com/adventures-in-webkit-land/blog/2013/03/08/dealing-with-svg-images-in-mobile-browsers/" href="http://kristerkari.github.com/adventures-in-webkit-land/blog/2013/03/08/dealing-with-svg-images-in-mobile-browsers/"&gt;http://kristerkari.github.com/adventures-in-webkit-land/blog/2013/03/08/dealing-with-svg-images-in-mobile-browsers/&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Angular, Ember, brain hurt&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://odetocode.com/blogs/scott/archive/2013/02/26/why-use-angularjs.aspx"&gt;http://odetocode.com/blogs/scott/archive/2013/02/26/why-use-angularjs.aspx&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.yearofmoo.com/2012/10/more-angularjs-magic-to-supercharge-your-webapp.html#apply-digest-and-phase"&gt;http://www.yearofmoo.com/2012/10/more-angularjs-magic-to-supercharge-your-webapp.html#apply-digest-and-phase&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://madskristensen.net/post/AngularJS-Intellisense-in-Visual-Studio-2012.aspx"&gt;http://madskristensen.net/post/AngularJS-Intellisense-in-Visual-Studio-2012.aspx&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="http://wekeroad.com/2013/03/06/ember-confuses-me" href="http://wekeroad.com/2013/03/06/ember-confuses-me"&gt;http://wekeroad.com/2013/03/06/ember-confuses-me&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="http://wekeroad.com/2013/03/20/ember-baby-steps" href="http://wekeroad.com/2013/03/20/ember-baby-steps"&gt;http://wekeroad.com/2013/03/20/ember-baby-steps&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="http://www.thesoftwaresimpleton.com/blog/2013/03/23/client-side-mvc/" href="http://www.thesoftwaresimpleton.com/blog/2013/03/23/client-side-mvc/"&gt;http://www.thesoftwaresimpleton.com/blog/2013/03/23/client-side-mvc/&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Miscellany&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;NCLDR - an open source .NET port of CLDR, the Common Locale Data Repository - &lt;a title="http://www.ncldr.com/" href="http://www.ncldr.com/"&gt;http://www.ncldr.com/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;edge.js - Run C# and node.js code in-process with no compilation      &lt;ul&gt;       &lt;li&gt;&lt;a title="http://tjanczuk.github.com/edge/#/" href="http://tjanczuk.github.com/edge/#/"&gt;http://tjanczuk.github.com/edge/&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a title="http://tomasz.janczuk.org/2013/03/run-c-and-nodejs-code-in-process-with.html" href="http://tomasz.janczuk.org/2013/03/run-c-and-nodejs-code-in-process-with.html"&gt;http://tomasz.janczuk.org/2013/03/run-c-and-nodejs-code-in-process-with.html&lt;/a&gt; &lt;!--EndFragment--&gt;&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;JavaScript Jabber - Great podcast on all things JavaScript -&amp;#160; &lt;a title="http://javascriptjabber.com/" href="http://javascriptjabber.com/"&gt;http://javascriptjabber.com/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Traffic And Weather - News and commentary podcast about APIs and the cloud hosted by &lt;a href="http://twitter.com/smarx"&gt;@smarx&lt;/a&gt; and &lt;a href="http://twitter.com/johnsheehan"&gt;@johnsheehan&lt;/a&gt; -&amp;#160; &lt;a title="http://trafficandweather.io/" href="http://trafficandweather.io/"&gt;http://trafficandweather.io/&lt;/a&gt;&lt;!--EndFragment--&gt; &lt;/li&gt;    &lt;li&gt;Mathics - A free, light-weight alternative to Mathematica - &lt;a title="http://mathics.org/" href="http://mathics.org/"&gt;http://mathics.org/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;InboxPro - Inform people who e-mail you when they can expect to hear back - &lt;a title="http://inboxpro.com/" href="http://inboxpro.com/"&gt;http://inboxpro.com/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;SayWhat - A neat idea that offers subject lines for phone calls - &lt;a href="http://saywhat.mobi/"&gt;http://saywhat.mobi/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Choose your own application - &lt;a title="http://chooseyourownapplication.com/" href="http://chooseyourownapplication.com/"&gt;http://chooseyourownapplication.com/&lt;/a&gt;&amp;#160; &lt;/li&gt;    &lt;li&gt;p4merge - Brad Wilson and others have recommended p4merge as the new cool merge tool - &lt;a href="http://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools"&gt;http://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Phishing has gotten very good - &lt;a href="http://news.ycombinator.com/item?id=5303839"&gt;http://news.ycombinator.com/item?id=5303839&lt;/a&gt;&amp;#160; &lt;/li&gt;    &lt;li&gt;Audacity on Surface RT - &lt;a title="http://forum.xda-developers.com/showthread.php?t=2103779" href="http://forum.xda-developers.com/showthread.php?t=2103779"&gt;http://forum.xda-developers.com/showthread.php?t=2103779&lt;/a&gt;&amp;#160; &lt;/li&gt;    &lt;li&gt;View source on this - &lt;a title="http://ha.ckers.org/weird/dandb.html" href="http://ha.ckers.org/weird/dandb.html"&gt;http://ha.ckers.org/weird/dandb.html&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;HTML5 Template tag - A proposal to add official support to client-side HTML templates - &lt;a title="http://www.html5rocks.com/en/tutorials/webcomponents/template/" href="http://www.html5rocks.com/en/tutorials/webcomponents/template/"&gt;http://www.html5rocks.com/en/tutorials/webcomponents/template/&lt;/a&gt;&amp;#160; &lt;/li&gt;    &lt;li&gt;HTML5 Game Engines - &lt;a title="http://impactjs.com/" href="http://impactjs.com/"&gt;http://impactjs.com/&lt;/a&gt; and &lt;a title="http://ludei.com/tech/cocoonjs" href="http://ludei.com/tech/cocoonjs"&gt;http://ludei.com/tech/cocoonjs&lt;/a&gt; (any others?) &lt;/li&gt;    &lt;li&gt;Draw Like a Child, Color Like a Man - My high school friend who's now an art teacher writes: &amp;quot;I do grow &lt;em&gt;old&lt;/em&gt; , and I wrestle not to grow &lt;em&gt;up…&lt;/em&gt;yet, I hope to always &lt;em&gt;grow&lt;/em&gt;.&amp;quot; - &lt;a title="http://mrwrightsmake5.wordpress.com/2013/02/27/draw-like-a-child-color-like-a-man/" href="http://mrwrightsmake5.wordpress.com/2013/02/27/draw-like-a-child-color-like-a-man/"&gt;http://mrwrightsmake5.wordpress.com/2013/02/27/draw-like-a-child-color-like-a-man/&lt;/a&gt;&amp;#160; &lt;/li&gt;    &lt;li&gt;OxyPlot - an open source, cross-platform .NET plotting library - &lt;a title="http://oxyplot.codeplex.com/" href="http://oxyplot.codeplex.com/"&gt;http://oxyplot.codeplex.com/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;FullCalendar - a jQuery plugin that provides a full-sized, drag &amp;amp; drop calendar      &lt;ul&gt;       &lt;li&gt;&lt;a title="http://arshaw.com/fullcalendar/" href="http://arshaw.com/fullcalendar/"&gt;http://arshaw.com/fullcalendar/&lt;/a&gt;&amp;#160; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://arshaw.com/fullcalendar/docs/event_data/events_json_feed/#options"&gt;http://arshaw.com/fullcalendar/docs/event_data/events_json_feed/#options&lt;/a&gt;&amp;#160; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://stackoverflow.com/questions/11730185/fullcalendar-get-events-by-json"&gt;http://stackoverflow.com/questions/11730185/fullcalendar-get-events-by-json&lt;/a&gt;&amp;#160; &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Leap Motion - I want this - &lt;a title="https://www.leapmotion.com/" href="https://www.leapmotion.com/"&gt;https://www.leapmotion.com/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;AppBoxr - &lt;em&gt;a .NET micro framework that makes writing apps bruisingly simple. No ORM. No API. &lt;/em&gt;- &lt;a title="http://appboxr.com/" href="http://appboxr.com/"&gt;http://appboxr.com/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Chart.js - exactly what you'd think - &lt;a title="http://www.chartjs.org/" href="http://www.chartjs.org/"&gt;http://www.chartjs.org/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Excel Flash Fill - corrects formatting inconsistencies and other tedious things automatically      &lt;ul&gt;       &lt;li&gt;&lt;a href="http://research.microsoft.com/en-us/news/features/flashfill-020613.aspx"&gt;http://research.microsoft.com/en-us/news/features/flashfill-020613.aspx&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://research.microsoft.com/en-us/um/people/sumitg/flashfill.html"&gt;http://research.microsoft.com/en-us/um/people/sumitg/flashfill.html&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://blogs.office.com/b/microsoft-excel/archive/2012/08/08/flash-fill.aspx"&gt;http://blogs.office.com/b/microsoft-excel/archive/2012/08/08/flash-fill.aspx&lt;/a&gt; &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Google Docs - Sets - Here's a trick I've been using for a long time to find similar terms, movies, books, open source libraries, etc. &lt;a title="http://news.ycombinator.com/item?id=5338433" href="http://news.ycombinator.com/item?id=5338433"&gt;http://news.ycombinator.com/item?id=5338433&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Explore and Master Chrome DevTools on Code School - &lt;a title="http://discover-devtools.codeschool.com/" href="http://discover-devtools.codeschool.com/"&gt;http://discover-devtools.codeschool.com/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Win8 - Working with files and storage - here are some useful links from a chapter I recently wrote      &lt;ul&gt;       &lt;li&gt;&lt;a href="http://blog.jerrynixon.com/2012/06/windows-8-how-to-read-files-in-winrt.html"&gt;http://blog.jerrynixon.com/2012/06/windows-8-how-to-read-files-in-winrt.html&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://lunarfrog.com/blog/2011/10/03/winrt-storage-overview/"&gt;http://lunarfrog.com/blog/2011/10/03/winrt-storage-overview/&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://stackoverflow.com/questions/10278233/roaming-folder-in-metro-app-pointing-to-local-roamingstate"&gt;http://stackoverflow.com/questions/10278233/roaming-folder-in-metro-app-pointing-to-local-roamingstate&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://www.irisclasson.com/2012/10/14/winrt-app-guide-step-12-async-crud-with-sqlite-and-an-awesome-piechart/"&gt;http://www.irisclasson.com/2012/10/14/winrt-app-guide-step-12-async-crud-with-sqlite-and-an-awesome-piechart/&lt;/a&gt; &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;MCE Buddy - Using Media Center? This removes ads, re-encodes and more - &lt;a href="http://www.howtogeek.com/136470/strip-the-ads-from-your-tv-recordings-with-mcebuddy-2/"&gt;http://www.howtogeek.com/136470/strip-the-ads-from-your-tv-recordings-with-mcebuddy-2/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Comments: Good or bad? - I happen to think blog comments are useful. Here's a thoughtful discussion on pros and cons - &lt;a href="http://blogs.scientificamerican.com/a-blog-around-the-clock/2013/01/28/commenting-threads-good-bad-or-not-at-all/"&gt;http://blogs.scientificamerican.com/a-blog-around-the-clock/2013/01/28/commenting-threads-good-bad-or-not-at-all/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Gemini - We interviewed Amir about Oak on Herding Code, but I don't think people are paying enough attention to his other Gemini project - &lt;a title="http://www.amirrajan.net/Blog/dynamic-c-sharp" href="http://www.amirrajan.net/Blog/dynamic-c-sharp"&gt;http://www.amirrajan.net/Blog/dynamic-c-sharp&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Can I Use... - Want to know what browsers support which HTML5 / modern browser standards? Use this. - &lt;a title="http://caniuse.com/" href="http://caniuse.com/"&gt;http://caniuse.com/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;WebKit is the jQuery of Browser Engines - I disagree, but still a good read - &lt;a title="http://ejohn.org/blog/webkit-is-the-jquery-of-browser-engines/" href="http://ejohn.org/blog/webkit-is-the-jquery-of-browser-engines/"&gt;http://ejohn.org/blog/webkit-is-the-jquery-of-browser-engines/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Decompiling .NET Applications - Filip Ekberg wrote a nice overview of .NET decompilation, including some of the top decompiling tools - &lt;a title="http://blog.filipekberg.se/2013/02/14/decompiling-dotnet-applications/" href="http://blog.filipekberg.se/2013/02/14/decompiling-dotnet-applications/"&gt;http://blog.filipekberg.se/2013/02/14/decompiling-dotnet-applications/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Twitter development's not fun anymore - &lt;a title="http://thetwitcleaner.com/blog/goodbye" href="http://thetwitcleaner.com/blog/goodbye"&gt;http://thetwitcleaner.com/blog/goodbye&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Artistic animated gifs - some new finds in this wonderful art form      &lt;ul&gt;       &lt;li&gt;&lt;a title="http://patakk.tumblr.com/tagged/gif" href="http://patakk.tumblr.com/tagged/gif"&gt;http://patakk.tumblr.com/tagged/gif&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a title="http://dvdp.tumblr.com/" href="http://dvdp.tumblr.com/"&gt;http://dvdp.tumblr.com/&lt;/a&gt; &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Easily Readable Terms of Service and Privacy Policy - a nice trend towards offering human translations of legalese      &lt;ul&gt;       &lt;li&gt;&lt;a href="http://blog.codepen.io/2013/03/08/easily-readable-terms-of-service-and-privacy-policy/"&gt;http://blog.codepen.io/2013/03/08/easily-readable-terms-of-service-and-privacy-policy/&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://aviary.com/legal/terms"&gt;http://aviary.com/legal/terms&lt;/a&gt; &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Temporary Projects in Visual Studio - &lt;a href="http://msdn.microsoft.com/en-us/library/6yx39k28.aspx"&gt;http://msdn.microsoft.com/en-us/library/6yx39k28.aspx&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;FizzBuzz - Enterprise Edition &lt;a href="https://github.com/Mikkeren/FizzBuzzEnterpriseEdition"&gt;https://github.com/Mikkeren/FizzBuzzEnterpriseEdition&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Scientists Uncover Invisible Motion in Video - video showing hidden information by exaggerating motion or color- &lt;a href="http://bits.blogs.nytimes.com/2013/02/27/scientists-uncover-invisible-motion-in-video/"&gt;http://bits.blogs.nytimes.com/2013/02/27/scientists-uncover-invisible-motion-in-video/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Design inspiration for Windows Store apps - &lt;a href="http://msdn.microsoft.com/en-us/library/windows/apps/hh868274.aspx"&gt;http://msdn.microsoft.com/en-us/library/windows/apps/hh868274.aspx&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Run Java apps without installing daily Ask Toolbar Java Security Updates - &lt;a href="http://portableapps.com/apps/utilities/java_portable"&gt;http://portableapps.com/apps/utilities/java_portable&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Working with external files in SkyDrive &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;&lt;a title="http://weblogs.thinktecture.com/cnagel/2012/09/configure-windows-live-writer-drafts-folder-with-skydrive.html" href="http://weblogs.thinktecture.com/cnagel/2012/09/configure-windows-live-writer-drafts-folder-with-skydrive.html"&gt;http://weblogs.thinktecture.com/cnagel/2012/09/configure-windows-live-writer-drafts-folder-with-skydrive.html&lt;/a&gt; &lt;/li&gt;      &lt;li&gt;&lt;a href="http://www.howtogeek.com/112141/how-to-sync-external-folders-with-your-skydrive/"&gt;http://www.howtogeek.com/112141/how-to-sync-external-folders-with-your-skydrive/&lt;/a&gt; &lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Computer science education&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;&lt;a title="http://techland.time.com/2012/07/16/can-we-fix-computer-science-education-in-america/" href="http://techland.time.com/2012/07/16/can-we-fix-computer-science-education-in-america/"&gt;http://techland.time.com/2012/07/16/can-we-fix-computer-science-education-in-america/&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;a title="http://neil.fraser.name/news/2013/03/16/" href="http://neil.fraser.name/news/2013/03/16/"&gt;http://neil.fraser.name/news/2013/03/16/&lt;/a&gt;&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;h2&gt;Things I'm doing or involved with&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;I'll be keynoting both &lt;a href="ddc2013.azurewebsites.net/"&gt;Danish Developer Conferences&lt;/a&gt; (Apr 2 in Horsens, Apr 4 in Copenhagen) and speaking at two &lt;a href="http://www.devcamps.ms/web/"&gt;Web Camp events&lt;/a&gt; next week (Apr 3 in Copenhagen, Apr 6 in Istanbul). We've got a bunch of Web Camp events going on world wide, check if there's &lt;a href="http://www.devcamps.ms/web/"&gt;one near you&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;I'm co-authoring a book on Windows 8 development with Jesse Liberty: &lt;a href="https://www.amazon.com/dp/1430240474/ref=as_li_ss_til?tag=jongall-20&amp;amp;camp=0&amp;amp;creative=0&amp;amp;linkCode=as4&amp;amp;creativeASIN=1430240474&amp;amp;adid=0Q80AWWDT3AM9B9G7Z71&amp;amp;"&gt;Pro Windows 8 Development with XAML and C#&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;The ASP.NET team just released an &lt;a href="http://aspnetwebstack.codeplex.com/wikipage?title=Roadmap"&gt;updated roadmap&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;We're off to a great start this year on the &lt;a href="http://herdingcode.com/"&gt;Herding Code podcast&lt;/a&gt;:       &lt;ul&gt;       &lt;li&gt;&lt;a href="http://herdingcode.com/?p=527"&gt;Herding Code 162: Whacha doin, Goodbye Google Reader, scriptcs and Lightning Round!&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://herdingcode.com/?p=523"&gt;Herding Code 161: Single Page Applications with John Papa and Ward Bell&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://herdingcode.com/?p=519"&gt;Herding Code 160: Glimpse 1.0 release and Semantic Release Notes with Nik Molnar and Anthony vander Hoorn&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://herdingcode.com/?p=514"&gt;Herding Code 159: Catching up with Oren Eini on RavenDB&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://herdingcode.com/?p=512"&gt;Herding Code 158: Nat Friedman and Joseph Hill announce Xamarin 2.0&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://herdingcode.com/?p=508"&gt;Herding Code 157: Amir Rajan on dynamic web development with Oak and Gemini&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://herdingcode.com/?p=505"&gt;Herding Code 156: Catching up with Andreas Håkansson and Steven Robbins on NancyFx&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://herdingcode.com/?p=499"&gt;Herding Code 155 – Ward Bell on Single Page Applications and Breeze&lt;/a&gt; &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=10060626" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=3imS-0v9lKw:9ixItJIrnkg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=3imS-0v9lKw:9ixItJIrnkg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?i=3imS-0v9lKw:9ixItJIrnkg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=3imS-0v9lKw:9ixItJIrnkg:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=3imS-0v9lKw:9ixItJIrnkg:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?i=3imS-0v9lKw:9ixItJIrnkg:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=3imS-0v9lKw:9ixItJIrnkg:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jongalloway/~4/3imS-0v9lKw" height="1" width="1"/&gt;</description><feedburner:origLink>http://weblogs.asp.net/jgalloway/archive/2013/03/27/interesting-things-circa-march-2013.aspx</feedburner:origLink></item><item><title>Announcing Web Camps Spring Tour 2013</title><link>http://feedproxy.google.com/~r/jongalloway/~3/uGvfnFNR0Vg/announcing-web-camps-spring-tour-2013.aspx</link><pubDate>Fri, 15 Mar 2013 21:41:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:9995269</guid><dc:creator>Jon Galloway</dc:creator><slash:comments>49</slash:comments><wfw:commentRss>http://weblogs.asp.net/jgalloway/rsscomments.aspx?PostID=9995269</wfw:commentRss><comments>http://weblogs.asp.net/jgalloway/archive/2013/03/15/announcing-web-camps-spring-tour-2013.aspx#comments</comments><description>&lt;p&gt;Whew! Seems like we just got back from the Winter tour, and we're off again! We've got eleven international events coming up in March and April. Some are already sold out, so &lt;a href="http://aka.ms/gotowebcamp"&gt;register today&lt;/a&gt;! And let your friends and co-workers who don't read blogs know, too, because there&lt;/p&gt;  &lt;p&gt;&lt;a href="http://aka.ms/gotowebcamp"&gt;&lt;img border="0" src="https://devcampswebsite.blob.core.windows.net/content/FeaturedItems/Picture/WebCamps-Spring-2013.png" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Web Camps are free, no fluff, lots of code events where you can get learn what's new in the Microsoft web platform and how you can put it to use right away. They're by developers for developers - no marketing, just building web apps.&lt;/p&gt;  &lt;h2&gt;Upcoming events&lt;/h2&gt;  &lt;p&gt;Here's the list, with speakers:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;March 18 - &lt;strong&gt;Stockholm&lt;/strong&gt;, Sweden &lt;a href="http://blog.syntaxc4.net/"&gt;Cory Fowler&lt;/a&gt; [sold out] &lt;/li&gt;    &lt;li&gt;March 20 - &lt;strong&gt;Oslo&lt;/strong&gt;, Norway - &lt;a href="http://blog.syntaxc4.net/"&gt;Cory Fowler&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;March 22 – &lt;strong&gt;Lisbon&lt;/strong&gt;, Portugul - &lt;a href="http://blog.syntaxc4.net/"&gt;Cory Fowler&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;March 25 – &lt;strong&gt;London&lt;/strong&gt;, UK - &lt;a href="http://blog.syntaxc4.net/"&gt;Cory Fowler&lt;/a&gt;, &lt;a href="http://blog.stevensanderson.com/"&gt;Steve Sanderson&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/b/stuartleeks/"&gt;Stuart Leeks&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;March 27 – &lt;strong&gt;Cambridge&lt;/strong&gt;, MA - &lt;a href="http://blog.ntotten.com/"&gt;Nathan Totten&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;April 3 – &lt;strong&gt;Copenhagen&lt;/strong&gt;, Denmark - Jon Galloway and &lt;a href="http://madskristensen.net/"&gt;Mads Kristensen&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;     &lt;div align="left"&gt;April 5 – &lt;strong&gt;Dallas&lt;/strong&gt;, TX with &lt;a href="http://www.bradygaster.com/"&gt;Brady Gaster&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/b/scothu/"&gt;Scott Hunter&lt;/a&gt; &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;April 6 – &lt;strong&gt;Istanbul&lt;/strong&gt;, Turkey - Jon Galloway, &lt;a href="http://www.tugberkugurlu.com/"&gt;Tugberk Ugurlu&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/b/umits/"&gt;Umit Sunar&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;April 12 – &lt;strong&gt;Bellevue&lt;/strong&gt;, WA - &lt;a href="http://blog.ntotten.com/"&gt;Nathan Totten&lt;/a&gt; and &lt;a href="http://blog.syntaxc4.net/"&gt;Cory Fowler&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;April 19 – &lt;strong&gt;Sunnyvale&lt;/strong&gt;, CA - &lt;a href="http://blog.ntotten.com/"&gt;Nathan Totten&lt;/a&gt; and Jon Galloway &lt;/li&gt;    &lt;li&gt;April 26 – &lt;strong&gt;San Diego&lt;/strong&gt;, CA - Jon Galloway &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;ASP.NET and Web Tools 2012.2 Content&lt;/h2&gt;  &lt;p&gt;We've updated this content to include the new ASP.NET and Web Tools 2012.2 release, including the new Visual Studio web tools updates, ASP.NET Web API features, new ASP.NET MVC templates. We organized the content so we start with tools and frameworks (e.g. ASP.NET MVC, ASP.NET Web API, Visual Studio, ASP.NET 4.5 Web Forms features), then dig into some specific scenarios for modern web application development. Here's the agenda:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Keynote: The ASP.NET Web Platform in Context &lt;/li&gt;    &lt;li&gt;What’s new in ASP.NET 4.5 and Visual Studio 2012 &lt;/li&gt;    &lt;li&gt;Building and deploying websites with ASP.NET MVC 4 &lt;/li&gt;    &lt;li&gt;Creating HTML5 Applications with jQuery &lt;/li&gt;    &lt;li&gt;Building a service layer with ASP.NET Web API &lt;/li&gt;    &lt;li&gt;Leveraging your ASP.NET development skills to build apps for Office &lt;/li&gt;    &lt;li&gt;Building and leveraging social web apps in ASP.NET &lt;/li&gt;    &lt;li&gt;Building for the mobile web &lt;/li&gt;    &lt;li&gt;Real-time communications with SignalR &lt;/li&gt;    &lt;li&gt;Leveraging Windows Azure and Windows Azure Web Sites &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Go on, &lt;a href="http://aka.ms/gotowebcamp"&gt;register&lt;/a&gt;! And let your web dev friends and co-workers who don't read blogs know, too, because this is a great way for them to get a recap on what's going on with ASP.NET, Visual Studio 2012, HTML5, JavaScript, and more.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=9995269" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=uGvfnFNR0Vg:Xff6fN3zZ30:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=uGvfnFNR0Vg:Xff6fN3zZ30:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?i=uGvfnFNR0Vg:Xff6fN3zZ30:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=uGvfnFNR0Vg:Xff6fN3zZ30:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=uGvfnFNR0Vg:Xff6fN3zZ30:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?i=uGvfnFNR0Vg:Xff6fN3zZ30:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=uGvfnFNR0Vg:Xff6fN3zZ30:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jongalloway/~4/uGvfnFNR0Vg" height="1" width="1"/&gt;</description><feedburner:origLink>http://weblogs.asp.net/jgalloway/archive/2013/03/15/announcing-web-camps-spring-tour-2013.aspx</feedburner:origLink></item><item><title>Building Web Apps with ASP.NET Jump Start - Over 6 hours of free ASP.NET video training</title><link>http://feedproxy.google.com/~r/jongalloway/~3/mfZ5fIRyk5o/building-web-apps-with-asp-net-jump-start-over-6-hours-of-free-asp-net-video-training.aspx</link><pubDate>Fri, 01 Mar 2013 03:39:08 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:9928291</guid><dc:creator>Jon Galloway</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://weblogs.asp.net/jgalloway/rsscomments.aspx?PostID=9928291</wfw:commentRss><comments>http://weblogs.asp.net/jgalloway/archive/2013/02/28/building-web-apps-with-asp-net-jump-start-over-6-hours-of-free-asp-net-video-training.aspx#comments</comments><description>&lt;p&gt;Last Friday Microsoft Learning hosted Scott Hansleman, Damian Edwards and me for a full day live video Jump Start event titled &lt;a href="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-01-Whats-New-in-ASPNET-45"&gt;Building Web Apps with ASP.NET&lt;/a&gt;. We had a nice crowd of about 2,300 attendees joining us during the event - but we were really excited about ending up with a full day of top quality training on ASP.NET 4.5, ASP.NET MVC 4, ASP.NET Web API, SignalR, and Visual Studio - all updated for the &lt;a href="http://asp.net/vnext"&gt;ASP.NET and Web Tools 2012.2&lt;/a&gt; release. The Microsoft Learning team has a great studio, event platform, and team, and I think the videos turned out great.&lt;/p&gt;  &lt;h2&gt;Thanks&lt;/h2&gt;  &lt;p&gt;This wouldn't have been possible without the heroic efforts of both &lt;a href="http://www.hanselman.com/blog/"&gt;Scott Hanselman&lt;/a&gt; and &lt;a href="https://twitter.com/damianedwards"&gt;Damian Edwards&lt;/a&gt;. Scott hadn't been feeling well earlier that week, but &lt;a href="scottwillpullthrough.azurewebsites.net/"&gt;presented an entire day of training&lt;/a&gt; immediately after a full week at the MVP Summit. Damian wasn't originally scheduled for this, but he was free that day and jumped right in - originally Scott and I invited him just to do the SignalR talk, but when we found he was available the whole day we asked him to help on a bunch of other sessions.&lt;/p&gt;  &lt;p&gt;Thanks also to the whole Microsoft Learning team, especially Frank Gartland for setting this up. The &lt;a href="http://www.microsoftvirtualacademy.com/"&gt;Microsoft Virtual Academy puts out a lot of great content&lt;/a&gt;, including full courses which help you keep up with new releases (and prepare for certification exams if you're interested).&lt;/p&gt;  &lt;h2&gt;Content and Sample Code&lt;/h2&gt;  &lt;p&gt;This content was based on the courseware I just helped update for our current Web Camps tour. A lot of the demos are available in the &lt;a href="http://www.devcamps.ms/web/downloads"&gt;Web Camps Training Kit&lt;/a&gt;, available here. We've got a bunch of &lt;a href="http://www.devcamps.ms/web/schedule"&gt;free, one day Web Camp events&lt;/a&gt; going on over the next few months - with several more being added as we finalize dates and locations.&lt;/p&gt;  &lt;h2&gt;Videos&lt;/h2&gt;  &lt;p&gt;All nine sessions (over six hours) are up on Channel 9 - you can watch them online (HTML5 video or Silverlight) or download them in a bunch of MP4 or WMV formats. I've got them embedded below, too.&lt;/p&gt;  &lt;h2&gt;(01) What's New in ASP.NET 4.5&lt;/h2&gt; &lt;iframe style="height: 288px; width: 512px" src="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-01-Whats-New-in-ASPNET-45/player?w=512&amp;amp;h=288" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;  &lt;p&gt;Sections:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-01-Whats-New-in-ASPNET-45#time=02m51s"&gt;[02:51]&lt;/a&gt; - Web development overview &lt;/p&gt;  &lt;p&gt;This session starts by overviewing what we're going to cover in the series. The only way I can keep up with all the new releases the ASP.NET and Web Tools teams keep cranking out is to work out a mental map of how it all fits together. For the purpose of this day, we broke things into foundations and scenarios. The foundations include One ASP.NET (including ASP.NET Web Forms, ASP.NET MVC, ASP.NET Web API, and SignalR), Visual Studio, NuGet, and Azure - specifically Windows Azure Web Sites). After covering those tools, we look at using using them in some modern web development scenarios, such as social web applications, mobile web development, etc.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-01-Whats-New-in-ASPNET-45#time=10m48s"&gt;[10:48]&lt;/a&gt; - ASP.NET Web Forms model binding &lt;/p&gt;  &lt;p&gt;ASP.NET 4.5 includes what I consider the biggest, most fundamental and transformative change to Web Forms since it was first released - model binding. I would have &lt;em&gt;loved&lt;/em&gt; to have this years ago, and if you're doing ASP.NET Web Forms and not taking advantage of the new data control features, I really think you're both working too hard and writing lower quality code than you should be. The ASP.NET and Web Tools 2012.2 release includes Friendly URLs support, which gives you the full benefits of URL routing - both cleaner URLs and binding of URL values to control data access methods. My demo shows using the models from the MVC Music Store tutorial in an ASP.NET Web Forms application; it's available in the Web Camps Training Kit.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-01-Whats-New-in-ASPNET-45#time=20m27s"&gt;[20:27]&lt;/a&gt; - Bundling and Optimization &lt;/p&gt;  &lt;p&gt;Bundling and Optimization is built in to ASP.NET 4.5, so it works across the platform. Scott shows a great example demonstrating bundling and optimization extensibility with both CoffeeScript and LESS minification.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-01-Whats-New-in-ASPNET-45#time=39m53s"&gt;[39:53]&lt;/a&gt; - Page inspector &lt;/p&gt;  &lt;p&gt;The Visual Studio 2012 Page Inspector lets you interact with the output of your web pages inside of Visual Studio. It's conceptually similar to browser dev tools, but since it's integrated to your source it can give you a lot better information and feedback, answering questions like &amp;quot;Which view / partial view / user control / etc. is actually generating this HTML?&amp;quot; I demo'd the basic features, then showed the new live update feature in the ASP.NET and Web Tools 2012.2 release.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-01-Whats-New-in-ASPNET-45#time=43m58s"&gt;[43:58]&lt;/a&gt; - Async &lt;/p&gt;  &lt;p&gt;ASP.NET 4.5 includes support for Async just about everywhere, including ASP.NET Web Forms, ASP.NET MVC controllers, etc. Scott shows a nice, simple example in which he changes three synchronous operations to run in parallel in an ASP.NET Web Form.&lt;/p&gt;  &lt;h2&gt;(02) Building and Deploying Websites with ASP.NET MVC 4&lt;/h2&gt; &lt;iframe style="height: 288px; width: 512px" src="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-02-Building-and-Deploying-Websites-with-ASPNET-MVC-4/player?w=512&amp;amp;h=288" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;  &lt;p&gt;Okay, this one was fun up until my demo fail cliff hanger right at the end. I started with File / New Project, built out a simple ASP.NET MVC site, and deployed it to Windows Azure Web Sites.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-02-Building-and-Deploying-Websites-with-ASPNET-MVC-4#time=01m26s"&gt;[01:26]&lt;/a&gt; - Intro to ASP.NET MVC &lt;/p&gt;  &lt;p&gt;No ASP.NET MVC talk is compete without a few diagrams, so I start with a review of the how ASP.NET MVC works, complete with some fancy animated diagrams.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-02-Building-and-Deploying-Websites-with-ASPNET-MVC-4#time=03m58s"&gt;[03:58]&lt;/a&gt; - Creating a new ASP.NET MVC site &lt;/p&gt;  &lt;p&gt;In this part of the talk, I show the different ASP.NET MVC project template, tour through the folder structure, show how routing works, explain the standard conventions used in ASP.NET MVC, and show how the controllers and views work together.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-02-Building-and-Deploying-Websites-with-ASPNET-MVC-4#time=15m19s"&gt;[15:19]&lt;/a&gt; - Adding a model, controller, view &lt;/p&gt;  &lt;p&gt;This part of the presentation shows how to work with data in an ASP.NET MVC application using models and scaffolding, with data backed by Entity Framework Code First. I set up Entity Framework Code First Migrations to keep changes to my data model synchronized with my database over time.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-02-Building-and-Deploying-Websites-with-ASPNET-MVC-4#time=34m57s"&gt;[34:57]&lt;/a&gt; - Deploying to Windows Azure Web Sites &lt;/p&gt;  &lt;p&gt;With a complete, working application, it's time to deploy. To the cloud! Well, kind of. I was aware that if people are accessing your URL during a first deployment it can cause problems, but I'd never seen it in practice. Someone F5 bombed me and the deploy failed, which, was corrected by redeploying an unchanged web.config file to refresh the site. But, the cool part is that we built and deployed a site - complete with database and migrations - in under an hour. One of our attendees was so inspired that he created another site to encourage Scott to survive the day: &lt;a href="http://scottwillpullthrough.azurewebsites.net/"&gt;http://scottwillpullthrough.azurewebsites.net/&lt;/a&gt; &lt;/p&gt;  &lt;h2&gt;(03) Creating HTML5 Applications with jQuery&lt;/h2&gt;  &lt;p&gt;&lt;iframe style="height: 288px; width: 512px" src="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-03-Creating-HTML5-Applications-with-jQuery/player?w=512&amp;amp;h=288" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-03-Creating-HTML5-Applications-with-jQuery#time=02m31s"&gt;[02:31]&lt;/a&gt; - Introduction to HTML5 &lt;/p&gt;  &lt;p&gt;Scott and Damian explain what HTML5 is, and what it means to you as a web developer, including an overview of modern web development features like responsive design.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-03-Creating-HTML5-Applications-with-jQuery#time=13m13s"&gt;[13:13]&lt;/a&gt; - HTML5 markup &lt;/p&gt;  &lt;p&gt;Scott and Damian show how HTML5 semantic tags are included in ASP.NET MVC 4 and ASP.NET Web Forms 4.5 templates and explain why they're useful. They explain why feature detection is preferable to useragent sniffing and show how Modernizr makes doing the right thing easy.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-03-Creating-HTML5-Applications-with-jQuery#time=27m06s"&gt;[27:06]&lt;/a&gt; - jQuery overview &lt;/p&gt;  &lt;p&gt;Scott and Damian show why everyone's using jQuery and overview the basics. Damian showed off a simple demo I put together that's up on jsbin: &lt;a title="http://jsbin.com/ijucaq/2/edit" href="http://jsbin.com/ijucaq/2/edit"&gt;http://jsbin.com/ijucaq/2/edit&lt;/a&gt; (play along at home!)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-03-Creating-HTML5-Applications-with-jQuery#time=48m04s"&gt;[48:04]&lt;/a&gt; - Visual Studio web tools &lt;/p&gt;  &lt;p&gt;Scott shows off a bunch of great new web development features in Visual Studio 2012 (including the 2012.2 updates and the Web Essentials extension) with some cool examples like HTML5 form elements and the new Single Page Application templates.&lt;/p&gt;  &lt;h2&gt;(04) Building a Service Layer with ASP.NET Web API&lt;/h2&gt; &lt;iframe style="height: 288px; width: 512px" src="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-04-Building-a-Service-Layer-with-ASPNET-Web-API/player?w=512&amp;amp;h=288" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;  &lt;p&gt;This is a whirlwind tour of ASP.NET Web API, including some new features in 2012.2 (Help Pages, Tracing, and OData).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-04-Building-a-Service-Layer-with-ASPNET-Web-API#time=01m32s"&gt;[01:32]&lt;/a&gt; - Introduction to Web API &lt;/p&gt;  &lt;p&gt;We start by looking at the File / New Project experience for the Web API template, covering Help Pages and Tracing.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-04-Building-a-Service-Layer-with-ASPNET-Web-API#time=14m40s"&gt;[14:40]&lt;/a&gt; - Consuming Web API from jQuery &lt;/p&gt;  &lt;p&gt;This sample showed using jQuery and the OData query syntax to page through server-side data.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-04-Building-a-Service-Layer-with-ASPNET-Web-API#time=20m44s"&gt;[20:44]&lt;/a&gt; - Consuming Web API from Windows 8 &lt;/p&gt;  &lt;p&gt;One of the key reasons for using ASP.NET Web API is that you're able to work with any client type that can &amp;quot;speak HTTP&amp;quot; - including mobile and desktop applications. In this sample, I demonstrated a Windows Store application that was calling back into an ASP.NET Web API service.&lt;/p&gt;  &lt;h2&gt;(05) Leveraging Your ASP.NET Development Skills to Build Office Apps&lt;/h2&gt; &lt;iframe style="height: 288px; width: 512px" src="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-05-Leveraging-Your-ASPNET-Development-Skills-to-Build-Offic/player?w=512&amp;amp;h=288" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;  &lt;p&gt;You might not have heard that you can write Apps for Office using web technologies like HTML5, jQuery, and ASP.NET. It's really pretty slick. I thought it was so cool, I squeezed in a quick 15 minute talk to show it off.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-05-Leveraging-Your-ASPNET-Development-Skills-to-Build-Offic#time=01m25s"&gt;[01:25]&lt;/a&gt; - HTML5 and jQuery for Office 2013 &lt;/p&gt;  &lt;p&gt;I start by showing a simple Hello World example, using jQuery to read and write Excel data into a task pane. Note: my demos require the &lt;a href="http://www.microsoft.com/web/handlers/WebPI.ashx?command=GetInstallerRedirect&amp;amp;appid=OfficeToolsForVS2012GA"&gt;Microsoft Office Developer Tools for Visual Studio 2012&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-05-Leveraging-Your-ASPNET-Development-Skills-to-Build-Offic#time=07m53s"&gt;[07:53]&lt;/a&gt; - Adding ASP.NET Web API &lt;/p&gt;  &lt;p&gt;This demo goes a bit further by showing an Excel Task Pane app that posts data back to a backing ASP.NET Web API service, then displays the result. Brady Gaster wrote this demo; it's available in the Web Camps Training Kit.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-05-Leveraging-Your-ASPNET-Development-Skills-to-Build-Offic#time=12m24s"&gt;[12:24]&lt;/a&gt; - What is an App for Office &lt;/p&gt;  &lt;p&gt;After having explained the model, I showed how you can get and sell Apps for Office in the store, then showed where you can find more information.&lt;/p&gt;  &lt;h2&gt;(06) Building and Leveraging Social Services in ASP.NET&lt;/h2&gt; &lt;iframe style="height: 288px; width: 512px" src="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-06-Building-and-Leveraging-Social-Services-in-ASPNET/player?w=512&amp;amp;h=288" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;  &lt;p&gt;Several people told me this was their favorite session. The scripted part is good - it shows how to let your users log into your ASP.NET applications using OAuth and OpenID, then explains the new Facebook app template in the 2012.2 release.&lt;/p&gt;  &lt;p&gt;But our live viewers really liked watching the unscripted part, when Scott and Damian troubleshot a problem with Twitter app setup because Twitter wouldn't allow an authentication callback to Scott's laptop. Hilarity - but also some pretty slick, on the fly troubleshooting - ensued.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-06-Building-and-Leveraging-Social-Services-in-ASPNET#time=03m02s"&gt;03:02]&lt;/a&gt; - OAuth flow &lt;/p&gt;  &lt;p&gt;Scott and Damian explain how OAuth works, and how you can use it to enable users to log into your ASP.NET sites without a password.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-06-Building-and-Leveraging-Social-Services-in-ASPNET#time=06m34s"&gt;[06:34]&lt;/a&gt; - Demo - OAuth and OpenID &lt;/p&gt;  &lt;p&gt;Scott and Damian set up Twitter and Google authentication for an ASP.NET application.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-06-Building-and-Leveraging-Social-Services-in-ASPNET#time=27m47s"&gt;[27:47]&lt;/a&gt; - Facebook applications &lt;/p&gt;  &lt;p&gt;Scott and Damian explain how Facebook Aps work, then show how the new Facebook app template makes it a lot easier to develop Facebook applications and interact with the Facebook &amp;quot;social graph&amp;quot;.&lt;/p&gt;  &lt;h2&gt;(07) Building for the Mobile Web&lt;/h2&gt;  &lt;p&gt;&lt;iframe style="height: 288px; width: 512px" src="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-07-Building-for-the-Mobile-Web/player?w=512&amp;amp;h=288" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;Scott shows three options for how to deal with the the ever-growing percentage of mobile browsers: do nothing, change the client (adaptive rendering), or change the server (display modes or using jQuery Mobile)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-07-Building-for-the-Mobile-Web#time=08m24s"&gt;08:24]&lt;/a&gt; - Adaptive rendering - change the client &lt;/p&gt;  &lt;p&gt;Scott shows you can use CSS @media queries to adapt the HTML for different display dimensions.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-07-Building-for-the-Mobile-Web#time=11m24s"&gt;[11:24]&lt;/a&gt; - Display modes and jQuery Mobile - change the server &lt;/p&gt;  &lt;p&gt;Scott shows how you can use ASP.NET MVC 4 display modes to create generic mobile views or custom, device specific views. He demonstrates how to use mobile browser emulators to test how the display modes will work on the target device. You can find out more about mobile device simulators here: &lt;a title="http://www.asp.net/mobile/device-simulators" href="http://www.asp.net/mobile/device-simulators"&gt;http://www.asp.net/mobile/device-simulators&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Scott's walkthrough on working with jQuery Mobile in ASP.NET is really worth watching - he demonstrates how to take advantage of some more advanced jQuery mobile features using the ASP.NET MVC 4 Mobile template. You can find out more about using the some of the techniques Scott demonstrates in this tutorial: &lt;a href="http://www.asp.net/mvc/tutorials/mvc-4/aspnet-mvc-4-mobile-features"&gt;ASP.NET MVC 4 Mobile Features&lt;/a&gt;.&lt;/p&gt;  &lt;h2&gt;(08) Real-time Communication with SignalR&lt;/h2&gt; &lt;iframe style="height: 288px; width: 512px" src="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-08-Real-time-Communication-with-SignalR/player?w=512&amp;amp;h=288" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;  &lt;p&gt;SignalR makes it easy to do real-time web applications in ASP.NET. If you want to learn about SignalR - and I'd suggest that you do - Damian is &lt;em&gt;the guy&lt;/em&gt;. He and David Fowler started developing SignalrR as an open source library two years ago, and he gives a really clear explanation that's both deeply technical and understandable.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-08-Real-time-Communication-with-SignalR#time=08m00s"&gt;[08:00]&lt;/a&gt; - Demo - Move shape &lt;/p&gt;  &lt;p&gt;Damian shows a nice visual example with two browsers communicating via a SignalR backend; moving a shape in one browser instantly moves it in the other browser. You can find the code for this demo in the &lt;a href="https://github.com/SignalR/SignalR/tree/master/samples/Microsoft.AspNet.SignalR.Hosting.AspNet.Samples"&gt;SignalR ASP.NET samples, titled ShapeShare&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-08-Real-time-Communication-with-SignalR#time=29m18s"&gt;[29:18]&lt;/a&gt; - Connecting to SignalR with C# and JavaScript clients&lt;/p&gt;  &lt;p&gt;Damian demonstrates concurrent connections to the same hub from a WPF client and several different browsers.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-08-Real-time-Communication-with-SignalR#time=36m56s"&gt;[36:56]&lt;/a&gt; - Real-time gaming: ShootlR&lt;/p&gt;  &lt;p&gt;Damian shows off the ShootR multiplayer HTML5 game, with over 260 live players. He explains the mechanics, including the different game loops and how they optimize for realtime multiplayer games. The code for ShootR is available &lt;a href="https://github.com/NTaylorMullen/ShootR"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-08-Real-time-Communication-with-SignalR#time=44m20s"&gt;[44:20]&lt;/a&gt; - Chat application: JabbR&lt;/p&gt;  &lt;p&gt;Damian shows off the JabbR chat system and talks about scaling with backplanes, then shows off some new features they're working on.&lt;/p&gt;  &lt;h2&gt;(09) Taking Advantage of Windows Azure Services&lt;/h2&gt; &lt;iframe style="height: 288px; width: 512px" src="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-09-Taking-Advantage-of-Windows-Azure-Services/player?w=512&amp;amp;h=288" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-09-Taking-Advantage-of-Windows-Azure-Services#time=01m20s"&gt;[01:20]&lt;/a&gt; - Azure signup &lt;/p&gt;  &lt;p&gt;I explain the Azure signup process and talk about what you can get for free. Scott and I talked about how little it costs, and talked about how caching can make that even lower.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-09-Taking-Advantage-of-Windows-Azure-Services#time=05m00s"&gt;[05:00]&lt;/a&gt; - DevCamps.ms &lt;/p&gt;  &lt;p&gt;I talk about how we've been using Windows Azure Web Sites for the DevCamps.ms site, and Scott and I talk about the ability to scale up and down. I also explain how we use separate Windows Azure Web Sites instances for QA and Staging on DevCamps.ms, using Git deploy. Scott and I discuss the ability to be able to roll back to previous Git deployments if needed.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-09-Taking-Advantage-of-Windows-Azure-Services#time=08m45s"&gt;[08:45]&lt;/a&gt; - Single serving sites &lt;/p&gt;  &lt;p&gt;I show off a quick example of a &amp;quot;single serving&amp;quot; site for quick code demos.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-09-Taking-Advantage-of-Windows-Azure-Services#time=09m00s"&gt;[09:40]&lt;/a&gt; - Windows Azure Store &lt;/p&gt;  &lt;p&gt;Scott and I talk about services - many free - which are available in the Windows Azure Store. I show off a demo what you get in the free version of New Relic.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-09-Taking-Advantage-of-Windows-Azure-Services#time=15m36s"&gt;[15:36]&lt;/a&gt; - Azure command line &lt;/p&gt;  &lt;p&gt;Scott shows off all the sites he's running in Windows Azure and demonstrates how he can use the Azure command line to manage his sites. He explains that they're written in JavaScript and run cross-platform; for more information on that, see this tutorial: &lt;a href="http://www.windowsazure.com/en-us/develop/nodejs/how-to-guides/command-line-tools/"&gt;How to use the Windows Azure Command-Line Tools for Mac and Linux&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump-Start/Building-Web-Apps-with-ASPNET-Jump-Start-09-Taking-Advantage-of-Windows-Azure-Services#time=20m06s"&gt;[20:06]&lt;/a&gt; - Wrap-up &lt;/p&gt;  &lt;p&gt;Scott, Damian and I wrap up the day with an overview of what we've covered and where you can go for more information.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=9928291" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=mfZ5fIRyk5o:O5fo7IRibbM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=mfZ5fIRyk5o:O5fo7IRibbM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?i=mfZ5fIRyk5o:O5fo7IRibbM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=mfZ5fIRyk5o:O5fo7IRibbM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=mfZ5fIRyk5o:O5fo7IRibbM:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?i=mfZ5fIRyk5o:O5fo7IRibbM:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=mfZ5fIRyk5o:O5fo7IRibbM:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jongalloway/~4/mfZ5fIRyk5o" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/jgalloway/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/jgalloway/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://weblogs.asp.net/jgalloway/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category><category domain="http://weblogs.asp.net/jgalloway/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://weblogs.asp.net/jgalloway/archive/tags/html5/default.aspx">html5</category><category domain="http://weblogs.asp.net/jgalloway/archive/tags/jQuery/default.aspx">jQuery</category><category domain="http://weblogs.asp.net/jgalloway/archive/tags/ASP.NET+Web+API/default.aspx">ASP.NET Web API</category><feedburner:origLink>http://weblogs.asp.net/jgalloway/archive/2013/02/28/building-web-apps-with-asp-net-jump-start-over-6-hours-of-free-asp-net-video-training.aspx</feedburner:origLink></item><item><title>Announcing the ASP.NET and Web Tools 2012.2 Release!</title><link>http://feedproxy.google.com/~r/jongalloway/~3/aC7hPRMp63c/announcing-the-asp-net-and-web-tools-2012-2-release.aspx</link><pubDate>Mon, 18 Feb 2013 19:21:46 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:9887433</guid><dc:creator>Jon Galloway</dc:creator><slash:comments>23</slash:comments><wfw:commentRss>http://weblogs.asp.net/jgalloway/rsscomments.aspx?PostID=9887433</wfw:commentRss><comments>http://weblogs.asp.net/jgalloway/archive/2013/02/18/announcing-the-asp-net-and-web-tools-2012-2-release.aspx#comments</comments><description>&lt;p&gt;We're excited to announce the official release of &lt;a href="http://asp.net/vnext"&gt;ASP.NET and Web Tools 2012.2&lt;/a&gt;!&lt;/p&gt;  &lt;p&gt;The most important thing to know about this release is that it doesn't affect the ASP.NET runtime or your existing projects and doesn't require any changes on your server. You can think of this as more of a Visual Studio web update that includes some new ASP.NET project templates. It works on my machine, is well behaved, and gentle around children and small pets.&lt;/p&gt;  &lt;p&gt;I made a 25 minute video that overviews the features and shows a lot of code samples: &lt;a href="http://channel9.msdn.com/Blogs/jongalloway/Introduction-to-the-ASPNET-and-Web-Tools-20122-Release"&gt;Introduction to the ASP.NET and Web Tools 2012.2 Release&lt;/a&gt;:&lt;/p&gt; &lt;iframe style="height: 288px; width: 512px" src="http://channel9.msdn.com/Blogs/jongalloway/Introduction-to-the-ASPNET-and-Web-Tools-20122-Release/player?w=512&amp;amp;h=288" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;  &lt;p&gt;Here's a summary (complete with some pretty pictures) and info on where to learn more.&lt;/p&gt;  &lt;h2&gt;What's in a name?&lt;/h2&gt;  &lt;p&gt;This release is named &lt;em&gt;ASP.NET and Web Tools 2012.2&lt;/em&gt;, which is a bit of a mouthful. It's a tasty mouthful, though. Here's what it means:&lt;/p&gt;  &lt;p&gt;ASP.NET - This release has new templates and tooling for the whole ASP.NET family: ASP.NET Web Forms, ASP.NET MVC, ASP.NET Web API, and more.&lt;/p&gt;  &lt;p&gt;Web Tools - Historically, you had to wait for a big Visual Studio release to get updated features. That doesn't cut it these days, when a new language, JavaScript framework or SPA system goes up on Hacker News every week. In addition to the Web Essentials extension (which has nightly builds available if that's your style), the Visual Studio Web Tools team has worked hard to make it possible to officially ship new web features quickly. We just shipped Visual Studio 2012 last August, here's a bunch of new web tools for ya.&lt;/p&gt;  &lt;p&gt;2012.2 - Naming is hard. The idea here is that this is a semantic name (or more semantic than Spring CTP Refresh Preview etc. etc.) that says this is an incremental release for the tools and templates that shipped with Visual Studio 2012.&lt;/p&gt;  &lt;h2&gt;What's in the box?&lt;/h2&gt;  &lt;p&gt;I made a handy diagram to explain the release. They tell me that software no longer ships in boxes, but if it did I think this should go on the cover:&lt;/p&gt;  &lt;p&gt;&lt;img src="http://farm9.staticflickr.com/8250/8486791170_005e569bec_b.jpg" /&gt;&lt;/p&gt;  &lt;h2&gt;What's new in Web Forms?&lt;/h2&gt;  &lt;p&gt;I really like ASP.NET 4.5 model binding and data control model updates. It brings a lot of the patterns I like in ASP.NET MVC to ASP.NET Web Forms, just scoped to the control level. Your data aware controls get and update data via methods which are control agnostic, the updates are model bound and validated, etc. It's quite nice.&lt;/p&gt;  &lt;p&gt;The FriendlyURLs package helps you take advantage of that and push it further by bringing URLs inline with this model. It does two things for you:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;It automatically maps URLs to ASPX pages &lt;/li&gt;    &lt;li&gt;It automatically passes route values to controls with a nice bindable syntax &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;That means that you can have a URL like /Album/Edit/1 which maps to /Album/Edit.aspx, passing the 1 ID value so that controls can bind to it like this:&lt;/p&gt;  &lt;pre class="brush: csharp; auto-links: false;"&gt;public Album EditAlbum_GetItem([FriendlyUrlSegments] int? id)
{
    return _db.Albums.Find(id);
}&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h2&gt;What's new in SignalR?&lt;/h2&gt;

&lt;p&gt;Well, the main thing is that it's now ASP.NET SignalR. That means that, while it's still an open source project, it's officially shipped by and supported by Microsoft.&lt;/p&gt;

&lt;p&gt;What's new in ASP.NET Web API?&lt;/p&gt;

&lt;p&gt;Three big things:&lt;/p&gt;

&lt;p&gt;Automatic Help Page generation - see a &lt;a href="http://aspnetdemos-webapi-helppage.azurewebsites.net/"&gt;live sample here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Tracing - Everything in the pipeline is output to the System.Diagnostics.Trace, so you can read it in the Visual Studio output window as well as any registered Trace Listener.&lt;/p&gt;

&lt;p&gt;OData - Lots of new stuff here, including routing and query validation&lt;/p&gt;

&lt;h2&gt;ASP.NET MVC&lt;/h2&gt;

&lt;p&gt;ASP.NET MVC gets a few new templates, plus a big new bonus.&lt;/p&gt;

&lt;p&gt;First, the Facebook template makes it easy to create full Facebook apps. Your users log in on Facebook, approve your requests to access their Facebook content, and then your app can interact with their social graph.&lt;/p&gt;

&lt;p&gt;Secondly, there's a lightweight Single Page Application template based on Knockout.js and ASP.NET Web API.&lt;/p&gt;

&lt;p&gt;And, thirdly, the big new bonus - we've made it possible to create new ASP.NET MVC templates using a Visual Studio extension (VSIX). Expect to see a lot more templates from us and others in the community!&lt;/p&gt;

&lt;h2&gt;What's new in Web Tools?&lt;/h2&gt;

&lt;p&gt;The web tools features are of course really visual, so I encourage you to watch the video above. Some highlights:&lt;/p&gt;

&lt;p&gt;Page Inspector now has live sync, so when you update CSS you'll see it update immediately.&lt;/p&gt;

&lt;p&gt;There's IntelliSense support for Knockout bindings, CoffeeScript, and more.&lt;/p&gt;

&lt;p&gt;The integrated publishing includes single file publish and compare. That means that you can edit a single file and push it out, or even compare your local changes against the live production version.&lt;/p&gt;

&lt;h2&gt;Where do I get it?&lt;/h2&gt;

&lt;p&gt;As always, you can find the new release at &lt;a href="http://asp.net/vnext"&gt;http://asp.net/vnext&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Where can I learn more?&lt;/h2&gt;

&lt;p&gt;Over the next two months we will have a series of new Web Camp events occurring around the world. We're finalizing several of them over the next few days.&amp;#160; &lt;a href="http://www.devcamps.ms/web"&gt;Register today&lt;/a&gt; to attend one of these free one day events and learn how to build awesome web apps.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=9887433" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=aC7hPRMp63c:b3vRk8ISxCA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=aC7hPRMp63c:b3vRk8ISxCA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?i=aC7hPRMp63c:b3vRk8ISxCA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=aC7hPRMp63c:b3vRk8ISxCA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=aC7hPRMp63c:b3vRk8ISxCA:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?i=aC7hPRMp63c:b3vRk8ISxCA:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=aC7hPRMp63c:b3vRk8ISxCA:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jongalloway/~4/aC7hPRMp63c" height="1" width="1"/&gt;</description><feedburner:origLink>http://weblogs.asp.net/jgalloway/archive/2013/02/18/announcing-the-asp-net-and-web-tools-2012-2-release.aspx</feedburner:origLink></item><item><title>Building Web Apps with ASP.NET Jump Start with Jon Galloway and Scott Hanselman - Full Day Live (and recorded) Event on Feb 22</title><link>http://feedproxy.google.com/~r/jongalloway/~3/78I3OJr59n0/building-web-apps-with-asp-net-jump-start-with-jon-galloway-and-scott-hanselman-full-day-live-and-recorded-event-on-feb-19.aspx</link><pubDate>Thu, 14 Feb 2013 17:36:09 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:9872440</guid><dc:creator>Jon Galloway</dc:creator><slash:comments>129</slash:comments><wfw:commentRss>http://weblogs.asp.net/jgalloway/rsscomments.aspx?PostID=9872440</wfw:commentRss><comments>http://weblogs.asp.net/jgalloway/archive/2013/02/14/building-web-apps-with-asp-net-jump-start-with-jon-galloway-and-scott-hanselman-full-day-live-and-recorded-event-on-feb-19.aspx#comments</comments><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;font style="background-color: #ffff00"&gt;Update: Scott lost his voice, so we've had to postpone this event to Feb 22. It will be recorded so you can watch it online if the date change prevents you from watching live.&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;img style="float: right; display: inline" align="right" src="http://mslcc-admin.mscareerconference.com/Uploads/MSJumpstart/SideBannerJS2.png" /&gt;The ASP.NET and Web Tools teams have been cranking out some amazing stuff lately! But it can be a little tough to keep up with it all... &lt;/p&gt;  &lt;p&gt;Lucky for you, we've got a great online event coming up on on February 22 which explains it all. &lt;strong&gt;Scott Hanselman&lt;/strong&gt; and I are working with the Microsoft Learning / Virtual Academy team to run a &lt;strong&gt;full day Jump Start event&lt;/strong&gt;. This will be live stream (&lt;a href="http://msl-events.cloudapp.net/SignIn.aspx?ret=http%3a%2f%2fmsl-events.cloudapp.net%2fEventRegistration.aspx%3feid%3d74ea8c6d-ee94-4f12-956f-870fe49334bf&amp;amp;mva=true"&gt;register now!&lt;/a&gt;) and available on-demand later.&lt;/p&gt;  &lt;p&gt;We'll be be spending a full eight hours digging into the following topics (and probably some more - who knows what will happen when you give Scott a microphone...):&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;New and advanced features in ASP.NET Web Forms &lt;/li&gt;    &lt;li&gt;ASP.NET MVC 4 and ASP.NET Web API &lt;/li&gt;    &lt;li&gt;jQuery &lt;/li&gt;    &lt;li&gt;SignalR &lt;/li&gt;    &lt;li&gt;Entity Framework &lt;/li&gt;    &lt;li&gt;Visual Studio 2012 &lt;/li&gt;    &lt;li&gt;Internet Explorer 10 and HTML5 &lt;/li&gt;    &lt;li&gt;Building apps for Office with HTML5 &lt;/li&gt;    &lt;li&gt;Windows Azure Web Sites for ASP.NET developers &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;This is a great way to get up to speed with our latest releases, including everything you need to know about the &lt;a href="http://www.asp.net/vnext"&gt;ASP.NET and Web Tools 2012.2 release&lt;/a&gt;!&lt;/p&gt;  &lt;p&gt;This is an online event, so everyone gets a front row seat. We'll be taking your live questions via chat, and we've got some top-notch chat proctors lined up including &lt;a href="http://www.bradygaster.com/"&gt;Brady Gaster&lt;/a&gt; and some ASP.NET MVP's. If you're familiar with our &lt;a href="http://www.devcamps.ms/web"&gt;current Web Camps tour&lt;/a&gt;, this will follow the same general outline and content, but updated with the newest bits Scott and I can get our hands on!&lt;/p&gt;  &lt;h2&gt;&lt;a href="http://msl-events.cloudapp.net/SignIn.aspx?ret=http%3a%2f%2fmsl-events.cloudapp.net%2fEventRegistration.aspx%3feid%3d74ea8c6d-ee94-4f12-956f-870fe49334bf&amp;amp;mva=true"&gt;Register now&lt;/a&gt; to reserve your spot.&lt;/h2&gt;  &lt;p&gt;And if you'd like a preview of some of the fun I fear we may all be in for, check out the talk Scott and I did at //build/, &lt;a title="http://channel9.msdn.com/Events/Build/2012/3-028" href="http://channel9.msdn.com/Events/Build/2012/3-028"&gt;Bleeding edge ASP.NET: See what is next for MVC, Web API, SignalR and more…&lt;/a&gt;&lt;/p&gt; &lt;iframe style="height: 540px; width: 960px" src="http://channel9.msdn.com/Events/Build/2012/3-028/player?w=960&amp;amp;h=540" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;  &lt;p&gt;&lt;em&gt;Now imagine eight hours of this! What have I gotten myself into?&lt;/em&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=9872440" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=78I3OJr59n0:GUWLI9rlaGA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=78I3OJr59n0:GUWLI9rlaGA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?i=78I3OJr59n0:GUWLI9rlaGA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=78I3OJr59n0:GUWLI9rlaGA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=78I3OJr59n0:GUWLI9rlaGA:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?i=78I3OJr59n0:GUWLI9rlaGA:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=78I3OJr59n0:GUWLI9rlaGA:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jongalloway/~4/78I3OJr59n0" height="1" width="1"/&gt;</description><feedburner:origLink>http://weblogs.asp.net/jgalloway/archive/2013/02/14/building-web-apps-with-asp-net-jump-start-with-jon-galloway-and-scott-hanselman-full-day-live-and-recorded-event-on-feb-19.aspx</feedburner:origLink></item><item><title>A quick look at Git support in Visual Studio 2012</title><link>http://feedproxy.google.com/~r/jongalloway/~3/EkFHUAxTTQk/a-quick-look-at-git-support-in-visual-studio-2012.aspx</link><pubDate>Fri, 01 Feb 2013 04:59:41 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:9823063</guid><dc:creator>Jon Galloway</dc:creator><slash:comments>13</slash:comments><wfw:commentRss>http://weblogs.asp.net/jgalloway/rsscomments.aspx?PostID=9823063</wfw:commentRss><comments>http://weblogs.asp.net/jgalloway/archive/2013/01/31/a-quick-look-at-git-support-in-visual-studio-2012.aspx#comments</comments><description>&lt;p&gt;I use Git a lot these days. My team uses it exclusively for internal work, collaboration with vendors, and public open source releases. I've got several public and private repos on CodePlex, GitHub and BitBucket - open source projects, book sample code, presentation content, etc.&lt;/p&gt;  &lt;p&gt;I've used the command line, &lt;a href="https://github.com/dahlbyk/posh-git"&gt;posh-git&lt;/a&gt;, and &lt;a href="http://windows.github.com/"&gt;GitHub for Windows&lt;/a&gt; (you knew you can &lt;a href="http://haacked.com/archive/2012/05/30/using-github-for-windows-with-non-github-repositories.aspx"&gt;use GitHub for Windows with non-GitHub repositories&lt;/a&gt;, right?). I quickly decided that msysgit wasn't helpful, bounced between the command line and Visual Studio for a while, then used the git command line in the Visual Studio Package Manager console. &lt;/p&gt;  &lt;p&gt;I've been using &lt;a href="http://windows.github.com/"&gt;GitHub for Windows&lt;/a&gt; app a lot since it was released. Some people will make fun of you if you don't use the command line in git; and it's true that the old git windows tools weren't very useful. I've found that the GitHub for Windows client works pretty well for a lot of day to day work, and I can quickly pop open a shell window when I need it (e.g. removing files, merging, git deploy to Azure). If nothing else, GitHub for Windows takes the annoyance thinking about SSH keys out of the picture.&lt;/p&gt;  &lt;p&gt;I wasn't sure I'd like GitHub support in Visual Studio, though. It's nice to see file status, history, merges, etc., but I didn't want it locking my files or messing with my project files or... well, changing anything at all. I think of code as files, not a bunch of stuff living in Visual Studio, and I want to manage it.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Disclaimer: There are a lot of good posts about the new Git support in Visual Studio 2012 with lots of nice pictures. I didn't read them, partly because it looked like a lot of work, and partly because I wanted to see if I could just click around and good things would happen. What could go wrong?&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;tl;dr: It doesn't mess with my code or project files, works well distributed, and integrates cleanly with stuff like .gitignore and .gitattributes. So far I like it. Oh, and it works with Visual Studio Express, too.&lt;/em&gt;&lt;/p&gt;  &lt;h2&gt;Installing the Git tools for Visual Studio 2012&lt;/h2&gt;  &lt;p&gt;The big &lt;a href="http://blogs.msdn.com/b/visualstudioalm/archive/2013/01/30/getting-started-with-git-in-visual-studio-and-team-foundation-service.aspx"&gt;Getting Started with Git in Visual Studio and Team Foundation Service&lt;/a&gt; post has a &lt;em&gt;Get set up&lt;/em&gt; note at the top that worked great for me.&lt;/p&gt;  &lt;p&gt;I already had Visual Studio 2012 installed, so step one was &lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=36508"&gt;installing Visual Studio 2012 Update 2 CTP&lt;/a&gt;. I think the download page could be a little more clear - I figured I'd start with the smallest one and it worked on my machine. &lt;/p&gt;  &lt;p&gt;&lt;a title="Installing Visual Studio 2012 Update 2 CTP 2" href="http://www.flickr.com/photos/36836555@N00/8434390054/"&gt;&lt;img border="0" alt="Installing Visual Studio 2012 Update 2 CTP 2" src="http://farm9.static.flickr.com/8516/8434390054_462bd01e18.jpg" /&gt;&lt;/a&gt;&lt;a title="2013-01-30_12h33_33" href="http://www.flickr.com/photos/36836555@N00/8433330735/"&gt;&lt;img border="0" alt="2013-01-30_12h33_33" src="http://farm9.static.flickr.com/8475/8433330735_c13e349419.jpg" width="232" height="325" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Note: In case you missed it, &lt;a href="http://blogs.msdn.com/b/somasegar/archive/2012/11/26/visual-studio-2012-update-1-now-available.aspx"&gt;Visual Studio's moved to delivering regular updates (with new features) on a shorter delivery interval&lt;/a&gt;. &lt;a href="http://blogs.msdn.com/b/bharry/archive/2013/01/30/announcing-visual-studio-2012-update-2-vs2012-2.aspx"&gt;Visual Studio 2012 Update 2, a.k.a. VS2012.2, just shipped&lt;/a&gt; and has a lot of nice new features (even a blue theme for the nostalgic). &lt;/p&gt;  &lt;p&gt;The Visual Studio 2012 Update 2 install &lt;strong&gt;took 8 minutes for me and didn't require a reboot&lt;/strong&gt; - make sure you've got Visual Studio closed when installing the update, of course. Not crazy fast, but barely long enough for me to get a cup of coffee.&lt;/p&gt;  &lt;p&gt;Next up was the the &lt;a href="http://visualstudiogallery.msdn.microsoft.com/abafc7d6-dcaa-40f4-8a5e-d6724bdb980c"&gt;Visual Studio Tools for Git extension&lt;/a&gt;. I expected this to be a little faster since it's a VSIX, but it was so fast I didn't get screenshot. It installed in maybe 15 seconds - if that. Fast. I, for one, welcome our new VSIX overlords. Fast, lightweight installs are quite nice, and I like that I can disable or uninstall them without fear of setting the house on fire.&lt;/p&gt;  &lt;h2&gt;Test drive (or, randomly clicking around to see what jumps out at me)&lt;/h2&gt;  &lt;p&gt;Okay, first I opened up a project I'd previously set up on GitHub. It found the .git folder and shows me status for files - none modified yet, as shown by the blue lock icon thing.&lt;/p&gt;  &lt;p&gt;&lt;a title="2013-01-31_20h31_33" href="http://www.flickr.com/photos/36836555@N00/8433723061/"&gt;&lt;img border="0" alt="2013-01-31_20h31_33" src="http://farm9.static.flickr.com/8359/8433723061_6954a9fd3e.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I noticed a mistake in Default.aspx and deleted it, which shows a red checkmark to show it's been modified. It's pretty small, but I don't think that's a big deal as I'll show in a second.&lt;/p&gt;  &lt;p&gt;&lt;a title="2013-01-31_20h36_08" href="http://www.flickr.com/photos/36836555@N00/8434816810/"&gt;&lt;img border="0" alt="2013-01-31_20h36_08" src="http://farm9.static.flickr.com/8230/8434816810_61a8d00547_b.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I also delete some database files from App_Data that shouldn't have been included. Now I'm ready to commit my change. I'll right-click on the project and pick &amp;quot;Commit...&amp;quot; Note that Commit was disabled until I made this change.&lt;/p&gt;  &lt;p&gt;&lt;a title="2013-01-31_20h38_27" href="http://www.flickr.com/photos/36836555@N00/8433733745/"&gt;&lt;img border="0" alt="2013-01-31_20h38_27" src="http://farm9.static.flickr.com/8192/8433733745_20d28b9fdc_b.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Okay, now it popped up this Team Explorer thing which shows the changes I've made. The Commit button is disabled and it tells me I need a commit message (standard for a git commit), so I'll need to fill that in.&lt;/p&gt;  &lt;p&gt;&lt;a title="2013-01-31_20h41_05" href="http://www.flickr.com/photos/36836555@N00/8433739625/"&gt;&lt;img border="0" alt="2013-01-31_20h41_05" src="http://farm9.static.flickr.com/8083/8433739625_d3019ec201_b.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;After filling in the commit message, I can Commit.&lt;/p&gt;  &lt;p&gt;&lt;a title="2013-01-31_20h43_24" href="http://www.flickr.com/photos/36836555@N00/8433741799/"&gt;&lt;img border="0" alt="2013-01-31_20h43_24" src="http://farm9.static.flickr.com/8368/8433741799_8d9facba64_b.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And then it shows the details from the Commit.&lt;/p&gt;  &lt;p&gt;&lt;a title="2013-01-31_21h14_08" href="http://www.flickr.com/photos/36836555@N00/8434892948/"&gt;&lt;img border="0" alt="2013-01-31_21h14_08" src="http://farm9.static.flickr.com/8191/8434892948_5c047a3ed7_b.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now at this point it still sees this as a local repo - it doesn't know that the upstream master is on GitHub. In the spirit of honest dumb guy clicking around, I don't see how to tell Visual Studio about the upstream master to push it.&lt;/p&gt;  &lt;p&gt;&lt;a title="2013-01-31_20h50_47" href="http://www.flickr.com/photos/36836555@N00/8433755087/"&gt;&lt;img border="0" alt="2013-01-31_20h50_47" src="http://farm9.static.flickr.com/8046/8433755087_14f1af8e7a_b.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Hey, notice that little orange logo next to it? I didn't know what that was, either. It turns out it's the official Git logo. Who knew?&lt;/p&gt;  &lt;p&gt;&lt;a href="http://git-scm.com/downloads/logos"&gt;&lt;img border="0" src="http://git-scm.com/images/logos/2color-lightbg@2x.png" width="176" height="60" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Fine, now let's check this out in GitHub for Windows to see if anything wacky happened.&lt;/p&gt;  &lt;p&gt;&lt;a title="2013-01-31_21h25_06" href="http://www.flickr.com/photos/36836555@N00/8434894206/"&gt;&lt;img border="0" alt="2013-01-31_21h25_06" src="http://farm9.static.flickr.com/8051/8434894206_67fd2ac279_b.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Sync from GitHub for Windows works, or I could pop the console and git pull --rebase / git push if I was in the mood.&lt;/p&gt;  &lt;p&gt;Oh, one more neat thing - the branch history shows my local commit.&lt;/p&gt;  &lt;p&gt;&lt;a title="2013-01-31_21h30_08" href="http://www.flickr.com/photos/36836555@N00/8434907612/"&gt;&lt;img border="0" alt="2013-01-31_21h30_08" src="http://farm9.static.flickr.com/8047/8434907612_0c964891e2_b.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;Summary&lt;/h2&gt;  &lt;p&gt;&lt;strong&gt;I'm happy with this. I opened a project I'd previously created on GitHub, it didn't modify a single file, it read my .gitignore and .gitattributes, and it showed me some useful information.&lt;/strong&gt; I just clicked around and (1) nothing got messed up (2) I saw some useful information as I was working. I guess that's my point - it didn't hurt anything and I'm happy I installed it.&lt;/p&gt;  &lt;p&gt;I checked it out with my CodePlex git repos and they were swell, too.&lt;/p&gt;  &lt;p&gt;From some more reading, the real goodness shows up when you use the free (for 5 users or with MSDN account) Git hosting at &lt;a href="http://tfs.visualstudio.com"&gt;http://tfs.visualstudio.com&lt;/a&gt;, or when you need to do some merges or other more UI oriented things. You can read more from people who aren't just clicking around at some of the following gold certified urls:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.hanselman.com/blog/GitSupportForVisualStudioGitTFSAndVSPutIntoContext.aspx"&gt;Git support for Visual Studio - Git, TFS, and VS put into Context&lt;/a&gt; (Scott Hanselman) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/b/visualstudioalm/archive/2013/01/30/getting-started-with-git-in-visual-studio-and-team-foundation-service.aspx"&gt;Getting Started with Git in Visual Studio and Team Foundation Service&lt;/a&gt; (Visual Studio ALM + Team Foundation Server blog) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://channel9.msdn.com/posts/GitForVisualStudioTFS"&gt;Git Support Added to Visual Studio and TFS&lt;/a&gt; (Channel 9 video) &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=9823063" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=EkFHUAxTTQk:0tShHUeJaBk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=EkFHUAxTTQk:0tShHUeJaBk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?i=EkFHUAxTTQk:0tShHUeJaBk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=EkFHUAxTTQk:0tShHUeJaBk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=EkFHUAxTTQk:0tShHUeJaBk:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?i=EkFHUAxTTQk:0tShHUeJaBk:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=EkFHUAxTTQk:0tShHUeJaBk:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jongalloway/~4/EkFHUAxTTQk" height="1" width="1"/&gt;</description><feedburner:origLink>http://weblogs.asp.net/jgalloway/archive/2013/01/31/a-quick-look-at-git-support-in-visual-studio-2012.aspx</feedburner:origLink></item><item><title>Does ASP.NET Web API + OData filter at the database level? Let's ask IntelliTrace.</title><link>http://feedproxy.google.com/~r/jongalloway/~3/K_i2dwFUTpk/does-asp-net-web-api-odata-filter-at-the-database-level-let-s-ask-intellitrace.aspx</link><pubDate>Sun, 23 Dec 2012 03:12:27 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:9632295</guid><dc:creator>Jon Galloway</dc:creator><slash:comments>11</slash:comments><wfw:commentRss>http://weblogs.asp.net/jgalloway/rsscomments.aspx?PostID=9632295</wfw:commentRss><comments>http://weblogs.asp.net/jgalloway/archive/2012/12/22/does-asp-net-web-api-odata-filter-at-the-database-level-let-s-ask-intellitrace.aspx#comments</comments><description>&lt;p&gt;Someone asked me via Twitter if ASP.NET Web API queries are filtered at the database level, or if ASP.NET Web API queries the entire result set and then filters in code. Good question. I was pretty sure I knew the answer (below) but since everything in ASP.NET Web API changes so fast and they just released some big OData support updates, I wanted to make sure before answering.&lt;/p&gt;  &lt;p&gt;How would you do that?&lt;/p&gt;  &lt;h2&gt;Option 1: Read the code&lt;/h2&gt;  &lt;p&gt;Since ASP.NET Web API and OData are both open source code, you can read through the code. A good guess at where to start would be the [Queryable] attribute: &lt;/p&gt;  &lt;p&gt;&lt;a title="http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/3dad0922b324#src/System.Web.Http.OData/QueryableAttribute.cs" href="http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/3dad0922b324#src/System.Web.Http.OData/QueryableAttribute.cs"&gt;http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/3dad0922b324#src/System.Web.Http.OData/QueryableAttribute.cs&lt;/a&gt; ExecuteQuery&lt;/p&gt;  &lt;pre class="brush: csharp; auto-links: false;"&gt;private IQueryable ExecuteQuery(IEnumerable query, HttpRequestMessage request, HttpConfiguration configuration, HttpActionDescriptor actionDescriptor) 
{ 
    Type originalQueryType = query.GetType(); 
    Type entityClrType = TypeHelper.GetImplementedIEnumerableType(originalQueryType);

    if (entityClrType == null) 
    { 
        // The element type cannot be determined because the type of the content 
        // is not IEnumerable&amp;lt;T&amp;gt; or IQueryable&amp;lt;T&amp;gt;. 
        throw Error.InvalidOperation( 
            SRResources.FailedToRetrieveTypeToBuildEdmModel, 
            this.GetType().Name, 
            actionDescriptor.ActionName, 
            actionDescriptor.ControllerDescriptor.ControllerName, 
            originalQueryType.FullName); 
    }

    ODataQueryContext queryContext = CreateQueryContext(entityClrType, configuration, actionDescriptor); 
    ODataQueryOptions queryOptions = new ODataQueryOptions(queryContext, request); 
    ValidateQuery(request, queryOptions);

    // apply the query 
    IQueryable queryable = query as IQueryable; 
    if (queryable == null) 
    { 
        queryable = query.AsQueryable(); 
    }

    ODataQuerySettings querySettings = new ODataQuerySettings 
    { 
        EnsureStableOrdering = EnsureStableOrdering, 
        HandleNullPropagation = HandleNullPropagation, 
        MaxAnyAllExpressionDepth = MaxAnyAllExpressionDepth, 
        PageSize = _pageSize 
    };

    return queryOptions.ApplyTo(queryable, querySettings); 
}&lt;/pre&gt;

&lt;p&gt;Hmm. That's not manually filtering data, but the query itself is obviously a few levels deeper. Oh, let's look at the call stack:&lt;/p&gt;

&lt;pre style="overflow: auto; height: 300px; width: 800px"&gt;System.Data.dll!System.Data.SqlClient.SqlCommand.ExecuteReader(System.Data.CommandBehavior behavior = {unknown}, string method = {unknown})    
System.Data.dll!System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(System.Data.CommandBehavior behavior = {unknown})    
System.Data.dll!System.Data.Common.DbCommand.ExecuteReader(System.Data.CommandBehavior behavior = {unknown})    
EntityFramework.dll!System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(System.Data.Entity.Core.EntityClient.EntityCommand entityCommand = {unknown}, System.Data.CommandBehavior behavior = {unknown})    
EntityFramework.dll!System.Data.Entity.Core.Objects.Internal.ObjectQueryExecutionPlan.Execute(System.Data.Entity.Core.Objects.ObjectContext context = {unknown}, System.Data.Entity.Core.Objects.ObjectParameterCollection parameterValues = {unknown})    
EntityFramework.dll!System.Data.Entity.Core.Objects.ObjectQuery`1.GetResults(System.String (error) = Internal Error in IntelliTrace)    
EntityFramework.dll!System.Data.Entity.Core.Objects.ObjectQuery`1.AnonymousMethod()    
mscorlib.dll!System.Lazy`1.CreateValue()    
mscorlib.dll!System.Lazy`1.LazyInitValue()    
mscorlib.dll!Get System.Lazy`1.Value()    
EntityFramework.dll!System.Data.Entity.Internal.LazyEnumerator`1.MoveNext()    
mscorlib.dll!System.Collections.Generic.List`1..ctor(System.Collections.Generic.IEnumerable collection = {unknown})    
System.Core.dll!System.Linq.Enumerable.ToList(System.Collections.Generic.IEnumerable source = {unknown})    
Newtonsoft.Json.dll!Newtonsoft.Json.Serialization.JsonArrayContract.CreateWrapper(object list = {unknown})    
Newtonsoft.Json.dll!Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(Newtonsoft.Json.JsonWriter writer = {unknown}, object value = {unknown}, Newtonsoft.Json.Serialization.JsonContract valueContract = {unknown}, Newtonsoft.Json.Serialization.JsonProperty member = {unknown}, Newtonsoft.Json.Serialization.JsonContainerContract containerContract = {unknown}, Newtonsoft.Json.Serialization.JsonProperty containerProperty = {unknown})    
Newtonsoft.Json.dll!Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(Newtonsoft.Json.JsonWriter jsonWriter = {unknown}, object value = {unknown})    
Newtonsoft.Json.dll!Newtonsoft.Json.JsonSerializer.SerializeInternal(Newtonsoft.Json.JsonWriter jsonWriter = {unknown}, object value = {unknown})    
Newtonsoft.Json.dll!Newtonsoft.Json.JsonSerializer.Serialize(Newtonsoft.Json.JsonWriter jsonWriter = {unknown}, object value = {unknown})    
System.Net.Http.Formatting.dll!&amp;lt;&amp;gt;c__DisplayClassd.&amp;lt;WriteToStreamAsync&amp;gt;b__c()    
System.Net.Http.Formatting.dll!System.Threading.Tasks.TaskHelpers.RunSynchronously(System.Action action = {unknown}, System.Threading.CancellationToken token = {unknown})    
System.Net.Http.Formatting.dll!System.Net.Http.Formatting.JsonMediaTypeFormatter.WriteToStreamAsync(System.Type type = {unknown}, object value = {unknown}, System.IO.Stream writeStream = {unknown}, System.Net.Http.HttpContent content = {unknown}, System.Net.TransportContext transportContext = {unknown})    
System.Net.Http.Formatting.dll!System.Net.Http.ObjectContent.SerializeToStreamAsync(System.IO.Stream stream = {unknown}, System.Net.TransportContext context = {unknown})    
System.Net.Http.dll!System.Net.Http.HttpContent.CopyToAsync(System.IO.Stream stream = {unknown}, System.Net.TransportContext context = {unknown})    
System.Net.Http.dll!System.Net.Http.HttpContent.CopyToAsync(System.IO.Stream stream = {unknown})    
System.Web.Http.WebHost.dll!System.Web.Http.WebHost.HttpControllerHandler.WriteBufferedResponseContentAsync(System.Web.HttpContextBase httpContextBase = {unknown}, System.Net.Http.HttpContent responseContent = {unknown}, System.Net.Http.HttpRequestMessage request = {unknown})    
System.Web.Http.WebHost.dll!System.Web.Http.WebHost.HttpControllerHandler.WriteResponseContentAsync(System.Web.HttpContextBase httpContextBase = {unknown}, System.Net.Http.HttpResponseMessage response = {unknown}, System.Net.Http.HttpRequestMessage request = {unknown})    
System.Web.Http.WebHost.dll!System.Web.Http.WebHost.HttpControllerHandler.ConvertResponse(System.Web.HttpContextBase httpContextBase = {unknown}, System.Net.Http.HttpResponseMessage response = {unknown}, System.Net.Http.HttpRequestMessage request = {unknown})    
System.Web.Http.WebHost.dll!&amp;lt;&amp;gt;c__DisplayClass3.AnonymousMethod(System.Net.Http.HttpResponseMessage response = {unknown})    
System.Web.Http.WebHost.dll!&amp;lt;&amp;gt;c__DisplayClass3e`1.AnonymousMethod(System.Threading.Tasks.Task t = {unknown})    
System.Web.Http.WebHost.dll!System.Threading.Tasks.TaskHelpersExtensions.ThenImpl(TTask task = {unknown}, System.Func continuation = {unknown}, System.Threading.CancellationToken cancellationToken = {unknown}, bool runSynchronously = {unknown})    
System.Web.Http.WebHost.dll!System.Threading.Tasks.TaskHelpersExtensions.Then(System.Threading.Tasks.Task task = {unknown}, System.Func continuation = {unknown}, System.Threading.CancellationToken token = {unknown}, bool runSynchronously = {unknown})    
System.Web.Http.WebHost.dll!System.Web.Http.WebHost.HttpControllerHandler.BeginProcessRequest(System.Web.HttpContextBase httpContextBase = {unknown}, System.AsyncCallback callback = {unknown}, object state = {unknown})    
System.Web.Http.WebHost.dll!System.Web.Http.WebHost.HttpControllerHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(System.Web.HttpContext httpContext = {unknown}, System.AsyncCallback callback = {unknown}, object state = {unknown})    
System.Web.dll!CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()    
System.Web.dll!System.Web.HttpApplication.ExecuteStep(IExecutionStep step = {unknown}, ref bool completedSynchronously = {unknown})    
System.Web.dll!PipelineStepManager.ResumeSteps(System.Exception error = {unknown})    
System.Web.dll!System.Web.HttpApplication.BeginProcessRequestNotification(System.Web.HttpContext context = {unknown}, System.AsyncCallback cb = {unknown})    
System.Web.dll!System.Web.HttpRuntime.ProcessRequestNotificationPrivate(System.Web.Hosting.IIS7WorkerRequest wr = {unknown}, System.Web.HttpContext context = {unknown})    
System.Web.dll!System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(System.IntPtr rootedObjectsPointer = {unknown}, System.IntPtr nativeRequestContext = {unknown}, System.IntPtr moduleData = {unknown}, int flags = {unknown})    
System.Web.dll!System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(System.IntPtr rootedObjectsPointer = {unknown}, System.IntPtr nativeRequestContext = {unknown}, System.IntPtr moduleData = {unknown}, int flags = {unknown})    
System.Web.dll!System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(System.IntPtr rootedObjectsPointer = {unknown}, System.IntPtr nativeRequestContext = {unknown}, System.IntPtr moduleData = {unknown}, int flags = {unknown})    
System.Web.dll!System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(System.IntPtr rootedObjectsPointer = {unknown}, System.IntPtr nativeRequestContext = {unknown}, System.IntPtr moduleData = {unknown}, int flags = {unknown})&lt;/pre&gt;

&lt;p&gt;Okay, it's got to be in there somewhere. But looking for it seems like hard work. On to Option 2!&lt;/p&gt;

&lt;h2&gt;Option 2: Use IntelliTrace&lt;/h2&gt;

&lt;p&gt;If you've got &lt;a href="http://msdn.microsoft.com/en-us/library/dd264915(v=VS.100).aspx"&gt;Visual Studio Ultimate&lt;/a&gt;, this is one of those times you can enjoy your Ultimate Elite Preferred Coder status. View &lt;a href="http://msdn.microsoft.com/en-us/library/dd572114(v=vs.100).aspx"&gt;IntelliTrace Events using either Debug / IntelliTrace Events / View IntelliTrace Events&lt;/a&gt; or using keyboard shortcuts:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;CTRL+ALT+Y, F &amp;lt;- Nice that there's a shortcut, but you're not going to remember this &lt;/li&gt;

  &lt;li&gt;CTRL+Q (Quick Launch) +&amp;#160; type &amp;quot;intellitrace events&amp;quot;&amp;#160; + hit Enter &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then scroll down the events list to see the ADO.NET calls and click on one that looks promising:&lt;/p&gt;

&lt;p&gt;&lt;a title="2012-12-22_18h50_46" href="http://www.flickr.com/photos/36836555@N00/8298113377/"&gt;&lt;img border="0" alt="2012-12-22_18h50_46" src="http://farm9.static.flickr.com/8503/8298113377_df8b6590ab_b.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Just to show the end result, here's the JSON result in the browser tools with the executed SQL query below:&lt;/p&gt;

&lt;p&gt;&lt;a title="ASP.NET Web API - OData Filtering" href="http://www.flickr.com/photos/36836555@N00/8292216246/"&gt;&lt;img border="0" alt="ASP.NET Web API - OData Filtering" src="http://farm9.static.flickr.com/8222/8292216246_1448e32ac7_b.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That query in text is: &lt;/p&gt;

&lt;pre class="brush: sql; auto-links: false;"&gt;SELECT 
[Extent1].[AlbumId] AS [AlbumId], 
[Extent1].[GenreId] AS [GenreId], 
[Extent1].[ArtistId] AS [ArtistId], 
[Extent1].[Title] AS [Title], 
[Extent1].[Price] AS [Price], 
[Extent1].[AlbumArtUrl] AS [AlbumArtUrl], 
[Extent2].[GenreId] AS [GenreId1], 
[Extent2].[Name] AS [Name], 
[Extent2].[Description] AS [Description], 
[Extent3].[ArtistId] AS [ArtistId1], 
[Extent3].[Name] AS [Name1] 
FROM   [dbo].[Albums] AS [Extent1] 
INNER JOIN [dbo].[Genres] AS [Extent2] ON [Extent1].[GenreId] = [Extent2].[GenreId] 
INNER JOIN [dbo].[Artists] AS [Extent3] ON [Extent1].[ArtistId] = [Extent3].[ArtistId] 
WHERE N'Kind of Blue' = [Extent1].[Title]&lt;/pre&gt;

&lt;h2&gt;Final Answer: Yes&lt;/h2&gt;

&lt;p&gt;As long as your data provider supports deferred queries and you don't force evaluation by calling something like .ToList(), the query will not be evaluated until the OData filters are applied, and they'll be handled at the database level.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=9632295" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=K_i2dwFUTpk:B-1orOlXPiw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=K_i2dwFUTpk:B-1orOlXPiw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?i=K_i2dwFUTpk:B-1orOlXPiw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=K_i2dwFUTpk:B-1orOlXPiw:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=K_i2dwFUTpk:B-1orOlXPiw:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?i=K_i2dwFUTpk:B-1orOlXPiw:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=K_i2dwFUTpk:B-1orOlXPiw:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jongalloway/~4/K_i2dwFUTpk" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/jgalloway/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://weblogs.asp.net/jgalloway/archive/tags/ASP.NET+Web+API/default.aspx">ASP.NET Web API</category><feedburner:origLink>http://weblogs.asp.net/jgalloway/archive/2012/12/22/does-asp-net-web-api-odata-filter-at-the-database-level-let-s-ask-intellitrace.aspx</feedburner:origLink></item><item><title>Announcing a Web Camps Winter World Tour starting December 2012</title><link>http://feedproxy.google.com/~r/jongalloway/~3/SEM6qxJuMk8/announcing-a-web-camps-winter-world-tour-starting-december-2012.aspx</link><pubDate>Fri, 30 Nov 2012 23:50:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:9493653</guid><dc:creator>Jon Galloway</dc:creator><slash:comments>20</slash:comments><wfw:commentRss>http://weblogs.asp.net/jgalloway/rsscomments.aspx?PostID=9493653</wfw:commentRss><comments>http://weblogs.asp.net/jgalloway/archive/2012/11/30/announcing-a-web-camps-winter-world-tour-starting-december-2012.aspx#comments</comments><description>&lt;p&gt;We have a great lineup of international &lt;a href="http://www.devcamps.ms/web" mce_href="http://www.devcamps.ms/web"&gt;Web Camps&lt;/a&gt; events scheduled for the next month. Come join us! Space for these events really is limited, so if you want to get in on them you need to sign up fast.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devcamps.ms/web" mce_href="http://devcamps.ms/web"&gt;&lt;img style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; background-image: none;" src="http://farm9.staticflickr.com/8207/8233839132_dacee0a76f_o.png" border="0" mce_src="http://farm9.staticflickr.com/8207/8233839132_dacee0a76f_o.png"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;Web Camps: Free, one day events to show you how to make the most of the Microsoft web platform&lt;/h2&gt;  &lt;p&gt;Web Camps are an amazing opportunity to &lt;strong&gt;see how Visual Studio 2012, ASP.NET 4.5, ASP.NET MVC 4 and Windows Azure fit together, and how you can put them to work today to solve real world problems, leveraging cutting edge web technologies.&lt;/strong&gt;&lt;/p&gt;  &lt;h2&gt;ASP.NET today is about more than web pages&lt;/h2&gt;  &lt;p&gt;ASP.NET today is also about services running on ASP.NET Web API in the cloud, powering your Windows 8 applications, applications for Office, social website integration and more. ASP.NET on Windows Azure can be the hub that ties your development strategy together. This day's content is designed to show you how you can use the Microsoft web platform to rule - well, of course the web - but also the rest of the universe.&lt;/p&gt;  &lt;h2&gt;Play along! Learn, build and deploy working apps throughout the day!&lt;/h2&gt;  &lt;p&gt;Everyone knows that you learn best when you're doing, not just watching. And a website isn't done until it's deployed, right? So we'll be taking advantage of the free offerings from Windows Azure Web Sites to build and deploy working applications throughout the day, and we'll show you how you can, too, as you&amp;nbsp; &lt;strong&gt;follow along with us as we build and deploy multiple ASP.NET solutions to &lt;/strong&gt;&lt;a href="http://aka.ms/azuremobile-hc" mce_href="http://aka.ms/azuremobile-hc"&gt;&lt;strong&gt;Windows Azure Web Sites&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; throughout the day&lt;/strong&gt;.&lt;/p&gt;  &lt;h2&gt;December Tour&lt;/h2&gt; &lt;style&gt;






table.minimal { border-collapse: collapse; }
table.minimal th, table.minimal td { border: 1px solid black; }&lt;/style&gt;  &lt;table width="890" class="minimal"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;th&gt;Location&lt;/th&gt;        &lt;th&gt;Date&lt;/th&gt;        &lt;th&gt;Notes&lt;/th&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;Vancouver, Canada&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;4-Dec-12&lt;/td&gt;        &lt;td&gt;With &lt;a href="http://www.bradygaster.com" mce_href="http://www.bradygaster.com"&gt;Brady Gaster&lt;/a&gt; and &lt;a href="https://twitter.com/xinqiu" mce_href="https://twitter.com/xinqiu"&gt;Xinyang Qiu&lt;/a&gt; and &lt;strong&gt;me&lt;/strong&gt;. This one will be &lt;strong&gt;live streamed&lt;/strong&gt;, and there's still a little more room at the event, too! Info &lt;a href="http://blogs.msdn.com/b/cdndevs/archive/2012/11/28/building-beautiful-interactive-and-fast-web-sites.aspx" mce_href="http://blogs.msdn.com/b/cdndevs/archive/2012/11/28/building-beautiful-interactive-and-fast-web-sites.aspx"&gt;here&lt;/a&gt;.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;Stockholm, Sweden&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;10-Dec-12&lt;/td&gt;        &lt;td&gt;With &lt;a href="http://blog.ntotten.com/" mce_href="http://blog.ntotten.com/"&gt;Nathen Totten&lt;/a&gt; and &lt;a href="http://madskristensen.net/" mce_href="http://madskristensen.net/"&gt;Mads Kristensen&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;Hong Kong&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;12-Dec-12&lt;/td&gt;        &lt;td&gt;With &lt;a href="http://haishibai.blogspot.com/" mce_href="http://haishibai.blogspot.com/"&gt;Haishi Bai&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/b/hpctrekker/" mce_href="http://blogs.msdn.com/b/hpctrekker/"&gt;Wenming Ye&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;Copenhagen, Denmark&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;12-Dec-12&lt;/td&gt;        &lt;td&gt;With &lt;a href="http://blog.ntotten.com/" mce_href="http://blog.ntotten.com/"&gt;Nathen Totten&lt;/a&gt; and &lt;a href="http://madskristensen.net/" mce_href="http://madskristensen.net/"&gt;Mads Kristensen&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;Bangkok, Thailand&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;14-Dec-12&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;Me&lt;/strong&gt;! Hopefully a special guest, too.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;Singapore&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;17-Dec-12&lt;/td&gt;        &lt;td&gt;Also &lt;strong&gt;me&lt;/strong&gt;! Also maybe a special guest.&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;Details and registration links are on the DevCamps site: &lt;a href="http://www.devcamps.ms/web/schedule" mce_href="http://www.devcamps.ms/web/schedule"&gt;http://www.devcamps.ms/web/schedule&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;In the works (location and speaker TBD)&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;1/28 - India &lt;/li&gt;    &lt;li&gt;1/30 - India &lt;/li&gt;    &lt;li&gt;2/18 - Germany &lt;/li&gt;    &lt;li&gt;2/20 - Russia &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Want one in your area? Tell your local Microsoft developer evangelist folks!&lt;/p&gt;  &lt;h2&gt;Fresh Web content!&lt;/h2&gt;  &lt;p&gt;We are updating the Web Camps content to focus on putting the latest web platform releases to use. We will start the day with a look at the key building blocks (Visual Studio 2012, ASP.NET 4.5, ASP.NET MVC and ASP.NET Web API) - including a look at the ASP.NET Fall 2012 Update announced at //build/. Then we will put them to work in a number of short targeted sessions focused on some key web application scenarios:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Keynote: The ASP.NET Web Platform in Context &lt;/li&gt;    &lt;li&gt;What’s new in ASP.NET 4.5 &lt;/li&gt;    &lt;li&gt;Building and deploying websites with ASP.NET MVC 4 &lt;/li&gt;    &lt;li&gt;Creating HTML5 Applications with jQuery &lt;/li&gt;    &lt;li&gt;Building a service layer with ASP.NET Web API &lt;/li&gt;    &lt;li&gt;Leveraging your ASP.NET development skills to build apps for Office &lt;/li&gt;    &lt;li&gt;Building and leveraging social web apps in ASP.NET &lt;/li&gt;    &lt;li&gt;Building for the mobile web &lt;/li&gt;    &lt;li&gt;Real-time communications with SignalR &lt;/li&gt;    &lt;li&gt;Using Cloud Application Services &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The full agenda is available here: &lt;a href="http://www.devcamps.ms/web/agenda" mce_href="http://www.devcamps.ms/web/agenda"&gt;http://www.devcamps.ms/web/agenda&lt;/a&gt;.&amp;nbsp;&amp;nbsp; All of the slides, demos, and hands-on labs will be available for download at &lt;a href="http://www.devcamps.ms/web/downloads" mce_href="http://www.devcamps.ms/web/downloads"&gt;http://www.devcamps.ms/web/downloads&lt;/a&gt; quite soon. &lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=9493653" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=SEM6qxJuMk8:jUYbDlAYv3I:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=SEM6qxJuMk8:jUYbDlAYv3I:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?i=SEM6qxJuMk8:jUYbDlAYv3I:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=SEM6qxJuMk8:jUYbDlAYv3I:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=SEM6qxJuMk8:jUYbDlAYv3I:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?i=SEM6qxJuMk8:jUYbDlAYv3I:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=SEM6qxJuMk8:jUYbDlAYv3I:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jongalloway/~4/SEM6qxJuMk8" height="1" width="1"/&gt;</description><feedburner:origLink>http://weblogs.asp.net/jgalloway/archive/2012/11/30/announcing-a-web-camps-winter-world-tour-starting-december-2012.aspx</feedburner:origLink></item><item><title>Ten - oh, wait, eleven - Eleven things you should know about the ASP.NET Fall 2012 Update</title><link>http://feedproxy.google.com/~r/jongalloway/~3/hHC6KaW2rU8/ten-oh-wait-eleven-eleven-things-you-should-know-about-the-asp-net-fall-2012-update.aspx</link><pubDate>Thu, 01 Nov 2012 00:42:45 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:9269167</guid><dc:creator>Jon Galloway</dc:creator><slash:comments>140</slash:comments><wfw:commentRss>http://weblogs.asp.net/jgalloway/rsscomments.aspx?PostID=9269167</wfw:commentRss><comments>http://weblogs.asp.net/jgalloway/archive/2012/10/31/ten-oh-wait-eleven-eleven-things-you-should-know-about-the-asp-net-fall-2012-update.aspx#comments</comments><description>&lt;p&gt;Today, just a little over two months after the big ASP.NET 4.5 / ASP.NET MVC 4 / ASP.NET Web API / Visual Studio 2012 / Web Matrix 2 release, the first preview of the ASP.NET Fall 2012 Update is out. Here's what you need to know:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;There are no new framework bits in this release - there's no change or update to ASP.NET Core, ASP.NET MVC or Web Forms features. This means that you can start using it without any updates to your server, upgrade concerns, etc. &lt;/li&gt;    &lt;li&gt;This update is really an update to the project templates and Visual Studio tooling, conceptually similar to the ASP.NET MVC 3 Tools Update. &lt;/li&gt;    &lt;li&gt;It's a relatively lightweight install. It's a 41MB download. I've installed it many times and usually takes 5-7 minutes; it's never required a reboot. You can download it &lt;a href="http://www.asp.net/vnext"&gt;here&lt;/a&gt;.&lt;/li&gt;    &lt;li&gt;It adds some new project templates to ASP.NET MVC: Facebook Application and Single Page Application templates. &lt;/li&gt;    &lt;li&gt;It adds a lot of cool enhancements to ASP.NET Web API. &lt;/li&gt;    &lt;li&gt;It adds some tooling that makes it easy to take advantage of features like SignalR, Friendly URLs, and Windows Azure Authentication. &lt;/li&gt;    &lt;li&gt;Most of the new features are installed via NuGet packages - some from Microsoft, a few from the community.&lt;/li&gt;    &lt;li&gt;Since ASP.NET is open source, nightly NuGet packages are available, and the &lt;a href="http://aspnet.codeplex.com"&gt;roadmap is published&lt;/a&gt;, most of this has really been publicly available for a while. &lt;/li&gt;    &lt;li&gt;The official name of this drop is the ASP.NET Fall 2012 Update BUILD Prerelease. Please do not attempt to say that ten times fast. While the EULA doesn't prohibit it, it WILL legally change your first name to Scott. &lt;/li&gt;    &lt;li&gt;As with all new releases, you can find out everything you need to know about the Fall Update at &lt;a href="http://asp.net/vnext"&gt;http://asp.net/vnext&lt;/a&gt; (&lt;strong&gt;especially the &lt;/strong&gt;&lt;a href="http://www.asp.net/vnext/overview/fall-2012-update/aspnet-fall-2012-update-release-notes"&gt;&lt;strong&gt;release notes&lt;/strong&gt;&lt;/a&gt;!) &lt;/li&gt;    &lt;li&gt;I'm going to be showing all of this off, assisted by special guest code monkey Scott Hanselman, this Friday at BUILD: &lt;a href="http://channel9.msdn.com/Events/Build/2012/3-028"&gt;Bleeding edge ASP.NET: See what is next for MVC, Web API, SignalR and more…&lt;/a&gt; (and I've heard it will be livestreamed). &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Let's look at some of those things in more detail.&lt;/p&gt;  &lt;h2&gt;No new bits&lt;/h2&gt;  &lt;p&gt;ASP.NET 4.5, MVC 4 and Web API have a lot of great core features. I see the goal of this update release as making it easier to put those features to use to solve some useful scenarios by taking advantage of NuGet packages and template code.&lt;/p&gt;  &lt;p&gt;If you create a new ASP.NET MVC application using one of the new templates, you'll see that it's using the ASP.NET MVC 4 RTM NuGet package (4.0.20710.0):&lt;/p&gt;  &lt;p&gt;&lt;img src="http://farm9.staticflickr.com/8466/8142901667_3bf4d6d30f_b.jpg" width="767" height="454" /&gt;&lt;/p&gt;  &lt;p&gt;This means you can install and use the Fall Update without any impact on your existing projects and no worries about upgrading or compatibility.&lt;/p&gt;  &lt;h2&gt;New Facebook Application Template&lt;/h2&gt;  &lt;p&gt;ASP.NET MVC 4 (and ASP.NET 4.5 Web Forms) included the ability to authenticate your users via OAuth and OpenID, so you could let users log in to your site using a Facebook account. One of the new changes in the Fall Update is a new template that makes it really easy to create full Facebook applications. &lt;/p&gt;  &lt;p&gt;&lt;img src="http://farm9.staticflickr.com/8046/8143027695_9995abcf7c_b.jpg" /&gt;&lt;/p&gt;  &lt;p&gt;You could create Facebook application in ASP.NET already, you'd just need to go through a few steps:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Search around to find a good Facebook NuGet package, like the &lt;a href="http://nuget.org/packages/Facebook"&gt;Facebook C# SDK&lt;/a&gt; (written by my friend &lt;a href="http://blog.ntotten.com/"&gt;Nathan Totten&lt;/a&gt; and some other Facebook SDK brainiacs). &lt;/li&gt;    &lt;li&gt;Read the Facebook developer documentation to figure out how to authenticate and integrate with them. &lt;/li&gt;    &lt;li&gt;Write some code, debug it and repeat until you got something working. &lt;/li&gt;    &lt;li&gt;Get started with the application you'd originally wanted to write. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;What this template does for you: eliminate steps 1-3.&lt;/p&gt;  &lt;p&gt;Erik Porter, Nathan and some other experts built out the Facebook Application template so it automatically pulls in and configures the Facebook NuGet package and makes it really easy to take advantage of it in an ASP.NET MVC application.&lt;/p&gt;  &lt;p&gt;One great example is the the way you access a Facebook user's information. Take a look at the following code in a File / New / MVC / Facebook Application site. First, the Home Controller Index action:&lt;/p&gt;  &lt;pre class="brush: csharp; auto-links: false;"&gt;[FacebookAuthorize(Permissions = &amp;quot;email&amp;quot;)]
public ActionResult Index(MyAppUser user, FacebookObjectList&amp;lt;MyAppUserFriend&amp;gt; userFriends)
{
    ViewBag.Message = &amp;quot;Modify this template to jump-start your Facebook application using ASP.NET MVC.&amp;quot;;

    ViewBag.User = user;
    ViewBag.Friends = userFriends.Take(5);

    return View();
}&lt;/pre&gt;

&lt;p&gt;First, notice that there's a FacebookAuthorize attribute which requires the user is authenticated via Facebook and requires permissions to access their e-mail address. It binds to two things: a custom MyAppUser object and a list of friends. Let's look at the MyAppUser code:&lt;/p&gt;

&lt;pre class="brush: csharp; auto-links: false;"&gt;using Microsoft.AspNet.Mvc.Facebook.Attributes;
using Microsoft.AspNet.Mvc.Facebook.Models;

// Add any fields you want to be saved for each user and specify the field name in the JSON coming back from Facebook
// https://developers.facebook.com/docs/reference/api/user/

namespace MvcApplication3.Models
{
    public class MyAppUser : FacebookUser
    {
        public string Name { get; set; }

        [FacebookField(FieldName = &amp;quot;picture&amp;quot;, JsonField = &amp;quot;picture.data.url&amp;quot;)]
        public string PictureUrl { get; set; }

        public string Email { get; set; }
    }
}&lt;/pre&gt;

&lt;p&gt;You can add in other custom fields if you want, but you can also just bind to a FacebookUser and it will automatically pull in the available fields. You can even just bind directly to a FacebookUser and check for what's available in debug mode, which makes it really easy to explore.&lt;/p&gt;

&lt;p&gt;For more information and some walkthroughs on creating Facebook applications, see:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;h5&gt;&lt;a href="http://blogs.msdn.com/b/webdev/archive/2012/10/31/deploying-your-first-facebook-app-on-azure-using-asp-net-mvc-facebook-template.aspx"&gt;Deploying your first Facebook App on Azure using ASP.NET MVC Facebook Template&lt;/a&gt; (Yao Huang Lin)&lt;/h5&gt;
  &lt;/li&gt;

  &lt;li&gt;
    &lt;p&gt;&lt;a href="http://www.asp.net/vnext/overview/fall-2012-update/facebook-application-template-tutorial"&gt;Facebook Application Template Tutorial&lt;/a&gt; (Erik Porter)&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Single Page Application template&lt;/h2&gt;

&lt;p&gt;Early releases of ASP.NET MVC 4 included a Single Page Application template, but it was removed for the official release. There was a lot of interest in it, but it was kind of complex, as it handled features for things like data management. The new Single Page Application template that ships with the Fall Update is more lightweight. It uses Knockout.js on the client and ASP.NET Web API on the server, and it includes a sample application that shows how they all work together.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://farm9.staticflickr.com/8053/8143078382_8c582e06ce_b.jpg" /&gt;&lt;/p&gt;

&lt;p&gt;I think the real benefit of this application is that it shows a good pattern for using ASP.NET Web API and Knockout.js. For instance, it's easy to end up with a mess of JavaScript when you're building out a client-side application. This template uses three separate JavaScript files (delivered via a Bundle, of course):&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;todoList.js - this is where the main client-side logic lives &lt;/li&gt;

  &lt;li&gt;todoList.dataAccess.js - this defines how the client-side application interacts with the back-end services &lt;/li&gt;

  &lt;li&gt;todoList.bindings.js - this is where you set up events and overrides for the Knockout bindings - for instance, hooking up jQuery validation and defining some client-side events &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is a fun one to play with, because you can just create a new Single Page Application and hit F5.&lt;/p&gt;

&lt;h2&gt;Quick, easy install (with one gotcha)&lt;/h2&gt;

&lt;p&gt;One of the cool engineering changes for this release is a big update to the installer to make it more lightweight and efficient. I've been running nightly builds of this for a few weeks to prep for my BUILD demos, and the install has been really quick and easy to use. The install takes about 5 minutes, has never required a reboot for me, and the uninstall is just as simple.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://farm9.staticflickr.com/8052/8143102306_94c5c76f21_o_d.png" /&gt;&lt;/p&gt;

&lt;p&gt;There's one gotcha, though. In this preview release, you may hit an issue that will require you to uninstall and re-install the NuGet VSIX package. The problem comes up when you create a new MVC application and see this dialog:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://i1.asp.net/umbraco-beta-media/3733195/image001.png" /&gt;&lt;/p&gt;

&lt;p&gt;The solution, as &lt;a href="http://www.asp.net/vnext/overview/fall-2012-update/aspnet-fall-2012-update-release-notes#_Known_Issues_and"&gt;explained in the release notes&lt;/a&gt;, is to uninstall and re-install the NuGet VSIX package:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Start Visual Studio 2012 as an Administrator &lt;/li&gt;

  &lt;li&gt;Go to Tools-&amp;gt;Extensions and Updates and uninstall NuGet. &lt;/li&gt;

  &lt;li&gt;Close Visual Studio &lt;/li&gt;

  &lt;li&gt;Navigate to the ASP.NET Fall 2012 Update installation folder: 
    &lt;ol&gt;
      &lt;li&gt;For Visual Studio 2012: &lt;b&gt;Program Files\Microsoft ASP.NET\ASP.NET Web Stack\Visual Studio 2012&lt;/b&gt; &lt;/li&gt;

      &lt;li&gt;For Visual Studio 2012 Express for Web: &lt;b&gt;Program Files\Microsoft ASP.NET\ASP.NET Web Stack\Visual Studio Express 2012 for Web&lt;/b&gt; &lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;

  &lt;li&gt;Double click on the NuGet.Tools.vsix to reinstall NuGet &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This took me under a minute to do, and I was up and running.&lt;/p&gt;

&lt;h2&gt;ASP.NET Web API Update Extravaganza!&lt;/h2&gt;

&lt;p&gt;Uh, the Web API team is out of hand. They added a ton of new stuff: OData support, Tracing, and API Help Page generation.&lt;/p&gt;

&lt;h3&gt;OData support&lt;/h3&gt;

&lt;p&gt;Some people like OData. Some people start twitching when you mention it. If you're in the first group, this is for you. You can add a [Queryable] attribute to an API that returns an IQueryable&amp;lt;Whatever&amp;gt; and you get OData query support from your clients. Then, without any extra changes to your client or server code, your clients can send filters like this: &lt;em&gt;/Suppliers?$filter=Name eq ‘Microsoft’&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;For more information about OData support in ASP.NET Web API, see Alex James' mega-post about it: &lt;a href="http://blogs.msdn.com/b/alexj/archive/2012/08/15/odata-support-in-asp-net-web-api.aspx"&gt;OData support in ASP.NET Web API&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;ASP.NET Web API Tracing&lt;/h3&gt;

&lt;p&gt;Tracing makes it really easy to leverage the .NET Tracing system from within your ASP.NET Web API's. If you look at the &lt;em&gt;\App_Start\WebApiConfig.cs&lt;/em&gt; file in new ASP.NET Web API project, you'll see a call to &lt;em&gt;TraceConfig.Register(config)&lt;/em&gt;. That calls into some code in the new &lt;em&gt;\App_Start\TraceConfig.cs &lt;/em&gt;file:&lt;/p&gt;

&lt;pre class="brush: csharp; auto-links: false;"&gt;public static void Register(HttpConfiguration configuration)
{
    if (configuration == null)
    {
        throw new ArgumentNullException(&amp;quot;configuration&amp;quot;);
    }

    SystemDiagnosticsTraceWriter traceWriter =
        new SystemDiagnosticsTraceWriter()
        {
            MinimumLevel = TraceLevel.Info,
            IsVerbose = false
        };

    configuration.Services.Replace(typeof(ITraceWriter), traceWriter);
}&lt;/pre&gt;

&lt;p&gt;As you can see, this is using the standard trace system, so you can extend it to any other trace listeners you'd like. To see how it works with the built in diagnostics trace writer, just run the application call some API's, and look at the Visual Studio Output window:&lt;/p&gt;

&lt;pre&gt;iisexpress.exe Information: 0 : Request, Method=GET, Url=http://localhost:11147/api/Values, Message='http://localhost:11147/api/Values'
iisexpress.exe Information: 0 : Message='Values', Operation=DefaultHttpControllerSelector.SelectController
iisexpress.exe Information: 0 : Message='WebAPI.Controllers.ValuesController', Operation=DefaultHttpControllerActivator.Create
iisexpress.exe Information: 0 : Message='WebAPI.Controllers.ValuesController', Operation=HttpControllerDescriptor.CreateController
iisexpress.exe Information: 0 : Message='Selected action 'Get()'', Operation=ApiControllerActionSelector.SelectAction
iisexpress.exe Information: 0 : Operation=HttpActionBinding.ExecuteBindingAsync
iisexpress.exe Information: 0 : Operation=QueryableAttribute.ActionExecuting
iisexpress.exe Information: 0 : Message='Action returned 'System.String[]'', Operation=ReflectedHttpActionDescriptor.ExecuteAsync
iisexpress.exe Information: 0 : Message='Will use same 'JsonMediaTypeFormatter' formatter', Operation=JsonMediaTypeFormatter.GetPerRequestFormatterInstance
iisexpress.exe Information: 0 : Message='Selected formatter='JsonMediaTypeFormatter', content-type='application/json; charset=utf-8'', Operation=DefaultContentNegotiator.Negotiate
iisexpress.exe Information: 0 : Operation=ApiControllerActionInvoker.InvokeActionAsync, Status=200 (OK)
iisexpress.exe Information: 0 : Operation=QueryableAttribute.ActionExecuted, Status=200 (OK)
iisexpress.exe Information: 0 : Operation=ValuesController.ExecuteAsync, Status=200 (OK)
iisexpress.exe Information: 0 : Response, Status=200 (OK), Method=GET, Url=http://localhost:11147/api/Values, Message='Content-type='application/json; charset=utf-8', content-length=unknown'
iisexpress.exe Information: 0 : Operation=JsonMediaTypeFormatter.WriteToStreamAsync
iisexpress.exe Information: 0 : Operation=ValuesController.Dispose&lt;/pre&gt;

&lt;h3&gt;API Help Page&lt;/h3&gt;

&lt;p&gt;When you create a new ASP.NET Web API project, you'll see an API link in the header:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://farm9.staticflickr.com/8049/8143158358_420a07cc2d_b.jpg" /&gt;&lt;/p&gt;

&lt;p&gt;Clicking the API link shows generated help documentation for your ASP.NET Web API controllers:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://farm9.staticflickr.com/8470/8143131215_643affc9bd_b.jpg" /&gt;&lt;/p&gt;

&lt;p&gt;And clicking on any of those APIs shows specific information:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://farm9.staticflickr.com/8469/8143133131_997a924711_b.jpg" /&gt;&lt;/p&gt;

&lt;p&gt;What's great is that this information is dynamically generated, so if you add your own new APIs it will automatically show useful and up to date help. This system is also completely extensible, so you can generate documentation in other formats or customize the HTML help as much as you'd like. The Help generation code is all included in an ASP.NET MVC Area:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://farm9.staticflickr.com/8474/8143139031_a19c9d9d3b.jpg" /&gt;&lt;/p&gt;

&lt;h2&gt;SignalR&lt;/h2&gt;

&lt;p&gt;SignalR is a really slick open source project that was started by some ASP.NET team members in their spare time to add real-time communications capabilities to ASP.NET - and .NET applications in general. It allows you to handle long running communications channels between your server and multiple connected clients using the best communications channel they can both support - websockets if available, falling back all the way to old technologies like long polling if necessary for old browsers.&lt;/p&gt;

&lt;p&gt;SignalR remains an open source project, but now it's being included in ASP.NET (also open source, hooray!). That means there's real, official ASP.NET engineering work being put into SignalR, and it's even easier to use in an ASP.NET application. Now in any ASP.NET project type, you can right-click / Add / New Item... SignalR Hub or Persistent Connection.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://farm9.staticflickr.com/8190/8143194388_d050cbf48f_b.jpg" /&gt;&lt;/p&gt;

&lt;h2&gt;And much more...&lt;/h2&gt;

&lt;p&gt;There's quite a bit more. You can find more info at &lt;a href="http://asp.net/vnext"&gt;http://asp.net/vnext&lt;/a&gt;, and we'll be adding more content as fast as we can. Watch my BUILD talk to see as I demonstrate these and other features in the ASP.NET Fall 2012 Update, as well as some other even futurey-er stuff!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=9269167" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=hHC6KaW2rU8:_dUHQEHN55U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=hHC6KaW2rU8:_dUHQEHN55U:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?i=hHC6KaW2rU8:_dUHQEHN55U:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=hHC6KaW2rU8:_dUHQEHN55U:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=hHC6KaW2rU8:_dUHQEHN55U:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?i=hHC6KaW2rU8:_dUHQEHN55U:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=hHC6KaW2rU8:_dUHQEHN55U:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jongalloway/~4/hHC6KaW2rU8" height="1" width="1"/&gt;</description><feedburner:origLink>http://weblogs.asp.net/jgalloway/archive/2012/10/31/ten-oh-wait-eleven-eleven-things-you-should-know-about-the-asp-net-fall-2012-update.aspx</feedburner:origLink></item><item><title>Professional ASP.NET MVC 4 is out!</title><link>http://feedproxy.google.com/~r/jongalloway/~3/MZX3Ab3Ajy4/professional-asp-net-mvc-4-is-out.aspx</link><pubDate>Thu, 27 Sep 2012 01:27:03 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:9001119</guid><dc:creator>Jon Galloway</dc:creator><slash:comments>35</slash:comments><wfw:commentRss>http://weblogs.asp.net/jgalloway/rsscomments.aspx?PostID=9001119</wfw:commentRss><comments>http://weblogs.asp.net/jgalloway/archive/2012/09/26/professional-asp-net-mvc-4-is-out.aspx#comments</comments><description>&lt;p&gt;Look what showed up yesterday!&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;a title="" href="http://www.flickr.com/photos/36836555@N00/8028347728/"&gt;&lt;img border="0" alt="" src="http://farm9.static.flickr.com/8031/8028347728_2053b73e16.jpg" /&gt;&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Note: These bobsledders on the cover may look familiar, but they have in fact been upgraded to ASP.NET MVC 4.&lt;/em&gt;&lt;/p&gt;  &lt;h2&gt;Up on Amazon&lt;/h2&gt;  &lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/111834846X/ref=as_li_ss_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=111834846X&amp;amp;linkCode=as2&amp;amp;tag=jongall-20"&gt;Professional ASP.NET MVC 4&lt;/a&gt; is available on Amazon, both in &lt;a href="http://www.amazon.com/gp/product/111834846X/ref=as_li_ss_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=111834846X&amp;amp;linkCode=as2&amp;amp;tag=jongall-20"&gt;paperback&lt;/a&gt; and &lt;a href="http://www.amazon.com/gp/product/B009F09SRM/ref=as_li_ss_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B009F09SRM&amp;amp;linkCode=as2&amp;amp;tag=jongall-20"&gt;Kindle&lt;/a&gt; format. At least in the US, I hear they're shipping these out really fast.&lt;/p&gt;  &lt;h2&gt;E-Book Versions&lt;/h2&gt;  &lt;p&gt;There are two E-book options, both with some nice features.&lt;/p&gt;  &lt;p&gt;The Kindle version is in color and allows you to do all the standard Kindle font size / background / layout tweaking. I think they turned out pretty nice:&lt;/p&gt;  &lt;p&gt;&lt;a title="2012-09-26_16h29_39" href="http://www.flickr.com/photos/36836555@N00/8028116648/"&gt;&lt;img border="0" alt="2012-09-26_16h29_39" src="http://farm9.static.flickr.com/8035/8028116648_41be43bf5b_b.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="2012-09-26_16h27_47" href="http://www.flickr.com/photos/36836555@N00/8028120461/"&gt;&lt;img border="0" alt="2012-09-26_16h27_47" src="http://farm9.static.flickr.com/8462/8028120461_a544cc265b_b.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The other option is to get the &lt;a href="http://www.wrox.com/WileyCDA/WroxTitle/Professional-ASP-NET-MVC-4.productCd-111834846X.html"&gt;e-book versions from Wrox&lt;/a&gt;. Those aren't in color, but they're available in three formats (PDF, Mobi, and ePub) and they're DRM free. I don't think they're available yet, but should be up in early October.&lt;/p&gt;  &lt;h2&gt;What's New&lt;/h2&gt;  &lt;p&gt;For this book, we focused on a few main things:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Updates for ASP.NET MVC 4 and Visual Studio 2012 &lt;/li&gt;    &lt;li&gt;More professional / advanced / real-world content &lt;/li&gt;    &lt;li&gt;Better flow for people who are new to ASP.NET MVC - or are experienced with it &lt;/li&gt;    &lt;li&gt;Responding to feedback and reviews &lt;/li&gt;    &lt;li&gt;ASP.NET Web API &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Updates &lt;/h3&gt;  &lt;p&gt;Obviously, we updated the content, code and screenshots for ASP.NET MVC 4 and Visual Studio 2012. Some of the implications of the updates aren't immediately obvious, though - for instance, I felt that the security chapter should consider the implications of OAuth and OpenID authentication.&lt;/p&gt;  &lt;h3&gt;Professional / Advanced / Real World Content&lt;/h3&gt;  &lt;p&gt;One bit of feedback we heard from the previous book was that it didn't have enough &amp;quot;real world&amp;quot; content. That can be kind of tricky, but it's a fair criticism. For this version of the book, we focused on two areas for that. First, we reviewed the content so that the content would flow a bit better for different skill levels - more on that next. Secondly , Phil wrote a new chapter at the very end of the book that explains how he and other ASP.NET MVC pros built and maintain the NuGet Gallery site at &lt;a href="http://nuget.org"&gt;NuGet.org&lt;/a&gt;. He covers things like exception logging, profiling, data access, migration and membership.&lt;/p&gt;  &lt;h3&gt;Better Flow&lt;/h3&gt;  &lt;p&gt;I had some beginning developers tell me that the book started throwing advanced concepts at them too early, while some advanced developers told me the book seemed too basic. After talking to people in more depth, this was really the same problem - the book's flow needed to improve. We worked to make the book build more evenly, so it starts easier at the beginning and adds in more advanced content later. While this benefits the beginner, it also lets advanced developers skip over the simple stuff and jump into meaty chapters later in the book without interruptions to teach them the basics.&lt;/p&gt;  &lt;p&gt;It's not exact, but in general Chapters 1-6 cover the basics and Chapters 7-16 cover intermediate and advanced content. So as an advanced developer, I'd recommend reading Chapter 1 to get the overview of what's new in ASP.NET MVC 4, then skimming chapters 2-6 (controllers, models, views, Ajax, and data annotations) and reading more thoroughly starting with Chapter 7 on Security.&amp;#160; One example of that is Chapter 3 on Views - it now focuses more on the beginner level stuff you need to know, and the advanced view information (like custom view engines) is covered in the Views section of the Advanced Topics chapter.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://media.wiley.com/product_data/excerpt/6X/11183484/111834846X-29.pdf"&gt;The table of contents is available as a PDF&lt;/a&gt;, take a look and see how we did.&lt;/p&gt;  &lt;h3&gt;Responding to feedback and reviews&lt;/h3&gt;  &lt;p&gt;We do take reviews - both positive and negative - seriously. We read through comments from the previous book and did our best to keep making the book better.&lt;/p&gt;  &lt;h3&gt;ASP.NET Web API&lt;/h3&gt;  &lt;p&gt;ASP.NET Web API is a big subject, and really an entire book could easily be written on it. However, since it ships with ASP.NET MVC 4 and is so useful in ASP.NET MVC applications, we felt like it would be good to have a one chapter overview. Brad wrote a great overview that explains not just what ASP.NET Web API is, but how it fits in with ASP.NET MVC.&lt;/p&gt;  &lt;h3&gt;&lt;/h3&gt;  &lt;h2&gt;What's Not New&lt;/h2&gt;  &lt;p&gt;Same amazing author team, &lt;a href="http://nuget.org/packages?q=wrox.promvc4"&gt;same way to get the sample code (NuGet)&lt;/a&gt;, same technical editor, same bobsledders. Oh, but the bobsledders have been upgraded, remember.&lt;/p&gt;  &lt;p&gt;And speaking of our technical editor, I want to call out what an amazing job &lt;a href="http://weblogs.asp.net/leftslipper/"&gt;Eilon Lipton&lt;/a&gt; does on this book. In additional to top notch technical feedback, he also regularly points out bigger issues in structure and content. He regularly recommends that we cover content or features we'd left out, or that we stop recommending something that's not a good idea, or just tells us that a part of a chapter is boring or hard to follow. The book wouldn't be what it is without his invaluable input.&lt;/p&gt;  &lt;p&gt;The whole team at Wrox has been great, too. It's both humbling and incredibly rewarding to work with a sharp editorial team, and this was another great experience.&lt;/p&gt;  &lt;h2&gt;But I already have a previous edition!&lt;/h2&gt;  &lt;p&gt;Weren't you listening? There's tons of new content. This book is about ASP.NET MVC 4 and ASP.NET Web API, what's your old book about?&lt;/p&gt;  &lt;p&gt;Look, you can still use your old copies of the book for other things. For instance, the whole &lt;em&gt;&lt;strong&gt;bobsled book family&lt;/strong&gt;&lt;/em&gt; makes a great play set... and the holidays are coming soon...&lt;/p&gt;  &lt;p&gt;&lt;a title="" href="http://www.flickr.com/photos/36836555@N00/8028351737/"&gt;&lt;img border="0" alt="" src="http://farm9.static.flickr.com/8182/8028351737_fdf7888a48.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Oh, and also Amazon's got it incredibly cheap now, so there's that. So go get it!&lt;/p&gt; &lt;iframe style="height: 240px; width: 125px" marginheight="0" src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;amp;bc1=000000&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=jongall-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=as4&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;ref=ss_til&amp;amp;asins=111834846X" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=9001119" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=MZX3Ab3Ajy4:R-S-32ymS4A:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=MZX3Ab3Ajy4:R-S-32ymS4A:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?i=MZX3Ab3Ajy4:R-S-32ymS4A:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=MZX3Ab3Ajy4:R-S-32ymS4A:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=MZX3Ab3Ajy4:R-S-32ymS4A:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?i=MZX3Ab3Ajy4:R-S-32ymS4A:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=MZX3Ab3Ajy4:R-S-32ymS4A:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jongalloway/~4/MZX3Ab3Ajy4" height="1" width="1"/&gt;</description><feedburner:origLink>http://weblogs.asp.net/jgalloway/archive/2012/09/26/professional-asp-net-mvc-4-is-out.aspx</feedburner:origLink></item><item><title>Guest (and occasional co-host) on Jesse Liberty's Yet Another Podcast</title><link>http://feedproxy.google.com/~r/jongalloway/~3/Ra72apc3dYY/guest-and-occasional-co-host-on-jesse-liberty-s-yet-another-podcast.aspx</link><pubDate>Fri, 07 Sep 2012 00:05:16 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:8897229</guid><dc:creator>Jon Galloway</dc:creator><slash:comments>31</slash:comments><wfw:commentRss>http://weblogs.asp.net/jgalloway/rsscomments.aspx?PostID=8897229</wfw:commentRss><comments>http://weblogs.asp.net/jgalloway/archive/2012/09/06/guest-and-occasional-co-host-on-jesse-liberty-s-yet-another-podcast.aspx#comments</comments><description>&lt;p&gt;I was a recent guest on Jesse Liberty's Yet Another Podcast talking about the latest Visual Studio, ASP.NET and Azure releases.&lt;/p&gt;  &lt;h2&gt;Download / Listen: &lt;/h2&gt;  &lt;p&gt;&lt;a href="http://jesseliberty.com/wp-content/media/Show75.mp3"&gt;Yet Another Podcast #75–Jon Galloway on ASP.NET/ MVC/ Azure&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;Co-hosted shows:&lt;/h2&gt;  &lt;p&gt;Jesse's been inviting me to co-host shows and I told him I'd show up when I was available. It's a nice change to be a drive-by co-host on a show (compared with the work that goes into organizing / editing / typing show notes for Herding Code shows). My main focus is on &lt;a href="http://herdingcode.com/"&gt;Herding Code&lt;/a&gt;, but it's nice to pop in and talk to Jesse's excellent guests when it works out. Some shows I've co-hosted over the past year:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://jesseliberty.com/wp-content/media/Show76.mp3"&gt;Yet Another Podcast #76–Glenn Block on Node.js &amp;amp; Technology in China&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://jesseliberty.com/wp-content/media/Show74.mp3"&gt;Yet Another Podcast&amp;#160; #73 - Adam Kinney on developing for Windows 8 with HTML5&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://jesseliberty.com/wp-content/media/Show64.mp3"&gt;Yet Another Podcast #64 - John Papa &amp;amp; Javascript&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://jesseliberty.com/wp-content/media/Show60.mp3"&gt;Yet Another Podcast #60 - Steve Sanderson and John Papa on Knockout.js&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://jesseliberty.com/wp-content/media/Show54.mp3"&gt;Yet Another Podcast #54–Damian Edwards on ASP.NET&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://jesseliberty.com/wp-content/media/Show53.mp3"&gt;Yet Another Podcast #53–Scott Hanselman on Blogging&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://jesseliberty.com/wp-content/media/Show52.mp3"&gt;Yet Another Podcast #52–Peter Torr on Windows Phone Multitasking&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://jesseliberty.com/wp-content/media/Show51.mp3"&gt;Yet Another Podcast #51–Shawn Wildermuth: //build, Xaml Programming &amp;amp; Beyond&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And some more on the way that haven't been released yet. Some of these I'm pretty quiet, on others I get wacky and hassle the guests because, hey, not my podcast so not my problem.&lt;/p&gt;  &lt;h2&gt;Show notes from the ASP.NET / MVC / Azure show:&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;What was just released&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Visual Studio 2012 Web Developer features&lt;/li&gt;      &lt;li&gt;ASP.NET 4.5 Web Forms&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;Strongly Typed data controls&lt;/li&gt;        &lt;li&gt;Data access via command methods&lt;/li&gt;        &lt;li&gt;Similar Binding syntax to ASP.NET MVC&lt;/li&gt;        &lt;li&gt;Some context: Damian Edwards and WebFormsMVP&lt;/li&gt;        &lt;li&gt;Two questions from Jesse:&lt;/li&gt;        &lt;ul&gt;         &lt;li&gt;Q: Are you making this harder or more complicated for Web Forms developers?&lt;/li&gt;          &lt;ul&gt;           &lt;li&gt;Short answer: Nothing's removed, it's just a new option&lt;/li&gt;            &lt;li&gt;History of SqlDataSource, ObjectDataSource&lt;/li&gt;         &lt;/ul&gt;          &lt;li&gt;Q: If I'm using some MVC patterns, why not just move to MVC?&lt;/li&gt;          &lt;ul&gt;           &lt;li&gt;Short answer: This works really well in hybrid applications, doesn't require a rewrite&lt;/li&gt;            &lt;li&gt;Allows sharing models, validation, other code between Web Forms and MVC&lt;/li&gt;         &lt;/ul&gt;       &lt;/ul&gt;     &lt;/ul&gt;      &lt;li&gt;ASP.NET MVC&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;Adaptive Rendering (oh, also, this is in Web Forms 4.5 as well)&lt;/li&gt;        &lt;li&gt;Display Modes&lt;/li&gt;        &lt;li&gt;Mobile project template using jQuery Mobile&lt;/li&gt;        &lt;li&gt;OAuth login to allow Twitter, Google, Facebook, etc. login&lt;/li&gt;     &lt;/ul&gt;      &lt;li&gt;Jon (and friends') MVC 4 book on the way: &lt;a href="http://www.amazon.com/gp/product/111834846X?ie=UTF8&amp;amp;camp=213733&amp;amp;creative=393185&amp;amp;creativeASIN=111834846X&amp;amp;linkCode=shr&amp;amp;tag=jongall-20"&gt;Professional ASP.NET MVC 4&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;Windows 8 development&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;Jesse and Jon announce they're working on a new book: &lt;a href="http://www.amazon.com/gp/product/1430240474/ref=as_li_ss_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=1430240474&amp;amp;linkCode=as2&amp;amp;tag=jongall-20"&gt;Pro Windows 8 Development with XAML and C#&lt;/a&gt;&lt;/li&gt;        &lt;li&gt;Jon and Jesse agree that it's nice to be able to write Windows 8 applications using the same skills they picked up for Silverlight, WPF, and Windows Phone development.&lt;/li&gt;     &lt;/ul&gt;      &lt;li&gt;Compare / contrast ASP.NET MVC and Windows 8 development&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;Q: Does ASP.NET and HTML5 development overlap?&lt;/li&gt;        &lt;ul&gt;         &lt;li&gt;Jon thinks they overlap in the MVC world because you're writing HTML views without controls&lt;/li&gt;          &lt;li&gt;Jon describes how his web development career moved from a preoccupation with server code to a focus on user interaction, which occurs in the browser&lt;/li&gt;          &lt;li&gt;Jon mentions his &lt;a href="http://weblogs.asp.net/jgalloway/archive/2012/06/18/quot-learning-to-love-html-and-css-for-grumpy-developers-quot-presentation-from-ndc-2012.aspx"&gt;NDC Oslo presentation on Learning To Love HTML as Beautiful Code&lt;/a&gt;&lt;/li&gt;       &lt;/ul&gt;        &lt;li&gt;Q: How do you apply C# / XAML or HTML5 skills to Windows 8 development? &lt;/li&gt;        &lt;li&gt;Q: If I'm a XAML programmer, what's the learning curve on getting up to speed on ASP.NET MVC?&lt;/li&gt;        &lt;ul&gt;         &lt;li&gt;Jon describes the difference in application lifecycle and state management&lt;/li&gt;          &lt;li&gt;Jon says it's nice that web development is really interactive compared to application development&lt;/li&gt;       &lt;/ul&gt;        &lt;li&gt;Q: Can you learn MVC by reading a book? Or is it a lot bigger than that?&lt;/li&gt;     &lt;/ul&gt;      &lt;li&gt;What is Azure, and why would I use it?&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;Jon describes the traditional Azure platform mode and how Azure Web Sites fits in&lt;/li&gt;        &lt;li&gt;Q: Why wouldn't Jesse host his blog on Azure Web Sites?&lt;/li&gt;        &lt;ul&gt;         &lt;li&gt;Domain names on Azure Web Sites&lt;/li&gt;          &lt;li&gt;File hosting options&lt;/li&gt;       &lt;/ul&gt;        &lt;li&gt;Q: Is Azure just another host? How is it different from any of the other shared hosting options?&lt;/li&gt;        &lt;ul&gt;         &lt;li&gt;A: Azure gives you the ability to scale up or down whenever you want&lt;/li&gt;          &lt;li&gt;A: Other services are available if or when you want them&lt;/li&gt;       &lt;/ul&gt;     &lt;/ul&gt;   &lt;/ul&gt; &lt;/ul&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=8897229" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=Ra72apc3dYY:TM0-mFo66Vo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=Ra72apc3dYY:TM0-mFo66Vo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?i=Ra72apc3dYY:TM0-mFo66Vo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=Ra72apc3dYY:TM0-mFo66Vo:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=Ra72apc3dYY:TM0-mFo66Vo:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?i=Ra72apc3dYY:TM0-mFo66Vo:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=Ra72apc3dYY:TM0-mFo66Vo:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jongalloway/~4/Ra72apc3dYY" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/jgalloway/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/jgalloway/archive/tags/Podcast/default.aspx">Podcast</category><category domain="http://weblogs.asp.net/jgalloway/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category><enclosure url="http://jesseliberty.com/wp-content/media/Show75.mp3" length="33166851" type="audio/mpeg" /><media:content url="http://jesseliberty.com/wp-content/media/Show75.mp3" fileSize="33166851" type="audio/mpeg" /><itunes:explicit>no</itunes:explicit><itunes:subtitle> I was a recent guest on Jesse Liberty's Yet Another Podcast talking about the latest Visual Studio, ASP.NET and Azure releases. Download / Listen: Yet Another Podcast #75–Jon Galloway on ASP.NET/ MVC/ Azure Co-hosted shows: Jesse's been inviting me to co</itunes:subtitle><itunes:summary> I was a recent guest on Jesse Liberty's Yet Another Podcast talking about the latest Visual Studio, ASP.NET and Azure releases. Download / Listen: Yet Another Podcast #75–Jon Galloway on ASP.NET/ MVC/ Azure Co-hosted shows: Jesse's been inviting me to co-host shows and I told him I'd show up when I was available. It's a nice change to be a drive-by co-host on a show (compared with the work that goes into organizing / editing / typing show notes for Herding Code shows). My main focus is on Herding Code, but it's nice to pop in and talk to Jesse's excellent guests when it works out. Some shows I've co-hosted over the past year: Yet Another Podcast #76–Glenn Block on Node.js &amp;amp; Technology in China Yet Another Podcast&amp;#160; #73 - Adam Kinney on developing for Windows 8 with HTML5 Yet Another Podcast #64 - John Papa &amp;amp; Javascript Yet Another Podcast #60 - Steve Sanderson and John Papa on Knockout.js Yet Another Podcast #54–Damian Edwards on ASP.NET Yet Another Podcast #53–Scott Hanselman on Blogging Yet Another Podcast #52–Peter Torr on Windows Phone Multitasking Yet Another Podcast #51–Shawn Wildermuth: //build, Xaml Programming &amp;amp; Beyond And some more on the way that haven't been released yet. Some of these I'm pretty quiet, on others I get wacky and hassle the guests because, hey, not my podcast so not my problem. Show notes from the ASP.NET / MVC / Azure show: What was just released Visual Studio 2012 Web Developer features ASP.NET 4.5 Web Forms Strongly Typed data controls Data access via command methods Similar Binding syntax to ASP.NET MVC Some context: Damian Edwards and WebFormsMVP Two questions from Jesse: Q: Are you making this harder or more complicated for Web Forms developers? Short answer: Nothing's removed, it's just a new option History of SqlDataSource, ObjectDataSource Q: If I'm using some MVC patterns, why not just move to MVC? Short answer: This works really well in hybrid applications, doesn't require a rewrite Allows sharing models, validation, other code between Web Forms and MVC ASP.NET MVC Adaptive Rendering (oh, also, this is in Web Forms 4.5 as well) Display Modes Mobile project template using jQuery Mobile OAuth login to allow Twitter, Google, Facebook, etc. login Jon (and friends') MVC 4 book on the way: Professional ASP.NET MVC 4 Windows 8 development Jesse and Jon announce they're working on a new book: Pro Windows 8 Development with XAML and C# Jon and Jesse agree that it's nice to be able to write Windows 8 applications using the same skills they picked up for Silverlight, WPF, and Windows Phone development. Compare / contrast ASP.NET MVC and Windows 8 development Q: Does ASP.NET and HTML5 development overlap? Jon thinks they overlap in the MVC world because you're writing HTML views without controls Jon describes how his web development career moved from a preoccupation with server code to a focus on user interaction, which occurs in the browser Jon mentions his NDC Oslo presentation on Learning To Love HTML as Beautiful Code Q: How do you apply C# / XAML or HTML5 skills to Windows 8 development? Q: If I'm a XAML programmer, what's the learning curve on getting up to speed on ASP.NET MVC? Jon describes the difference in application lifecycle and state management Jon says it's nice that web development is really interactive compared to application development Q: Can you learn MVC by reading a book? Or is it a lot bigger than that? What is Azure, and why would I use it? Jon describes the traditional Azure platform mode and how Azure Web Sites fits in Q: Why wouldn't Jesse host his blog on Azure Web Sites? Domain names on Azure Web Sites File hosting options Q: Is Azure just another host? How is it different from any of the other shared hosting options? A: Azure gives you the ability to scale up or down whenever you want A: Other services are available if or when you want them </itunes:summary><itunes:keywords>ASP.NET, Podcast, ASP.NET MVC</itunes:keywords><feedburner:origLink>http://weblogs.asp.net/jgalloway/archive/2012/09/06/guest-and-occasional-co-host-on-jesse-liberty-s-yet-another-podcast.aspx</feedburner:origLink></item><item><title>SimpleMembership, Membership Providers, Universal Providers and the new ASP.NET 4.5 Web Forms and ASP.NET MVC 4 templates</title><link>http://feedproxy.google.com/~r/jongalloway/~3/1X2H1SvAX-M/simplemembership-membership-providers-universal-providers-and-the-new-asp-net-4-5-web-forms-and-asp-net-mvc-4-templates.aspx</link><pubDate>Thu, 30 Aug 2012 02:42:22 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:8878304</guid><dc:creator>Jon Galloway</dc:creator><slash:comments>913</slash:comments><wfw:commentRss>http://weblogs.asp.net/jgalloway/rsscomments.aspx?PostID=8878304</wfw:commentRss><comments>http://weblogs.asp.net/jgalloway/archive/2012/08/29/simplemembership-membership-providers-universal-providers-and-the-new-asp-net-4-5-web-forms-and-asp-net-mvc-4-templates.aspx#comments</comments><description>&lt;p&gt;The ASP.NET MVC 4 Internet template adds some new, very useful features which are built on top of SimpleMembership. These changes add some great features, like a much simpler and extensible membership API and support for OAuth. However, the new account management features require SimpleMembership and won't work against existing ASP.NET Membership Providers. I'll start with a summary of top things you need to know, then dig into a lot more detail.&lt;/p&gt;  &lt;p&gt;Summary:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;SimpleMembership has been designed as a replacement for the previous ASP.NET Role and Membership provider system &lt;/li&gt;    &lt;li&gt;SimpleMembership solves common problems developers ran into with the Membership provider system and was designed for modern user / membership / storage needs &lt;/li&gt;    &lt;li&gt;SimpleMembership integrates with the previous membership system, but you can't use a MembershipProvider with SimpleMembership &lt;/li&gt;    &lt;li&gt;The new ASP.NET MVC 4 Internet application template AccountController requires SimpleMembership and is not compatible with previous MembershipProviders &lt;/li&gt;    &lt;li&gt;You can continue to use existing ASP.NET Role and Membership providers in ASP.NET 4.5 and ASP.NET MVC 4 - just not with the ASP.NET MVC 4 AccountController &lt;/li&gt;    &lt;li&gt;The existing ASP.NET Role and Membership provider system remains supported, as it is part of the ASP.NET core &lt;/li&gt;    &lt;li&gt;ASP.NET 4.5 Web Forms does not use SimpleMembership; it implements OAuth on top of ASP.NET Membership &lt;/li&gt;    &lt;li&gt;The ASP.NET Web Site Administration Tool (WSAT) is not compatible with SimpleMembership &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The following is the result of a few conversations with Erik Porter (PM for ASP.NET MVC) to make sure I had some the overall details straight, combined with a lot of time digging around in ILSpy and Visual Studio's assembly browsing tools.&lt;/p&gt;  &lt;h2&gt;SimpleMembership: The future of membership for ASP.NET&lt;/h2&gt;  &lt;p&gt;The &lt;a href="http://msdn.microsoft.com/en-us/library/yh26yfzy(v=VS.100).aspx"&gt;ASP.NET Membership system&lt;/a&gt; was introduced with ASP.NET 2.0 back in 2005. It was designed to solve common site membership requirements at the time, which generally involved username / password based registration and profile storage in SQL Server. It was designed with a few extensibility mechanisms - notably a provider system (which allowed you override some specifics like backing storage) and the ability to store additional profile information (although the additional&amp;#160; profile information was packed into a single column which usually required access through the API). While it's sometimes frustrating to work with, it's held up for seven years - probably since it handles the main use case (username / password based membership in a SQL Server database) smoothly and can be adapted to most other needs (again, often frustrating, but it can work).&lt;/p&gt;  &lt;p&gt;The ASP.NET Web Pages and WebMatrix efforts allowed the team an opportunity to take a new look at a lot of things - e.g. the Razor syntax started with ASP.NET Web Pages, not ASP.NET MVC. The ASP.NET Web Pages team designed SimpleMembership to (wait for it) simplify the task of dealing with membership. As Matthew Osborn said in his post &lt;a href="http://blog.osbornm.com/archive/2010/07/21/using-simplemembership-with-asp.net-webpages.aspx"&gt;Using SimpleMembership With ASP.NET WebPages&lt;/a&gt;:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;With the introduction of ASP.NET WebPages and the WebMatrix stack our team has really be focusing on making things simpler for the developer. Based on a lot of customer feedback one of the areas that we wanted to improve was the built in security in ASP.NET. So with this release we took that time to create a new built in (and default for ASP.NET WebPages) security provider. I say provider because the new stuff is still built on the existing ASP.NET framework. So what do we call this new hotness that we have created? Well, none other than &lt;em&gt;SimpleMembership&lt;/em&gt;. &lt;em&gt;SimpleMembership&lt;/em&gt; is an umbrella term for both &lt;em&gt;SimpleMembership&lt;/em&gt; and &lt;em&gt;SimpleRoles&lt;/em&gt;.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Part of simplifying membership involved fixing some common problems with ASP.NET Membership.&lt;/p&gt;  &lt;h2&gt;Problems with ASP.NET Membership&lt;/h2&gt;  &lt;p&gt;ASP.NET Membership was very obviously designed around a set of assumptions:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Users and user information would most likely be stored in a full SQL Server database or in Active Directory &lt;/li&gt;    &lt;li&gt;User and profile information would be optimized around a set of common attributes (UserName, Password, IsApproved, CreationDate, Comment, Role membership...) and other user profile information would be accessed through a profile provider &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Some problems fall out of these assumptions.&lt;/p&gt;  &lt;h3&gt;Requires Full SQL Server for default cases&lt;/h3&gt;  &lt;p&gt;The default, and most fully featured providers ASP.NET Membership providers (SQL Membership Provider, SQL Role Provider, SQL Profile Provider) require full SQL Server. They depend on stored procedure support, and they rely on SQL Server cache dependencies, they depend on agents for clean up and maintenance. So the main SQL Server based providers don't work well on SQL Server CE, won't work out of the box on SQL Azure, etc.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Note: &lt;/em&gt;&lt;a href="http://blog.syntaxc4.net/"&gt;&lt;em&gt;Cory Fowler&lt;/em&gt;&lt;/a&gt;&lt;em&gt; recently let me know about these &lt;/em&gt;&lt;a href="http://support.microsoft.com/kb/2006191"&gt;&lt;em&gt;Updated ASP.net scripts for use with Microsoft SQL Azure&lt;/em&gt;&lt;/a&gt;&lt;em&gt; which do support membership, personalization, profile, and roles. But the fact that we need a support page with a set of separate SQL scripts underscores the underlying problem.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Aha, you say! Jon's forgetting the Universal Providers, a.k.a. System.Web.Providers! Hold on a bit, we'll get to those...&lt;/p&gt;  &lt;h3&gt;Custom Membership Providers have to work with a SQL-Server-centric API&lt;/h3&gt;  &lt;p&gt;If you want to work with another database or other membership storage system, you need to to inherit from the provider base classes and override a bunch of methods which are tightly focused on storing a MembershipUser in a relational database. It can be done (and you can often find pretty good ones that have already been written), but it's a good amount of work and often leaves you with ugly code that has a bunch of System.NotImplementedException fun since there are a lot of methods that just don't apply.&lt;/p&gt;  &lt;h3&gt;Designed around a specific view of users, roles and profiles&lt;/h3&gt;  &lt;p&gt;The existing providers are focused on traditional membership - a user has a username and a password, some specific roles on the site (e.g. administrator, premium user), and may have some additional &amp;quot;nice to have&amp;quot; optional information that can be accessed via an API in your application.&lt;/p&gt;  &lt;p&gt;This doesn't fit well with some modern usage patterns:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;In OAuth and OpenID, the user doesn't have a password &lt;/li&gt;    &lt;li&gt;Often these kinds of scenarios map better to user claims or rights instead of monolithic user roles &lt;/li&gt;    &lt;li&gt;For many sites, profile or other non-traditional information is very important and needs to come from somewhere other than an API call that maps to a database blob &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;What would work a lot better here is a system in which you were able to define your users, rights, and other attributes however you wanted and the membership system worked with your model - not the other way around.&lt;/p&gt;  &lt;h3&gt;Requires specific schema, overflow in blob columns&lt;/h3&gt;  &lt;p&gt;I've already mentioned this a few times, but it bears calling out separately - ASP.NET Membership focuses on SQL Server storage, and that storage is based on a very specific database schema.&lt;/p&gt;  &lt;p&gt;&lt;a title="aspnet_tutorial04_MembershipSetup_vb_figure10[1]" href="http://www.flickr.com/photos/36836555@N00/7883787192/"&gt;&lt;img border="0" alt="aspnet_tutorial04_MembershipSetup_vb_figure10[1]" src="http://farm9.static.flickr.com/8296/7883787192_44be268b3c.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: This schema has been improved a lot with Universal Providers. The views and stored procedures have been removed, and the tables are simplified.&lt;/p&gt;  &lt;p&gt;&lt;a title="2012-09-05_16h12_30" href="http://www.flickr.com/photos/36836555@N00/7940059070/"&gt;&lt;img border="0" alt="2012-09-05_16h12_30" src="http://farm9.static.flickr.com/8295/7940059070_44b051b692_b.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Still, the main issues are unchanged: you're not in control of the schema, and any profile data is stored in property value blobs in the Profiles table:&lt;/p&gt;  &lt;p&gt;&lt;a title="2012-09-05_16h14_31" href="http://www.flickr.com/photos/36836555@N00/7940070296/"&gt;&lt;img border="0" alt="2012-09-05_16h14_31" src="http://farm9.static.flickr.com/8456/7940070296_1351de962f_b.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;SimpleMembership as a better membership system&lt;/h2&gt;  &lt;p&gt;As you might have guessed, SimpleMembership was designed to address the above problems.&lt;/p&gt;  &lt;h3&gt;Works with your Schema&lt;/h3&gt;  &lt;p&gt;As Matthew Osborn explains in his &lt;a href="http://blog.osbornm.com/archive/2010/07/21/using-simplemembership-with-asp.net-webpages.aspx"&gt;Using SimpleMembership With ASP.NET WebPages&lt;/a&gt; post, SimpleMembership is designed to integrate with your database schema:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;All &lt;em&gt;SimpleMembership&lt;/em&gt; requires is that there are two columns on your users table so that we can hook up to it – an “ID” column and a “username” column. The important part here is that they can be named whatever you want. For instance username doesn't have to be an alias it could be an email column you just have to tell &lt;em&gt;SimpleMembership&lt;/em&gt; to treat that as the “username” used to log in.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Matthew's example shows using a very simple user table named Users (it could be named anything) with a UserID and Username column, then a bunch of other columns he wanted in his app.&lt;/p&gt;  &lt;p&gt;&lt;a title="UsersTable[1]" href="http://www.flickr.com/photos/36836555@N00/7883860478/"&gt;&lt;img border="0" alt="UsersTable[1]" src="http://farm9.static.flickr.com/8181/7883860478_d3a9c35cb3_b.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Then we point SimpleMemberhip at that table with a one-liner:&lt;/p&gt;  &lt;pre class="brush: csharp"&gt;WebSecurity.InitializeDatabaseFile(&amp;quot;SecurityDemo.sdf&amp;quot;, &amp;quot;Users&amp;quot;, &amp;quot;UserID&amp;quot;, &amp;quot;Username&amp;quot;, true);&lt;/pre&gt;

&lt;p&gt;No other tables are needed, the table can be named anything we want, and can have pretty much any schema we want as long as we've got an ID and something that we can map to a username.&lt;/p&gt;

&lt;h3&gt;Broaden database support to the whole SQL Server family&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;While SimpleMembership is not database agnostic, it works across the SQL Server family. It continues to support full SQL Server, but it also works with SQL Azure, SQL Server CE, SQL Server Express, and LocalDB.&lt;/strong&gt; Everything's implemented as SQL calls rather than requiring stored procedures, views, agents, and change notifications.&lt;/p&gt;

&lt;p&gt;Note that SimpleMembership still requires some flavor of SQL Server - it won't work with MySQL, NoSQL databases, etc. You can take a look at the code in WebMatrix.WebData.dll using a tool like ILSpy if you'd like to see why - there are places where SQL Server specific SQL statements are being executed, especially when creating and initializing tables. It seems like you might be able to work with another database if you created the tables separately, but I haven't tried it and it's not supported at this point. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: I'm thinking it would be possible for SimpleMembership (or something compatible) to run Entity Framework so it would work with any database EF supports. That seems useful to me - thoughts?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: SimpleMembership has the same database support - anything in the SQL Server family - that Universal Providers brings to the ASP.NET Membership system.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;: &lt;a href="http://nuget.org/packages/Microsoft.AspNet.Providers.Core"&gt;Newer updates of Universal Providers - I believe starting with the 1.2 release on 8/16&lt;/a&gt; - are now really database agnostic, so they'll work on any database that has an Entity Framework provider.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;Easy to with Entity Framework Code First&lt;/h3&gt;

&lt;p&gt;The problem with with ASP.NET Membership's system for storing additional account information is that it's the gate keeper. That means you're stuck with its schema and accessing profile information through its API.&lt;/p&gt;

&lt;p&gt;SimpleMembership flips that around by allowing you to use any table as a user store. That means you're in control of the user profile information, and you can access it however you'd like - it's just data. Let's look at a practical based on the AccountModel.cs class in an ASP.NET MVC 4 Internet project. Here I'm adding a Birthday property to the UserProfile class.&lt;/p&gt;

&lt;pre class="brush: csharp; highlight: [8]"&gt;[Table(&amp;quot;UserProfile&amp;quot;)]
public class UserProfile
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int      UserId { get; set; }
    public string   UserName { get; set; }
    public DateTime Birthday { get; set; }
}&lt;/pre&gt;

&lt;p&gt;Now if I want to access that information, I can just grab the account by username and read the value.&lt;/p&gt;

&lt;pre class="brush: csharp"&gt;var context = new UsersContext();
var username = User.Identity.Name;
var user = context.UserProfiles.SingleOrDefault(u =&amp;gt; u.UserName == username);
var birthday = user.Birthday;&lt;/pre&gt;

&lt;p&gt;So instead of thinking of SimpleMembership as a big membership API, think of it as something that handles membership based on your user database. In SimpleMembership, everything's keyed off a user row in a table you define rather than a bunch of entries in membership tables that were out of your control.&lt;/p&gt;

&lt;h2&gt;How SimpleMembership integrates with ASP.NET Membership &lt;/h2&gt;

&lt;p&gt;Okay, enough sales pitch (and hopefully background) on why things have changed. How does this affect you? Let's start with a diagram to show the relationship (note: I've simplified by removing a few classes to show the important relationships):&lt;/p&gt;

&lt;p&gt;&lt;a title="2012-08-29_16h59_20" href="http://www.flickr.com/photos/36836555@N00/7890764346/"&gt;&lt;img border="0" alt="2012-08-29_16h59_20" src="http://farm9.static.flickr.com/8031/7890764346_39172965e1_b.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So SimpleMembershipProvider is an implementaiton of an ExtendedMembershipProvider, which inherits from MembershipProvider and adds some other account / OAuth related things. Here's what ExtendedMembershipProvider adds to MembershipProvider:&lt;/p&gt;

&lt;p&gt;&lt;a title="ExtendedMembershipProvider" href="http://www.flickr.com/photos/36836555@N00/7890828238/"&gt;&lt;img border="0" alt="ExtendedMembershipProvider" src="http://farm9.static.flickr.com/8460/7890828238_c2e259d009_b.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The important thing to take away here is that a SimpleMembershipProvider is a MembershipProvider, but a MembershipProvider is not a SimpleMembershipProvider. &lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This distinction is important in practice: &lt;strong&gt;you cannot use an existing MembershipProvider (including the Universal Providers found in System.Web.Providers) with an API that requires a SimpleMembershipProvider, including any of the calls in WebMatrix.WebData.WebSecurity or Microsoft.Web.WebPages.OAuth.OAuthWebSecurity.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;However, that's as far as it goes. Membership Providers still work if you're accessing them through the standard Membership API, and all of the core stuff&amp;#160; - including the AuthorizeAttribute, role enforcement, etc. - will work just fine and without any change.&lt;/p&gt;

&lt;p&gt;Let's look at how that affects you in terms of the new templates.&lt;/p&gt;

&lt;h2&gt;Membership in the ASP.NET MVC 4 project templates&lt;/h2&gt;

&lt;p&gt;ASP.NET MVC 4 offers six Project Templates:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Empty&lt;/strong&gt; - Really empty, just the assemblies, folder structure and a tiny bit of basic configuration. &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;Basic&lt;/strong&gt; - Like Empty, but with a bit of UI preconfigured (css / images / bundling). &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;Internet&lt;/strong&gt; - This has both a Home and Account controller and associated views. The Account Controller supports registration and login via either local accounts and via OAuth / OpenID providers. &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;Intranet&lt;/strong&gt; - Like the Internet template, but it's preconfigured for Windows Authentication. &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;Mobile&lt;/strong&gt; - This is preconfigured using jQuery Mobile and is intended for mobile-only sites. &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;Web API&lt;/strong&gt; - This is preconfigured for a service backend built on ASP.NET Web API. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a title="2012-08-29_17h26_24" href="http://www.flickr.com/photos/36836555@N00/7890879518/"&gt;&lt;img border="0" alt="2012-08-29_17h26_24" src="http://farm9.static.flickr.com/8180/7890879518_675c450ffc.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Out of these templates, only one (the Internet template) uses SimpleMembership. &lt;/p&gt;

&lt;h3&gt;ASP.NET MVC 4 Basic template&lt;/h3&gt;

&lt;p&gt;The Basic template has configuration in place to use ASP.NET Membership with the Universal Providers. You can see that configuration in the ASP.NET MVC 4 Basic template's web.config:&lt;/p&gt;

&lt;pre class="brush: xml"&gt;&amp;lt;profile defaultProvider=&amp;quot;DefaultProfileProvider&amp;quot;&amp;gt;
  &amp;lt;providers&amp;gt;
    &amp;lt;add name=&amp;quot;DefaultProfileProvider&amp;quot; type=&amp;quot;System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35&amp;quot; connectionStringName=&amp;quot;DefaultConnection&amp;quot; applicationName=&amp;quot;/&amp;quot; /&amp;gt;
  &amp;lt;/providers&amp;gt;
&amp;lt;/profile&amp;gt;
&amp;lt;membership defaultProvider=&amp;quot;DefaultMembershipProvider&amp;quot;&amp;gt;
  &amp;lt;providers&amp;gt;
    &amp;lt;add name=&amp;quot;DefaultMembershipProvider&amp;quot; type=&amp;quot;System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35&amp;quot; connectionStringName=&amp;quot;DefaultConnection&amp;quot; enablePasswordRetrieval=&amp;quot;false&amp;quot; enablePasswordReset=&amp;quot;true&amp;quot; requiresQuestionAndAnswer=&amp;quot;false&amp;quot; requiresUniqueEmail=&amp;quot;false&amp;quot; maxInvalidPasswordAttempts=&amp;quot;5&amp;quot; minRequiredPasswordLength=&amp;quot;6&amp;quot; minRequiredNonalphanumericCharacters=&amp;quot;0&amp;quot; passwordAttemptWindow=&amp;quot;10&amp;quot; applicationName=&amp;quot;/&amp;quot; /&amp;gt;
  &amp;lt;/providers&amp;gt;
&amp;lt;/membership&amp;gt;
&amp;lt;roleManager defaultProvider=&amp;quot;DefaultRoleProvider&amp;quot;&amp;gt;
  &amp;lt;providers&amp;gt;
    &amp;lt;add name=&amp;quot;DefaultRoleProvider&amp;quot; type=&amp;quot;System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35&amp;quot; connectionStringName=&amp;quot;DefaultConnection&amp;quot; applicationName=&amp;quot;/&amp;quot; /&amp;gt;
  &amp;lt;/providers&amp;gt;
&amp;lt;/roleManager&amp;gt;
&amp;lt;sessionState mode=&amp;quot;InProc&amp;quot; customProvider=&amp;quot;DefaultSessionProvider&amp;quot;&amp;gt;
  &amp;lt;providers&amp;gt;
    &amp;lt;add name=&amp;quot;DefaultSessionProvider&amp;quot; type=&amp;quot;System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35&amp;quot; connectionStringName=&amp;quot;DefaultConnection&amp;quot; /&amp;gt;
  &amp;lt;/providers&amp;gt;
&amp;lt;/sessionState&amp;gt;&lt;/pre&gt;

&lt;p&gt;This means that it's business as usual for the Basic template as far as ASP.NET Membership works.&lt;/p&gt;

&lt;h3&gt;ASP.NET MVC 4 Internet template&lt;/h3&gt;

&lt;p&gt;The Internet template has a few things set up to bootstrap SimpleMembership:&lt;/p&gt;

&lt;p&gt;&lt;a title="2012-08-29_17h45_32" href="http://www.flickr.com/photos/36836555@N00/7890963418/"&gt;&lt;img border="0" alt="2012-08-29_17h45_32" src="http://farm9.static.flickr.com/8172/7890963418_1e705263b8.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;\Models\AccountModels.cs&lt;/strong&gt; defines a basic user account and includes data annotations to define keys and such &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;\Filters\InitializeSimpleMembershipAttribute.cs&lt;/strong&gt; creates the membership database using the above model, then calls WebSecurity.InitializeDatabaseConnection which verifies that the underlying tables are in place and marks initialization as complete (for the application's lifetime) &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;\Controllers\AccountController.cs&lt;/strong&gt; makes heavy use of OAuthWebSecurity (for OAuth account registration / login / management) and WebSecurity. &lt;a href="http://msdn.microsoft.com/en-us/library/gg547905(v=VS.99).aspx"&gt;WebSecurity&lt;/a&gt; provides account management services for ASP.NET MVC (and Web Pages) &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;WebSecurity can work with any ExtendedMembershipProvider. There's one in the box (SimpleMembershipProvider) but you can write your own. Since a standard MembershipProvider is not an ExtendedMembershipProvider, WebSecurity will throw exceptions if the default membership provider is a MembershipProvider rather than an ExtendedMembershipProvider.&lt;/p&gt;

&lt;p&gt;Practical example: &lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Create a new ASP.NET MVC 4 application using the Internet application template &lt;/li&gt;

  &lt;li&gt;Install the &lt;a href="https://nuget.org/packages/Microsoft.AspNet.Providers.LocalDb/1.1"&gt;Microsoft ASP.NET Universal Providers for LocalDB NuGet package&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;Run the application, click on Register, add a username and password, and click submit &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You'll get the following execption in AccountController.cs::Register: &lt;em&gt;To call this method, the &amp;quot;Membership.Provider&amp;quot; property must be an instance of &amp;quot;ExtendedMembershipProvider&amp;quot;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a title="2012-08-29_18h34_13" href="http://www.flickr.com/photos/36836555@N00/7891175368/"&gt;&lt;img border="0" alt="2012-08-29_18h34_13" src="http://farm9.static.flickr.com/8030/7891175368_c94949fbf5_b.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This occurs because the ASP.NET Universal Providers packages include a web.config transform that will update your web.config to add the Universal Provider configuration I showed in the Basic template example above. When WebSecurity tries to use the configured ASP.NET Membership Provider, it checks if it can be cast to an ExtendedMembershipProvider before doing anything else.&lt;/p&gt;

&lt;p&gt;So, what do you do?&lt;/p&gt;

&lt;p&gt;Options:&lt;/p&gt;

&lt;p&gt;If you want to use the new AccountController, you'll either need to use the SimpleMembershipProvider or another valid ExtendedMembershipProvider. This is pretty straightforward.&lt;/p&gt;

&lt;p&gt;If you want to use an existing ASP.NET Membership Provider in ASP.NET MVC 4, you can't use the new AccountController. You can do a few things:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Replace&amp;#160; the AccountController.cs and AccountModels.cs in an ASP.NET MVC 4 Internet project with one from an ASP.NET MVC 3 application (you of course won't have OAuth support). Then, if you want, you can go through and remove other things that were built around SimpleMembership - the OAuth partial view, the NuGet packages (e.g. the DotNetOpenAuthAuth package, etc.) &lt;/li&gt;

  &lt;li&gt;Use an ASP.NET MVC 4 &lt;em&gt;Internet&lt;/em&gt; application template and add in a Universal Providers NuGet package. Then copy in the AccountController and AccountModel classes. &lt;/li&gt;

  &lt;li&gt;Create an ASP.NET MVC 3 project and &lt;a href="http://www.asp.net/whitepapers/mvc4-release-notes#_Toc303253806"&gt;upgrade it to ASP.NET MVC 4 using the steps shown in the ASP.NET MVC 4 release notes&lt;/a&gt;. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;None of these are particularly elegant or simple. Maybe we (or just me?) can do something to make this simpler - perhaps a NuGet package. However, this should be an edge case - hopefully the cases where you'd need to create a new ASP.NET but use legacy ASP.NET Membership Providers should be pretty rare. Please let me (or, &lt;a href="http://aspnet.uservoice.com/forums/41201-asp-net-mvc"&gt;preferably the team&lt;/a&gt;) know if that's an incorrect assumption.&lt;/p&gt;

&lt;h2&gt;Membership in the ASP.NET 4.5 project template&lt;/h2&gt;

&lt;p&gt;ASP.NET 4.5 Web Forms took a different approach which builds off ASP.NET Membership. Instead of using the WebMatrix security assemblies, Web Forms uses Microsoft.AspNet.Membership.OpenAuth assembly. I'm no expert on this, but from a bit of time in ILSpy and Visual Studio's (very pretty) dependency graphs, this uses a Membership Adapter to save OAuth data into an EF managed database while still running on top of ASP.NET Membership.&lt;/p&gt;

&lt;p&gt;&lt;a title="2012-08-29_19h13_13" href="http://www.flickr.com/photos/36836555@N00/7891359502/"&gt;&lt;img border="0" alt="2012-08-29_19h13_13" src="http://farm9.static.flickr.com/8038/7891359502_94dbe725f2_b.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: There may be a way to use this in ASP.NET MVC 4, although it would probably take some plumbing work to hook it up.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;How does this fit in with Universal Providers (System.Web.Providers)?&lt;/h2&gt;

&lt;p&gt;Just to summarize:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Universal Providers are intended for cases where you have an existing ASP.NET Membership Provider and you want to use it with another SQL Server database backend (other than SQL Server). It doesn't require agents to handle expired session cleanup and other background tasks, it piggybacks these tasks on other calls. &lt;/li&gt;

  &lt;li&gt;Universal Providers are not really, strictly speaking, universal - at least to my way of thinking. They only work with databases in the SQL Server family. &lt;/li&gt;

  &lt;li&gt;Universal Providers do not work with Simple Membership. &lt;/li&gt;

  &lt;li&gt;The Universal Providers packages include some web config transforms which you would normally want when you're using them. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;What about the Web Site Administration Tool?&lt;/h2&gt;

&lt;p&gt;Visual Studio includes tooling to launch the &lt;a href="http://msdn.microsoft.com/en-us/library/ms228053.aspx"&gt;Web Site Administration Tool&lt;/a&gt; (WSAT) to configure users and roles in your application. &lt;/p&gt;

&lt;p&gt;&lt;a title="image102[1]" href="http://www.flickr.com/photos/36836555@N00/7891419592/"&gt;&lt;img border="0" alt="image102[1]" src="http://farm9.static.flickr.com/8436/7891419592_2da2f17fe7_b.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;WSAT is built to work with ASP.NET Membership, and is not compatible with Simple Membership. There are two main options there:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Use the WebSecurity and OAuthWebSecurity API to manage the users and roles &lt;/li&gt;

  &lt;li&gt;Create a web admin using the above APIs &lt;/li&gt;

  &lt;li&gt;Since SimpleMembership runs on top of your database, you can update your users as you would any other data - via EF or even in direct database edits (in development, of course) &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a title="2012-08-29_19h34_46" href="http://www.flickr.com/photos/36836555@N00/7891461242/"&gt;&lt;img border="0" alt="2012-08-29_19h34_46" src="http://farm9.static.flickr.com/8455/7891461242_7cdaa6bd4a_b.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=8878304" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=1X2H1SvAX-M:62djSl3okoc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=1X2H1SvAX-M:62djSl3okoc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?i=1X2H1SvAX-M:62djSl3okoc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=1X2H1SvAX-M:62djSl3okoc:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=1X2H1SvAX-M:62djSl3okoc:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?i=1X2H1SvAX-M:62djSl3okoc:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=1X2H1SvAX-M:62djSl3okoc:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jongalloway/~4/1X2H1SvAX-M" height="1" width="1"/&gt;</description><feedburner:origLink>http://weblogs.asp.net/jgalloway/archive/2012/08/29/simplemembership-membership-providers-universal-providers-and-the-new-asp-net-4-5-web-forms-and-asp-net-mvc-4-templates.aspx</feedburner:origLink></item><item><title>Adding an Admin user to an ASP.NET MVC 4 application using a single drop-in file</title><link>http://feedproxy.google.com/~r/jongalloway/~3/yGMskQFWz_o/adding-an-admin-user-to-an-asp-net-mvc-4-application-using-a-single-drop-in-file.aspx</link><pubDate>Fri, 24 Aug 2012 22:37:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:8866735</guid><dc:creator>Jon Galloway</dc:creator><slash:comments>359</slash:comments><wfw:commentRss>http://weblogs.asp.net/jgalloway/rsscomments.aspx?PostID=8866735</wfw:commentRss><comments>http://weblogs.asp.net/jgalloway/archive/2012/08/24/adding-an-admin-user-to-an-asp-net-mvc-4-application-using-a-single-drop-in-file.aspx#comments</comments><description>&lt;p&gt;I'm working on an ASP.NET MVC 4 tutorial and wanted to set it up so just dropping a file in App_Start would create a user named &amp;quot;Owner&amp;quot; and assign them to the &amp;quot;Administrator&amp;quot; role (more explanation at the end if you're interested).&lt;/p&gt;  &lt;p&gt;There are reasons why this wouldn't fit into most application scenarios:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;It's not efficient, as it checks for (and creates, if necessary) the user every time the app starts up &lt;/li&gt;    &lt;li&gt;The username, password, and role name are hardcoded in the app (although they could be pulled from config) &lt;/li&gt;    &lt;li&gt;Automatically creating an administrative account in code (without user interaction) could lead to obvious security issues if the user isn't informed &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;However, with some modifications it might be more broadly useful - e.g. creating a test user with limited privileges, ensuring a required account isn't accidentally deleted, or - as in my case - setting up an account for demonstration or tutorial purposes.&lt;/p&gt;  &lt;h2&gt;Challenge #1: Running on startup without requiring the user to install or configure anything&lt;/h2&gt;  &lt;p&gt;I wanted to see if this could be done just by having the user drop a file into the App_Start folder and go. No copying code into Global.asax.cs, no installing addition NuGet packages, etc. That may not be the best approach - perhaps a NuGet package with a dependency on WebActivator would be better - but I wanted to see if this was possible and see if it offered the best experience.&lt;/p&gt;  &lt;p&gt;Fortunately ASP.NET 4 and later provide a &lt;a href="http://haacked.com/archive/2010/05/16/three-hidden-extensibility-gems-in-asp-net-4.aspx"&gt;PreApplicationStartMethod attribute&lt;/a&gt; which allows you to register a method which will run when the application starts up. You drop this attribute in your application and give it two parameters: a method name and the type that contains it. I created a static class named PreApplicationTasks with a static method named, then dropped this attribute in it:&lt;/p&gt;  &lt;pre class="brush: csharp;"&gt;[assembly: PreApplicationStartMethod(typeof(PreApplicationTasks), &amp;quot;Initializer&amp;quot;)] &lt;/pre&gt;

&lt;p&gt;That's it. One small gotcha: the namespace can be a problem with assembly attributes. I decided &lt;a href="http://www.codinghorror.com/blog/2005/01/a-modest-namespace-proposal.html"&gt;my class didn't need a namespace&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Challenge #2: Only one PreApplicationStartMethod per assembly&lt;/h2&gt;

&lt;p&gt;In .NET 4, the PreApplicationStartMethod is marked as AllMultiple=false, so you can only have one PreApplicationStartMethod per assembly. &lt;a href="http://stackoverflow.com/questions/11800954/why-multiple-using-of-preapplicationstartmethodattribute-isnt-complied"&gt;This was fixed in .NET 4.5, as noted by Jon Skeet, so you can have as many PreApplicationStartMethods as you want&lt;/a&gt; (allowing you to keep your users waiting for the application to start indefinitely!).&lt;/p&gt;

&lt;p&gt;The WebActivator NuGet package solves the multiple instance problem if you're in .NET 4 - it registers as a PreApplicationStartMethod, then calls any methods you've indicated using [assembly: WebActivator.PreApplicationStartMethod(type, method)]. David Ebbo blogged about that here:&amp;#160; &lt;a href="http://blogs.msdn.com/b/davidebb/archive/2010/10/11/light-up-your-nupacks-with-startup-code-and-webactivator.aspx"&gt;Light up your NuGets with startup code and WebActivator&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In my scenario (bootstrapping a beginner level tutorial) I decided not to worry about this and stick with PreApplicationStartMethod.&lt;/p&gt;

&lt;h2&gt;Challenge #3: PreApplicationStartMethod kicks in before configuration has been read&lt;/h2&gt;

&lt;p&gt;This is by design, as &lt;a href="http://haacked.com/archive/2010/05/16/three-hidden-extensibility-gems-in-asp-net-4.aspx"&gt;Phil explains&lt;/a&gt;. It allows you to make changes that need to happen very early in the pipeline, well before Application_Start. That's fine in some cases, but it caused me problems when trying to add users, since the Membership Provider configuration hadn't yet been read - I got an exception stating that &amp;quot;Default Membership Provider could not be found.&amp;quot;&lt;/p&gt;

&lt;p&gt;&lt;a title="PreApplicationStartMethod fires before config is loaded" href="http://www.flickr.com/photos/36836555@N00/7853353966/"&gt;&lt;img border="0" alt="PreApplicationStartMethod fires before config is loaded" src="http://farm8.static.flickr.com/7247/7853353966_39ee777c45.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The solution here is to run code that requires configuration in a PostApplicationStart method. But how to do that?&lt;/p&gt;

&lt;h2&gt;Challenge #4: Getting PostApplicationStartMethod without requiring WebActivator&lt;/h2&gt;

&lt;p&gt;The WebActivator NuGet package, among other things, provides a PostApplicationStartMethod attribute. That's generally how I'd recommend running code that needs to happen after Application_Start:&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;[assembly: WebActivator.PostApplicationStartMethod(typeof(TestLibrary.MyStartupCode), &amp;quot;CallMeAfterAppStart&amp;quot;)]&lt;/pre&gt;

&lt;p&gt;This works well, but I wanted to see if this would be possible without WebActivator. Hmm.&lt;/p&gt;

&lt;p&gt;Well, wait a minute - WebActivator works in .NET 4, so clearly it's registering and calling PostApplicationStartup tasks somehow. Off to the source code! Sure enough, there's even a handy comment in ActivationManager.cs which shows where PostApplicationStartup tasks are being registered:&lt;/p&gt;

&lt;pre class="brush: csharp; highlight: [7,8,9,10,11];"&gt;public static void Run()
{
    if (!_hasInited)
    {
        RunPreStartMethods();

        // Register our module to handle any Post Start methods. But outside of ASP.NET, just run them now
        if (HostingEnvironment.IsHosted)
        {
            Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule(typeof(StartMethodCallingModule));
        }
        else
        {
            RunPostStartMethods();
        }

        _hasInited = true;
    }
}&lt;/pre&gt;

&lt;p&gt;Excellent. Hey, that DynamicModuleUtility seems familiar... &lt;a href="http://odetocode.com/Blogs/scott/archive/2011/02/27/dynamicmoduleutility.aspx"&gt;Sure enough, K. Scott Allen mentioned it on his blog last year&lt;/a&gt;. This is really slick - a PreApplicationStartMethod can register a new HttpModule in code. Modules are run right after application startup, so that's a perfect time to do any startup stuff that requires configuration to be read. As K. Scott says, it's this easy:&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;using System;
using System.Web;
using Microsoft.Web.Infrastructure.DynamicModuleHelper;

[assembly:PreApplicationStartMethod(typeof(MyAppStart), &amp;quot;Start&amp;quot;)]

public class CoolModule : IHttpModule
{
    // implementation not important 
    // imagine something cool here
}

public static class MyAppStart
{
    public static void Start()
    {
        DynamicModuleUtility.RegisterModule(typeof(CoolModule));
    }
}&lt;/pre&gt;

&lt;h2&gt;Challenge #5: Cooperating with SimpleMembership&lt;/h2&gt;

&lt;p&gt;The ASP.NET MVC Internet template includes SimpleMembership. SimpleMembership is a big improvement over traditional ASP.NET Membership. For one thing, rather than forcing a database schema, it can work with your database schema. In the MVC 4 Internet template case, it uses Entity Framework Code First to define the user model. SimpleMembership bootstrap includes a call to InitializeDatabaseConnection, and I want to play nice with that.&lt;/p&gt;

&lt;p&gt;There's a new [InitializeSimpleMembership] attribute on the AccountController, which calls \Filters\InitializeSimpleMembershipAttribute.cs::OnActionExecuting(). That comment in that method that says &amp;quot;Ensure ASP.NET Simple Membership is initialized only once per app start&amp;quot; which sounds like good advice. I figured the best thing would be to call that directly:&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;new Mvc4SampleApplication.Filters.InitializeSimpleMembershipAttribute().OnActionExecuting(null);&lt;/pre&gt;

&lt;p&gt;I'm not 100% happy with this - in fact, it's my least favorite part of this solution. There are two problems - first, directly calling a method on a filter, while legal, seems odd. Worse, though, the Filter lives in the application's namespace, which means that this code no longer works well as a generic drop-in.&lt;/p&gt;

&lt;p&gt;The simplest workaround would be to duplicate the relevant SimpleMembership initialization code into my startup code, but I'd rather not. I'm interested in your suggestions here.&lt;/p&gt;

&lt;h2&gt;Challenge #6: Module Init methods are called more than once&lt;/h2&gt;

&lt;p&gt;When debugging, I noticed (and remembered) that the Init method may be called more than once per page request - it's run &lt;a href="http://erraticdev.blogspot.com/2011/01/how-to-correctly-use-ihttpmodule-to.html"&gt;once per instance in the app pool&lt;/a&gt;, and an individual page request can cause multiple resource requests to the server. While SimpleMembership does have internal checks to prevent duplicate user or role entries, I'd rather not cause or handle those exceptions. So here's the standard single-use lock in the Module's init method:&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;void IHttpModule.Init(HttpApplication context)
{
    lock (lockObject)
    {
        if (!initialized)
        {
            //Do stuff
        }
        initialized = true;
    }
}&lt;/pre&gt;

&lt;h2&gt;Putting it all together&lt;/h2&gt;

&lt;p&gt;With all of that out of the way, here's the code I came up with:&lt;/p&gt;
&lt;script src="https://gist.github.com/3433270.js?file=CreateAdminUser.cs"&gt;&lt;/script&gt;&lt;noscript&gt;
  &lt;pre class="brush: csharp;"&gt;using Mvc4SampleApplication.Filters;
using System.Web;
using System.Web.Security;
using WebMatrix.WebData;

[assembly: PreApplicationStartMethod(typeof(PreApplicationTasks), &amp;quot;Initializer&amp;quot;)]

public static class PreApplicationTasks
{
    public static void Initializer()
    {
        Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility
            .RegisterModule(typeof(UserInitializationModule));
    }
}

public class UserInitializationModule : IHttpModule
{
    private static bool initialized;
    private static object lockObject = new object();

    private const string _username = &amp;quot;Owner&amp;quot;;
    private const string _password = &amp;quot;p@ssword123&amp;quot;;
    private const string _role = &amp;quot;Administrator&amp;quot;;

    void IHttpModule.Init(HttpApplication context)
    {
        lock (lockObject)
        {
            if (!initialized)
            {
                new InitializeSimpleMembershipAttribute().OnActionExecuting(null);

                if (!WebSecurity.UserExists(_username))
                    WebSecurity.CreateUserAndAccount(_username, _password);

                if (!Roles.RoleExists(_role))
                    Roles.CreateRole(_role);

                if (!Roles.IsUserInRole(_username, _role))
                    Roles.AddUserToRole(_username, _role);
            }
            initialized = true;
        }
    }

    void IHttpModule.Dispose() { }
}&lt;/pre&gt;
&lt;/noscript&gt;

&lt;h2&gt;The Verdict: Is this a good thing?&lt;/h2&gt;

&lt;p&gt;Maybe.&lt;/p&gt;

&lt;p&gt;I think you'll agree that the journey was undoubtedly worthwhile, as it took us through some of the finer points of hooking into application startup, integrating with membership, and understanding why the WebActivator NuGet package is so useful&lt;/p&gt;

&lt;p&gt;Will I use this in the tutorial? I'm leaning towards no - I think a NuGet package with a dependency on WebActivator might work better:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;It's a little more clear what's going on &lt;/li&gt;

  &lt;li&gt;Installing a NuGet package might be a little less error prone than copying a file &lt;/li&gt;

  &lt;li&gt;A novice user could uninstall the package when complete &lt;/li&gt;

  &lt;li&gt;It's a good introduction to NuGet, which is a good thing for beginners to see &lt;/li&gt;

  &lt;li&gt;This code either requires either duplicating a little code from that filter or modifying the file to use the namespace &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Honestly I'm undecided at this point, but I'm glad that I can weigh the options.&lt;/p&gt;

&lt;h3&gt;If you're interested: Why are you doing this?&lt;/h3&gt;

&lt;p&gt;I'm updating the MVC Music Store tutorial to ASP.NET MVC 4, taking advantage of a lot of new ASP.NET MVC 4 features and trying to simplify areas that are giving people trouble. One change that addresses both needs us using the new OAuth support for membership as much as possible - it's a great new feature from an application perspective, and we get a fair amount of beginners struggling with setting up membership on a variety of database and development setups, which is a distraction from the focus of the tutorial - learning ASP.NET MVC.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Side note: Thanks to some great help from Rick Anderson, we had a draft of the tutorial that was looking pretty good earlier this summer, but there were enough changes in ASP.NET MVC 4 all the way up to RTM that there's still some work to be done. It's high priority and should be out very soon.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The one issue I ran into with OAuth is that we still need an Administrative user who can edit the store's inventory. I thought about a number of solutions for that - making the first user to register the admin, or the first user to use the username &amp;quot;Administrator&amp;quot; is assigned to the Administrator role - but they both ended up requiring extra code; also, I worried that people would use that code without understanding it or thinking about whether it was a good fit.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=8866735" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=yGMskQFWz_o:_QNTm2DnlgE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=yGMskQFWz_o:_QNTm2DnlgE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?i=yGMskQFWz_o:_QNTm2DnlgE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=yGMskQFWz_o:_QNTm2DnlgE:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=yGMskQFWz_o:_QNTm2DnlgE:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?i=yGMskQFWz_o:_QNTm2DnlgE:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=yGMskQFWz_o:_QNTm2DnlgE:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jongalloway/~4/yGMskQFWz_o" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/jgalloway/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/jgalloway/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category><feedburner:origLink>http://weblogs.asp.net/jgalloway/archive/2012/08/24/adding-an-admin-user-to-an-asp-net-mvc-4-application-using-a-single-drop-in-file.aspx</feedburner:origLink></item><item><title>Guest on Cloud Cover Show: What's new in Visual Studio 2012, ASP.NET 4.5, ASP.NET MVC 4 and Windows Azure Web Sites</title><link>http://feedproxy.google.com/~r/jongalloway/~3/5RXKI6aU6jM/guest-on-cloud-cover-show-what-s-new-in-visual-studio-2012-asp-net-4-5-asp-net-mvc-4-and-windows-azure-web-sites.aspx</link><pubDate>Tue, 21 Aug 2012 23:19:16 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:8858622</guid><dc:creator>Jon Galloway</dc:creator><slash:comments>491</slash:comments><wfw:commentRss>http://weblogs.asp.net/jgalloway/rsscomments.aspx?PostID=8858622</wfw:commentRss><comments>http://weblogs.asp.net/jgalloway/archive/2012/08/21/guest-on-cloud-cover-show-what-s-new-in-visual-studio-2012-asp-net-4-5-asp-net-mvc-4-and-windows-azure-web-sites.aspx#comments</comments><description>&lt;p&gt;I was the guest star on the Cloud Cover Show this past week talking about what's new for web developers in Visual Studio 2012, ASP.NET 4.5, ASP.NET MVC 4, and Windows Azure Web Sites. As a remote presenter (I recorded my screencast while at &lt;a href="http://thatconference.com/"&gt;ThatConference&lt;/a&gt; in Wisconsin Dells), I was given the floating head treatment when first introduced:&lt;/p&gt; &lt;iframe style="height: 288px; width: 512px" src="http://channel9.msdn.com/Shows/Cloud+Cover/Episode-87-Jon-Galloway-on-Whats-new-in-VS-2012-ASPNET-45-ASPNET-MVC-4-and-Windows-Azure-Web-Sites/player?w=512&amp;amp;h=288" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;  &lt;p&gt;I gave a 20 minute walkthrough, showing the following highlights:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;File / New Project with ASP.NET 4.5&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;NuGet packages in the default template (and why that's good)&lt;/li&gt;      &lt;li&gt;Adaptive rendering in the default ASP.NET 4.5 project template&lt;/li&gt;      &lt;li&gt;A few Visual Studio 2012 web developer features (CSS color picker, fonts, HTML5 snippets)&lt;/li&gt;      &lt;li&gt;Strongly typed data control&lt;/li&gt;      &lt;li&gt;Model binding support&lt;/li&gt;      &lt;li&gt;Note: ASP.NET 4.5 requires .NET 4.5, will be supported in Azure some time after .NET 4.5 GA&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;File / New Project with ASP.NET MVC 4     &lt;ul&gt;       &lt;li&gt;Supports both .NET 4 and .NET 4.5&lt;/li&gt;        &lt;li&gt;New ASP.NET MVC 4 project types&lt;/li&gt;        &lt;li&gt;Same template experience as ASP.NET 4.5 Web Forms - adaptive rendering, etc.&lt;/li&gt;        &lt;li&gt;Code-based configuration moved to App_Start &lt;/li&gt;        &lt;li&gt;OAuth login support&lt;/li&gt;        &lt;li&gt;Add new ASP.NET Web API controller&lt;/li&gt;        &lt;li&gt;Show Web API&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Deploy MVC 4 Application to Windows Azure Web Sites&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Create new website in Windows Azure Web Sites portal, download publish profile&lt;/li&gt;      &lt;li&gt;Visual Studio 2012 Web Publish dialog&lt;/li&gt;      &lt;li&gt;Publish and demo site&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;Thanks to &lt;a href="http://twitter.com/cloudnick"&gt;Nick&lt;/a&gt; and &lt;a href="http://twitter.com/syntaxc4"&gt;Cory&lt;/a&gt; for inviting me on the show. I hope my disembodied head will be invited back on Cloud Cover again soon.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=8858622" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=5RXKI6aU6jM:pKXsXXUynJc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=5RXKI6aU6jM:pKXsXXUynJc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?i=5RXKI6aU6jM:pKXsXXUynJc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=5RXKI6aU6jM:pKXsXXUynJc:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=5RXKI6aU6jM:pKXsXXUynJc:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?i=5RXKI6aU6jM:pKXsXXUynJc:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=5RXKI6aU6jM:pKXsXXUynJc:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jongalloway/~4/5RXKI6aU6jM" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/jgalloway/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/jgalloway/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category><category domain="http://weblogs.asp.net/jgalloway/archive/tags/Windows+Azure/default.aspx">Windows Azure</category><feedburner:origLink>http://weblogs.asp.net/jgalloway/archive/2012/08/21/guest-on-cloud-cover-show-what-s-new-in-visual-studio-2012-asp-net-4-5-asp-net-mvc-4-and-windows-azure-web-sites.aspx</feedburner:origLink></item><item><title>ASP.NET 4.5, ASP.NET MVC 4, ASP.NET Web Pages 2, and Visual Studio 2012 for web developers: Part 1</title><link>http://feedproxy.google.com/~r/jongalloway/~3/HF384DEU0ac/asp-net-4-5-asp-net-mvc-4-asp-net-web-pages-2-and-visual-studio-2012-web-developer-features.aspx</link><pubDate>Fri, 17 Aug 2012 00:39:35 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:8848360</guid><dc:creator>Jon Galloway</dc:creator><slash:comments>163</slash:comments><wfw:commentRss>http://weblogs.asp.net/jgalloway/rsscomments.aspx?PostID=8848360</wfw:commentRss><comments>http://weblogs.asp.net/jgalloway/archive/2012/08/16/asp-net-4-5-asp-net-mvc-4-asp-net-web-pages-2-and-visual-studio-2012-web-developer-features.aspx#comments</comments><description>&lt;p&gt;Wow, yesterday was a big day for ASP.NET developers! In addition to some other &lt;a href="http://blogs.technet.com/b/windowsserver/archive/2012/08/01/windows-server-2012-released-to-manufacturing.aspx"&gt;very&lt;/a&gt; &lt;a href="http://blogs.msdn.com/b/windowsappdev/archive/2012/08/15/windows-8-rtm-is-available-for-developers.aspx"&gt;cool&lt;/a&gt; &lt;a href="http://windowsteamblog.com/windows_live/b/windowslive/archive/2012/05/30/updates-to-the-skydrive-apps-for-windows-and-mac.aspx"&gt;things&lt;/a&gt;, Microsoft announced Visual Studio 2012, ASP.NET 4.5, ASP MVC 4 were released to manufacturing. Hooray! So what now?&lt;/p&gt;  &lt;h2&gt;Get The Bits&lt;/h2&gt;  &lt;p&gt;The easiest way to get all the new goodies is to install Visual Studio 2012. You've got a few options there:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;If you've got MSDN, you can download from the &lt;a href="http://msdn.microsoft.com/subscriptions/downloads/default.aspx?pv=18:479"&gt;MSDN subscriber downloads&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;Anyone can download Visual Studio 2012 from &lt;a href="http://microsoft.com/visualstudio"&gt;http://microsoft.com/visualstudio&lt;/a&gt; - either the Visual Studio Ultimate 2012 trial (good for &lt;a href="http://msdn.microsoft.com/en-us/library/gg442061(v=vs.110).aspx"&gt;90 days from install&lt;/a&gt;) or the completely free &lt;a href="http://www.microsoft.com/web/gallery/install.aspx?appid=VWD11AzurePack"&gt;Visual Studio Express 2012 for Web&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;ASP.NET MVC 4 runs on Visual Studio 2010 and .NET 4; you can install that using either the &lt;a href="http://www.microsoft.com/web/gallery/install.aspx?appid=MVC4VS2010"&gt;MVC 4 Web Platform Installer&lt;/a&gt; or the &lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=30683"&gt;standalone EXE installer&lt;/a&gt;. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;We've got the &lt;a href="http://www.asp.net/downloads"&gt;top download links&lt;/a&gt; listed for you on the ASP.NET site as well.&lt;/p&gt;  &lt;h3&gt;Note: Just install what you'll use&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/jgalloway/archive/2011/03/09/tips-on-installing-visual-studio-2010-sp1.aspx"&gt;As before, my personal recommendation is to just install the Visual Studio components you're expecting to use&lt;/a&gt;. If you never do C++ development, installing all the C++ support just means that your install will take longer, take up more space, make service packs take longer to install, increase the Windows Updates you'll encounter, etc. You can always modify the installed features if you need to later. Here's what I'm installing (I'm including &lt;a href="http://msdn.microsoft.com/en-us/library/windows/apps/jj129478.aspx"&gt;Blend&lt;/a&gt; because I've been doing a bit of Windows 8 app development - it works with both both XAML and HTML Windows Store apps).&lt;/p&gt;  &lt;p&gt;Here's what I've got selected:&lt;/p&gt;  &lt;p&gt;&lt;img alt="Visual Studio 2012 Install" src="http://farm8.staticflickr.com/7269/7797987498_a014bc83a1_b.jpg" width="467" height="654" /&gt;&lt;/p&gt;  &lt;h2&gt;Learning Resources On The New Stuff&lt;/h2&gt;  &lt;p&gt;There is a ton of new stuff, and it's easy to get overwhelmed. Here's a quick overview of some of the top resources before we dig into specifics:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Scott Hanselman &lt;a href="http://www.asp.net/vnext/overview/videos"&gt;recorded an excellent series of short (about 5 minutes each) screencasts&lt;/a&gt; covering top features web developers need to know about in this release. &lt;/li&gt;    &lt;li&gt;We've got special section on the ASP.NET site focused on this new release: &lt;a href="http://www.asp.net/vnext"&gt;http://www.asp.net/vnext&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;The ASP.NET product team presented an excellent series covering what's in this release at the recent aspConf event July 17-18.      &lt;ul&gt;       &lt;li&gt;Here's &lt;a href="http://channel9.msdn.com/events/aspconf/aspconf/?sort=sequential&amp;amp;direction=desc&amp;amp;term=&amp;amp;s=brad-wilson&amp;amp;s=damian%2Bedwards&amp;amp;s=howard-dierking&amp;amp;s=Jon-Galloway&amp;amp;s=levi-broderick&amp;amp;s=mads%2Bkristensen&amp;amp;s=marcin-dobosz&amp;amp;s=matthew%2Bosborn&amp;amp;s=Scott%2BGuthrie&amp;amp;s=Scott%2BHanselman&amp;amp;s=Scott%2BHunter"&gt;a list of presentations by ASP.NET / Visual Studio team members&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;Here's &lt;a href="http://channel9.msdn.com/Events/aspConf/aspConf"&gt;the entire list&lt;/a&gt; of aspConf (lots of other great presentation by the community, many covering new features) &lt;/li&gt;        &lt;li&gt;The ASP.NET Team PM's have written an extensive white paper explaining &lt;a href="http://www.asp.net/vnext/overview/whitepapers/whats-new"&gt;What's New in ASP.NET 4.5 and Visual Studio 2012&lt;/a&gt; &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;We've got a lot of new tutorials rolling out on the ASP.NET site to cover all the new stuff. I'll do an overview post on these soon, but here's where you'll find them:      &lt;ul&gt;       &lt;li&gt;&lt;a href="http://www.asp.net/mvc/tutorials/mvc-4"&gt;ASP.NET MVC 4 Tutorials&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://www.asp.net/web-forms/tutorials/aspnet-45"&gt;ASP.NET 4.5 Tutorials&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://www.asp.net/web-api"&gt;ASP.NET Web API Tutorials&lt;/a&gt; &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;The &lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=29843"&gt;Web Camps Training Kit&lt;/a&gt; has some great Hands On Labs that walk you through using the new features through a series of practical examples. The Web Camps Training Kit has a tiny 2.4MB installer that lets you pick just the labs you want to get, then pulls down lab documentation, source code, everything you need to get started.       &lt;br /&gt;&lt;img alt="Web Camps Training Kit" src="http://farm8.staticflickr.com/7253/7798122100_69dcbe26e5_b.jpg" width="504" height="445" /&gt;&amp;#160; &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;ASP.NET 4.5&lt;/h2&gt;  &lt;h3&gt;Model Binding and Strongly Typed Data Controls&lt;/h3&gt;  &lt;p&gt;The Model Binding and Strongly Typed Data Controls in ASP.NET Web Forms are really cool. Damian Edwards (who helped found the &lt;a href="http://webformsmvp.com/"&gt;Web Forms MVP project&lt;/a&gt; before joining the ASP.NET team) and team pulled of an amazing feat: they brought the model binding and strong typing features of ASP.NET MVC into ASP.NET Web Forms in a way that still fits with Web Forms. Essentially, it's something like an object data source approach, but so much smoother.&lt;/p&gt;  &lt;p&gt;First, the strongly typed data controls allow you to define a model type for a control. That allows you to replace string-based data binding expressions with strongly typed binding expressions:&lt;/p&gt;  &lt;p&gt;&lt;img src="http://farm9.staticflickr.com/8437/7798273342_2550de1cb1_b.jpg" width="722" height="447" /&gt;&lt;/p&gt;  &lt;p&gt;Hooray!&lt;/p&gt;  &lt;p&gt;Also, notice that the FormView above isn't binding to a data source, it's got methods defined for Select / Insert / Update. The select method looks like this:&lt;/p&gt;  &lt;pre class="brush: csharp;"&gt;public Issue GetIssue([Control(&amp;quot;issuesGrid&amp;quot;)]int? id)
{
    return _db.Issues.Find(id);
}&lt;/pre&gt;

&lt;p&gt;The Insert and Update methods take advantage of the binding features in MVC, allowing you to bind to control values, URL and other contextual values, and custom value providers:&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;public void InsertIssue()
{
    var issue = new Issue();

    TryUpdateModel(issue);

    if (ModelState.IsValid)
    {
        _db.Issues.Add(issue);
        SaveChanges(issue);
    }
}&lt;/pre&gt;

&lt;p&gt;This eliminates all the tedious and error-prone &amp;quot;this parameter equals that control value, this other parameter equal that other control value, kill me now&amp;quot; type code. Note that TryUpdateModel call (familiar to MVC devs) which will automatically apply any validation rules defined via data annotations on the model class.&lt;/p&gt;

&lt;p&gt;I gave a presentation this week at &lt;a href="http://www.thatconference.com/Sessions/session_444"&gt;ThatConference&lt;/a&gt; looking at the feasibility of mixing ASP.NET Web Forms and MVC in the same project, and my conclusion was that the best way to get started is to get your Web Forms apps on ASP.NET 4.5 so you can start sharing models and converting traditional Web Forms code towards this approach, which is a lot more similar to MVC.&lt;/p&gt;

&lt;h3&gt;Bundling and Optimization&lt;/h3&gt;

&lt;p&gt;Bundling and Optimization in ASP.NET 4.5 and ASP.NET MVC 4 is based on an optimization system the MSN team developed called WebGrease. The core has been battle tested (&lt;a href="http://www.alexa.com/siteinfo/msn.com"&gt;MSN is a top 20 site&lt;/a&gt;) and performs really well. The bundling and optimization system optimizes user experience by compressing and combining CSS and JavaScript so your users get a faster experience and you minimize your bandwidth.&lt;/p&gt;

&lt;p&gt;You'll see default bundles defined in \App_Start\BundleConfig.cs in an ASP.NET 4.5 Web Forms or ASP.NET MVC 4 application. Here's what it looks like in Web Forms:&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;public static void RegisterBundles(BundleCollection bundles)
{
    bundles.Add(new ScriptBundle(&amp;quot;~/bundles/WebFormsJs&amp;quot;).Include(
          &amp;quot;~/Scripts/WebForms/WebForms.js&amp;quot;,
          &amp;quot;~/Scripts/WebForms/WebUIValidation.js&amp;quot;,
          &amp;quot;~/Scripts/WebForms/MenuStandards.js&amp;quot;,
          &amp;quot;~/Scripts/WebForms/Focus.js&amp;quot;,
          &amp;quot;~/Scripts/WebForms/GridView.js&amp;quot;,
          &amp;quot;~/Scripts/WebForms/DetailsView.js&amp;quot;,
          &amp;quot;~/Scripts/WebForms/TreeView.js&amp;quot;,
          &amp;quot;~/Scripts/WebForms/WebParts.js&amp;quot;));

    bundles.Add(new ScriptBundle(&amp;quot;~/bundles/MsAjaxJs&amp;quot;).Include(
        &amp;quot;~/Scripts/WebForms/MsAjax/MicrosoftAjax.js&amp;quot;,
        &amp;quot;~/Scripts/WebForms/MsAjax/MicrosoftAjaxApplicationServices.js&amp;quot;,
        &amp;quot;~/Scripts/WebForms/MsAjax/MicrosoftAjaxTimer.js&amp;quot;,
        &amp;quot;~/Scripts/WebForms/MsAjax/MicrosoftAjaxWebForms.js&amp;quot;));

    // Use the Development version of Modernizr to develop with and learn from. Then, when you’re
    // ready for production, use the build tool at http://modernizr.com to pick only the tests you need
    bundles.Add(new ScriptBundle(&amp;quot;~/bundles/modernizr&amp;quot;).Include(
        &amp;quot;~/Scripts/modernizr-*&amp;quot;));
}&lt;/pre&gt;

&lt;p&gt;Now you can just use any of those bundles in your application:&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt; &amp;lt;asp:PlaceHolder runat=&amp;quot;server&amp;quot;&amp;gt;        
         &amp;lt;%: Scripts.Render(&amp;quot;~/bundles/modernizr&amp;quot;) %&amp;gt;
         &amp;lt;%: Scripts.Render(&amp;quot;~/bundles/jquery&amp;quot;) %&amp;gt;
         &amp;lt;%: Scripts.Render(&amp;quot;~/bundles/jqueryui&amp;quot;) %&amp;gt;
&amp;lt;/asp:PlaceHolder&amp;gt;&lt;/pre&gt;

&lt;p&gt;One of my favorite parts about this is that we can make bundles that accomodate version numbers in script names, so updating jQuery (maybe via NuGet if you're awesome) doesn't require *any* code / markup changes:&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;bundles.Add(new ScriptBundle(&amp;quot;~/bundles/jquery&amp;quot;).Include(
            &amp;quot;~/Scripts/jquery-{version}.js&amp;quot;));

bundles.Add(new ScriptBundle(&amp;quot;~/bundles/jqueryui&amp;quot;).Include(
            &amp;quot;~/Scripts/jquery-ui-{version}.js&amp;quot;));

bundles.Add(new ScriptBundle(&amp;quot;~/bundles/jqueryval&amp;quot;).Include(
            &amp;quot;~/Scripts/jquery.unobtrusive*&amp;quot;,
            &amp;quot;~/Scripts/jquery.validate*&amp;quot;));&lt;/pre&gt;

&lt;p&gt;For more on using Bundling and Minification in Web Forms, see &lt;a href="http://blogs.msdn.com/b/rickandy/archive/2012/08/14/adding-bundling-and-minification-to-web-forms.aspx"&gt;Adding Bundling and Minification to Web Forms&lt;/a&gt; (Rick Anderson) or either of the following videos:&lt;/p&gt;

&lt;p&gt;Quick intro by Scott Hanselman:&lt;/p&gt;
&lt;object id="SilverlightMediaPlayer" style="width:644px;height:525px;" autoupdate="true" data="data:application/x-silverlight-2," type="application/x-silverlight-2"&gt;&lt;param name="MinRuntimeVersion" value="2.0.31005.0" /&gt;&lt;param name="source" value="http://asp.net/ClientBin/mediaplayer/MSCommunities.MediaPlayer.xap?cdn_id=2012-08-14-001" /&gt;&lt;param name="InitParams" value="extendedfeatures=false,videoid=42895,videowidth=644,videoheight=525" /&gt;&lt;video controls="" width="644" height="525" src="http://content1.catalog.video.msn.com/e2/ds/d1d94069-91d3-4c54-a4ee-7f658fc87841.mp4"&gt;&lt;/video&gt;&lt;/object&gt;

&lt;p&gt;Deep Dive by Howard Dierking:&lt;/p&gt;
&lt;iframe style="width: 960px; height: 540px" src="http://channel9.msdn.com/Events/aspConf/aspConf/Bundling-and-Optimizing/player?w=960&amp;amp;h=540" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;

&lt;h3&gt;Updated Project Templates (Adaptive Rendering)&lt;/h3&gt;

&lt;p&gt;Both the new ASP.NET Web Forms and MVC project templates have been redesigned. They don't just look nicer, they leverage web standards to automatically adapt to screen resolution (HTML and CSS only, no JavaScript or server-side code required).&lt;/p&gt;

&lt;p&gt;Here's how the default template looks in a wide screen (&amp;gt; 850px):&lt;/p&gt;

&lt;p&gt;&lt;a title="2012-08-16_16h50_39" href="http://www.flickr.com/photos/36836555@N00/7798541108/"&gt;&lt;img border="0" alt="2012-08-16_16h50_39" src="http://farm9.static.flickr.com/8436/7798541108_1fea3820a1_b.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Resizing the screen automatically applies new styles via CSS media queries so it's easier to read and navigate:&lt;/p&gt;

&lt;p&gt;&lt;a title="2012-08-16_16h50_47" href="http://www.flickr.com/photos/36836555@N00/7798541856/"&gt;&lt;img border="0" alt="2012-08-16_16h50_47" src="http://farm9.static.flickr.com/8289/7798541856_9d5397f82c_b.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://weblogs.asp.net/jgalloway/archive/2011/10/06/asp-net-mvc-4-overview-part-2-default-template-changes-and-adaptive-rendering.aspx"&gt;I wrote about how this works in pretty gory detail in the context of ASP.NET MVC 4&lt;/a&gt;, but it's working exactly the same in ASP.NET Web Forms 4.5.&lt;/p&gt;

&lt;h3&gt;OAuth and OpenID support&lt;/h3&gt;

&lt;p&gt;The default project templates now have built-in support for user registration and log in via OAuth and OpenID. They're making use of the excellent &lt;a href="http://dotnetopenauth.net"&gt;DotNetOpenAuth&lt;/a&gt; library, included as&amp;#160; a NuGet package so you can update later if you'd like.&lt;/p&gt;

&lt;p&gt;Your OAuth and OpenID providers are registerd in \AppStart\AuthConfig.cs. Initially there are some examples that are all commented out (this is something you should do explicitly, and OAuth providers require you fill in an app id and app secret):&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;public static void RegisterOpenAuth()
{
    // See http://go.microsoft.com/fwlink/?LinkId=252803 for details on setting up this ASP.NET
    // application to support logging in via external services.

    //OpenAuth.AuthenticationClients.AddTwitter(
    //    consumerKey: &amp;quot;your Twitter consumer key&amp;quot;,
    //    consumerSecret: &amp;quot;your Twitter consumer secret&amp;quot;);

    //OpenAuth.AuthenticationClients.AddFacebook(
    //    appId: &amp;quot;your Facebook app id&amp;quot;,
    //    appSecret: &amp;quot;your Facebook app secret&amp;quot;);

    //OpenAuth.AuthenticationClients.AddMicrosoft(
    //    clientId: &amp;quot;your Microsoft account client id&amp;quot;,
    //    clientSecret: &amp;quot;your Microsoft account client secret&amp;quot;);

    //OpenAuth.AuthenticationClients.AddGoogle();
}&lt;/pre&gt;

&lt;h3&gt;Uncommenting and filling in the key / secret information for OAuth clients changes your Log In screen to allow users to access your site as members without creating an account:&lt;/h3&gt;

&lt;p&gt;&lt;a title="2012-08-16_16h59_15" href="http://www.flickr.com/photos/36836555@N00/7798574202/"&gt;&lt;img border="0" alt="2012-08-16_16h59_15" src="http://farm9.static.flickr.com/8290/7798574202_0429e5e04d_b.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For more information on configuring specific clients, see Pranav's blog post: &lt;a href="http://blogs.msdn.com/b/webdev/archive/2012/08/15/oauth-openid-support-for-webforms-mvc-and-webpages.aspx"&gt;OAuth/OpenID Support for WebForms, MVC and WebPages&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;And much more...&lt;/h3&gt;

&lt;p&gt;There's of course a lot more, these are just some of my favorite features. Let's move on to ASP.NET MVC 4!&lt;/p&gt;

&lt;h2&gt;ASP.NET MVC&lt;/h2&gt;

&lt;h3&gt;Mobile Features&lt;/h3&gt;

&lt;p&gt;ASP.NET MVC 4 has several great options to help you build sites that work well on mobile devices. Here's a diagram that helps illustrate it:&lt;/p&gt;

&lt;p&gt;&lt;a title="2012-08-16_19h10_27" href="http://www.flickr.com/photos/36836555@N00/7798618608/"&gt;&lt;img border="0" alt="2012-08-16_19h10_27" src="http://farm8.static.flickr.com/7271/7798618608_74d5cb31ca_b.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I talked about all three of these and overviewed ASP.NET MVC 4 mobile features at aspConf:&lt;/p&gt;
&lt;iframe style="width: 960px; height: 540px" src="http://channel9.msdn.com/Events/aspConf/aspConf/ASP-NET-MVC-4-Mobile/player?w=960&amp;amp;h=540" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;

&lt;p&gt;We've already talked about adaptive rendering in Web Forms, it works the same here.&lt;/p&gt;

&lt;p&gt;Display Modes allow you to create views which are served to mobile devices, and you can create your own display modes to target specific devices. Since the display modes are defined in code, they can be based on any logic you want - database queries, user cookies, day of the week, whatever. Here's how a display mode is defined:&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;DisplayModeProvider.Instance.Modes.Insert(0, new 
DefaultDisplayMode(&amp;quot;iPhone&amp;quot;) 
{ 
    ContextCondition = (context =&amp;gt; context.GetOverriddenUserAgent().IndexOf 
        (&amp;quot;iPhone&amp;quot;, StringComparison.OrdinalIgnoreCase) &amp;gt;= 0) 
 });&lt;/pre&gt;

&lt;p&gt;Finally, the mobile template (based on jQuery Mobile) makes it easy to create web applications that are optimized for mobile users.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://i1.asp.net/umbraco-beta-media/38982/image004.png" /&gt;&lt;/p&gt;

&lt;p&gt;To learn more about what you can do using the Mobile Project Template, see Rick Anderson's tutorial: &lt;a href="http://www.asp.net/mvc/tutorials/mvc-4/aspnet-mvc-4-mobile-features"&gt;ASP.NET MVC 4 Mobile Features&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;K. Scott Allen did a great presentation on the Mobile Project Template and jQuery Mobile at NDC 2012:&lt;/p&gt;
&lt;iframe height="281" src="http://player.vimeo.com/video/43624503" frameborder="0" width="500" mozallowfullscreen="mozallowfullscreen" webkitallowfullscreen="webkitallowfullscreen" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;

&lt;p&gt;&lt;a href="http://vimeo.com/43624503"&gt;Scott Allen - ASP.NET MVC and jQuery Mobile&lt;/a&gt; from &lt;a href="http://vimeo.com/ndcoslo"&gt;NDCOslo&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Async Support&lt;/h3&gt;

&lt;p&gt;ASP.NET MVC has had async support since MVC 2, but it was hard. It gets a lot easier in MVC 4 due to async and await. Once again, I'll refer to Rick Anderson's excellent tutorial: &lt;a href="http://www.asp.net/mvc/tutorials/mvc-4/using-asynchronous-methods-in-aspnet-mvc-4"&gt;Using Asynchronous Methods in ASP.NET MVC 4&lt;/a&gt;. Here's an example of an async controller method that calls three long running services and returns to the user when all three are complete:&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;public async Task&amp;lt;ActionResult&amp;gt; PWGasync() 
{ 
    ViewBag.SyncType = &amp;quot;Asynchronous&amp;quot;; 
    var widgetService = new WidgetService(); 
    var prodService = new ProductService(); 
    var gizmoService = new GizmoService(); 
 
    var widgetTask = widgetService.GetWidgetsAsync(); 
    var prodTask = prodService.GetProductsAsync(); 
    var gizmoTask = gizmoService.GetGizmosAsync(); 
 
    await Task.WhenAll(widgetTask, prodTask, gizmoTask); 
 
    var pwgVM = new ProdGizWidgetVM( 
       widgetTask.Result, 
       prodTask.Result, 
       gizmoTask.Result 
       ); 
 
    return View(&amp;quot;PWG&amp;quot;, pwgVM); 
}&lt;/pre&gt;

&lt;h3&gt;OAuth and OpenID support&lt;/h3&gt;

&lt;p&gt;Yes, already mentioned before in Web Forms, but it's also in MVC 4, and it's really cool.&lt;/p&gt;

&lt;p&gt;The &lt;a href="http://www.asp.net/whitepapers/mvc4-release-notes"&gt;ASP.NET MVC 4 Release Notes&lt;/a&gt; cover these and other features in more detail.&lt;/p&gt;

&lt;h2&gt;ASP.NET Web API&lt;/h2&gt;

&lt;p&gt;ASP.NET Web API is officially released! I did a series of screencasts earlier this year that introduce ASP.NET Web API. They're slightly out of date on a few technical details (I'll be updating them soon) but explain what it is and why you'd use it; here's the first in the series:&lt;/p&gt;
&lt;object id="SilverlightMediaPlayer" style="width:644px;height:525px;" autoupdate="true" data="data:application/x-silverlight-2," type="application/x-silverlight-2"&gt;&lt;param name="MinRuntimeVersion" value="2.0.31005.0"&gt;&lt;param name="source" value="http://asp.net/ClientBin/mediaplayer/MSCommunities.MediaPlayer.xap?cdn_id=2012-08-14-001"&gt;&lt;param name="InitParams" value="extendedfeatures=false,videoid=37163,videowidth=644,videoheight=525"&gt;&lt;video controls="" width="644" height="525" src="http://content4.catalog.video.msn.com/e2/ds/5f5b86eb-3a48-4cca-9707-66aa1e82c49b.mp4"&gt;&lt;/video&gt;&lt;/object&gt;

&lt;p&gt;[&lt;a href="http://www.asp.net/web-api/videos/getting-started/your-first-web-api"&gt;Video and code on the ASP.NET site&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;The team wrote some great posts on recent features:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;From Yao, &lt;a href="http://blogs.msdn.com/b/yaohuang1/archive/2012/08/15/introducing-the-asp-net-web-api-help-page-preview.aspx"&gt;Introducing the ASP.NET Web API Help Page (Preview)&lt;/a&gt; (includes a video!) &lt;/li&gt;

  &lt;li&gt;From Alex, &lt;a href="http://blogs.msdn.com/b/alexj/archive/2012/08/15/odata-support-in-asp-net-web-api.aspx"&gt;OData support in ASP.NET Web API&lt;/a&gt; (very detailed, including how to bring back [Queryable] support) &lt;/li&gt;

  &lt;li&gt;From Henrik, &lt;a href="http://blogs.msdn.com/b/henrikn/archive/2012/08/15/asp-net-web-api-released-and-a-preview-of-what-s-next.aspx"&gt;ASP.NET Web API Released and a Preview of What’s Next&lt;/a&gt; – fantastic summary of what's in the box, as well as what's on the way &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Wow, that's a lot, and we didn't even get into Visual Studio 2012 features for Web Developers! Looks like it's time for a break, with a part 2 to follow...&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=8848360" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=HF384DEU0ac:rpT54ucg-E0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=HF384DEU0ac:rpT54ucg-E0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?i=HF384DEU0ac:rpT54ucg-E0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=HF384DEU0ac:rpT54ucg-E0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=HF384DEU0ac:rpT54ucg-E0:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?i=HF384DEU0ac:rpT54ucg-E0:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jongalloway?a=HF384DEU0ac:rpT54ucg-E0:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jongalloway?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jongalloway/~4/HF384DEU0ac" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/jgalloway/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/jgalloway/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://weblogs.asp.net/jgalloway/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category><category domain="http://weblogs.asp.net/jgalloway/archive/tags/ASP.NET+Web+API/default.aspx">ASP.NET Web API</category><feedburner:origLink>http://weblogs.asp.net/jgalloway/archive/2012/08/16/asp-net-4-5-asp-net-mvc-4-asp-net-web-pages-2-and-visual-studio-2012-web-developer-features.aspx</feedburner:origLink></item><media:rating>nonadult</media:rating></channel></rss>
