<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" version="2.0"><channel><title>Rob Reynolds - The Fervent Coder</title><link>http://devlicio.us/blogs/rob_reynolds/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/FerventCoder" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="ferventcoder" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><title>Software Release Management - Why You Can’t And Shouldn’t Force People to Use the Latest Version</title><link>http://devlicio.us/blogs/rob_reynolds/archive/2012/01/25/software-release-management-why-you-can-t-and-shouldn-t-force-people-to-use-the-latest-version.aspx</link><pubDate>Wed, 25 Jan 2012 16:29:19 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:69366</guid><dc:creator>Rob Reynolds</dc:creator><slash:comments>7</slash:comments><wfw:commentRss>http://devlicio.us/blogs/rob_reynolds/rsscomments.aspx?PostID=69366</wfw:commentRss><wfw:comment>http://devlicio.us/blogs/rob_reynolds/commentapi.aspx?PostID=69366</wfw:comment><comments>http://devlicio.us/blogs/rob_reynolds/archive/2012/01/25/software-release-management-why-you-can-t-and-shouldn-t-force-people-to-use-the-latest-version.aspx#comments</comments><description>&lt;blockquote&gt;   &lt;p&gt;&lt;b&gt;As software creators we don&amp;#39;t get to decide what version of our tools / libraries that people use. If we try to force them, our users will go somewhere else.&lt;/b&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h4&gt;Update: What Type of Software This Applies To&lt;/h4&gt;  &lt;p&gt;This post talks of tools, applications and libraries. Things that end up in the users hands. This does not apply to SaaS or websites. These do not end up in the hands of the users in the same sense. &lt;/p&gt;  &lt;p&gt;For those of you who immediately think of Chrome or Firefox, which are applications that end up in the users hands, those apply to this post as well. They have nearly perfected a silent upgrade experience, but if they ever mess up that experience, users can choose to use something else. And I believe there is a way to opt out as well (not easily achieved but possible).&lt;/p&gt;  &lt;h4&gt;Software Release Management&lt;/h4&gt;  &lt;p&gt;I write software. Much of it is open source. I have multiple versions of my products out there. Even with newer versions available that fix bugs and bring about new features, I still find people using older versions. Even though I have a better newer version that fixes some of the bugs they are dealing with, they are still using an older version. Think about that for a second. There must be a good reason right? Let’s state this in an official sense. &lt;/p&gt;  &lt;p&gt;As a software creator you release software. You put a release out there and people use that release. You delineate different releases by a concept of versioning. People use a particular version of your release. You release newer versions of your software that has fixes and enhancements. You hope users upgrade to the latest release when it is available. &lt;/p&gt;  &lt;p&gt;I’ve stated five facts and finished with a hope. If you can accept those as facts, we can move on. If we can’t, then you might want to stop reading now because we are never going to agree. If you are a developer like me, you really want people to always use the latest version of your software, so you might be able to accept the last statement as a fact for you. I really want people to always use the latest release of my software as I have went through the trouble of testing it and making it better. &lt;/p&gt;  &lt;p&gt;Now let me change some terms for you. Software release management is really a fancy way of saying package management. A software release could be better termed a package. So to restate, as a software creator, you release &lt;strong&gt;&lt;em&gt;packages&lt;/em&gt;&lt;/strong&gt;. You put a &lt;em&gt;package&lt;/em&gt; out there and people use that &lt;em&gt;package&lt;/em&gt;. You delineate different &lt;em&gt;packages&lt;/em&gt; by a concept of versioning. People use a particular version of your &lt;em&gt;package&lt;/em&gt;. You release newer versions of your &lt;em&gt;package&lt;/em&gt; that has fixes and enhancements. You hope users upgrade to the latest &lt;em&gt;package&lt;/em&gt; when it is available. &lt;/p&gt;  &lt;h4&gt;The Hope Versus The Force&lt;/h4&gt;  &lt;p&gt;I say “&lt;strong&gt;hope they upgrade&lt;/strong&gt;” because you really can’t control that aspect. You can try. You can delete the older versions. You can refuse to have older versions available. You can tell users that they should and need to upgrade. But you put it out there once and it is now out there forever. People will find a way to get to the particular version they need. Or they will go elsewhere. Users speak with their feet. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;I find attempting to force a user to do something is both an exercise in futility and a great way to guarantee that you have less users overall.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;So people must &lt;em&gt;want&lt;/em&gt; to use a particular version of a product. Let’s examine this a little more. &lt;strong&gt;Why on earth would someone use an older version of a product when a newer, better, less buggier version is available?&lt;/strong&gt; &lt;/p&gt;  &lt;h4&gt;Why Do Users Use Older Versions?&lt;/h4&gt;  &lt;p&gt;Users use older versions of our packages and they have great fundamental reasons for doing so: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;It reduces their risk. &lt;/li&gt;    &lt;li&gt;It guarantees that users of their library (that has a dependency on your library) have a good experience. &lt;/li&gt;    &lt;li&gt;It guarantees that the product that they have tested is the same product that gets into the hands of consumers. &lt;/li&gt;    &lt;li&gt;It guarantee their product builds successfully and the same way each time. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;In fixing a product and making it better and less buggier, you may actually be breaking someone’s ability to use a newer version. And you have no guarantee to the user that this version doesn’t have flaws of it’s own. Right? Otherwise there would only be one version that ever had fixes in it. We wouldn’t need to release newer versions with fixes, only enhancements. But we don’t. We fix things we thought worked and we fix things we tested but missed some crazy edge case. This is why we go down this path of release management. This is software development.&lt;/p&gt;  &lt;p&gt;So people get a certain version and they use it. &lt;strong&gt;Users upgrade to the latest version of software when they are ready, not when the software creator is ready.&lt;/strong&gt; People depend on certain versions or on a range of versions. In reality I can&amp;#39;t force someone to use the latest version. If I try, they will find the version they need through the powers of the internet or find another way. Accepting that, I can give them a way to see it and help them fall into the pit of success. &lt;/p&gt;  &lt;h4&gt;From the User Perspective&lt;/h4&gt;  &lt;p&gt;Shifting to the perspective of the user, I might use your library in my own software. Being able to build my product, even if it means it is using an older version of your package that has bugs, is worlds more important to me and my users. &lt;strong&gt;We&amp;#39;ll get to your latest version when we can test that it doesn&amp;#39;t break our product.&lt;/strong&gt; But don&amp;#39;t try to force me to upgrade to your latest version or I will find another way. I&amp;#39;m not saying that with your package but in all packages the newer version may be buggier than the current buggy version we are using. We don&amp;#39;t know and you can’t guarantee that it doesn’t, even with extensive testing. Testing doesn’t &lt;a href="http://c2.com/cgi/wiki?TestsCantProveTheAbsenceOfBugs"&gt;prove the absence of bugs&lt;/a&gt;, only the absence of errors that you know. I digress. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;It’s an evil that we know versus and evil that we don’t. Or put another way, it&amp;#39;s a buggy version we know versus a buggy version we don&amp;#39;t.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;If it’s a tool, we need to ensure that our usage of your product still meets our expectations. We need to test it even though you did and make sure it still works for our needs and scenarios. Where it doesn’t we need to decide if that means we can shift our expectations and upgrade. But we are not going to blindly upgrade and just use the latest version because the software creator believes that is best. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Can you cover the millions of dollars that we might lose by taking on a newer version of your product? If you can give me that guarantee, as a user I will gladly pass that risk on to you.&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h4&gt;Final Thoughts&lt;/h4&gt;  &lt;p&gt;Whether you agree or not, as software creators we don&amp;#39;t get to decide what version of our tools / libraries that people use. We just don’t have that luxury. If we try to our users will go somewhere else. So we make it easy for them to upgrade so they will want to. We make the upgrade experience painless so they will want to. We need to be good stewards.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=69366" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/u4sENor8kAE1tQUNR35tilRNxys/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/u4sENor8kAE1tQUNR35tilRNxys/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/u4sENor8kAE1tQUNR35tilRNxys/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/u4sENor8kAE1tQUNR35tilRNxys/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Development/default.aspx">Development</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Tools/default.aspx">Tools</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/.NET/default.aspx">.NET</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Gems/default.aspx">Gems</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/NuGet/default.aspx">NuGet</category></item><item><title>DropkicK–Deploy Fluently</title><link>http://devlicio.us/blogs/rob_reynolds/archive/2011/10/23/dropkick-deploy-fluently.aspx</link><pubDate>Sun, 23 Oct 2011 15:52:38 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:68317</guid><dc:creator>Rob Reynolds</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://devlicio.us/blogs/rob_reynolds/rsscomments.aspx?PostID=68317</wfw:commentRss><wfw:comment>http://devlicio.us/blogs/rob_reynolds/commentapi.aspx?PostID=68317</wfw:comment><comments>http://devlicio.us/blogs/rob_reynolds/archive/2011/10/23/dropkick-deploy-fluently.aspx#comments</comments><description>&lt;p&gt;&lt;a href="https://github.com/chucknorris/dropkick/wiki"&gt;DropkicK&lt;/a&gt; (DK) has been in development for over two years and has been used for production deployments for over a year. Dru Sellers originally posted about &lt;a href="http://codebetter.com/drusellers/2009/05/29/dropkick-an-idea-for-deployments/"&gt;DK back in 2009&lt;/a&gt;. While DK isn’t yet as super easy to grok as some of the other ChuckNorrisFramework tools and offers little in the idea of conventions, it is still a stellar framework to use for deployments.&lt;/p&gt;  &lt;p&gt;DK works well in environments where you know all of the environments you will deploy to ahead of time (although not required due to the ability to pull in JSON settings files and servermaps). It is not for every environment, as DK will need to be able to get to the remote location through UNC (if deployed from a local server everytime it won’t be an issue) except for the database. DK is continually improving, so expect a transition into adding FTP type deployments as well.&lt;/p&gt;  &lt;p&gt;I am going to stay somewhat introductory, so you won’t see this post get too detailed into exactly how you can use DK for deployments. That would be best covered by reading the &lt;a href="https://github.com/chucknorris/dropkick/wiki"&gt;wiki&lt;/a&gt; and looking at &lt;a href="https://github.com/chucknorris/dropkick/tree/master/product/dropkick.tests/TestObjects"&gt;examples&lt;/a&gt; or a series of articles.&lt;/p&gt;  &lt;h4&gt;Concepts of Kicking Your Code Out with DropkicK&lt;/h4&gt;  &lt;p&gt;&lt;strong&gt;Deployment Step&lt;/strong&gt; – The simplest concept of execution of deployment. This is a step that is involved with getting something set up during a deployment. This could be copying files or setting a folder permission.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Deployment Task – &lt;/strong&gt;This is a collection of one or more steps to do in making something happen during the deployment. Say a task is to copy some files. A step in that task might be to clean/clear folders. Another step is to remove read only attributes. The last step in that is to actually copy files/folders. This is nearly synonymous with the concept of deployment steps and often referred to that way, even by the maintainers of DK.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Deployment Role&lt;/strong&gt; – A role is a collection of tasks that as an atomic unit have set up a particular area of a deployment. Like a database. Or a Web site. A role contains one or more deployment tasks.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Deployment Plan – &lt;/strong&gt;This is a collection of all roles for making a deployment happen. This is what you write when you sit down to write a dropkick deployment for your code.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Deployment Settings – &lt;/strong&gt;These are settings you can draw from in any deployment step. A core concept to DK is the idea of environments and is baked into all settings.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Deployment JSON Settings – &lt;/strong&gt;This is the equivalent of the deployment settings, with the actual values that you want the deployment settings to get at run time. This is separate so that you can make changes in case you need to make changes prior to deployment.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Deployment Server&lt;/strong&gt; – A deployment role is targeted against one or more servers.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Deployment ServerMaps – &lt;/strong&gt;This is the physical server or servers that you want to target Deployment Roles to for a particular environment. Each role you want to deploy will need at least one physical location.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Remote Execution – &lt;/strong&gt;When certain tasks must be run against the server they are targeting, DK will copy over an executable to a known location on that machine, run it through WMI on that particular machine, wait for it to finish, and then bring the execution log back to the main logs. This means you do not need a service installed on the remote machine for installation.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Deployment Logs – &lt;/strong&gt;DK has a few logs that it puts together during the deployment. The one you see in the console is a summary of what is happening. There is a run log that contains details of everything that is happening. There is also a db log, a security log, and a file change log. These logs can be passed to each party that cares about them after a deployment for auditing sake.&lt;/p&gt;  &lt;h4&gt;NuGet Install&lt;/h4&gt;  &lt;p&gt;If you want to get a quick start on seeing a good example of DK, just pull in the dropkick nuget package and it will bring some sample code.&lt;/p&gt;  &lt;h4&gt;Running DropkicK&lt;/h4&gt;  &lt;p&gt;DropkicK expects you to tell it where the deployment DLL file is, what environment it is deploying to, what roles it is deploying, and where the deployment settings files are located. It runs in trace mode by default, determining if one can actually execute the deployment plan (has permissions, servers exist, etc).&lt;/p&gt;  &lt;p&gt;The syntax for running dropkick is:&lt;/p&gt;  &lt;pre&gt;&lt;code&gt;dk.exe [command] /environment:ENVIRONMENT_NAME [/ARG_NAME:VALUE] [--SWITCH_NAME]&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;At a minimum you can run dropkick with &lt;code&gt;dk.exe execute. &lt;font face="Georgia"&gt;This will deploy all roles to ‘LOCAL’ environment with ‘Deployment.dll’ (seated next to dk.exe) looking for ‘.\settings\LOCAL.servermaps’ and ‘.\settings\LOCAL.js’&lt;/font&gt;&lt;/code&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;dk.exe execute /deployment:..\deployments\somename.deployment.dll /environment:LOCAL /settings:..\settings /roles:Web,Host&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The above should give you an idea of all of the options you can pass to DK for execution. &lt;/p&gt;

&lt;p&gt;You can pass a silent switch to DK to allow for completely silent deployments. Although rough at the moment, there is a wiki article for deploying from TeamCity. That can be found here: &lt;a href="https://github.com/chucknorris/dropkick/wiki/TeamCityIntegration"&gt;https://github.com/chucknorris/dropkick/wiki/TeamCityIntegration&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;Enough Talk - Show Me the Code!&lt;/h4&gt;

&lt;p&gt;The below code shows an example deployment plan for executing a deployment to Db, Web, and Host roles. It leaves out the Virtual Directory setup, but that can be easily brought in from looking at an example (&lt;a href="https://github.com/chucknorris/dropkick/blob/master/product/dropkick.tests/TestObjects/IisTestDeploy.cs"&gt;https://github.com/chucknorris/dropkick/blob/master/product/dropkick.tests/TestObjects/IisTestDeploy.cs&lt;/a&gt;).&lt;/p&gt;

&lt;pre class="c#" name="code"&gt;using System.IO;
using System.Security.Cryptography.X509Certificates;
using dropkick.Configuration.Dsl;
using dropkick.Configuration.Dsl.Files;
using dropkick.Configuration.Dsl.Iis;
using dropkick.Configuration.Dsl.RoundhousE;
using dropkick.Configuration.Dsl.Security;
using dropkick.Configuration.Dsl.WinService;
using dropkick.Wmi;

namespace App.Deployment
{
public class TheDeployment : Deployment&amp;lt;TheDeployment, DeploymentSettings&amp;gt;
{
  public TheDeployment()
  {
      Define(settings =&amp;gt;
      {
          DeploymentStepsFor(Db,
                             s =&amp;gt;
                             {
                                 s.RoundhousE()
                                     .ForEnvironment(settings.Environment)
                                     .OnDatabase(settings.DbName)
                                     .WithScriptsFolder(settings.DbSqlFilesPath)
                                     .WithDatabaseRecoveryMode(settings.DbRecoveryMode)
                                     .WithRestorePath(settings.DbRestorePath)
                                     .WithRepositoryPath(&amp;quot;https://github.com/chucknorris/roundhouse.git&amp;quot;)
                                     .WithVersionFile(&amp;quot;_BuildInfo.xml&amp;quot;)
                                     .WithRoundhousEMode(settings.RoundhousEMode);
                             });

          DeploymentStepsFor(Web,
                             s =&amp;gt;
                             {
                                 s.CopyDirectory(@&amp;quot;..\_PublishedWebSites\WebName&amp;quot;).To(@&amp;quot;{{WebsitePath}}&amp;quot;).DeleteDestinationBeforeDeploying();

                                 s.CopyFile(@&amp;quot;..\environment.files\{{Environment}}\{{Environment}}.web.config&amp;quot;).ToDirectory(@&amp;quot;{{WebsitePath}}&amp;quot;).RenameTo(@&amp;quot;web.config&amp;quot;);

                                 s.Security(securityOptions =&amp;gt;
                                 {
                                     securityOptions.ForPath(settings.WebsitePath, fileSecurityConfig =&amp;gt; fileSecurityConfig.GrantRead(settings.WebUserName));
                                     securityOptions.ForPath(Path.Combine(settings.HostServicePath, &amp;quot;logs&amp;quot;), fs =&amp;gt; fs.GrantReadWrite(settings.WebUserName));
                                     securityOptions.ForPath(@&amp;quot;~\C$\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files&amp;quot;, fs =&amp;gt; fs.GrantReadWrite(settings.WebUserName));
                                     if (Directory.Exists(@&amp;quot;~\C$\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files&amp;quot;))
                                     {
                                         securityOptions.ForPath(@&amp;quot;~\C$\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files&amp;quot;, fs =&amp;gt; fs.GrantReadWrite(settings.WebUserName));
                                     }

                                     securityOptions.ForCertificate(settings.CertificateThumbprint, c =&amp;gt;
                                     {
                                         c.GrantReadPrivateKey()
                                             .To(settings.WebUserName)
                                             .InStoreLocation(StoreLocation.LocalMachine)
                                             .InStoreName(StoreName.My);
                                     });

                                 });
                             });

                             
          DeploymentStepsFor(Host,
                             s =&amp;gt;
                             {
                                 var serviceName = &amp;quot;ServiceName.{{Environment}}&amp;quot;;
                                 s.WinService(serviceName).Stop();

                                 s.CopyDirectory(@&amp;quot;..\_PublishedApplications\ServiceName&amp;quot;).To(@&amp;quot;{{HostServicePath}}&amp;quot;).DeleteDestinationBeforeDeploying();

                                 s.CopyFile(@&amp;quot;..\environment.files\{{Environment}}\{{Environment}}.servicename.exe.config&amp;quot;).ToDirectory(@&amp;quot;{{HostServicePath}}&amp;quot;).RenameTo(@&amp;quot;servicename.exe.config&amp;quot;);

                                 s.Security(o =&amp;gt;
                                 {
                                     o.ForCertificate(settings.CertificateThumbprint, c =&amp;gt;
                                     {
                                         c.GrantReadPrivateKey()
                                             .To(settings.ServiceUserName)
                                             .InStoreLocation(StoreLocation.LocalMachine)
                                             .InStoreName(StoreName.My);
                                     });
                                     o.LocalPolicy(lp =&amp;gt;
                                     {
                                         lp.LogOnAsService(settings.ServiceUserName);
                                         lp.LogOnAsBatch(settings.ServiceUserName);
                                     });

                                     o.ForPath(settings.HostServicePath, fs =&amp;gt; fs.GrantRead(settings.ServiceUserName));
                                     o.ForPath(Path.Combine(settings.HostServicePath,&amp;quot;logs&amp;quot;), fs =&amp;gt; fs.GrantReadWrite(settings.ServiceUserName));
                                     o.ForPath(settings.ServiceWorkDirectory, fs =&amp;gt; fs.GrantReadWrite(settings.ServiceUserName));
                                     o.ForPath(settings.ServiceTriggerWatchDirectory, fs =&amp;gt; fs.GrantReadWrite(settings.ServiceUserName));
                                     o.ForPath(settings.SecureWorkDirectory, fs =&amp;gt; 
                                          { 
                                              fs.GrantReadWrite(settings.ServiceUserName);
                                              fs.RemoveInheritance();
                                              fs.Clear().Preserve(settings.ServiceUserName)
                                                  .RemoveAdministratorsGroup()
                                                  .RemoveUsersGroup();
                                          });
                                 });
                                 s.WinService(serviceName).Delete();
                                 s.WinService(serviceName).Create().WithCredentials(settings.ServiceUserName, settings.ServiceUserPassword).WithDisplayName(&amp;quot;servicename({{Environment}})&amp;quot;).WithServicePath(@&amp;quot;{{HostServicePath}}\servicename.exe&amp;quot;).
                                     WithStartMode(settings.ServiceStartMode)
                                     .AddDependency(&amp;quot;MSMQ&amp;quot;);

                                 if (settings.ServiceStartMode != ServiceStartMode.Disabled &amp;amp;&amp;amp; settings.ServiceStartMode != ServiceStartMode.Manual)
                                 {
                                     s.WinService(serviceName).Start();
                                 }
                             });
      });
  }

    //order is important
    public static Role Db { get; set; }
    public static Role Web { get; set; }
    public static Role Host { get; set; }
}
}&lt;/pre&gt;

&lt;p&gt;You might immediately see how this really sets up an environment. The biggest ideas in DropkicK are that you can specify a complete setup from nothing to having a machine completely set up.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=68317" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Gc_npLtWI1-6phAa4zGLX_MNw14/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Gc_npLtWI1-6phAa4zGLX_MNw14/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Gc_npLtWI1-6phAa4zGLX_MNw14/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Gc_npLtWI1-6phAa4zGLX_MNw14/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/HowTo/default.aspx">HowTo</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Tools/default.aspx">Tools</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/.NET/default.aspx">.NET</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/DropkicK/default.aspx">DropkicK</category></item><item><title>RoundhousE–Intelligent Database Migrations And Versioning</title><link>http://devlicio.us/blogs/rob_reynolds/archive/2011/10/23/roundhouse-intelligent-database-migrations-and-versioning.aspx</link><pubDate>Sun, 23 Oct 2011 15:21:00 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:68316</guid><dc:creator>Rob Reynolds</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://devlicio.us/blogs/rob_reynolds/rsscomments.aspx?PostID=68316</wfw:commentRss><wfw:comment>http://devlicio.us/blogs/rob_reynolds/commentapi.aspx?PostID=68316</wfw:comment><comments>http://devlicio.us/blogs/rob_reynolds/archive/2011/10/23/roundhouse-intelligent-database-migrations-and-versioning.aspx#comments</comments><description>&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Because everyone wants to kick their database, but sometimes kicking your database is a good thing!&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Many would not argue that you should version your code, and few would argue against versioning your code in a way that can lead back to a specific point in source control history. However, most people don&amp;rsquo;t really think of doing the same thing with your database. That&amp;rsquo;s where RoundhousE (RH) comes in.&lt;/p&gt;
&lt;p&gt;I have been working on RH for over two years now and people always wander what it is, why and what sets it apart from other migrators. We set out to make a smart tool for migrations that came somewhat close to Ruby&amp;rsquo;s &lt;a href="http://api.rubyonrails.org/classes/ActiveRecord/Migration.html"&gt;ActiveRecord Migrations&lt;/a&gt; without going the code migrations route (yet). Hopefully this introduction will help you understand why it is different and whether it&amp;rsquo;s something that is in line with your needs. &lt;/p&gt;
&lt;h4&gt;What is RoundhousE? &lt;/h4&gt;
&lt;p&gt;RoundhousE (&lt;a href="http://projectroundhouse.org"&gt;http://projectroundhouse.org)&lt;/a&gt; is a database migrator that uses plain old SQL Scripts to transition a database from one version to another. RoundhousE currently works with Oracle, SQL Server (2000/2005/2008/Express), Access, MySQL, and soon SQLite and PostgreSQL. It comes in the form of a tool, MSBuild, and an embeddable DLL. While someone is working on a GUI, there is no visual tool at the current time.&lt;/p&gt;
&lt;h4&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/RoundhousE_5F00_Logo_5F00_3FA04CE5.jpg"&gt;&lt;img height="231" width="244" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/RoundhousE_5F00_Logo_5F00_thumb_5F00_63E53167.jpg" alt="RoundhousE - Kick It!" border="0" title="RoundhousE - Kick It!" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;h4&gt;What sets RoundhousE apart from other migrators? &lt;/h4&gt;
&lt;p&gt;It subscribes to the idea of&lt;strong&gt; convention over configuration&lt;/strong&gt;, which means you can pass the migrator very few configuration options to get it to work (rh.exe /d dbname), but pass as many options as necessary to meet your conventions. Say you don&amp;rsquo;t like the tables or folder names that RH uses, you can override those to whatever you want. &lt;/p&gt;
&lt;p&gt;RH &lt;strong&gt;versions the database how you want&lt;/strong&gt; it versioned. You can supply it with a DLL path for it to pull the file version from. You can give it an XML file and XPath, or you can use the highest script number in the up folder. You can also just use a sequence based (non-global) form of passive versioning. &lt;a href="https://github.com/chucknorris/roundhouse/wiki/Versioning" title="https://github.com/chucknorris/roundhouse/wiki/Versioning"&gt;https://github.com/chucknorris/roundhouse/wiki/Versioning&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;RH believes in &lt;strong&gt;low maintenance&lt;/strong&gt; and keeping good clean history in your source control. This means that you don&amp;rsquo;t lump everything into one folder, you put your anytime scripts (views/functions/stored procedures/etc) into their own folders and track history as you go. RH is smart enough to only run these if they are new/different from the current existing scripts in the database.&lt;/p&gt;
&lt;p&gt;RH has three &lt;strong&gt;modes of operation&lt;/strong&gt;. Normal, DropCreate, and Restore. Notice none of those are Create like you may see in other migrators. If the intent in the end is to have a database ready to go, why would you want to have to make a step to specify that you want to create the database? RH is smart enough to realize that the database doesn&amp;rsquo;t exist and it creates it (unless you pass a switch explicitly telling it not to). Normal is just the migration as it is. DropCreate is used during development when you want to continually change the same scripts prior to production. Restore is used when you switch to maintenance mode and want to change the same maintenance script. &lt;a href="https://github.com/chucknorris/roundhouse/wiki/RoundhousEModes" title="https://github.com/chucknorris/roundhouse/wiki/RoundhousEModes"&gt;https://github.com/chucknorris/roundhouse/wiki/RoundhousEModes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;RH is &lt;strong&gt;environment aware&lt;/strong&gt;, which means you can have environment specific scripts. If you have scripts or permissions scripts that are different for each environment you can give them a special name.&amp;nbsp; &lt;a href="https://github.com/chucknorris/roundhouse/wiki/EnvironmentScripts"&gt;https://github.com/chucknorris/roundhouse/wiki/EnvironmentScripts&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;RH is an &lt;strong&gt;easy to start using on legacy databases&lt;/strong&gt;. You just take your old DDL/DML scripts and move them into a special folder that RH will only evaluate/run when it is creating a database (say on a new developers machine). You can arrange existing scripts into RH default folders or point RH to the existing folder types. RH splits scripts with the GO batch terminator in them.&lt;/p&gt;
&lt;p&gt;RH &lt;strong&gt;speeds up your development process&lt;/strong&gt;. You can use RH with NHibernate to refresh your database without leaving Visual Studio! Entity Framework and FluentMigrator are planned for this feature as well. &lt;a href="https://github.com/chucknorris/roundhouse/wiki/Roundhouserefreshdatabasefnh" title="https://github.com/chucknorris/roundhouse/wiki/Roundhouserefreshdatabasefnh"&gt;https://github.com/chucknorris/roundhouse/wiki/Roundhouserefreshdatabasefnh&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;RH runs on &lt;strong&gt;just the .NET framework&lt;/strong&gt;. This means you don&amp;rsquo;t need SMO installed like some other migrators require.&lt;/p&gt;
&lt;p&gt;While there are probably other features I haven&amp;rsquo;t mentioned, keep in mind that RH is not a code migrator (yet). If you are looking for a code migrator, there are quite a few good tools out there, including &lt;a href="https://github.com/schambers/fluentmigrator/wiki"&gt;FluentMigrator&lt;/a&gt; and &lt;a href="https://github.com/dradovic/MigSharp/wiki"&gt;Mig#.&lt;/a&gt; Entity Framework Code Migrations is really starting to shape up as well (Seriously! Although EF only works for SQL Server).&lt;/p&gt;
&lt;h4&gt;How do I get RoundhousE?&lt;/h4&gt;
&lt;p&gt;There are several avenues to get RH. You can use NuGet, Chocolatey, Gems, plain old downloads (still considered official releases), or source (both in git and svn). &lt;a href="https://github.com/chucknorris/roundhouse/wiki/Getroundhouse" title="https://github.com/chucknorris/roundhouse/wiki/Getroundhouse"&gt;https://github.com/chucknorris/roundhouse/wiki/Getroundhouse&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=68316" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ApxoYoE4y0YNBsNu42WsIQ4EnCA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ApxoYoE4y0YNBsNu42WsIQ4EnCA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ApxoYoE4y0YNBsNu42WsIQ4EnCA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ApxoYoE4y0YNBsNu42WsIQ4EnCA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/RoundhousE/default.aspx">RoundhousE</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Development/default.aspx">Development</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Tools/default.aspx">Tools</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/.NET/default.aspx">.NET</category></item><item><title>Let’s Get Chocolatey! Kind of like apt-get for Windows</title><link>http://devlicio.us/blogs/rob_reynolds/archive/2011/10/07/let-s-get-chocolatey-kind-of-like-apt-get-for-windows.aspx</link><pubDate>Fri, 07 Oct 2011 12:32:28 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:68256</guid><dc:creator>Rob Reynolds</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://devlicio.us/blogs/rob_reynolds/rsscomments.aspx?PostID=68256</wfw:commentRss><wfw:comment>http://devlicio.us/blogs/rob_reynolds/commentapi.aspx?PostID=68256</wfw:comment><comments>http://devlicio.us/blogs/rob_reynolds/archive/2011/10/07/let-s-get-chocolatey-kind-of-like-apt-get-for-windows.aspx#comments</comments><description>&lt;p&gt;“If only there was some way to quickly and silently install applications and tools on my windows machine.”&lt;/p&gt;  &lt;p&gt;&lt;a href="http://chocolatey.org"&gt;Chocolatey&lt;/a&gt; is kind of like an apt-get, but for Windows. It is a machine level package manager that is built on top of &lt;a href="http://nuget.org"&gt;NuGet&lt;/a&gt; command line and the NuGet infrastructure. &lt;a href="http://elegantcode.com/about/jason-jarrett/"&gt;Jason Jarrett&lt;/a&gt; recently described it as &lt;a href="http://elegantcode.com/2011/10/05/chocolatey-the-free-and-open-source-windows-app-store/"&gt;the free/OSS windows app store&lt;/a&gt;. What that means for you is that you can install and update software (applications and tools) on your machine with a few keystrokes and chocolatey does the rest! &lt;/p&gt;  &lt;p&gt;Just how easy is it to install an application? From the command line, PowerShell, or Package Manager Console in visual studio you can type something like:&lt;/p&gt;  &lt;pre&gt;cinst windirstat&lt;/pre&gt;

&lt;p&gt;and watch it download and silently install &lt;a href="http://windirstat.info"&gt;WinDirStat&lt;/a&gt; on your machine. &lt;/p&gt;

&lt;p&gt;A picture is worth a thousand words in this case:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/chocolateyFlash_5F00_640D17A6.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="cinst msysgit - The chocolatey gods have answered your request!" border="0" alt="cinst msysgit - The chocolatey gods have answered your request!" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/chocolateyFlash_5F00_thumb_5F00_47437CC4.png" width="527" height="319" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want to try a tool (something that doesn’t actually install on your machine), try baretail, nodejs, or ravendb. &lt;/p&gt;

&lt;p&gt;Creating Packages is also very simple: &lt;a href="https://github.com/chocolatey/chocolatey/wiki/CreatePackages"&gt;https://github.com/chocolatey/chocolatey/wiki/CreatePackages&lt;/a&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Below is all that is required to install WinDirStat on your machine.&lt;/p&gt;

&lt;pre&gt;Install-ChocolateyPackage &amp;#39;windirstat&amp;#39; &amp;#39;exe&amp;#39; &amp;#39;/S&amp;#39; &amp;#39;http://windirstat.info/wds_current_setup.exe&amp;#39;&lt;/pre&gt;

&lt;p&gt;Include chocolatey in your development environment setup! &lt;a href="https://github.com/chocolatey/chocolatey/wiki/DevelopmentEnvironmentSetup"&gt;https://github.com/chocolatey/chocolatey/wiki/DevelopmentEnvironmentSetup&lt;/a&gt;&amp;#160; Check out a living example - &lt;a href="https://github.com/davidalpert/nuserve#readme"&gt;https://github.com/davidalpert/nuserve#readme&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;FAQ&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;What can I do with chocolatey?&lt;/strong&gt; Since it uses PowerShell, you can do nearly anything you can do with .NET. Install applications, download tools and put them on the path, set up contributors machines for hacking on your code, install powershell commands, etc. Your imagination is the limit!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s your best example of the power of chocolatey?&lt;/strong&gt; One line Ruby DevKit install. Seriously. &lt;a href="http://groups.google.com/group/rubyinstaller/browse_thread/thread/8245c53f990d1ea6"&gt;http://groups.google.com/group/rubyinstaller/browse_thread/thread/8245c53f990d1ea6&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I’m convinced! How do I install chocolatey?&lt;/strong&gt; We try to make that simple as well. Open powershell, make sure execution policy is unrestricted (Set-ExecutionPolicy Unrestricted), and paste &lt;/p&gt;

&lt;pre&gt;iex ((new-object net.webclient).DownloadString(&amp;quot;http://bit.ly/psChocInstall&amp;quot;))&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;I have included tools (executables) in my &lt;/strong&gt;&lt;a href="http://nuget.org"&gt;&lt;strong&gt;nuget.org&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; packages, like Statlight and Fubu. Can I use chocolatey to “install” them?&lt;/strong&gt; Yes, just call install like normal, it will check chocolatey.org first and then nuget.org. If it finds an executable in the package, it will automatically put it on the path.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How is chocolatey different from other windows machine package managers?&lt;/strong&gt; It has PowerShell instructions for how to download native installers from the distribution source and install applications on your machine. It uses PowerShell so you can give it any instruction you want for install and configuration. It automatically makes batch command file links for executables you have included in your package or have downloaded to the package directory with the PowerShell script.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is chocolatey awesome?&lt;/strong&gt; I’m biased, but YES!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is chocolatey version 1?&lt;/strong&gt; Not yet, we have a few things going into the &lt;a href="https://github.com/chocolatey/chocolatey/wiki/Roadmap"&gt;roadmap&lt;/a&gt; and enhancements being logged: &lt;a title="https://github.com/chocolatey/chocolatey/issues" href="https://github.com/chocolatey/chocolatey/issues"&gt;https://github.com/chocolatey/chocolatey/issues&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I’m not convinced, where do I find more information?&lt;/strong&gt; I’ve listed quite a few resources below. I am likely missing some.&lt;/p&gt;

&lt;h4&gt;References&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://chocolatey.org/"&gt;http://chocolatey.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/chocolatey/chocolatey/wiki"&gt;https://github.com/chocolatey/chocolatey/wiki&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://groups.google.com/group/chocolatey"&gt;http://groups.google.com/group/chocolatey&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://twitter.com/chocolateynuget"&gt;http://twitter.com/chocolateynuget&lt;/a&gt;&amp;#160;&lt;/p&gt;

&lt;h4&gt;Videos&lt;/h4&gt;

&lt;p&gt;Chocolatey In Action (11 apps/tools in less than 7 minutes!): &lt;a href="http://www.youtube.com/watch?v=N-hWOUL8roU"&gt;http://www.youtube.com/watch?v=N-hWOUL8roU&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Create a Chocolatey Package: &lt;a href="http://www.youtube.com/watch?v=Wt_unjS_SUo"&gt;http://www.youtube.com/watch?v=Wt_unjS_SUo&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;Blog Posts&lt;/h4&gt;

&lt;p&gt;This dates all the way back to March 2011. Chocolatey has been actively worked on for awhile… &lt;/p&gt;

&lt;p&gt;&lt;a href="http://nuget.codeplex.com/discussions/251435"&gt;http://nuget.codeplex.com/discussions/251435&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://nuget.codeplex.com/discussions/257341"&gt;http://nuget.codeplex.com/discussions/257341&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://chrisortman.wordpress.com/2011/04/01/getting-started-with-chocolatey/"&gt;http://chrisortman.wordpress.com/2011/04/01/getting-started-with-chocolatey/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.lessthandot.com/index.php/DesktopDev/MSTech/chocolatey-apt-get-for-windows"&gt;http://blogs.lessthandot.com/index.php/DesktopDev/MSTech/chocolatey-apt-get-for-windows&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.lessthandot.com/index.php/DesktopDev/MSTech/getting-chocolatey-to-work-when"&gt;http://blogs.lessthandot.com/index.php/DesktopDev/MSTech/getting-chocolatey-to-work-when&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.lessthandot.com/index.php/DesktopDev/MSTech/chocolatey-gui"&gt;http://blogs.lessthandot.com/index.php/DesktopDev/MSTech/chocolatey-gui&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.lessthandot.com/index.php/DesktopDev/MSTech/making-a-chocolatey-package"&gt;http://blogs.lessthandot.com/index.php/DesktopDev/MSTech/making-a-chocolatey-package&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.counity.at/blog/archives/253"&gt;http://www.counity.at/blog/archives/253&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.xavierdecoster.com/post/2011/09/30/An-overview-of-the-NuGet-ecosystem.aspx"&gt;http://www.xavierdecoster.com/post/2011/09/30/An-overview-of-the-NuGet-ecosystem.aspx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.codiceplastico.com/melkio/index.php/2011/10/06/chocolatey-un-package-manager-per-windows/"&gt;http://blog.codiceplastico.com/melkio/index.php/2011/10/06/chocolatey-un-package-manager-per-windows/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://elegantcode.com/2011/10/05/chocolatey-the-free-and-open-source-windows-app-store"&gt;http://elegantcode.com/2011/10/05/chocolatey-the-free-and-open-source-windows-app-store&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=68256" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RXT57J3AajUG1xnhkbzlrVt-saI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RXT57J3AajUG1xnhkbzlrVt-saI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RXT57J3AajUG1xnhkbzlrVt-saI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RXT57J3AajUG1xnhkbzlrVt-saI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Git/default.aspx">Git</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Tools/default.aspx">Tools</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/.NET/default.aspx">.NET</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Agile/default.aspx">Agile</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Gems/default.aspx">Gems</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/NuGet/default.aspx">NuGet</category></item><item><title>Extend NuGet Command Line</title><link>http://devlicio.us/blogs/rob_reynolds/archive/2011/07/15/extend-nuget-command-line.aspx</link><pubDate>Fri, 15 Jul 2011 08:00:00 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:67993</guid><dc:creator>Rob Reynolds</dc:creator><slash:comments>4</slash:comments><wfw:commentRss>http://devlicio.us/blogs/rob_reynolds/rsscomments.aspx?PostID=67993</wfw:commentRss><wfw:comment>http://devlicio.us/blogs/rob_reynolds/commentapi.aspx?PostID=67993</wfw:comment><comments>http://devlicio.us/blogs/rob_reynolds/archive/2011/07/15/extend-nuget-command-line.aspx#comments</comments><description>&lt;p&gt;Yesterday I started a &lt;a href="http://nuget.codeplex.com/discussions/265199"&gt;discussion&lt;/a&gt; about adding a new command to &lt;a href="http://nuget.org/list/packages/nuget.commandline"&gt;nuget.exe&lt;/a&gt;. It ended in creating an &lt;a href="https://github.com/ferventcoder/nuget.copy.extension"&gt;extension&lt;/a&gt; to the command line that behaves in the same way without having to dive into the nuget code base or add more complexity to it. &lt;/p&gt;
&lt;p&gt;I haven&amp;rsquo;t seen any blog posts or documentation surrounding this new concept (new in nuget 1.4) of extending the command line except for Matt Hamilton&amp;rsquo;s posts on using &lt;a href="http://matthamilton.net/nuget-for-plug-ins"&gt;NuGet for plug-ins&lt;/a&gt; and &lt;a href="http://matthamilton.net/nuget-with-mef"&gt;NuGet with MEF&lt;/a&gt; (which are not quite this concept).&lt;/p&gt;
&lt;p&gt;Here is my experience. I found looking at the commands in nuget.exe (&lt;a href="http://nuget.codeplex.com/SourceControl/changeset/view/28eda598a096#src%2fCommandLine%2fCommands%2fCommand.cs"&gt;NuGet.Commands&lt;/a&gt;) to make it easy to create my own command and extend NuGet.&amp;nbsp; Some of this information may not be exactly what you should do, but it worked for me.&lt;/p&gt;
&lt;h4&gt;The Code&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Create a new Visual Studio Solution and add a Class Library (full .NET 4.0 framework). &lt;/li&gt;
&lt;li&gt;Add A NuGet Reference to Nuget.CommandLine. &lt;/li&gt;
&lt;li&gt;Now manually add a reference to nuget.exe. Yes, you can add references to .NET executables. &lt;/li&gt;
&lt;li&gt;Adding a reference to nuget.exe gives you access to &lt;a href="http://nuget.codeplex.com/SourceControl/changeset/view/28eda598a096#src%2fCommandLine%2fCommands%2fCommand.cs"&gt;Command&lt;/a&gt; and the &lt;a href="http://nuget.codeplex.com/SourceControl/changeset/view/28eda598a096#src%2fCommandLine%2fAttributes%2fCommandAttribute.cs"&gt;CommandAttribute&lt;/a&gt;. These are what I see as necessary to extending NuGet. &lt;/li&gt;
&lt;li&gt;Add a reference to &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.composition.aspx"&gt;System.ComponentModel.Composition&lt;/a&gt; (MEF). &lt;/li&gt;
&lt;li&gt;Now you provide a class and resource file per command. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The resource file contains the command descriptions:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_73075634.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="CopyResources.resx " border="0" alt="CopyResources.resx" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_6DB86F83.png" width="644" height="293" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The class is attributed with &lt;a href="http://nuget.codeplex.com/SourceControl/changeset/view/28eda598a096#src%2fCommandLine%2fAttributes%2fCommandAttribute.cs"&gt;CommandAttribute&lt;/a&gt; and inherits from &lt;a href="http://nuget.codeplex.com/SourceControl/changeset/view/28eda598a096#src%2fCommandLine%2fCommands%2fCommand.cs"&gt;Command&lt;/a&gt;.&lt;/p&gt;
&lt;pre class="c#" name="code"&gt;[Command(typeof (CopyResources), &amp;quot;copy&amp;quot;, &amp;quot;Description&amp;quot;, MinArgs = 1, MaxArgs = 5, UsageSummaryResourceName = &amp;quot;UsageSummary&amp;quot;,UsageDescriptionResourceName = &amp;quot;UsageDescription&amp;quot;)]
public class Copy : Command {}&lt;/pre&gt;
&lt;p&gt;The &lt;strong&gt;Command Attribute&lt;/strong&gt; asks for a few things: &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;em&gt;typeof (CopyResources)&lt;/em&gt; &amp;ndash; &lt;strong&gt;ResourceClass&lt;/strong&gt; - What is the resx file that the command will draw its help information from? &lt;/li&gt;
&lt;li&gt;&lt;em&gt;&amp;ldquo;copy&amp;rdquo;&lt;/em&gt; &amp;ndash; &lt;strong&gt;CommandName&lt;/strong&gt; - what is the name of the command? &lt;/li&gt;
&lt;li&gt;&lt;em&gt;&amp;ldquo;Description&amp;rdquo;&lt;/em&gt; &amp;ndash; &lt;strong&gt;Description&lt;/strong&gt; - resource name in the resource file that gives the description on the command line. 
    &lt;br /&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_0A05B1A4.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Description - Copies a package from one source to another source" border="0" alt="Description - Copies a package from one source to another source" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_0DA3CC81.png" width="404" height="75" /&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;em&gt;MinArgs=1&lt;/em&gt; &amp;ndash; &lt;strong&gt;Minimum Arguments&lt;/strong&gt; - what are the minimum number of arguments that can be passed to this command and satisfy its needs? &lt;/li&gt;
&lt;li&gt;&lt;em&gt;MaxArgs = 5&lt;/em&gt; &amp;ndash; &lt;strong&gt;Maximum Arguments&lt;/strong&gt; - what are the maximum number of arguments that can be passed to this command? &lt;/li&gt;
&lt;li&gt;&lt;em&gt;UsageSummaryResourceName = &amp;ldquo;UsageSummary&amp;rdquo;&lt;/em&gt; &amp;ndash; &lt;strong&gt;UsageSummary&lt;/strong&gt; - a very short amount of information that explains the usage of the command. &lt;/li&gt;
&lt;li&gt;&lt;em&gt;UsageDescription = &amp;ldquo;Usage Description&amp;rdquo;&lt;/em&gt; &amp;ndash; &lt;strong&gt;UsageDescription&lt;/strong&gt; - more detailed information about how to use the command. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Here is what the command looks like when run with help. Notice where from the CopyResources.resx these items match up to the screen.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_41D7F5C7.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="The help command showing the items from the resx file." border="0" alt="The help command showing the items from the resx file." src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_481ECC55.png" width="644" height="120" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now that we have the command attribute finished, let&amp;rsquo;s work on the command itself.&lt;/p&gt;
&lt;pre class="c#" name="code"&gt;private readonly IPackageRepositoryFactory _repositoryFactory;
private readonly IPackageSourceProvider _sourceProvider;

[ImportingConstructor]
public Copy(IPackageRepositoryFactory repositoryFactory, IPackageSourceProvider sourceProvider)
{
    _repositoryFactory = repositoryFactory;
    _sourceProvider = sourceProvider;
}

[Option(typeof (CopyResources), &amp;quot;SourceDescription&amp;quot;, AltName = &amp;quot;src&amp;quot;)]
public string Source { get; set; }

[Option(typeof (CopyResources), &amp;quot;DestinationDescription&amp;quot;, AltName = &amp;quot;dest&amp;quot;)]
public string Destination { get; set; }

[Option(typeof (CopyResources), &amp;quot;VersionDescription&amp;quot;)]
public string Version { get; set; }

[Option(typeof (CopyResources), &amp;quot;ApiKeyDescription&amp;quot;)]
public string ApiKey { get; set; }

public override void ExecuteCommand()
{
    string packageId = base.Arguments[0];

    Console.WriteLine(&amp;quot;Copying {0} from {1} to {2}.&amp;quot;, string.IsNullOrEmpty(Version) ? packageId : packageId + &amp;quot; &amp;quot; + Version,
                      string.IsNullOrEmpty(Source) ? &amp;quot;any source&amp;quot; : Source, Destination);

    //do work son
 
}&lt;/pre&gt;
&lt;p&gt;Important things to note:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;[ImportingConstructor]&lt;/strong&gt; is the constructor that will be called. Notice I am having it get passed an IPackageRepositoryFactory and an IPackageSourceProvider. Most of my work is already done for me setting these up in the command line application. &lt;/li&gt;
&lt;li&gt;Each command line option has &lt;strong&gt;[Option(typeof (CopyResources), &amp;quot;DestinationDescription&amp;quot;, AltName = &amp;quot;dest&amp;quot;)] &lt;/strong&gt;. &lt;/li&gt;
&lt;li&gt;Notice again with the options we specify the Resource File with an Option Description (&lt;em&gt;&amp;ldquo;DestinationDescription&amp;rdquo;&lt;/em&gt;) and an optional short parameter for the Option (&lt;em&gt;AltName&lt;/em&gt;). Notice how that translates into options on the help command. 
    &lt;br /&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_382F8791.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="options available with the custom command" border="0" alt="options available with the custom command" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_69BAF526.png" width="504" height="102" /&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;I am overriding &lt;strong&gt;ExecuteCommand&lt;/strong&gt; and pulling the packageId as the first item from base.Arguments.&amp;nbsp; &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;From here I can do all the work necessary for my custom command.&lt;/p&gt;
&lt;h4&gt;Get NuGet to Recognize It&lt;/h4&gt;
&lt;p&gt;Nuget looks for custom commands in &lt;strong&gt;%LocalAppData%\NuGet\Commands&lt;/strong&gt;. Drop your DLL in there and then call nuget. See if it registers your command. This will allow you to continue to tweak your package prior to releasing it in the wild.&lt;/p&gt;
&lt;h4&gt;Use AddExtension to Add New Commands&lt;/h4&gt;
&lt;p&gt;NuGet Extend (AddConsoleExtension) makes installing new commands to the console from NuGet packages super easy. You install it by typing the following:&lt;/p&gt;
&lt;p&gt;NuGet.exe Install /ExcludeVersion /OutputDir %LocalAppData%\NuGet\Commands AddConsoleExtension&lt;/p&gt;
&lt;p&gt;From then on, adding a new extension is as easy as &lt;/p&gt;
&lt;pre&gt;nuget.exe addExtension packageName&lt;/pre&gt;
&lt;pre&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_4FE6BEF7.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="nuget addExtension nuget.copy.extension" border="0" alt="nuget addExtension nuget.copy.extension" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_646C0E75.png" width="404" height="47" /&gt;&lt;/a&gt;&lt;/pre&gt;
&lt;h4&gt;Distribute Your Extension as a NuGet Package And Enjoy Your New Custom Command&lt;/h4&gt;
&lt;p&gt;When I created &lt;a href="http://nuget.org/List/Packages/nuget.copy.extension"&gt;my package&lt;/a&gt;, I noted in the nuspec description that &lt;a href="http://nuget.org/list/packages/addconsoleextension"&gt;Nuget Extend&lt;/a&gt; should be installed first.&amp;nbsp; I also added the tag &lt;strong&gt;ConsoleExtension&lt;/strong&gt; since that is what NuGet Extend used. All I package up is the DLL. The nuspec has ZERO dependencies specified (I do &lt;strong&gt;not&lt;/strong&gt; include that I have a dependency on NuGet.CommandLine). I don&amp;rsquo;t need to include the nuget dependency since that will be resolved when the extension is run with nuget.exe.&lt;/p&gt;
&lt;p&gt;Now that you have your custom command, enjoy life a little easier. And tell others about it.&lt;/p&gt;
&lt;h4&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_43E4CEC3.png"&gt;&lt;img style="background-image:none;padding-left:0px;padding-right:0px;display:inline;padding-top:0px;border-width:0px;border:0;" title="nuget copy castle.windsor -destination awesome" border="0" alt="nuget copy castle.windsor -destination awesome" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_7C2345DB.png" width="504" height="144" /&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href="http://nuget.org/List/Packages/nuget.copy.extension"&gt;NuGet Copy Extension&lt;/a&gt; is the extension I wrote that pulls packages from one source and pushes them to another. If you are a company that wants to house packages in a company feed and perhaps shut off the official feed for the rest of your developers, then this command may come in very handy.&lt;/p&gt;
&lt;p&gt;Have Fun!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=67993" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/P2e6OuM-Km934wTUAiIPHkXd0Yo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/P2e6OuM-Km934wTUAiIPHkXd0Yo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/P2e6OuM-Km934wTUAiIPHkXd0Yo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/P2e6OuM-Km934wTUAiIPHkXd0Yo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Tools/default.aspx">Tools</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/.NET/default.aspx">.NET</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/NuGet/default.aspx">NuGet</category></item><item><title>Iowa Code Camp Presentations</title><link>http://devlicio.us/blogs/rob_reynolds/archive/2011/05/06/iowa-code-camp-presentations.aspx</link><pubDate>Fri, 06 May 2011 05:04:21 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:67230</guid><dc:creator>Rob Reynolds</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://devlicio.us/blogs/rob_reynolds/rsscomments.aspx?PostID=67230</wfw:commentRss><wfw:comment>http://devlicio.us/blogs/rob_reynolds/commentapi.aspx?PostID=67230</wfw:comment><comments>http://devlicio.us/blogs/rob_reynolds/archive/2011/05/06/iowa-code-camp-presentations.aspx#comments</comments><description>&lt;p&gt;Last weekend I went up to &lt;a href="http://www.iowacodecamp.com/"&gt;Iowa Code Camp&lt;/a&gt; in Cedar Rapids and had the opportunity to do two presentations, one on NuGet and one known as the Automation Tools Roundup.&amp;#160; ICC is one of my favorite conferences every year. It is twice a year and I try to make it to at least one of them. The people that attend this conference really make it worth the money you spend in travel expenses. Definitely recommended.&lt;/p&gt;  &lt;h4&gt;&lt;u&gt;Automation Tools Roundup&lt;/u&gt;&lt;/h4&gt;  &lt;p&gt;This is my favorite session to give because it requires crowd participation and it is never the same presentation twice. We just start going through automation tools of any sort that can help people be more productive through their use. The crowd picks which ones we talk about (for the most part). If there is time at the end we find ourselves trying to learn new tools.&lt;/p&gt;  &lt;p&gt;We talked about several tools and as part of the session people from the audience are invited to come up and talk about a tool they like. &lt;a href="http://lostechies.com/keithdahlby/"&gt;Keith Dahlby&lt;/a&gt; came up and talked about &lt;a href="https://github.com/dahlbyk/posh-git"&gt;Posh-Git&lt;/a&gt; which has an awesome interface for showing me my git status right on the prompt.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_416F462F.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="poshgit" border="0" alt="poshgit" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_3977A3CD.png" width="450" height="99" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Other tools covered:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://nuget.org/List/Packages/chocolatey"&gt;Chocolatey&lt;/a&gt; – I am going to talk about this tool soon. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://nuget.org/list/packages/launchy"&gt;Launchy&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://nuget.org/list/packages/console2"&gt;Console2&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;ChuckNorrisFramework: &lt;a href="http://projectuppercut.org"&gt;UppercuT&lt;/a&gt; &amp;amp; &lt;a href="http://nuget.org/list/packages/warmup"&gt;WarmuP&lt;/a&gt; were demoed, &lt;a href="http://nuget.org/list/packages/roundhouse"&gt;RoundhousE&lt;/a&gt; &amp;amp; &lt;a href="https://github.com/chucknorris/dropkick"&gt;DropkicK&lt;/a&gt; were mentioned &lt;/li&gt;    &lt;li&gt;&lt;a href="http://nuget.org/list/packages/stexbar"&gt;StExBar&lt;/a&gt; &amp;amp; &lt;a href="http://nuget.org/list/packages/grepwin"&gt;grepWin&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://nuget.org/List/Packages/notepadplusplus"&gt;Notepad++&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://nuget.org/list/packages/psake"&gt;PSake&lt;/a&gt; was mentioned &lt;/li&gt;    &lt;li&gt;&lt;a href="http://nuget.org/list/packages/sysinternals"&gt;SysInternals&lt;/a&gt; was mentioned, ZoomIt was shown &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I believe we talked about a few more tools. If you were there and you remember, please hit the comments! Because this presentation is so dynamic, there are no slides. &lt;/p&gt;  &lt;h4&gt;&lt;u&gt;FREE as in BEER!! Manage Your Packages w/NuGet&lt;/u&gt;&lt;/h4&gt;  &lt;p&gt;I enjoy showing people what is possible out there, even with some of the things that are not perfect. &lt;a href="http://nuget.codeplex.com"&gt;NuGet&lt;/a&gt; has a few kinks, but the community is helping and the team is committed to continually making the product better. This presentation is dedicated to showing you how to get started to building your own packages to hosting your own feed. We look at the GUI, the powershell console, the command line and the package explorer. The last 10 minutes of the presentation are dedicated to a new tool that can help make you hyper productive! This presentation is a lot of fun and seeing people really understand what NuGet can do for them is awesome! &lt;/p&gt;  &lt;p&gt;Here are the slides: &lt;a title="http://dl.dropbox.com/u/9391884/NuGet.ppsx" href="http://dl.dropbox.com/u/9391884/NuGet.ppsx"&gt;http://dl.dropbox.com/u/9391884/NuGet.ppsx&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=67230" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZL1rl5bsN-n88CFM6PpnTbS6AH0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZL1rl5bsN-n88CFM6PpnTbS6AH0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ZL1rl5bsN-n88CFM6PpnTbS6AH0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZL1rl5bsN-n88CFM6PpnTbS6AH0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/HowTo/default.aspx">HowTo</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Tools/default.aspx">Tools</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/.NET/default.aspx">.NET</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Events/default.aspx">Events</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/NuGet/default.aspx">NuGet</category></item><item><title>MVP Renewal and News</title><link>http://devlicio.us/blogs/rob_reynolds/archive/2011/04/14/mvp-renewal-and-news.aspx</link><pubDate>Thu, 14 Apr 2011 05:22:03 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:66909</guid><dc:creator>Rob Reynolds</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://devlicio.us/blogs/rob_reynolds/rsscomments.aspx?PostID=66909</wfw:commentRss><wfw:comment>http://devlicio.us/blogs/rob_reynolds/commentapi.aspx?PostID=66909</wfw:comment><comments>http://devlicio.us/blogs/rob_reynolds/archive/2011/04/14/mvp-renewal-and-news.aspx#comments</comments><description>&lt;p&gt;It appears that my work in the community and the nominations received from others has secured my &lt;a href="https://mvp.support.microsoft.com/profile/Rob.Reynolds"&gt;status&lt;/a&gt; as an MVP for a second year.&lt;/p&gt;  &lt;p&gt;Thank you all for the award and thank you everyone (including Microsoft) for valuing my contributions to the community.&lt;/p&gt;  &lt;p&gt;I noticed last year I did quite a bit of travelling and talks. I’m going to need to work hard to keep that up this year. I’m also hoping to gear up for the v1 release of &lt;a href="http://projectroundhouse.org"&gt;RoundhousE&lt;/a&gt; and &lt;a href="https://github.com/chucknorris/dropkick"&gt;DropkicK&lt;/a&gt; as well as something new I’ve been working on known as &lt;a href="http://nuget.org/list/Packages/chocolatey"&gt;chocolatey&lt;/a&gt; (more on this in a future post – stay tuned!). This year as well hope to get out to some of my favorite conferences (like &lt;a href="http://iowacodecamp.com"&gt;Iowa Code Camp&lt;/a&gt;), start v2 of &lt;a href="http://projectuppercut.org"&gt;UppercuT&lt;/a&gt; (that &lt;a href="http://codebetter.com/drusellers/"&gt;Dru&lt;/a&gt; and I have been talking about almost as long as UC has been around), and get some of these other tools to work on Linux (UC already does).&lt;/p&gt;  &lt;p&gt;I’m pretty excited about this year and recently changed jobs back in February for those who may not have heard. Now instead of working for a bank that has no money inside and the doors are always locked, I’ll be playing with Crop Insurance.&lt;/p&gt;  &lt;p&gt;Do me a favor and &lt;a href="http://mvp.support.microsoft.com/gp/mvpnominate"&gt;nominate&lt;/a&gt; &lt;a href="http://codebetter.com/drusellers/"&gt;Dru Sellers&lt;/a&gt; for MVP (Visual C#). His contributions to where many people are as developers/individuals (including me) would not have been possible without his influence and mentorship. His investment in others is huge and that is a defining factor of the MVP program.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=66909" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_tw4Y2BQ_UKpTgO7eTFBun2CHO8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_tw4Y2BQ_UKpTgO7eTFBun2CHO8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_tw4Y2BQ_UKpTgO7eTFBun2CHO8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_tw4Y2BQ_UKpTgO7eTFBun2CHO8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Events/default.aspx">Events</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/News/default.aspx">News</category></item><item><title>Published Applications AKA _PublishedApplications</title><link>http://devlicio.us/blogs/rob_reynolds/archive/2011/03/22/published-applications-aka-publishedapplications.aspx</link><pubDate>Wed, 23 Mar 2011 02:23:12 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:66726</guid><dc:creator>Rob Reynolds</dc:creator><slash:comments>4</slash:comments><wfw:commentRss>http://devlicio.us/blogs/rob_reynolds/rsscomments.aspx?PostID=66726</wfw:commentRss><wfw:comment>http://devlicio.us/blogs/rob_reynolds/commentapi.aspx?PostID=66726</wfw:comment><comments>http://devlicio.us/blogs/rob_reynolds/archive/2011/03/22/published-applications-aka-publishedapplications.aspx#comments</comments><description>&lt;blockquote&gt;   &lt;p&gt;Less maintenance. Less work to package during your automated builds. Too easy.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_66ABB1F6.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:0px 0px 5px 5px;padding-left:0px;padding-right:0px;display:inline;float:right;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="_PublishedWebsites" border="0" alt="_PublishedWebsites" align="right" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_01482843.png" width="244" height="147" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h4&gt;&lt;u&gt;Remember Our Old Friend _PublishedWebsites?&lt;/u&gt;&lt;/h4&gt;  &lt;p&gt;You’ve probably seen the _PublishedWebsites folder when building websites in automated builds. If not you can stop paying attention now. &lt;/p&gt;  &lt;p&gt;Still with me? Great! So you know how it packages up everything nicely with content files going where they should with nearly ZERO cost to your build scripts. All you need to do is override the output directory (OutDir) and you get this feature. This behavior is arguably one of the best things that web projects do during automated builds.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_662F5934.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Nice Package!" border="0" alt="Nice Package!" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_4F20D7F8.png" width="244" height="142" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;So how many of you, like me, just accepted the fact that this was just for web, and not other applications, and went on maintaining your build scripts to package up your other application types? Yeah, me too. Painful…and we looked at complicated ways of solving this problem. There has to be a better way. &lt;/p&gt;  &lt;h4&gt;&lt;u&gt;Introducing _PublishedApplications&lt;/u&gt;&lt;/h4&gt;  &lt;p&gt;Recently &lt;a href="http://davidkeaveny.blogspot.com/2011/03/publishing-net-applications.html"&gt;David Keaveny&lt;/a&gt; came up with an idea to take the Microsoft.Web.targets file (which produces the _PublishedWebsites folder – it is imported by the csproj/vbproj file), change up a couple of variables and rename it to the Microsoft.&lt;strong&gt;Application&lt;/strong&gt;.targets file. When I saw this I thought this was an awesome idea! How come I didn’t think of that? Why didn’t anyone else see the simple solution?&lt;/p&gt;  &lt;p&gt;The concept is simple – You add the .targets file to your application. Then you edit the csproj/vbproj file by hand to add in the import for the .targets file.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_548F489C.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="MSBuild Import" border="0" alt="MSBuild Import" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_2799E5C1.png" width="244" height="73" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And you get a nice folder with your application bits nicely packaged for you.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_7F8736A1.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="_PublishedApplications" border="0" alt="_PublishedApplications" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_4FE91815.png" width="244" height="84" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Note: &lt;/strong&gt;The _PublishedApplications folder ONLY shows up when you override the output directory during an automated build or command line access to building a solution.&amp;#160; The rest of the time your builds go to their normal folders (i.e. bin\Debug).&lt;/p&gt;  &lt;h4&gt;&lt;u&gt;PublishedApplications Is On NuGet&lt;/u&gt;&lt;/h4&gt;  &lt;p&gt;&lt;a title="http://nuget.org/list/packages/publishedapplications" href="http://nuget.org/list/packages/publishedapplications"&gt;I&lt;/a&gt; loved this idea so much I did the work to figure out how to automate the imports part of the idea so it was a simple command to use Microsoft.Application.targets. And this is on NuGet: &lt;a title="http://nuget.org/list/packages/publishedapplications" href="http://nuget.org/list/packages/publishedapplications" target="_blank"&gt;http://nuget.org/list/packages/publishedapplications&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_47F175B3.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="NuGet Package Manager Console" border="0" alt="NuGet Package Manager Console" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_2330386F.png" width="644" height="177" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;pre&gt;Install-Package PublishedApplications&lt;/pre&gt;

&lt;h4&gt;&lt;u&gt;Want A Demonstration?&lt;/u&gt;&lt;/h4&gt;

&lt;p&gt;Why talk when we can just look at a short video that demonstrates this idea?&lt;/p&gt;

&lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:501a2416-94e5-4276-933e-1d31cd4b6a0a" class="wlWriterEditableSmartContent"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=-oPtsb11vBU" target="_new"&gt;&lt;img src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/videoa54b057f5301_5F00_519B748F.jpg" style="border-style:none;" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="width:448px;clear:both;font-size:.8em;"&gt;Install-Package PublishedApplications&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Special thanks to David Keaveny for this great idea!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=66726" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/oIiO604oHwjkJHBcT-WX4JtEPro/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oIiO604oHwjkJHBcT-WX4JtEPro/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/oIiO604oHwjkJHBcT-WX4JtEPro/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oIiO604oHwjkJHBcT-WX4JtEPro/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/HowTo/default.aspx">HowTo</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/UppercuT/default.aspx">UppercuT</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Tools/default.aspx">Tools</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/.NET/default.aspx">.NET</category></item><item><title>From Zero To Deployed Contest - Winner Announced PLUS Extension To Most Creative</title><link>http://devlicio.us/blogs/rob_reynolds/archive/2011/03/21/from-zero-to-deployed-contest-winner-announced-plus-extension-to-most-creative.aspx</link><pubDate>Mon, 21 Mar 2011 05:01:40 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:66721</guid><dc:creator>Rob Reynolds</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://devlicio.us/blogs/rob_reynolds/rsscomments.aspx?PostID=66721</wfw:commentRss><wfw:comment>http://devlicio.us/blogs/rob_reynolds/commentapi.aspx?PostID=66721</wfw:comment><comments>http://devlicio.us/blogs/rob_reynolds/archive/2011/03/21/from-zero-to-deployed-contest-winner-announced-plus-extension-to-most-creative.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/appharbor_5F00_6C0AE27B.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:0px 5px 5px 0px;padding-left:0px;padding-right:0px;display:inline;float:left;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="appharbor" border="0" alt="appharbor" align="left" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/appharbor_5F00_thumb_5F00_311389E5.png" width="154" height="172" /&gt;&lt;/a&gt;Recently we had a &lt;a href="http://devlicio.us/blogs/rob_reynolds/archive/2011/02/22/from-zero-to-deployed-contest-prizes-announced.aspx" target="_blank"&gt;contest&lt;/a&gt; to see who could beat my time to get from no code to deployed. Thanks to everyone that participated and everyone that thought about participating in the contest.&lt;/p&gt;  &lt;h4&gt;&lt;u&gt;Most Creative From Zero To Deployed Contest Extended!&lt;/u&gt;&lt;/h4&gt;  &lt;p&gt;Unfortunately there were not enough entries to award the most creative video for ZtD. So what we are doing is extending the most creative until May 15, 2011 @ 11:59 PM CST.&amp;#160; This gives you almost two months to get your videos in! If you entered before, you are allowed to re-enter for the most creative (even if you won the first contest).There is no minimum number of entries this time around either. Refresh yourself of the rules/prizes from the &lt;a href="http://devlicio.us/blogs/rob_reynolds/archive/2011/02/22/from-zero-to-deployed-contest-prizes-announced.aspx"&gt;last post&lt;/a&gt; and get coding!&lt;/p&gt;  &lt;h4&gt;&lt;u&gt;And The Winner Is…&lt;/u&gt;&lt;/h4&gt;  &lt;p&gt;I want to thank those that participated. It takes a lot to code against the clock, and even more to capture it on video and put it up for the world to see. Those two factors alone helped me realize I wouldn’t get a lot of entries and I’m excited that at least two people jumped in with submissions! Cool points to all participants. &lt;/p&gt;  &lt;p&gt;As long as the rules were followed, the person with the best time would win. And that person would win $2348 worth of prizes! To recap the prizes: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;$50 Gift Card (provided by me) &lt;/li&gt;    &lt;li&gt;$100 service credit for AppHarbor (provided by AppHarbor) &lt;/li&gt;    &lt;li&gt;Full personal license of ReSharper (provided by Jet Brains) &lt;/li&gt;    &lt;li&gt;Telerik Ultimate Collection for .NET (provided by Telerik) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;And the winner is &lt;/strong&gt;&lt;a href="http://about.me/jpogran"&gt;&lt;strong&gt;James Pogran&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; with a time of 5:50!&lt;/strong&gt; Congratulations man! Be sure to give him a shout out on &lt;a href="http://twitter.com/ender2025" target="_blank"&gt;twitter&lt;/a&gt;!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=66721" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/WI1IzZ-m6lThsJM3mjFCrV7Jrto/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WI1IzZ-m6lThsJM3mjFCrV7Jrto/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/WI1IzZ-m6lThsJM3mjFCrV7Jrto/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WI1IzZ-m6lThsJM3mjFCrV7Jrto/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/RoundhousE/default.aspx">RoundhousE</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/UppercuT/default.aspx">UppercuT</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Tools/default.aspx">Tools</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/.NET/default.aspx">.NET</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Events/default.aspx">Events</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Challenge/default.aspx">Challenge</category></item><item><title>From Zero To Deployed Contest - Prizes Announced</title><link>http://devlicio.us/blogs/rob_reynolds/archive/2011/02/22/from-zero-to-deployed-contest-prizes-announced.aspx</link><pubDate>Wed, 23 Feb 2011 00:33:59 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:66628</guid><dc:creator>Rob Reynolds</dc:creator><slash:comments>4</slash:comments><wfw:commentRss>http://devlicio.us/blogs/rob_reynolds/rsscomments.aspx?PostID=66628</wfw:commentRss><wfw:comment>http://devlicio.us/blogs/rob_reynolds/commentapi.aspx?PostID=66628</wfw:comment><comments>http://devlicio.us/blogs/rob_reynolds/archive/2011/02/22/from-zero-to-deployed-contest-prizes-announced.aspx#comments</comments><description>&lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Do you have what it takes to meet the challenge? We’ll make it worth it.&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/appharbor_5F00_43702413.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:0px 0px 5px 5px;padding-left:0px;padding-right:0px;display:inline;float:right;border-top:0px;border-right:0px;padding-top:0px;" title="appharbor" border="0" alt="appharbor" align="right" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/appharbor_5F00_thumb_5F00_4B73D843.png" width="182" height="204" /&gt;&lt;/a&gt;You may have noticed at the end of my last &lt;a href="http://devlicio.us/blogs/rob_reynolds/archive/2011/02/16/appharbor-azure-done-right-aka-heroku-for-net.aspx"&gt;post&lt;/a&gt; I threw down the community challenge to get from zero to deployed faster than me.&lt;/p&gt;  &lt;h4&gt;&lt;u&gt;The Challenge&lt;/u&gt;&lt;/h4&gt;  &lt;p&gt;My time was 13:48 to be from zero to deployed. &lt;strong&gt;Beat my time and show it in a video response.&lt;/strong&gt; The person with the best time by March 15th @ 11:59PM CST will receive a prize.&lt;/p&gt;  &lt;p&gt;Here are the links to the videos:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;#1 - &lt;a href="http://www.youtube.com/watch?v=cZIUVfHWsbc" target="_blank"&gt;http://www.youtube.com/watch?v=cZIUVfHWsbc&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;#2 - &lt;a href="http://www.youtube.com/watch?v=l7WluaXIya0" target="_blank"&gt;http://www.youtube.com/watch?v=l7WluaXIya0&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;#3 - &lt;a href="http://www.youtube.com/watch?v=IqPh7wbWsLc" target="_blank"&gt;http://www.youtube.com/watch?v=IqPh7wbWsLc&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;&lt;u&gt;The Rules&lt;/u&gt;&lt;/h4&gt;  &lt;p&gt;Let’s revisit those ground rules before I tell you what the prizes will be:&lt;/p&gt;  &lt;p&gt;Ground rules:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;.NET Application with a valid database connection &lt;/li&gt;    &lt;li&gt;Start from Zero &lt;/li&gt;    &lt;li&gt;Deployed with AppHarbor or an alternative &lt;/li&gt;    &lt;li&gt;A timer displayed in the video that runs during the entire process &lt;/li&gt;    &lt;li&gt;Video response published on YouTube or acceptable alternative &lt;/li&gt;    &lt;li&gt;Video(s) must be published by March 15th at 11:59PM CST. &lt;/li&gt;    &lt;li&gt;Either post the link here as a comment or on YouTube as a response (also by 11:59PM CST March 15th) &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;&lt;u&gt;The Prizes&lt;/u&gt;&lt;/h4&gt;  &lt;p&gt;The prize package for the best time is:   &lt;br /&gt;&lt;a href="http://www.jetbrains.com/resharper"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="ReSharper" border="0" alt="ReSharper" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/ReSharper_5F00_374A95ED.png" width="100" height="100" /&gt;&lt;/a&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://www.telerik.com/" target="_blank"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="telerik" border="0" alt="telerik" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/telerik_5F00_491703ED.png" width="110" height="100" /&gt;&lt;/a&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/appharbor_5F00_24C1F99E.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="appharbor" border="0" alt="appharbor" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/appharbor_5F00_thumb_5F00_7B3A4038.png" width="89" height="100" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;$50 Gift Card or equivalent – Provided by yours truly. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://appharbor.com/"&gt;AppHarbor&lt;/a&gt; $100 service credit – AppHarbor will provide a $100 credit for their services once they launch payments. Thank you to the &lt;a href="http://twitter.com/friism"&gt;folks&lt;/a&gt; &lt;a href="http://twitter.com/runesoerensen"&gt;at&lt;/a&gt; AppHarbor! &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.jetbrains.com/resharper"&gt;ReSharper&lt;/a&gt; - Jetbrains will provide a FULL &lt;a href="http://www.jetbrains.com/resharper/buy/buy.jsp#personal"&gt;license&lt;/a&gt; of ReSharper Personal. This license is a $199 value. Thank you to the &lt;a href="http://devlicio.us/blogs/hadi_hariri/default.aspx"&gt;folks&lt;/a&gt; at Jetbrains! &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.telerik.com/" target="_blank"&gt;Telerik&lt;/a&gt; &lt;a href="http://www.telerik.com/developer-productivity-tools.aspx"&gt;Ultimate Collection for .NET&lt;/a&gt; – Telerik will provide a &lt;a href="http://www.telerik.com/purchase.aspx"&gt;license&lt;/a&gt; to pretty much every .NET tool they offer. This license is a $1999 value. A big thank you to the &lt;a href="http://www.skimedic.com/blog/"&gt;folks&lt;/a&gt; at Telerik!! &lt;/li&gt;    &lt;li&gt;This is a total value of $2348!!! &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The prize package for the person that has the most creative video(s) with a time better than mine (if there are at least 5 responses):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/twilio_5F00_59CA74CF.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="twilio" border="0" alt="twilio" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/twilio_5F00_thumb_5F00_1AE50602.png" width="100" height="100" /&gt;&lt;/a&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/appharbor_5F00_6CE78D7C.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="appharbor" border="0" alt="appharbor" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/appharbor_5F00_thumb_5F00_04DA8671.png" width="89" height="100" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;$20 Gift card or equivalent – Provided by this guy. &lt;/li&gt;    &lt;li&gt;AppHarbor $50 service credit – same deal as above. Thank you AppHarbor! &lt;/li&gt;    &lt;li&gt;&lt;a href="http://twilio.com"&gt;Twilio&lt;/a&gt; T-Shirt - Twilio has donated a shirt and will ship your size to you (this may be subject to US residents only). This is a $25 value. Thank you to the &lt;a href="http://john-sheehan.com/blog/"&gt;folks&lt;/a&gt; at Twilio! &lt;/li&gt; &lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=66628" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/t3HLokh32_wxtv5KpQmWCMRKQIo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/t3HLokh32_wxtv5KpQmWCMRKQIo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/t3HLokh32_wxtv5KpQmWCMRKQIo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/t3HLokh32_wxtv5KpQmWCMRKQIo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/.NET/default.aspx">.NET</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Events/default.aspx">Events</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Challenge/default.aspx">Challenge</category></item><item><title>AppHarbor - Azure Done Right AKA Heroku for .NET</title><link>http://devlicio.us/blogs/rob_reynolds/archive/2011/02/16/appharbor-azure-done-right-aka-heroku-for-net.aspx</link><pubDate>Wed, 16 Feb 2011 12:49:23 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:66401</guid><dc:creator>Rob Reynolds</dc:creator><slash:comments>3</slash:comments><wfw:commentRss>http://devlicio.us/blogs/rob_reynolds/rsscomments.aspx?PostID=66401</wfw:commentRss><wfw:comment>http://devlicio.us/blogs/rob_reynolds/commentapi.aspx?PostID=66401</wfw:comment><comments>http://devlicio.us/blogs/rob_reynolds/archive/2011/02/16/appharbor-azure-done-right-aka-heroku-for-net.aspx#comments</comments><description>&lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Easy and Instant deployments and instant scale for .NET?&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Awhile back a &lt;a href="http://groups.google.com/group/nu-net" target="_blank"&gt;few of us&lt;/a&gt; were looking at &lt;a href="http://rubygems.org/" target="_blank"&gt;Ruby Gems&lt;/a&gt; as the answer to &lt;a href="http://devlicio.us/blogs/rob_reynolds/archive/2010/07/15/gems-package-management-for-net.aspx" target="_blank"&gt;package management for .NET&lt;/a&gt;. The gems platform supported the concept of DLLs as packages although some changes would have needed to happen to have long term use for the entire community. From that we formed a partnership with some folks at Microsoft to make v2 into something that would meet &lt;a href="http://devlicio.us/blogs/rob_reynolds/archive/2010/10/06/the-evolution-of-package-management-for-net.aspx" target="_blank"&gt;wider adoption across the community&lt;/a&gt;, which people now call &lt;a href="http://nuget.codeplex.com/" target="_blank"&gt;NuGet&lt;/a&gt;. So now we have the concept of package management. What comes next?&lt;/p&gt;  &lt;h4&gt;&lt;u&gt;Heroku&lt;/u&gt;&lt;/h4&gt;  &lt;p&gt;&lt;strong&gt;Instant deployments and instant scaling. Stupid simple API.&lt;/strong&gt; This is &lt;a href="http://heroku.com/" target="_blank"&gt;Heroku&lt;/a&gt;. It doesn’t sound like much, but when you think of how fast you can go from an idea to having someone else tinker with it, you can start to see its power. In literally seconds you can be looking at your rails application deployed and online. Then when you are ready to scale, you can do that. This is power. Some may call this “cloud-computing” or &lt;a href="http://en.wikipedia.org/wiki/Platform_as_a_service" target="_blank"&gt;PaaS&lt;/a&gt; (Platform as a Service).&lt;/p&gt;  &lt;p&gt;I first ran into Heroku back in July when I met &lt;a href="http://litanyagainstfear.com/" target="_blank"&gt;Nick&lt;/a&gt; of &lt;a href="http://rubygems.org/" target="_blank"&gt;RubyGems.org&lt;/a&gt;. At the time there was no alternative in the .NET-o-sphere. I don’t count &lt;a href="http://www.microsoft.com/windowsazure/" target="_blank"&gt;Windows Azure&lt;/a&gt;, mostly because it is not simple and I don’t believe there is a free version. Heroku itself would not lend itself well to .NET due to the nature of platforms and each language’s specific needs (solution stack).&amp;#160; So I tucked the idea in the back of my head and moved on. &lt;/p&gt;  &lt;h4&gt;&lt;u&gt;AppHarbor Enters The Scene&lt;/u&gt;&lt;/h4&gt;  &lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_14CF6EF3.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;float:right;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" align="right" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_7D54BAC1.png" width="244" height="184" /&gt;&lt;/a&gt;I’m not sure when I first heard about &lt;a href="http://appharbor.com/" target="_blank"&gt;AppHarbor&lt;/a&gt; as a possible .NET version of Heroku. It may have been in November, but I didn’t actually try it until January. I was instantly hooked. AppHarbor is awesome! It still has a ways to go to be considered Heroku for .NET, but it already has a growing community. I created a video series (at the bottom of this post) that really highlights how fast you can get a product onto the web and really shows the power and simplicity of AppHarbor. &lt;/p&gt;  &lt;p&gt;Deploying is as simple as a git/hg push to appharbor. From there they build your code, run any unit tests you have and deploy it if everything succeeds. The screen on the right shows a simple and elegant UI to getting things done.&lt;/p&gt;  &lt;p&gt;The folks at AppHarbor graciously gave me a limited number of invites to hand out. If you are itching to try AppHarbor then navigate to: &lt;a title="new-inviteCode=ferventcoder" href="https://appharbor.com/account/new?inviteCode=ferventcoder"&gt;https://appharbor.com/account/new?inviteCode=ferventcoder&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;After playing with it, send &lt;a href="http://feedback.appharbor.com/forums/95687-general"&gt;feedback&lt;/a&gt; if you want more features. Go vote up &lt;a href="http://feedback.appharbor.com/forums/95687-general/suggestions/1380047-gem-command-line-application?ref=title"&gt;two&lt;/a&gt; &lt;a href="http://feedback.appharbor.com/forums/95687-general/suggestions/1377701-migrations?ref=title"&gt;features&lt;/a&gt; I want that will make it more like Heroku.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Disclaimer: I am in no way affiliated with AppHarbor and have not received any funds or favors from anyone at AppHarbor. I just think it is awesome and I want others to know about it.&lt;/p&gt; &lt;/blockquote&gt;  &lt;h4&gt;&lt;u&gt;From Zero To Deployed in 15 Minutes (Or Less)&lt;/u&gt;&lt;/h4&gt;  &lt;p&gt;Now I have a challenge for you. I created a video series showing how fast I could go from nothing to a deployed application. It could have been from Zero to Deployed in Less than 5 minutes, but I wanted to show you the tools a little more and give you an opportunity to beat my time.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;And that’s the challenge. Beat my time and show it in a video response.&lt;/strong&gt; The video series is below (at least one of the videos has to be watched on YouTube). The person with the best time by March 15th @ 11:59PM CST will receive a prize.&lt;/p&gt;  &lt;p&gt;Ground rules: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;.NET Application with a valid database connection &lt;/li&gt;    &lt;li&gt;Start from Zero &lt;/li&gt;    &lt;li&gt;Deployed with AppHarbor or an alternative &lt;/li&gt;    &lt;li&gt;A timer displayed in the video that runs during the entire process &lt;/li&gt;    &lt;li&gt;Video response published on YouTube or acceptable alternative &lt;/li&gt;    &lt;li&gt;Video(s) must be published by March 15th at 11:59PM CST.&lt;/li&gt;    &lt;li&gt;Either post the link here as a comment or on YouTube as a response (also by 11:59PM CST March 15th)&lt;/li&gt; &lt;/ul&gt;    &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:e1a3d5a5-c97b-4a35-911e-8b2163418dc8" class="wlWriterEditableSmartContent"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=cZIUVfHWsbc" target="_new"&gt;&lt;img src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/video454d0754bef1_5F00_566840DC.jpg" style="border-style:none;" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="width:448px;clear:both;font-size:.8em;"&gt;From Zero To Deployed In 15 Minutes (Or Less) Part 1&lt;/div&gt;&lt;/div&gt;      &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:9bf5acc4-7735-4b63-a773-6448d28ba476" class="wlWriterEditableSmartContent"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=l7WluaXIya0" target="_new"&gt;&lt;img src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/videoffb63c9cfc3e_5F00_1BA09806.jpg" style="border-style:none;" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="width:448px;clear:both;font-size:.8em;"&gt;From Zero To Deployed In 15 Minutes (Or Less) Part 2&lt;/div&gt;&lt;/div&gt;      &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:18da1711-02ee-4953-ba19-2ce35e8f4bf5" class="wlWriterEditableSmartContent"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=IqPh7wbWsLc" target="_new"&gt;&lt;img src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/video8c3ef0b1b950_5F00_5306A934.jpg" style="border-style:none;" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="width:448px;clear:both;font-size:.8em;"&gt;From Zero To Deployed In 15 Minutes (Or Less) Part 3&lt;/div&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=66401" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/A2BRXiumYYXiTOndpND5kuOEcDM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/A2BRXiumYYXiTOndpND5kuOEcDM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/A2BRXiumYYXiTOndpND5kuOEcDM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/A2BRXiumYYXiTOndpND5kuOEcDM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/NHibernate/default.aspx">NHibernate</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Fluent+NHibernate/default.aspx">Fluent NHibernate</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/RoundhousE/default.aspx">RoundhousE</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/HowTo/default.aspx">HowTo</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/UppercuT/default.aspx">UppercuT</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Development/default.aspx">Development</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Git/default.aspx">Git</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Tools/default.aspx">Tools</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/.NET/default.aspx">.NET</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Agile/default.aspx">Agile</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Gems/default.aspx">Gems</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Challenge/default.aspx">Challenge</category></item><item><title>UppercuT v1.2–NuGet Support</title><link>http://devlicio.us/blogs/rob_reynolds/archive/2011/01/23/uppercut-v1-2-nuget-support.aspx</link><pubDate>Mon, 24 Jan 2011 02:18:57 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:64799</guid><dc:creator>Rob Reynolds</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://devlicio.us/blogs/rob_reynolds/rsscomments.aspx?PostID=64799</wfw:commentRss><wfw:comment>http://devlicio.us/blogs/rob_reynolds/commentapi.aspx?PostID=64799</wfw:comment><comments>http://devlicio.us/blogs/rob_reynolds/archive/2011/01/23/uppercut-v1-2-nuget-support.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/nuget_2D00_229x64_5F00_20C99BC9.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:0px 0px 5px 5px;padding-left:0px;padding-right:0px;display:inline;float:right;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="NuGet beeaches! NuGet-ty goodness yo! Get your package here!" border="0" alt="NuGet" align="right" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/nuget_2D00_229x64_5F00_thumb_5F00_7FD62921.png" width="233" height="68" /&gt;&lt;/a&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/UppercuT_5F00_Logo_5F00_medium_5F00_5EE2B67A.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:0px 5px 5px 0px;padding-left:0px;padding-right:0px;display:inline;float:left;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="UppercuT beeaches! Freakin conventional automated builds yo!" border="0" alt="UppercuT_Logo_medium" align="left" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/UppercuT_5F00_Logo_5F00_medium_5F00_thumb_5F00_7072A145.jpg" width="204" height="147" /&gt;&lt;/a&gt;For those that have not yet heard, &lt;a href="http://nuget.codeplex.com/" target="_blank"&gt;NuGet&lt;/a&gt; &lt;a href="http://weblogs.asp.net/scottgu/archive/2011/01/13/announcing-release-of-asp-net-mvc-3-iis-express-sql-ce-4-web-farm-framework-orchard-webmatrix.aspx" target="_blank"&gt;went v1 recently&lt;/a&gt; along with a whole slew of tools from the Microsoft folks. I’ve been lucky to be a part of the NuGet project and see it take shape over the past few months with community input and contributions. Even though v1.0 was released, we are already moving forward with getting ideas and prioritizing features for the next version.&lt;/p&gt;  &lt;p&gt;To follow the announcement, &lt;a href="http://projectuppercut.org/" target="_blank"&gt;UppercuT&lt;/a&gt; (UC) v1.2 now includes support for NuGet out of the box. Plus, it will handle versioning the nuspec file for you, a highly requested feature for those that worked with other package managers.&lt;/p&gt;  &lt;h4&gt;&lt;u&gt;UppercuT + NuGet == Can Packaging Get Any Easier?&lt;/u&gt;&lt;/h4&gt;  &lt;p&gt;It can. UC exists to take the pains out of builds. To go from zero to your first NuGet package with the goodness of UC, just read on and follow the directions. If you are already creating nuget packages, UC can help update the version in the nuspec for you automatically. Read on…&lt;/p&gt;  &lt;h5&gt;Upgrading?&lt;/h5&gt;  &lt;p&gt;1. For those upgrading, you bring over the entire contents of the build directory like before. Please see the &lt;a href="http://code.google.com/p/uppercut/downloads" target="_blank"&gt;downloads&lt;/a&gt; (or the &lt;a href="http://code.google.com/p/uppercut/source/browse/trunk/README.markdown#57" target="_blank"&gt;ReadMe ReleaseNotes section&lt;/a&gt;) for any items you need to change between your previous version and the latest version of UC you are downloading.&lt;/p&gt;  &lt;p&gt;2. You will want to add the following to your UppercuT.config file:&lt;/p&gt;  &lt;pre class="xml" name="code"&gt;&amp;lt;property name=&amp;quot;app.nuget&amp;quot; value=&amp;quot;..${path.separator}${folder.references}${path.separator}NuGet${path.separator}NuGet.exe&amp;quot; overwrite=&amp;quot;false&amp;quot; /&amp;gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_1668519C.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="app.nuget location in uppercut.config" border="0" alt="uppercut.config setting" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_79EB5FBB.png" width="644" height="57" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2. Include the NuGet folder in your lib directory from the UC distribution (or get the latest NuGet.exe and drop it in a NuGet folder under lib):&lt;/p&gt;

&lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_14B785C8.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="lib/NuGet" border="0" alt="lib/NuGet" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_7E153780.png" width="305" height="215" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3. Add the nuget directory at your top level (next to the build.bat file) from the UC distribution:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_75452F34.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="nuget folder" border="0" alt="nuget folder" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_427528C0.png" width="215" height="197" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;New to Uppercut?&lt;/h5&gt;

&lt;p&gt;1. There is a nice &lt;a href="http://uppercut.pbworks.com/w/page/9022444/HowToUse" target="_blank"&gt;write up&lt;/a&gt; on how to get UC set up on your project in less than 5 minutes (or you can try the &lt;a href="http://projectuppercut.org/" target="_blank"&gt;gems approach&lt;/a&gt;)! It really shows how little is needed to get a fully conventional build with the ability to upgrade in seconds instead of hours for your builds.&lt;/p&gt;

&lt;h4&gt;&lt;u&gt;Getting Some Nuget-ty Goodness To Your Builds&lt;/u&gt;&lt;/h4&gt;

&lt;p&gt;1. Head into the top level &lt;strong&gt;nuget&lt;/strong&gt; folder. Rename the __NAME__.nuspec file to the name of your nugget (most likely your project name if there are no other packages named the same). Here we are working with &lt;a href="http://sidepop.googlecode.com" target="_blank"&gt;SidePOP&lt;/a&gt;, so I named it sidepop.nuspec.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_6F8A158E.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="rename the __NAME__.nuspec" border="0" alt="rename the __NAME__.nuspec" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_07414CF5.png" width="316" height="181" /&gt;&lt;/a&gt;&amp;#160;&amp;#160; &lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_710B31A2.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Renamed __NAME__.nuspec to sidepop.nuspec" border="0" alt="sidepop.nuspec" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_5083F1F0.png" width="143" height="65" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2. Let’s open that file and take a look.&lt;/p&gt;

&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;
&amp;lt;package xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;
  &amp;lt;metadata&amp;gt;
    &amp;lt;id&amp;gt;__REPLACE__&amp;lt;/id&amp;gt;
    &amp;lt;version&amp;gt;DO_NOT_EDIT&amp;lt;/version&amp;gt;
    &amp;lt;authors&amp;gt;__REPLACE__&amp;lt;/authors&amp;gt;
    &amp;lt;owners&amp;gt;__REPLACE__&amp;lt;/owners&amp;gt;
    &amp;lt;summary&amp;gt;__REPLACE__&amp;lt;/summary&amp;gt;
    &amp;lt;description&amp;gt;__REPLACE__&amp;lt;/description&amp;gt;
    &amp;lt;!--&amp;lt;projectUrl&amp;gt;__REPLACE__&amp;lt;/projectUrl&amp;gt;
    &amp;lt;licenseUrl&amp;gt;__REPLACE__&amp;lt;/licenseUrl&amp;gt;
    &amp;lt;requireLicenseAcceptance&amp;gt;false&amp;lt;/requireLicenseAcceptance&amp;gt;
    &amp;lt;tags&amp;gt;space delimited&amp;lt;/tags&amp;gt;
    &amp;lt;iconUrl&amp;gt;32x32.png&amp;lt;/iconUrl&amp;gt;
    &amp;lt;dependencies&amp;gt;
      &amp;lt;dependency id=&amp;quot;something&amp;quot; version=&amp;quot;1.0.0.0&amp;quot; /&amp;gt;
    &amp;lt;/dependencies&amp;gt;--&amp;gt;
  &amp;lt;/metadata&amp;gt;
&amp;lt;/package&amp;gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;NOTE: &lt;/strong&gt;Notice the metadata attribute doesn’t have the xmlns in it (xmlns=&amp;quot;http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd&amp;quot;). This needs to be removed for xpath to be able to replace the version. If you are bringing an existing nuspec in, you will want to remove that.&lt;/p&gt;

&lt;p&gt;3. Look how most things say __REPLACE__. The version attribute does not. Do not edit version (if you do, it will just be replaced during the build). &lt;/p&gt;

&lt;p&gt;4. Let’s set up the nuspec for SidePOP. SidePOP has a dependency on log4net version 1.2.10.&lt;/p&gt;

&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;
&amp;lt;package xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;
  &amp;lt;metadata&amp;gt;
    &amp;lt;id&amp;gt;sidepop&amp;lt;/id&amp;gt;
    &amp;lt;version&amp;gt;DO_NOT_EDIT&amp;lt;/version&amp;gt;
    &amp;lt;authors&amp;gt;Rob Reynolds, Tim Hibbard&amp;lt;/authors&amp;gt;
    &amp;lt;owners&amp;gt;Rob Reynolds&amp;lt;/owners&amp;gt;
    &amp;lt;summary&amp;gt;SidePOP gives your app the ability to receive email&amp;lt;/summary&amp;gt;
    &amp;lt;description&amp;gt;SidePOP allows your application the ability to receive email&amp;lt;/description&amp;gt;
    &amp;lt;projectUrl&amp;gt;http://sidepop.googlecode.com&amp;lt;/projectUrl&amp;gt;
    &amp;lt;licenseUrl&amp;gt;http://www.apache.org/licenses/LICENSE-2.0&amp;lt;/licenseUrl&amp;gt;
    &amp;lt;requireLicenseAcceptance&amp;gt;false&amp;lt;/requireLicenseAcceptance&amp;gt;
    &amp;lt;tags&amp;gt;email&amp;lt;/tags&amp;gt;
    &amp;lt;!--&amp;lt;iconUrl&amp;gt;32x32.png&amp;lt;/iconUrl&amp;gt;--&amp;gt;
    &amp;lt;dependencies&amp;gt;
      &amp;lt;dependency id=&amp;quot;log4net&amp;quot; version=&amp;quot;1.2.10&amp;quot; /&amp;gt;
    &amp;lt;/dependencies&amp;gt;
  &amp;lt;/metadata&amp;gt;
&amp;lt;/package&amp;gt;&lt;/pre&gt;

&lt;p&gt;5. We also have content transformation for the config file, so we’ll include that in the nuget folder.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_0FE1A581.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="adding a content folder!" border="0" alt="adding a content folder" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_364388CC.png" width="261" height="90" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6. In that we will create our transforms for the web.config and app.config.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_03738258.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="transform files, we roll explicit yo!" border="0" alt="transform files" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_7BE812EA.png" width="311" height="144" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;7. Now we go back up to our top level folder and run build.bat. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_41206A14.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Loving the colorific console!" border="0" alt="build it like the matrix" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_78F2AE37.png" width="454" height="413" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;8. If we head down to our code_drop/nuget folder, you can see we have a nupkg with the right version on it!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_4F9B6639.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="7Zip - showing the package manager and contents. Sweet!" border="0" alt="7Zip - showing the package and contents" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_42C1101B.png" width="599" height="434" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;9. Now all we have to do is look to be sure we have everything we want and we can upload. In my case I need to exclude the log4net file I have, so I need to delete that one from the directory during the build process. How do I get in? &lt;a href="http://uppercut.pbworks.com/w/page/9022440/CustomizeUsingExtensionPoints" target="_blank"&gt;UC Extension Points&lt;/a&gt; of course!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_6052EB1A.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Whoops! Got log4net in my package. Dude!" border="0" alt="Got log4net in my package" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_6699C1A8.png" width="425" height="128" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;10. If I drop into the build folder and open a command line I can type: &lt;strong&gt;customize nugetPrepare.step post&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_30B4CC8E.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="customize nugetPrepare.step post" border="0" alt="customize nugetPrepare.step post" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_251F0F4F.png" width="478" height="40" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;11. This will create an extension point file for me in build.custom. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_08A21D6F.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="nugetPrepare.post.step yo" border="0" alt="nugetPrepare.post.step" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_2E2B9AD0.png" width="288" height="242" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;12. Open that file and let’s remove the log4net file from the nuget drop directory prior to the nuget build. This is how I set up that file:&lt;/p&gt;

&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;
&amp;lt;project name=&amp;quot;CUSTOM POST NUGETPREPARE&amp;quot; default=&amp;quot;go&amp;quot;&amp;gt;
  &amp;lt;!-- Project UppercuT - http://projectuppercut.org --&amp;gt;
  &amp;lt;property name=&amp;quot;build.config.settings&amp;quot; value=&amp;quot;__NONE__&amp;quot; overwrite=&amp;quot;false&amp;quot; /&amp;gt;
  &amp;lt;include buildfile=&amp;quot;${build.config.settings}&amp;quot; if=&amp;quot;${file::exists(build.config.settings)}&amp;quot; /&amp;gt;
  &amp;lt;property name=&amp;quot;path.separator&amp;quot; value=&amp;quot;${string::trim(path::combine(&amp;#39; &amp;#39;, &amp;#39; &amp;#39;))}&amp;quot; /&amp;gt;
  &amp;lt;property name=&amp;quot;dirs.current&amp;quot; value=&amp;quot;${directory::get-parent-directory(project::get-buildfile-path())}&amp;quot; /&amp;gt;
  &amp;lt;property name=&amp;quot;path.to.toplevel&amp;quot; value=&amp;quot;..&amp;quot; /&amp;gt;
  &amp;lt;property name=&amp;quot;folder.code_drop&amp;quot; value=&amp;quot;code_drop&amp;quot; overwrite=&amp;quot;false&amp;quot; /&amp;gt;
  &amp;lt;property name=&amp;quot;dirs.drop&amp;quot; value=&amp;quot;${dirs.current}${path.separator}${path.to.toplevel}${path.separator}${folder.code_drop}&amp;quot; overwrite=&amp;quot;false&amp;quot; /&amp;gt;
  &amp;lt;property name=&amp;quot;dirs.drop&amp;quot; value=&amp;quot;${path::get-full-path(dirs.drop)}&amp;quot; /&amp;gt;
  &amp;lt;property name=&amp;quot;folder.nuget&amp;quot; value=&amp;quot;nuget&amp;quot; overwrite=&amp;quot;false&amp;quot; /&amp;gt;
  &amp;lt;property name=&amp;quot;dirs.drop.nuget&amp;quot; value=&amp;quot;${dirs.drop}${path.separator}${folder.nuget}&amp;quot; overwrite=&amp;quot;false&amp;quot; /&amp;gt;
  
  &amp;lt;target name=&amp;quot;go&amp;quot;&amp;gt;
    &amp;lt;echo message=&amp;quot;Removing log4net from &amp;#39;${dirs.drop.nuget}\lib&amp;#39;&amp;quot; /&amp;gt;
    &amp;lt;delete&amp;gt;
      &amp;lt;fileset basedir=&amp;quot;${dirs.drop.nuget}\lib&amp;quot; &amp;gt;
        &amp;lt;include name=&amp;quot;log4net.*&amp;quot; /&amp;gt;
      &amp;lt;/fileset&amp;gt;
    &amp;lt;/delete&amp;gt;
  &amp;lt;/target&amp;gt;
  
&amp;lt;/project&amp;gt;&lt;/pre&gt;

&lt;p&gt;13. Now looky here, log4net is no longer in my package. &lt;img style="border-bottom-style:none;border-right-style:none;border-top-style:none;border-left-style:none;" class="wlEmoticon wlEmoticon-openmouthedsmile" alt="Open-mouthed smile" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/wlEmoticon_2D00_openmouthedsmile_5F00_21BD77A7.png" /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_255B9284.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="sidepop.dll minus log4net.dll" border="0" alt="sidepop.dll minus log4net.dll" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_64B94614.png" width="456" height="148" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;14. Now I am ready to test my package before I push it out by putting it in a local feed and grabbing it.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_7FF19F15.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="PM is for Package Manager... :D" border="0" alt="Package Manager Console" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_18150971.png" width="614" height="157" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_29856A49.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="SidePOP - checkin your email yo!" border="0" alt="sidepop in the configuration file" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_2F600DE2.png" width="633" height="268" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;15. All good. Now I can upload and put my package on the &lt;a href="http://nuget.org" target="_blank"&gt;official feed&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_20492F08.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="SidePOP on NuGet gallery!" border="0" alt="SidePOP on NuGet gallery!" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_12967300.png" width="354" height="284" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; SidePOP is in Alpha. If you want to use it to check email, it works, but be prepared for possible errors.&lt;/p&gt;

&lt;h4&gt;&lt;u&gt;Conclusion – UppercuT and NuGet – A Good Team!&lt;/u&gt;&lt;/h4&gt;

&lt;p&gt;You can see how fast we went from ZERO NuGet to up on the &lt;a href="http://nuget.org" target="_blank"&gt;http://nuget.org&lt;/a&gt; site! In 4 steps I was already building a NuGet package, and in less than 15 steps it was production ready! What are you waiting for? Go &lt;a href="http://projectuppercut.org/" target="_blank"&gt;UppercuT&lt;/a&gt; your code now!&lt;/p&gt;

&lt;p&gt;If you have any UC related questions when getting it all NuGet-ty, feel free to contact the list: &lt;a href="http://groups.google.com/group/chucknorrisframework" target="_blank"&gt;http://groups.google.com/group/chucknorrisframework&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;With this knowledge, you shall build.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=64799" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Rl8pDlTsHbjua4gKTfi74aknUOI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Rl8pDlTsHbjua4gKTfi74aknUOI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Rl8pDlTsHbjua4gKTfi74aknUOI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Rl8pDlTsHbjua4gKTfi74aknUOI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/HowTo/default.aspx">HowTo</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/UppercuT/default.aspx">UppercuT</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Development/default.aspx">Development</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/.NET/default.aspx">.NET</category></item><item><title>UppercuT v1.0 and 1.1–Linux (Mono), Multi-targeting, SemVer, Nitriq and Obfuscation, oh my!</title><link>http://devlicio.us/blogs/rob_reynolds/archive/2011/01/13/uppercut-v1-0-and-1-1-linux-mono-multi-targeting-semver-nitriq-and-obfuscation-oh-my.aspx</link><pubDate>Thu, 13 Jan 2011 19:04:54 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:64582</guid><dc:creator>Rob Reynolds</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://devlicio.us/blogs/rob_reynolds/rsscomments.aspx?PostID=64582</wfw:commentRss><wfw:comment>http://devlicio.us/blogs/rob_reynolds/commentapi.aspx?PostID=64582</wfw:comment><comments>http://devlicio.us/blogs/rob_reynolds/archive/2011/01/13/uppercut-v1-0-and-1-1-linux-mono-multi-targeting-semver-nitriq-and-obfuscation-oh-my.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/UppercuT_5F00_logo_5F00_1E8FE730.png"&gt;&lt;img style="border-right-width:0px;margin:5px 0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="UppercuT v1 yo" border="0" alt="UppercuT v1 yo" align="right" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/UppercuT_5F00_logo_5F00_thumb_5F00_5C3CCEEC.png" width="244" height="176" /&gt;&lt;/a&gt;Recently &lt;a href="http://projectuppercut.org/" target="_blank"&gt;UppercuT&lt;/a&gt; (UC) quietly released version 1 (in August). I’m pretty happy with where we are, although I think it’s a few months later than I originally planned. I’m glad I held it back, it gave me some more time to think about some things a little more and also the opportunity to receive a patch for running builds with UC on Linux. We also released v1.1 very recently (December).&lt;/p&gt;  &lt;h3&gt;&lt;u&gt;UppercuT v1&lt;/u&gt;&lt;/h3&gt;  &lt;h4&gt;&lt;u&gt;Builds On Linux&lt;/u&gt;&lt;/h4&gt;  &lt;p&gt;Perhaps the most significant changes to UC going v1 is that it now supports builds on Linux using Mono! This is thanks mostly to &lt;a href="http://twitter.com/ackenpacken" target="_blank"&gt;Svein Ackenhausen&lt;/a&gt; for the patches and working with me on getting it all working while not breaking the windows builds!&amp;#160; This means you can use mono on Windows or Linux.&lt;/p&gt;  &lt;p&gt;Notice the shell files to execute with Linux that come as part of UC now. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_4672E68F.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="uc shell files" border="0" alt="uc shell files" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_7387D35D.png" width="158" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h4&gt;&lt;u&gt;Multi-Targeting&lt;/u&gt;&lt;/h4&gt;  &lt;p&gt;Perhaps one of the hardest things to do that requires an automated build is multi-targeting. At v1 this is early, and possibly prone to some issues, but available.&amp;#160; &lt;/p&gt;  &lt;p&gt;We believe in making everything stupid simple, so it’s as simple as adding a comma to the microsoft.framework property. i.e. “net-3.5, net-4.0” to suddenly produce both framework builds.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_59B39D2E.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_514FC7D7.png" width="681" height="122" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_10AD7B68.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="net-3.5,net-4.0" border="0" alt="net-3.5,net-4.0" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_7B4FC5FF.png" width="519" height="65" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;When you build, this is what you get (if you meet each framework’s requirements):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_5AC8864D.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="UC muli-targeting output" border="0" alt="UC muli-targeting output" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_27F87FD9.png" width="331" height="198" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;At this time you have to let UC override the build location (as it does by default) or this will not work.&amp;#160; &lt;/p&gt;  &lt;h4&gt;&lt;strong&gt;&lt;u&gt;Semantic Versioning&lt;/u&gt;&lt;/strong&gt;&lt;/h4&gt;  &lt;p&gt;By now many of you have been using UppercuT for awhile and have watched how we have done versioning. Many of you who use git already know we put the revision hash in the informational/product version as the last octet. &lt;/p&gt;  &lt;p&gt;At v1, UppercuT has adopted the semantic versioning scheme. What does that mean?&lt;/p&gt;  &lt;p&gt;This is a short read, but a good one: &lt;a href="http://SemVer.org"&gt;http://SemVer.org&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;SemVer (Semantic Versioning) is really using versioning what it was meant for. You have three octets. Major.Minor.Patch as in 1.1.0.&amp;#160; UC will use three different versioning concepts, one for the assembly version, one for the file version, and one for the product version. &lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;All versions - The first three octects of the version are owned by SemVer. &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Major.Minor.Patch &lt;/li&gt;    &lt;li&gt;i.e.: 1.1.0 &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Assembly Version - The assembly version would much closer follow SemVer. Last digit is always 0. &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Major.Minor.Patch.0 &lt;/li&gt;    &lt;li&gt;i.e: 1.1.0.0 &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;File Version - The file version occupies the build number as the last digit. &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Major.Minor.Patch.Build &lt;/li&gt;    &lt;li&gt;i.e.: 1.1.0.2650 &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Product/Informational Version - The last octect of your product/informational version is the source control revision/hash. &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Major.Minor.Patch.RevisionOrHash &lt;/li&gt;    &lt;li&gt;i.e. (TFS/SVN): 1.1.0.235 &lt;/li&gt;    &lt;li&gt;i.e. (Git/HG): 1.1.0.a45ace4346adef0 &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;SemVer is not on by default, the passive versioning scheme is still in effect. Notice that &lt;strong&gt;version.use_semanticversioning&lt;/strong&gt; has been added to the UppercuT.config file (and version.patch in support of the third octet):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_550D6CA7.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Versioning with added SemVer properties" border="0" alt="Versioning with added SemVer properties" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_667DCD7F.png" width="644" height="102" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h4&gt;&lt;u&gt;Gems Support&lt;/u&gt;&lt;/h4&gt;  &lt;p&gt;Gems support was added at v1. This will probably be deprecated as some point once there is an announced sunset for Nu v1. Application gems may keep it around since there is no alternative for that yet though (CoApp would be a possible replacement).&lt;/p&gt;  &lt;h4&gt;&lt;u&gt;Nitriq Support&lt;/u&gt;&lt;/h4&gt;  &lt;p&gt;&lt;a href="http://www.nitriq.com/" target="_blank"&gt;Nitriq&lt;/a&gt; is a code analysis tool like &lt;a href="http://www.ndepend.com" target="_blank"&gt;NDepend&lt;/a&gt;. It’s built by Mr. &lt;a href="http://twitter.com/nitriq" target="_blank"&gt;Jon von Gillern&lt;/a&gt;. It uses LINQ query language, so you can use a familiar idiom when analyzing your code base. It’s a pretty awesome tool that has a free version for those looking to do code analysis!&lt;/p&gt;  &lt;p&gt;To use Nitriq with UC, you are going to need the &lt;a href="http://www.nitriq.com/console/Default.aspx" target="_blank"&gt;console edition&lt;/a&gt;.&amp;#160; To take advantage of Nitriq, you just need to update the location of Nitriq in the config:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_4CA99750.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Nitriq path" border="0" alt="Nitriq path" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_2C22579E.png" width="697" height="42" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Then add the nitriq project files at the root of your source.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_0B9B17EC.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Nitriq - two required project files" border="0" alt="shows nitriq.nitriqProj and nitriq.nq" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_1D0B78C4.png" width="182" height="196" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Please refer to the Nitriq documentation on how these are created.&lt;/p&gt;  &lt;h3&gt;&lt;u&gt;UppercuT v1.1&lt;/u&gt;&lt;/h3&gt;  &lt;h4&gt;&lt;u&gt;Obfuscation&lt;/u&gt;&lt;/h4&gt;  &lt;p&gt;One thing I started looking into was an easy way to obfuscate my code. I came across &lt;a href="http://www.foss.kharkov.ua/g1/projects/eazfuscator/dotnet/Default.aspx" target="_blank"&gt;EazFuscator&lt;/a&gt;, which is both free and awesome. Plus the GUI for it is super simple to use. &lt;/p&gt;  &lt;p&gt;How do you make obfuscation even easier? Make it a convention and a configurable property in the UC config file!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_780DB84A.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="obfuscate - EASY!" border="0" alt="obfuscate - even easier" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_376B6BDB.png" width="525" height="31" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And the code gets obfuscated! &lt;/p&gt;  &lt;h3&gt;&lt;u&gt;Closing&lt;/u&gt;&lt;/h3&gt;  &lt;p&gt;Definitely get out and look at the &lt;a href="http://projectuppercut.org/" target="_blank"&gt;new release&lt;/a&gt;. It contains lots of chocolaty (sp?) goodness. And remember, the upgrade path is almost as simple as drag and drop! &lt;img style="border-bottom-style:none;border-right-style:none;border-top-style:none;border-left-style:none;" class="wlEmoticon wlEmoticon-openmouthedsmile" alt="Open-mouthed smile" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/wlEmoticon_2D00_openmouthedsmile_5F00_3B0986B8.png" /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=64582" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0NBcuXB-M1DWSNk-jb3_5u3D7so/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0NBcuXB-M1DWSNk-jb3_5u3D7so/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0NBcuXB-M1DWSNk-jb3_5u3D7so/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0NBcuXB-M1DWSNk-jb3_5u3D7so/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/UppercuT/default.aspx">UppercuT</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/.NET/default.aspx">.NET</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Gems/default.aspx">Gems</category></item><item><title>The Evolution of Package Management for .NET</title><link>http://devlicio.us/blogs/rob_reynolds/archive/2010/10/06/the-evolution-of-package-management-for-net.aspx</link><pubDate>Wed, 06 Oct 2010 17:54:00 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:62653</guid><dc:creator>Rob Reynolds</dc:creator><slash:comments>11</slash:comments><wfw:commentRss>http://devlicio.us/blogs/rob_reynolds/rsscomments.aspx?PostID=62653</wfw:commentRss><wfw:comment>http://devlicio.us/blogs/rob_reynolds/commentapi.aspx?PostID=62653</wfw:comment><comments>http://devlicio.us/blogs/rob_reynolds/archive/2010/10/06/the-evolution-of-package-management-for-net.aspx#comments</comments><description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;The thing to realize is that the destination is never the most important part of the journey. It&amp;rsquo;s the journey itself.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;When you start a journey, you are never fully sure where it is going to end up. We started the journey down package management for .NET three times with &lt;a target="_blank" href="http://nu.wikispot.org"&gt;Nu[bular]&lt;/a&gt; (we in this context means the nu team, not me in particular, I was only involved in the last reboot) before we decided to try an existing infrastructure with &lt;a target="_blank" href="http://rubygems.org"&gt;Ruby Gems&lt;/a&gt;.&amp;nbsp; I have always said that I would use the best tool out there, even if it is not one that I&amp;rsquo;ve been involved in building. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/nubular_5F00_np_5F00_1CECF9DC.jpg"&gt;&lt;img height="136" width="150" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/nubular_5F00_np_5F00_thumb_5F00_51212322.jpg" align="left" alt="nubular_np" border="0" title="nubular_np" style="border-right-width:0px;margin:5px 5px 5px 0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt;Personally I&amp;rsquo;ve always felt that competition is important to drive out the best features and make all products involved better. The community benefits with competition. If you&amp;rsquo;ve spent any time with me or listened to me on twitter, you can see that I support the idea of &lt;a target="_blank" href="http://rubygems.org/gems/noodle"&gt;Noodle&lt;/a&gt; (Bundler/gems for .NET), &lt;a target="_blank" href="http://code.google.com/p/hornget/"&gt;Horn&lt;/a&gt; and &lt;a target="_blank" href="http://www.infoq.com/news/2010/05/OpenWrap"&gt;OpenWrap&lt;/a&gt;. Each of them solves a similar problem in a different way. Each of them has great things about them. Having choices is good. Not everyone likes things the same way.&amp;nbsp; I like my eggs over easy. I&amp;rsquo;m not going to force the way I like my eggs when I cook for you, but I&amp;rsquo;m going to cook them that way for me.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s important to realize that the destination is never the most important part of the journey. It&amp;rsquo;s the journey itself. Two months ago we decided to make Nu with Ruby and use the gems infrastructure. It was like the stars aligned &amp;ndash; Ruby Midwest Conference was next door in KC, so we got to spend some time with &lt;a target="_blank" href="http://twitter.com/qrush"&gt;Nick Quaranto&lt;/a&gt;, one of the guys behind &lt;a target="_blank" href="http://github.com/rubygems/gemcutter"&gt;GemCutter&lt;/a&gt;, also known as &lt;a target="_blank" href="http://rubygems.org"&gt;RubyGems.org&lt;/a&gt;. At that time we discussed at length what our plans were and got a blessing to park gems on their server while running the Nu experiment. Many of our friends and colleagues had also been pining for some sort of package management so everyone was quick to jump onto a proven infrastructure that is super easy to use. When we introduced it, it&amp;rsquo;s amazing how many people brought the awesome to Nu/Gems.&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;Nubular&lt;/span&gt;&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Nu Is Awesome! Being part of the last two reboots I have learned quite a bit about package management and that knowledge and the knowledge that everyone else has learned can be applied to any package management tool. There have been so many great ideas from those in the community and lots of great questions from everyone. Those questions and answers apply to other package management tools. &lt;/p&gt;
&lt;p&gt;Having something that builds on an existing infrastructure helped us bootstrap so fast that we were allowed to start working on the interesting features immediately. This has been helpful in getting us to the .NET intricacies and finding ways to solve them. I&amp;rsquo;ve been blessed to be part of this project.&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;Microsoft Introduces Package Management &amp;ndash; NuPack&lt;/span&gt;&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/Nupacklogo_5F00_4995B3B5.png"&gt;&lt;strong&gt;&lt;img height="63" width="240" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/Nupacklogo_5F00_thumb_5F00_21EF378B.png" align="left" alt="Nupack-logo" border="0" title="Nupack-logo" style="border-right-width:0px;margin:5px 5px 5px 0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/strong&gt;&lt;/a&gt;From the front page of CodePlex &amp;ldquo;&lt;a target="_blank" href="http://nupack.codeplex.com/"&gt;NuPack&lt;/a&gt; is a free, open source developer focused package management system for the .NET platform intent on simplifying the process of incorporating third party libraries into a .NET application during development.&amp;rdquo; NuPack is a &lt;a target="_blank" href="http://www.codeplex.org/Galleries/ASPNETOpenSourceGallery/NuPack.aspx"&gt;collaborative project&lt;/a&gt; in the &lt;a target="_blank" href="http://www.outercurve.org/"&gt;Outercurve Foundation&lt;/a&gt;.&amp;nbsp; It is an Open Source Project, and truly the first of it&amp;rsquo;s type, with Microsoft Employees working full time on it and open source developers contributing at the same time. The core team is not just Microsoft and that means the tool will have the influence of the community at large. This means that like the Orchard Project, you or I can contribute. Unlike the Orchard Project, you and I have an opportunity to contribute core features (given that the &lt;a target="_blank" href="http://nupack.codeplex.com/documentation?title=Becoming%20a%20Core%20Contributor"&gt;right conditions are met&lt;/a&gt;). &lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;This is NOT the same Microsoft&lt;/span&gt;&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;No one had any idea that Nu was going to be so explosively popular when it came out two months ago. After all, we started it as an experiment to see if we could even do it. Years ago, Microsoft would have ignored what was happening in the community and just introduced what they were working on without seeming to try to really understand the needs of the community. They have been criticized again and again for appearing to follow a &amp;ldquo;not invented here&amp;rdquo; model. When they saw how successful our last reboot of Nubular was, they pulled us in to show us what they had been working on for four months prior to our last reboot and started asking for input on how they could ensure it meets the needs of the community.&lt;/p&gt;
&lt;p&gt;But then Microsoft did something different. They made the project OSS and pulled in a few open source developers (including the Nu team) to both give feedback and contribute to the same codebase the full time MS employees are working with.&lt;/p&gt;
&lt;p&gt;Make no mistake on the name. Microsoft renamed their tool from the codename NPack to &lt;strong&gt;Nu&lt;/strong&gt;Pack to signify a merging of the community and what they were working on. Microsoft reached out to members of the community that have been involved with package management for feedback and support, including some that may be up in arms about Microsoft entering the arena.&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;Why is This Good For the Community?&lt;/span&gt;&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Listen up Mr/Ms Open Source Provider, this is important for you.&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;Now let me take off my Nu/NuPack hat(s) for a minute and don my OSS (Open Source Software) provider hat. Let&amp;rsquo;s say you or I have a tool that we think is awesome and we want to get it into the hands of the community at large. In the .NET community, there is a largely untapped set of people that program in .NET that use Microsoft tools only. Most of them program at work using MS tools and go home and never look at Open Source alternatives (or even things OSS that have no Microsoft equivalent).&lt;/p&gt;
&lt;p&gt;Most of this largely untapped audience only sees what Microsoft is doing and thus has never heard of your OSS tools. It&amp;rsquo;s like the &lt;a target="_blank" href="http://www.youtube.com/watch?v=FL7yD-0pqZg"&gt;iPhone4 vs HTC Evo&lt;/a&gt; video with the &amp;ldquo;I don&amp;rsquo;t care.&amp;rdquo; segment where one person is blind to better features of an alternative product.&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:893d934f-ebdb-4ae4-894f-bac8cad9bbe6" style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;"&gt;
&lt;div&gt;&lt;a target="_new" href="http://www.youtube.com/watch?v=FL7yD-0pqZg"&gt;&lt;img style="border-style:none;" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/video152e69c87d83_5F00_45A10FC3.jpg" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Go ahead and watch, I&amp;rsquo;ll wait. I suggest headphones at work. And it&amp;rsquo;s funny. Really funny. So is the &lt;a target="_blank" href="http://www.youtube.com/watch?v=UAOtC9QfXac&amp;amp;feature=channel"&gt;opposite take on HTC Evo vs. iPhone4&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;So, back to the .NET community, you have these people that are blind to this whole community of open source tools for some reason or another. Package management itself is geared toward free/OSS tools and libraries, and having Microsoft behind it will start to open the eyes of this largely untapped community. &lt;/p&gt;
&lt;p&gt;This means that you and I, working on these free/OSS tools that are great have more of an opportunity to fall into the hands of the full .NET community. That means that a larger user base could happen. That means more feedback and better tools as a result. That means&amp;hellip; &amp;hellip;and this is me REALLY dreaming at the moment, Alt.NET could become the mainstream .NET.&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;What is the Future of Nu?&lt;/span&gt;&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;If you&amp;rsquo;re still with me, the big pink elephant is in the room and I have not yet addressed it. &lt;/p&gt;
&lt;p&gt;So, NuPack is out, what is the future of Nu? What a great question! Nu will co-exist with NuPack for awhile. When NuPack reaches a certain point, it&amp;rsquo;s ultimately going to be Nu version 2. I personally will continue to be involved with both projects until I see that NuPack does bring at least the same level of awesome as Nu like it promises it will. I don&amp;rsquo;t know what the date of the awesome is, but I can tell you that we will all realize when it is. &lt;/p&gt;
&lt;p&gt;My support lies with the community and when the community is ready to shift, it will make sense to sunset Nubular. But it&amp;rsquo;s open source, so others could pick it up and take it in whole new directions. :D&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;Thank You&lt;/span&gt;&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Thanks to everyone for the support! You have proven that the .NET-o-sphere needs package management and you have been willing to step up and give your time and efforts to help bootstrap the community. I am blessed to have been part of this thus far and am excited to see where the journey goes next.&lt;/p&gt;
&lt;p&gt;On a side note, the &lt;a target="_blank" href="http://devlicio.us/blogs/rob_reynolds/archive/2010/08/27/herding-code-talks-about-nu.aspx"&gt;herding code podcast&lt;/a&gt; was done a few hours after Microsoft first showed us NuPack and started asking for feedback. That was August 11th. We&amp;rsquo;ve continued to bring the awesome in Nu and have had help from quite a few people including Bil Simser (&lt;a target="_blank" href="http://twitter.com/bsimser"&gt;@bsimser&lt;/a&gt;), MIchael Carter (&lt;a target="_blank" href="http://twitter.com/kiliman"&gt;@kiliman&lt;/a&gt;) and Brendan Erwin (&lt;a target="_blank" href="http://twitter.com/brendanjerwin"&gt;@brendanjerwin&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Over the next few months we are going to see a transition in the community. Certain people out there are not going to be happy about Microsoft entering the package management market, but most people I have spoken to think it will ultimately make the community better. I think most of us have the same opinion. It&amp;rsquo;s about frickin&amp;rsquo; time. And with Microsoft behind it, the possibility for you and I to get our open source tools into the hands of the .NET community at large will make the community better! &lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;Related Posts / More Information&lt;/span&gt;&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;NuPack &amp;ndash; &lt;a target="_blank" href="http://nupack.codeplex.com"&gt;http://nupack.codeplex.com&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Scott Guthrie - &lt;a target="_blank" href="http://weblogs.asp.net/scottgu/archive/2010/10/06/announcing-nupack-asp-net-mvc-3-beta-and-webmatrix-beta-2.aspx"&gt;http://weblogs.asp.net/scottgu/archive/2010/10/06/announcing-nupack-asp-net-mvc-3-beta-and-webmatrix-beta-2.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Bil Simser - &lt;a target="_blank" href="http://weblogs.asp.net/bsimser/archive/2010/10/06/unicorns-triple-rainbows-package-management-and-lasers.aspx"&gt;http://weblogs.asp.net/bsimser/archive/2010/10/06/unicorns-triple-rainbows-package-management-and-lasers.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Phil Haack - &lt;a target="_blank" href="http://haacked.com/archive/2010/10/06/introducing-nupack-package-manager.aspx"&gt;http://haacked.com/archive/2010/10/06/introducing-nupack-package-manager.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Scott Hanselman - &lt;a target="_blank" href="http://www.hanselman.com/blog/IntroducingNuPackPackageManagementForNETAnotherPieceOfTheWebStack.aspx"&gt;http://www.hanselman.com/blog/IntroducingNuPackPackageManagementForNETAnotherPieceOfTheWebStack.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;David Ebbo - &lt;a target="_blank" href="http://blogs.msdn.com/b/davidebb/archive/2010/10/05/introducing-nupack-the-smart-way-to-bring-bits-into-your-projects.aspx"&gt;http://blogs.msdn.com/b/davidebb/archive/2010/10/05/introducing-nupack-the-smart-way-to-bring-bits-into-your-projects.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Eric Hexter -&amp;nbsp;&lt;a target="_blank" href="http://www.lostechies.com/blogs/hex/archive/2010/10/03/nupack-net-package-management-and-much-much-more.aspx"&gt;http://www.lostechies.com/blogs/hex/archive/2010/10/03/nupack-net-package-management-and-much-much-more.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Phil Haack on Channel9 - &lt;a target="_blank" href="http://channel9.msdn.com/Shows/Web+Camps+TV/Web-Camps-TV-8-NuPack-with-Phil-Haack"&gt;http://channel9.msdn.com/Shows/Web+Camps+TV/Web-Camps-TV-8-NuPack-with-Phil-Haack&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=62653" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zfqKys7Xn2GcWMcFSfJNPgNdhJE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zfqKys7Xn2GcWMcFSfJNPgNdhJE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/zfqKys7Xn2GcWMcFSfJNPgNdhJE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zfqKys7Xn2GcWMcFSfJNPgNdhJE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Tools/default.aspx">Tools</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/.NET/default.aspx">.NET</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Gems/default.aspx">Gems</category></item><item><title>Heartland Developer Conference 2010</title><link>http://devlicio.us/blogs/rob_reynolds/archive/2010/09/14/heartland-developer-conference-2010.aspx</link><pubDate>Tue, 14 Sep 2010 22:04:36 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:62179</guid><dc:creator>Rob Reynolds</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://devlicio.us/blogs/rob_reynolds/rsscomments.aspx?PostID=62179</wfw:commentRss><wfw:comment>http://devlicio.us/blogs/rob_reynolds/commentapi.aspx?PostID=62179</wfw:comment><comments>http://devlicio.us/blogs/rob_reynolds/archive/2010/09/14/heartland-developer-conference-2010.aspx#comments</comments><description>&lt;p&gt;Recently I was able to attend and speak at Heartland Developer Conference (HDC). This was my first time at the conference and it went smoothly for me. I was able to attend most of the sessions and had a great time! &lt;/p&gt;  &lt;p&gt;I had a session on &lt;a href="http://www.heartlanddc.com/?page_id=418" target="_blank"&gt;Database Change Management w/RoundhousE&lt;/a&gt;! It went really well, I was very relaxed although I only had 45 minutes to talk. One item of feedback I got was that I didn’t seem interested in what I was talking about. It was just that I was very relaxed having practiced and prepared. I spoke very matter of fact about the tool. And I’ve been using it for over a year now, so it’s hard to fully remember the pain I had before and how much of a relief RoundhousE really is! Here is the &lt;a href="http://www.heartlanddc.com/hdcfiles/402_REYNOLDS/" target="_blank"&gt;slide deck and sample&lt;/a&gt; (in 7zip format).&lt;/p&gt;  &lt;p&gt;This was a great event and I would encourage anyone to get out next year and check it out!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=62179" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/q8IibOoyX4eSlbLXMTl6OTGyP7o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/q8IibOoyX4eSlbLXMTl6OTGyP7o/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/q8IibOoyX4eSlbLXMTl6OTGyP7o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/q8IibOoyX4eSlbLXMTl6OTGyP7o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/RoundhousE/default.aspx">RoundhousE</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/.NET/default.aspx">.NET</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Events/default.aspx">Events</category></item></channel></rss>

