<?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:atom="http://www.w3.org/2005/Atom" xmlns:posterous="http://posterous.com/help/rss/1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>TheCodeJunkie</title>
    <link>http://thecodejunkie.com</link>
    <description>junky : a person who derives inordinate pleasure from or who is dependent on something</description>
    <generator>posterous.com</generator>
    <link xmlns="http://www.w3.org/2005/Atom" type="application/json" href="http://posterous.com/api/sup_update#e82436547" rel="http://api.friendfeed.com/2008/03#sup" />
    
    
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/TheCodeJunkie" /><feedburner:info uri="thecodejunkie" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://posterous.superfeedr.com/" /><item>
      <pubDate>Sat, 25 Feb 2012 23:58:00 -0800</pubDate>
      <title>Nancy v0.10.0 – The next step in awesome</title>
      <link>http://feedproxy.google.com/~r/TheCodeJunkie/~3/tIR3Hdabm8M/nancy-v0100-the-next-step-in-awesome</link>
      <guid isPermaLink="false">http://thecodejunkie.com/nancy-v0100-the-next-step-in-awesome</guid>
      <description>&lt;p&gt;
	&lt;p&gt;
&lt;h2&gt;TL;DR&lt;/h2&gt;
&lt;p&gt;A couple of days ago we (finally) managed to get v0.10.0 out of the door and  it&amp;rsquo;s packed of goodies! Diagnostics, razor improvements, bug fixes, weighted  request headers, model validation and lots of tweaks to existing features are  only a couple of things that went into this release.&lt;/p&gt;
&lt;p&gt;The community continue to bless us with their awesome work and this release  had 22 authors totaling 250 commits, which is just jaw dropping! That puts us at  65 contributors to the Nancy source code. This release consisted of 23 updated  (some new) Nugets and a total of 45 work items! For a complete list of things  that&amp;rsquo;s part of this release (including breaking changes!), head over to check  out the &lt;a href="https://github.com/NancyFx/Nancy/issues?milestone=6&amp;amp;sort=created&amp;amp;direction=desc&amp;amp;state=closed" title="Read the milestone for v0.10.0 on GitHub" target="_blank"&gt;milestone&lt;/a&gt; at GitHub.&lt;/p&gt;
&lt;p&gt;So let&amp;rsquo;s have a closer look at some of the stuff in v0.10.0!&lt;/p&gt;
&lt;h2&gt;Validating models just got easy&lt;/h2&gt;
&lt;p&gt;Craig Wilson contributed some absolutely beautify code to help us get model  validation into Nancy. Like all other features in Nancy, the validation stuff is  shipped as a set of Nugets with the added ability of hooking in your own  validation methods. In this release we ship Nugets to use either  &lt;em&gt;DataAnnotations&lt;/em&gt; or &lt;em&gt;Fluent Validation&lt;/em&gt; to validate your models.  Combining this with our model binder and you are definitely on the  super-duper-happy-path!&lt;/p&gt;
&lt;p&gt;The contribution from Craig also contained the foundation to generate  client-side validation based on your model rules, however this release does not  contain the code to enable that but it&amp;rsquo;s definitely something we&amp;rsquo;ll be looking  into in upcoming releases (maybe it will be your contribution that brings this  to the community?!)&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://github.com/NancyFx/Nancy/tree/master/src/Nancy.Demo.Validation" title="The model validation demo in Nancy" target="_blank"&gt;Nancy.Demo.Validation&lt;/a&gt; project, in the main solution, shows you  how to use this feature and uses both DataAnnotations and Fluent Validation.  Remember, it&amp;rsquo;s quite easy to plug in other validation frameworks too!&lt;/p&gt;
&lt;h2&gt;Making sense of what the client sends you&lt;/h2&gt;
&lt;p&gt;We gave the &lt;em&gt;RequestHeaders&lt;/em&gt; class some love, by adding methods to  access all available header names and values through properties. We also made  the class implement &lt;em&gt;IEnumerable&amp;lt;&amp;gt; &lt;/em&gt;to make it easier to work with  the incoming headers.&lt;/p&gt;
&lt;p&gt;One of the biggest changes is the presence of weighted headers. The headers  that can be weighted not returns &lt;em&gt;IEnumerable&amp;lt;Tuple&amp;lt;string,  decimal&amp;gt;&amp;gt;,&lt;/em&gt; instead of &lt;em&gt;IEnumerable&amp;lt;string&amp;gt;&lt;/em&gt;, and will be  sorted in descending order according to their weight. Not only will this enable  you to manage weighted headers in a correct way, but it&amp;rsquo;s also an important  piece of the puzzle for the planned content negotiation support, that we will  ship in a later release.&lt;/p&gt;
&lt;h2&gt;Sharpening the Razor&lt;/h2&gt;
&lt;p&gt;The improvements, made to the Razor view engine, in this release really  deserves a blog post of it&amp;rsquo;s own to make it justice. Despite that, I will give  you a mile height overview of the changes and improvements that we&amp;rsquo;ve made.&lt;/p&gt;
&lt;p&gt;One of the things that we (me and Grumpydev) really wanted to sort out for  this release was adding in Intellisense for our razor views and I am very happy  to say that we&amp;rsquo;ve managed to do that. It includes a couple of custom build  providers that is installed, into the bin folder of your project, with the razor  Nuget and adds a couple of post-build events to make sure they stay there. I  would lie if I said that getting the build providers to play ball was easy. It&amp;rsquo;s  one of those dark corners of Razor customization that nobody speaks of and it  involves quite a bit of Visual Studio magic. So to enable Intellisense, all you  have to do is build your project, after installing the Nuget, and the  &lt;em&gt;Nancy.ViewEngines.Razor.BuildProviders.dll&lt;/em&gt; assembly will be copied into  your bin folder. The Nuget will also wire them up for you in the web.config,  moar super-duper-happy-path for you!&lt;/p&gt;
&lt;p&gt;While doing some refactoring work I also noticed how easy it would be to add  support for &lt;em&gt;.vbhtml&lt;/em&gt; files, so I did. This should be really handy to  help you port that legacy MVC application over to Nancy ;) The included build  providers contains one for these views so you should be able to enjoy  Intellisese support if you ever find yourself in the need to use the Visual  Basic views with Razor.&lt;/p&gt;
&lt;p&gt;Oh, speaking of dark corners of Razor, did you know that ASP.NET MVC installs  a global handler for &lt;em&gt;.cshtml&lt;/em&gt; and &lt;em&gt;.vbhtml&lt;/em&gt; files? We didn&amp;rsquo;t. At  least not until we got a bug report that Nancy wasn&amp;rsquo;t rendering views with the  passed in model. Turns out that if you have a view, with the same name as one of  the routes, the request would never be passed to Nancy. Instead the global  handler would suck it in and render the view. How nice, right? WRONG! Well after  speaking to the Razor team it turns out that you can disable this behavior with  the, not so obvious, &lt;em&gt;webPages:Enabled&lt;/em&gt; configuration key. We updated out  Nuget to stick that into your config file when you install it.&lt;/p&gt;
&lt;p&gt;Craig Wilson didn&amp;rsquo;t only chip in with awesome model validation code, he also  added support for &lt;em&gt;@model&lt;/em&gt; and &lt;em&gt;@ModelType&lt;/em&gt; directives, as well as  making the Razor engine smart enough to automatically reference the models  assembly or as Craig described it in this pull request&lt;/p&gt;
&lt;blockquote class="posterous_medium_quote"&gt;
&lt;p&gt;&lt;em&gt;The model's assembly is now referenced automatically regardless of  whether an assembly reference exists in configuration. This makes the "it just  works" statement a little more complete. In addition, if specified in  configuration, the namespace of the model is automatically included in the razor  file.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That&amp;rsquo;s a very awesome little feature to have around!&lt;/p&gt;
&lt;p&gt;We also dropped our dependency on &lt;em&gt;System.Web&lt;/em&gt; in the engine which  means it will run in client profile. It also means that if you took for granted  that it was around in your views then you are going to have to reference the  assembly and namespace in the &lt;a href="https://github.com/NancyFx/Nancy/wiki/Razor-View-Engine" title="Read about the Razor configuration on our wiki" target="_blank"&gt;Razor configuration&lt;/a&gt;. We thing it&amp;rsquo;s a small price to pay to get  rid of that dependency!&lt;/p&gt;
&lt;h2&gt;All your Url are belong to us&lt;/h2&gt;
&lt;p&gt;Two small, but oh so useful, changes where made to the &lt;em&gt;Url&lt;/em&gt; type. You  can now call &lt;em&gt;ToString()&lt;/em&gt; and it will give you a correct string  representation of the url. The second thing is that the type will now implicitly  cast to an &lt;em&gt;Uri&lt;/em&gt; instance, how awesome is that!?&lt;/p&gt;
&lt;h2&gt;Not more White Screen of Death (WSOD)&lt;/h2&gt;
&lt;p&gt;Have you ever noticed that if you tried to render a view, that Nancy couldn&amp;rsquo;t  find, you would end up with a blank page? Yeah, not really useful is it? To our  defense that we never our intention but we somehow forgot to make it more  awesome. That is, until now. As of this release, you will now get a view that  tells you that it was unable to locate the requested view and it will also tell  you which file extensions, based on the available view engines, that can be  used. Also expect a &lt;a href="https://github.com/NancyFx/Nancy/issues/524" title="Feature request to output inspected locations for missing view" target="_blank"&gt;future  release&lt;/a&gt; to also contain information about the locations that were inspected  for the view.&lt;/p&gt;
&lt;h2&gt;Doctor, what&amp;rsquo;s wrong with me?!&lt;/h2&gt;
&lt;p&gt;Do you remember the first time we talked about adding in Diagnostics for  Nancy? To be honest I can&amp;rsquo;t say for sure, but I know it was somewhere around  v0.3/0.4 and that wasn&amp;rsquo;t exactly yesterday. It&amp;rsquo;s been a long time coming, but I  am &lt;strong&gt;very&lt;/strong&gt; pleased to tell you that we&amp;rsquo;ve included diagnostics in  this release! It is important to be aware that this release only contains a  couple of diagnostics tools, but we&amp;rsquo;ve put a lot of work into the diagnostics  foundation and it will be really easy for us (that that &amp;ldquo;us&amp;rdquo; definitely includes  you too! We want your contributions!) to add more diagnostics tool for each new  release we make.&lt;/p&gt;
&lt;p&gt;The diagnostics contains both request tracing and interactive diagnostics.  The interactive diagnostics is where things gets really interesting. It enables  you to interactively (duh!) query Nancy, at runtime, to figure out what the heck  is going in. Before you get too excited, this is not a query language like SQL  where you can just fire of queries, even though it would probably be totally  possible to implement (hmmm, any takers?). We are introducing the  &lt;em&gt;IDiagnosticsProvider&lt;/em&gt; interface and anything that implements this can  hand our &lt;em&gt;diagnostic capabilities&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;These are, quite literally, normal methods that are exposed on our  diagnostics dashboard. It enables you to pass in primitive values and have rich  result sets be returned and presented automatically. Anything that implements  the interface will automatically be discovered and wired up on the dashboard.  Not only that, but you can take full advantage of the, 1st class, dependency  injection support of Nancy and take in what ever dependencies you want into your  providers, making it super easy to do some pretty advanced stuff. Of course you  are not restricted to only take dependencies on Nancy types, there is nothing  stopping you from exposing a nice interface over your logs etc.&lt;/p&gt;
&lt;p&gt;The providers can, nicely, be dropped into a Nuget and reused across any  Nancy project out there!&lt;/p&gt;
&lt;p&gt;Wanna know something really neat? The entire diagnostics dashboard is build  using Nancy and backbone.js and is embedded into Nancy itself (woah! A Nancy  application running inside of Nancy?! Yep!)&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s extremely fast and easy to use. So how do you get access to the  diagnostics goodies? Glad you asked! All you have to do is to run in debug mode  (although it&amp;rsquo;s possible to use it in release mode too, you just need to turn it  on) and then browse &lt;em&gt;/_Nancy/&lt;/em&gt; in your application. It will give you some  (very) easy instructions (really, it teaches you how to configure a password) to  get started.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ve only scratched the surface of this!&lt;/p&gt;
&lt;h2&gt;Moar stuff!&lt;/h2&gt;
&lt;p&gt;Really, I can&amp;rsquo;t list em all here so head over to the &lt;a href="https://github.com/NancyFx/Nancy/issues?milestone=6&amp;amp;sort=created&amp;amp;direction=desc&amp;amp;state=closed" title="Read the milestone for v0.10.0 on GitHub" target="_blank"&gt;milestone&lt;/a&gt; at GitHub.&lt;/p&gt;
&lt;h2&gt;So wuzz next?&lt;/h2&gt;
&lt;p&gt;Well, first of all you won&amp;rsquo;t have to wait as long for the next release. We  are going to try to get this out in about 3 weeks time and plan on focusing on  trimming down the pull request queue and fix the reported bugs. We have no major  features planned for the next release, but that does not mean that we&amp;rsquo;re not  working on any. Quite the opposite, we are working on getting in support for  async routes, content negotiation and proper caching support. We just don&amp;rsquo;t want  to keep other stuff away from you while we work on these things and want to keep  doing more frequent releases.&lt;/p&gt;
&lt;p&gt;Of course there is always the chance that we manage to finish one of them in  time for the next release, or that someone contributes something really awesome  that will be included!&lt;/p&gt;
&lt;p&gt;Thank you for making v0.10.0 possible!&amp;nbsp;&lt;/p&gt;
&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://thecodejunkie.com/nancy-v0100-the-next-step-in-awesome"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://thecodejunkie.com/nancy-v0100-the-next-step-in-awesome#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodeJunkie/~4/tIR3Hdabm8M" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1021495/thecodejunkie.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/he6rwKFhNPr8m</posterous:profileUrl>
        <posterous:firstName>thecodejunkie</posterous:firstName>
        <posterous:lastName />
        <posterous:nickName>thecodejunkie</posterous:nickName>
        <posterous:displayName>thecodejunkie</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://thecodejunkie.com/nancy-v0100-the-next-step-in-awesome</feedburner:origLink></item>
    <item>
      <pubDate>Wed, 04 Jan 2012 08:56:00 -0800</pubDate>
      <title>Nancy running on Heroku</title>
      <link>http://feedproxy.google.com/~r/TheCodeJunkie/~3/agoEE-bKjg8/nancy-running-on-heroku</link>
      <guid isPermaLink="false">http://thecodejunkie.com/nancy-running-on-heroku</guid>
      <description>&lt;p&gt;
	&lt;p&gt;
&lt;p&gt;Last night Ben Hall blogged about how he managed to get &lt;a href="http://blog.benhall.me.uk/2012/01/experiment-deploying-c-mono-on-heroku.html" title="Read Ben Hall's blogpost on running Nancy on Heroku" target="_blank"&gt;Nancy running on Heroku&lt;/a&gt;. It&amp;rsquo;s still an early experiment, and  &lt;em&gt;totally unsupported&lt;/em&gt; by Heroku itself, but it is very interesting to say  the least.&lt;/p&gt;
&lt;p&gt;In essence this means that it might be possible to run any Mono compliant  (really guys, you need to pay attention to making this the case for your apps,  it&amp;rsquo;s not much work at all) application on Heroku.&lt;/p&gt;
&lt;p&gt;Neat!&lt;/p&gt;
&lt;p&gt;-&lt;/p&gt;
&lt;p&gt;&lt;a href="http://nancyfx.org/"&gt;&lt;em&gt;Nancy&lt;/em&gt;&lt;/a&gt;&lt;em&gt; is a lightweight HTTP  framework for building web services and sites. The framework runs on both the  .net framework and &lt;/em&gt;&lt;a href="http://mono-project.com/"&gt;&lt;em&gt;Mono&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://thecodejunkie.com/nancy-running-on-heroku"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://thecodejunkie.com/nancy-running-on-heroku#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodeJunkie/~4/agoEE-bKjg8" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1021495/thecodejunkie.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/he6rwKFhNPr8m</posterous:profileUrl>
        <posterous:firstName>thecodejunkie</posterous:firstName>
        <posterous:lastName />
        <posterous:nickName>thecodejunkie</posterous:nickName>
        <posterous:displayName>thecodejunkie</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://thecodejunkie.com/nancy-running-on-heroku</feedburner:origLink></item>
    <item>
      <pubDate>Thu, 01 Dec 2011 23:16:00 -0800</pubDate>
      <title>Custom request methods in Nancy</title>
      <link>http://feedproxy.google.com/~r/TheCodeJunkie/~3/MGuruB0M6M8/custom-request-methods-in-nancy</link>
      <guid isPermaLink="false">http://thecodejunkie.com/custom-request-methods-in-nancy</guid>
      <description>&lt;p&gt;
	&lt;p&gt;
&lt;p&gt;&lt;a href="http://nancyfx.org/" title="The Nancy website" target="_blank"&gt;&lt;em&gt;Nancy&lt;/em&gt;&lt;/a&gt;&lt;em&gt; is a lightweight HTTP framework for  building web services and sites. The framework runs on both the .net framework  and &lt;/em&gt;&lt;a href="http://mono-project.com/" title="The Mono project website" target="_blank"&gt;&lt;em&gt;Mono&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Out of the box, Nancy supports GET, POST, PUT, PATCH, DELETE, OPTIONS and  HEAD (although these are a special case of GET requests and handled differently  by the framework) requests.&lt;/p&gt;
&lt;p&gt;These are the subset of the &lt;a href="http://www.ietf.org/rfc/rfc2616" title="The RFC 2616 specification" target="_blank"&gt;RFC-2116&lt;/a&gt; that we&amp;rsquo;ve  found useful to support in Nancy. We do understand that your application might  have the need to handler different kinds of requests and there are ways around  this.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s not something we&amp;rsquo;ve specifically built Nancy to support, but because of  the design we use, you can add additional handlers for other types of requests  with very little effort.&lt;/p&gt;
&lt;p&gt;&lt;div class="data type-c"&gt;
      &lt;table class="lines" cellspacing="0" cellpadding="0"&gt;
        &lt;tr&gt;
          &lt;td&gt;
            &lt;pre class="line_numbers"&gt;&lt;span rel="#L1" id="L1"&gt;1&lt;/span&gt;
&lt;span rel="#L2" id="L2"&gt;2&lt;/span&gt;
&lt;span rel="#L3" id="L3"&gt;3&lt;/span&gt;
&lt;span rel="#L4" id="L4"&gt;4&lt;/span&gt;
&lt;span rel="#L5" id="L5"&gt;5&lt;/span&gt;
&lt;span rel="#L6" id="L6"&gt;6&lt;/span&gt;
&lt;span rel="#L7" id="L7"&gt;7&lt;/span&gt;
&lt;span rel="#L8" id="L8"&gt;8&lt;/span&gt;
&lt;span rel="#L9" id="L9"&gt;9&lt;/span&gt;
&lt;span rel="#L10" id="L10"&gt;10&lt;/span&gt;
&lt;span rel="#L11" id="L11"&gt;11&lt;/span&gt;
&lt;span rel="#L12" id="L12"&gt;12&lt;/span&gt;
&lt;span rel="#L13" id="L13"&gt;13&lt;/span&gt;
&lt;span rel="#L14" id="L14"&gt;14&lt;/span&gt;
&lt;span rel="#L15" id="L15"&gt;15&lt;/span&gt;
&lt;/pre&gt;
          &lt;/td&gt;
          &lt;td width="100%"&gt;
                &lt;div class="highlight"&gt;&lt;pre /&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;abstract&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CustomRequestVerbsModule&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;NancyModule&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="nf"&gt;CustomRequestVerbsModule&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC5"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC7"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="nf"&gt;CustomRequestVerbsModule&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;modulePath&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;base&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;modulePath&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC9"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC10"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC11"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;RouteBuilder&lt;/span&gt; &lt;span class="n"&gt;Trace&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC12"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC13"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;get&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;RouteBuilder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;TRACE&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC14"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC15"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
          &lt;/td&gt;
        &lt;/tr&gt;
      &lt;/table&gt;
  &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;In the above code I created a custom Nancy module that added a method with  the name of the request verb that we want to add support for. The return type of  the method is a &lt;a href="https://github.com/NancyFx/Nancy/blob/master/src/Nancy/NancyModule.cs#L192" title="The RouteBuilder class in Nancy"&gt;&lt;em&gt;RouteBuilder&lt;/em&gt;&lt;/a&gt;,  a helper class that is used to provide the syntax Nancy uses for defining route  handlers.&lt;/p&gt;
&lt;p&gt;Once the module is created, all you have to do to start handling requests of  the new method is to inherit your modules from the new base class and add your  handlers.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s all there is to adding support for additional request methods in  Nancy!&lt;/p&gt;
&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://thecodejunkie.com/custom-request-methods-in-nancy"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://thecodejunkie.com/custom-request-methods-in-nancy#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodeJunkie/~4/MGuruB0M6M8" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1021495/thecodejunkie.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/he6rwKFhNPr8m</posterous:profileUrl>
        <posterous:firstName>thecodejunkie</posterous:firstName>
        <posterous:lastName />
        <posterous:nickName>thecodejunkie</posterous:nickName>
        <posterous:displayName>thecodejunkie</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://thecodejunkie.com/custom-request-methods-in-nancy</feedburner:origLink></item>
    <item>
      <pubDate>Wed, 23 Nov 2011 03:56:00 -0800</pubDate>
      <title>A year of the super-duper-happy-path!</title>
      <link>http://feedproxy.google.com/~r/TheCodeJunkie/~3/FIk_Rm4pdwY/81389489</link>
      <guid isPermaLink="false">http://thecodejunkie.com/81389489</guid>
      <description>&lt;p&gt;
	&lt;p&gt;&lt;em&gt;&amp;rdquo;To sum up, I would just kindly advice Andreas to invest his time and  enthusiasm into something better, cause this Nancy was definitely born  dead."&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;368 days ago &lt;em&gt;&lt;a href="http://elegantcode.com/2010/11/28/introducing-nancy-a-lightweight-web-framework-inspired-by-sinatra/" title="Read the Nancy announcement post" target="_blank"&gt;I first announced Nancy&lt;/a&gt;&lt;/em&gt;&amp;nbsp;on Elegant Code and  that was a piece of advice that I received among the many comments that  followed.&lt;/p&gt;
&lt;p&gt;You know what? Back them he might have been right. Nancy was a personal  project that I spiked out in a couple of nights and let loose into the wild with  no real expectations.&lt;/p&gt;
&lt;p&gt;However, taking a step back an looking at the year that has passed, the  complete opposite has unfolded . Since the &lt;a href="https://github.com/NancyFx/Nancy/commit/d52b382b080a18188987757d6eafaa6830aca2b1" title="The first Nancy commit on GitHub" target="_blank"&gt;first commit&lt;/a&gt; was made by me, on the 20th of November 2010,  quite a lot have changed for Nancy. More than I could have possibly have  imagined to be honest.&lt;/p&gt;
&lt;h2&gt;They grow up so fast&lt;/h2&gt;
&lt;p&gt;In the announcement post I wrapped up with a list of things I knew I wanted  to get into Nancy at that time. Some of them were pretty big tasks, some quite  small.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A much richer request object &lt;/li&gt;
&lt;li&gt;The ability to inject dependencies into Nancy modules &lt;/li&gt;
&lt;li&gt;Conditions on actions &lt;/li&gt;
&lt;li&gt;View engine integration &lt;/li&gt;
&lt;li&gt;Ship with a nice bunch of response formatters &lt;/li&gt;
&lt;li&gt;Self-composed framework &lt;/li&gt;
&lt;li&gt;Request and Response interception &lt;/li&gt;
&lt;li&gt;NuGet presence &lt;/li&gt;
&lt;li&gt;Command line (powershell?) support for spawning up a Nancy application  project &lt;/li&gt;
&lt;li&gt;Provide self-hosting somehow &lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
Not only did we complete all of the above, but those are just the tip of the  ice berg of things that&amp;rsquo;s happened during the last year. Today Nancy&amp;rsquo;s matured  into an awesome framework for building web sites and services on both .net and  &lt;a href="http://mono-project.com/" title="Check out the Mono project" target="_blank"&gt;Mono&lt;/a&gt;. 
&lt;/ul&gt;
&lt;p&gt;The list of features that are now supported is too long to list here, but a  couple of highlights are support for all the major view engines, inversion of  control containers, authentication, request pipelines (both on application and  module level), model binding and so much more stuff that it blows my mind.&lt;/p&gt;
&lt;p&gt;One thing that pleases me though, is that even with all the added features,  Nancy is still a light weight framework because of the way it&amp;rsquo;s architecture.  It&amp;rsquo;s built with a small core that has some nice extension points built into it.  Extensions are built in the form of Nugets and to add a feature you simple grab  the Nuget for it and of you go. Right now we have &lt;a href="http://nuget.org/List/Search?packageType=Packages&amp;amp;searchCategory=All+Categories&amp;amp;searchTerm=nancy&amp;amp;sortOrder=package-download-count&amp;amp;pageSize=10" title="The Nancy nugets" target="_blank"&gt;20 official nugets&lt;/a&gt; and a couple of ones that&amp;rsquo;s been created by  the community&lt;/p&gt;
&lt;h2&gt;Standing on a thousand shoulders&lt;/h2&gt;
&lt;p&gt;This is not the result of the labor of a single individual, quite the  opposite.&lt;/p&gt;
&lt;p&gt;Nancy a result of the amazing community that&amp;rsquo;s evolved around it and the  incredible list of &lt;a href="http://nancyfx.org/contribs.html" title="The list of people that have contributed code to Nancy" target="_blank"&gt;57 people that have  contributed&lt;/a&gt; over &lt;a href="https://github.com/NancyFx/nancy/pulls" title="All pull requests that's been submitted to Nancy" target="_blank"&gt;100 pull  requests&lt;/a&gt; and of course everybody that&amp;rsquo;s ever provided feedback, suggestion  and that&amp;rsquo;s blogged, created screencast or talked about Nancy at a conference or  other gatherings.&lt;/p&gt;
&lt;p&gt;The project is a regular on the GitHub Languages page under the &lt;a href="https://github.com/languages/C%23" title="Checkout top rated C# project at GitHub" target="_blank"&gt;C# page&lt;/a&gt;, with 504  watchers and 132 forks at the time when I write this post. If you include the  number of people that&amp;rsquo;s taken part in discussions on our &lt;a href="https://groups.google.com/forum/#!forum/nancy-web-framework" title="Visit the Nancy user group" target="_blank"&gt;user group&lt;/a&gt; and on &lt;a href="http://twitter.com/#!/search/NancyFx" title="Nancy on Twitter" target="_blank"&gt;Twitter&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Thank you so much!&lt;/p&gt;
&lt;h2&gt;A grumpy fella from the UK&lt;/h2&gt;
&lt;p&gt;Early one on guy from the UK took Nancy at heart and started contributing  some pretty impressive stuff to the project. Right from the start he &amp;ldquo;got Nancy&amp;rdquo;  and understood the vision I had for the project. It didn&amp;rsquo;t take long (too long  if you ask him) before it was only fair to add him as a core developer and get  his name on the mailbox.&lt;/p&gt;
&lt;p&gt;I am of course talking about &lt;a href="http://www.grumpydev.com/" title="Check out Steven's blog" target="_blank"&gt;Steven Robbins&lt;/a&gt;, a.k.a &lt;a href="http://twitter.com/#!/grumpydev" title="Steven on Twitter" target="_blank"&gt;@grumpydev&lt;/a&gt;. Not only has he put a lot of awesome stuff into  the project, but he&amp;rsquo;s also become a good friend over the year that&amp;rsquo;s passed.&lt;/p&gt;
&lt;p&gt;Thanks for all your work on Nancy buddy!&lt;/p&gt;
&lt;h2&gt;Are we there yet?&lt;/h2&gt;
&lt;p&gt;Not by a long shot! We&amp;rsquo;ve got so much stuff planned for the project and there  are so many suggestions and contributions coming in every week. However it is  important that we pace out self and make sure things does not grown in an  uncontrolled rate or direction. Every thing that is added into Nancy is still  measured on the same scale as before. Controlled chaos as it&amp;rsquo;s best!&lt;/p&gt;
&lt;p&gt;So here&amp;rsquo;s hoping for another awesome year!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://thecodejunkie.com/81389489"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://thecodejunkie.com/81389489#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodeJunkie/~4/FIk_Rm4pdwY" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1021495/thecodejunkie.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/he6rwKFhNPr8m</posterous:profileUrl>
        <posterous:firstName>thecodejunkie</posterous:firstName>
        <posterous:lastName />
        <posterous:nickName>thecodejunkie</posterous:nickName>
        <posterous:displayName>thecodejunkie</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://thecodejunkie.com/81389489</feedburner:origLink></item>
    <item>
      <pubDate>Sun, 26 Jun 2011 22:50:00 -0700</pubDate>
      <title>Nancy view cache, now disabled in debug-mode</title>
      <link>http://feedproxy.google.com/~r/TheCodeJunkie/~3/M1r20mSKbaY/nancy-view-cache-now-disabled-in-debug-mode</link>
      <guid isPermaLink="false">http://thecodejunkie.com/nancy-view-cache-now-disabled-in-debug-mode</guid>
      <description>&lt;p&gt;
	&lt;p&gt;A quick heads up. In &lt;a href="http://thecodejunkie.com/nancy-060-saw-the-light-of-day" title="Check out the post about Nancy 0.6.0" target="_blank"&gt;Nancy 0.6.0&lt;/a&gt; we introduced a change that made the application  scan, for all available views, and cache them upfront. While this is good for  performance, because it reduces view loading time and limits I/O operations, it  does pose a slight nuance then you are creating you view.&lt;/p&gt;
&lt;p&gt;Because of the cache, each time you made changes to the view template you had  to restart the webserver so that the Nancy startup code ran again. A bit of a  pain in the sitting area, I agree.&lt;/p&gt;
&lt;p&gt;This update is not in the 0.6.0 release it self, not in the NuGet packages.  So in order to get a hold of a copy that uses this you will have to either &lt;a href="http://nancyfx.org/" target="_blank"&gt;download the latest source code&lt;/a&gt;&amp;nbsp;and  built it yourself, or &lt;a href="http://teamcity.codebetter.com/" target="_blank"&gt;grab the latest artifacts&lt;/a&gt;&amp;nbsp;from our TeamCity server.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://thecodejunkie.com/nancy-view-cache-now-disabled-in-debug-mode"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://thecodejunkie.com/nancy-view-cache-now-disabled-in-debug-mode#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodeJunkie/~4/M1r20mSKbaY" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1021495/thecodejunkie.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/he6rwKFhNPr8m</posterous:profileUrl>
        <posterous:firstName>thecodejunkie</posterous:firstName>
        <posterous:lastName />
        <posterous:nickName>thecodejunkie</posterous:nickName>
        <posterous:displayName>thecodejunkie</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://thecodejunkie.com/nancy-view-cache-now-disabled-in-debug-mode</feedburner:origLink></item>
    <item>
      <pubDate>Sun, 26 Jun 2011 15:51:00 -0700</pubDate>
      <title>Nancy 0.6.0 saw the light of day</title>
      <link>http://feedproxy.google.com/~r/TheCodeJunkie/~3/1bwyU2ilp2I/nancy-060-saw-the-light-of-day</link>
      <guid isPermaLink="false">http://thecodejunkie.com/nancy-060-saw-the-light-of-day</guid>
      <description>&lt;p&gt;
	&lt;p&gt;
&lt;p&gt;Nancy recently reached version 0.6.0 and was the result of 220 changed files,  divided into 126 commits by a total of 12 different authors. That alone is  pretty damn awesome if you ask me, but of course we didn&amp;rsquo;t just make random  changes to the code, we did try to add some new cool stuff as well!&lt;/p&gt;
&lt;p&gt;The major parts that got some attention in this release were performance,  there bootstrapper, the view engines and lots of internal changes that you will  only notice if you work with the code.&lt;/p&gt;
&lt;p&gt;So let&amp;rsquo;s dig in an see what we we&amp;rsquo;ve concocted&lt;/p&gt;
&lt;h2&gt;Bootstrapper&lt;/h2&gt;
&lt;p&gt;We are quite proud of the bootstrapping approach we have taken in Nancy. It&amp;rsquo;s  right in the center of everything and helps us implement new functionality with  minimal effort but it also helps Nancy users get dependencies into their modules  absolutely minimal effort. In the 0.6.0 release we put quite a lot of effort  into the bootstrapper code.&lt;/p&gt;
&lt;p&gt;Un essence it can be summed up with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A lot cleaner public facing API &lt;/li&gt;
&lt;li&gt;Makes it easier to implement a custom boostrapper for a different container &lt;/li&gt;
&lt;li&gt;Reduces friction when adding Nancy functionality moving forwards &lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;View conventions&lt;/h2&gt;
&lt;p&gt;Prior to 0.6.0 you were pretty limited to where Nancy would look to resolve  views to render. In fact you were limited to a folder called &lt;em&gt;views&lt;/em&gt;,  that had to be in the root of your application. Well that&amp;rsquo;s now changed into  being convention driven instead, with the possibility to modify the conventions  yourself.&lt;/p&gt;
&lt;p&gt;The default conventions that is shipped with Nancy are&lt;/p&gt;
&lt;p&gt;&lt;div class="data type-c"&gt;
    
      &lt;table class="lines" cellspacing="0" cellpadding="0"&gt;
        &lt;tr&gt;
          &lt;td&gt;
            &lt;pre class="line_numbers"&gt;&lt;span rel="#L1" id="L1"&gt;1&lt;/span&gt;
&lt;span rel="#L2" id="L2"&gt;2&lt;/span&gt;
&lt;span rel="#L3" id="L3"&gt;3&lt;/span&gt;
&lt;span rel="#L4" id="L4"&gt;4&lt;/span&gt;
&lt;span rel="#L5" id="L5"&gt;5&lt;/span&gt;
&lt;span rel="#L6" id="L6"&gt;6&lt;/span&gt;
&lt;span rel="#L7" id="L7"&gt;7&lt;/span&gt;
&lt;span rel="#L8" id="L8"&gt;8&lt;/span&gt;
&lt;span rel="#L9" id="L9"&gt;9&lt;/span&gt;
&lt;span rel="#L10" id="L10"&gt;10&lt;/span&gt;
&lt;span rel="#L11" id="L11"&gt;11&lt;/span&gt;
&lt;span rel="#L12" id="L12"&gt;12&lt;/span&gt;
&lt;span rel="#L13" id="L13"&gt;13&lt;/span&gt;
&lt;span rel="#L14" id="L14"&gt;14&lt;/span&gt;
&lt;span rel="#L15" id="L15"&gt;15&lt;/span&gt;
&lt;span rel="#L16" id="L16"&gt;16&lt;/span&gt;
&lt;span rel="#L17" id="L17"&gt;17&lt;/span&gt;
&lt;/pre&gt;
          &lt;/td&gt;
          &lt;td width="100%"&gt;
            
              
                &lt;div class="highlight"&gt;&lt;pre /&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;ConfigureViewLocationConventions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NancyConventions&lt;/span&gt; &lt;span class="n"&gt;conventions&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC3"&gt;	&lt;span class="n"&gt;conventions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ViewLocationConventions&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Func&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;object&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ViewLocationContext&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;	&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC5"&gt;		&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;viewName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;viewLocationContext&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;			&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Concat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;/&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;viewName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC7"&gt;		&lt;span class="p"&gt;},&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC8"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC9"&gt;		&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;viewName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;viewLocationContext&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC10"&gt;			&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Concat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;/views/&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;viewName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC11"&gt;		&lt;span class="p"&gt;},&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC12"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC13"&gt;		&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;viewName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;viewLocationContext&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC14"&gt;			&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Concat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;/views&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;viewLocationContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ModulePath&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;/&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;viewName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC15"&gt;		&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC16"&gt;	&lt;span class="p"&gt;};&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC17"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
              
            
          &lt;/td&gt;
        &lt;/tr&gt;
      &lt;/table&gt;
    
  &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Providing your own is equally as simple. You create a custom  boostrapper (that Nancy will find automatically and use) and modify the list  (yes, conventions are stored in an &lt;em&gt;IList&amp;lt;Func&amp;lt;string, dynamic,  NancyContext&amp;gt;&amp;gt;&lt;/em&gt; instance) in what ever way it please you&lt;/p&gt;
&lt;p&gt;&lt;div class="data type-c"&gt;
    
      &lt;table class="lines" cellspacing="0" cellpadding="0"&gt;
        &lt;tr&gt;
          &lt;td&gt;
            &lt;pre class="line_numbers"&gt;&lt;span rel="#L1" id="L1"&gt;1&lt;/span&gt;
&lt;span rel="#L2" id="L2"&gt;2&lt;/span&gt;
&lt;span rel="#L3" id="L3"&gt;3&lt;/span&gt;
&lt;span rel="#L4" id="L4"&gt;4&lt;/span&gt;
&lt;span rel="#L5" id="L5"&gt;5&lt;/span&gt;
&lt;span rel="#L6" id="L6"&gt;6&lt;/span&gt;
&lt;span rel="#L7" id="L7"&gt;7&lt;/span&gt;
&lt;span rel="#L8" id="L8"&gt;8&lt;/span&gt;
&lt;span rel="#L9" id="L9"&gt;9&lt;/span&gt;
&lt;span rel="#L10" id="L10"&gt;10&lt;/span&gt;
&lt;/pre&gt;
          &lt;/td&gt;
          &lt;td width="100%"&gt;
            
              
                &lt;div class="highlight"&gt;&lt;pre /&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CustomBootstrapper&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;DefaultNancyBootstrapper&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="k"&gt;override&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;InitialiseInternal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TinyIoC&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;TinyIoCContainer&lt;/span&gt; &lt;span class="n"&gt;container&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC5"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Conventions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ViewLocationConventions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;viewName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC7"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Concat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;/custom/&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;viewName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;});&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC9"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC10"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
              
            
          &lt;/td&gt;
        &lt;/tr&gt;
      &lt;/table&gt;
    
  &lt;/div&gt;&lt;/p&gt;
&lt;h2&gt;View caching&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s be blunt. View engine were slow in Nancy before we pushed out 0.6.0.  Why? Well, for different reasons for different engines, but it all boils down to  the fact that views were located and compiled on each and every request. Ya, I  know.. slow. But no more! The first thing we did was to have Nancy identify all  views that could be rendered (based on the available view engines in your  application) and cache them at application startup. This means the file system  (or what ever means of storing your views you use) only gets hit once, removing  an expensive traversal from the request/response cycle.&lt;/p&gt;
&lt;p&gt;The second thing we implemented was a cross-engine view cache. This means  that we now cache the compiled, but not initialized, version of a view. Not  having to compile the view on each request was  &lt;em&gt;huge&lt;/em&gt; performance boost.  How big you ask? I&amp;rsquo;ll let you view it with your own eyes.&lt;/p&gt;
&lt;p&gt;&lt;div class='p_embed p_image_embed'&gt;
&lt;a href="http://posterous.com/getfile/files.posterous.com/temp-2011-06-26/uDklAJbcjAgwdnvmhInzcmujnvEwnCvpinywHaaxrmagtHocdvBvizCxghnz/benchmark.jpg.scaled1000.jpg"&gt;&lt;img alt="Benchmark" height="324" src="http://posterous.com/getfile/files.posterous.com/temp-2011-06-26/uDklAJbcjAgwdnvmhInzcmujnvEwnCvpinywHaaxrmagtHocdvBvizCxghnz/benchmark.jpg.scaled500.jpg" width="500" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;I know! Pretty impressive, isn&amp;rsquo;t it. Let me give you some help to understand  what you are seeing. The (M) means master branch and (E) means experimental  branch. While we were working on this we used a different branch so these  benchmarks were taken right before we merged experimental back into master.  There&amp;rsquo;s some fantastic performance improvements across the board, but the one I  would like to highlight is the one for &lt;em&gt;string&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;This means a route that just returns a simple string. Technically this is not  a view, but we used it as a reference point because it&amp;rsquo;s the simplest form of  response. A 28% increase in performance is &lt;em&gt;pure&lt;/em&gt; optimization in the  request/response life cycle and even then it all came down to some small,  clever, changes.&lt;/p&gt;
&lt;p&gt;What? You mean the green bar? Oh! That green bar. Well, turn&amp;rsquo;s out that  hitting &lt;em&gt;csc.exe&lt;/em&gt; on each request can really kill performance really  horrible.&lt;/p&gt;
&lt;p&gt;All in all, we are very happy with the changes we made here.&lt;/p&gt;
&lt;h2&gt;Razor&lt;/h2&gt;
&lt;p&gt;As if the massive performance boost wasn&amp;rsquo;t enough we managed to squeeze in  some very anticipated features. The two big ones are support for partial views  and layouts. We managed to decipher the crypto that is layout support in the  razor parser (poor Steve used reflector more than anyone should have to do in a  single stretch) so the implementation we provide should be wired up like it is  in ASP.NET MVC. There are also some other changes that we have documented &lt;a href="https://github.com/NancyFx/Nancy/wiki/Razor-View-Engine" title="Read the Razor documentation on our wiki" target="_blank"&gt;on  our wiki&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Super-simple view engine&lt;/h2&gt;
&lt;p&gt;The big changes here are added support for partial views and layouts. This  little engine is starting to become quite rich on features but it is still  extremely small and embedded into the Nancy dll, so it is accessible when ever  you are working on a Nancy application.&lt;/p&gt;
&lt;h2&gt;Dotliquid&lt;/h2&gt;
&lt;p&gt;We added a new view engine, this time for the &lt;a href="http://www.dotliquidmarkup.org/" title="Read about dotliquid" target="_blank"&gt;dotliquid&lt;/a&gt; markup  syntax.&lt;/p&gt;
&lt;h2&gt;And Bob&amp;rsquo;s your uncle!&lt;/h2&gt;
&lt;p&gt;That&amp;rsquo;s it! It&amp;rsquo;s not all of it, but that&amp;rsquo;s the essence of it. We did fix bugs,  improve code quality, create more NuGet packages and a lot of small changes as  well. So, if you haven&amp;rsquo;t already, go check it out at &lt;a href="http://nancyfx.org/" title="Visit the Nancy repository" target="_blank"&gt;nancyfx.org&lt;/a&gt; or at the official NuGet feed.&lt;/p&gt;
&lt;p&gt;Until next time, happy coding!&lt;/p&gt;
&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://thecodejunkie.com/nancy-060-saw-the-light-of-day"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://thecodejunkie.com/nancy-060-saw-the-light-of-day#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodeJunkie/~4/1bwyU2ilp2I" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1021495/thecodejunkie.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/he6rwKFhNPr8m</posterous:profileUrl>
        <posterous:firstName>thecodejunkie</posterous:firstName>
        <posterous:lastName />
        <posterous:nickName>thecodejunkie</posterous:nickName>
        <posterous:displayName>thecodejunkie</posterous:displayName>
      </posterous:author>
      <media:content type="image/jpeg" height="450" width="695" url="http://getfile7.posterous.com/getfile/files.posterous.com/temp-2011-06-26/uDklAJbcjAgwdnvmhInzcmujnvEwnCvpinywHaaxrmagtHocdvBvizCxghnz/benchmark.jpg">
        <media:thumbnail height="324" width="500" url="http://getfile3.posterous.com/getfile/files.posterous.com/temp-2011-06-26/uDklAJbcjAgwdnvmhInzcmujnvEwnCvpinywHaaxrmagtHocdvBvizCxghnz/benchmark.jpg.scaled500.jpg" />
      </media:content>
    <feedburner:origLink>http://thecodejunkie.com/nancy-060-saw-the-light-of-day</feedburner:origLink></item>
    <item>
      <pubDate>Fri, 24 Jun 2011 12:52:00 -0700</pubDate>
      <title>Detecting anonymous types on Mono</title>
      <link>http://feedproxy.google.com/~r/TheCodeJunkie/~3/iQ7Ss3d4ciA/detecting-anonymous-types-on-mono</link>
      <guid isPermaLink="false">http://thecodejunkie.com/detecting-anonymous-types-on-mono</guid>
      <description>&lt;p&gt;
	&lt;p&gt;
&lt;p&gt;Little more than a week ago, I sat down to add the possibility of using  anonymous types as models for views in &lt;a href="http://nancyfx.org/" title="Checkout Nancy at Github.com" target="_blank"&gt;Nancy&lt;/a&gt;. Now, since not all view  engines can handle anonymous types as their model I decided I would intercept  them, along the way to the view engine, and convert them into an  &lt;em&gt;ExpandObject&lt;/em&gt; instead.&lt;/p&gt;
&lt;p&gt;In order to do this I needed to detect them first, and after poking around  the reflection API, and use Google + Twitter to confirm it, I came to the  conclusion that there is nothing in there that will tell me if the instance I  have is of an anonymous type or not.&lt;/p&gt;
&lt;p&gt;Then I got a tweet from Joseph Gray, also known at &lt;a href="http://twitter.com/#!/MrJosephGray" title="Visit Joseph Gray on Twitter" target="_blank"&gt;@MrJosephGray&lt;/a&gt; on Twitter, sent me a link to a blog post by &lt;a href="http://jclaes.blogspot.com/" title="Visit the blog of Jef Claes" target="_blank"&gt;Jef Claes&lt;/a&gt; titled &lt;a href="http://jclaes.blogspot.com/2011/05/checking-for-anonymous-types.html" title="Check out the blogpost by Jef Claes on how to check for anonymous types" target="_blank"&gt;Checking for anonymous types&lt;/a&gt; and it contained just what I  needed. It works beautifully, until I ran my code on Mono that is.&lt;/p&gt;
&lt;p&gt;Even though the blog post is not clear on it, I was aware of that the  detection method relies on undocumented naming conventions and no guarantee that  any of the traits, that it checks, won&amp;rsquo;t be changed in the future by Microsoft.  That is also why I was not surprised that there were issues while running it on  Mono.&lt;/p&gt;
&lt;p&gt;After taking the debugger out for a quick spin it was evident that it was the  type name that was the culprit. On Mono (at least on 2.10 that I am running),  the name of the generated type contains &lt;em&gt;AnonType&lt;/em&gt; and not  &lt;em&gt;AnonymousType&lt;/em&gt; and it was a trivial task to patch the extension method  to check for that as well.&lt;/p&gt;
&lt;p&gt;The full implementation that I am using in Nancy is listed below&lt;/p&gt;
&lt;p&gt;&lt;div class="data type-c"&gt;
      &lt;table class="lines" cellspacing="0" cellpadding="0"&gt;
        &lt;tr&gt;
          &lt;td&gt;
            &lt;pre class="line_numbers"&gt;&lt;span rel="#L1" id="L1"&gt;1&lt;/span&gt;
&lt;span rel="#L2" id="L2"&gt;2&lt;/span&gt;
&lt;span rel="#L3" id="L3"&gt;3&lt;/span&gt;
&lt;span rel="#L4" id="L4"&gt;4&lt;/span&gt;
&lt;span rel="#L5" id="L5"&gt;5&lt;/span&gt;
&lt;span rel="#L6" id="L6"&gt;6&lt;/span&gt;
&lt;span rel="#L7" id="L7"&gt;7&lt;/span&gt;
&lt;span rel="#L8" id="L8"&gt;8&lt;/span&gt;
&lt;span rel="#L9" id="L9"&gt;9&lt;/span&gt;
&lt;span rel="#L10" id="L10"&gt;10&lt;/span&gt;
&lt;span rel="#L11" id="L11"&gt;11&lt;/span&gt;
&lt;span rel="#L12" id="L12"&gt;12&lt;/span&gt;
&lt;span rel="#L13" id="L13"&gt;13&lt;/span&gt;
&lt;span rel="#L14" id="L14"&gt;14&lt;/span&gt;
&lt;span rel="#L15" id="L15"&gt;15&lt;/span&gt;
&lt;span rel="#L16" id="L16"&gt;16&lt;/span&gt;
&lt;span rel="#L17" id="L17"&gt;17&lt;/span&gt;
&lt;span rel="#L18" id="L18"&gt;18&lt;/span&gt;
&lt;span rel="#L19" id="L19"&gt;19&lt;/span&gt;
&lt;span rel="#L20" id="L20"&gt;20&lt;/span&gt;
&lt;span rel="#L21" id="L21"&gt;21&lt;/span&gt;
&lt;span rel="#L22" id="L22"&gt;22&lt;/span&gt;
&lt;span rel="#L23" id="L23"&gt;23&lt;/span&gt;
&lt;span rel="#L24" id="L24"&gt;24&lt;/span&gt;
&lt;span rel="#L25" id="L25"&gt;25&lt;/span&gt;
&lt;span rel="#L26" id="L26"&gt;26&lt;/span&gt;
&lt;span rel="#L27" id="L27"&gt;27&lt;/span&gt;
&lt;span rel="#L28" id="L28"&gt;28&lt;/span&gt;
&lt;span rel="#L29" id="L29"&gt;29&lt;/span&gt;
&lt;span rel="#L30" id="L30"&gt;30&lt;/span&gt;
&lt;/pre&gt;
          &lt;/td&gt;
          &lt;td width="100%"&gt;
                &lt;div class="highlight"&gt;&lt;pre /&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Reflection&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC3"&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Runtime.CompilerServices&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC5"&gt;&lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;&lt;span class="c1"&gt;/// Contains miscellaneous extension methods. &lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC7"&gt;&lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC8"&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Extensions&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC9"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC10"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC11"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="c1"&gt;/// Checks if the evaluated instance is an anonymous &lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC12"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC13"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="c1"&gt;/// &amp;lt;param name=&amp;quot;source&amp;quot;&amp;gt;The object instance to check.&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC14"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="c1"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;see langword=&amp;quot;true&amp;quot;/&amp;gt; if the object is an anonymous type; otherwise &amp;lt;see langword=&amp;quot;false&amp;quot;/&amp;gt;.&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC15"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="nf"&gt;IsAnonymousType&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt; &lt;span class="kt"&gt;object&lt;/span&gt; &lt;span class="n"&gt;source&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC16"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC17"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;source&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC18"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC19"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC20"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC21"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC22"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;var&lt;/span&gt; &lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;source&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetType&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC23"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line" id="LC24"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IsGenericType&lt;/span&gt; &lt;/div&gt;&lt;div class="line" id="LC25"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Attributes&lt;/span&gt; &lt;span class="p"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;TypeAttributes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NotPublic&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="n"&gt;TypeAttributes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NotPublic&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC26"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;StartsWith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&amp;lt;&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;StringComparison&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;OrdinalIgnoreCase&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;||&lt;/span&gt; &lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;StartsWith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;VB$&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;StringComparison&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;OrdinalIgnoreCase&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC27"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Contains&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;AnonymousType&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;||&lt;/span&gt; &lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Contains&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;AnonType&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC28"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;Attribute&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IsDefined&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CompilerGeneratedAttribute&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC29"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC30"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
          &lt;/td&gt;
        &lt;/tr&gt;
      &lt;/table&gt;
  &lt;/div&gt;&lt;/p&gt;
&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://thecodejunkie.com/detecting-anonymous-types-on-mono"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://thecodejunkie.com/detecting-anonymous-types-on-mono#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodeJunkie/~4/iQ7Ss3d4ciA" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1021495/thecodejunkie.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/he6rwKFhNPr8m</posterous:profileUrl>
        <posterous:firstName>thecodejunkie</posterous:firstName>
        <posterous:lastName />
        <posterous:nickName>thecodejunkie</posterous:nickName>
        <posterous:displayName>thecodejunkie</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://thecodejunkie.com/detecting-anonymous-types-on-mono</feedburner:origLink></item>
    <item>
      <pubDate>Sat, 18 Jun 2011 01:22:00 -0700</pubDate>
      <title>Nancy on Hanselminutes and the awesome community behind it</title>
      <link>http://feedproxy.google.com/~r/TheCodeJunkie/~3/aj4rIa3pOWE/nancy-on-hanselminutes-and-the-awesome-commun</link>
      <guid isPermaLink="false">http://thecodejunkie.com/nancy-on-hanselminutes-and-the-awesome-commun</guid>
      <description>&lt;p&gt;
	&lt;p&gt;
&lt;p&gt;A week ago I was invited to participate in he &lt;a href="http://hanselminutes.com/" title="Visit the Hanselminutes podcast website" target="_blank"&gt;Hanselminutes postcast&lt;/a&gt; by &lt;a href="http://hanselman.com/" title="Visit the blog of Scott Hanselman" target="_blank"&gt;Scott Hanselman&lt;/a&gt; to talk about &lt;a href="http://nancyfx.org/" title="Visit the Nancy project site" target="_blank"&gt;Nancy&lt;/a&gt; and Micro Web Framework. The recording for episode #270  can be found at &lt;a href="http://hanselminutes.com/default.aspx?showID=290" title="Check out the podcast episode at hanselminutes.com" target="_blank"&gt;Nancy,  Sinatra and the Explosion of .NET Micro Web Frameworks with Andreas  H&amp;aring;kansson&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I had a great time talking to Scott, who is an excellent host, but one thing  I did not get an opportunity to do was to extend my gratitude to the awesome  people that are forming up a community around the project, everybody from the  people that blog, tweet, screencast or in some other way help Nancy grow into an  awesome framework &amp;ndash; so &lt;em&gt;thank you to all of you!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The following people have all contributed to the Nancy repository and have  helped us get many of the awesome features and bug fixes (if your name should be  on this list, but it not, please drop me a line and I will get sorted out!)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://github.com/andypike"&gt;Andy Pike&lt;/a&gt;, &lt;a href="http://github.com/bjartn"&gt;Bjarte Djuvik N&amp;aelig;ss&lt;/a&gt;, &lt;a href="http://github.com/lucisferre"&gt;Chris Nicola&lt;/a&gt;, &lt;a href="http://github.com/davidhong"&gt;David Hong&lt;/a&gt;, &lt;a href="http://github.com/GraemeF"&gt;Graeme Foster&lt;/a&gt;, &lt;a href="http://github.com/gatapia"&gt;Guido Tapia&lt;/a&gt;, &lt;a href="http://github.com/hgarcia"&gt;Hernan Garcia&lt;/a&gt;, &lt;a href="http://github.com/innovatian"&gt;Ian Davis&lt;/a&gt;, &lt;a href="http://github.com/knecke"&gt;Jonas Cannehag&lt;/a&gt;, &lt;a href="http://github.com/jfromaniello"&gt;Jos&amp;eacute; F. Romaniello&lt;/a&gt;, &lt;a href="http://github.com/karlseguin"&gt;Karl Seguin&lt;/a&gt;, &lt;a href="http://github.com/lukesmith"&gt;Luke Smith&lt;/a&gt;, &lt;a href="http://github.com/jameseggers1"&gt;James Eggers&lt;/a&gt;, &lt;a href="http://github.com/meadiagenic"&gt;Jason Mead&lt;/a&gt;, &lt;a href="http://github.com/jeremyskinner"&gt;Jeremy Skinner&lt;/a&gt;, &lt;a href="http://github.com/joaobraganca"&gt;Jo&amp;atilde;o Bragan&amp;ccedil;a&lt;/a&gt;, &lt;a href="http://github.com/johandanforth"&gt;Johan Danforth&lt;/a&gt;, &lt;a href="http://github.com/jtdowney"&gt;John Downey&lt;/a&gt;, &lt;a href="http://github.com/maciejk"&gt;Maciej Kowalewski&lt;/a&gt;, &lt;a href="http://github.com/mpdreamz"&gt;Martijn Laarman&lt;/a&gt;, &lt;a href="http://github.com/mmozuras"&gt;Mindaugas Moz&amp;ucirc;ras&lt;/a&gt;, &lt;a href="http://github.com/patrik-hagne"&gt;Patrik H&amp;auml;gne&lt;/a&gt;, &lt;a href="http://github.com/pmhsfelix"&gt;Pedro Felix&lt;/a&gt;, &lt;a href="http://github.com/pwlodek"&gt;Piotr Wlodek&lt;/a&gt;, &lt;a href="http://github.com/haacked"&gt;Phil Haack&lt;/a&gt;, &lt;a href="http://github.com/robertthegrey"&gt;Robert Greyling&lt;/a&gt;, &lt;a href="http://github.com/ssboisen"&gt;Simon Skov Boisen&lt;/a&gt;, &lt;a href="http://github.com/grumpydev"&gt;Steven Robbins&lt;/a&gt;, &lt;a href="http://github.com/thedersen"&gt;Thomas Pedersen&lt;/a&gt;, &lt;a href="http://github.com/troethom"&gt;Troels Thomsen&lt;/a&gt;, &lt;a href="http://github.com/vidarls"&gt;Vidar L. S&amp;oslash;mme&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I would like to extend a special thank you and shout out to my friend and  co-conspirator &lt;a href="http://www.grumpydev.com/" title="Visit the blog of Steven Robbins a.k.a GrumpyDev" target="_blank"&gt;Steven Robbins&lt;/a&gt; a.k.a &lt;a href="http://twitter.com/#!/grumpydev" title="Checkout GrumpyDev on Twitter" target="_blank"&gt;@GrumpyDev&lt;/a&gt; on Twitter. He is a continuous source of awesome  for Nancy and the project is better for having him onboard, that is one thing I  am certain on. &lt;em&gt;Thank you buddy!&lt;/em&gt;&lt;/p&gt;
&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://thecodejunkie.com/nancy-on-hanselminutes-and-the-awesome-commun"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://thecodejunkie.com/nancy-on-hanselminutes-and-the-awesome-commun#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodeJunkie/~4/aj4rIa3pOWE" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1021495/thecodejunkie.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/he6rwKFhNPr8m</posterous:profileUrl>
        <posterous:firstName>thecodejunkie</posterous:firstName>
        <posterous:lastName />
        <posterous:nickName>thecodejunkie</posterous:nickName>
        <posterous:displayName>thecodejunkie</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://thecodejunkie.com/nancy-on-hanselminutes-and-the-awesome-commun</feedburner:origLink></item>
    <item>
      <pubDate>Sat, 28 May 2011 12:54:00 -0700</pubDate>
      <title>The value of open-source is the vision not the source </title>
      <link>http://feedproxy.google.com/~r/TheCodeJunkie/~3/uB38CNIHz7k/the-value-of-open-source-is-the-vision-not-th</link>
      <guid isPermaLink="false">http://thecodejunkie.com/the-value-of-open-source-is-the-vision-not-th</guid>
      <description>&lt;p&gt;
	&lt;p&gt;
&lt;p&gt;It seem that every 3-5 month or so, the discussion on the state of the .NET  open-source community flairs up. Some say it&amp;rsquo;s a dead horse being beaten, other  that it&amp;rsquo;s a vibrant, thriving community. Sound familiar? Who cares?! Seriously,  who cares? The right thing to do in either case is the exact same thing; keep  injecting more value into it!&lt;/p&gt;
&lt;p&gt;If the movement (if you can call it that) is truly dead, then what? Do we  just roll over and play dead, or do we add more value to it and help breath new  life in to it? If your answer is the former then you are simply not an  open-source kind of guy. Now imagine that it&amp;rsquo;s is, in fact, a vibrant and  thriving community, full of goodies to choose from. What should be do then? Stop  adding value to it since it&amp;rsquo;s already doing well, or do we keep on pushing to  add even more value into it? We keep adding value, of course, if it wasn&amp;rsquo;t  already obvious that would be my answer.&lt;/p&gt;
&lt;p&gt;Alright then, how do we inject move value into it? Contribute to an already  active project or start a new one? It truly depends on your visions. First of  all let me make it perfectly clear that I think diversity is not only a good  thing, but a sign of a healthy community. There is no single &amp;ldquo;silver bullet&amp;rdquo;  that will solve all problems or in a way that out domain requires them to. It&amp;rsquo;s  very rare for a &amp;ldquo;all-in-one&amp;rdquo; solution is the best for your scenario and that&amp;rsquo;s  why I believe opinionated solutions is required.&lt;/p&gt;
&lt;p&gt;Everybody won&amp;rsquo;t agree to a single opinion, it&amp;rsquo;s just not ever going to  happen, so how could a single framework or product be the solution to all  problems we face in our industry? It can&amp;rsquo;t.&lt;/p&gt;
&lt;p&gt;The first thing you should get out of your head is that your source code is  where the gravy is. Sticking to that story won&amp;rsquo;t get your very fare. Any decent  programmer can probably reproduce any functionality with their own  implementation. It might not be as fancy as your solution, but I&amp;rsquo;ll bet you that  it would work well enough to solve the problem they were facing &amp;ndash; they&amp;rsquo;d see to  that.&lt;/p&gt;
&lt;p&gt;So if the value is not in the source code, that you&amp;rsquo;ve spent weeks, maybe  months, perfecting and to work just the way you wanted it to, with all the fancy  solutions and patterns in place, then were is it? It&amp;rsquo;s in the vision of the  source code. The vision is the heart and soul of your project and it&amp;rsquo;s what will  ensure that the project can live on even if you loose interest. It&amp;rsquo;s your  opinions on how things should be done.&lt;/p&gt;
&lt;p&gt;Now, of course, if you vision is nearly the same as the next guy and all you  do is pinch his source code and call it your own thing, then you&amp;rsquo;re just being  an ass hole. I&amp;rsquo;m sorry, but you are. If you have a clear idea on how you thing a  certain set of problems should be solved, that&amp;rsquo;s when you have the foundation  for a nice opinionated solution&amp;hellip;that&amp;rsquo;s the vision of your project.&lt;/p&gt;
&lt;p&gt;The vision of the project should be set in stone before you make the first  public release. Be careful to be blinded by the massive amount of suggestions  and contributions that you might be getting. If they will lead you down a path  that is not true to your vision &amp;ndash; ignore them. Send them a &amp;ldquo;thank you, but this  is not for this project&amp;rdquo; and if they don&amp;rsquo;t like that then they should distil  their visions into their own project. It&amp;rsquo;s impossible to say which would be the  better solution &amp;ndash; heck, why can&amp;rsquo;t both be just as good but suite different  people? Diversity.&lt;/p&gt;
&lt;p&gt;If you nurture the vision of your project well enough and attract equal  minded people then you have started a community and they will make sure the  project stays true to the original vision, trust me. Should you suddenly loose  interest in the project, or for some other reason not be able to commit to the  cause anymore, the community can simply fork and create a new authorities  branch. This has happened time and time again in many of the big open-source  projects.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m happy to say that I keep seeing the diversity in the .NET open-source  community grow as we speak. I keep seeing more and more small, opinionated,  projects pop up and that they are being embraced by a subset of our community as  a whole. Sure, the .NET community has probably quite a bit more to invest in  open-source, but it&amp;rsquo;s getting there and the only way to get there faster is to  be part of the ride!&amp;nbsp;&lt;/p&gt;
&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://thecodejunkie.com/the-value-of-open-source-is-the-vision-not-th"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://thecodejunkie.com/the-value-of-open-source-is-the-vision-not-th#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodeJunkie/~4/uB38CNIHz7k" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1021495/thecodejunkie.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/he6rwKFhNPr8m</posterous:profileUrl>
        <posterous:firstName>thecodejunkie</posterous:firstName>
        <posterous:lastName />
        <posterous:nickName>thecodejunkie</posterous:nickName>
        <posterous:displayName>thecodejunkie</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://thecodejunkie.com/the-value-of-open-source-is-the-vision-not-th</feedburner:origLink></item>
    <item>
      <pubDate>Tue, 05 Apr 2011 10:31:00 -0700</pubDate>
      <title>The Nancy team adds some awesome to the equation</title>
      <link>http://feedproxy.google.com/~r/TheCodeJunkie/~3/Za1Wek26jHY/the-nancy-team-adds-some-awesome-to-the-equat</link>
      <guid isPermaLink="false">http://thecodejunkie.com/the-nancy-team-adds-some-awesome-to-the-equat</guid>
      <description>&lt;p&gt;
	&lt;p&gt;For the past couple of months the number of contributions and modifications  to Nancy have really grown in a nice and organic way. During that time it&amp;rsquo;s  started to be a real task to take care of all outstanding work, maintain the  community presence, work on documentation and all other things that comes with  an open-source project.&lt;/p&gt;
&lt;p&gt;For that reason I have decided that the Nancy team needed to expand and there  was one candidate that stood out in the crowed. He has contributes more awesome  features to Nancy than I can recall, he&amp;rsquo;s the one person I have an ongoing  dialogue with about the progression and vision of the project and I see no  better person to gain commit access to the main repository.&lt;/p&gt;
&lt;p&gt;I am, of course, talking about the lean mean British  &amp;ldquo;I-code-better-on-beer-and-wine&amp;rdquo; machine, Steven Robbins a.k.a &lt;a href="http://twitter.com/grumpydev" title="Check out grumpdev's twitter profile" target="_blank"&gt;@grumpydev&lt;/a&gt;, author of &lt;a href="https://github.com/grumpydev/TinyIoC" title="Check out TinyIoC on github" target="_blank"&gt;TinyIoC&lt;/a&gt; among  things. He also coined the term &amp;ldquo;super-duper-happy-path&amp;rdquo; that we use as a  guiding star on each new feature we design for Nancy.&lt;/p&gt;
&lt;p&gt;Over the next couple of weeks are going to start ironing out all the details  for turning the &lt;a href="http://nancyfx.org/" title="Checkout of the Nancy repository on github" target="_blank"&gt;Nancy repository&lt;/a&gt; into an  organization and moving things out of the core repository, such as the 3rd party  dependencies (they will still be around, but not in the main solution).&lt;/p&gt;
&lt;p&gt;So, welcome aboard Grumpy and thank you for all your hard and amazing work on  Nancy!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://thecodejunkie.com/the-nancy-team-adds-some-awesome-to-the-equat"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://thecodejunkie.com/the-nancy-team-adds-some-awesome-to-the-equat#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodeJunkie/~4/Za1Wek26jHY" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1021495/thecodejunkie.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/he6rwKFhNPr8m</posterous:profileUrl>
        <posterous:firstName>thecodejunkie</posterous:firstName>
        <posterous:lastName />
        <posterous:nickName>thecodejunkie</posterous:nickName>
        <posterous:displayName>thecodejunkie</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://thecodejunkie.com/the-nancy-team-adds-some-awesome-to-the-equat</feedburner:origLink></item>
    <item>
      <pubDate>Fri, 01 Apr 2011 13:34:00 -0700</pubDate>
      <title>Getting fancy with Nancy - Introduction</title>
      <link>http://feedproxy.google.com/~r/TheCodeJunkie/~3/139ipxi_sPk/getting-fancy-with-nancy-introduction</link>
      <guid isPermaLink="false">http://thecodejunkie.com/getting-fancy-with-nancy-introduction</guid>
      <description>&lt;p&gt;
	&lt;p&gt;
&lt;p&gt;Right from very first day that I announced &lt;a href="http://nancyfx.org/" title="Visit Nancy on Github" target="_blank"&gt;Nancy&lt;/a&gt; to the world, the pace that  things have moved forward has been nothing short of amazing. Nancy was always  meant to be developed right out there with the community and let me tell you  that I have not been disappointed, the community answered the call. Pull request  nr. 116 was sent in the other day and over 26 people (with a couple of more  having pending requests) have contributed code to Nancy &amp;ndash; some of them on  multiple occasions.&lt;/p&gt;
&lt;p&gt;Since then Nancy has gained an impressive feature lists such as bootstrapping  capabilities for all the major Inversion of Control containers, view engine  support (spark, razor, ndjango and a Nancy specific engine), hosts for asp.net,  WCF, self-hosting and even one of the (if not THE) first OWIN compatible host,  cookies, sessions, embedded views, pre- and post-request pipeline, security  (authentication and authorization) and many many more. The list keeps on  growing.&lt;/p&gt;
&lt;p&gt;There have also been several individual and companies that have started  writing applications on Nancy, ranging from simple proof of concept applications  to actually taking Nancy into a production environment is software that&amp;rsquo;s sold  to customers. We&amp;rsquo;ve also gotten to see Nancy run on mac and Linux thanks to mono  support and we think that&amp;rsquo;s just awesome!&lt;/p&gt;
&lt;h2&gt;So what&amp;rsquo;s the fuzz all about?!&lt;/h2&gt;
&lt;p&gt;The goal of Nancy is to provide a no fuzz, low ceremony framework for  building web applications. One of the key concepts that&amp;rsquo;s applied when working  on Nancy is that everything should have a &amp;ldquo;super-duper-happy-path&amp;rdquo;  implementation, you shouldn&amp;rsquo;t have to jump though hops to write your websites  there should be a sensible default for everything. Simplicity is key, but not at  the expense of power.&lt;/p&gt;
&lt;p&gt;At first glance you wouldn&amp;rsquo;t know it, but pretty much everything in Nancy is  customizable. It&amp;rsquo;s intentionally been designed to stay out of your way, but  should you find yourself in need to change a specific behavior Nancy will make  it as frictionless as could be.&lt;/p&gt;
&lt;p&gt;Right from the get go, Nancy was built to not rely on a specific environment  to be able to run. We built the concept of host adapters and they site right in  between Nancy and what ever environment she might run on. Out of the box we  currently supply hosts for running on top of ASP.NET, WCF, OWIN and a self-host  (built on httplistner), but the list is sure to expand and writing adapters is  easy.&lt;/p&gt;
&lt;p&gt;There is no dependency, what so ever, on System.Web from the Nancy core  assembly so you can, without any problem, embed Nancy in your applications and  so on. ReST-based end-point in your application? Sure why not?!&lt;/p&gt;
&lt;h2&gt;Bla, bla, bla &amp;ndash; show me the codez!&lt;/h2&gt;
&lt;p&gt;Alrighty then. To give you an idea of how it is to work with Nancy, we will  be building a simple Hello World (surprise!) Nancy web application. The  application will be built to run on ASP.NET, but it could just as easily have  been running on any of the others hosts (just swap it out, no code changes  needed).&lt;/p&gt;
&lt;p&gt;To get started create a new &lt;strong&gt;&lt;em&gt;ASP.NET Empty Web  Application&lt;/em&gt;&lt;/strong&gt; project (don&amp;rsquo;t worry, we have our own project template  but let&amp;rsquo;s skip those and get right to the fun stuff). Once you&amp;rsquo;ve created the  application it&amp;rsquo;s time to grab Nancy. You could visit &lt;a href="http://nancyfx.org/" title="Visit the Nancy respository at github" target="_blank"&gt;out repository&lt;/a&gt; to download the source and build the binaries,  or you could choose the easy way; use &lt;a href="http://nuget.org/" title="Visit the NuGet site" target="_blank"&gt;NuGet&lt;/a&gt; to grab the bits we need.&lt;/p&gt;
&lt;p&gt;We are going to go with the NuGet packages, so grab the  &lt;strong&gt;&lt;em&gt;Nancy.Hosting.Aspnet&lt;/em&gt;&lt;/strong&gt; nuget. Not only will this install  the adapter required to run Nancy on ASP.NET, but it will also register the  adapter in your web.config &lt;em&gt;and&lt;/em&gt; grab the Nancy core nuget.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s it. You have the foundation of a Nancy application running on top of  ASP.NET. Now you need contents. So let&amp;rsquo;s add a module to our project (modules  can be added anywhere in your project, Nancy will find them for you).&lt;/p&gt;
&lt;p&gt;&lt;div class="data type-c"&gt;
      &lt;table class="lines" cellspacing="0" cellpadding="0"&gt;
        &lt;tr&gt;
          &lt;td&gt;
            &lt;pre class="line_numbers"&gt;&lt;span rel="#L1" id="L1"&gt;1&lt;/span&gt;
&lt;span rel="#L2" id="L2"&gt;2&lt;/span&gt;
&lt;span rel="#L3" id="L3"&gt;3&lt;/span&gt;
&lt;span rel="#L4" id="L4"&gt;4&lt;/span&gt;
&lt;span rel="#L5" id="L5"&gt;5&lt;/span&gt;
&lt;span rel="#L6" id="L6"&gt;6&lt;/span&gt;
&lt;span rel="#L7" id="L7"&gt;7&lt;/span&gt;
&lt;span rel="#L8" id="L8"&gt;8&lt;/span&gt;
&lt;span rel="#L9" id="L9"&gt;9&lt;/span&gt;
&lt;/pre&gt;
          &lt;/td&gt;
          &lt;td width="100%"&gt;
                &lt;div class="highlight"&gt;&lt;pre /&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MainModule&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;NancyModule&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;MainModule&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC5"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="n"&gt;Get&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;/&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;parameters&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;Hello World&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC7"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;};&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC9"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
          &lt;/td&gt;
        &lt;/tr&gt;
      &lt;/table&gt;
  &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;What you are looking at is a module that responds to a GET request to the  root path of your application. When an incoming requests matches those  criterion, Nancy will respond with the text &lt;em&gt;&amp;ldquo;Hello World&amp;rdquo;&lt;/em&gt;. Run the  application and verify that I&amp;rsquo;m not kidding you &amp;ndash; it really is as simple as  that!&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s all will show you in this post. In following posts I will be sure to  take you on a journey in the world of Nancy and show you things like POST, PUT,  DELETE and HEAD requests, injecting dependencies into modules, using response  formatters, grabbing parameters from the requested route, complex route syntax,  view engines, model binding, before/after request handling (both on request and  module level) and much, much more.&lt;/p&gt;
&lt;h2&gt;Nancy on the web.&lt;/h2&gt;
&lt;p&gt;If you want to talk about Nancy you can find us on &lt;a href="https://groups.google.com/forum/?pli=1#!forum/nancy-web-framework" title="Visit Nancy on Google Groups" target="_blank"&gt;Google Groups&lt;/a&gt; or on Twitter using the &lt;a href="http://twitter.com/#search?q=%23NancyFx" title="Check out what people are saying about Nancy on Twitter" target="_blank"&gt;#NancyFx&lt;/a&gt; hashtag. You can also reach me on twitter &lt;a href="http://twitter.com/thecodejunkie" target="_blank"&gt;@thecodejunkie&lt;/a&gt;&lt;/p&gt;
&lt;/p&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://thecodejunkie.com/getting-fancy-with-nancy-introduction"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://thecodejunkie.com/getting-fancy-with-nancy-introduction#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodeJunkie/~4/139ipxi_sPk" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1021495/thecodejunkie.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/he6rwKFhNPr8m</posterous:profileUrl>
        <posterous:firstName>thecodejunkie</posterous:firstName>
        <posterous:lastName />
        <posterous:nickName>thecodejunkie</posterous:nickName>
        <posterous:displayName>thecodejunkie</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://thecodejunkie.com/getting-fancy-with-nancy-introduction</feedburner:origLink></item>
    <item>
      <pubDate>Fri, 28 Jan 2011 22:52:00 -0800</pubDate>
      <title>Nancy, the little community-powered framework that could</title>
      <link>http://feedproxy.google.com/~r/TheCodeJunkie/~3/snqQcBQLIWk/nancy-little-community-powered.html</link>
      <guid isPermaLink="false">http://thecodejunkie.com/2011/01/nancy-little-community-powered.html</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Two months ago, on the day, I first &lt;a href="http://elegantcode.com/2010/11/28/introducing-nancy-a-lightweight-web-framework-inspired-by-sinatra/" title="Read the Nancy announcement post" target="_blank"&gt;announced Nancy&lt;/a&gt; here on Elegant Code as my new open-source project. I could never have anticipated the chain of events that would take place during the following two months. My tweet about the blog post got re-tweeted more times than I can remember and the post filled up with, mostly, awesome feedback.&lt;/p&gt;  &lt;p&gt;It took about and week and then Nancy got the first pull request on &lt;a href="https://github.com/thecodejunkie/Nancy" title="Visit Nancy on Github" target="_blank"&gt;her github account&lt;/a&gt; and from there it started to build up momentum quite fast. At the time of this writing there&amp;rsquo;s been 53 pull requests, by about 20 different people, for all kinds of features, bug fixes, custom hosts&amp;hellip; you name it. Not bad, eh?&lt;/p&gt;  &lt;p&gt;Not only that, but Nancy has managed to pull together a nice little community, &lt;a href="https://groups.google.com/forum/#%21forum/nancy-web-framework" title="Visit the Google Group for Nancy" target="_blank"&gt;over at Google Groups&lt;/a&gt;, where the future of Nancy is being discussed every day. She&amp;rsquo;s also getting some attention on Twitter and we&amp;rsquo;re trying to gather it all under the &lt;a href="http://twitter.com/#search%3Fq%3D%23NancyFx" title="Checkout what's being said on Twitter with the #NancyFx hashtag" target="_blank"&gt;#NancyFx&lt;/a&gt; hashtag and seems like every day there is a new face popping up.&lt;/p&gt;  &lt;p&gt;In the initial commit there were a couple of abstractions and light extension points in place for things like custom hosts, view engines and response formatters. These turned out to be a very smart move, because the community really embraced and ran with them. Let me recap some of the things that has happened since day zero&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;
&lt;strong&gt;View engines;&lt;/strong&gt; there are currently support for Spark, Razor, NDjango and Static templates. We did have support for NHaml for a while, but that community seems to have gone into hibernation, so the decision was made to pull it and not waste dev cycles on it until there was a demand &lt;/li&gt;    &lt;li&gt;
&lt;strong&gt;Inversion of Control integration;&lt;/strong&gt; this has been one of the big one. Right from the very first beginning I wanted Nancy to be a self composing framework, that is have a small internal container that glued the framework together at runtime. I also wanted the possibility to register module level dependencies. It took a while and a couple of iterations, but we finally settled on a design and made &lt;a href="https://github.com/grumpydev/TinyIoC" title="Checkout the TinyIoC repository on Github" target="_blank"&gt;TinyIoC&lt;/a&gt; the internal container. It was very important that it was a transparent experience to the end user and unless you have a need for it, you never know it&amp;rsquo;s there. Not only that, but thanks to community contributions we&amp;rsquo;ve managed to create hooks (known as bootstrappers in Nancy) for all of the major players such as StructureMap, Autofac, Unity, Ninject and Windsor. Using one of these container with Nancy is a very easy thing to do and only adds one more file to your project &lt;/li&gt;    &lt;li&gt;
&lt;strong&gt;Response formatters;&lt;/strong&gt; one of the powerful features in Nancy is the response model and how it lets you return different kinds of things and leverages implicit cast operators to hide the complexity behind it. Thanks to the awesome Nancy community we now have the capability to return JSON, XML, images and perform redirect responses. It&amp;rsquo;s super easy to write a response extension and hook it into Nancy, so if you have any ideas&amp;hellip;. &lt;/li&gt;    &lt;li&gt;
&lt;strong&gt;Bug fixes;&lt;/strong&gt; yeah I know, it&amp;rsquo;s shocking, but it&amp;rsquo;s still true. Every now and then someone finds a bug but, more importantly, most of the time the same person is part of contributing a patch to resolve it! &lt;/li&gt;    &lt;li&gt;
&lt;strong&gt;Hosts;&lt;/strong&gt; Nancy has been designed with the idea of being able to run in multiple environments and shipped with a host to run on top of ASP.NET. Right now we have additional hosts for running Nancy on a WCF host and on a stand alone host. There are more of them on the way &lt;/li&gt;    &lt;li&gt;
&lt;strong&gt;HEAD&lt;/strong&gt; &lt;strong&gt;requests; &lt;/strong&gt;the first release of Nancy supported GET, POST, PUT and DELETE requests, but thanks to a clever little contributions she now also serves up HEAD requests &lt;/li&gt;    &lt;li&gt;
&lt;strong&gt;Cookies;&lt;/strong&gt; not he ones you can eat&amp;hellip;. &lt;/li&gt;    &lt;li&gt;
&lt;strong&gt;Cookie based sessions; &lt;/strong&gt;I think this is also self describing.. oh&amp;hellip; yeah they are encrypted in case you were wondering! &lt;/li&gt;    &lt;li&gt;
&lt;strong&gt;Mono;&lt;/strong&gt; we&amp;rsquo;ve started to seriously look at getting Nancy to run on top of the up coming mono 2.10 release (we need the improvements they&amp;rsquo;ve made to the dynamic keyword) and have already managed to run the sample application on both Linux and Mac OSX. Moving forward mono is going to be a supported and equally priorities platform to support &lt;/li&gt;    &lt;li&gt;
&lt;strong&gt;Visual Studio templates&lt;/strong&gt;; these are still work in progress but right now I have the ability to new up a new Nancy project, based on the html5boilerplate &amp;hellip; and we have a bare bone template in the making &lt;/li&gt;    &lt;li&gt;
&lt;strong&gt;Buildscript;&lt;/strong&gt; a couple of days a go we added what every self respecting open-source project needs; a build script. We choose to use Rake (that&amp;rsquo;s a ruby powered format, for those of you that&amp;rsquo;s never seen it before) and make use of the excellent &lt;a href="http://albacorebuild.net/" title="Read more about Albacore on the project website" target="_blank"&gt;Albacore&lt;/a&gt; gem, but the awesome &lt;a href="http://twitter.com/derickbailey" title="Visit Derick Bailey on Twitter" target="_blank"&gt;Derick Bailey&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I&amp;rsquo;ve probably forgotten a bunch of things, there&amp;rsquo;s been so much going on that I can&amp;rsquo;t remember it all without looking at the commit history! That said, there are still things we want to put in place and there are already extensive discussions on the user group about them&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Security &lt;/li&gt;    &lt;li&gt;Content negotiation &lt;/li&gt;    &lt;li&gt;OWIN hosting (we&amp;rsquo;re keeping track of the &lt;a href="https://groups.google.com/forum/#%21forum/net-http-abstractions" title="Read more about OWIN on the .NET Abstractions User Group" target="_blank"&gt;OWIN 1.0&lt;/a&gt; specification) &lt;/li&gt;    &lt;li&gt;Self-hosting (&lt;a href="http://bvanderveen.com/" title="Visit Benjamin van der Veen's website" target="_blank"&gt;Benjamin van der Veen&lt;/a&gt;, if you are reading this &amp;ndash; maybe Kayak can be a candidate!) &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;The one thing that we can&amp;rsquo;t seem to pull of&lt;/h2&gt;  &lt;p&gt;Is to find a designer to design a proper logo for the framework! We are in desperate need to get an awesome logo that we can put everywhere and start creating a website. So if you know any good designers that wouldn&amp;rsquo;t mind putting in some time in designing an awesome logo for an open-source project (read &lt;em&gt;pro bono&lt;/em&gt;) and please tell them about us and about Nancy! A while back I created &lt;a href="https://groups.google.com/d/msg/nancy-web-framework/DlTrYKdBCQI/qCjLvhCdL9MJ" target="_blank"&gt;a post about the Nancy logo&lt;/a&gt; on our user group. It contains some information on the philosophy and goals for a logo for Nancy. I can&amp;rsquo;t stress enough how much I would appreciate if you took this and shared it with your designer friends!&lt;/p&gt;  &lt;p&gt;As always, if you want to ping me either drop me a comment right here on the blog or find me on on Twitter account &lt;a href="http://twitter.com/thecodejunkie" title="Find me on Twitter on my @TheCodeJunkie account" target="_blank"&gt;@TheCodeJunkie&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;hellip; I can&amp;rsquo;t help to wonder what Nancy will be like in another two months! &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img class="posterous_download_image" src="https://blogger.googleusercontent.com/tracker/1066271173424091275-4569345452684634950?l=www.thecodejunkie.com" height="1" alt="" width="1" /&gt;&lt;/div&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://thecodejunkie.com/2011/01/nancy-little-community-powered.html"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://thecodejunkie.com/2011/01/nancy-little-community-powered.html#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodeJunkie/~4/snqQcBQLIWk" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1021495/thecodejunkie.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/he6rwKFhNPr8m</posterous:profileUrl>
        <posterous:firstName>thecodejunkie</posterous:firstName>
        <posterous:lastName />
        <posterous:nickName>thecodejunkie</posterous:nickName>
        <posterous:displayName>thecodejunkie</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://thecodejunkie.com/2011/01/nancy-little-community-powered.html</feedburner:origLink></item>
    <item>
      <pubDate>Mon, 29 Nov 2010 15:09:00 -0800</pubDate>
      <title>MefContrib 1.0.0.0 sees the light of day!</title>
      <link>http://feedproxy.google.com/~r/TheCodeJunkie/~3/4rFyU-ElPrY/mefcontrib-1000-sees-light-of-day.html</link>
      <guid isPermaLink="false">http://thecodejunkie.com/2010/11/mefcontrib-1000-sees-light-of-day.html</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Nearly one and a half years ago I joined the MefContrib as a contributor. Soon after I was given ownership of the projects by the guy that set it up, Bill Kratochvil. Back then MEF was still in its early preview bits and most of the stuff that existed in the MefContrib community were small sample applications on how to use MEF with ASP.NET and so on.&lt;/p&gt;  &lt;p align="left"&gt;A lot has happened since. I am very happy to be able to announce the release of MefContrib 1.0.0.0, we tagged it a couple of days ago in our repository and you can download it from either our &lt;a href="https://github.com/MefContrib" title="Visit our repository at GitHub" target="_blank"&gt;Github repository&lt;/a&gt; or at the download section of our website &lt;a href="http://mefcontrib.com/" title="Visit our website at mefcontrib.com" target="_blank"&gt;mefcontrib.com&lt;/a&gt; (we you also can get builds of the latest check-ins). A good resource for MefContrib related information is our twitter account &lt;a href="http://twitter.com/mefcontrib" title="Visit our Twitter profile at @MefContrib" target="_blank"&gt;@MefContrib&lt;/a&gt;, were we post news and you can also get information when new stuff is committed to the repository. &lt;/p&gt;  &lt;p align="left"&gt;The Github page also contains a sample repository that currently host a couple of applications that shows to use the &lt;em&gt;Convention Model&lt;/em&gt;, a way of using with with conventions instead of attributes, and the &lt;em&gt;InterceptionCatalog&lt;/em&gt;, a catalog that uses strategies and interception hooks &amp;ndash; this enables things like Aspect-Orientated Programming with MEF and it is the catalog that powers all other catalogs in MefContrib.&lt;/p&gt;  &lt;p align="left"&gt;So what can MefContrib 1.0.0.0 add to your MEF toolbox?&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="left"&gt;
&lt;strong&gt;&lt;em&gt;InterceptionCatalog&lt;/em&gt;&lt;/strong&gt; &amp;ndash; This catalog lets your decorate another catalog and provide ways of adding new parts and exports at runtime, as well as to provide it with a set of interception hooks that you can use to modify parts. We ship with hooks for using DynamicProxy and LinFu together with MEF, which opens up for a completely new world of things you can do with MEF. &lt;a href="http://pwlodek.blogspot.com/2010/11/introduction-to-interceptingcatalog.html" title="Visit the blog of Piotr W&amp;#322;odek" target="_blank"&gt;Piotr W&amp;#322;odek&lt;/a&gt; has a very nice introduction post to the InterceptionCatalog that shows how you can use DynamicProxy to weave in new behavior at runtime.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="left"&gt;
&lt;em&gt;&lt;strong&gt;ConventionCatalog&lt;/strong&gt;&lt;/em&gt; &amp;ndash; Removes the need to use attributes when defining parts, import and exports in MEF. You use a convention based approach to let MEF know how to compose the application. This offers some great powers with very little configuration. One interesting thing it also enables you to do, it so import and export things you do not have the source code for (for adding the attributes) or that was previously designed to work with MEF&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="left"&gt;
&lt;strong&gt;&lt;em&gt;FilteringCatalog&lt;/em&gt;&lt;/strong&gt; &amp;ndash; Enables you to use predicates to filter our discovered parts at runtime. For example, filter out parts that carries a specific piece of metadata or has a certain creation policy. Since it is based on a predicate you can write what ever filter you want&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="left"&gt;
&lt;strong&gt;&lt;em&gt;GenericCatalog&lt;/em&gt;&lt;/strong&gt; &amp;ndash; Provides open-generic support in MEF!&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="left"&gt;
&lt;strong&gt;&lt;em&gt;Unity integration&lt;/em&gt;&lt;/strong&gt; &amp;ndash; Provides a bridge between Unity and MEF, enabling both to work together to satisfy dependencies&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="left"&gt;
&lt;strong&gt;&lt;em&gt;FactoryExportProvider&lt;/em&gt;&lt;/strong&gt; &amp;ndash; A custom export provider that let you take charge of the instance creation in MEF. You can read more about the FactoryExportProvider at &lt;a href="http://pwlodek.blogspot.com/2010/10/mef-object-factories-using-export.html" title="Visit the blog of Piotr W&amp;#322;odek to read more about the FactoryExportProvider" target="_blank"&gt;Piotr W&amp;#322;odek's blog&lt;/a&gt;
&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="left"&gt;There are a lot more of small extensions and helpers included in the solution, so get the bits and try it out for your self. Oh, and all of the above also works great in &lt;strong&gt;&lt;em&gt;Silverlight&lt;/em&gt;&lt;/strong&gt;, using our Silverlight version of MefContrib! &lt;/p&gt;  &lt;p align="left"&gt;If you have anything you would like to contribute to MefContrib please let us know! We are also looking for people to participate in other formats other than contributing features. Like most open-source projects, there are a lot things that needs more attention than we are able to give it at the pace that it deserves (not neglecting, just slow to get there).&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Documentation (both code and features) &lt;/li&gt;    &lt;li&gt;
&lt;a href="http://getsatisfaction.com/mefcontrib" title="Report bugs at our getsatifaction community page" target="_blank"&gt;Bug reports&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Bug fixes &lt;/li&gt;    &lt;li&gt;Feature requests &lt;/li&gt;    &lt;li&gt;
&lt;a href="http://mefcontrib.uservoice.com/" title="Visit our UserVoice community page" target="_blank"&gt;Feature implementations&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Test coverage &lt;/li&gt;    &lt;li&gt;Code quality (FxCop, NDepend and so on) &lt;/li&gt;    &lt;li&gt;
&lt;a href="https://github.com/MefContrib/MefContrib-Samples" title="Visit the MefContrib-Samples repository at Github" target="_blank"&gt;Sample applications&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;So there you have it, a ton of MEF goodies for you to play with. We hope you like it and please let us know if you use the stuff in any products, would be awesome to know! &lt;div class='p_embed p_image_embed'&gt;
&lt;img alt="Media_httplh4ggphtcom_djfee" height="19" src="http://getfile2.posterous.com/getfile/files.posterous.com/thecodejunkie/DptAfJABkDBawaJDamufzdmpjECspaCAjsdfByeukJdCDbBimmezauiqFlyG/media_httplh4ggphtcom_DjFee.png.scaled500.png" width="19" /&gt;
&lt;/div&gt;
&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img class="posterous_download_image" src="https://blogger.googleusercontent.com/tracker/1066271173424091275-7393046003216134868?l=www.thecodejunkie.com" height="1" alt="" width="1" /&gt;&lt;/div&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://thecodejunkie.com/2010/11/mefcontrib-1000-sees-light-of-day.html"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://thecodejunkie.com/2010/11/mefcontrib-1000-sees-light-of-day.html#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodeJunkie/~4/4rFyU-ElPrY" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1021495/thecodejunkie.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/he6rwKFhNPr8m</posterous:profileUrl>
        <posterous:firstName>thecodejunkie</posterous:firstName>
        <posterous:lastName />
        <posterous:nickName>thecodejunkie</posterous:nickName>
        <posterous:displayName>thecodejunkie</posterous:displayName>
      </posterous:author>
      <media:content type="image/png" height="19" width="19" url="http://getfile0.posterous.com/getfile/files.posterous.com/thecodejunkie/DptAfJABkDBawaJDamufzdmpjECspaCAjsdfByeukJdCDbBimmezauiqFlyG/media_httplh4ggphtcom_DjFee.png">
        <media:thumbnail height="19" width="19" url="http://getfile2.posterous.com/getfile/files.posterous.com/thecodejunkie/DptAfJABkDBawaJDamufzdmpjECspaCAjsdfByeukJdCDbBimmezauiqFlyG/media_httplh4ggphtcom_DjFee.png.scaled500.png" />
      </media:content>
    <feedburner:origLink>http://thecodejunkie.com/2010/11/mefcontrib-1000-sees-light-of-day.html</feedburner:origLink></item>
    <item>
      <pubDate>Sun, 28 Nov 2010 16:40:00 -0800</pubDate>
      <title>If it kinds looks like a duck, why not just get a duck</title>
      <link>http://feedproxy.google.com/~r/TheCodeJunkie/~3/ABtkD4EaCNg/if-it-kinds-looks-like-duck-why-not.html</link>
      <guid isPermaLink="false">http://thecodejunkie.com/2010/11/if-it-kinds-looks-like-duck-why-not.html</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Shortly after announcing the first drop of &lt;a href="http://elegantcode.com/2010/11/28/introducing-nancy-a-lightweight-web-framework-inspired-by-sinatra/" title="Read the Nancy announcement post" target="_blank"&gt;Nancy&lt;/a&gt;, my friend &lt;a href="http://twitter.com/marknijhof" title="Visit Mark Nijhof on Twitter" target="_blank"&gt;Mark Nijhof&lt;/a&gt; asked me &lt;/p&gt;&lt;blockquote class="posterous_short_quote"&gt;&lt;p&gt;&lt;em&gt;&amp;ldquo;one thing that keeps sounding in the back of my head is; why not use Sinatra instead?&amp;rdquo;&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;The short answer to this is; If it makes more sense for you and your project to use Sinatra, then you should! However it is my experience that it&amp;rsquo;s not always that black and white when it comes the question &lt;em&gt;&amp;ldquo;why don&amp;rsquo;t you use&amp;hellip;?&amp;rdquo;&lt;/em&gt;. The answer really depends on what type of developer you are and the surrounding circumstances.&lt;/p&gt;&lt;p&gt;Now let me clarify that Mark said he liked Nancy and that this was just a feeling he got while reading the post. This post has less to do with Mark and more to the discussion about &amp;ldquo;why don&amp;rsquo;t you use&amp;hellip;?&amp;rdquo; since it is a repeating topic that pop back up every now and then.&lt;/p&gt;&lt;p&gt;Say you are doing contract work, either on your own or at an agency. Here is depends on two things; do you specialize at delivering software on a specific platform or do you target a wider audience? Second, does the client have any demands on the platform and technology stack that you use?&amp;nbsp; So the ability to choose technology stacks in either of these situations should be self evident. If you are in a position where both the client and employer lets you choose the best stack for the project then you are in a sweet position!&lt;/p&gt;&lt;p&gt;Imagine you are working in-house at a product company, should you just be able to pick any technology stack that you feel is the best for the task? Would you let your employees do that if you were the CEO? There are additional costs for training team members and you risk in getting way too many go-to-guys, the people that have a passion for a certain technology. And what if some of these guys were to leave? Then what? It&amp;rsquo;s not that easy to recruite people with cross-technology stack experience, especially those with senior skills in all of them.&lt;/p&gt;&lt;p&gt;I know that at the place where I work it would not be a good idea to start building out products using django, ruby, scala &amp;ndash; whatever &amp;ndash; simply because our organization could not handle it. At least not today. And who knows what it will be like in another year? A couple of years ago we wouldn&amp;rsquo;t have been able to use Kanban efficiently, but we matured over time and today we use it with great success.&lt;/p&gt;&lt;p&gt;I am a firm believer of &lt;em&gt;&amp;ldquo;use the right tool for the job&amp;rdquo;&lt;/em&gt;, but I am very aware that it&amp;rsquo;s not only the framework or programming language that defines what &lt;em&gt;&amp;ldquo;the right tool&amp;rdquo;&lt;/em&gt; is, there are lots of organizational and surrounding factors that all have a play in that.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img class="posterous_download_image" src="https://blogger.googleusercontent.com/tracker/1066271173424091275-2660196019120784013?l=www.thecodejunkie.com" height="1" alt="" width="1" /&gt;&lt;/div&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://thecodejunkie.com/2010/11/if-it-kinds-looks-like-duck-why-not.html"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://thecodejunkie.com/2010/11/if-it-kinds-looks-like-duck-why-not.html#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodeJunkie/~4/ABtkD4EaCNg" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1021495/thecodejunkie.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/he6rwKFhNPr8m</posterous:profileUrl>
        <posterous:firstName>thecodejunkie</posterous:firstName>
        <posterous:lastName />
        <posterous:nickName>thecodejunkie</posterous:nickName>
        <posterous:displayName>thecodejunkie</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://thecodejunkie.com/2010/11/if-it-kinds-looks-like-duck-why-not.html</feedburner:origLink></item>
    <item>
      <pubDate>Sun, 28 Nov 2010 14:55:00 -0800</pubDate>
      <title>Introducing Nancy, a lightweight web framework inspired by Sinatra</title>
      <link>http://feedproxy.google.com/~r/TheCodeJunkie/~3/oKXYe7-epnM/introducing-nancy-lightweight-web.html</link>
      <guid isPermaLink="false">http://thecodejunkie.com/2010/11/introducing-nancy-lightweight-web.html</guid>
      <description>&lt;p&gt;
	&lt;p&gt;For a couple of weeks I have been keeping myself busy with open-source stuff. One of the things has been to spike out a web framework idea and later on turn it into a real project. The project is inspired, but not a clone, by the Sinatra web framework built on Ruby. The name, Nancy, is a reference to Nancy Sinatra, the daughter of Frank Sinatra.&lt;/p&gt;  &lt;p&gt;There are quite of lot of things that I want to put into the framework, but it is functional in its current state. One of the goals for Nancy is to make it run on other environment and platforms, other than ASP.NET / IIS and there are spikes taking place to run it on &lt;a href="http://mono-project.com/" title="Read more about the mono project at their webpage" target="_blank"&gt;Mono&lt;/a&gt; with &lt;a href="http://en.wikipedia.org/wiki/FastCGI" title="Read more about FastCGI on wikipedia" target="_blank"&gt;FastCGI&lt;/a&gt;, making it possible to run on a bunch of other platforms. However, although this is the goal, the current source code does not provide any helpers to make that possible. Right now it only ships with an IHttpHandler that acts as an adaptor between ASP.NET / IIS and the Nancy engine.&lt;/p&gt;  &lt;p&gt;The project is built using C# and makes use of &lt;a href="http://xunit.codeplex.com/" title="Visit the xUnit project website" target="_blank"&gt;xUnit&lt;/a&gt;, &lt;a href="https://github.com/machine/machine.specifications" title="Visit the MSpec project website" target="_blank"&gt;MSpec&lt;/a&gt; and &lt;a href="http://code.google.com/p/fakeiteasy/" title="Visit the FakeItEasy project website" target="_blank"&gt;FakeItEasy&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The key component in a Nancy application is the modules. This is where you create actions, which are handlers for a given request type at a given path. Let me show you what I mean&lt;/p&gt;  &lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;public class Module : NancyModule{    public Module()    {        Get[&amp;quot;/&amp;quot;] = parameters =&amp;gt; {            return &amp;quot;This is the site route&amp;quot;;        };        Delete[&amp;quot;/product/{id}&amp;quot;] = parameters =&amp;gt; {            return string.Concat(&amp;quot;You requested that the following product should be deleted: &amp;quot;, parameters.id);        };    }}&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p /&gt;&lt;p&gt;What you are looking at here is the foundation of a very small application that will responde to GET requests to the root URL of the site, and DELETE requests to &lt;em&gt;/products/{id}&lt;/em&gt; where &lt;em&gt;{id}&lt;/em&gt; is a parameter placeholder. All parameters will be captured and injected into the action, like you see with &lt;em&gt;parameters.id&lt;strong&gt;.&lt;/strong&gt;&lt;/em&gt;The entire route handling mechanism is swappable, so you could write your own handler that were able to interpreted the route syntax that you prefer. A module can also be declared with a &lt;em&gt;module path&lt;/em&gt;, meaning that all action routes, that you declare in the module, will be relative the module path. &lt;/p&gt;&lt;p /&gt;&lt;p&gt;For example if you were to do&lt;/p&gt;&lt;p /&gt;&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;public class Module : NancyModule{    public Module() : base(&amp;quot;/foo&amp;quot;)    {        Get[&amp;quot;/&amp;quot;] = parameters =&amp;gt; {            return &amp;quot;This is the site route&amp;quot;;        };        Delete[&amp;quot;/product/{id}&amp;quot;] = parameters =&amp;gt; {            return string.Concat(&amp;quot;You requested that the following product should be deleted: &amp;quot;, parameters.id);        };    }}&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p /&gt;&lt;p&gt;The the application would respond to requests sent to &lt;em&gt;/foo&lt;/em&gt; and &lt;em&gt;/foo/product/{id}&lt;/em&gt;. You can of course have as many modules as you want. Nancy will detect them all and figure out which action that should be invoked. There are also some nice ticks in there for return values. In the examples above you get the impression that you are expected to return a &lt;em&gt;string&lt;/em&gt;, and this is not the case. In fact each action returns an instance of a &lt;em&gt;Response&lt;/em&gt; type. What you are seeing is the result of some implicit cast operators. There are a couple of them declared&lt;/p&gt;&lt;p /&gt;&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;public class Module : NancyModule{    public Module()    {        Get[&amp;quot;/&amp;quot;] = parameters =&amp;gt; {            return &amp;quot;Returning a string&amp;quot;;        };        Get[&amp;quot;/404&amp;quot;] = parameters =&amp;gt; {            return 404;        };        Get[&amp;quot;/500&amp;quot;] = parameters =&amp;gt; {            return HttpStatusCode.NotFound;        };    }}&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p /&gt;&lt;p&gt;All of these will work and send back a valid HttpResponse (including headers) to the client. You can of course explicitly return a &lt;em&gt;Response&lt;/em&gt; instance which opens up for some nice customization. A module in Nancy also declares a pair of properties called &lt;em&gt;View&lt;/em&gt; and &lt;em&gt;Response&lt;/em&gt;. Both of these have an interface return type and each of them are empty marker interfaces that you can use to wire up extension methods. The &lt;em&gt;View&lt;/em&gt; property is meant to be used for view engine integration and in an unpublished spike (still needs some more work) I&amp;rsquo;ve wired up the &lt;a href="http://www.sparkviewengine.com/" title="Read more about the spark viewengine" target="_blank"&gt;http://www.sparkviewengine.com/&lt;/a&gt; so that Nancy is able to process spark files. This is an example of what that looks like&lt;/p&gt;&lt;p /&gt;&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;public class SparkModule : NancyModule{    public SparkModule()    {        Get[&amp;quot;/user/{name}&amp;quot;] = parameters =&amp;gt; {            return View.Spark(&amp;quot;user.spark&amp;quot;, parameters);        };    }}&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p /&gt;&lt;p&gt;Of course all of this is work in progress and the syntax might change. The goal is to support all of the popular view engines and if you are up to the task of implementing support for one of those, please let me know &amp;ndash; I would love the help!&lt;/p&gt;&lt;p /&gt;&lt;p&gt;The &lt;em&gt;Response&lt;/em&gt; property is meant to be used for extensions that help format the response in different ways. A test I have running locally is an extension method that enables me to return json formatted data.&lt;/p&gt;&lt;p /&gt;&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;public class JsonModule : NancyModule{    public JsonModule()    {        Get[&amp;quot;/user/{name}&amp;quot;] = parameters =&amp;gt; {            return Response.AsJson(someObject);        };    }}&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p /&gt;&lt;p&gt;Of course I would like for Nancy to ship with a healthy set of these response helpers, so feel free to chip in! &lt;/p&gt;&lt;p /&gt;&lt;p&gt;Oh, there is one last property that you can use and that is the &lt;em&gt;Request&lt;/em&gt; property which gives you access to the current request information, so that you can use it from inside of your action handlers. Right now it is limited to the requested path and verb, but the goal is to have a rich representation of the current request &amp;ndash; what stuff would you like to see in it?&lt;/p&gt;&lt;p /&gt;&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;public class RequestModule : NancyModule{    public RequestModule()    {        Get[&amp;quot;/&amp;quot;] = parameters =&amp;gt; {            return string.Format(&amp;quot;You requested {0}&amp;quot;, Request.Path);        };    }}&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p /&gt;&lt;p&gt;One thing I would like to mention about the action handlers and their routes. If there are two or more routes that are a match to the current request, Nancy is going to select the one that has the most matching &lt;em&gt;static path segments&lt;/em&gt; before a parameter placeholder is reached (but all segment has to be filled!). What does this mean? Take the following routes&lt;/p&gt;&lt;p /&gt;&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;/foo/{value}/foo/bar/{value}&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p /&gt;&lt;p&gt;The first route has one static path segment (/foo) and the second one has two (/foo/bar). So for a request to&lt;/p&gt;&lt;p /&gt;&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;/foo/bar&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p /&gt;&lt;p&gt;The first route will be selected, but for&lt;/p&gt;&lt;p /&gt;&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;/foo/bar/baz&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p /&gt;&lt;p&gt;the second route will be selected. It also important to understand that in Nancy, all path parameters are greedy, not like in ASP.NET MVC where you can have one greedy (indicated by a star *) and has to be at the end. If you define a route&lt;/p&gt;&lt;p /&gt;&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;/foo/{value1}/bar/{value2}you can invoke it with&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p /&gt;&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;/foo/this/is/some/segments/bar/and/then/some/more&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p /&gt;&lt;p&gt;and you will end up with&lt;/p&gt;&lt;p /&gt;&lt;div class="CodeRay"&gt;
  &lt;div class="code"&gt;&lt;pre&gt;{value1} = /this/is/some/segments{value2} = /and/then/some/more&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p /&gt;&lt;p&gt;Of course, like I said before, this is how the default route handler works and if you don&amp;rsquo;t like it you can write your own, all you have to do is implement a single interface and tell Nancy to use it. &lt;/p&gt;&lt;p /&gt;&lt;p&gt;So before I end this post, let me tell you about some of the things that are planned to be included in Nancy as soon as possible&lt;/p&gt;&lt;p /&gt;&lt;ul&gt;
&lt;br /&gt;  &lt;li&gt;A much richer request object. Nancy uses it&amp;rsquo;s own Request object and is not tied down the the one found in ASP.NET. I want to support a rich and easy to use model for request information. If you have any suggestions on the structure of this object, please let me know &lt;/li&gt;
&lt;p /&gt;  &lt;li&gt;The ability to inject dependencies into Nancy modules. I want you to be able to wire up Nancy to use your favorite IoC and have Nancy resolve constructor dependencies of Nancy modules &lt;/li&gt;
&lt;p /&gt;  &lt;li&gt;Conditions on actions. I want to add an optional predicate on actions like &lt;em&gt;Get[&amp;ldquo;/foo&amp;rdquo;, () =&amp;gt; somePredicate]&lt;/em&gt;, to give Nancy the ability to select actionsat runtime. For example you might have two identical actions define, but you add a predicate on one of them that made sure that it was only selected if the client was a mobile device. Actions that has a predicate defines should have higher priority than those that do not &lt;/li&gt;
&lt;p /&gt;  &lt;li&gt;View engine integration. Like I said, the Nancy modules comes with the &lt;em&gt;View&lt;/em&gt; property, which is of the type &lt;em&gt;IViewEngine,&lt;/em&gt; where you can hook up view engine support. All you need is an adapter that returns a string (or a Response instance). Please let me know if you want to chip in and help wire up one or more view engines &lt;/li&gt;
&lt;p /&gt;  &lt;li&gt;Ship with a nice bunch of response formatters. These are created by attaching extension methods to the &lt;em&gt;IResponseFormatter&lt;/em&gt; interface, which is the property type of the &lt;em&gt;Response&lt;/em&gt; property on a Nancy module. I think the formatters should follow a naming convention where you name them &lt;em&gt;As&amp;lt;something&amp;gt;&lt;/em&gt; &lt;/li&gt;
&lt;p /&gt;  &lt;li&gt;Self-composed framework. What is mean with this is that I want to build Nancy on top of a tiny, internal, IoC that is used to compose the framework at runtime. It should be exposed in a simple way so that you could swap out components (such as the route matcher, or module discovery mechanism) as you please &lt;/li&gt;
&lt;p /&gt;  &lt;li&gt;Request and Response interception. The idea is to provide a lightweight way to intercept Nancy requests before they hit the Nancy application and let you either pass the request to the Nancy application or prematurely send back a reply. Combines with the ability to intercept Responses sent by the Nancy application, it should give a nice way of extending Nancy with features like logging and caching. You can think of this as a sort of IHttpModule mechanism &lt;/li&gt;
&lt;p /&gt;  &lt;li&gt;NuGet presence&lt;/li&gt;
&lt;p /&gt;  &lt;li&gt;Command line (powershell?) support for spawning up a Nancy application project&lt;/li&gt;
&lt;p /&gt;  &lt;li&gt;Provide self-hosting somehow&lt;/li&gt;
&lt;br /&gt;
&lt;/ul&gt;&lt;p /&gt;&lt;p&gt;There are a bunch of other stuff I have in my head, but I have to give them some more thought to distil proper ideas from them. But please, let me know if you can think of anything more! I want to keep Nancy lightweight and easy to use, so it will probably never be as open-ended as ASP.NET MVC, FubuMVC or Manos de Mano &amp;ndash; but we&amp;rsquo;ll have to wait and see!&lt;/p&gt;&lt;p /&gt;&lt;p&gt;You can find the source code at &lt;a href="https://github.com/thecodejunkie/Nancy" title="Visit the Nancy repository at GitHub" target="_blank"&gt;my Nancy repository at GitHub&lt;/a&gt;. You can also reach me on Twitter at &lt;a href="http://twitter.com/thecodejunkie" title="Visit me on Twitter" target="_blank"&gt;@TheCodeJunkie&lt;/a&gt;. If you want to talk about Nancy drop me a line in the comments or on Twitter and we can move onto e-mail, gtalk, skype or messenger if needed! I hope you like where Nancy is going!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img class="posterous_download_image" src="https://blogger.googleusercontent.com/tracker/1066271173424091275-1649913188784476890?l=www.thecodejunkie.com" height="1" alt="" width="1" /&gt;&lt;/div&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://thecodejunkie.com/2010/11/introducing-nancy-lightweight-web.html"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://thecodejunkie.com/2010/11/introducing-nancy-lightweight-web.html#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodeJunkie/~4/oKXYe7-epnM" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1021495/thecodejunkie.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/he6rwKFhNPr8m</posterous:profileUrl>
        <posterous:firstName>thecodejunkie</posterous:firstName>
        <posterous:lastName />
        <posterous:nickName>thecodejunkie</posterous:nickName>
        <posterous:displayName>thecodejunkie</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://thecodejunkie.com/2010/11/introducing-nancy-lightweight-web.html</feedburner:origLink></item>
    <item>
      <pubDate>Wed, 17 Nov 2010 08:38:00 -0800</pubDate>
      <title>My take on the Øredev 2010 conference</title>
      <link>http://feedproxy.google.com/~r/TheCodeJunkie/~3/lQy1Z9A3--U/my-take-on-redev-2010-conference.html</link>
      <guid isPermaLink="false">http://thecodejunkie.com/2010/11/my-take-on-redev-2010-conference.html</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Last week was the at the 6th annual installment of the &lt;a href="http://oredev.com/" title="Visit the &amp;Oslash;redev website" target="_blank"&gt;&amp;Oslash;redev&lt;/a&gt; developer conference in Malm&amp;ouml;, Sweden. I was able to attend Wednesday thru Friday and had the opportunity to listen to a lot of great talks and have a lot of interesting conversations with the attendees. Being on its 6th year means that the conference should have had time to find its style and settle in &amp;ndash; and let me tell you right now that it has defiantly done that.&lt;/p&gt;  &lt;p&gt;The theme for this years conference was &lt;strong&gt;&lt;em&gt;Get Real&lt;/em&gt;&lt;/strong&gt;, that is described by the organizers as &lt;em&gt;&amp;rdquo;will shine a light on how to stay in balance, between today&amp;rsquo;s realities and tomorrow&amp;rsquo;s possibilities while the universe is in constant motion.&amp;rdquo;&lt;/em&gt;. Their way of doing that was by providing a total of 13 awesome tracks which were Java, .NET, Smart phones, Architecture, Cloud &amp;amp; nosql, Patterns, Web development, Social media, Agile, Collaboration, Realizing business ides, Software craftsmanship and the Xtra(ck).&lt;/p&gt;  &lt;p&gt;The Xtra(ck) was this years little experiment and provided alternative sessions such as &lt;em&gt;&amp;ldquo;Understanding Hypnosis&amp;rdquo;&lt;/em&gt;, &lt;em&gt;&amp;ldquo;The taste of coffee&amp;rdquo;&lt;/em&gt;, &lt;em&gt;&amp;ldquo;The language of MIDI and its application&amp;rdquo;&lt;/em&gt;, &lt;em&gt;&amp;ldquo;Photo walk!&amp;rdquo;&lt;/em&gt; and many many more. I never attended any of these, there were just too many things I wanted to attend while at the conference, but hopefully they&amp;rsquo;ll keep the concept for next year and maybe I will get the opportunity to checkout a couple of sessions then.&lt;/p&gt;  &lt;p&gt;This yeas 1400 people attended the conference, an impressive 40% increase in people compared to last year where the head count was about a 1000 people. That is quite an effort and the best part is that you did not notice any rapid growing pains at all, everything felt just as well organized as I&amp;rsquo;ve come to expect out of this conference.&lt;/p&gt;  &lt;p&gt;One thing that worries me up front was the change of venue for this years conference. The change was necessary since the old venue is being knocked down, so that was not a viable option this year. The new venue was the &lt;a href="http://sv.wikipedia.org/wiki/Slagthuset" title="Visit the wikipedia page for Slagthuset (in Swedish)" target="_blank"&gt;Slagthuset&lt;/a&gt; (Swedish wikipedia entry) and it was able to house all of the attendees without feeling over crowded.&lt;/p&gt;  &lt;p&gt;The one complaint I (and probably the rest of the attendees) have was that, because of how the large halls of the building were split into temporary session rooms by the help of temporary walls, the sound of the neighboring sessions bleed over to the one you were attending. It was not bad to the point where you were unable to follow along, but it was definitely noticeable. I hope this is resolved next year!&lt;/p&gt;  &lt;h2&gt;The keynotes&lt;/h2&gt;  &lt;p&gt;Each of the conference days started of with a keynote, and If I had to pick one area where this years conference really excelled, I would have to say the keynotes. This year they definitely out did themselves and lines up an awesome lines of speakers.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Dr. Jeffery Norris of NASA Jet Propulsion Lab&lt;/strong&gt;, was the Wednesday speakers and talked about &lt;strong&gt;Mission-Critical Agility&lt;/strong&gt;. In his talk he told the story about Alexander Graham Bell and how he invented the telephone. He talked about how Vision, Risk and Commitment are important parts of Mission-Critical Agility and intertwined those into the story of Alexander Graham Bell. He also talked about how NASA committed to being first with putting a man on the moon and how the lunar project ended up about not choosing the solution that seemed the most simple at first, but actually ending up picking the one that sounded like crazy talk. In the part about the lunar landing he made use of augmented reality with the help of &lt;a href="http://www.youtube.com/watch?v=TqGAqAFlGg0" title="View the youtube clip about ARTToolKit" target="_blank"&gt;ARTToolKit&lt;/a&gt; to visualize the complexity of the task. Check out the &lt;a href="http://www.youtube.com/watch?v=T4XCf0yITDw" title="View the youtube clip of Dr. Jeff Norris using augmented reality at his &amp;Ouml;redev 2010 keynote talk" target="_blank"&gt;this youtube clip&lt;/a&gt; to see parts of what he did.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;John Seddon&lt;/strong&gt; had been invited as the Thursday keynote speaker and talked about &lt;strong&gt;Re-thinking IT&lt;/strong&gt;. It can more of less be summed up as talk on how we as developers let IT get in the way of the real problems. How we often propose solutions to problems that do not yet exist. He talked about how we should focus on solving the business problems first and then moving them into IT, and not the other way around. A very well delivered talk, completely without slides! All of the attendees got his book &lt;em&gt;Freedom from command and control&lt;/em&gt; as part of their &amp;Oslash;redev goodie bag!&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Nolan Bushnell&lt;/strong&gt; spent his time as the Friday keynote speaker by talking about&lt;strong&gt; The then mega software project for the next 20 years&lt;/strong&gt;. This is the same guy that founded the Atari Corporation and has been called the father of the video game industry. More or less a legend In our field and a very good public speaker. He talked about some of the big projects that we will be facing in the next ten years and the impact they will have in our industry and as a society at large.&lt;/p&gt;  &lt;h2&gt;The sessions&lt;/h2&gt;  &lt;p&gt;With a 3-day conference, consisting of 8 parallel tracks each day and 5-6 sessions each day (Friday had one less session than the other two days) it would be too much information to tell you exactly which sessions I attended and what my reflections of them were. For the most part all the sessions were great, there were only one that I walked out of.&lt;/p&gt;  &lt;p&gt;There was always something coming up on the agenda that you wanted to attend and in many cases there were conflicting sessions. The good news is that all sessions were recorded and will be made available on the &amp;Oslash;redev website over the next couple of weeks. So for me the conference is not really over, there are a bunch of sessions I want to watch and a couple that I would like to re-watch again!&lt;/p&gt;  &lt;p&gt;I was also happy to see that the listener participation was quite high this year. There were many sessions where people asked a lot of questions during the talk and occasionally stepped up to help answer questions that caught the speakers of guard. I guess this is what you get in an open environment such as the one that &amp;Oslash;redev delivers.&lt;/p&gt;  &lt;p&gt;As always the conference uses the Red-Yellow-Green session evaluation system. Basically this is a very simple way for attendees to tell the speaker what they thought about the session. When you leave the room you are given the option of placing a red, yellow or green card in a box and that is it. I think the colors are self explaining so I will not go into any details on their meaning. I know that I personally hate filling in evolution forms, especially when you are going to attend almost 20 sessions in 3 days.&lt;/p&gt;  &lt;h2&gt;The highlight&lt;/h2&gt;  &lt;p&gt;To me, the single biggest highlight of this years conference is neither the sessions or the keynotes, even though both of them were excellent. The highlight this year is the fact that I got the opportunity to meet up with a lot of people that flew in from other parts of the world. Some I knew from before, others I have only known on &lt;a href="http://twitter.com/thecodejunkie" title="Visit my twitter account @thecodejunkie" target="_blank"&gt;my twitter account&lt;/a&gt; or on IM for a long time now. &lt;/p&gt;  &lt;p&gt;Some of the people that I got to hang out with this year were &lt;a href="http://twitter.com/#%21/gblock" title="Visit Glenn Block on twitter" target="_blank"&gt;Glenn Block&lt;/a&gt;, &lt;a href="http://twitter.com/#%21/jeremydmiller" title="Visit Jeremy D. Miller on twitter" target="_blank"&gt;Jeremy D. Miller&lt;/a&gt;, &lt;a href="http://twitter.com/#%21/hhariri" title="Visit Hadi Hariri on twitter" target="_blank"&gt;Hadi Hariri&lt;/a&gt;, &lt;a href="http://twitter.com/#%21/philiplaureano" title="Visit Philip Laureano on twitter" target="_blank"&gt;Philip Laureano&lt;/a&gt;, &lt;a href="http://twitter.com/#%21/robashton" title="Visit Rob Ashton on twitter" target="_blank"&gt;Rob Ashton&lt;/a&gt;, &lt;a href="http://twitter.com/#%21/bradwilson" title="Visit Brad Wilson on twitter" target="_blank"&gt;Brad Wilson&lt;/a&gt; whom all are awesome developers and people I have great respect for. There were a lot of good discussions and casual chit-chat during the 3-days at the conference.&lt;/p&gt;  &lt;p&gt;However, the single biggest highlight was not part of the actual conference it self. On Monday I had the opportunity to take a day of work and spend the day with a long time friend, Glenn Block. Him living in the US and me living in Sweden does not give a lot of opportunities to hang out for a full day. Fortunately Glenn flew in early to the conference and took the train to the city where I live. He got the opportunity to meet my wife and kids, have a look around the city, visit the place where I work and see some of the things we do, get an introduction to the &lt;a href="http://code.google.com/p/fakeiteasy" title="Visit the FakeItEasy project website" target="_blank"&gt;FakeItEasy&lt;/a&gt; mocking framework (developed by a guy I work with, &lt;a href="http://ondevelopment.blogspot.com/" title="Visit the blog of Patrik H&amp;auml;gne" target="_blank"&gt;Patrik H&amp;auml;gne&lt;/a&gt; and used in our daily work) and show us some of the REST stuff he is working with. All in all, an awesome day.&lt;/p&gt;  &lt;h2&gt;Summary&lt;/h2&gt;  &lt;p&gt;To sum it it, this years conference was great and I already look forward to next year! If you get the opportunity to visit the conference I would highly recommend that you take it. It is quickly getting known for a high-quality conference and I do not see that ending anytime soon. So thank you to everyone, the organizers, the speakers, the attendees and even all the people that works behind the scenes to make who made this possible, for making this year just as awesome as expected! &lt;/p&gt;  &lt;p&gt;I will see you next year!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img class="posterous_download_image" src="https://blogger.googleusercontent.com/tracker/1066271173424091275-4418934866988030564?l=www.thecodejunkie.com" height="1" alt="" width="1" /&gt;&lt;/div&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://thecodejunkie.com/2010/11/my-take-on-redev-2010-conference.html"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://thecodejunkie.com/2010/11/my-take-on-redev-2010-conference.html#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodeJunkie/~4/lQy1Z9A3--U" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1021495/thecodejunkie.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/he6rwKFhNPr8m</posterous:profileUrl>
        <posterous:firstName>thecodejunkie</posterous:firstName>
        <posterous:lastName />
        <posterous:nickName>thecodejunkie</posterous:nickName>
        <posterous:displayName>thecodejunkie</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://thecodejunkie.com/2010/11/my-take-on-redev-2010-conference.html</feedburner:origLink></item>
    <item>
      <pubDate>Sat, 13 Nov 2010 21:53:00 -0800</pubDate>
      <title>Could sealing a class be a sign of a good design</title>
      <link>http://feedproxy.google.com/~r/TheCodeJunkie/~3/PLZRVxyBshQ/could-sealing-class-be-sign-of-good.html</link>
      <guid isPermaLink="false">http://thecodejunkie.com/2010/11/could-sealing-class-be-sign-of-good.html</guid>
      <description>&lt;p&gt;
	&lt;p&gt;I recently attended this years &lt;a href="http://oredev.com/2010" title="Read more about the &amp;Oslash;redev conference" target="_blank"&gt;&amp;Oslash;redev&lt;/a&gt; conference and one of the things I had the good fortune of doing was to meet-up with a long time twitter friend, &lt;a href="http://twitter.com/philiplaureano" title="Visit the twitter profile of Philip Laureano" target="_blank"&gt;Philip Laureano&lt;/a&gt;. One of the days me and Philip started talking about a previous discussion he had with another attendee (whom shall remain nameless since I do not know the full details of his exact opinions). Anyway, the short version is that the person suggested that classes should be sealed by default, or at least have the developer explicitly state if the class should be sealed or closed.&lt;/p&gt;  &lt;p&gt;My immediate reaction was that this was a terrible idea and that I had been struck down too many times by sealed classes before. But then I started thinking that maybe it was not such a bad idea after all. Maybe it even was a sign of a well designed class and that more developers would be better of by sealing their classes.&lt;/p&gt;  &lt;p&gt;Now let me inform you that I am still on the ropes about this, but I would like your thoughts on it. In fact I am hoping that the most interesting part of this post will end up being the discussion in the comment section.&lt;/p&gt;  &lt;p&gt;So when you take a moment to think about the &lt;em&gt;S.O.L.I.D principles&lt;/em&gt;, most specifically the &lt;em&gt;Open-Closed Principle&lt;/em&gt; and &lt;em&gt;Dependency Inversion Principle&lt;/em&gt;, a long with the old design principle of &amp;lsquo;Favor &lt;a href="http://en.wikipedia.org/wiki/Object_composition"&gt;object composition&lt;/a&gt; over &lt;a href="http://en.wikipedia.org/wiki/Inheritance_%28computer_science%29"&gt;class inheritance&lt;/a&gt;&amp;rsquo; then maybe it is not such a bad thing after all. Throw in interfaces into the mix and program to an interface and not an implementation, and it will enables you to create different branches if needed. If your classes can flourish while being sealed, chances are that you have some pretty nice structures code in your hands.&lt;/p&gt;  &lt;p&gt;There probably are some legit reasons to not seal classes at time, despite the reasoning above, so I am not going to be definitive and say that is never the case. Voice your thoughts in the comments and let us see where this ends up &amp;ndash; who knows, I might be left standing as a fool!&lt;/p&gt;  &lt;p&gt;As always, you can find me on twitter by the name of &lt;a href="http://twitter.com/thecodejunkie" title="Visit me on twitter" target="_blank"&gt;@thecodejunkie&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img class="posterous_download_image" src="https://blogger.googleusercontent.com/tracker/1066271173424091275-2500633657017243944?l=www.thecodejunkie.com" height="1" alt="" width="1" /&gt;&lt;/div&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://thecodejunkie.com/2010/11/could-sealing-class-be-sign-of-good.html"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://thecodejunkie.com/2010/11/could-sealing-class-be-sign-of-good.html#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodeJunkie/~4/PLZRVxyBshQ" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1021495/thecodejunkie.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/he6rwKFhNPr8m</posterous:profileUrl>
        <posterous:firstName>thecodejunkie</posterous:firstName>
        <posterous:lastName />
        <posterous:nickName>thecodejunkie</posterous:nickName>
        <posterous:displayName>thecodejunkie</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://thecodejunkie.com/2010/11/could-sealing-class-be-sign-of-good.html</feedburner:origLink></item>
    <item>
      <pubDate>Fri, 05 Nov 2010 11:03:00 -0700</pubDate>
      <title>Moving your global .gitconfig file</title>
      <link>http://feedproxy.google.com/~r/TheCodeJunkie/~3/DIVdVjUQlm4/moving-your-global-gitconfig-file.html</link>
      <guid isPermaLink="false">http://thecodejunkie.com/2010/11/moving-your-global-gitconfig-file.html</guid>
      <description>&lt;p&gt;
	&lt;p&gt;I am using &lt;a href="http://code.google.com/p/msysgit/" title="Visit the project page of msysgit" target="_blank"&gt;msysgit&lt;/a&gt; for my Git work on Windows and for quite a while I have been wanting to move the global .gitconfig file from its default location into my dropbox folder. The reason for this is probably obvious, I do not want to have to make the same configuration changes on multiple machines to get a homogenize Git environment.&lt;/p&gt;&lt;p&gt;So I set out to resolve this but despite numerous stops at my local Google page, I was unable to find any information on how to make Git look for the file in a different location, it always went to look for the file at &lt;em&gt;%USERPROFILE%\.gitconfig&lt;/em&gt;. &lt;/p&gt;&lt;p&gt;As a last resort I asked &lt;a href="http://www.lostechies.com/blogs/joshuaflanagan/" title="Visit the blog of Joshua Flanagan" target="_blank"&gt;Joshua Flanagan&lt;/a&gt; if he had any idea on how I could configure Git or msysgit to make this possible. Unfortunately he had no idea, but he did however suggest that I try using &lt;a href="http://technet.microsoft.com/en-us/library/cc753194%28WS.10%29.aspx" title="Visit the product page for mklink" target="_blank"&gt;mklink&lt;/a&gt;, a command line utility available in Windows Vista and later.&lt;/p&gt;&lt;p&gt;mklink enables you to create either &lt;a href="http://www.maxi-pedia.com/difference+between+symbolic+link+and+hard+link" title="Read more about the differences between symbolic and hard links" target="_blank"&gt;symbolic or hard links&lt;/a&gt; for files or directories. What I needed was a symbolic link, which simply explained is like a shortcut to a file but the difference is that the file system will resolve the symbolic link to the real file, where as a windows shortcut is a file with information in it.&lt;/p&gt;&lt;p&gt;To create a symbolic link for your .gitconfig file do the following&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;Copy your .gitconfig file from the %USERPROFILE% directory, to the directory where you want to store it instead &lt;/li&gt;
&lt;li&gt;Delete the .gitconfig file in the %USERPROFILE% directory &lt;/li&gt;
&lt;li&gt;Start &lt;strong&gt;cmd.exe&lt;/strong&gt; as Administrator &lt;/li&gt;
&lt;li&gt;Enter &lt;strong&gt;mklink .gitconfig path\to\your\.gitconfig&lt;/strong&gt; (notice the actual filename needs to be in the second parameter or you will link to the folder it is stored in) &lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;You should now get a message that a symbolic link was created between the two files. Try making a change in either of them and see that the change is reflected in the other one &amp;ndash; this is because you are always editing the same file since the file system resolves the symbolic link into the real file.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img class="posterous_download_image" src="https://blogger.googleusercontent.com/tracker/1066271173424091275-8736394772568661014?l=www.thecodejunkie.com" height="1" alt="" width="1" /&gt;&lt;/div&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://thecodejunkie.com/2010/11/moving-your-global-gitconfig-file.html"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://thecodejunkie.com/2010/11/moving-your-global-gitconfig-file.html#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodeJunkie/~4/DIVdVjUQlm4" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1021495/thecodejunkie.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/he6rwKFhNPr8m</posterous:profileUrl>
        <posterous:firstName>thecodejunkie</posterous:firstName>
        <posterous:lastName />
        <posterous:nickName>thecodejunkie</posterous:nickName>
        <posterous:displayName>thecodejunkie</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://thecodejunkie.com/2010/11/moving-your-global-gitconfig-file.html</feedburner:origLink></item>
    <item>
      <pubDate>Mon, 01 Nov 2010 16:22:00 -0700</pubDate>
      <title>Microsoft doesn’t create bad developers, developers do</title>
      <link>http://feedproxy.google.com/~r/TheCodeJunkie/~3/1Kn4XfHCXp8/microsoft-doesnt-create-bad-developers.html</link>
      <guid isPermaLink="false">http://thecodejunkie.com/2010/11/microsoft-doesnt-create-bad-developers.html</guid>
      <description>&lt;p&gt;
	&lt;p&gt;Have you ever stopped to think about the industry you have choose to work in (I&amp;rsquo;m bluntly assuming that if you are reading this you are working in the software industry in some way)? I would call it one of the most complex industries in the world. Think about it. We are working in an industry that is evolving at an incredible pace, contains an incalculable number of technologies, frameworks, best practices and constantly redefines the definition of how things should be done in the best possibly way. It&amp;rsquo;s the industry that makes the rest of the world tick. Daunting really, if you think about it.&lt;/p&gt;  &lt;p&gt;A while back I read a couple of posts by &lt;a href="http://www.gilzilberfeld.com/" target="_blank"&gt;Gil Zilberfeld&lt;/a&gt; (&lt;a href="http://www.gilzilberfeld.com/2010/07/why-microsoft-makes-bad-programmers.html" title="Read Gil's post on Why Microsoft makes bad programmers" target="_blank"&gt;here&lt;/a&gt; and &lt;a href="http://www.gilzilberfeld.com/2010/08/csi-microsoft.html" title="Read Gil's post on CSI: Microsoft" target="_blank"&gt;here&lt;/a&gt;) where Gil talks about the responsibility that vendors such as Microsoft plays in the role of securing the quality of the work that is produced in our industry. While I think I see the points&amp;nbsp; Gil is trying to make, I think he misses the beat a bit and I have a hard time agreeing with the conclusions he draws.&lt;/p&gt;  &lt;p&gt;The way I see it there are two types of developers; those that are just in it to pay the bills and those that consider themselves as craftsmen. If you consider yourself a craftsman then you should already be aware that you are responsible for your own faith and actions in this industry. But, if you are just in it to pay the bills then you are probably also looking to do so by doing the least amount of work and that includes looking for information on how to solve a particular problem or how to apply a technology onto your stack.&lt;/p&gt;  &lt;p&gt;So if you are one of the developers that are only looking towards Microsoft (or the relevant company for the technology stack you are working on) is it their fault if you implement something in a way that could be considered bad? Of course not! Sure there are a lot of outdated and down right poor samples at the Microsoft (or relevant company) website and their idea on how certain things should be solved are bound to differ from others (and that&amp;rsquo;s definitely not to say that there isn&amp;rsquo;t good contents, there are a ton of it). However, if you rely on a single source of information, you are always going to get an opinionated view. Take my word on it (right?).&lt;/p&gt;  &lt;p&gt;Doctors reads medical journals, publishes research papers, attend conferences, network with colleagues and make sure they stay up to date with the latest in their field. I&amp;rsquo;m pretty sure you are happy that they spend all of this time to make sure they can provide the best possible care and treatment when someone are in need of their services. I know I am.&lt;/p&gt;  &lt;p&gt;Just as with any other profession, developers are responsible for their own education, for honing their skills in the craft that they have chosen to practice. In order to keep up in an industry that evolves at the speed of light you need to invest in yourself. The code you write today should be some of the best you have ever written, while a year later you should be considerably less excited about its quality. It&amp;rsquo;s a sign of growth. That you&amp;rsquo;ve continued to move forward as a craftsman, that you skills have been honed and broadened during the past year.&lt;/p&gt;  &lt;p&gt;So what about the tools? Do we really rely on them too much to get the work done? I would say, definitely not! But again you have to specify just exactly what you are talking about when talking about tooling. If you rely on visual designers, drag and drop, wizards and the likes to to the majority of your work, then yes you are probably relying too much on your tools. Odds are that you will have a hard time to get anything outside of standard behavior to run and there will be pain points when you need to debug.&lt;/p&gt;  &lt;p&gt;However you would do yourself (and your employer) a huge disservice if you did not make it your goal to know the tools in your toolbox as good as possible. What&amp;rsquo;s wrong with knowing how to use the debugger, the IDE and tools like ReSharper as good as possible? Used correctly they will have a huge impact on productivity. Make sure you know the finer details of the tools and make them work for your and not the other way around. Yes, sometimes tools do get in the way of the goal, even slow you down, and when that is the case, don&amp;rsquo;t use the tools! Tools are there to help you when you need them, not to act as a crutch you always have to lean on so you don&amp;rsquo;t fall on your ass.&lt;/p&gt;  &lt;p&gt;Well there you have my thoughts on the subject. It&amp;rsquo;s always up to the developer, not the companies. Always.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img class="posterous_download_image" src="https://blogger.googleusercontent.com/tracker/1066271173424091275-3532223748082132610?l=www.thecodejunkie.com" height="1" alt="" width="1" /&gt;&lt;/div&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://thecodejunkie.com/2010/11/microsoft-doesnt-create-bad-developers.html"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://thecodejunkie.com/2010/11/microsoft-doesnt-create-bad-developers.html#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodeJunkie/~4/1Kn4XfHCXp8" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1021495/thecodejunkie.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/he6rwKFhNPr8m</posterous:profileUrl>
        <posterous:firstName>thecodejunkie</posterous:firstName>
        <posterous:lastName />
        <posterous:nickName>thecodejunkie</posterous:nickName>
        <posterous:displayName>thecodejunkie</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://thecodejunkie.com/2010/11/microsoft-doesnt-create-bad-developers.html</feedburner:origLink></item>
    <item>
      <pubDate>Mon, 01 Nov 2010 16:16:00 -0700</pubDate>
      <title>So I’ve been meaning to tell you…</title>
      <link>http://feedproxy.google.com/~r/TheCodeJunkie/~3/hzT2whUp2rQ/so-ive-been-meaning-to-tell-you.html</link>
      <guid isPermaLink="false">http://thecodejunkie.com/2010/11/so-ive-been-meaning-to-tell-you.html</guid>
      <description>&lt;p&gt;
	&lt;p&gt;&amp;hellip; the readers of my blog, that a while back I got an invitation to join the &lt;a href="http://elegantcode.com/" title="Visit the Elegant Code website" target="_blank"&gt;Elegant Code&lt;/a&gt; tribe and start blogging there. I humbly accepted the invitation. Before I did I gave a lot of thought to what I would do with this blog. Would I cross-post new contents, partition the contents between the two blogs or perhaps nuke this one entirely? What I decided was that I would keep this alive and cross-post all contents. &lt;/p&gt;&lt;p&gt;Well, needless to say I failed with this. I started looking at cross-posting plugins for Windows Live Writer but I didn&amp;rsquo;t quite find one I liked and the one I did try did not work at all. So, fortunately I&amp;rsquo;ve only had the time to make two posts on Elegant Code, one being an introduction of myself. This means the damage is not too bad! I will bring the second post over here and for future posts I will simply manually cross-post. I&amp;rsquo;ve got a bunch of blog posts in the pipe and with a bit of luck some of them will escape my obsessive need for perfection (working on that) for my posts and actually make it into the wild soon.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img class="posterous_download_image" src="https://blogger.googleusercontent.com/tracker/1066271173424091275-1721419572499270956?l=www.thecodejunkie.com" height="1" alt="" width="1" /&gt;&lt;/div&gt;
	
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://thecodejunkie.com/2010/11/so-ive-been-meaning-to-tell-you.html"&gt;Permalink&lt;/a&gt; 

	| &lt;a href="http://thecodejunkie.com/2010/11/so-ive-been-meaning-to-tell-you.html#comment"&gt;Leave a comment&amp;nbsp;&amp;nbsp;&amp;raquo;&lt;/a&gt;

&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/TheCodeJunkie/~4/hzT2whUp2rQ" height="1" width="1"/&gt;</description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/1021495/thecodejunkie.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/he6rwKFhNPr8m</posterous:profileUrl>
        <posterous:firstName>thecodejunkie</posterous:firstName>
        <posterous:lastName />
        <posterous:nickName>thecodejunkie</posterous:nickName>
        <posterous:displayName>thecodejunkie</posterous:displayName>
      </posterous:author>
    <feedburner:origLink>http://thecodejunkie.com/2010/11/so-ive-been-meaning-to-tell-you.html</feedburner:origLink></item>
  </channel>
</rss>

