CSharp on the Fritzhttp://www.csharpfritz.com/Mon, 06 Oct 2014 13:46:12 +0000en-USSite-Server v6.0.0-2384-1 (http://www.squarespace.com)Authentication, Authorization and OWIN - Who Moved My Cheese?CodeProjectJeffrey FritzSun, 05 Oct 2014 16:31:53 +0000http://feedproxy.google.com/~r/CsharpOnTheFritz/~3/RT_TmBQZMBY/aspnet-identity-oauth-and-loginaspx50ba0a37e4b05b20d2db17f0:50bb6824e4b0ef0c2cb67dd9:54316596e4b044c01b1d6711With the introduction of OWIN-based security and Identity management in
ASP.NET 4.5, the configuration of authentication and authorization have
changed a bit for web forms developers. In this article, I review where
configuration has been turned off and where they have relocated to.

My secret identity... The Stig!

I was working with one of my ASP.NET projects this weekend and ran into an interesting problem while I was debugging. This application was written from the ground up to use ASP.NET identity and OAuth security for all of my authentication and authorization needs. That also means that my application follows the new default layout for an ASP.NET web forms application, with account management and login capabilities reside in the /Account folder structure.

An interesting series of things happens to web.config when we adapt the OAuth security management in ASP.NET 4.5+ What follows is what I have learned the hard way...

Authentication Information in Web.Config disappears

If you're a long time developer with ASP.NET like me, you're accustomed to the FormsAuthentication configuration in web.config. With the new authentication and identity modules in ASP.NET 4.5, all of this goes away. This really tweaked me at first, I got confused and followed the code... and trust me, its all good.

Web.Config has its authentication turned off and all identity providers removed. Check out this snippet from a fresh web.config in a new ASP.NET 4.5 application:

That's some scary stuff right there. Everything that I've known since ASP.NET was released in 2002 screams out: NOOOOOooooooo! This is the necessary configuration to turn off all of the embedded and automatically activated security modules in ASP.NET With that functionality shut off, the OAuth security module can step in.

OAuth Security Configuration

Instead, all of the security configuration goodness is kicked off in a new OWIN-compliant manner from within Startup.cs on the root of the application.

Check out that attribute at the top of the file, an OwinStartupAttribute that points to this class that contains the codified configuration of the application. The class is required to have a Configuration method with the same signature in this snippet. I'm not clear why the class does not adhere to an interface that enforces the presence of this method, but this is the requirement. You can see from here, that it calls the ConfigureAuth method in the App_Start/Startup.Auth.cs file. Its in there that we can find all of the configuration for managing the authentication of resources in the application.

public void ConfigureAuth(IAppBuilder app)
{
// Stuff to configure the Identity data storage
// Enable the application to use a cookie to store information for the signed in user
// Configure the sign in cookie
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login")
// other stuff
});
// more stuff down here
}

This is where I was thrown for a loop. How does ASP.NET know where my login page is? Its defined right here with the LoginPage configuration property inside of the CookieAuthenticationOptions class.

How is Authorization Handled?

Finally, how is authorization to pages handled? In the past, I would write blocks of XML with authorization elements that looked similar to the following...

The good news is that none of that has changed, and we can continue to code high-level authorization rules inside of web.config files in ASP.NET 4.5.

Summary

Its not a good idea to tinker with the default security configuration of ASP.NET unless you know where all of the moving pieces are. In the past, I knew where everything was referencing from web.config through global.asax.cs to verify connections to my application where authenticated and authorized. In the new Owin enabled ASP.NET, those pieces have moved and are now very descriptive in their new locations. Coming soon, I have a Pluralsight course that will discuss all of the cool things that you can do to configure ASP.NET OWIN security and other Advanced topics. I look forward to delivering it for you in the very near future.

]]>Authentication, Authorization and OWIN - Who Moved My Cheese?http://www.csharpfritz.com/blog/2014/10/5/aspnet-identity-oauth-and-loginaspxHow to Automate ASP.NET Custom Controls with the Gulp JavaScript Task RunnerCodeProjectJeffrey FritzWed, 01 Oct 2014 21:51:39 +0000http://feedproxy.google.com/~r/CsharpOnTheFritz/~3/OMiTEq4qNEc/gulping-my-aspnet-custom-controls50ba0a37e4b05b20d2db17f0:50bb6824e4b0ef0c2cb67dd9:542c5a17e4b0d98023e3bd77Are you building ASP.NET web applications? Do you Gulp? in this article,
I introduce how to use Gulp with Visual Studio. The sample walks through
automating static file packaging for custom ASP.NET controls.

Here I am, writing a module for my next Pluralsight course and I ran into an interesting problem. When I write a custom ASP.NET control, I now have lots of JavaScript and CSS libraries that I want to ship with it. With the introduction of the Task Runner Explorer in Visual Studio, I decided to try my hand at writing a Gulp script that will combine and compress these static resources inside of my class library project.

Introducing Gulp for the ASP.NET Developer

Gulp is another task runner for use with NodeJS, similar to Grunt. Unlike Grunt, Gulp runs based on a JavaScript file of instructions and can be run in an asynchronous manner. This leads to Gulp being a bit easier to read as a series of functions that will run faster than the Grunt JSON configuration file.

The name of the task is "css" and it will trigger a function. The function returns the result of operations on the css/bootstrap.css file. The file is piped from one operation to the next with the pipe method. First, the file is renamed to mycontrols,min.css so that the file matches the "mycontrols" project name. Next, the contents of the CSS file are minified with the minifycss command and then piped to the css folder using the gulp.dest method. Finally, a notification is triggered with the notify method and the message text specified.

This time, I am passing an array of files in to be processed. The collection are concatenated together with the concat method into the mycontrols.js file and written into the scripts folder with another gulp.dest method. The filename is renamed with a suffix of .min and sent into the uglify processor for minification. The results of the uglification are written back to the scripts folder and a notification is triggered with an appropriate message.

Finally, I wrote a default task to call the JS and CSS tasks. I called this task default:

gulp.task('default', ['js','css'], function() {});

The second argument in this method call is the collection of dependent tasks that should be called before the function is executed. In this way, the js and css tasks are called asynchronously.

Automating Gulp with Task Runner Explorer

With the Task Runner Explorer extension in Visual Studio, I can connect any and all of these tasks to various steps in the build process. In my case, I right-clicked on the 'default' task and chose to bind it to the 'Before Build' run time.

Now, every time I build my MyControls project, the gulp default task will run and deliver appropriate CSS and JS files for my controls to use.

Custom Control Project Considerations

Importantly, for this project I marked my gulpfile, package.json, and all of my original CSS and JS files as Build Action None and Do not copy to output directory. I did mark the new mycontrols.min.js and mycontrols.min.css as Embedded Resources so that they would be delivered inside of the DLL I will distribute with my controls.

Configuration for files to exclude from my DLL

Configuration for files to include in my DLL

Summary

The new Task Runner Explorer combined with the NodeJS command line interface and Gulp have made automating packaging assets for my custom controls much easier than previously. Now, visitors to my applications will download one script file and one css file for my controls. This will provide a faster and easier experience for my visitors and my developers that use my custom ASP.NET controls

]]>http://www.csharpfritz.com/blog/2014/10/1/gulping-my-aspnet-custom-controlsConnecting the dots with jQuery, JSONP, and WebAPICodeProjectJeffrey FritzThu, 25 Sep 2014 18:23:49 +0000http://feedproxy.google.com/~r/CsharpOnTheFritz/~3/FFubtLGlqV0/connecting-the-dots-with-jquery-jsonp-and-webapi50ba0a37e4b05b20d2db17f0:50bb6824e4b0ef0c2cb67dd9:542455ffe4b080907cedbc24I did some pair-programming with my friend Julie Lerman where we looked
into what we thought was a simple jQuery AJAX request problem. What we
found was something a bit more interesting in the connection between jQuery
and ASP.NET WebAPI.

This morning, I jumped in to help out my friend Julie Lerman with a question about using jQuery with ASP.NET WebAPI. In my mind, that's easy... something I've wired up lots of times and shouldn't be a problem. I offered to pair program for a bit and take a look at the code, after all... how hard could it be?

This was an interesting and simple block of jQuery that was expecting JSON from a service. A simple WebAPI controller, similar to the one we were attempting to query looked a little like this:

When I run this page from the same server that is hosting my service, no problem. I get a simple alert box with the number 2.

That wasn't our problem.

In this scenario, Julie was querying a different server that was hosting WebAPI and needed the services of JSONP to make that cross-origin request. The jQuery documentation indicates that you can simply switch the dataType of your AJAX call to "JSONP" and everything will just work.

No dice... nothing. We poked and prodded that JavaScript code and got nothing from it. Then it hit us: the problem isn't the JavaScript, its the callback coming from the server. WebAPI needs to know how to issue a command back to our script.

To complete the task and get WebAPI responding properly to a JSONP request, install the JSONP MediaTypeFormatter from NuGet. Once that is installed, enter your App_Start\WebApiConfig.cs and add to the bottom of the Register method the following line:

GlobalConfiguration.Configuration.AddJsonpFormatter();

Rebuild and re-run the JavaScript and now the done method of the AJAX call is being executed.

We were happy, and all was right in the world.

What did we learn about this problem and how to write better software?

The short answer is: JavaScript development is REALLY HARD without proper error messages and with connections that fail silently. There was no indication that the WebAPI was not attempting to call the Done callback method from jQuery. Additionally, WebAPI wasn't throwing any warning message to indicate that there were arguments passed in that it didn't know what to do with. This lack of verbose messaging in a debugging environment made it difficult for two experts to be able to track down a problem.

How would an average developer handle this? We can do better... I'll write more about this approach to making debuggable (yea, I just invented that word...) software tools next time and how we can improve this experience.

]]>http://www.csharpfritz.com/blog/2014/9/25/connecting-the-dots-with-jquery-jsonp-and-webapiUltimate Guide to Mobile Web Icon MarkupJeffrey FritzFri, 22 Aug 2014 18:52:10 +0000http://feedproxy.google.com/~r/CsharpOnTheFritz/~3/ZS4OD4xZvzs/ultimate-guide-to-mobile-web-icon-markup50ba0a37e4b05b20d2db17f0:50bb6824e4b0ef0c2cb67dd9:53ea3eece4b0cf701f253180<img class="thumb-image" alt="My Windows Phone Start Screen" data-image="http://static.squarespace.com/static/50ba0a37e4b05b20d2db17f0/t/53ea55ebe4b09ab249f4ccb4/1407866378106/My%20Windows%20Phone%20Start%20Screen" data-image-dimensions="1080x1920" data-image-focal-point="0.5,0.5" data-load="false" data-image-id="53ea55ebe4b09ab249f4ccb4" data-type="image" src="http://static.squarespace.com/static/50ba0a37e4b05b20d2db17f0/t/53ea55ebe4b09ab249f4ccb4/1407866378106/My%20Windows%20Phone%20Start%20Screen?format=500w" />
<p>My Windows Phone Start Screen</p>
<p id="yui_3_17_2_1_1407900908761_14102">I've been fighting a problem for the last few days, as I've been trying to identify why my blog (and a friend's blog) are not formatting Windows Phone Live Tile content properly. &nbsp;For those of you who don't use a windows phone, this is one of the uber-cool features of the device where I can bookmark a website as a tile on the start screen and updates to the site are broadcast as new text that rotates across the "back of the tile". &nbsp;</p><p id="yui_3_17_2_1_1407900908761_14103">In my Phone home screen, you can see that I have a number of websites pinned so that I can quickly get to them. &nbsp;This is from the lower part of the screen, but you can see the sites:</p><ul id="yui_3_17_2_1_1407900908761_14026"><li id="yui_3_17_2_1_1407900908761_14025"><a target="_blank" data-cke-saved-href="http://www.allaboutmicrosoft.com" href="http://www.allaboutmicrosoft.com">All About Microsoft</a></li><li><a target="_blank" data-cke-saved-href="http://developer.telerik.com" href="http://developer.telerik.com">Telerik Developer Network</a></li><li><a target="_blank" data-cke-saved-href="http://winsupersite.com" href="http://winsupersite.com">WinSuperSite</a></li><li><a target="_blank" data-cke-saved-href="http://www.philly.com" href="http://www.philly.com">Philly.com</a></li><li><a target="_blank" data-cke-saved-href="http://www.theverge.com" href="http://www.theverge.com">The Verge</a></li><li><a target="_blank" data-cke-saved-href="http://www.mashable.com" href="http://www.mashable.com">Mashable</a></li><li><a target="_blank" data-cke-saved-href="http://www.hanselman.com/blog" href="http://www.hanselman.com/blog">Scott Hanselman's Blog</a></li><li><a target="_blank" data-cke-saved-href="http://www.asp.net" href="http://www.asp.net">ASP.NET</a></li><li><a target="_blank" data-cke-saved-href="http://www.csharpfritz.com" href="http://www.csharpfritz.com">CSharp on the Fritz</a></li></ul><p id="yui_3_17_2_1_1407900908761_14104">You can immediately see headlines on a number of those site's tiles. &nbsp;Others, a simple and sometimes crappy looking screenshot of what the site looked like when I pinned the site. &nbsp;</p><p id="yui_3_17_2_1_1407900908761_14105">On Android and iPhone devices, you have a similar feature that creates an icon on the start screen. &nbsp;The device will typically take a screenshot and shrink that down for use as an icon. &nbsp;Other times, it will use the favicon with some simple formatting to create a home screen button. &nbsp; Yuck...</p><p id="yui_3_17_2_1_1407900908761_14106">In this article, I'm going to outline all of the tags to add to your site to make it look cool on your visitor's home screens.</p><h2 id="yui_3_17_2_1_1407900908761_14107">Get Started Easy - Android Icons</h2><p id="yui_3_17_2_1_1407900908761_14108">The easiest device to support is Android.&nbsp; With&nbsp;thee simple tags and&nbsp;two simple images, we can support a custom icon on the start screen.&nbsp; For my blog, I added these lines to my HTML header:</p><pre class="source-code"><span class="cm-tag cm-bracket">&lt;</span><span class="cm-tag">meta</span> <span class="cm-attribute">name</span>=<span class="cm-string">"mobile-web-app-capable"</span> <span class="cm-attribute">content</span>=<span class="cm-string">"yes"</span><span class="cm-tag cm-bracket">&gt;</span>
<span class="cm-comment">&lt;!-- Hi-res photo --&gt;</span>
<span class="cm-tag cm-bracket">&lt;</span><span class="cm-tag">link</span> <span class="cm-attribute">rel</span>=<span class="cm-string">"icon"</span> <span class="cm-attribute">sizes</span>=<span class="cm-string">"196x196"</span> <span class="cm-attribute">href</span>=<span class="cm-string">"http://csharpfritz.github.io/icons/large_and.png"</span><span class="cm-tag cm-bracket">&gt;</span>
<span class="cm-comment">&lt;!-- Lo-res photo for less capable devices --&gt;</span>
<span class="cm-tag cm-bracket">&lt;</span><span class="cm-tag">link</span> <span class="cm-attribute">rel</span>=<span class="cm-string">"icon"</span> <span class="cm-attribute">sizes</span>=<span class="cm-string">"128x128"</span> <span class="cm-attribute">href</span>=<span class="cm-string">"http://csharpfritz.github.io/icons/small_and.png"</span><span class="cm-tag cm-bracket">&gt;</span></pre><p> </p><p>The meta tag is required in order for the phone to&nbsp;enable the "Add to Homescreen" button. &nbsp;Now you can add a link to CsharpFritz.com to your home screen on Android and see the following:</p>
<img class="thumb-image" data-image="http://static.squarespace.com/static/50ba0a37e4b05b20d2db17f0/t/53f78db0e4b02099c7d06fb6/1408732603420/" data-image-dimensions="1080x1920" data-image-focal-point="0.5,1.0" data-load="false" data-image-id="53f78db0e4b02099c7d06fb6" data-type="image" src="http://static.squarespace.com/static/50ba0a37e4b05b20d2db17f0/t/53f78db0e4b02099c7d06fb6/1408732603420/?format=500w" />
<h2>Next Up: &nbsp;Apple iOS</h2><p dir="ltr">Apple's mobile devices come in four different sizes, and the following meta link tags are needed to add icons for devices with white cables:</p><pre class="source-code"><span class="cm-comment">&lt;!-- iOS Meta tags --&gt;</span>
<span class="cm-tag cm-bracket">&lt;</span><span class="cm-tag">link</span> <span class="cm-attribute">rel</span>=<span class="cm-string">"apple-touch-icon"</span> <span class="cm-attribute">href</span>=<span class="cm-string">"http://csharpfritz.github.io/icons/small_ios.png"</span><span class="cm-tag cm-bracket">&gt;</span>
<span class="cm-tag cm-bracket">&lt;</span><span class="cm-tag">link</span> <span class="cm-attribute">rel</span>=<span class="cm-string">"apple-touch-icon"</span> <span class="cm-attribute">sizes</span>=<span class="cm-string">"76x76"</span> <span class="cm-attribute">href</span>=<span class="cm-string">"http://csharpfritz.github.io/icons/small_ipad.png"</span><span class="cm-tag cm-bracket">&gt;</span>
<span class="cm-tag cm-bracket">&lt;</span><span class="cm-tag">link</span> <span class="cm-attribute">rel</span>=<span class="cm-string">"apple-touch-icon"</span> <span class="cm-attribute">sizes</span>=<span class="cm-string">"120x120"</span> <span class="cm-attribute">href</span>=<span class="cm-string">"http://csharpfritz.github.io/icons/larse_ios.png"</span><span class="cm-tag cm-bracket">&gt;</span>
<span class="cm-tag cm-bracket">&lt;</span><span class="cm-tag">link</span> <span class="cm-attribute">rel</span>=<span class="cm-string">"apple-touch-icon"</span> <span class="cm-attribute">sizes</span>=<span class="cm-string">"152x152"</span> <span class="cm-attribute">href</span>=<span class="cm-string">"http://csharpfritz.github.io/icons/large_ipad.png"</span><span class="cm-tag cm-bracket">&gt;</span></pre><p>At this point, we now have six different shortcut icon sizes. &nbsp;But wait! &nbsp;That's not all!!</p><p><br></p><h2>Windows and Windows Phone - Internet Explorer Meta Tags</h2><p id="yui_3_17_2_1_1408732203892_26389" dir="ltr">This is the pair that really drives some neat functionality in the mobile devices. &nbsp;Microsoft provides a three-step wizard to build out some initial pinned tiles functionality for your website at:&nbsp;<a href="http://www.buildmypinnedsite.com" data-cke-saved-href="http://www.buildmypinnedsite.com" target="_blank">http://www.buildmypinnedsite.com&nbsp;</a></p><p dir="ltr">This wizard will help you generate the following markup:</p><pre class="source-code"><span class="cm-tag cm-bracket">&lt;</span><span class="cm-tag">meta</span> <span class="cm-attribute">name</span>=<span class="cm-string">"application-name"</span> <span class="cm-attribute">content</span>=<span class="cm-string">"CSharp on the Fritz"</span><span class="cm-tag cm-bracket">/&gt;</span>
<span class="cm-tag cm-bracket">&lt;</span><span class="cm-tag">meta</span> <span class="cm-attribute">name</span>=<span class="cm-string">"msapplication-TileColor"</span> <span class="cm-attribute">content</span>=<span class="cm-string">"#2714cb"</span><span class="cm-tag cm-bracket">/&gt;</span>
<span class="cm-tag cm-bracket">&lt;</span><span class="cm-tag">meta</span> <span class="cm-attribute">name</span>=<span class="cm-string">"msapplication-square70x70logo"</span> <span class="cm-attribute">content</span>=<span class="cm-string">"http://csharpfritz.github.io/icons/small_w.png"</span><span class="cm-tag cm-bracket">/&gt;</span>
<span class="cm-tag cm-bracket">&lt;</span><span class="cm-tag">meta</span> <span class="cm-attribute">name</span>=<span class="cm-string">"msapplication-square150x150logo"</span> <span class="cm-attribute">content</span>=<span class="cm-string">"http://csharpfritz.github.io/icons/medium.png"</span><span class="cm-tag cm-bracket">/&gt;</span>
<span class="cm-tag cm-bracket">&lt;</span><span class="cm-tag">meta</span> <span class="cm-attribute">name</span>=<span class="cm-string">"msapplication-wide310x150logo"</span> <span class="cm-attribute">content</span>=<span class="cm-string">"http://csharpfritz.github.io/icons/wide.png"</span><span class="cm-tag cm-bracket">/&gt;</span>
<span class="cm-tag cm-bracket">&lt;</span><span class="cm-tag">meta</span> <span class="cm-attribute">name</span>=<span class="cm-string">"msapplication-square310x310logo"</span> <span class="cm-attribute">content</span>=<span class="cm-string">"http://csharpfritz.github.io/icons/large.png"</span><span class="cm-tag cm-bracket">/&gt;</span>
<span class="cm-tag cm-bracket">&lt;</span><span class="cm-tag">meta</span> <span class="cm-attribute">name</span>=<span class="cm-string">"msapplication-notification"</span> <span class="cm-attribute">content</span>=<span class="cm-string">"frequency=30;polling-uri=http://notifications.buildmypinnedsite.com/?feed=http://www.csharpfritz.com/blog?format=rss&amp;amp;id=1;polling-uri2=http://notifications.buildmypinnedsite.com/?feed=http://www.csharpfritz.com/blog?format=rss&amp;amp;id=2;polling-uri3=http://notifications.buildmypinnedsite.com/?feed=http://www.csharpfritz.com/blog?format=rss&amp;amp;id=3;polling-uri4=http://notifications.buildmypinnedsite.com/?feed=http://www.csharpfritz.com/blog?format=rss&amp;amp;id=4;polling-uri5=http://notifications.buildmypinnedsite.com/?feed=http://www.csharpfritz.com/blog?format=rss&amp;amp;id=5;cycle=1"</span><span class="cm-tag cm-bracket">/&gt;</span></pre><p>These tags should be fairly self-explanatory:</p><ul><li>application-name is the name to present on the tile for your website</li><li>TileColor is the background color to present for your tile</li><li>the logo tiles are all location for four more images to possibly present as the tile content on the start screen.</li><li>notification is an service location for Windows to poll for updates to present</li></ul><p>For more information about the API Internet Explorer, Windows and Windows Phone uses to present tiles for your website, check MSDN at:&nbsp;<a target="_blank" href="http://msdn.microsoft.com/en-us/library/ie/bg183312(v=vs.85).aspx">http://msdn.microsoft.com/en-us/library/ie/bg183312(v=vs.85).aspx</a></p><h2>Summary</h2><p dir="ltr">With a little bit of simple HTML header tags and 10 different sized images you can make your website appear like an application on the home screen of your mobile visitors. &nbsp;Next thing we need to figure out is a standard button that can be placed on our web pages that, when clicked, forces the browser to make an icon or tile for our website on the device home screen. &nbsp;</p><img src="//feeds.feedburner.com/~r/CsharpOnTheFritz/~4/ZS4OD4xZvzs" height="1" width="1" alt=""/>http://www.csharpfritz.com/blog/2014/8/12/ultimate-guide-to-mobile-web-icon-markupMy Ice Bucket Challenge for ALSJeffrey FritzTue, 19 Aug 2014 14:23:01 +0000http://feedproxy.google.com/~r/CsharpOnTheFritz/~3/0nRR5UZI-yQ/my-ice-bucket-challenge-for-als50ba0a37e4b05b20d2db17f0:50bb6824e4b0ef0c2cb67dd9:53f35c17e4b076451c6a8584<p id="yui_3_17_2_1_1408457698060_12430">Yesterday I was tagged on Facebook by Hunter Payette, son of <a href="http://twitter.com/careypayette" data-cke-saved-href="http://twitter.com/careypayette" target="_blank">Carey Payette</a> for the <a href="http://alsa.org/" data-cke-saved-href="http://alsa.org/" target="_blank">ice bucket challenge for ALS</a>. &nbsp;I did some research, and learned that this Ice Bucket Challenge was the brainchild of former Boston College baseball player Pete Frates.</p><p id="yui_3_17_2_1_1408457698060_19062">You learn more about <a href="http://espn.go.com/video/clip?id=11366483" data-cke-saved-href="http://espn.go.com/video/clip?id=11366483" target="_blank">Pete and the Ice Bucket Challenge from ESPN</a>.</p><iframe scrolling="no" allowfullscreen="" src="//www.youtube.com/embed/7-qRUBF4_0c?wmode=opaque&amp;enablejsapi=1" width="854" frameborder="0" height="480">
</iframe><p>I extend my challenge to my friends:</p><ul dir="ltr"><li>John Petersen</li><li>Burke Holland</li><li>Lino Tadros</li></ul><p> </p><img src="//feeds.feedburner.com/~r/CsharpOnTheFritz/~4/0nRR5UZI-yQ" height="1" width="1" alt=""/>http://www.csharpfritz.com/blog/2014/8/19/my-ice-bucket-challenge-for-alsNext Pluralsight Course: Advanced ASP.NET Web FormsJeffrey FritzTue, 15 Jul 2014 14:52:28 +0000http://feedproxy.google.com/~r/CsharpOnTheFritz/~3/rmok2TYHoz8/next-pluralsight-course-advanced-aspnet-web-forms50ba0a37e4b05b20d2db17f0:50bb6824e4b0ef0c2cb67dd9:53c53dc1e4b04d0924332edc<p>I was a bit coy about my next <a href="http://www.pluralsight.com">Pluralsight </a>course, but now lets get right to it. &nbsp;I'm going to open the box and show you all of the cool tricks that can make you successful with an Advanced ASP.NET Web Forms course. &nbsp;</p>
<img class="thumb-image" data-image="http://static.squarespace.com/static/50ba0a37e4b05b20d2db17f0/t/53c53fbbe4b00526a34376c9/1405435845939/" data-image-dimensions="691x245" data-image-focal-point="0.5,0.5" data-load="false" data-image-id="53c53fbbe4b00526a34376c9" data-type="image" src="http://static.squarespace.com/static/50ba0a37e4b05b20d2db17f0/t/53c53fbbe4b00526a34376c9/1405435845939/?format=500w" />
<p id="yui_3_17_2_1_1405435320080_34106">This course is designed to cover:</p>
<ul id="yui_3_17_2_1_1405435320080_29993" dir="ltr"><li> Building re-usable components<br><ul dir="ltr"><li>User Controls<br></li><li>Custom Controls<br></li><li>Scaffolding<br></li><li>Dynamic Data<br></li></ul></li><li>Advanced Data Access Techniques with Model Binding<br></li><li id="yui_3_17_2_1_1405435320080_29992"> The OWIN-based ASP.NET Identity and Security sub-system</li><li>Extensibility of ASP.NET with Modules, Handlers, and Dependency Injection for Web Forms</li><li>Unit Testing your Web Forms</li></ul><p>I wanted to cover these topics to deliver the insight and abilities that made me a successful web forms developer. &nbsp;You shouldn't be mired in repeating your code and stuck software practices when you can use these features to make your web forms development easier.</p><p>Oh, and just to sweeten the pot: &nbsp;I'm bringing some of the Telerik secret ingredients to the controls modules so that you can learn some of the techniques that help us to create the tools that you know and love.</p><p>I'm actively producing this course now, and hope to have it delivered in August. &nbsp;Are there any problems that you have with ASP.NET web forms that you want to learn how to solve? &nbsp;Sound off in the comments below</p><img src="//feeds.feedburner.com/~r/CsharpOnTheFritz/~4/rmok2TYHoz8" height="1" width="1" alt=""/>http://www.csharpfritz.com/blog/2014/7/15/next-pluralsight-course-advanced-aspnet-web-formsApplication Security: Where You Want It, When You Need It with Visual GuardJeffrey FritzFri, 11 Jul 2014 19:49:28 +0000http://feedproxy.google.com/~r/CsharpOnTheFritz/~3/2bGYNVM9aqk/application-security-visual-guard50ba0a37e4b05b20d2db17f0:50bb6824e4b0ef0c2cb67dd9:53c03a50e4b081056264c88a<p> </p><blockquote><blockquote><em>This post originally appears on <a href="http://www.codeproject.com/Articles/795814/Application-Security-Where-You-Want-It-When-You-Ne">CodeProject.com&nbsp;</a></em></blockquote></blockquote>
<p>I’ve been spending a lot of time thinking about application security recently. This used to be one of those topics I would plan to implement last when I read specification documents for projects. "Security is easy ... just put a few If/Then statements around the things that need to be secured and we’re done, right?" Then I went shopping at a large American retailer in the winter of 2013. Their systems were compromised and three months later, my credit card was shut off while I was attempting to pay for dinner at a nice restaurant. That hurt ... and security of applications suddenly became a problem that hurt me in a REAL way.</p><p>When I think about all of the .NET applications that I have written over the last 10 years, I’m sure there are many features that could use an improvement to their&nbsp;<a href="http://www.visual-guard.com/EN/net-powerbuilder-application-security-authentication-permission-access-control-rbac/sso-iam-identity-authorization-entitlement-audit-features-source_cp607vg.html">authorization policies</a>. Perhaps that customized authentication provider I wrote could be hardened a bit more. I think I’ve tried to play the security expert too much in the past, and if I were in a place to maintain those applications today, I would be thinking real hard about how to implement better security in them. After doing some research and looking at the new techniques published by Microsoft for securing their frameworks, I think I found a third party solution that does a great job with green-field and brown-field applications.</p>
<img class="thumb-image" data-image="http://static.squarespace.com/static/50ba0a37e4b05b20d2db17f0/t/53c03b5be4b049e594a6e5b4/1405107043230/" data-image-dimensions="248x433" data-image-focal-point="0.5,0.5" data-load="false" data-image-id="53c03b5be4b049e594a6e5b4" data-type="image" src="http://static.squarespace.com/static/50ba0a37e4b05b20d2db17f0/t/53c03b5be4b049e594a6e5b4/1405107043230/?format=500w" />
<p>I’ve been reviewing&nbsp;<a href="http://www.visual-guard.com/EN-source_cp607vg.html">Novalys Visual Guard</a>&nbsp;for the last 2 weeks, and found some really interesting nuggets in this package that would make my network administrators stand up and take notice. Let’s start with the basics: Visual Guard will let me configure a secure repository for my organization in several mediums including Microsoft SQL Server, Oracle Database, and a file share. In this repository, I can connect Active Directory or any number of third party OAuth providers for my users. Sweet! However, storing user credentials is just the tip of the iceberg.</p><p>User Authentication is the door that opens to get access to an application. It is your logon page, the logon screen, and the persisting of those credentials for the duration of time that someone is using one of your secured applications. Notice the use of the plural there: applications. Visual Guard allows me to configure a security repository that can administer many applications for a shared user base. With the<a href="http://www.visual-guard.com/EN/net-powerbuilder-application-security-authentication-permission-access-control-rbac/vg-winconsole-create-declare-manage-user-role-source_cp607vg.html">Visual Guard console</a>, I can clearly see what applications are managed and the permissions available inside of each application. Let’s go over that again: permissions for an application are managed outside of the application.</p><p>Even better than permissions managed outside of the application, I can configure multiple servers to manage the authentication and authorization rights in my application. That gives me scalability, and according to the manuals that I read through, it is even possible to configure Visual Guard to allow management of users and permissions with a web based console. There’s a ton of flexibility in the deployment of the&nbsp;<a href="http://www.visual-guard.com/EN/net-powerbuilder-application-security-authentication-permission-access-control-rbac/visual-guard-architecture-source_cp607vg.html">Visual Guard server</a>, and I’ve only just scratched the surface.</p>
<img class="thumb-image" alt="WebDashboard.jpg" data-image="http://static.squarespace.com/static/50ba0a37e4b05b20d2db17f0/t/53c03bc2e4b0fd3182dd7225/1405107870141/WebDashboard.jpg" data-image-dimensions="850x580" data-image-focal-point="0.5,0.5" data-load="false" data-image-id="53c03bc2e4b0fd3182dd7225" data-type="image" src="http://static.squarespace.com/static/50ba0a37e4b05b20d2db17f0/t/53c03bc2e4b0fd3182dd7225/1405107870141/WebDashboard.jpg?format=500w" />
<p id="yui_3_17_2_1_1405107639266_19845">The&nbsp;<a href="http://www.visual-guard.com/EN/net-powerbuilder-application-security-authentication-permission-access-control-rbac/vg-webconsole-create-declare-manage-user-role-source_cp607vg.html" data-cke-saved-href="http://www.visual-guard.com/EN/net-powerbuilder-application-security-authentication-permission-access-control-rbac/vg-webconsole-create-declare-manage-user-role-source_cp607vg.html">web-based console</a>&nbsp;can have its look and layout customized, even integrated into my application so that it appears seamlessly alongside my content. I can then review and manage security from anywhere in the world, with any device that can connect to my website.<br></p>
<img class="thumb-image" data-image="http://static.squarespace.com/static/50ba0a37e4b05b20d2db17f0/t/53c03eb7e4b0e651c235c816/1405107943718/" data-image-dimensions="1166x760" data-image-focal-point="0.5,0.5" data-load="false" data-image-id="53c03eb7e4b0e651c235c816" data-type="image" src="http://static.squarespace.com/static/50ba0a37e4b05b20d2db17f0/t/53c03eb7e4b0e651c235c816/1405107943718/?format=500w" />
<p>The windows console shows a tree of information about an application, like this one for the Console itself. You can clearly see the permissions available under the Visual Guard Console – Permissions folder. These permissions are grouped into Permission Sets and then assigned to Roles. Finally, roles can be assigned to users to grant authorization inside of your applications. With one set of credentials, I now have a single-sign-on across all applications that are integrated with my instances of the Visual Guard server.<br></p><p id="yui_3_17_2_1_1405107639266_22935">The killer feature here is the integration with your application. This is where I really saw an application for those long-life applications that I wrote many years ago. You can add Visual Guard on to an existing web application without having to recompile! Due to the provider model of the ASP.NET web forms project, as long as your login page is using the security providers defined in web.config, you should be able to swap out the authentication provider for Visual Guard. After that, the addition of an HttpModule is all you need to secure the rest of the application. Visual Guard secures your application by intercepting normal events as they occur, and allows you to specify what actions to take at those events.<br></p>
<img class="thumb-image" data-image="http://static.squarespace.com/static/50ba0a37e4b05b20d2db17f0/t/53c03f85e4b0e07e01d462ba/1405108110668/" data-image-dimensions="476x192" data-image-focal-point="0.5,0.5" data-load="false" data-image-id="53c03f85e4b0e07e01d462ba" data-type="image" src="http://static.squarespace.com/static/50ba0a37e4b05b20d2db17f0/t/53c03f85e4b0e07e01d462ba/1405108110668/?format=500w" />
<p id="yui_3_17_2_1_1405107639266_23238">Each permission defined in Visual Guard can have Property Actions or Script Actions associated with it. These are codified changes to make to your application, written and managed in the administrative console and executed at run-time of the application. You can do something as simple as create a ViewGrid permission and set the Visible property on a grid to true if the user has that permission. Once the permissions are defined, this can be managed by your operations or security teams with no intervention from a developer required. There are more advanced integrations available that involve a developer modifying code to provide additional security checks if that is what you require. However, this is too cool for me to be able to delegate the authorization checks of my application to the operations team!</p><p>Another interesting feature that Visual Guard could help me with is&nbsp;<a href="http://www.visual-guard.com/EN/net-powerbuilder-application-security-authentication-permission-access-control-rbac/secure-saas-and-multi-tenant-apps-with-asp-net-or-wcf-Silverlight-source_cp607vg.html" data-cke-saved-href="http://www.visual-guard.com/EN/net-powerbuilder-application-security-authentication-permission-access-control-rbac/secure-saas-and-multi-tenant-apps-with-asp-net-or-wcf-Silverlight-source_cp607vg.html">multi-tenancy</a>. I have architected and written several large multi-tenant applications in my past, and the story of data access and security is always a sticky one to describe and get correct with thousands of lines of code to manage. Visual Guard has built in inheritance of permissions from group to child-group. This hierarchy is a nightmare to manage in a SQL database, and I can now rely on Visual Guard to apply that hierarchy and data-filter for me.</p><p>Finally, there is always a question of accountability. Who performed what secured operation and what time in the application? In the past, I’ve written huge database tables and logging mechanisms to provide this auditability of secure content. Visual Guard provides&nbsp;<a href="http://www.visual-guard.com/EN/net-powerbuilder-application-security-authentication-permission-access-control-rbac/vg-winconsole-create-declare-manage-user-role-source_cp607vg.html#audit" data-cke-saved-href="http://www.visual-guard.com/EN/net-powerbuilder-application-security-authentication-permission-access-control-rbac/vg-winconsole-create-declare-manage-user-role-source_cp607vg.html#audit">an audit report that outputs all records of security checks</a>&nbsp;in your applications. After having handcrafted several of these services, I am happy to see that I don’t need to do that again. According to the docs from Novalys, Visual Guard is&nbsp;<a href="http://www.visual-guard.com/EN/net-powerbuilder-application-security-authentication-permission-access-control-rbac-articles/dotnet-security-article-ressources/healthcare-application-security-comply-regulations-source_cp607vg.html" data-cke-saved-href="http://www.visual-guard.com/EN/net-powerbuilder-application-security-authentication-permission-access-control-rbac-articles/dotnet-security-article-ressources/healthcare-application-security-comply-regulations-source_cp607vg.html">HIPPA and SOX compliant</a>&nbsp;... another headache that I can leave to professionals who are focused on that task.</p><p>My mindset on security has changed. No longer do I view it as an afterthought that can be added to my code once I have the core functionality working. Now I see security as something that I can partner with my operations team to implement. I can enable them to secure the services we are producing with the help of Novalys Visual Guard. This leads to more secure systems, security officers who are more aware of how software services are secured and more secure control of authorization capabilities within those facilities.</p><p><em>Disclosure of Material Connection: I received one or more of the products or services mentioned above for free in the hope that I would mention it on my blog. Regardless, I only recommend products or services I use personally and believe my readers will enjoy. I am disclosing this in accordance with the&nbsp;</em><a href="http://www.access.gpo.gov/nara/cfr/waisidx_03/16cfr255_03.html" data-cke-saved-href="http://www.access.gpo.gov/nara/cfr/waisidx_03/16cfr255_03.html"><em>Federal Trade Commission’s 16 CFR, Part 255: "Guides Concerning the Use of Endorsements and Testimonials in Advertising</em></a><em>.</em></p><img src="//feeds.feedburner.com/~r/CsharpOnTheFritz/~4/2bGYNVM9aqk" height="1" width="1" alt=""/>http://www.csharpfritz.com/blog/2014/7/11/application-security-visual-guardMicrosoft MVP - Two Years Running..Jeffrey FritzTue, 01 Jul 2014 18:11:23 +0000http://feedproxy.google.com/~r/CsharpOnTheFritz/~3/feTelPqbKro/microsoft-mvp-two-years-running50ba0a37e4b05b20d2db17f0:50bb6824e4b0ef0c2cb67dd9:53b2f3d3e4b018f9dabac3aa<p>This morning I was renewed as a <a target="_blank" href="http://mvp.microsoft.com/en-us/mvp/Jeffrey%20T.%20Fritz-5000248">Microsoft MVP</a> in ASP.NET and IIS. &nbsp;This is a tremendous validation of the efforts I have put in through conference appearances, Pluralsight courses, blogging, and writing of other articles.</p><p>I'm going to be writing a lot more in the coming weeks and months on the advances in ASP.NET vNext, my next Pluralsight course, and I've got an app idea or two in the plans as well. &nbsp;</p><p>Stay with me and I think you'll find some neat angle brackets, curly braces, and web goodness coming from yours truly before the summer is out.</p><img src="//feeds.feedburner.com/~r/CsharpOnTheFritz/~4/feTelPqbKro" height="1" width="1" alt=""/>http://www.csharpfritz.com/blog/2014/7/1/microsoft-mvp-two-years-runningMultiTasking is a MythCodeProjectJeffrey FritzSun, 29 Jun 2014 20:52:33 +0000http://feedproxy.google.com/~r/CsharpOnTheFritz/~3/LSfo_UQ2TWY/multitasking-is-a-myth50ba0a37e4b05b20d2db17f0:50bb6824e4b0ef0c2cb67dd9:53b032d3e4b0e70ca61c8b84In this post, Jeff discusses his multitasking tips and some pitfalls that
he has found from multitasking too much.Yesterday, I took my family to the Franklin Institute in Philadelphia (we have a membership there) and visited their new permanent exhibit on the brain. While going through, I found this display and it really hit home for me:

I have always had a problem with multitasking. Its not something that I can do well, as I prefer to focus on one thing at a time, giving it my undivided attention. Once I've completed that task, I move on to the next task. As someone who works from home, I've found several benefits from this approach, and I've also found several pitfalls.

Successful Techniques

1. Make a list and stick to it

I've made task lists all sorts of ways in the past. I've used a paper notepad, notepad.exe, Outlook Tasks, OneNote, and Trello. They all are used for the same thing: allow me to forget future tasks and only focus on the current item.

This is one of the concepts behind Kanban and Scrum. You can only take one task card at a time to be worked on. Once the task card is finished, it gets placed into another queue for review and validation by other team members. Trello is an excellent free tool for this, but has its drawbacks, as do all online task managers.

The biggest problem I have with the online task list manager is what I can the "in your face" problem. I need to open the application or navigate to the website in order for me to face my task list of the day. It is all to easy for me to say, "lemme open Facebook first" or "hey what's going on at LinkedIn" before I face my list of tasks for my work session.

However, by keeping a paper list of tasks and leaving them on my desk chair, or on my keyboard. Now, I need to look at my to-do list before I begin working on anything. It may seem simple, but it keeps someone like me who can get distracted very easily on task right from the get go.

2. My Office is My Work Space

This sounds like a simple idea, but let me describe for you my mindset. I have a room in my home dedicated as my home office. When I am in that room, I am in there for one purpose only: to accomplish 'work tasks'. After a bit of practice of this habit, I now get in the "working mood" just when I walk into the room. My mind knows that good stuff will be accomplished once I sit down.

This also has the side-benefit of 'training my family' that when Daddy is in his office, he's working and we should leave him alone. Not that I want to be an office hermit, but this bit of training can grant me several hours at a time of uninterrupted work. In a home with two young daughters, this can be a welcome retreat.

3. Get in "The Zone"

Solving a Rubik's Cube

If you've ever been there, you know what I'm talking about. "The Zone" or "Flow" as psychologists call it can be intoxicating. This is when your mind is fully immersed in a task and everything around you just falls away as unimportant. You'll exit the zone and find out that five to ten hours have gone by and you haven't eaten or been to the restroom in that time.

In the film The Social Network, they refer to this phenomena again and again as being "wired in". The coders in the movie are oblivious to what's going on around them and solely focused on their code:

This is, how programers should be working

My current favorite poker chips to shuffle

For me, when I am analyzing some source code to better understand it, I start to enter this mindset. I'll move further into it as I begin to write code and see the fruits of my progress. When I need to wait for a compilation or other process to complete, I'll grab a Rubik's cube and solve it while sitting at my desk. I can usually complete a cube in less than two or three minutes, and this has been an effective tool to keep my mind active.

Another trick I use to keep my mind going involves poker chips. Yes, I enjoy an occasional game of hold 'em, but in this case I'm not playing poker, just shuffling the chips. What I do is take a stack of 10 chips, typically of two different colors, and break them into two equal stacks of the same color. I then merge the two stacks, inserting a white chip between two blue chips. This should result in the stack perfectly merged, with white chips alternating between blue chips. I'll repeat this separate and merge process until I get the chips back in a state where the two sets of colored chips are completely isolated from each other, like in the pic above.

Former co-workers will tell you, when they hear the sound of the shuffling poker chips, they know I am deep in thought and stuff is getting accomplished.

Carl and Richard on .NET Rocks had a great episode this week talking to Mark Seeman about getting in the zone. They have some great tips there, and its worth a listen.

Problem Areas

These are 3 great ideas to help me get in the zone, get focused and get going at a high speed. Unfortunately, the following problems arise that prevent my productivity.

1. The list runs empty

When I run out of tasks on my list, I end up wandering aimlessly. This can be a good thing, but typically its a bad thing. It is a good thing when I can take time to relax, grab a frosty adult beverage from my friends at Redds Apple, and take it easy. However, my mind is constantly racing at new ideas, and even when I'm not actively working on something, I like to write down ideas in OneNote on my phone.

2. Interruptions - Arrgh!

This is the killer one for me, and where that passage I read at the Franklin Institute grabbed me. Interruptions murder my productivity. This can be anything from a text message, a new tweet that mentions me, or some great post from a friend on Facebook. Kids wandering in to my office complaining about what their mother has chosen for dinner and buggy software that I'm using that prevents me from working productively are more time sinks that I try to avoid.

Like the sign at the beginning of this piece said, you can't truly multi-task. The best you can hope for is context switching, and synchronizing your current mindset to paper or some other medium that you can use to pick up and return to your previous state quickly. Coworkers and family members have gotten very frustrated at me when they have attempted to engage me while I am 'in the zone' and I need to take that minute to "save my progress" so that I can resume after I've addressed their questions.

I've also learned to shut those things out, to silence my phone and to use a pair of gaming headphones with decent noise cancelling capabilities to limit the amount of ambient (read: distracting) noise that enters my head. Combine that with some mellow music (my current preferred tunes are from Lindsey Stirling) and I can stay very focused for hours on end.

3. Outside of my space

When I'm out of my space and can't get comfortable, it is very hard for me to get in the zone. Sitting at the airport, in a coffee shop, in an office with lots of traffic going by my desk... these are all places that I have found very difficult to enter the zone. However, I have found tremendous value in the desk in a quiet hotel room.

I'll pull the drapes shut, turn the lights down, so that the only light is coming from my laptop. With a nice venti caramel macchiato by my side, I can code anything! Its a strange experience, being away from home and feeling like I'm back in my comfortable office, but it works.

Summary

This is just a collection of tip about what works for me. Productivity and getting in the zone are difficult things to manage, and I like to manage them as best as possible through these simple environment management techniques. What works for you? Share your tips in the space below.

]]>http://www.csharpfritz.com/blog/2014/6/29/multitasking-is-a-myth7 Twitter Accounts to Follow for the latest on ASP.NET vNextJeffrey FritzThu, 26 Jun 2014 19:24:17 +0000http://feedproxy.google.com/~r/CsharpOnTheFritz/~3/IIc9Wrgt0zQ/11-twitter-accounts-to-follow-for-the-latest-on-aspnet-vnext50ba0a37e4b05b20d2db17f0:50bb6824e4b0ef0c2cb67dd9:53ac65e5e4b0236127577fa9<p id="yui_3_17_2_1_1403807193589_27629">I've been working a lot on the <a target="_blank" data-cke-saved-href="http://www.asp.net/vnext/overview/aspnet-vnext/getting-started-with-aspnet-vnext-and-visual-studio" href="http://www.asp.net/vnext/overview/aspnet-vnext/getting-started-with-aspnet-vnext-and-visual-studio">ASP.NET vNext framework</a> over the last 2 months, and have only started to publish some of my work and my findings. &nbsp;I've given a presentation at Philly Code Camp explaining a bit about how to start working with this new edition of the framework. &nbsp;Now, I want to start reporting on what's going on and give you some pointers to follow as the framework develops over the next few months.</p><p id="yui_3_17_2_1_1403807193589_27630">In this post, I want to give you a collection of twitter accounts to follow and learn more about ASP.NET directly from the team. &nbsp;This is my top ten list to follow for announcements and discussion of the product:</p>
<img class="thumb-image" data-image="http://static.squarespace.com/static/50ba0a37e4b05b20d2db17f0/t/53ac681fe4b02be9d980f7aa/1403807793260/" data-image-dimensions="256x256" data-image-focal-point="0.5,0.5" data-load="false" data-image-id="53ac681fe4b02be9d980f7aa" data-type="image" src="http://static.squarespace.com/static/50ba0a37e4b05b20d2db17f0/t/53ac681fe4b02be9d980f7aa/1403807793260/?format=500w" />
<h3><a target="_blank" href="http://twitter.com/aspnet">@AspNet</a></h3><p>The grand-daddy of ASP.NET accounts. &nbsp;Just about all activity around the framework is reported from this account. &nbsp;</p><p> </p>
<img class="thumb-image" data-image="http://static.squarespace.com/static/50ba0a37e4b05b20d2db17f0/t/53ac697ae4b0e27670a47f5d/1403808130116/" data-image-dimensions="400x400" data-image-focal-point="0.5,0.5" data-load="false" data-image-id="53ac697ae4b0e27670a47f5d" data-type="image" src="http://static.squarespace.com/static/50ba0a37e4b05b20d2db17f0/t/53ac697ae4b0e27670a47f5d/1403808130116/?format=500w" />
<h3><a target="_blank" href="http://twitter.com/scottgu">@ScottGu</a></h3><p><a target="_blank" href="http://weblogs.asp.net/scottgu">Scott Guthrie</a> - the guy who created ASP.NET. &nbsp;He's also the executive VP at Microsoft who oversees Windows Azure and all server products, including ASP.NET</p>
<img class="thumb-image" data-image="http://static.squarespace.com/static/50ba0a37e4b05b20d2db17f0/t/53ac6a89e4b0311d678e9c3d/1403808398620/" data-image-dimensions="400x400" data-image-focal-point="0.5,0.5" data-load="false" data-image-id="53ac6a89e4b0311d678e9c3d" data-type="image" src="http://static.squarespace.com/static/50ba0a37e4b05b20d2db17f0/t/53ac6a89e4b0311d678e9c3d/1403808398620/?format=500w" />
<h3><a target="_blank" data-cke-saved-href="http://twitter.com/shanselman" href="http://twitter.com/shanselman">@shanselman</a></h3><p>What can I say about <a target="_blank" data-cke-saved-href="http://www.hanselman.com/blog" href="http://www.hanselman.com/blog">Scott Hanselman</a> that you haven't heard already? &nbsp;Scott has several podcasts, a very good blog, and appears in many training videos for the framework. &nbsp;Why aren't you following him already?</p>
<img class="thumb-image" data-image="http://static.squarespace.com/static/50ba0a37e4b05b20d2db17f0/t/53ac6c22e4b009b45dc9beae/1403808801365/" data-image-dimensions="153x204" data-image-focal-point="0.5,0.5" data-load="false" data-image-id="53ac6c22e4b009b45dc9beae" data-type="image" src="http://static.squarespace.com/static/50ba0a37e4b05b20d2db17f0/t/53ac6c22e4b009b45dc9beae/1403808801365/?format=500w" />
<h3><a target="_blank" href="http://twitter.com/davidfowl">@DavidFowl</a></h3><p>This is <a target="_blank" href="http://davidfowl.com">David Fowler</a>... He is one of the lead authors on the vNext framework. &nbsp;If you are watching the evolution of the code on <a target="_blank" href="http://github.com/aspnet/KRuntime">GitHub</a>, you will become very familiar with his commits and coding style. &nbsp;David is also one of the original authors of SignalR.</p><p> </p>
<img class="thumb-image" data-image="http://static.squarespace.com/static/50ba0a37e4b05b20d2db17f0/t/53ac6d42e4b006ce07f713bd/1403809099194/" data-image-dimensions="400x400" data-image-focal-point="0.5,0.5" data-load="false" data-image-id="53ac6d42e4b006ce07f713bd" data-type="image" src="http://static.squarespace.com/static/50ba0a37e4b05b20d2db17f0/t/53ac6d42e4b006ce07f713bd/1403809099194/?format=500w" />
<h3><a target="_blank" href="http://twitter.com/damianedwards">@DamianEdwards</a></h3><p><a target="_blank" href="http://damianedwards.wordpress.com/">Damian </a>is a project manager at Microsoft on the team, and leads the teams that are building out web forms and SignalR for the vNext framework. &nbsp;Damian loves Australian cricket, so be ready to learn a thing or two about the sport. &nbsp;He is also one of the original authors of SignalR.</p><h3> </h3>
<img class="thumb-image" data-image="http://static.squarespace.com/static/50ba0a37e4b05b20d2db17f0/t/53ac71bfe4b0d980731c8d7c/1403810242265/" data-image-dimensions="400x400" data-image-focal-point="0.5,0.5" data-load="false" data-image-id="53ac71bfe4b0d980731c8d7c" data-type="image" src="http://static.squarespace.com/static/50ba0a37e4b05b20d2db17f0/t/53ac71bfe4b0d980731c8d7c/1403810242265/?format=500w" />
<h3><a target="_blank" href="http://twitter.com/mkristensen">@MKristensen</a></h3><p><a target="_blank" href="http://madskristensen.net/">Mads Kristensen</a> is responsible for <a target="_blank" href="http://vswebessentials.com">VS Web Essentials</a> and the Visual Studio editor support for the ASP.NET framework. &nbsp;He's built the browser link feature and is a hardcore student of the W3C standards and browser capabilities.</p><h3> </h3>
<img class="thumb-image" data-image="http://static.squarespace.com/static/50ba0a37e4b05b20d2db17f0/t/53ac72b7e4b0e63cc7c574a3/1403810488294/" data-image-dimensions="400x400" data-image-focal-point="0.5,0.5" data-load="false" data-image-id="53ac72b7e4b0e63cc7c574a3" data-type="image" src="http://static.squarespace.com/static/50ba0a37e4b05b20d2db17f0/t/53ac72b7e4b0e63cc7c574a3/1403810488294/?format=500w" />
<h3><a target="_blank" href="https://twitter.com/danroth27">@danroth27</a></h3><p>Daniel Roth is a project manager on the team and responsible for MVC, WebAPI and much of the cloud optimized server-side framework that you have seen referred to as Project K. &nbsp;</p><p> </p><p> </p>
<p>Keep an eye on these accounts, and you'll be updated as things evolve. &nbsp;Of course, you should also follow <a href="#">@csharpfritz</a> so that you can get my latest unbiased and hardcode opinion of what's new and how it impacts your projects. &nbsp;</p><img src="//feeds.feedburner.com/~r/CsharpOnTheFritz/~4/IIc9Wrgt0zQ" height="1" width="1" alt=""/>http://www.csharpfritz.com/blog/2014/6/26/11-twitter-accounts-to-follow-for-the-latest-on-aspnet-vnextMobilize ASP.NET Web Forms with Pluralsight!Jeffrey FritzWed, 25 Jun 2014 14:21:27 +0000http://feedproxy.google.com/~r/CsharpOnTheFritz/~3/NVDGhs78BL4/mobilize-aspnet-web-forms-with-pluralsight50ba0a37e4b05b20d2db17f0:50bb6824e4b0ef0c2cb67dd9:53aad8e5e4b05ff168ab10c6<p>My latest course with <a target="_blank" href="http://www.pluralsight.com">Pluralsight </a>is finally complete and now available! &nbsp;After months of agonizing over the last bits, I finally have published "<a target="_blank" href="http://pluralsight.com/training/Courses/TableOfContents/mobilize-aspdotnet-web-forms">Mobilize Your ASP.NET Web Forms</a>" for all to review.</p><p>In the first week that it is available, the course has been evaluated with a 4.4 out of 5 rating by 14 viewers. &nbsp;Thank you for your reviews!</p><p>This was an important course for me to complete for a number of reasons:</p>
<img class="thumb-image" data-image="http://static.squarespace.com/static/50ba0a37e4b05b20d2db17f0/t/53aada3be4b0b5beded28591/1403705919469/" data-image-dimensions="694x243" data-image-focal-point="0.5,0.5" data-load="false" data-image-id="53aada3be4b0b5beded28591" data-type="image" src="http://static.squarespace.com/static/50ba0a37e4b05b20d2db17f0/t/53aada3be4b0b5beded28591/1403705919469/?format=500w" />
<ol id="yui_3_17_2_1_1403705561831_28322"><li>My first "solo" course that I delivered. &nbsp;Previously, I contributed to "<a href="http://pluralsight.com/training/Courses/TableOfContents/one-aspdotnet-from-scratch" data-cke-saved-href="http://pluralsight.com/training/Courses/TableOfContents/one-aspdotnet-from-scratch" target="_blank">One ASP.NET from Scratch</a>" with <a href="http://www.jesseliberty.com" data-cke-saved-href="http://www.jesseliberty.com" target="_blank">Jesse Liberty</a>.</li><li>This was a topic that hit home with me. &nbsp;I had received a lot of questions and criticism about ASP.NET web forms NOT being able to deliver effective mobile content</li><li>I have spent a lot of time over the last nine months with my colleagues at Telerik to ensure that our <a href="http://www.telerik.com/products/aspnet-ajax.aspx" data-cke-saved-href="http://www.telerik.com/products/aspnet-ajax.aspx" target="_blank">UI for ASP.NET</a> product had a killer mobile story</li></ol><h3>What's Next?</h3><p dir="ltr">I have a number of course ideas that I am kicking around. &nbsp;I'm submitting a proposal today for another ASP.NET course at Pluralsight. &nbsp;Once I get the go-ahead, I'll drop hints as to the content, but I want to keep it quiet ahead of release to avoid any competition.</p><p dir="ltr"> </p><img src="//feeds.feedburner.com/~r/CsharpOnTheFritz/~4/NVDGhs78BL4" height="1" width="1" alt=""/>http://www.csharpfritz.com/blog/2014/6/25/mobilize-aspnet-web-forms-with-pluralsightThat Annoying ASP.NET Issue with PostbackCodeProjectJeffrey FritzMon, 09 Jun 2014 20:55:47 +0000http://feedproxy.google.com/~r/CsharpOnTheFritz/~3/RGvBHULDvaM/that-annoying-aspnet-issue-with-postback50ba0a37e4b05b20d2db17f0:50bb6824e4b0ef0c2cb67dd9:539618d3e4b076b0c49cbedaArrgh! I've got an annoying issue in ASP.NET postback: its not entering
the event handler for my button click at all. Read on to learn how I
solved this annoying issue.Stop me if you've heard this before:

I'm working through an ASP.NET project and suddenly Postback stops working. I know! This is the simplest of interactions with an ASP.NET web forms application, and its not WORKING!! What the heck is wrong with this stupid website? I mean, I didn't change anything.. I just want my default.aspx form to be able to have a button click button handler. Is that so DIFFICULT? Get your act together FRITZ!1!!

I did some digging and digging on this one. Did I bring in an add-in or library to my project that was preventing the postback from capturing the click event? I broke out Fiddler and analyzed the traffic, to ensure that the form content was indeed being submitted properly back to the server. Everything looked good there.

My next analysis step was to take a look at the Request.Form collection. I should see the __EVENTARGUMENT being populated. When I opened the Immediate Window and inspected Request.Form, this is what I found:

The Visual Studio Immediate Window when I inspected Request.Form

How is the Request.Form collection empty? What's the deal with THAT?

I started thinking about the ASP.NET pipeline, and it hit me: FriendlyUrls.

There's this interesting thing that happens when web forms attempt to post back to pages managed by FriendlyUrls and lack a filename. This could be any of the following pages in your site:

/

/Products/

/Orders/

You get the idea. These pages for some reason don't handle postback properly. With that in mind, I set forth to drop a quick and dirty change to enable this throughout the website. Fortunately, I can make that change through a URL Rewrite operation. I added the following event handler to my global.asax.cs file:

With that, my pages started posting back properly... all was right in the world.

Please note: you will have this problem with the default ASP.NET project with web forms when FriendlyUrls are enabled.

]]>That Annoying ASP.NET Issue with Postbackhttp://www.csharpfritz.com/blog/2014/6/9/that-annoying-aspnet-issue-with-postbackTechEd North America 2014, Thank You Houston!Jeffrey FritzTue, 20 May 2014 14:28:06 +0000http://feedproxy.google.com/~r/CsharpOnTheFritz/~3/qFCzfD56PM8/teched-north-america-2014-thank-you-houston50ba0a37e4b05b20d2db17f0:50bb6824e4b0ef0c2cb67dd9:537a4a43e4b0e9e345821ffcIn this post, Jeff wraps up his experience talking at Microsoft's TechEd
North America 2014 conference. Video, resources, and demo code are
available. Click through for the goodies!After a whirlwind week through the monstrous training event that is Microsoft' Tech Ed conference, I can finally write this post to recount my experience of that week in Houston.

I arrived at the event half-way through the first day, and walked the six blocks from my hotel to the conference center. After negotiating the maze of closed sidewalks, locked doors, and blocked escalators, I eventually found my way to registration and the conference speakers room. At other events, I am familiar with the speakers room containing several long tables with enough space for 20-30 to power up laptops and review their content.

At TechEd, with more than 500 break out sessions, I did not expect the mammoth room that opened up before me. There was easily room for 100 to work, and every seat was taken on this Monday afternoon. I noticed a number of people in the room whose sessions I had attended in years past, and understood at that point I made it: I was at the big show, and this was going to be my turn to present. The staff took my information and handed me what I had been coveting for years, a pair of speaker shirts - proof positive that I was where I belonged.

In the weeks leading up to arriving in Houston, I had this feeling that I was just pretending that I got the invitation to speak at TechEd. I had been wanting to be a lecturer at this show since 2008, and there was just no WAY that I could finally have the change to do it. This moment when I left that room with two purple speaker shirts over my shoulder was tangible verification - no more denial.

I attended and worked at the Microsoft ASP.NET experts booth on Monday evening and Tuesday afternoon. Including Tuesday evening, where I appeared at an "Ask the Experts" event, I felt like I was really getting into a groove. I was wearing my speaker badge and colors, and representing the content well. ... and then Wednesday happened.

I couldn't sleep Tuesday night. Maybe it was the killer party that my colleagues at Telerik put on, maybe it was nerves, but it certainly was not for lack of rest. I woke at 4am on Wednesday morning and got to reviewing and rewriting my demos for the 5pm presentation. I calculated that I needed to leave the hotel by 2pm to make it in time for my talk. All morning I tuned, pruned, and practices my session. I added a joke or two, moved some code around until I got it just the way I wanted it.... and then I left my hotel at 1:30pm.

After a quick lunch at Chipotle across the street, I walked to the venue. I made my way to the speaker room and sat for a few minutes, re-reading my paper notes and slides one final time and then I left for my room. When I arrived, I found my friend Mads still presenting his session on Performance Tuning ASP.NET. It was a great session, with all of the seats filled and standing room only remaining.

Give the fear only 5 seconds, then forget about it

Once that session ended, I wired up my mic and got on stage. After connecting my laptop to the series of displays that I needed for this session, I looked out at a mostly empty room and thought: Holy crow, there's a lot of seats out there. I'm not usually nervous when I look out at my audience, but there was a lot of build up to this one for me, and I started to feel it. I wandered to the back of the room and took a picture or two, and started to get my mind right. I like to think of a moment in the first episode of Lost, where Jack explains that he's only going to be afraid for 5 seconds and then block it out. ... and that's what I did.

I went on stage with 15 minutes to go until my session was scheduled to start, and relied on an old friend of mine to help break the ice. My childhood friend Rusty Ward has been producing this YouTube series called 'Science Friction' for a year or so now, and I've started showing an episode or two before my sessions start. The audience enjoys it, and it gets things going the way I want - smiles and engaged.

I set forth after showing a second episode of this series. Its a great series, and you should check it out if you haven't click the link already. Anyways, I started my talk and everything ran very well. You can watch a recording of the screens and my audio here:

Afterward, I had a number of questions and lots of great feedback come in. Someone called it "the best session of the entire conference" another person said:

"I was hungover all day, and this was such an awesome session that it got my full attention".

There were many more comments, and I am humbled by the attendees feedback. Thank you for watching, and thank you for that hour of your time.

What does this mean for me now? Honestly, I don't know. This has been a career goal of mine since 2008. I've accomplished it, I have the shirts to prove it and now I must move on. To what? I'm not sure yet, but there is another Philly Code Camp coming up next month, and more conferences in the Fall. I hope to see you at more cool events like TechEd in the near future!

]]>TechEd North America 2014, Thank You Houston!http://www.csharpfritz.com/blog/2014/5/19/teched-north-america-2014-thank-you-houstonGoogle Rubik's CubeJeffrey FritzMon, 19 May 2014 20:36:59 +0000http://feedproxy.google.com/~r/CsharpOnTheFritz/~3/kDA3Ga0bG2Q/google-rubiks-cube50ba0a37e4b05b20d2db17f0:50bb6824e4b0ef0c2cb67dd9:537a6980e4b05f4460ea3981<p>After some tinkering with their terrible controls, on this the anniversary of the Rubik's cube, I was able to solve the Google Cube. &nbsp;I've recorded the last few minutes, and run the video at triple speed so that you can see what happens when it is solved:</p><iframe scrolling="no" mozallowfullscreen allowfullscreen src="http://www.screencast.com/users/JeffreyFritz/folders/Default/media/081762b4-44a7-4d6b-b35e-7073c525bd12/embed?wmode=opaque" name="tsc_player" width="640" webkitallowfullscreen data-embed="true" frameborder="0" type="text/html" class="tscplayer_inline embeddedObject" height="480"></iframe> <p>Not bad, certainly not my fastest time... In real life I can usually finish the cube in less than a minute. &nbsp;For this one, I did have to break out one of my real cubes to get my bearings in3D VR space. &nbsp;Hey, it was fun for 5 minutes. &nbsp;</p><p>Thanks to my friends at <a target="_blank" href="http://www.techsmith.com/camtasia.html">TechSmith Camtasia</a> for providing a great screen recorder that I was able to publish this video with.</p><img src="//feeds.feedburner.com/~r/CsharpOnTheFritz/~4/kDA3Ga0bG2Q" height="1" width="1" alt=""/>http://www.csharpfritz.com/blog/2014/5/19/google-rubiks-cubeSource of Slowness - an InvestigationJeffrey FritzThu, 15 May 2014 16:16:50 +0000http://feedproxy.google.com/~r/CsharpOnTheFritz/~3/b5Wtxvz4Tes/source-of-slowness-an-investigation50ba0a37e4b05b20d2db17f0:50bb6824e4b0ef0c2cb67dd9:5374e7bde4b05f3bc9323335Does your laptop run noticeably slower when you disconnect from your
corporate network? Mine was... let me show you how I fixed this common
problemOver the past few weeks, I've run into a nasty slowness issue on my laptop. Now, I don't have an ancient device, nor do I have a machine loaded down with spyware and other crap. I'm running with an SSD and have my background processes tuned to keep the performance nice and quick. I'm running Windows 8.1 with all of the updates applied, and yet... there is a strange slowness every now and again.

The slowness I found was during the use of explorer resources. Every time I opened the file explorer to look for a file on disk, or clicked an open file dialog in an application, the system would just grind to a halt. I had no idea what was going on with the disk, as Task Manager never reported that I had any disk utilization issues.

I did however notice that the issue didn't happen while I was connected to my corporate VPN. When I would disconnect the VPN, things would run smoothly and this was the clue that I needed to solve the problem.

In my windows configuration, I had several drives mapped to resources across the corporate network. When I was not connected to the VPN and my machine was unable to find those network locations, explorer windows were trying to connect and show information about those drives no matter the operation I was trying to accomplish.

Solution

I disconnected these mapped drives, and now my windows file explorer is running just as fast and snappy as ever. This seems like a simple problem, as the mapped network locations should be able to detect that they are not connected to the corporate network and shouldn't try to access those resources every time I access an explorer window.

If you're having this same problem, check your mapped drives. Perhaps you have the same problem that I had.

]]>http://www.csharpfritz.com/blog/2014/5/15/source-of-slowness-an-investigationI'm Speaking at TechEd North America 2014!Jeffrey FritzThu, 27 Feb 2014 02:30:47 +0000http://feedproxy.google.com/~r/CsharpOnTheFritz/~3/tCbcCIzLlps/im-speaking-at-teched-north-america-201450ba0a37e4b05b20d2db17f0:50bb6824e4b0ef0c2cb67dd9:530ea365e4b00ba670f233e6<p>In 2008, I visited my first TechEd conference in Orlando. &nbsp;The event was huge, I met a number of people there who still influence me to this day, and I learned about the buzz that comes from speaking at conferences. &nbsp;I knew on my way home from that event that I wanted to be able to speak at a TechEd conference some day. &nbsp;It immediately became a career goal to be a TechEd speaker.</p>
<img class="thumb-image" alt="askMeTechEd14.png" data-image="http://static.squarespace.com/static/50ba0a37e4b05b20d2db17f0/t/530ea443e4b0340ce526909c/1393468484781/askMeTechEd14.png" data-image-dimensions="258x259" data-image-focal-point="0.5,0.5" data-load="false" data-image-id="530ea443e4b0340ce526909c" data-type="image" src="http://static.squarespace.com/static/50ba0a37e4b05b20d2db17f0/t/530ea443e4b0340ce526909c/1393468484781/askMeTechEd14.png?format=500w" />
<p>Over the past two years, I entered and competed somewhat successfully in the Speaker Idol contest at TechEd 2012 and 2013. &nbsp;After being a finalist twice, and a runner-up in 2013, I knew I couldn't compete a third time. &nbsp;After I didn't win the contest and automatically become a TechEd speaker ,I resigned myself to not appear again in the competition.</p><p>I earned a recognition as a Microsoft MVP in July of 2013, and thought this would give me just the right amount of additional boost to put me in the conversation to be a speaker at TechEd 2014 in Houston. &nbsp;When the call for speakers went out in December, I immediately began writing presentation abstracts and outlines for possible sessions to present at the conference.</p><p>This afternoon, after two months of waiting to hear the results of my submissions, I learned that I would be going to TechEd. &nbsp;I have been accepted as a speaker, and will be presenting one session on Modern Web Forms Development with HTML 5.</p><p>I am so excited to have earned this opportunity to present at one of the largest shows in the software industry. &nbsp;As I get more information about my speaking slot and links to my place on the agenda, you can be sure that I will share them here, twitter, and Facebook.</p><p>I hope to get a lot of pictures at this monumental event in my career. &nbsp;You can bet I'll share them as well.</p><p>Finally, I want to thank a few people who really helped me realize this goal: &nbsp;<a target="_blank" href="http://twitter.com/billjwolff">Bill Wolff</a> - leader of Philly.NET where I learned a LOT about .NET development,&nbsp;<a target="_blank" href="http://twitter.com/rgjulius">Ralph Julius</a>, <a target="_blank" href="http://twitter.com/csells">Chris Sells</a>, <a target="_blank" href="http://twitter.com/worksonmypc">Stephen Forte</a>, <a target="_blank" href="http://twitter.com/davidgiard">David Giard</a> - my nemesis from Speaker Idol 2012 who showed up at all kinds of events I was speaking at, <a target="_blank" href="http://dotnetrocks.com">Richard Campbell and Carl Franklin</a> - hosts of .NET Rocks and Speaker Idol, <a target="_blank" href="http://twitter.com/doraschan">Dora Chan</a>, and of course <a target="_blank" href="http://beckysfantasticfaces.com">my wife</a> for supporting me as I traveled to all kinds of crazy places to present lectures on .NET and web development.</p><p> </p><img src="//feeds.feedburner.com/~r/CsharpOnTheFritz/~4/tCbcCIzLlps" height="1" width="1" alt=""/>http://www.csharpfritz.com/blog/2014/2/26/im-speaking-at-teched-north-america-2014Life Hacking - Fun with NFCJeffrey FritzThu, 19 Sep 2013 18:38:27 +0000http://feedproxy.google.com/~r/CsharpOnTheFritz/~3/7xBh2psJFcU/life-hacking-fun-with-nfc50ba0a37e4b05b20d2db17f0:50bb6824e4b0ef0c2cb67dd9:523b44b4e4b0bb31da725930Have you seen these "tap here" stickers and indicators for your phone?
They use a technology called NFC, and in this post Jeff shares a technique
he is using with a sticker and his phone.This past weekend was Code Camp New York, a fun conference that I enjoy riding the train to and speaking at. I met up with some friends and learned some cool new things. I spoke at length with Nick Landry about the NFC tags that Nokia was giving out at the conference, and how I can use them with my phone.

NFC stands for "Near Field Communications" and is a technology that allows stickers or cards that have very small wiring in them that is activated when in the presence of a reader that emits a very small power source to read the content stored in that wiring. The Nokia Lumia phones have these readers embedded in them.

I came home from the conference with a handful of these stickers and was looking at various ways that I could use them. In the Lumia phone, you can use these NFC tags to automate tasks on the phone. After tinkering with a few ideas, I hit on a good one.

if you're like me, you use the GPS on your phone... A LOT. When I'm out driving, especially recently when I am travelling for Telerik, I use my GPS to help me get home. Its always a pain to have to locate the HERE Drive app on the phone and enter my home address... so I decided to automate this.

Writing an NFC tag is a pretty easy thing to do. I used an app on the Windows Phone called NFC Interceptor to read and write my stickers. I selected a Geo Tag NFC tag type to write, and was prompted to enter a latitude and longitude for the location. I don't know about you, but I don't know the precise geographical location where I live... its just a few houses down from the corner where the stop sign is. Ok?

I found my exact latitude and longitude of my location by using Google Maps. I navigated to my home address and right clicked on "What's Here" to see my latitude and longitude output in the Search box of the screen. In the screenshot below, I'm using this technique on the Liberty Bell pavilion in downtown Philadelphia:

Google Maps for the Liberty Bell in Philadephia

With the GPS coordinates handy, I entered them into the NFC tag fields on the phone and tapped the sticker I wanted to write these driving directions to. I then took this sticker and put it in a place that was VERY convenient:

My NFC "Get me home" GPS sticker

Now, when I get in the car at some strange location, I can always find my way home by tapping my phone on the sun visor.

What innovative ways have you used an NFC tag? Let me know in the comments below.

]]>http://www.csharpfritz.com/blog/2013/9/19/life-hacking-fun-with-nfcNokia Amber Update Tip: Secured CameraJeffrey FritzFri, 06 Sep 2013 14:39:15 +0000http://feedproxy.google.com/~r/CsharpOnTheFritz/~3/rlg_Jl4bWg0/nokia-amber-update-tip-secured-camera50ba0a37e4b05b20d2db17f0:50bb6824e4b0ef0c2cb67dd9:5229e318e4b0e666272bd82aI installed the latest update from Nokia and Microsoft for my phone and
configured the cool new Pro Cam app. This install came with an unexpected
side-effect that I describe in the article below.Recently, I received and installed the Nokia Amber update that contains the Windows Phone 8 GDR2 updates for my Lumia 928. I was very excited to receive this update, because I knew that it had the impressive new Nokia Pro Camera app.

The Pro Camera app adds some great features to make it much easier to adjust and take great pictures with controls for white-balance, contrast, ISO, and flash all on-screen while using the camera view-finder. With the GDR2 update from Microsoft, you can now configure this alternate camera application to run when you press the camera button on your Windows Phone.

But.... Here's the 'feature' that I discovered while at lunch with a friend from Microsoft: if you have changed the camera button to trigger a non-standard camera app AND you have a security passcode configured for your phone, you will not be able to get the instant camera launch feature from a powered off state without keying in your passcode.

This is a great feature of the phone: I can quickly take pictures by pressing the camera button and taking a photo. However, with this change I need to key in my passcode before the camera will open up. It feels like a half-complete feature for security purposes, to prevent an application from gaining access to the phone without going through security.

I'm not a fan of cooking... but over the summer I am just nutty about grilling food on my backyard barbecue. Two years ago, I got myself a Brinkmann Smoke'N Pit and have had a gloriously fun time since. Over this summer, I've started experimenting with grill techniques and meats to cook. Most recently, I embarked on smoking pork ribs for the first time. I have captured all the steps I took to cook these tasty meats and will describe them here for your reference.

I use a technique called 3-2-1 for ribs. Very simply, the ribs are smoked for 3 hours, cooked in foil for 2 hours, and then basted with barbecue sauce in the smoker for a final hour. With this framework for cooking the pork, here is how I prepared to cook one on evening last week.

Preparation

There are two separate things to prepare before I start cooking: the grill and the food. I like to start preparing the grill first, as I can start the fire and switch to food preparation while the coals are getting hot.

Grill Prep

I use charcoal briquettes and prefer to light them with a chimney starter. I will wad up a bit of newspaper and light in the bottom of the starter. While the coals are lighting, I begin soaking apple wood chips and clean up the cooking surface. I place empty drip pans under where I will place the ribs, and add a small pan of water to keep the cooking area humid. You can see photos of these items below, including a picture that shows how the firebox is next to and below my cooking surface.

Food Prep

First thing when preparing meat is to rinse it, ensuring that any loose dirt or debris is clear before I start to dress it. With pork ribs, there is a membrane on the back of the meat that needs to be removed. I usually cut a slit down the middle and remove the white membrane with the help of a paper towel. Next, I have been using a pork rub from McCormick to douse and rub in to the top of the meat. I also prepare a small spray bottle with apple juice to be used during the three hour smoking time.

The First Three Hours

Once the coals have started turning white in the chimney starter, I dump them into the firebox and place the ribs on the cooking surface to the right. Next, I sprinkle the apple wood on the coals and close both doors to the grill.

At this point, I start setting timers. The first timer is for 30 minutes and the second timer is for three hours. At the conclusion of 30 minutes, I use the spray bottle filled with apple juice to coat the ribs so that they stay wet. My goal is to continuously infuse an apple flavor through the smoke and liquid. Every 30 minutes, leading up to the three hour timer's expiration, I will spray the ribs to keep them moist. Photos below of each of the four spray jobs on the ribs. At the three hour mark, I wrap the ribs in aluminum foil and add some apple juice to the inside of the sealed package. At this point, I usually add more freshly lit coals to the firebox, and I leave the ribs in the foil for two hours to cook.

Final Steps in Smoking

After cooking in the foil for two hours, I open the foil and expect to see the bones starting to protrude from the bottom of the meat. This is a sign that they are almost done cooking. I discard the foil and then cover the top of the ribs with a wet sauce. This is a major no-no for some in the Southern United States where they prefer dry ribs, but me... I like my ribs with a great sauce on them. Recently, I've taken a liking to Bulls Eye Texas Style sauce. With a coating of that on the product, I close up the grill and let them cook for another hour.

At the conclusion of that hour, these ribs look glorious.. and certainly taste that way too. They should be firm, and not fall apart in your hands.

The Finished Product

if you have any tips for how I can improve my technique or something that I'm missing, let me know in the comments below. Best of luck to you in grilling this season!

]]>Totally Smoked! How to Smoke Baby-back Ribshttp://www.csharpfritz.com/blog/2013/8/23/totally-smoked-how-to-smoke-baby-back-ribsHow to Disable Location Information on Windows Phone PhotosJeffrey FritzTue, 13 Aug 2013 14:36:17 +0000http://feedproxy.google.com/~r/CsharpOnTheFritz/~3/44tYO6qgNZI/disable-winphone-camera-location50ba0a37e4b05b20d2db17f0:50bb6824e4b0ef0c2cb67dd9:520a418fe4b08d9753c913ddRecently, I got a question from a friend on Facebook about how to disable
the saving of location information on photos taken on a Windows Phone.
After some quick tapping through my Lumia, as I remember turning off the
settings previously, I found the setting and am documenting it here.Recently, I got a question from a friend on Facebook about how to disable the saving of location information on photos taken on a Windows Phone. After some quick tapping through my Lumia, as I remember turning off the settings previously, I found the setting and am documenting it here.

Launch the Settings application, you know that gear shaped tile, on your phone

Swipe to the right to the applications menu

The settings -> application menu on my phone

Scroll down and launch the photos + camera settings

The "location" settings for the camera

Uncheck the "Include location info in pictures I take" setting

Easy configuration of the camera... I would have expected to be able to access this configuration from the "photo settings" application bar button in the camera application, but this is a good second choice location for the settings.