<?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:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Javier G. Lozano</title><link>http://blog.lozanotek.com/Default.aspx</link><description>Coding Out Loud</description><language>en-US</language><image><link>http://blog.lozanotek.com/Default.aspx</link><url>http://blog.lozanotek.com/images/RSS2Image.gif</url><title>Javier G. Lozano</title><width>77</width><height>60</height></image><copyright>Javier G. Lozano</copyright><managingEditor>javier@lozanotek.com</managingEditor><generator>Subtext Version 1.9.4.78</generator><geo:lat>41.67822</geo:lat><geo:long>-93.793509</geo:long><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/lozanotek" type="application/rss+xml" /><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Flozanotek" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Flozanotek" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2Flozanotek" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/lozanotek" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Flozanotek" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Flozanotek" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Flozanotek" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><title>miniurl &amp;ndash; ASP.NET MVC URL Redirection Sample Application</title><link>http://feedproxy.google.com/~r/lozanotek/~3/zLVfKbELcdU/miniurl_ndash_ASP.NET_MVC_URL_Redirection_Sample_Application.aspx</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Javier G. Lozano</dc:creator><pubDate>Sun, 05 Jul 2009 20:36:53 PDT</pubDate><guid isPermaLink="false">http://blog.lozanotek.com/archive/2009/07/05/miniurl_ndash_ASP.NET_MVC_URL_Redirection_Sample_Application.aspx</guid><description>&lt;p&gt;Not sure how many of you out there use a URL redirection service such as &lt;a href="http://tinyurl.com" rel="tag" target="_blank"&gt;tinyurl&lt;/a&gt;, &lt;a href="http://is.gd" rel="tag" target="_blank"&gt;is.gd&lt;/a&gt; or &lt;a href="http://snurl.com" rel="tag" target="_blank"&gt;snurl&lt;/a&gt;. They come very handy when you’re trying to take a long url like:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://maps.google.com/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=des+moines+iowa&amp;amp;sll=37.0625,-95.677068&amp;amp;sspn=44.879582,87.714844&amp;amp;ie=UTF8&amp;amp;z=12&amp;amp;iwloc=A"&gt;http://maps.google.com/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=des+moines+iowa&amp;amp;sll=37.0625,-95.677068&amp;amp;sspn=44.879582,87.714844&amp;amp;ie=UTF8&amp;amp;z=12&amp;amp;iwloc=A&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Into something that's a bit more manageable:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a title="http://tinyurl.com/nzqn5f" href="http://tinyurl.com/nzqn5f"&gt;http://tinyurl.com/nzqn5f&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;How can you do this within your ASP.NET application? Well, check out &lt;a href="http://miniurl.codeplex.com/" rel="tag" target="_blank"&gt;miniurl&lt;/a&gt; on &lt;a href="http://www.codeplex.com" rel="tag" target="_blank"&gt;CodePlex&lt;/a&gt;. :)&lt;/p&gt;  &lt;h3&gt;What is miniurl?&lt;/h3&gt;  &lt;p&gt;The &lt;a href="http://miniurl.codeplex.com" target="_blank"&gt;miniurl MVC application&lt;/a&gt; is a very simple example on how to use MVC and &lt;a href="http://msdn.microsoft.com/en-us/library/cc668201.aspx" rel="tag" target="_blank"&gt;URL Routing&lt;/a&gt; to create a URL Redirection service. That means you’re free to download, change, whatever-else-you-wish-to-do-with the code. &lt;/p&gt;  &lt;p&gt;Really, go nuts! :) If you want to comment anything about the project, please start a &lt;a href="http://miniurl.codeplex.com/Thread/List.aspx" rel="tag" target="_blank"&gt;discussion&lt;/a&gt;!&lt;/p&gt;&lt;img src="http://blog.lozanotek.com/aggbug/20109.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=zLVfKbELcdU:Rne7cgS1oh0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=zLVfKbELcdU:Rne7cgS1oh0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=zLVfKbELcdU:Rne7cgS1oh0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=zLVfKbELcdU:Rne7cgS1oh0:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=zLVfKbELcdU:Rne7cgS1oh0:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=zLVfKbELcdU:Rne7cgS1oh0:wF9xT3WuBAs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=zLVfKbELcdU:Rne7cgS1oh0:wF9xT3WuBAs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=zLVfKbELcdU:Rne7cgS1oh0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=zLVfKbELcdU:Rne7cgS1oh0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=zLVfKbELcdU:Rne7cgS1oh0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=zLVfKbELcdU:Rne7cgS1oh0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=zLVfKbELcdU:Rne7cgS1oh0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=zLVfKbELcdU:Rne7cgS1oh0:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=zLVfKbELcdU:Rne7cgS1oh0:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/20109.aspx</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/commentRss/20109.aspx</wfw:commentRss><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://blog.lozanotek.com/services/trackbacks/20109.aspx</trackback:ping><feedburner:origLink>http://blog.lozanotek.com/archive/2009/07/05/miniurl_ndash_ASP.NET_MVC_URL_Redirection_Sample_Application.aspx</feedburner:origLink></item><item><title>What's in a controller? That which we call an action&amp;hellip;</title><link>http://feedproxy.google.com/~r/lozanotek/~3/rHw8ieNs5zc/Whats_in_a_controller_That_which_we_call_an_actionhellip.aspx</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Javier G. Lozano</dc:creator><pubDate>Sat, 20 Jun 2009 21:58:10 PDT</pubDate><guid isPermaLink="false">http://blog.lozanotek.com/archive/2009/06/20/Whats_in_a_controller_That_which_we_call_an_actionhellip.aspx</guid><description>&lt;p&gt;Recently, fellow MVP and &lt;a href="http://aspinsiders.com/default.aspx" rel="tag" target="_blank"&gt;&lt;strong&gt;ASPInsider&lt;/strong&gt;&lt;/a&gt;, &lt;a href="http://jeffreypalermo.com" target="_blank"&gt;Jeffrey Palermo&lt;/a&gt; blogged a pretty interesting idea called &lt;a href="http://jeffreypalermo.com/blog/the-asp-net-mvc-actioncontroller-ndash-the-controllerless-action-or-actionless-controller/" rel="tag" target="_blank"&gt;&lt;strong&gt;ActionController&lt;/strong&gt;&lt;/a&gt;.  Within his post, he states:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;My interest in this space is purely practical.  I really don’t care how patterns are published.  I don’t care about “being true” to the MVC pattern or any other pattern.  I’m more interested in being effective with web applications on .Net.  After have experience with &lt;a href="http://mvccontrib.org"&gt;MvcContrib&lt;/a&gt;, &lt;a href="http://codecampserver.org"&gt;CodeCampServer&lt;/a&gt;, and a much larger ASP.NET MVC implementation (200+ screens), I have come to see how controllers end up searching for an identity.  What is a ProductController anyway?  That’s just about as specific as classes called ProductService, ProductManager, ProductUtility, etc. &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Jeffrey’s approach is pretty cool if you ask me since it puts a spin on how &lt;a href="http://asp.net/mvc" rel="tag" target="_blank"&gt;&lt;strong&gt;ASP.NET MVC&lt;/strong&gt;&lt;/a&gt; is implemented. Jeffrey is trying to tackle the design (implementation) of actions within controllers by providing a different perspective on the issue. His approach is actually very similar to what &lt;strong&gt;&lt;a href="http://struts.apache.org/" rel="tag" target="_blank"&gt;Jakarta Struts&lt;/a&gt;&lt;/strong&gt; provides within its framework; where an Action is the center all of execution and the controller takes a back seat during the request.&lt;/p&gt;  &lt;p&gt;Now, I want to be clear that in no way shape or form, do I have disrespect for what Jeffrey is trying to test. He’s a very talented individual who’s very knowledgeable on the subject and I have the outmost respect for him. &lt;/p&gt;  &lt;p&gt;Having said that, I think the following tweet might have been taken out of context:&lt;/p&gt;  &lt;p&gt;&lt;a href="https://twitter.com/jglozano/status/2254193464" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="actioncontroller_tweet" border="0" alt="actioncontroller_tweet" src="http://blog.lozanotek.com/images/blog_lozanotek_com/WindowsLiveWriter/WhatsinacontrollerThatwhichwecallanactio_15110/actioncontroller_tweet_3.png" width="644" height="278" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;What I meant by going “too far” was with regards to escalation of an action to the level of a controller. Granted, this is a simple spike and could be easily refactored into something leaner.  I totally agree with Jeffrey that the discussion here is about the design of controllers and actions. In particular on how one thinks of controllers within their web application. The approach of the ActionController works extremely well when you mix both application logic as well as ‘request’ logic within your controller.  In other words, your controller knows how to map against the request (&lt;em&gt;http://mydomain.com/home/index&lt;/em&gt;) and also performs other logic within the action (interacting with repositories, domain, etc.).&lt;/p&gt;  &lt;h3&gt;A Little Bit of History…&lt;/h3&gt;  &lt;p&gt;For me, the approach for the controller is a little different due to my background with J2EE applications.  When I first introduced with MVC, it was around a home grown MVC framework written in Java.  The framework was loosely based around some of the concepts that were presented in the &lt;a href="http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/web-tier/web-tier5.html" rel="tag" target="_blank"&gt;&lt;strong&gt;Web-Tier Application Framework Design section&lt;/strong&gt;&lt;/a&gt; of the &lt;a href="http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/index.html" rel="tag" target="_blank"&gt;&lt;strong&gt;J2EE Blueprints&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;.&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;Our home grown framework consisted of one &lt;a href="http://java.sun.com/products/servlet/" rel="tag" target="_blank"&gt;&lt;strong&gt;servlet&lt;/strong&gt;&lt;/a&gt; that handled all requests from the caller.  Once a request was received, it iterated through a list of &lt;a href="http://www.martinfowler.com/eaaCatalog/dataMapper.html" rel="tag" target="_blank"&gt;&lt;strong&gt;DataMappers&lt;/strong&gt;&lt;/a&gt; to either fetch or persist data to the database then it would render the selected view.  Pretty straightforward interaction for all the pieces within the request pipeline.&lt;/p&gt;  &lt;p&gt;   &lt;/p&gt;&lt;p&gt;Other Java MVC frameworks such as &lt;strong&gt;&lt;a href="http://struts.apache.org/" rel="tag" target="_blank"&gt;Struts&lt;/a&gt;&lt;/strong&gt; and &lt;a href="http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/ch16.html" rel="tag" target="_blank"&gt;&lt;strong&gt;SpringMVC&lt;/strong&gt;&lt;/a&gt; follow a similar approach of defining a &lt;em&gt;DispatcherServlet&lt;/em&gt; to handle all requests. Granted Struts handles things more at the action level, while SpringMVC does it at controller level. Which means that &lt;/p&gt;    &lt;h3&gt;My Approach&lt;/h3&gt;    &lt;p&gt;Now that you know some of my background, allow me to show you my approach for controllers within my MVC application.  The following &lt;a href="http://code.google.com/p/jglozano/source/browse/trunk/presentations/MVCOpenSource/src/yabe/Mvc/Controllers/PostController.cs" rel="tag" target="_blank"&gt;&lt;strong&gt;PostController&lt;/strong&gt;&lt;/a&gt; source is from my &lt;strong&gt;&lt;a href="http://jglozano.googlecode.com/svn/trunk/presentations/MVCOpenSource/src/yabe/" rel="tag" target="_blank"&gt;yet another blog engine (yabe)&lt;/a&gt;&lt;/strong&gt; sample MVC application:&lt;/p&gt;    &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Mvc.Controllers
{
    &lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.Mvc;
    &lt;span class="kwrd"&gt;using&lt;/span&gt; Common;
    &lt;span class="kwrd"&gt;using&lt;/span&gt; Models.Post;
    &lt;span class="kwrd"&gt;using&lt;/span&gt; Services;

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; PostController : Controller
    {
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; IPostService postService;
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; ICategoryService categoryService;

        &lt;span class="kwrd"&gt;public&lt;/span&gt; PostController(IPostService postService, ICategoryService categoryService)
        {
            &lt;span class="kwrd"&gt;this&lt;/span&gt;.postService = postService;
            &lt;span class="kwrd"&gt;this&lt;/span&gt;.categoryService = categoryService;
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; ActionResult Index()
        {
            var posts = postService.RetrieveAll();
            var model = posts.ConvertAll(dto =&amp;gt; dto.ToViewModel());

            &lt;span class="kwrd"&gt;return&lt;/span&gt; View(model);
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; ActionResult New()
        {
            var categories = categoryService.RetrieveAll();
            var model = categories.ConvertAll(dto =&amp;gt; dto.ToViewModel());

            &lt;span class="kwrd"&gt;return&lt;/span&gt; View(model);
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; ActionResult Create(PostViewModel post)
        {
            var dto = post.ToDTO();
            postService.Create(dto);

            &lt;span class="kwrd"&gt;return&lt;/span&gt; RedirectToAction(&lt;span class="str"&gt;"Index"&lt;/span&gt;);
        }
    }
}&lt;/pre&gt;
  &lt;style type="text/css"&gt;&lt;![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p&gt;As you can see in this contrived example, each of my actions are pretty small since all they do is handle the request, in the form of a &lt;a href="http://stephenwalther.com/blog/archive/2009/04/13/asp.net-mvc-tip-50-ndash-create-view-models.aspx" rel="tag" target="_blank"&gt;&lt;strong&gt;ViewModel&lt;/strong&gt;&lt;/a&gt;, then pass the ViewModel to the corresponding &lt;em&gt;service&lt;/em&gt; for processing. If the &lt;em&gt;service&lt;/em&gt; returns data in the form of &lt;a href="http://martinfowler.com/eaaCatalog/dataTransferObject.html" rel="tag" target="_blank"&gt;&lt;strong&gt;Data Transfer Object (DTO)&lt;/strong&gt;&lt;/a&gt;, the result is then converted into a ViewModel and passed back to the View.&lt;/p&gt;

&lt;p&gt;For my needs, this simple approach works.  Not only that, I’ve also managed to keep the size of my actions pretty small. I’ve used this approach on the &lt;a href="http://www.inofile.com/iscanner.aspx" rel="tag" target="_blank"&gt;&lt;strong&gt;product developed&lt;/strong&gt;&lt;/a&gt;, and it worked quite well with multiple Views/ViewModels.  Also, other ASP.NET MVC sample applications such as &lt;a href="http://nerddinner.codeplex.com/" rel="tat" target="_blank"&gt;&lt;strong&gt;Nerd Dinner&lt;/strong&gt;&lt;/a&gt; and &lt;strong&gt;&lt;a href="http://www.codeplex.com/oxite" rel="tag" target="_blank"&gt;Oxite&lt;/a&gt;&lt;/strong&gt; take a similar approach. Looking outside the ASP.NET MVC world, in this instance &lt;a href="http://rubyonrails.org/" rel="tag" target="_blank"&gt;&lt;strong&gt;Ruby on Rails&lt;/strong&gt;&lt;/a&gt;, they seem to follow a similar approach for their &lt;a href="http://guides.rubyonrails.org/action_controller_overview.html" rel="tag" target="_blank"&gt;&lt;strong&gt;guides on developing controllers&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;What’s your approach?&lt;/p&gt;&lt;img src="http://blog.lozanotek.com/aggbug/20108.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=rHw8ieNs5zc:AuzUp48FM8s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=rHw8ieNs5zc:AuzUp48FM8s:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=rHw8ieNs5zc:AuzUp48FM8s:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=rHw8ieNs5zc:AuzUp48FM8s:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=rHw8ieNs5zc:AuzUp48FM8s:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=rHw8ieNs5zc:AuzUp48FM8s:wF9xT3WuBAs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=rHw8ieNs5zc:AuzUp48FM8s:wF9xT3WuBAs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=rHw8ieNs5zc:AuzUp48FM8s:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=rHw8ieNs5zc:AuzUp48FM8s:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=rHw8ieNs5zc:AuzUp48FM8s:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=rHw8ieNs5zc:AuzUp48FM8s:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=rHw8ieNs5zc:AuzUp48FM8s:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=rHw8ieNs5zc:AuzUp48FM8s:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=rHw8ieNs5zc:AuzUp48FM8s:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/20108.aspx</wfw:comment><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">12</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/commentRss/20108.aspx</wfw:commentRss><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://blog.lozanotek.com/services/trackbacks/20108.aspx</trackback:ping><feedburner:origLink>http://blog.lozanotek.com/archive/2009/06/20/Whats_in_a_controller_That_which_we_call_an_actionhellip.aspx</feedburner:origLink></item><item><title>ASP.NET MVC 1.0</title><link>http://feedproxy.google.com/~r/lozanotek/~3/Gvc8J-8XFNY/ASP.NET_MVC_1.0.aspx</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Javier G. Lozano</dc:creator><pubDate>Mon, 23 Mar 2009 08:41:10 PDT</pubDate><guid isPermaLink="false">http://blog.lozanotek.com/archive/2009/03/23/ASP.NET_MVC_1.0.aspx</guid><description>&lt;p&gt;Now, I know a few days late on this blog post.  Granted, at the time, I was doing a webcast on ti! :) Any way, be assured that I’ve already congratulated Phil and team on getting &lt;a rel="tag" target="_blank" href="http://go.microsoft.com/fwlink/?LinkId=144444"&gt;&lt;strong&gt;ASP.NET MVC released&lt;/strong&gt;&lt;/a&gt;! To find out more about the intricate details, check out &lt;a rel="tag" target="_blank" href="http://www.haacked.com/archive/2009/03/18/aspnet-mvc-rtw.aspx"&gt;&lt;strong&gt;Phil’s post&lt;/strong&gt;&lt;/a&gt; on it (remember, he’s the PM).&lt;/p&gt;
&lt;p&gt;Now, during the time I’ve been talking with people about the MVC bits, I’m still surprised that they ask these questions (just to name a few):&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Are Web Forms going away?&lt;/li&gt;
    &lt;li&gt;How do I convert my Web Forms project to an MVC project?&lt;/li&gt;
    &lt;li&gt;What’s the ramp up time for learning MVC?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All of these are valid questions, and unfortunately, some of them (except for the first one) don’t have a direct answer.  What these questions do tell me that there is still A LOT of education and knowledge that needs to happen within the ASP.NET/MVC community.  The question is not when/how do I move to MVC, but more is the use of MVC right for me/my project?  This is something that can only be answered by you after enough information is gather about your current context and your desired out come.&lt;/p&gt;
&lt;p&gt;On a different note, I would like to address a blog post that come up this weekend entitled, &lt;a target="_blank" href="http://www.tokumine.com/2009/03/21/net-mvc-vs-ruby-on-rails/"&gt;&lt;strong&gt;.NET MVC vs Ruby on Rails&lt;/strong&gt;&lt;/a&gt;.  I must say that the Simon, the author, does bring up very good points about what MVC looks like to the RoR developer.  In particular, points 3-5.  Now, I’m not going to get into a &lt;a rel="tag" target="_blank" href="http://www.youtube.com/watch?v=KZx2r3ISuKA"&gt;&lt;strong&gt;shampoo/conditioner is better argument&lt;/strong&gt;&lt;/a&gt; but I will say that some of us are working hard on point #4.&lt;/p&gt;&lt;img src="http://blog.lozanotek.com/aggbug/20107.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=Gvc8J-8XFNY:FJaj2ZHS_4A:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=Gvc8J-8XFNY:FJaj2ZHS_4A:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=Gvc8J-8XFNY:FJaj2ZHS_4A:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=Gvc8J-8XFNY:FJaj2ZHS_4A:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=Gvc8J-8XFNY:FJaj2ZHS_4A:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=Gvc8J-8XFNY:FJaj2ZHS_4A:wF9xT3WuBAs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=Gvc8J-8XFNY:FJaj2ZHS_4A:wF9xT3WuBAs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=Gvc8J-8XFNY:FJaj2ZHS_4A:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=Gvc8J-8XFNY:FJaj2ZHS_4A:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=Gvc8J-8XFNY:FJaj2ZHS_4A:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=Gvc8J-8XFNY:FJaj2ZHS_4A:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=Gvc8J-8XFNY:FJaj2ZHS_4A:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=Gvc8J-8XFNY:FJaj2ZHS_4A:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=Gvc8J-8XFNY:FJaj2ZHS_4A:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/20107.aspx</wfw:comment><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/commentRss/20107.aspx</wfw:commentRss><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://blog.lozanotek.com/services/trackbacks/20107.aspx</trackback:ping><feedburner:origLink>http://blog.lozanotek.com/archive/2009/03/23/ASP.NET_MVC_1.0.aspx</feedburner:origLink></item><item><title>Contextual Sessions with NHibernate &amp;ndash; Part 2</title><link>http://feedproxy.google.com/~r/lozanotek/~3/VTWXP82LDSI/Contextual_Sessions_with_NHibernate_ndash_Part_2.aspx</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Javier G. Lozano</dc:creator><pubDate>Wed, 18 Feb 2009 14:26:59 PST</pubDate><guid isPermaLink="false">http://blog.lozanotek.com/archive/2009/02/18/Contextual_Sessions_with_NHibernate_ndash_Part_2.aspx</guid><description>&lt;p&gt;In my &lt;a href="http://blog.lozanotek.com/archive/2009/02/17/Contextual_Sessions_with_NHibernate_ndash_Part_1.aspx" target="_blank"&gt;&lt;strong&gt;previous post&lt;/strong&gt;&lt;/a&gt;, I talk about how the problem with sessions and NHibernate (NH) can get pretty tricky to deal with; specially within ASP.NET web applications.  This post shows how you can use a pretty nice feature within NH that simplifies this problem.&lt;/p&gt;  &lt;h3&gt;&lt;/h3&gt;  &lt;h3&gt;A Solution&lt;/h3&gt;  &lt;p&gt;NH supports a mechanism of providing a ‘current’ session via the ISessionFactory.GetCurrentSession method by using a concept called &lt;a href="http://www.hibernate.org/hib_docs/nhibernate/1.2/reference/en/html/architecture.html#architecture-current-session" target="_blank"&gt;&lt;strong&gt;Contextual Sessions&lt;/strong&gt;&lt;/a&gt;.  This is what the NH documentation says about the feature:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Most applications using NHibernate need some form of "contextual" sessions, where a given session is in effect throughout the scope of a given context. However, across applications the definition of what constitutes a context is typically different; and different contexts define different scopes to the notion of current.&lt;/em&gt; &lt;/p&gt;    &lt;p&gt;&lt;em&gt;Starting with version 1.2, NHibernate added the &lt;tt&gt;ISessionFactory.GetCurrentSession()&lt;/tt&gt; method. The processing behind &lt;tt&gt;ISessionFactory.GetCurrentSession()&lt;/tt&gt; is pluggable. An extension interface (&lt;tt&gt;NHibernate.Context.ICurrentSessionContext&lt;/tt&gt;) and a new configuration parameter (&lt;tt&gt;hibernate.current_session_context_class&lt;/tt&gt;) have been added to allow pluggability of the scope and context of defining current sessions.&lt;/em&gt; &lt;/p&gt;    &lt;p&gt;&lt;em&gt;See the API documentation for the &lt;tt&gt;NHibernate.Context.ICurrentSessionContext&lt;/tt&gt; interface for a detailed discussion of its contract. It defines a single method, &lt;tt&gt;CurrentSession()&lt;/tt&gt;, by which the implementation is responsible for tracking the current contextual session. Out-of-the-box, NHibernate comes with one implementation of this interface:&lt;/em&gt; &lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;em&gt;&lt;tt&gt;NHibernate.Context.ManagedWebSessionContext&lt;/tt&gt; - current sessions are tracked by &lt;tt&gt;HttpContext&lt;/tt&gt;. However, you are responsible to bind and unbind an &lt;tt&gt;ISession&lt;/tt&gt; instance with static methods on this class, it never opens, flushes, or closes an &lt;tt&gt;ISession&lt;/tt&gt; itself.&lt;/em&gt;&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;&lt;em&gt;The &lt;tt&gt;hibernate.current_session_context_class&lt;/tt&gt; configuration parameter defines which &lt;tt&gt;NHibernate.Context.ICurrentSessionContext&lt;/tt&gt; implementation should be used. Typically, the value of this parameter would just name the implementation class to use (including the assembly name); for the out-of-the-box implementation, however, there is a corresponding short name, "managed_web".&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;As you can see, NH has thought about this problem and has provided a way to make the interaction with ‘current’ sessions, way easier.  With this, the code within your &lt;a href="http://code.google.com/p/jglozano/source/browse/trunk/samples/NHContextualSessions/Web/ContextualSessionModule.cs" target="_blank" rel="tag"&gt;&lt;strong&gt;ContextualSessionModule.cs&lt;/strong&gt;&lt;/a&gt; implementation can get can get a little bit cleaner:&lt;/p&gt;  &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 400px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4"&gt;   &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;     &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; Web {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Web;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; NHibernate.Context;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; Persistence;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   7:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; ContextualSessionModule : IHttpModule {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   8:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   9:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Init(HttpApplication context) {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  10:&lt;/span&gt;             context.BeginRequest += context_BeginRequest;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  11:&lt;/span&gt;             context.EndRequest += context_EndRequest;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  12:&lt;/span&gt;         }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  13:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  14:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Dispose() {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  15:&lt;/span&gt;         }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  16:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  17:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; context_BeginRequest(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, EventArgs e) {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  18:&lt;/span&gt;             var application = (HttpApplication)sender;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  19:&lt;/span&gt;             var context = application.Context;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  20:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  21:&lt;/span&gt;             BindSession(context);&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  22:&lt;/span&gt;         }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  23:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  24:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; BindSession(HttpContext context) {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  25:&lt;/span&gt;             var sessionBuilder = SessionBuilderFactory.CurrentBuilder;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  26:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  27:&lt;/span&gt;             &lt;span style="color: #008000"&gt;// Create a new session (it's the beginning of the request)&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  28:&lt;/span&gt;             var session = sessionBuilder.OpenSession();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  29:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  30:&lt;/span&gt;             &lt;span style="color: #008000"&gt;// Tell NH session context to use it&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  31:&lt;/span&gt;             ManagedWebSessionContext.Bind(context, session);&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  32:&lt;/span&gt;         }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  33:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  34:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; context_EndRequest(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, EventArgs e) {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  35:&lt;/span&gt;             var application = (HttpApplication)sender;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  36:&lt;/span&gt;             var context = application.Context;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  37:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  38:&lt;/span&gt;             UnbindSession(context);&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  39:&lt;/span&gt;         }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  40:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  41:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; UnbindSession(HttpContext context) {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  42:&lt;/span&gt;             var sessionBuilder = SessionBuilderFactory.CurrentBuilder;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  43:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  44:&lt;/span&gt;             &lt;span style="color: #008000"&gt;// Get the default NH session factory&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  45:&lt;/span&gt;             var factory = sessionBuilder.GetSessionFactory();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  46:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  47:&lt;/span&gt;             &lt;span style="color: #008000"&gt;// Give it to NH so it can pull the right session&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  48:&lt;/span&gt;             var session = ManagedWebSessionContext.Unbind(context, factory);&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  49:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  50:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (session == &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;) &lt;span style="color: #0000ff"&gt;return&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  51:&lt;/span&gt;             session.Flush();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  52:&lt;/span&gt;             session.Close();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  53:&lt;/span&gt;         }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  54:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  55:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Most of ISession management &lt;em&gt;churn&lt;/em&gt; is pushed into the Bind and Unbind methods of the ManagedWebSessionContext class.  It’s within the implementation of those methods that &lt;em&gt;storage&lt;/em&gt; of the ISession takes place within the HttpContext.Items property.&lt;/p&gt;

&lt;p&gt;The biggest added value for this approach is the new implementation of ISessionBuilder, &lt;a href="http://code.google.com/p/jglozano/source/browse/trunk/samples/NHContextualSessions/Persistence/ContextualSessionBuilder.cs" target="_blank" rel="tag"&gt;&lt;strong&gt;ContextualSessionBuilder.cs&lt;/strong&gt;&lt;/a&gt;:&lt;/p&gt;

&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 400px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4"&gt;
  &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; Persistence {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; NHibernate;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; ContextualSessionBuilder : SessionBuilderBase {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; ISession staticSession;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   7:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; ISession CurrentSession {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   8:&lt;/span&gt;             get {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   9:&lt;/span&gt;                 &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  10:&lt;/span&gt;                 ISession session;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  11:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  12:&lt;/span&gt;                 &lt;span style="color: #0000ff"&gt;try&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  13:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  14:&lt;/span&gt;                     &lt;span style="color: #008000"&gt;// Get the default SessionFactory&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  15:&lt;/span&gt;                     var factory = GetSessionFactory();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  16:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  17:&lt;/span&gt;                     &lt;span style="color: #008000"&gt;//Let NH handle the 'churn' for you&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  18:&lt;/span&gt;                     session = factory.GetCurrentSession();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  19:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  20:&lt;/span&gt;                     staticSession = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  21:&lt;/span&gt;                 } &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  22:&lt;/span&gt;                     &lt;span style="color: #008000"&gt;//HACK: Here to support the calling of sessions from the HttpApplication start&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  23:&lt;/span&gt;                     &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (staticSession == &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;) {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  24:&lt;/span&gt;                         staticSession = OpenSession();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  25:&lt;/span&gt;                     }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  26:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  27:&lt;/span&gt;                     session = staticSession;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  28:&lt;/span&gt;                 }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  29:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  30:&lt;/span&gt;                 &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; session;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  31:&lt;/span&gt;             }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  32:&lt;/span&gt;         }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  33:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  34:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;As you can see, this implementation of ISessionBuilder does not know (or care) about the current HttpContext instance…and why should it?  The concern of SessionBuilder is to abstract all the work related to persistence and not any of the &lt;em&gt;side-effects&lt;/em&gt; it might have to put up with.&lt;/p&gt;

&lt;p&gt;One important thing to note here is that the only pieces we had to change were out IHttpModule and ISessionBuilder implementations since these two respectively, deal with the persistence mechanism of our application.&lt;/p&gt;

&lt;p&gt;Now, we’re pretty close to being done with this feature, but since the next section focuses on how to configure this piece within NH and not your application, I left that piece for another blog post.&lt;/p&gt;

&lt;p&gt;For now, Happy Codin’!&lt;/p&gt;&lt;img src="http://blog.lozanotek.com/aggbug/20106.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=VTWXP82LDSI:-I8VKuckxYY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=VTWXP82LDSI:-I8VKuckxYY:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=VTWXP82LDSI:-I8VKuckxYY:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=VTWXP82LDSI:-I8VKuckxYY:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=VTWXP82LDSI:-I8VKuckxYY:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=VTWXP82LDSI:-I8VKuckxYY:wF9xT3WuBAs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=VTWXP82LDSI:-I8VKuckxYY:wF9xT3WuBAs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=VTWXP82LDSI:-I8VKuckxYY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=VTWXP82LDSI:-I8VKuckxYY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=VTWXP82LDSI:-I8VKuckxYY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=VTWXP82LDSI:-I8VKuckxYY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=VTWXP82LDSI:-I8VKuckxYY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=VTWXP82LDSI:-I8VKuckxYY:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=VTWXP82LDSI:-I8VKuckxYY:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/20106.aspx</wfw:comment><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/commentRss/20106.aspx</wfw:commentRss><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://blog.lozanotek.com/services/trackbacks/20106.aspx</trackback:ping><feedburner:origLink>http://blog.lozanotek.com/archive/2009/02/18/Contextual_Sessions_with_NHibernate_ndash_Part_2.aspx</feedburner:origLink></item><item><title>Contextual Sessions with NHibernate &amp;ndash; Part 1</title><link>http://feedproxy.google.com/~r/lozanotek/~3/MZlXMjRXPTE/Contextual_Sessions_with_NHibernate_ndash_Part_1.aspx</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Javier G. Lozano</dc:creator><pubDate>Tue, 17 Feb 2009 18:56:50 PST</pubDate><guid isPermaLink="false">http://blog.lozanotek.com/archive/2009/02/17/Contextual_Sessions_with_NHibernate_ndash_Part_1.aspx</guid><description>&lt;p&gt;As with any piece of software development, there is more than a million ways to skin a cat.  Working with NHibernate in a multi-threaded environment is no different. :)  To help with the illustration of the interaction of NHibernate and ASP.NET, I’ve created a &lt;a href="http://jglozano.googlecode.com/svn/trunk/samples/NHContextualSessions/" target="_blank"&gt;&lt;strong&gt;sample application&lt;/strong&gt;&lt;/a&gt; out on Google code.  Please feel free to check it out and run it locally.  The only requirement for the sample is to have a local install of &lt;a href="http://www.microsoft.com/Sqlserver/2005/en/us/express.aspx" target="_blank"&gt;&lt;strong&gt;SQL Server Express&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;  &lt;h3&gt;The Problem&lt;/h3&gt;  &lt;p&gt;Those of you using NHibernate in a multi-threaded environment (say ASP.NET) have probably written code to maintains an ISession open for the during of a request (worker thread) so that any component within that request that needs an ISession, can just re-use it.  Typically the solution involves some fancy work with the &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.httpcontext.items.aspx" target="_blank"&gt;&lt;strong&gt;HttpContext.Items&lt;/strong&gt;&lt;/a&gt; collection by adding and removing sessions from the &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.httpapplication.beginrequest.aspx" target="_blank"&gt;&lt;strong&gt;HttpApplication.BeginRequest&lt;/strong&gt;&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.httpapplication.endrequest.aspx" target="_blank"&gt;&lt;strong&gt;HttpApplication.EndRequest.&lt;/strong&gt;&lt;/a&gt;  All of this code is infrastructure and requires some intimate knowledge of how ASP.NET works.  For all general purposes, your code can be similar to that of &lt;a href="http://jglozano.googlecode.com/svn/trunk/samples/NHContextualSessions/Web/CommonSessionModule.cs" target="_blank"&gt;&lt;strong&gt;CommonSessionModule.cs&lt;/strong&gt;&lt;/a&gt;:&lt;/p&gt;  &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 400px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; height: 400px; background-color: #f4f4f4"&gt;   &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;     &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; CommonSessionModule : IHttpModule {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Init(HttpApplication context) {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;         context.BeginRequest += context_BeginRequest;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt;         context.EndRequest += context_EndRequest;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   7:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   8:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Dispose() {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   9:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  10:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  11:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; context_BeginRequest(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, EventArgs e) {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  12:&lt;/span&gt;         var application = (HttpApplication)sender;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  13:&lt;/span&gt;         var context = application.Context;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  14:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  15:&lt;/span&gt;         var sessionBuilder = SessionBuilderFactory.CurrentBuilder;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  16:&lt;/span&gt;         context.Items[Constants.SessionKey] = sessionBuilder.OpenSession();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  17:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  18:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  19:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; context_EndRequest(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, EventArgs e) {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  20:&lt;/span&gt;         var application = (HttpApplication)sender;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  21:&lt;/span&gt;         var context = application.Context;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  22:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  23:&lt;/span&gt;         var session = context.Items[Constants.SessionKey] &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; ISession;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  24:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (session != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;) {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  25:&lt;/span&gt;             session.Flush();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  26:&lt;/span&gt;             session.Close();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  27:&lt;/span&gt;         }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  28:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  29:&lt;/span&gt;         context.Items[Constants.SessionKey] = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  30:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  31:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;To make the code simpler to read, I’ve introduced a &lt;a href="http://jglozano.googlecode.com/svn/trunk/samples/NHContextualSessions/Persistence/ISessionBuilder.cs" target="_blank"&gt;&lt;strong&gt;ISessionBuilder&lt;/strong&gt;&lt;/a&gt; and &lt;a href="http://jglozano.googlecode.com/svn/trunk/samples/NHContextualSessions/Persistence/SessionBuilderFactory.cs" target="_blank"&gt;&lt;strong&gt;SessionBuilderFactory&lt;/strong&gt;&lt;/a&gt; to handle the interaction with NHibernate and its pieces.  &lt;/p&gt;

&lt;p&gt;As you can see from the sample above, there is quite a lot of churn happening with the Items collection.  We have to intimately know how to add and remove the active ISession (per thread) based on some constant key.  To make matters worse, the implementation of ISessionBuilder needs to know how to pull the ‘current’ ISession out of the Items collections.  The &lt;a href="http://jglozano.googlecode.com/svn/trunk/samples/NHContextualSessions/Persistence/CommonSessionBuilder.cs" target="_blank"&gt;&lt;strong&gt;CommonSessionBuilder.cs&lt;/strong&gt;&lt;/a&gt; file shows this type of interaction:&lt;/p&gt;

&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 400px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4"&gt;
  &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; CommonSessionBuilder : SessionBuilderBase {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; ISession CurrentSession {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;         get {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;             &lt;span style="color: #008000"&gt;//Handle the ISession from the context&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt;             var currentContext = HttpContext.Current;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt;             var session = currentContext.Items[Constants.SessionKey] &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; ISession;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   7:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   8:&lt;/span&gt;             &lt;span style="color: #008000"&gt;//HACK: Here to support the calling of sessions from the HttpApplication start                &lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   9:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (session == &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;) {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  10:&lt;/span&gt;                 session = OpenSession();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  11:&lt;/span&gt;                 currentContext.Items[Constants.SessionKey] = session;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  12:&lt;/span&gt;             }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  13:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  14:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; session;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  15:&lt;/span&gt;         }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  16:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  17:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Most of the “common” (Configuration settings, ISessionFactory creation, etc) are part of the &lt;a href="http://jglozano.googlecode.com/svn/trunk/samples/NHContextualSessions/Persistence/SessionBuilderBase.cs" target="_blank"&gt;&lt;strong&gt;SessionBuilderBase&lt;/strong&gt;&lt;/a&gt; class since those pieces are going to be needed regardless the implementation we use for the &lt;strong&gt;CurrentSession&lt;/strong&gt; method.  For this implementation of &lt;strong&gt;CurrentSession&lt;/strong&gt;, we have to pull the current ISession from the Items collection to give it back to the caller of the property (in this instance, the RepositoryBase class):&lt;/p&gt;

&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 400px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4"&gt;
  &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; RepositoryBase&amp;lt;TEntity&amp;gt; : ICRUDRepository&amp;lt;TEntity&amp;gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;where&lt;/span&gt; TEntity : EntityBase, &lt;span style="color: #0000ff"&gt;new&lt;/span&gt;() {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;readonly&lt;/span&gt; ISessionBuilder _sessionBuilder;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; RepositoryBase(ISessionBuilder sessionFactory) {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   7:&lt;/span&gt;         _sessionBuilder = sessionFactory;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   8:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   9:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  10:&lt;/span&gt;     &lt;span style="color: #cc6633"&gt;#region&lt;/span&gt; ICRUDRepository&amp;lt;TEntity&amp;gt; Members&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  11:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  12:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Create(TEntity entity) {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  13:&lt;/span&gt;         ISession session = GetSession();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  14:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; (ITransaction transaction = session.BeginTransaction()) {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  15:&lt;/span&gt;             session.Save(entity);&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  16:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  17:&lt;/span&gt;             transaction.Commit();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  18:&lt;/span&gt;         }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  19:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  20:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  21:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; TEntity Retrieve(Guid entityId) {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  22:&lt;/span&gt;         ISession session = GetSession();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  23:&lt;/span&gt;         ICriteria criteria = session.CreateCriteria(&lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt;(TEntity));&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  24:&lt;/span&gt;         criteria.Add(Expression.Eq(&lt;span style="color: #006080"&gt;"Id"&lt;/span&gt;, entityId));&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  25:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  26:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; criteria.UniqueResult&amp;lt;TEntity&amp;gt;();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  27:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  28:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  29:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; IList&amp;lt;TEntity&amp;gt; RetrieveAll() {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  30:&lt;/span&gt;         ISession session = GetSession();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  31:&lt;/span&gt;         ICriteria targetObjects = session.CreateCriteria(&lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt;(TEntity));&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  32:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  33:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; targetObjects.List&amp;lt;TEntity&amp;gt;();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  34:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  35:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  36:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Update(TEntity entity) {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  37:&lt;/span&gt;         ISession session = GetSession();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  38:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  39:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; (ITransaction transaction = session.BeginTransaction()) {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  40:&lt;/span&gt;             session.Update(entity);&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  41:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  42:&lt;/span&gt;             transaction.Commit();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  43:&lt;/span&gt;         }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  44:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  45:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  46:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Delete(TEntity entity) {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  47:&lt;/span&gt;         ISession session = GetSession();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  48:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; (ITransaction transaction = session.BeginTransaction()) {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  49:&lt;/span&gt;             session.Delete(entity);&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  50:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  51:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  52:&lt;/span&gt;             transaction.Commit();&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  53:&lt;/span&gt;         }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  54:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  55:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  56:&lt;/span&gt;     &lt;span style="color: #cc6633"&gt;#endregion&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  57:&lt;/span&gt;  &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  58:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; ISession GetSession() {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  59:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; _sessionBuilder.CurrentSession;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  60:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;  61:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;All CRUD methods do a call to the &lt;strong&gt;GetSession&lt;/strong&gt; method which in turn call’s the &lt;strong&gt;ISessionBuilder.CurrentSession&lt;/strong&gt; method to fetch the current ISession instance.  Again, the reason for this indirection is to allow flexibility on the way an ISession is acquired during runtime.  Since it’s not the concern of the RepositoryBase to manage the intricacies of NHibernate, having such approach here keeps the code clean and clear from any unnecessary clutter.  Always a good thing to have! :)&lt;/p&gt;

&lt;p&gt;Hopefully by now you’re noticing that this approach doesn’t do a good job at separating concerns for the data layer.  The &lt;strong&gt;CommonSessionBuilder&lt;/strong&gt; class has to have knowledge of a web context, however, it’s sole purpose is to handle pieces for data access.  So, how do we solve this approach and minimize our dependency on the web context?  We use a pretty nice (not so visible) feature of NHibernate called, Contextual Sessions.&lt;/p&gt;

&lt;p&gt;I will address Contextual Sessions on a follow up post and show how the code changes by using this pretty awesome feature!&lt;/p&gt;

&lt;p&gt;Keep Codin’!&lt;/p&gt;&lt;img src="http://blog.lozanotek.com/aggbug/20105.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=MZlXMjRXPTE:IYgQQ-Bf-FA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=MZlXMjRXPTE:IYgQQ-Bf-FA:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=MZlXMjRXPTE:IYgQQ-Bf-FA:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=MZlXMjRXPTE:IYgQQ-Bf-FA:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=MZlXMjRXPTE:IYgQQ-Bf-FA:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=MZlXMjRXPTE:IYgQQ-Bf-FA:wF9xT3WuBAs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=MZlXMjRXPTE:IYgQQ-Bf-FA:wF9xT3WuBAs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=MZlXMjRXPTE:IYgQQ-Bf-FA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=MZlXMjRXPTE:IYgQQ-Bf-FA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=MZlXMjRXPTE:IYgQQ-Bf-FA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=MZlXMjRXPTE:IYgQQ-Bf-FA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=MZlXMjRXPTE:IYgQQ-Bf-FA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=MZlXMjRXPTE:IYgQQ-Bf-FA:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=MZlXMjRXPTE:IYgQQ-Bf-FA:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/20105.aspx</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/commentRss/20105.aspx</wfw:commentRss><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://blog.lozanotek.com/services/trackbacks/20105.aspx</trackback:ping><feedburner:origLink>http://blog.lozanotek.com/archive/2009/02/17/Contextual_Sessions_with_NHibernate_ndash_Part_1.aspx</feedburner:origLink></item><item><title>Etixo</title><link>http://feedproxy.google.com/~r/lozanotek/~3/AUeQMmtS-dY/Etixo.aspx</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Javier G. Lozano</dc:creator><pubDate>Sun, 11 Jan 2009 20:59:47 PST</pubDate><guid isPermaLink="false">http://blog.lozanotek.com/archive/2009/01/11/Etixo.aspx</guid><description>&lt;p&gt;As some of you already know, I blogged about &lt;a rel="tag" target="_blank" href="http://blog.lozanotek.com/archive/2008/12/15/Oxite.aspx"&gt;&lt;strong&gt;my reaction to the Oxite MVC sample&lt;/strong&gt;&lt;/a&gt; from the &lt;a rel="tag" target="_blank" href="http://visitmix.com/Lab/Oxite"&gt;&lt;strong&gt;MIX Online Labs&lt;/strong&gt;&lt;/a&gt;.  Also, I started &lt;a rel="tag" target="_blank" href="http://blog.lozanotek.com/archive/2008/12/23/Views_Models_and_ViewModels_-_Part_1.aspx"&gt;&lt;strong&gt;blogging some of my ideas for refactoring the source&lt;/strong&gt;&lt;/a&gt; to make it a bit more streamlined.  More importantly, I want use these posts as a way to share my ideas on how to use the new &lt;a rel="tag" target="_blank" href="http://www.asp.net/mvc"&gt;&lt;strong&gt;ASP.NET MVC framework&lt;/strong&gt;&lt;/a&gt;.  Not that I am “the source” for the right implementation, but I do want to provide another insight to the problem.  Anywho…&lt;/p&gt;
&lt;p&gt;Instead of keeping my source in zip files and bits and pieces, I created a fork of the &lt;a rel="tag" target="_blank" href="http://www.codeplex.com/oxite"&gt;&lt;strong&gt;Oxite project&lt;/strong&gt;&lt;/a&gt;called &lt;a rel="tag" target="_blank" href="http://code.google.com/p/etixo"&gt;&lt;strong&gt;Etixo&lt;/strong&gt;&lt;/a&gt;(Oxite ALTered).  I know Rob is &lt;a rel="tag" target="_blank" href="http://blog.wekeroad.com/blog/oxite-refactor-take-1/"&gt;&lt;strong&gt;doing the same thing out on his SVN server&lt;/strong&gt;&lt;/a&gt;.  However, he’s taking a different approach to the problem.  He’s refactoring the &lt;strong&gt;core&lt;/strong&gt; of the application and applying more DDD discipline to it.  Don’t get me wrong, that’s totally awesome and he’s doing a great job at it (just like he’s doing with this &lt;a rel="tag" target="_blank" href="http://blog.wekeroad.com/mvc-storefront/mvc-storefront-part-1/"&gt;&lt;strong&gt;MVC Storefront&lt;/strong&gt;&lt;/a&gt;). I want to take the utilitarian approach and show how you can refactor the infrastructure of the application to separate concerns. From there, you can always refactor to a DDD foundation.&lt;/p&gt;
&lt;p&gt;Another goal I have for this project is to apply some of the concepts and tooling from &lt;a rel="tag" target="_blank" href="http://blog.lozanotek.com/archive/2008/10/19/Thanks_VSLive_Las_Vegas_and_HDC_08.aspx"&gt;my Zen of ASP.NET and Open Source tools talks&lt;/a&gt; I did this last year. Hopefully, this can serve as a nice sample for developers that are either stuck with the question “how do I move to MVC from Webforms?” or “how do I use tool X with MVC?”.&lt;/p&gt;
&lt;p&gt;If you’re interested in helping out with the refactoring with related MVC content, please let me know. I can give you write access to the source out in Google Code.&lt;/p&gt;
&lt;p&gt;Happy Codin’!&lt;/p&gt;&lt;img src="http://blog.lozanotek.com/aggbug/20103.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=AUeQMmtS-dY:VPw3tzWJyPI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=AUeQMmtS-dY:VPw3tzWJyPI:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=AUeQMmtS-dY:VPw3tzWJyPI:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=AUeQMmtS-dY:VPw3tzWJyPI:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=AUeQMmtS-dY:VPw3tzWJyPI:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=AUeQMmtS-dY:VPw3tzWJyPI:wF9xT3WuBAs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=AUeQMmtS-dY:VPw3tzWJyPI:wF9xT3WuBAs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=AUeQMmtS-dY:VPw3tzWJyPI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=AUeQMmtS-dY:VPw3tzWJyPI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=AUeQMmtS-dY:VPw3tzWJyPI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=AUeQMmtS-dY:VPw3tzWJyPI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=AUeQMmtS-dY:VPw3tzWJyPI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=AUeQMmtS-dY:VPw3tzWJyPI:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=AUeQMmtS-dY:VPw3tzWJyPI:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/20103.aspx</wfw:comment><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/commentRss/20103.aspx</wfw:commentRss><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://blog.lozanotek.com/services/trackbacks/20103.aspx</trackback:ping><feedburner:origLink>http://blog.lozanotek.com/archive/2009/01/11/Etixo.aspx</feedburner:origLink></item><item><title>New Year&amp;rsquo;s Resolutions</title><link>http://feedproxy.google.com/~r/lozanotek/~3/CvCV-h_KTHw/New_Yearrsquos_Resolutions.aspx</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Javier G. Lozano</dc:creator><pubDate>Sun, 11 Jan 2009 20:19:59 PST</pubDate><guid isPermaLink="false">http://blog.lozanotek.com/archive/2009/01/11/New_Yearrsquos_Resolutions.aspx</guid><description>&lt;p&gt;I know, I know…I’m a little late on the resolutions.  But like they say, &lt;em&gt;it’s better late than never!&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;So, I've been thinking about I want to change/enhance in 2009 for the past couple of weeks.  First I must say that I did achieve &lt;a href="http://blog.lozanotek.com/archive/2008/01/03/Coding_Out_Loud.aspx" target="_blank"&gt;&lt;strong&gt;my theme for 2008 of Simplicity&lt;/strong&gt;&lt;/a&gt;. However, I did SUCK at the whole “content, content, content” piece given the fact that I only 40+ posts in all of 2008!&lt;/p&gt;  &lt;p&gt;So, here’s what I’m going to make up for these pieces ….&lt;/p&gt;  &lt;p&gt;Professional Resolutions:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Stick with the “simplicity” theme (it’s great!). &lt;/li&gt;    &lt;li&gt;Start my business. &lt;/li&gt;    &lt;li&gt;Complete my “product”. &lt;/li&gt;    &lt;li&gt;Write my online book. &lt;/li&gt;    &lt;li&gt;Blog at least twice a week. &lt;/li&gt;    &lt;li&gt;Start (and keep) going with an open source project. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Personal Resolutions:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Spend more time with my family (during normal hours). &lt;/li&gt;    &lt;li&gt;Get in shape (and stay that way). &lt;/li&gt;    &lt;li&gt;Learn Japanese &amp;amp; Latin. &lt;/li&gt;    &lt;li&gt;Have more fun &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;That’s it!  Pretty simple and straight forward, right? :)&lt;/p&gt;&lt;img src="http://blog.lozanotek.com/aggbug/20102.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=CvCV-h_KTHw:GwI1BncuKls:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=CvCV-h_KTHw:GwI1BncuKls:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=CvCV-h_KTHw:GwI1BncuKls:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=CvCV-h_KTHw:GwI1BncuKls:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=CvCV-h_KTHw:GwI1BncuKls:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=CvCV-h_KTHw:GwI1BncuKls:wF9xT3WuBAs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=CvCV-h_KTHw:GwI1BncuKls:wF9xT3WuBAs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=CvCV-h_KTHw:GwI1BncuKls:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=CvCV-h_KTHw:GwI1BncuKls:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=CvCV-h_KTHw:GwI1BncuKls:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=CvCV-h_KTHw:GwI1BncuKls:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=CvCV-h_KTHw:GwI1BncuKls:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=CvCV-h_KTHw:GwI1BncuKls:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=CvCV-h_KTHw:GwI1BncuKls:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/20102.aspx</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/commentRss/20102.aspx</wfw:commentRss><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://blog.lozanotek.com/services/trackbacks/20102.aspx</trackback:ping><feedburner:origLink>http://blog.lozanotek.com/archive/2009/01/11/New_Yearrsquos_Resolutions.aspx</feedburner:origLink></item><item><title>Views, Models and ViewModels - Part 1</title><link>http://feedproxy.google.com/~r/lozanotek/~3/cj2CKAoGirg/Views_Models_and_ViewModels_-_Part_1.aspx</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Javier G. Lozano</dc:creator><pubDate>Tue, 23 Dec 2008 20:56:22 PST</pubDate><guid isPermaLink="false">http://blog.lozanotek.com/archive/2008/12/23/Views_Models_and_ViewModels_-_Part_1.aspx</guid><description>&lt;p&gt;Not sure how many of you read my first post on my thoughts on &lt;a href="http://blog.lozanotek.com/archive/2008/12/15/Oxite.aspx" target="_blank"&gt;&lt;strong&gt;Oxite&lt;/strong&gt;&lt;/a&gt;. Well, here's my offering on trying to make things a little closer to MVC by offering my perspective on the code.  Please note that I want to keep these simple refactorings as conversational as possible, so if you see something that offends or upsets you with my interpretation/implementation, PLEASE COMMENT. :)&lt;/p&gt;  &lt;p&gt;Let's examine the &lt;strong&gt;&lt;em&gt;SignIn&lt;/em&gt;&lt;/strong&gt; action under the &lt;strong&gt;&lt;em&gt;AccountController:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;pre class="code"&gt;[&lt;span style="color: #2b91af"&gt;AcceptVerbs&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;HttpVerbs&lt;/span&gt;.Post)]
&lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ActionResult &lt;/span&gt;SignIn(&lt;span style="color: blue"&gt;string &lt;/span&gt;username, &lt;span style="color: blue"&gt;string &lt;/span&gt;password, &lt;span style="color: blue"&gt;bool &lt;/span&gt;rememberMe, &lt;span style="color: blue"&gt;string &lt;/span&gt;returnUrl)
{
    PageTitle.AdditionalPageTitleSegments = &lt;span style="color: blue"&gt;new string&lt;/span&gt;[] { &lt;span style="color: #a31515"&gt;"Sign In" &lt;/span&gt;};

    &lt;span style="color: blue"&gt;if &lt;/span&gt;(&lt;span style="color: blue"&gt;string&lt;/span&gt;.IsNullOrEmpty(username))
        ModelState.AddModelError(&lt;span style="color: #a31515"&gt;"username"&lt;/span&gt;, &lt;span style="color: #a31515"&gt;"You must specify a username."&lt;/span&gt;);

&lt;span style="color: blue"&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;if &lt;/span&gt;(&lt;span style="color: blue"&gt;string&lt;/span&gt;.IsNullOrEmpty(password))
        ModelState.AddModelError(&lt;span style="color: #a31515"&gt;"password"&lt;/span&gt;, &lt;span style="color: #a31515"&gt;"You must specify a password."&lt;/span&gt;);

&lt;span style="color: blue"&gt;&lt;font color="#000000"&gt;     &lt;/font&gt;if &lt;/span&gt;(ViewData.ModelState.IsValid)
     {
         &lt;span style="color: #2b91af"&gt;IUser &lt;/span&gt;user = MembershipRepository.GetUser(username, password);

         &lt;span style="color: blue"&gt;if &lt;/span&gt;(user != &lt;span style="color: blue"&gt;null&lt;/span&gt;)
         {
             FormsAuth.SetAuthCookie(username, rememberMe);

             &lt;span style="color: blue"&gt;if &lt;/span&gt;(!&lt;span style="color: blue"&gt;string&lt;/span&gt;.IsNullOrEmpty(returnUrl) &amp;amp;&amp;amp; returnUrl.StartsWith(&lt;span style="color: #a31515"&gt;"/"&lt;/span&gt;))
                 &lt;span style="color: blue"&gt;return &lt;/span&gt;Redirect(returnUrl);
             &lt;span style="color: blue"&gt;else
                 return &lt;/span&gt;RedirectToRoute(&lt;span style="color: #a31515"&gt;"Home"&lt;/span&gt;);
         }
         &lt;span style="color: blue"&gt;else
         &lt;/span&gt;{
             ModelState.AddModelError(&lt;span style="color: #a31515"&gt;"_FORM"&lt;/span&gt;, &lt;span style="color: #a31515"&gt;"The username or password provided is incorrect."&lt;/span&gt;);
         }
     }

     ViewData[&lt;span style="color: #a31515"&gt;"rememberMe"&lt;/span&gt;] = rememberMe;

     &lt;span style="color: blue"&gt;return &lt;/span&gt;View();
}&lt;/pre&gt;

&lt;p&gt;As you can see from here, there is a lot of code within this method that makes it hard to follow/maintain since everything is put jammed together in the body of the action.  Here are some things that we can see immediately:  &lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Form Data Validation&lt;/strong&gt; &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;Model Validation&lt;/strong&gt; &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;Route Processing&lt;/strong&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Essentially, the controller is performing both control logic as well as domain/business logic, which clearly shows that it is violating the &lt;a href="http://en.wikipedia.org/wiki/Single_responsibility_principle" target="_blank"&gt;&lt;strong&gt;Single Responsibility Principal (SRP)&lt;/strong&gt;&lt;/a&gt; and its &lt;a href="http://en.wikipedia.org/wiki/Separation_of_concerns" target="_blank"&gt;&lt;strong&gt;Separation of Concerns (SoC)&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The question here is &lt;em&gt;How do we address these issues?&lt;/em&gt; Well, first by taking the a look at the pieces that make up the code and putting them in their correct "location".  To not get overwhelmed, let's first focus on &lt;strong&gt;Form Data Validation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Now, let me first start by saying that Views and Models can be one of the hardest things to grok if you're new to the MV* patterns.  Why?  Well, as developers we sometimes take things too literal which makes things even worse.  So when we hear the words, &lt;em&gt;View&lt;/em&gt; and &lt;em&gt;Model&lt;/em&gt; we think that there's nothing in between.  Sigh...&lt;/p&gt;

&lt;p&gt;So let's start by saying that a &lt;em&gt;View&lt;/em&gt; is a representation (or snapshot) of the data that is contained by your &lt;em&gt;Model&lt;/em&gt;.  Your &lt;em&gt;Model&lt;/em&gt; is the representation of the real-world scenario your application is trying to capture.  Now, the ViewModel is a &lt;em&gt;transformation/projection&lt;/em&gt; of the data captured from the &lt;em&gt;View&lt;/em&gt; that adhere's to what is expected by the &lt;em&gt;Model.&lt;/em&gt;  As you can see, each piece handles JUST one thing.  It shouldn't care what other pieces are doing&lt;/p&gt;

&lt;p&gt;Having said that, let's focus on the concept of &lt;strong&gt;User Sign In&lt;/strong&gt; within your application.  First, I will define that the pieces as follows:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;View&lt;/strong&gt; - the login screen - text boxes to capture username, password, etc. &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;ViewModel&lt;/strong&gt; - a CredentialViewModel class - this represents the data from the view so it can be transformed/projected to the Model. &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;Model&lt;/strong&gt; - a User class - this represents a &lt;em&gt;real-world&lt;/em&gt; user in the system &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pretty straight forward, right?  It's about capture, projection and verification.  In my next post, we'll examine how we can refactor the action method and it's parameters into something that's easier to consume and understand. &lt;/p&gt;

&lt;p&gt;Keep coding!&lt;/p&gt;&lt;img src="http://blog.lozanotek.com/aggbug/20101.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=cj2CKAoGirg:9D1qHZHCefw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=cj2CKAoGirg:9D1qHZHCefw:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=cj2CKAoGirg:9D1qHZHCefw:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=cj2CKAoGirg:9D1qHZHCefw:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=cj2CKAoGirg:9D1qHZHCefw:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=cj2CKAoGirg:9D1qHZHCefw:wF9xT3WuBAs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=cj2CKAoGirg:9D1qHZHCefw:wF9xT3WuBAs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=cj2CKAoGirg:9D1qHZHCefw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=cj2CKAoGirg:9D1qHZHCefw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=cj2CKAoGirg:9D1qHZHCefw:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=cj2CKAoGirg:9D1qHZHCefw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=cj2CKAoGirg:9D1qHZHCefw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=cj2CKAoGirg:9D1qHZHCefw:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=cj2CKAoGirg:9D1qHZHCefw:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/20101.aspx</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/commentRss/20101.aspx</wfw:commentRss><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://blog.lozanotek.com/services/trackbacks/20101.aspx</trackback:ping><feedburner:origLink>http://blog.lozanotek.com/archive/2008/12/23/Views_Models_and_ViewModels_-_Part_1.aspx</feedburner:origLink></item><item><title>Oxite</title><link>http://feedproxy.google.com/~r/lozanotek/~3/7G_Zfy_8DgA/Oxite.aspx</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Javier G. Lozano</dc:creator><pubDate>Mon, 15 Dec 2008 20:07:29 PST</pubDate><guid isPermaLink="false">http://blog.lozanotek.com/archive/2008/12/15/Oxite.aspx</guid><description>&lt;p&gt;This past weekend some discussion sprung up around a new blog engine called &lt;a href="http://www.codeplex.com/oxite" target="_blank"&gt;&lt;strong&gt;Oxite&lt;/strong&gt;&lt;/a&gt;.  This blog engine is put out by the &lt;a href="http://visitmix.com/Lab/Oxite" target="_blank"&gt;&lt;strong&gt;MIX Online team and it's used to power their blog&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Now, I'm not going to rehash some of the statements made by other members of the community since there is no point in beating a dead horse.  However, if you want check them out I suggest that first see &lt;a href="http://blog.wekeroad.com/blog" target="_blank"&gt;&lt;strong&gt;Rob Conery&lt;/strong&gt;&lt;/a&gt;'s &lt;a href="http://blog.wekeroad.com/blog/some-thoughts-on-oxite/" target="_blank"&gt;&lt;strong&gt;thoughts on Oxite&lt;/strong&gt;&lt;/a&gt; as well as &lt;a href="http://www.lazycoder.com/weblog" target="_blank"&gt;&lt;strong&gt;Scott Koon&lt;/strong&gt;&lt;/a&gt; with &lt;a href="http://www.lazycoder.com/weblog/2008/12/15/new-aspnet-mvc-sample-oxite-needs-some-tlc/" target="_blank"&gt;&lt;strong&gt;TLC for Oxite post&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The thing I do want to point out is that the team is listening to what the community is saying.  Erik Porter &lt;a href="http://twitter.com/HumanCompiler/statuses/1058005243" target="_blank"&gt;&lt;strong&gt;twitted&lt;/strong&gt;&lt;/a&gt; me and &lt;a href="http://devlicio.us/blogs/derik_whittaker/default.aspx" target="_blank"&gt;&lt;strong&gt;Derik Whittaker&lt;/strong&gt;&lt;/a&gt; a reply stating,&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;@&lt;/em&gt;&lt;a href="http://twitter.com/lozanotek"&gt;&lt;em&gt;lozanotek&lt;/em&gt;&lt;/a&gt;&lt;em&gt; @&lt;/em&gt;&lt;a href="http://twitter.com/DerikWhittaker"&gt;&lt;em&gt;DerikWhittaker&lt;/em&gt;&lt;/a&gt;&lt;em&gt; Write code and send it in. Maybe upload a patch? We're definitely looking for the right community help! &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Unfortunately, the way things are setup with the &lt;a href="http://www.opensource.org/licenses/ms-pl.html" target="_blank"&gt;&lt;strong&gt;Microsoft Public License (Ms-PL)&lt;/strong&gt;&lt;/a&gt; and some internal processes, they can't fully accept contributions to the code.  Again, I give the team HUGE kudos for asking for guidance.&lt;/p&gt;  &lt;p&gt;As I stated on &lt;a href="http://blog.wekeroad.com/blog/some-thoughts-on-oxite/#comment-4399210" target="_blank"&gt;&lt;strong&gt;my comment&lt;/strong&gt;&lt;/a&gt; in Rob's post, &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I think one important thing to note is that Oxite serves as a good example of viewing an MVC implementation from a "WebForms state of mind".&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;So, for those of you coming from the WebForms world, as it currently stands, Oxite shows you some of the basic applications of the MVC framework but with some of the &lt;em&gt;bad&lt;/em&gt; habits of WebForms.  By no means, I would call it a &lt;em&gt;real-world example&lt;/em&gt; since there is no base for the statement to either prove it or disprove it.  I would say that Oxite is a step on the direction of fully understanding what &lt;a title="" href="http://www.asp.net" target="_blank"&gt;ASP.NET&lt;/a&gt; MVC can provide to your applications.&lt;/p&gt;  &lt;p&gt;I will commit to this though, as soon as the project starts accepting contributions, I will be more than happy to lend a hand in their efforts.&lt;/p&gt;&lt;img src="http://blog.lozanotek.com/aggbug/20100.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=7G_Zfy_8DgA:5IkDSaklVuY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=7G_Zfy_8DgA:5IkDSaklVuY:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=7G_Zfy_8DgA:5IkDSaklVuY:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=7G_Zfy_8DgA:5IkDSaklVuY:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=7G_Zfy_8DgA:5IkDSaklVuY:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=7G_Zfy_8DgA:5IkDSaklVuY:wF9xT3WuBAs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=7G_Zfy_8DgA:5IkDSaklVuY:wF9xT3WuBAs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=7G_Zfy_8DgA:5IkDSaklVuY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=7G_Zfy_8DgA:5IkDSaklVuY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=7G_Zfy_8DgA:5IkDSaklVuY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=7G_Zfy_8DgA:5IkDSaklVuY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=7G_Zfy_8DgA:5IkDSaklVuY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=7G_Zfy_8DgA:5IkDSaklVuY:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=7G_Zfy_8DgA:5IkDSaklVuY:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/20100.aspx</wfw:comment><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/commentRss/20100.aspx</wfw:commentRss><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://blog.lozanotek.com/services/trackbacks/20100.aspx</trackback:ping><feedburner:origLink>http://blog.lozanotek.com/archive/2008/12/15/Oxite.aspx</feedburner:origLink></item><item><title>MSDN Unleashed!</title><link>http://feedproxy.google.com/~r/lozanotek/~3/3HDiDlCRp5U/MSDN_Unleashed.aspx</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Javier G. Lozano</dc:creator><pubDate>Wed, 05 Nov 2008 07:32:49 PST</pubDate><guid isPermaLink="false">http://blog.lozanotek.com/archive/2008/11/05/MSDN_Unleashed.aspx</guid><description>&lt;p&gt;Instead of having our regularly scheduled IADNUG meeting, we're having &lt;a rel="tag" target="_blank" href="http://www.benkotips.com/"&gt;&lt;strong&gt;Mike Benkovich&lt;/strong&gt;&lt;/a&gt; and &lt;a rel="tag" target="_blank" href="http://sqlblog.com/blogs/kent_tegels/"&gt;&lt;strong&gt;Kent Tegels&lt;/strong&gt;&lt;/a&gt; do an MSDN Unleashed Event at &lt;a rel="tag" target="_blank" href="http://www.dmacc.cc.ia.us/west/"&gt;&lt;strong&gt;DMACC West&lt;/strong&gt;&lt;/a&gt;!  Here's the info on it:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Join us at our MSDN Unleashed events for the latest tips, tools and technical information you need to build powerful applications and engaging user experiences. We'll show you how SQL Server 2008 delivers new development capabilities, including support for Spatial Data types, a fresh storage mechanism and more. You'll also learn how to leverage the &lt;a target="_blank" href="http://silverlight.net" title=""&gt;Silverlight&lt;/a&gt; platform to build next generation applications for consumers and business. Don't miss these free, live sessions near you.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Session 1&lt;/u&gt;&lt;/strong&gt;&lt;strong&gt;: What's New in SQL Server 2008 for Developers&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;SQL Server 2008 adds numerous new capabilities for developers – from support for Spatial Data types to a storage mechanism for SQL BLOB data using the NTFS file system, and much, much more. The new release also delivers several improvements to development-related areas, from T-SQL to SQLCLR to XML. This presentation will provide a technical dive into the latest and greatest features you'll find in SQL Server 2008, while offering insight into how effectively apply them to your upcoming development projects.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Session 2&lt;/u&gt;&lt;/strong&gt;&lt;strong&gt;: &lt;/strong&gt;&lt;strong&gt;Build next generation applications with &lt;a target="_blank" href="http://silverlight.net" title=""&gt;Silverlight&lt;/a&gt; 2.0&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://silverlight.net" title=""&gt;Silverlight&lt;/a&gt; provides a powerful platform for building the next generation of rich interactive applications on the Internet. In this session, we'll take a look at the programming model and tools that developers and designers can leverage to build these true next generation experiences for consumers and businesses, and demonstrate how to build a rich interactive application (RIA) using &lt;a target="_blank" href="http://silverlight.net" title=""&gt;Silverlight&lt;/a&gt; and Microsoft.NET. We'll explore how to use Microsoft Visual Studio to create applications, and how to create UI using XAML markup and code, controls, and File I/O.&lt;/p&gt;
&lt;p&gt;We'll also discuss networking, how to retrieve data from a Web service, and various other aspects of building &lt;a target="_blank" href="http://silverlight.net" title=""&gt;Silverlight&lt;/a&gt; applications.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;WHO SHOULD ATTEND?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Anyone who designs, develops, or debugs code. If you are an architect, developer or just enjoy curly braces, join us.&lt;/p&gt;&lt;img src="http://blog.lozanotek.com/aggbug/20099.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=3HDiDlCRp5U:LolzyYFDVcY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=3HDiDlCRp5U:LolzyYFDVcY:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=3HDiDlCRp5U:LolzyYFDVcY:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=3HDiDlCRp5U:LolzyYFDVcY:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=3HDiDlCRp5U:LolzyYFDVcY:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=3HDiDlCRp5U:LolzyYFDVcY:wF9xT3WuBAs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=3HDiDlCRp5U:LolzyYFDVcY:wF9xT3WuBAs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=3HDiDlCRp5U:LolzyYFDVcY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=3HDiDlCRp5U:LolzyYFDVcY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=3HDiDlCRp5U:LolzyYFDVcY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=3HDiDlCRp5U:LolzyYFDVcY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=3HDiDlCRp5U:LolzyYFDVcY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=3HDiDlCRp5U:LolzyYFDVcY:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=3HDiDlCRp5U:LolzyYFDVcY:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/20099.aspx</wfw:comment><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/commentRss/20099.aspx</wfw:commentRss><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://blog.lozanotek.com/services/trackbacks/20099.aspx</trackback:ping><feedburner:origLink>http://blog.lozanotek.com/archive/2008/11/05/MSDN_Unleashed.aspx</feedburner:origLink></item><item><title>Microsoft ArcReady</title><link>http://feedproxy.google.com/~r/lozanotek/~3/jEJp6VTuRlQ/Microsoft_ArcReady.aspx</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Javier G. Lozano</dc:creator><pubDate>Wed, 05 Nov 2008 07:27:18 PST</pubDate><guid isPermaLink="false">http://blog.lozanotek.com/archive/2008/11/05/Microsoft_ArcReady.aspx</guid><description>&lt;p&gt;Not sure how many of you know about this upcoming event (tomorrow) &lt;strong&gt;11/06/2008&lt;/strong&gt;!  If you're going to be around the area, please come check it out!!&lt;/p&gt;  &lt;p&gt;&lt;b&gt;ArcReady&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Professional Patterns on the Job&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;You're smart. You deliver. What more could your company want from you?  Why don't they come to you for the big technical decisions? Why won't they listen to your proposals? It seems like everyone has an agenda and they're doing everything they can to kill your great ideas.&lt;/p&gt;  &lt;p&gt;Join us this quarter as we focus on the soft skills that architects need to master. Learning these skills will boost your emotional intelligence and help you become a more professional, well rounded contributor. You'll gain insight into the architect's role as leader,influencer, and business professional and learn how to leverage your position to become a positive force within your organization.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Session 1: Mastering the Soft Skills &lt;/strong&gt;    &lt;br /&gt;In this session, we'll discuss key interpersonal skills and how they can affect your projects and career. We cover how to positively connect with humans, how to participate in and influence the business processes you support, and how to transcend your technical role and maximize your connections with all members of your organization.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Session 2: Organizational Dynamics &lt;/strong&gt;    &lt;br /&gt;This session examines the dynamic nature of large organizations – their structures, decision making processes, and political landscapes. We'll discuss the goals of key business and technical decision makers and their influence on architects and software projects. We'll conclude with some strategies for maximizing the soft skills from Session 1 to ensure successful outcomes for your projects and career.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;WHAT IS ARCREADY?&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;A &lt;b&gt;forum&lt;/b&gt; for aspiring and practicing architects to discuss industry trends&lt;/li&gt;    &lt;li&gt;An overview of Microsoft's&lt;b&gt; roadmap &lt;/b&gt;as it relates to software architecture&lt;/li&gt;    &lt;li&gt;A mechanism to solicit your &lt;b&gt;feedback&lt;/b&gt;&lt;/li&gt;    &lt;li&gt;An opportunity to &lt;b&gt;showcase&lt;/b&gt; the work you do!&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;WHO SHOULD ATTEND?&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Architects and Senior Developers who are interested in becoming an architect.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;WHERE ARE THE EVENTS?&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Events are held in 19 cities across Central Region.  To register for this event, please visit &lt;a href="http://www.arcready.com"&gt;www.arcready.com&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;WHAT TIME ARE THESE EVENTS?&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;      9:00am – 11:45am &lt;/p&gt;&lt;img src="http://blog.lozanotek.com/aggbug/20098.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=jEJp6VTuRlQ:3c-HuXZlOZs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=jEJp6VTuRlQ:3c-HuXZlOZs:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=jEJp6VTuRlQ:3c-HuXZlOZs:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=jEJp6VTuRlQ:3c-HuXZlOZs:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=jEJp6VTuRlQ:3c-HuXZlOZs:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=jEJp6VTuRlQ:3c-HuXZlOZs:wF9xT3WuBAs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=jEJp6VTuRlQ:3c-HuXZlOZs:wF9xT3WuBAs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=jEJp6VTuRlQ:3c-HuXZlOZs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=jEJp6VTuRlQ:3c-HuXZlOZs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=jEJp6VTuRlQ:3c-HuXZlOZs:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=jEJp6VTuRlQ:3c-HuXZlOZs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=jEJp6VTuRlQ:3c-HuXZlOZs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=jEJp6VTuRlQ:3c-HuXZlOZs:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=jEJp6VTuRlQ:3c-HuXZlOZs:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/20098.aspx</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/commentRss/20098.aspx</wfw:commentRss><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://blog.lozanotek.com/services/trackbacks/20098.aspx</trackback:ping><feedburner:origLink>http://blog.lozanotek.com/archive/2008/11/05/Microsoft_ArcReady.aspx</feedburner:origLink></item><item><title>Iowa Code Camp v2!</title><link>http://feedproxy.google.com/~r/lozanotek/~3/McUfZz3qL0U/Iowa_Code_Camp_v2.aspx</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Javier G. Lozano</dc:creator><pubDate>Tue, 04 Nov 2008 18:43:20 PST</pubDate><guid isPermaLink="false">http://blog.lozanotek.com/archive/2008/11/04/Iowa_Code_Camp_v2.aspx</guid><description>&lt;p&gt;That's right!  If you're free this Saturday and get to get some free content and a great way to interact with the developer community in Central and Eastern Iowa, come check out the &lt;a href="http://www.iowacodecamp.com" target="_blank"&gt;&lt;strong&gt;Iowa Code Camp&lt;/strong&gt;&lt;/a&gt; at the &lt;a href="http://www.dmacc.cc.ia.us/west/welcome.asp" target="_blank"&gt;&lt;strong&gt;DMACC West Campus&lt;/strong&gt;&lt;/a&gt;!&lt;/p&gt;  &lt;p&gt;Here's more info:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://iadnug.org"&gt;&lt;strong&gt;Iowa .NET&lt;/strong&gt;&lt;/a&gt; and &lt;a href="http://crineta.org"&gt;&lt;strong&gt;CRIneta.org&lt;/strong&gt;&lt;/a&gt; are hosting the second code camp to Iowa on November 8, 2008 at &lt;a href="http://www.dmacc.cc.ia.us/west/"&gt;DMACC West&lt;/a&gt; in&lt;a href="http://www.dmacc.cc.ia.us/west/map.asp"&gt;West Des Moines&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;You might be asking, &lt;strong&gt;what's a code camp&lt;/strong&gt;? Well, here are some of the basic ideas:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Community driven &lt;/li&gt;    &lt;li&gt;High quality &lt;/li&gt;    &lt;li&gt;Its for and by developers &lt;/li&gt;    &lt;li&gt;No cost (for attendees) &lt;/li&gt;    &lt;li&gt;All about code, not PowerPoint presentations &lt;/li&gt;    &lt;li&gt;Source code and slides must be available to share with people who attend &lt;/li&gt;    &lt;li&gt;Never during work hours - usually on Saturday&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;What a code camp is &lt;strong&gt;not&lt;/strong&gt;:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Corporate product placement &lt;/li&gt;    &lt;li&gt;Marketing&lt;/li&gt;    &lt;li&gt;Powerpoint Centric&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Again, if you're free on Saturday, come check us out!&lt;/p&gt;&lt;img src="http://blog.lozanotek.com/aggbug/20097.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=McUfZz3qL0U:5Z6SjsMhht0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=McUfZz3qL0U:5Z6SjsMhht0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=McUfZz3qL0U:5Z6SjsMhht0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=McUfZz3qL0U:5Z6SjsMhht0:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=McUfZz3qL0U:5Z6SjsMhht0:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=McUfZz3qL0U:5Z6SjsMhht0:wF9xT3WuBAs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=McUfZz3qL0U:5Z6SjsMhht0:wF9xT3WuBAs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=McUfZz3qL0U:5Z6SjsMhht0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=McUfZz3qL0U:5Z6SjsMhht0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=McUfZz3qL0U:5Z6SjsMhht0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=McUfZz3qL0U:5Z6SjsMhht0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=McUfZz3qL0U:5Z6SjsMhht0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=McUfZz3qL0U:5Z6SjsMhht0:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=McUfZz3qL0U:5Z6SjsMhht0:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/20097.aspx</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/commentRss/20097.aspx</wfw:commentRss><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://blog.lozanotek.com/services/trackbacks/20097.aspx</trackback:ping><feedburner:origLink>http://blog.lozanotek.com/archive/2008/11/04/Iowa_Code_Camp_v2.aspx</feedburner:origLink></item><item><title>Not At PDC - Presentation Content</title><link>http://feedproxy.google.com/~r/lozanotek/~3/OUJ90sAGIzE/Not_At_PDC_-_Presentation_Content.aspx</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Javier G. Lozano</dc:creator><pubDate>Sat, 01 Nov 2008 19:58:36 PDT</pubDate><guid isPermaLink="false">http://blog.lozanotek.com/archive/2008/11/01/Not_At_PDC_-_Presentation_Content.aspx</guid><description>&lt;p&gt;Well, better late than never!&lt;/p&gt;  &lt;p&gt;For those of you that attended my two talks for &lt;a href="http://notatpdc.com/" target="_blank"&gt;&lt;strong&gt;Not At PDC&lt;/strong&gt;&lt;/a&gt;, a big thanks!  My apologies for rushing some of the content, but I under estimated my ability to squeeze the content into an hour!&lt;/p&gt;  &lt;p&gt;For those of you wondering about where the content lives, please go to: &lt;a title="http://jglozano.googlecode.com/svn/trunk/presentations" href="http://jglozano.googlecode.com/svn/trunk/presentations"&gt;&lt;strong&gt;http://jglozano.googlecode.com/svn/trunk/presentations&lt;/strong&gt;&lt;/a&gt;.  Again, you'll need to use &lt;a href="http://tortoisesvn.tigris.org/" target="_blank"&gt;&lt;strong&gt;TortoiseSVN&lt;/strong&gt;&lt;/a&gt; to check out the content.&lt;/p&gt;  &lt;p&gt;If you have any questions,comments, ideas or would like to talk about software in general, please feel free to contact me!&lt;/p&gt;&lt;img src="http://blog.lozanotek.com/aggbug/20096.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=OUJ90sAGIzE:X6XGuqBLi58:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=OUJ90sAGIzE:X6XGuqBLi58:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=OUJ90sAGIzE:X6XGuqBLi58:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=OUJ90sAGIzE:X6XGuqBLi58:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=OUJ90sAGIzE:X6XGuqBLi58:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=OUJ90sAGIzE:X6XGuqBLi58:wF9xT3WuBAs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=OUJ90sAGIzE:X6XGuqBLi58:wF9xT3WuBAs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=OUJ90sAGIzE:X6XGuqBLi58:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=OUJ90sAGIzE:X6XGuqBLi58:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=OUJ90sAGIzE:X6XGuqBLi58:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=OUJ90sAGIzE:X6XGuqBLi58:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=OUJ90sAGIzE:X6XGuqBLi58:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=OUJ90sAGIzE:X6XGuqBLi58:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=OUJ90sAGIzE:X6XGuqBLi58:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/20096.aspx</wfw:comment><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/commentRss/20096.aspx</wfw:commentRss><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://blog.lozanotek.com/services/trackbacks/20096.aspx</trackback:ping><feedburner:origLink>http://blog.lozanotek.com/archive/2008/11/01/Not_At_PDC_-_Presentation_Content.aspx</feedburner:origLink></item><item><title>Not At PDC</title><link>http://feedproxy.google.com/~r/lozanotek/~3/Wmv-f6EGaAA/Not_At_PDC.aspx</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Javier G. Lozano</dc:creator><pubDate>Sun, 26 Oct 2008 18:33:56 PDT</pubDate><guid isPermaLink="false">http://blog.lozanotek.com/archive/2008/10/26/Not_At_PDC.aspx</guid><description>Can't make it to the &lt;strong&gt;&lt;a href="http://www.microsoftpdc.com/"&gt;Professional Developer's Conference (PDC)&lt;/a&gt;&lt;/strong&gt; in LA?  Well, we've started a new group called NotAtPDC!  &lt;strong&gt;&lt;a href="http://professionalaspnet.com/"&gt;Chris Love&lt;/a&gt;&lt;/strong&gt; is the genious behind this movement! Here's some info from him:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt; We are going to have live meeting sessions, links to Blogs, Podcasts and any other .NET related content featured this week. Right now we are trying to get things organized better. We will have a site live in the morning. If you want to schedule a session or something DM &lt;a href="http://twitter.com/NotAtPDC" target="_blank"&gt;http://twitter.com/NotAtPDC&lt;/a&gt;.&lt;br /&gt;
&lt;/blockquote&gt;
&lt;p&gt;Chris is in the process on getting a website up to aggregate some of the content that the community is sharing. If you want to join the facebook group, go &lt;a target="_blank" href="http://www.facebook.com/group.php?gid=98022630003"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you're interested in this movement, come join the fun!&lt;/p&gt;&lt;img src="http://blog.lozanotek.com/aggbug/20095.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=Wmv-f6EGaAA:0UjVMYzHzjo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=Wmv-f6EGaAA:0UjVMYzHzjo:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=Wmv-f6EGaAA:0UjVMYzHzjo:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=Wmv-f6EGaAA:0UjVMYzHzjo:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=Wmv-f6EGaAA:0UjVMYzHzjo:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=Wmv-f6EGaAA:0UjVMYzHzjo:wF9xT3WuBAs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=Wmv-f6EGaAA:0UjVMYzHzjo:wF9xT3WuBAs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=Wmv-f6EGaAA:0UjVMYzHzjo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=Wmv-f6EGaAA:0UjVMYzHzjo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=Wmv-f6EGaAA:0UjVMYzHzjo:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=Wmv-f6EGaAA:0UjVMYzHzjo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=Wmv-f6EGaAA:0UjVMYzHzjo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=Wmv-f6EGaAA:0UjVMYzHzjo:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=Wmv-f6EGaAA:0UjVMYzHzjo:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/20095.aspx</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/commentRss/20095.aspx</wfw:commentRss><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://blog.lozanotek.com/services/trackbacks/20095.aspx</trackback:ping><feedburner:origLink>http://blog.lozanotek.com/archive/2008/10/26/Not_At_PDC.aspx</feedburner:origLink></item><item><title>Visual Studio Templates for MVC Views without Codebehind Files</title><link>http://feedproxy.google.com/~r/lozanotek/~3/DaLZvaOogJ0/Visual_Studio_Templates_for_MVC_Views_without_Codebehind_Files.aspx</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Javier G. Lozano</dc:creator><pubDate>Mon, 20 Oct 2008 14:23:51 PDT</pubDate><guid isPermaLink="false">http://blog.lozanotek.com/archive/2008/10/20/Visual_Studio_Templates_for_MVC_Views_without_Codebehind_Files.aspx</guid><description>&lt;p&gt;For those of you doing MVC out there you've probably noticed that every time you create a new view within your project, the template that VS uses creates a both a .aspx.cs and a .aspx.designer.cs file for your view.  A group of mvps/insiders have been talking about this topic for a bit.  A small group of us feel that providing this file is a temptation that can lead to world of hurt.&lt;/p&gt;  &lt;p&gt;To us, the this code behind file is a honeypot asking for bad practices.  The fact that you have a codebehind file and that you can put ANY type of code within it, easily negate the fact that you're using MVC.  Why?  A developer can easily put non-view code within this file, after all it is the codebehind for a webform.  Non-view specific code can range from db connections, LINQ queries, or even worse web service calls.  Fellow Insider/MVP Steven Smith had an excellent blog post entitled, &lt;a href="http://stevesmithblog.com/blog/codebehind-files-in-asp-net-mvc-are-evil/" target="_blank" rel="tag"&gt;&lt;strong&gt;Codebehind Files in ASP.NET MVC Are Evil&lt;/strong&gt;&lt;/a&gt;.  &lt;/p&gt;  &lt;p&gt;So Rule of Thumb #1 for &lt;strong&gt;&lt;a title="" href="http://www.asp.net" target="_blank"&gt;ASP.NET&lt;/a&gt; MVC, DO NOT USE COBEHIND FILES IF YOU'RE USING THE WEBFORM VIEW ENGINE&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Having said that, you'll need tooling support to prevent you from going into these wicked ways.  So, what I've taken the liberty to change the ItemTemplates that ship with MVC Beta 1 and changed them to prevent the creation of a code behind for both Views and Master pages.  To get these templates, go to: &lt;a href="http://jglozano.googlecode.com/svn/trunk/downloads/mvc_templates" target="_blank" rel="tag"&gt;&lt;strong&gt;http://jglozano.googlecode.com/svn/trunk/downloads/mvc_templates&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Here's what you need to do:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Make sure that VS is not loaded&lt;/li&gt;    &lt;li&gt;For the item template zip files&lt;/li&gt;    &lt;ul&gt;     &lt;ul&gt;       &lt;li&gt;&lt;strong&gt;MvcViewContentPageItemTemplateBeta.cs.zip&lt;/strong&gt;&lt;/li&gt;        &lt;li&gt;&lt;strong&gt;MvcViewMasterPageItemTemplateBeta.cs.zip&lt;/strong&gt;&lt;/li&gt;        &lt;li&gt;&lt;strong&gt;MvcViewPageItemTemplate.cs.zip&lt;/strong&gt;&lt;/li&gt;        &lt;li&gt;&lt;strong&gt;MvcViewPageItemTemplateBeta.cs.zip&lt;/strong&gt;&lt;/li&gt;     &lt;/ul&gt;      &lt;li&gt;Copy these files to these locations:&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;&lt;strong&gt;C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ItemTemplates\CSharp\Web\MVC\103&lt;/strong&gt;&lt;/li&gt;        &lt;li&gt;&lt;strong&gt;C:\Program Files\Microsoft ASP.NET\ASP.NET MVC Beta\Temp&lt;/strong&gt;&lt;/li&gt;     &lt;/ul&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;For the &lt;strong&gt;itemtemplatecache_folders.zip&lt;/strong&gt; file&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Extract the contents (should be 4 folders of the previous 4 item template zip files).&lt;/li&gt;      &lt;li&gt;Copy these folders to:&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;&lt;strong&gt;C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ItemTemplatesCache\CSharp\Web\MVC\1033&lt;/strong&gt;&lt;/li&gt;     &lt;/ul&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;After you've completed these steps you can get a codebehind-less MVC View within your project from these dialogs:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.lozanotek.com/images/blog_lozanotek_com/WindowsLiveWriter/VisualStudioTemplatesforMVCViewswithoutC_E664/image_2.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="317" alt="image" src="http://blog.lozanotek.com/images/blog_lozanotek_com/WindowsLiveWriter/VisualStudioTemplatesforMVCViewswithoutC_E664/image_thumb.png" width="411" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;New Add View Dialog&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.lozanotek.com/images/blog_lozanotek_com/WindowsLiveWriter/VisualStudioTemplatesforMVCViewswithoutC_E664/image_4.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="486" alt="image" src="http://blog.lozanotek.com/images/blog_lozanotek_com/WindowsLiveWriter/VisualStudioTemplatesforMVCViewswithoutC_E664/image_thumb_1.png" width="808" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Add New Item Dialog&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;If you have any questions or need help installing these new templates, please feel free to leave a comment!&lt;/p&gt;&lt;img src="http://blog.lozanotek.com/aggbug/20094.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=DaLZvaOogJ0:sF5uDG55dYE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=DaLZvaOogJ0:sF5uDG55dYE:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=DaLZvaOogJ0:sF5uDG55dYE:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=DaLZvaOogJ0:sF5uDG55dYE:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=DaLZvaOogJ0:sF5uDG55dYE:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=DaLZvaOogJ0:sF5uDG55dYE:wF9xT3WuBAs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=DaLZvaOogJ0:sF5uDG55dYE:wF9xT3WuBAs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=DaLZvaOogJ0:sF5uDG55dYE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=DaLZvaOogJ0:sF5uDG55dYE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=DaLZvaOogJ0:sF5uDG55dYE:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=DaLZvaOogJ0:sF5uDG55dYE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=DaLZvaOogJ0:sF5uDG55dYE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=DaLZvaOogJ0:sF5uDG55dYE:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=DaLZvaOogJ0:sF5uDG55dYE:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/20094.aspx</wfw:comment><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">9</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/commentRss/20094.aspx</wfw:commentRss><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://blog.lozanotek.com/services/trackbacks/20094.aspx</trackback:ping><feedburner:origLink>http://blog.lozanotek.com/archive/2008/10/20/Visual_Studio_Templates_for_MVC_Views_without_Codebehind_Files.aspx</feedburner:origLink></item><item><title>Thanks, VSLive Las Vegas and HDC Omaha '08!</title><link>http://feedproxy.google.com/~r/lozanotek/~3/DjrfDmbDCeY/Thanks_VSLive_Las_Vegas_and_HDC_08.aspx</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Javier G. Lozano</dc:creator><pubDate>Sun, 19 Oct 2008 17:05:59 PDT</pubDate><guid isPermaLink="false">http://blog.lozanotek.com/archive/2008/10/19/Thanks_VSLive_Las_Vegas_and_HDC_08.aspx</guid><description>&lt;p&gt;For those of you that attended one or both at of my talks at &lt;strong&gt;&lt;a href="http://vslive.com/2008/lasvegas/"&gt;VSLive Las Vegas&lt;/a&gt;&lt;/strong&gt; or &lt;strong&gt;&lt;a href="http://www.heartlanddc.com/Omaha/"&gt;HDC Omaha 2008&lt;/a&gt;&lt;/strong&gt;, I just want to say, thank you!  And for the VSLive folks, I do apologize for cutting my open source tools talk short by 10 minutes.  I had to jet out of the Mirage so I can make the plane back to the Midwest!&lt;/p&gt;
&lt;p&gt;As promised, I upgraded my code to run with Beta 1 of the &lt;a title="" href="http://www.asp.net" target="_blank"&gt;ASP.NET&lt;/a&gt; MVC Framework!  So, if you want to get the latest bits go to: &lt;a title="http://jglozano.googlecode.com/svn/trunk/presentations" href="http://jglozano.googlecode.com/svn/trunk/presentations" target="_blank" rel="tag"&gt;&lt;strong&gt;http://jglozano.googlecode.com/svn/trunk/presentations&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You will find my slide deck as well as all the necessary pieces to run my demos.  Please note that for the YABE and NHibernate demo you need SQL Server.&lt;/p&gt;
&lt;p&gt;Again, thanks for taking the time to come listen to me.  If you have any questions for concerns don't hesitate to contact me: &lt;strong&gt;javier-at-lozanotek-dot-com&lt;/strong&gt; or &lt;a href="http://twitter.com/lozanotek"&gt;&lt;strong&gt;http://twitter.com/lozanotek&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blog.lozanotek.com/aggbug/20093.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=DjrfDmbDCeY:yZ9AJ9PKTso:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=DjrfDmbDCeY:yZ9AJ9PKTso:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=DjrfDmbDCeY:yZ9AJ9PKTso:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=DjrfDmbDCeY:yZ9AJ9PKTso:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=DjrfDmbDCeY:yZ9AJ9PKTso:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=DjrfDmbDCeY:yZ9AJ9PKTso:wF9xT3WuBAs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=DjrfDmbDCeY:yZ9AJ9PKTso:wF9xT3WuBAs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=DjrfDmbDCeY:yZ9AJ9PKTso:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=DjrfDmbDCeY:yZ9AJ9PKTso:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=DjrfDmbDCeY:yZ9AJ9PKTso:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=DjrfDmbDCeY:yZ9AJ9PKTso:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=DjrfDmbDCeY:yZ9AJ9PKTso:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=DjrfDmbDCeY:yZ9AJ9PKTso:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=DjrfDmbDCeY:yZ9AJ9PKTso:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/20093.aspx</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/commentRss/20093.aspx</wfw:commentRss><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://blog.lozanotek.com/services/trackbacks/20093.aspx</trackback:ping><feedburner:origLink>http://blog.lozanotek.com/archive/2008/10/19/Thanks_VSLive_Las_Vegas_and_HDC_08.aspx</feedburner:origLink></item><item><title>VSLive! NY and HDC Minneapolis Talks</title><link>http://feedproxy.google.com/~r/lozanotek/~3/w43sDn3rDx0/VSLive_NY_and_HDC_Minneapolis_Talks.aspx</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Javier G. Lozano</dc:creator><pubDate>Thu, 02 Oct 2008 18:05:10 PDT</pubDate><guid isPermaLink="false">http://blog.lozanotek.com/archive/2008/10/02/VSLive_NY_and_HDC_Minneapolis_Talks.aspx</guid><description>&lt;p&gt;Yeah, I know...been really, really quiet here.  Reason?  Busy with work, &lt;em&gt;work&lt;/em&gt; and life.  Going to try to get back into the "frequent blogging" mood, I promise!!&lt;/p&gt;  &lt;p&gt;Any way, for those of you that attended my talks at &lt;a href="http://vslive.com/2008/newyork/" target="_blank"&gt;&lt;strong&gt;VSLive NY!&lt;/strong&gt;&lt;/a&gt; and &lt;a href="http://www.heartlanddc.com/minneapolis/" target="_blank"&gt;&lt;strong&gt;HDC Minneapolis&lt;/strong&gt;&lt;/a&gt;, I just want to say, "Thanks!!"  The code as been updated slightly to help clarify some of the interactions between the different projects (and logic).  So, go check out the latest bits at &lt;em&gt;&lt;/em&gt;&lt;a href="http://jglozano.googlecode.com/svn/trunk/" target="_blank" rel="tag"&gt;&lt;strong&gt;http://jglozano.googlecode.com/svn/trunk/&lt;/strong&gt;&lt;/a&gt;  Please note that the PPT deck is also in that location for you guys to get.&lt;/p&gt;  &lt;p&gt;Again, thanks for coming to the talks and I hope you enjoyed the material!&lt;/p&gt;&lt;img src="http://blog.lozanotek.com/aggbug/20092.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=w43sDn3rDx0:1JrCaqYcWN4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=w43sDn3rDx0:1JrCaqYcWN4:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=w43sDn3rDx0:1JrCaqYcWN4:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=w43sDn3rDx0:1JrCaqYcWN4:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=w43sDn3rDx0:1JrCaqYcWN4:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=w43sDn3rDx0:1JrCaqYcWN4:wF9xT3WuBAs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=w43sDn3rDx0:1JrCaqYcWN4:wF9xT3WuBAs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=w43sDn3rDx0:1JrCaqYcWN4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=w43sDn3rDx0:1JrCaqYcWN4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=w43sDn3rDx0:1JrCaqYcWN4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=w43sDn3rDx0:1JrCaqYcWN4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=w43sDn3rDx0:1JrCaqYcWN4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=w43sDn3rDx0:1JrCaqYcWN4:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=w43sDn3rDx0:1JrCaqYcWN4:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/20092.aspx</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/commentRss/20092.aspx</wfw:commentRss><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://blog.lozanotek.com/services/trackbacks/20092.aspx</trackback:ping><feedburner:origLink>http://blog.lozanotek.com/archive/2008/10/02/VSLive_NY_and_HDC_Minneapolis_Talks.aspx</feedburner:origLink></item><item><title>ASPInsiders Summit 2008</title><link>http://feedproxy.google.com/~r/lozanotek/~3/ppC3zDwJJ4E/ASPInsiders_Summit_2008.aspx</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Javier G. Lozano</dc:creator><pubDate>Sat, 26 Jul 2008 16:18:30 PDT</pubDate><guid isPermaLink="false">http://blog.lozanotek.com/archive/2008/07/26/ASPInsiders_Summit_2008.aspx</guid><description>&lt;p&gt;Last week I attended the &lt;a href="http://aspinsiders.com/" target="_blank" rel="tag"&gt;&lt;strong&gt;ASPInsiders&lt;/strong&gt;&lt;/a&gt; Summit at the &lt;a href="http://snurl.com/35mh0" target="_blank" rel="tag"&gt;&lt;strong&gt;MS main campus in Redmond&lt;/strong&gt;&lt;/a&gt;.  I must say that by Wednesday afternoon my head was ready to explode with the amount of content that I, along with another Insiders, parsed through!!  However, it was a great opportunity to provide feedback the teams that make up the &lt;a title="" href="http://www.asp.net" target="_blank"&gt;ASP.NET&lt;/a&gt; Team.&lt;/p&gt;  &lt;p&gt;Over all, it was a great way to experience the process in which MS takes customers feedback and prioritizes features for their products.  Sure, we all build products, but I must say that we don't do it at the scale that Microsoft does.  The impressive thing about this is the size of the team!  Now, I don't know the exact number but from the looks of it from the people coming in and out, the team is about ~30 people.  Pretty impressive number for such an awesome platform!&lt;/p&gt;  &lt;p&gt;Now, I can't say much about what was discussed (since most of it is under NDA), but I can say this: &lt;strong&gt;The team is very passionate about delivering a great product and customer experience.&lt;/strong&gt;  Every time you spoke with a member of the team, they were very attentive and always asked the "What would you like out of the product?" and "How would you do it?"...pretty awesome.&lt;/p&gt;  &lt;p&gt;I must say that the highlights of the trip was spending time with the &lt;a href="http://www.asp.net/mvc/" target="_blank" rel="tag"&gt;&lt;strong&gt;ASP.NET MVC&lt;/strong&gt;&lt;/a&gt; team (both framework and tooling) and get to know them both as individuals and peers.  Sure we talked shop, and lots and lots of it, but it was nice to hear about their personal lives for a change.  Now, the one thing I will say (over a series of more blog posts) is that I was enlightened on the perception that over ASP.NET developers have about the new MVC framework.  The main thing I hear from the group was "explain to me why/how..."  Now, all of these are valid questions anybody exploring a new technology/approach should always ask.  The interesting thing about these lines of questions is that it shows that we've (those proponents of MVC) have not been doing a good enough job explaining the &lt;a href="http://blog.lozanotek.com/archive/2008/01/24/The_Zen_of_ASP.NET_MVC.aspx" target="_blank" rel="tag"&gt;&lt;strong&gt;zen of asp.net mvc&lt;/strong&gt;&lt;/a&gt;.  From my point of view, this is totally our fault for focusing on the specifics rather than the abstractions.  This is something that I know was realized by the MVC Mafia (thanks &lt;a href="http://netcave.org/" target="_blank" rel="tag"&gt;&lt;strong&gt;Alan Stevens&lt;/strong&gt;&lt;/a&gt; for coming up the name!) and that we're working on changing.  So stay tuned!&lt;/p&gt;  &lt;p&gt;Any way, back to the post...&lt;/p&gt;  &lt;p&gt;As I said, it was a real pleasure for me to be a part of this summit.  I met a lot really cool people and I must say that I can't wait until Insiders09.  Also, I would like to thank those involved in putting it together, particularly &lt;a href="http://www.mostlylucid.net/" target="_blank" rel="tag"&gt;&lt;strong&gt;Scott Galloway&lt;/strong&gt;&lt;/a&gt;!  You guys just rocked the event!!&lt;/p&gt;&lt;img src="http://blog.lozanotek.com/aggbug/20091.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=ppC3zDwJJ4E:eG-S6OEwOnI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=ppC3zDwJJ4E:eG-S6OEwOnI:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=ppC3zDwJJ4E:eG-S6OEwOnI:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=ppC3zDwJJ4E:eG-S6OEwOnI:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=ppC3zDwJJ4E:eG-S6OEwOnI:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=ppC3zDwJJ4E:eG-S6OEwOnI:wF9xT3WuBAs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=ppC3zDwJJ4E:eG-S6OEwOnI:wF9xT3WuBAs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=ppC3zDwJJ4E:eG-S6OEwOnI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=ppC3zDwJJ4E:eG-S6OEwOnI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=ppC3zDwJJ4E:eG-S6OEwOnI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=ppC3zDwJJ4E:eG-S6OEwOnI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=ppC3zDwJJ4E:eG-S6OEwOnI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=ppC3zDwJJ4E:eG-S6OEwOnI:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=ppC3zDwJJ4E:eG-S6OEwOnI:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/20091.aspx</wfw:comment><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/commentRss/20091.aspx</wfw:commentRss><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://blog.lozanotek.com/services/trackbacks/20091.aspx</trackback:ping><feedburner:origLink>http://blog.lozanotek.com/archive/2008/07/26/ASPInsiders_Summit_2008.aspx</feedburner:origLink></item><item><title>267F Days Old</title><link>http://feedproxy.google.com/~r/lozanotek/~3/QXXMhbVTp5g/267F_Days_Old.aspx</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Javier G. Lozano</dc:creator><pubDate>Fri, 04 Jul 2008 14:00:41 PDT</pubDate><guid isPermaLink="false">http://blog.lozanotek.com/archive/2008/07/04/267F_Days_Old.aspx</guid><description>&lt;p&gt;Wow, I can't believe I've added another 16D days to the stack...although at times it feels like 1DF1.  For you geeks out there, here's another representation of the day count:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Octal - 23177&lt;/li&gt;    &lt;li&gt;Octal (byte) - 177&lt;/li&gt;    &lt;li&gt;Binary - 10011001111111&lt;/li&gt;    &lt;li&gt;Binary (byte) - 1111111&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Well, now thinking about it...I'm actually only 267E days old since the day is not over yet.&lt;/p&gt;  &lt;p&gt;Anyway, here's to good times (and hopefully more to come)!&lt;/p&gt;&lt;img src="http://blog.lozanotek.com/aggbug/20090.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=QXXMhbVTp5g:FVRoSJGNUxw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=QXXMhbVTp5g:FVRoSJGNUxw:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=QXXMhbVTp5g:FVRoSJGNUxw:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=QXXMhbVTp5g:FVRoSJGNUxw:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=QXXMhbVTp5g:FVRoSJGNUxw:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=QXXMhbVTp5g:FVRoSJGNUxw:wF9xT3WuBAs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=QXXMhbVTp5g:FVRoSJGNUxw:wF9xT3WuBAs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=QXXMhbVTp5g:FVRoSJGNUxw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=QXXMhbVTp5g:FVRoSJGNUxw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=QXXMhbVTp5g:FVRoSJGNUxw:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=QXXMhbVTp5g:FVRoSJGNUxw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=QXXMhbVTp5g:FVRoSJGNUxw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=QXXMhbVTp5g:FVRoSJGNUxw:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=QXXMhbVTp5g:FVRoSJGNUxw:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/20090.aspx</wfw:comment><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/commentRss/20090.aspx</wfw:commentRss><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://blog.lozanotek.com/services/trackbacks/20090.aspx</trackback:ping><feedburner:origLink>http://blog.lozanotek.com/archive/2008/07/04/267F_Days_Old.aspx</feedburner:origLink></item><item><title>How did you get started in software development?</title><link>http://feedproxy.google.com/~r/lozanotek/~3/xBYajbMqx4Y/How_did_you_get_started_in_software_development.aspx</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Javier G. Lozano</dc:creator><pubDate>Mon, 23 Jun 2008 14:06:02 PDT</pubDate><guid isPermaLink="false">http://blog.lozanotek.com/archive/2008/06/23/How_did_you_get_started_in_software_development.aspx</guid><description>&lt;p&gt;Well, &lt;a href="http://www.slickthought.net/post/2008/06/Software-Development-Meme.aspx" target="_blank"&gt;&lt;strong&gt;I was tagged by Jeff earlier&lt;/strong&gt;&lt;/a&gt; to talk about how I got started in software.  So, here's my stab at answering these questions...&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;How old were you when you started programming?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I was either 11/12 years old.  I got into it a little late since, well, I never had access to a computer when I was living in &lt;a href="http://en.wikipedia.org/wiki/Monterrey" target="_blank"&gt;&lt;strong&gt;Mexico&lt;/strong&gt;&lt;/a&gt;.  I knew what they were and I was intrigued by them, but to ask my parents to get me one was completely a ludicrous idea since they were 10x more expensive in Mexico.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What was your first language?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Integer_BASIC"&gt;&lt;strong&gt;Apple BASIC&lt;/strong&gt;&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/QBasic"&gt;&lt;strong&gt;QBASIC&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What was the first real program you wrote?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This answer all depends on how you define "real" program.  I wrote a pretty wicked "lemonade stand" game in Apple BASIC that would render the stand, a glass filling up with lemonade and the face of a happy customer.  I spent close to a month working on the "graphics" since I had draw them on a piece of paper with a grid to lay out the blocks that made up the images.  Oh the joyfulness of &lt;strong&gt;10 PRINT "DO YOU WANT TO BUY SOME LEMONADE?"&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The first "paid gig" was working on &lt;a href="http://en.wikipedia.org/wiki/VB4" target="_blank"&gt;&lt;strong&gt;VB4&lt;/strong&gt;&lt;/a&gt; code on &lt;a href="http://en.wikipedia.org/wiki/Win95" target="_blank"&gt;&lt;strong&gt;Win95&lt;/strong&gt;&lt;/a&gt; for a company that wrote software for utility companies.  The money I got paid there beat what I made on my paper route &lt;em&gt;BY FAR&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;If you knew then what you know now, would you have started programming?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Yes, totally.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;If there is one thing you learned along the way that you would tell new developers, what would it be?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Make sure you do things with passion.  Even in your darkest day during the job, passion the thing that keeps you motivated and going forward.  Everything else (architecture, designs, practices, etc) is superficial.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What's the most fun you've ever had ... programming?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;That's a though one 'cause there are so many different things that affect the "level of fun".  I would say that my most enjoyable times are either when a client or colleague has that "Eureka!" expression on their face when you work with them on a problem. That's always a sign that you've done your job correctly; specially when building business software.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Who am I calling out?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://developernotes.com" target="_blank"&gt;&lt;strong&gt;Nick Parker&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devlicio.us/blogs/derik_whittaker/" target="_blank"&gt;&lt;strong&gt;Derik Whittaker&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geekswithblogs.net/dlussier/Default.aspx" target="_blank"&gt;&lt;strong&gt;D'Arcy Lussier&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://subjunctive.wordpress.com/" target="_blank"&gt;&lt;strong&gt;Chris Sutton&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blog.lozanotek.com/aggbug/20089.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=xBYajbMqx4Y:or6OJFCYRQo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=xBYajbMqx4Y:or6OJFCYRQo:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=xBYajbMqx4Y:or6OJFCYRQo:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=xBYajbMqx4Y:or6OJFCYRQo:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=xBYajbMqx4Y:or6OJFCYRQo:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=xBYajbMqx4Y:or6OJFCYRQo:wF9xT3WuBAs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=xBYajbMqx4Y:or6OJFCYRQo:wF9xT3WuBAs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=xBYajbMqx4Y:or6OJFCYRQo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=xBYajbMqx4Y:or6OJFCYRQo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=xBYajbMqx4Y:or6OJFCYRQo:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=xBYajbMqx4Y:or6OJFCYRQo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=xBYajbMqx4Y:or6OJFCYRQo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=xBYajbMqx4Y:or6OJFCYRQo:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=xBYajbMqx4Y:or6OJFCYRQo:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/20089.aspx</wfw:comment><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/commentRss/20089.aspx</wfw:commentRss><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://blog.lozanotek.com/services/trackbacks/20089.aspx</trackback:ping><feedburner:origLink>http://blog.lozanotek.com/archive/2008/06/23/How_did_you_get_started_in_software_development.aspx</feedburner:origLink></item><item><title>IronRuby Runs Rails!</title><link>http://feedproxy.google.com/~r/lozanotek/~3/rSozWTixAa8/IronRuby_Runs_Rails.aspx</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Javier G. Lozano</dc:creator><pubDate>Wed, 28 May 2008 17:00:01 PDT</pubDate><guid isPermaLink="false">http://blog.lozanotek.com/archive/2008/05/28/IronRuby_Runs_Rails.aspx</guid><description>&lt;p&gt;Great job to the IronRuby team on getting &lt;a href="http://twitter.com/john_lam/statuses/822070470" target="_blank" rel="tag"&gt;&lt;strong&gt;this done&lt;/strong&gt;&lt;/a&gt;!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://twitter.com/john_lam/statuses/822070470"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="252" alt="IronRuby running unmodified Rails!" src="http://blog.lozanotek.com/images/blog_lozanotek_com/WindowsLiveWriter/IronRubyRunsRails_10B3B/ironruby_rails_3.png" width="662" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This just freakin' rocks!&lt;/p&gt;&lt;img src="http://blog.lozanotek.com/aggbug/20088.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=rSozWTixAa8:kIKxX9CRA_Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=rSozWTixAa8:kIKxX9CRA_Y:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=rSozWTixAa8:kIKxX9CRA_Y:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=rSozWTixAa8:kIKxX9CRA_Y:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=rSozWTixAa8:kIKxX9CRA_Y:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=rSozWTixAa8:kIKxX9CRA_Y:wF9xT3WuBAs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=rSozWTixAa8:kIKxX9CRA_Y:wF9xT3WuBAs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=rSozWTixAa8:kIKxX9CRA_Y:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=rSozWTixAa8:kIKxX9CRA_Y:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=rSozWTixAa8:kIKxX9CRA_Y:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=rSozWTixAa8:kIKxX9CRA_Y:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=rSozWTixAa8:kIKxX9CRA_Y:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=rSozWTixAa8:kIKxX9CRA_Y:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=rSozWTixAa8:kIKxX9CRA_Y:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/20088.aspx</wfw:comment><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">11</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/commentRss/20088.aspx</wfw:commentRss><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://blog.lozanotek.com/services/trackbacks/20088.aspx</trackback:ping><feedburner:origLink>http://blog.lozanotek.com/archive/2008/05/28/IronRuby_Runs_Rails.aspx</feedburner:origLink></item><item><title>Spaghetti Code Podcast - Ruby, RoR and ASP.NET MVC</title><link>http://feedproxy.google.com/~r/lozanotek/~3/wvttQa9lXPY/Spaghetti_Code_Podcast_-_Ruby_RoR_and_ASP.NET_MVC.aspx</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Javier G. Lozano</dc:creator><pubDate>Tue, 27 May 2008 19:00:52 PDT</pubDate><guid isPermaLink="false">http://blog.lozanotek.com/archive/2008/05/27/Spaghetti_Code_Podcast_-_Ruby_RoR_and_ASP.NET_MVC.aspx</guid><description>&lt;p&gt;A couple of weeks back, I recorded a podcast with, our community MS Developer Evangelist, &lt;a href="http://www.slickthought.net/"&gt;&lt;strong&gt;Jeff Brand&lt;/strong&gt;&lt;/a&gt; for his &lt;a href="http://www.slickthought.net/category/SpaghettiCode.aspx" rel="tag"&gt;&lt;strong&gt;Spaghetti Code series&lt;/strong&gt;&lt;/a&gt;.  I was informed by Jeff, today that he finally &lt;a href="http://www.slickthought.net/post/2008/05/Spaghetti-Code-Podcast---Javier-Lozano-on-Ruby2c-RoR-and-ASPNET-MVC.aspx" rel="tag"&gt;&lt;strong&gt;posted it&lt;/strong&gt;&lt;/a&gt;!  I had a heck of a time recording this podcast with Jeff, the hour just flew by!  If yo have the time, download the podcast and check it out!&lt;/p&gt;
&lt;p&gt;Links:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Direct Download - &lt;a href="http://slickthought.net/spaghetticode/podcast/spaghetticode-ruby.mp3"&gt;click here&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;Subscribe - &lt;a href="http://feeds.feedburner.com/SpaghettiCodePodcasts"&gt;click here&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;iTunes - &lt;a href="http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=276543733"&gt;click here&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://blog.lozanotek.com/aggbug/20087.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=wvttQa9lXPY:eVq0x6yY-KY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=wvttQa9lXPY:eVq0x6yY-KY:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=wvttQa9lXPY:eVq0x6yY-KY:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=wvttQa9lXPY:eVq0x6yY-KY:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=wvttQa9lXPY:eVq0x6yY-KY:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=wvttQa9lXPY:eVq0x6yY-KY:wF9xT3WuBAs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=wvttQa9lXPY:eVq0x6yY-KY:wF9xT3WuBAs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=wvttQa9lXPY:eVq0x6yY-KY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=wvttQa9lXPY:eVq0x6yY-KY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=wvttQa9lXPY:eVq0x6yY-KY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=wvttQa9lXPY:eVq0x6yY-KY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=wvttQa9lXPY:eVq0x6yY-KY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=wvttQa9lXPY:eVq0x6yY-KY:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=wvttQa9lXPY:eVq0x6yY-KY:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/20087.aspx</wfw:comment><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/commentRss/20087.aspx</wfw:commentRss><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://blog.lozanotek.com/services/trackbacks/20087.aspx</trackback:ping><feedburner:origLink>http://blog.lozanotek.com/archive/2008/05/27/Spaghetti_Code_Podcast_-_Ruby_RoR_and_ASP.NET_MVC.aspx</feedburner:origLink></item><item><title>New Wrox Title: ASP.NET 3.5 Programmer's Reference</title><link>http://feedproxy.google.com/~r/lozanotek/~3/oYOLkiGxunU/New_Wrox_Title_ASP.NET_3.5_Programmers_Reference.aspx</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Javier G. Lozano</dc:creator><pubDate>Tue, 13 May 2008 21:21:23 PDT</pubDate><guid isPermaLink="false">http://blog.lozanotek.com/archive/2008/05/13/New_Wrox_Title_ASP.NET_3.5_Programmers_Reference.aspx</guid><description>&lt;p&gt;So, here's a little shameless self plug for a book that &lt;a title="Bryan Sampica's blog" href="http://weblogs.asp.net/bryansampica/" rel="tag"&gt;&lt;strong&gt;Bryan Sampica&lt;/strong&gt;&lt;/a&gt; and I are writing...also, I'm using this blog post as a warm up for my writing this evening!&lt;/p&gt;  &lt;p&gt;Yes, like I just mentioned, I'm co-authoring a book for &lt;a href="http://www.wrox.com" rel="tag"&gt;&lt;strong&gt;Wrox&lt;/strong&gt;&lt;/a&gt; with Bryan entitled, &lt;strong&gt;&lt;a title="" href="http://www.asp.net" target="_blank"&gt;ASP.NET&lt;/a&gt; 3.5 Programmer's Reference&lt;/strong&gt;.  The purpose of the book is to get you the novice/beginner introduced to the features of ASP.NET 3.5, and hopefully teach you a few &lt;em&gt;&lt;strike&gt;tricks&lt;/strike&gt; &lt;/em&gt;things along the way.  The book is due out in November, so that means that my summer (evenings) is pretty much booked up. &lt;em&gt; &lt;/em&gt;I must confess that Bryan is writing more than half (3-4 chapters more) of this 36 chapter venture.&lt;/p&gt;  &lt;p&gt;So at this point, you might be wondering, why are you writing a book?  Well, I figured it might be fun and the mean time, I can help Bryan out with the title.  That's pretty much it!  I've always wanted to experience the writing of a book, so when Bryan presented this opportunity to me, I felt I was up to the challenge.&lt;/p&gt;  &lt;p&gt;To help me manage the writing process, I've setup a project at &lt;a href="http://unfuddle.com" rel="tag"&gt;&lt;strong&gt;unfuddle&lt;/strong&gt;&lt;/a&gt; so I can keep track of milestones, tasks and, of course, source code.&lt;/p&gt;  &lt;p&gt;I will keep blogging about the progress of the book and let you guys know what sort of things I run into!  Stay tuned!&lt;/p&gt;&lt;img src="http://blog.lozanotek.com/aggbug/20086.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=oYOLkiGxunU:2GvEV0jbxJo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=oYOLkiGxunU:2GvEV0jbxJo:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=oYOLkiGxunU:2GvEV0jbxJo:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=oYOLkiGxunU:2GvEV0jbxJo:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=oYOLkiGxunU:2GvEV0jbxJo:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=oYOLkiGxunU:2GvEV0jbxJo:wF9xT3WuBAs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=oYOLkiGxunU:2GvEV0jbxJo:wF9xT3WuBAs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=oYOLkiGxunU:2GvEV0jbxJo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=oYOLkiGxunU:2GvEV0jbxJo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=oYOLkiGxunU:2GvEV0jbxJo:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=oYOLkiGxunU:2GvEV0jbxJo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=oYOLkiGxunU:2GvEV0jbxJo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=oYOLkiGxunU:2GvEV0jbxJo:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=oYOLkiGxunU:2GvEV0jbxJo:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/20086.aspx</wfw:comment><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/commentRss/20086.aspx</wfw:commentRss><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://blog.lozanotek.com/services/trackbacks/20086.aspx</trackback:ping><feedburner:origLink>http://blog.lozanotek.com/archive/2008/05/13/New_Wrox_Title_ASP.NET_3.5_Programmers_Reference.aspx</feedburner:origLink></item><item><title>How do we define community?</title><link>http://feedproxy.google.com/~r/lozanotek/~3/qrwonXtErSg/How_do_we_define_community.aspx</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Javier G. Lozano</dc:creator><pubDate>Mon, 21 Apr 2008 17:28:32 PDT</pubDate><guid isPermaLink="false">http://blog.lozanotek.com/archive/2008/04/21/How_do_we_define_community.aspx</guid><description>&lt;p&gt;During lunch on Tuesday of this past week, &lt;a href="http://www.hanselman.com/blog" rel="tag"&gt;&lt;strong&gt;ScottHa&lt;/strong&gt;&lt;/a&gt; raised an interesting discussion point by saying that he rarely sees MVPs that are enterprisie ... by that, MVPs that actually work for (day to day) for an enterprise).  Granted, he used to be one himself back when he worked for &lt;a href="http://www.corillian.com/" rel="tag"&gt;&lt;strong&gt;Corillian&lt;/strong&gt;&lt;/a&gt;.  But as we looked around the group you could see that we were all trying to recollect if we knew of any other MVPs that are enterprisie.  Sadly, we didn't.&lt;/p&gt;  &lt;p&gt;Now, the point of that discussion was not say that people in the enterprise cannot be MVPs, it is more to find out the reasons why there isn't a community of enterprisie developers.  We started to talk about some reasons as why people wouldn't/couldn't be members of a community.  Here's an example of these reasons:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Not having too much free time -- people do have lives outside work&lt;/li&gt;    &lt;li&gt;Shutting off when the bell rings -- again, people do have lives outside work and IT&lt;/li&gt;    &lt;li&gt;Not caring -- people go to work to just collect a paycheck&lt;/li&gt;    &lt;li&gt;No valid channels to provide support/feedback -- do the forces behind the enterprise care about talking with other enterprises?&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;We explored some of these (and others) in somewhat detail to see if we could get a sense of the problem.  Later that evening during our product dinner, I posed the same question to my members of our table to see if we could get a different perspective.  &lt;/p&gt;  &lt;p&gt;So now, I ask you, my three readers, are there channels or ways to reach to people in the enterprise?  If so, is there a problem with providing greater reach?  And if not, how can we create such channels?&lt;/p&gt;  &lt;p&gt;If you work in the enterprise, I would love to hear your thoughts on this!&lt;/p&gt;&lt;img src="http://blog.lozanotek.com/aggbug/20085.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=qrwonXtErSg:Tr68XJ2ApBI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=qrwonXtErSg:Tr68XJ2ApBI:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=qrwonXtErSg:Tr68XJ2ApBI:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=qrwonXtErSg:Tr68XJ2ApBI:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=qrwonXtErSg:Tr68XJ2ApBI:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=qrwonXtErSg:Tr68XJ2ApBI:wF9xT3WuBAs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=qrwonXtErSg:Tr68XJ2ApBI:wF9xT3WuBAs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=qrwonXtErSg:Tr68XJ2ApBI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=qrwonXtErSg:Tr68XJ2ApBI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=qrwonXtErSg:Tr68XJ2ApBI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=qrwonXtErSg:Tr68XJ2ApBI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=qrwonXtErSg:Tr68XJ2ApBI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=qrwonXtErSg:Tr68XJ2ApBI:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=qrwonXtErSg:Tr68XJ2ApBI:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/20085.aspx</wfw:comment><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">11</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/commentRss/20085.aspx</wfw:commentRss><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://blog.lozanotek.com/services/trackbacks/20085.aspx</trackback:ping><feedburner:origLink>http://blog.lozanotek.com/archive/2008/04/21/How_do_we_define_community.aspx</feedburner:origLink></item><item><title>MVP Summit Highlights</title><link>http://feedproxy.google.com/~r/lozanotek/~3/7DV3WmYPe1I/MVP_Summit_Highlights.aspx</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Javier G. Lozano</dc:creator><pubDate>Sun, 20 Apr 2008 09:08:52 PDT</pubDate><guid isPermaLink="false">http://blog.lozanotek.com/archive/2008/04/20/MVP_Summit_Highlights.aspx</guid><description>&lt;p&gt;Well, I had a great time meeting old friends and making new ones at this year's summit.  There were so many things going on and so many people to see and talk to, that it's next to impossible to consume everything at once!  So, to keep things simple, here are of the highlights per day:&lt;/p&gt;  &lt;h4&gt;Sunday&lt;/h4&gt;  &lt;p&gt;Although, I was not there until late (way late), it was a lot fun hanging around the Westin's lobby and talk about how a chicken takes a dookie.  Yeah, that's right.  &lt;a href="http://keithelder.net/blog/"&gt;&lt;strong&gt;Keith Elder&lt;/strong&gt;&lt;/a&gt; had the great intentions of recording a podcast that quickly degraded into different implementations of ICanLayEgg and ICanPoo.  Yeah, needless to say you had to be there.&lt;/p&gt;  &lt;h4&gt;Monday&lt;/h4&gt;  &lt;p&gt;By the far the &lt;a href="http://www.iunknown.com/2008/04/mvp-summit-ruby.html"&gt;&lt;strong&gt;impromptu IronRuby open space&lt;/strong&gt;&lt;/a&gt; was the best!  Had a pretty small group (10+/-) of people talking about &lt;a href="http://www.ironruby.net/" rel="tag"&gt;&lt;strong&gt;IronRuby&lt;/strong&gt;&lt;/a&gt;.  You knew you were in for a treat when &lt;a href="http://www.iunknown.com/" rel="tag"&gt;&lt;strong&gt;John&lt;/strong&gt;&lt;/a&gt; asked, "Tell us where we suck."  From there the conversation turned into the number of specs needed to get IronRuby fully running and talking about getting &lt;a href="http://www.rubyonrails.org/"&gt;RoR&lt;/a&gt; up and running by &lt;a href="http://en.oreilly.com/rails2008/public/content/home" rel="tag"&gt;RailsConf&lt;/a&gt;.  Great stuff!  Also, I had the please of finally meeting &lt;a href="http://blog.jimmy.schementi.com/" rel="tag"&gt;&lt;strong&gt;Jimmy Schementi&lt;/strong&gt;&lt;/a&gt; and talk about &lt;a href="http://dynamicsilverlight.net/" rel="tag"&gt;&lt;strong&gt;dynamic Silverlight&lt;/strong&gt;&lt;/a&gt;!  Jimmy had some great insights on his side project called &lt;a href="http://blog.jimmy.schementi.com/2008/04/silverlight-on-rails.html"&gt;&lt;strong&gt;Silverlight on Rails&lt;/strong&gt;&lt;/a&gt;. The concept made my mind explode!!&lt;/p&gt;  &lt;h4&gt;Tuesday&lt;/h4&gt;  &lt;p&gt;I had a great time at the product dinner!  I sat next to my new MVP Lead, &lt;a href="http://twitter.com/Z8it"&gt;&lt;strong&gt;Suzanna Moran&lt;/strong&gt;&lt;/a&gt;, &lt;a href="http://twitter.com/jtillman" rel="tag"&gt;&lt;strong&gt;Jason Tillman&lt;/strong&gt;&lt;/a&gt;, &lt;a href="http://weblogs.asp.net/bryansampica/" rel="tag"&gt;&lt;strong&gt;Bryan Sampica&lt;/strong&gt;&lt;/a&gt; and &lt;a href="http://weblogs.asp.net/leftslipper/" rel="tag"&gt;&lt;strong&gt;Eilon Lipton&lt;/strong&gt;&lt;/a&gt;.  We talked about how we define community, and how we can build community and of course, &lt;a title="" href="http://www.asp.net" target="_blank"&gt;ASP.NET&lt;/a&gt; MVC!  The fun really begun when &lt;a href="http://haacked.com" rel="tag"&gt;&lt;strong&gt;Phil Haack&lt;/strong&gt;&lt;/a&gt; and I created the "Butch" an open source drink for the product dinner.  The drink for those of you wondering, is 1 part vodka, 1 part ice and 1 part citrus juices (lemon, limes, etc.) and 1 part &lt;a href="http://en.wikipedia.org/wiki/Grenadine"&gt;&lt;strong&gt;grenadine&lt;/strong&gt;&lt;/a&gt;.  The reason why its called the "Butch" is because it's both pink and manly at the same time since it's made with Beefeater Vodka.  Yeah...again, you had to be there!&lt;/p&gt;  &lt;p&gt;From there, I had the pleasure of meeting &lt;a href="http://weblogs.asp.net/scottgu"&gt;&lt;strong&gt;ScottGu&lt;/strong&gt;&lt;/a&gt;! I must say that it was pretty awesome moment  (yes, I sound like a little school girl). I thanked him for the work him and his team are doing to pushing out the best content and tools for .net developers.  I think the moment where I passed out during the our conversation was when he told me that he reads my blog and really likes the content.  The next thing I knew, I was at the Westin lobby standing next to&lt;strong&gt; &lt;/strong&gt;&lt;a href="http://calebjenkins.com/" rel="tag"&gt;&lt;strong&gt;Caleb Jenkins&lt;/strong&gt;&lt;/a&gt;.  Totally surreal.&lt;/p&gt;  &lt;p&gt;At this time, it's close to 11 PM and the night is just staring.  From the Westin lobby, I wonder off to bar/restaurant place called The Palace where I had a few beers with &lt;a href="http://blog.wekeroad.com/" rel="tag"&gt;&lt;strong&gt;Rob Connery&lt;/strong&gt;&lt;/a&gt;, &lt;a href="http://stevenharman.net/" rel="tag"&gt;&lt;strong&gt;Steve Harman&lt;/strong&gt;&lt;/a&gt;, &lt;a href="http://weblogs.asp.net/jgalloway/" rel="tag"&gt;&lt;strong&gt;Jon Galloway&lt;/strong&gt;&lt;/a&gt;, &lt;a href="http://arcware.net/" rel="tag"&gt;&lt;strong&gt;Dave Donaldson&lt;/strong&gt;&lt;/a&gt; and &lt;a href="http://www.west-wind.com/weblog/" rel="tag"&gt;&lt;strong&gt;Rick Strahl&lt;/strong&gt;&lt;/a&gt;.  I sat next to Jon and had a great time talking to him about his adventures with &lt;a href="http://silverlight.net" rel="tag"&gt;&lt;strong&gt;Silverlight&lt;/strong&gt;&lt;/a&gt; and developing &lt;a href="http://www.codeplex.com/videoshow" rel="tag"&gt;&lt;strong&gt;Video.Show&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;  &lt;h4&gt;Wednesday&lt;/h4&gt;  &lt;p&gt;By far both of the dynamic language sessions, "Why I Py?"  with Harry Pierson and "IronRuby" with John were pretty awesome.  After listening to Harry's talk, I should realized that I should give python more of a chance.  The only thing that I do not like about python is the requirement to use space as a scope boundary...that's it.  I know, I should stop whining and give it a chance.  Also, talking with Scott Bellware and Phil Haack about &lt;a href="http://en.wikipedia.org/wiki/Thunk" rel="tag"&gt;&lt;strong&gt;thunking&lt;/strong&gt;&lt;/a&gt; from IronRuby to CLR types was pretty cool.&lt;/p&gt;  &lt;p&gt;The attendee party was pretty great too!  It was funny to see my wife get up and sing &lt;a href="http://en.wikipedia.org/wiki/Brown_Eyed_Girl" rel="tag"&gt;&lt;strong&gt;Brown Eyed Girl&lt;/strong&gt;&lt;/a&gt; with &lt;a href="http://developernotes.com" rel="tag"&gt;&lt;strong&gt;Nick&lt;/strong&gt;&lt;/a&gt;'s wife.  Also, listening to &lt;a href="http://geekswithblogs.net/dlussier" rel="tag"&gt;&lt;strong&gt;D'Arcy Lussier&lt;/strong&gt;&lt;/a&gt; sing &lt;a href="http://en.wikipedia.org/wiki/I_Touch_Myself" rel="tag"&gt;I Touch Myself&lt;/a&gt; and Keith &lt;a href="http://en.wikipedia.org/wiki/Friends_in_Low_Places" rel="tag"&gt;&lt;strong&gt;Friends in Low Places&lt;/strong&gt;&lt;/a&gt; was pretty awesome too.&lt;/p&gt;  &lt;h4&gt;Heading Home&lt;/h4&gt;  &lt;p&gt;Unfortunately, I left on Thursday morning so I was unable to make the rest of the festivities along with the ALT.NET Conference.  In all, I had a great time with everyone and look forward to the rest of the year and next year's summit! &lt;/p&gt;&lt;img src="http://blog.lozanotek.com/aggbug/20084.aspx" width="1" height="1" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=7DV3WmYPe1I:Ja6epH_a1L4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=7DV3WmYPe1I:Ja6epH_a1L4:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=7DV3WmYPe1I:Ja6epH_a1L4:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=7DV3WmYPe1I:Ja6epH_a1L4:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=7DV3WmYPe1I:Ja6epH_a1L4:D7DqB2pKExk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=7DV3WmYPe1I:Ja6epH_a1L4:wF9xT3WuBAs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=7DV3WmYPe1I:Ja6epH_a1L4:wF9xT3WuBAs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=7DV3WmYPe1I:Ja6epH_a1L4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=7DV3WmYPe1I:Ja6epH_a1L4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=7DV3WmYPe1I:Ja6epH_a1L4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=7DV3WmYPe1I:Ja6epH_a1L4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=7DV3WmYPe1I:Ja6epH_a1L4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/lozanotek?a=7DV3WmYPe1I:Ja6epH_a1L4:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/lozanotek?i=7DV3WmYPe1I:Ja6epH_a1L4:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/20084.aspx</wfw:comment><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.lozanotek.com/comments/commentRss/20084.aspx</wfw:commentRss><trackback:ping xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">http://blog.lozanotek.com/services/trackbacks/20084.aspx</trackback:ping><feedburner:origLink>http://blog.lozanotek.com/archive/2008/04/20/MVP_Summit_Highlights.aspx</feedburner:origLink></item></channel></rss>
