<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://devlicio.us/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" 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/"><channel><title>Rob Reynolds - The Fervent Coder : Gems, Tools</title><link>http://devlicio.us/blogs/rob_reynolds/archive/tags/Gems/Tools/default.aspx</link><description>Tags: Gems, Tools</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><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 xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/rob_reynolds/rsscomments.aspx?PostID=69366</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">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;</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>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 xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/rob_reynolds/rsscomments.aspx?PostID=68256</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">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;</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>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 xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/rob_reynolds/rsscomments.aspx?PostID=66401</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">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;</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>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 xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/rob_reynolds/rsscomments.aspx?PostID=62653</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">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;</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>How To – UppercuT and Gems</title><link>http://devlicio.us/blogs/rob_reynolds/archive/2010/07/20/how-to-uppercut-and-gems.aspx</link><pubDate>Tue, 20 Jul 2010 14:00:00 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:61136</guid><dc:creator>Rob Reynolds</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/rob_reynolds/rsscomments.aspx?PostID=61136</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/rob_reynolds/commentapi.aspx?PostID=61136</wfw:comment><comments>http://devlicio.us/blogs/rob_reynolds/archive/2010/07/20/how-to-uppercut-and-gems.aspx#comments</comments><description>&lt;p&gt;In a previous &lt;a href="http://devlicio.us/blogs/rob_reynolds/archive/2010/07/16/how-to-gems-and-net.aspx" target="_blank"&gt;post&lt;/a&gt; I mentioned how I was going to show you how &lt;a href="http://projectuppercut.org/" target="_blank"&gt;UppercuT&lt;/a&gt; (UC) has the ability to make gems stupid simple to create and publish. You ask if gems can get any easier and to that I answer, &amp;ldquo;Why YES, they can!&amp;rdquo; How about just filling out the information for the gemspec, running a build and having a nice, shiny new gem ready for publishing?&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;Rock The Gems&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Basically you want to get the latest release of &lt;a href="http://projectuppercut.org" target="_blank"&gt;UppercuT&lt;/a&gt;. You can &lt;a href="http://code.google.com/p/uppercut/downloads/list" target="_blank"&gt;download it&lt;/a&gt; or grab the source and compile.&lt;/p&gt;
&lt;p&gt;There are already &lt;a href="http://uppercut.pbworks.com/HowToUse" target="_blank"&gt;instructions&lt;/a&gt; &lt;a href="http://uppercut.googlecode.com/svn/trunk/docs" target="_blank"&gt;out&lt;/a&gt; there for how to get UC in your project, so I&amp;rsquo;m not going to concentrate on that.&lt;/p&gt;
&lt;p&gt;Once you upgrade (or add and get everything else set up), you want to have this gems folder at your top level (just under trunk or branch name).&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_2EF23BA0.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="gems folder at the top level" border="0" alt="gems folder at the top level" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_5166CA5B.png" width="204" height="281" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;In that gems folder you are going to find a file named something like the file below. Rename that file to your new &lt;em&gt;gemname&lt;/em&gt;.gemspec. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Once you have a gemspec file in a gems folder, your build server NOW needs to also have ruby and gems installed.&lt;/p&gt;
&lt;p&gt;Open that file in your favorite text editor and fill in the details. Here&amp;rsquo;s a &lt;a href="http://devlicio.us/blogs/rob_reynolds/archive/2010/07/16/how-to-gems-and-net.aspx" target="_blank"&gt;good post&lt;/a&gt; on how to do that.&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_3E459DAF.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="Rename the file to gemname.gemspec" border="0" alt="Rename the file to gemname.gemspec" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_5D884482.png" width="244" height="213" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_3C94D1DB.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="Open in a text editor and edit the gemspec according to your needs" border="0" alt="Open in a text editor and edit the gemspec according to your needs" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_628A8231.png" width="244" height="201" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Then just for having the gems folder with a gemspec in it, UC will automatically try to build the gem for you (the code in your code_drop/&lt;em&gt;projectname&lt;/em&gt; folder is brought over to code_drop/gems/lib 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_41970F8A.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="code_drop/gems" border="0" alt="code_drop/gems" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_27C2D95B.png" width="226" height="244" /&gt;&lt;/a&gt;&amp;nbsp;&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_3860D03D.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="Gem gets built with the correct version" border="0" alt="Gem gets built with the correct version" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_104E211E.png" width="466" height="351" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;Removing All of the Other Output After the Gem is Built&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Once we are good with what we are getting back for the gem, we can start cleaning up. So we go into our build.custom (don&amp;rsquo;t have one? create it right next to the build folder) folder and create a file named &lt;strong&gt;gemsBuild.post.step&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_702D186C.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="build.custom/gemsbuild.post.step" border="0" alt="build.custom/gemsbuild.post.step" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_5658E23D.png" width="244" height="238" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s open the file and insert this:&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 GEMSBUILD&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;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.to.toplevel}\${folder.code_drop}&amp;quot; overwrite=&amp;quot;false&amp;quot; /&amp;gt;
  &amp;lt;property name=&amp;quot;folder.gems&amp;quot; value=&amp;quot;gems&amp;quot; overwrite=&amp;quot;false&amp;quot; /&amp;gt;
  
  &amp;lt;target name=&amp;quot;go&amp;quot; depends=&amp;quot;run_tasks&amp;quot; /&amp;gt;
  
  &amp;lt;target name=&amp;quot;run_tasks&amp;quot;&amp;gt;
    &amp;lt;delete&amp;gt;
      &amp;lt;fileset basedir=&amp;quot;${dirs.drop}/${folder.gems}&amp;quot; &amp;gt;
        &amp;lt;exclude name=&amp;quot;*.gem&amp;quot; /&amp;gt;
        &amp;lt;include name=&amp;quot;**/*&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;&lt;strong&gt;Note: &lt;/strong&gt;Don&amp;rsquo;t like NAnt?&lt;strong&gt; &lt;/strong&gt;You can also use Ruby or PowerShell instead of NAnt to write your &lt;a href="http://uppercut.pbworks.com/CustomizeUsingExtensionPoints" target="_blank"&gt;custom extensions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Now when we run our build again, we have a nice clean 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_35656F96.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="All clean - just the built gem. Nice..." border="0" alt="All clean - just the built gem. Nice..." src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_348D09AC.png" width="440" height="191" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;What If I Want to Change What Goes Into my Gem?&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Interested in influencing what goes INTO your gem in the first place? That&amp;rsquo;s a pretty good thing to be concerned with so that you don&amp;rsquo;t have all of your referenced assemblies sitting in there. Read about how to set up &lt;a href="http://devlicio.us/blogs/rob_reynolds/archive/2010/07/17/how-to-gems-and-net-dependencies-references.aspx" target="_blank"&gt;dependencies&lt;/a&gt;. Then you will create a file next to &lt;strong&gt;gemsbuild.post.step&lt;/strong&gt; named &lt;strong&gt;gemsPrepare.post.step&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_3A67AD45.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="build.custom/gemsPrepare.post.step" border="0" alt="build.custom/gemsPrepare.post.step" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_249DC4E8.png" width="204" height="263" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;In that file, you will insert something similar to the following (&lt;a href="http://roundhouse.googlecode.com/svn/trunk/build.custom/gemsPrepare.post.step" target="_blank"&gt;roundhouse file&lt;/a&gt;):&lt;/p&gt;
&lt;pre class="xml" name="code"&gt;&amp;lt;copy todir=&amp;quot;${dirs.drop}\${folder.gems}\lib&amp;quot;&amp;gt;
  &amp;lt;fileset basedir=&amp;quot;${dirs.drop}\${folder.gems}\lib\MSBuild&amp;quot;&amp;gt;
    &amp;lt;include name=&amp;quot;**/*.*&amp;quot; /&amp;gt;
  &amp;lt;/fileset&amp;gt;
&amp;lt;/copy&amp;gt;

&amp;lt;copy todir=&amp;quot;${dirs.drop}\${folder.gems}\lib&amp;quot;&amp;gt;
  &amp;lt;fileset basedir=&amp;quot;${dirs.drop}\${folder.gems}\lib\NAnt&amp;quot;&amp;gt;
    &amp;lt;include name=&amp;quot;**/*.*&amp;quot; /&amp;gt;
  &amp;lt;/fileset&amp;gt;
&amp;lt;/copy&amp;gt;

&amp;lt;delete&amp;gt;
  &amp;lt;fileset basedir=&amp;quot;${dirs.drop}\${folder.gems}\lib&amp;quot; &amp;gt;
    &amp;lt;include name=&amp;quot;ConsoleApp/**&amp;quot; /&amp;gt;
    &amp;lt;include name=&amp;quot;MSBuild/**&amp;quot; /&amp;gt;
    &amp;lt;include name=&amp;quot;NAnt/**&amp;quot; /&amp;gt;
  &amp;lt;/fileset&amp;gt;
&amp;lt;/delete&amp;gt;&lt;/pre&gt;
&lt;h4&gt;&lt;strong&gt;Learn More&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;With this knowledge, you shall build. Interested in more UppercuT? Check out the &lt;a href="http://groups.google.com/group/chucknorrisframework" target="_blank"&gt;ChuckNorris&lt;/a&gt; framework and &lt;a href="http://groups.google.com/group/chucknorrisframework/subscribe" target="_blank"&gt;join&lt;/a&gt; the group.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;Related Posts&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Before you comment about &amp;ldquo;cluttering&amp;rdquo; the ruby community, please be sure to read this (we&amp;rsquo;re with you on this):&amp;nbsp; &lt;a title="http://devlicio.us/blogs/rob_reynolds/archive/2010/07/19/gems-for-net-community-response.aspx" href="http://devlicio.us/blogs/rob_reynolds/archive/2010/07/19/gems-for-net-community-response.aspx" target="_blank"&gt;http://devlicio.us/blogs/rob_reynolds/archive/2010/07/19/gems-for-net-community-response.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://devlicio.us/blogs/rob_reynolds/archive/2010/07/15/gems-package-management-for-net.aspx" target="_blank"&gt;Gems - Package Management for .NET&lt;/a&gt;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://devlicio.us/blogs/rob_reynolds/archive/2010/07/16/how-to-gems-and-net.aspx" target="_blank"&gt;How To &amp;ndash; Gems &amp;amp; .NET&lt;/a&gt; &amp;amp; &lt;a href="http://devlicio.us/blogs/rob_reynolds/archive/2010/07/17/how-to-gems-and-net-dependencies-references.aspx" target="_blank"&gt;How To &amp;ndash; Gems &amp;amp; .NET - Dependencies (References)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://devlicio.us/blogs/rob_reynolds/archive/2010/07/26/the-future-of-net-open-source-software-delivery.aspx" target="_blank"&gt;The Future is Now!&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=61136" width="1" height="1"&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/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>Gems - Package Management For .NET</title><link>http://devlicio.us/blogs/rob_reynolds/archive/2010/07/15/gems-package-management-for-net.aspx</link><pubDate>Fri, 16 Jul 2010 04:27:00 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:61091</guid><dc:creator>Rob Reynolds</dc:creator><slash:comments>18</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/rob_reynolds/rsscomments.aspx?PostID=61091</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/rob_reynolds/commentapi.aspx?PostID=61091</wfw:comment><comments>http://devlicio.us/blogs/rob_reynolds/archive/2010/07/15/gems-package-management-for-net.aspx#comments</comments><description>&lt;p&gt;The Ruby community has enjoyed a great user experience with a package management system they use called Gems. A gem is a package (or a library), compressed with some additional metadata, and can be either source files or binaries. Let&amp;rsquo;s focus on binary gems. We have the same concept in .NET (DLLs/EXEs). You may have references to other DLLs. When you want to update a reference you are using on a project, you may also need to update its dependencies as well. And so on and so forth. A package management project is meant to help make that easier. It&amp;rsquo;s actually really hard to explain what gems or package management without just showing you. So take a look here:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_5AC297E8.png"&gt;&lt;img height="181" width="455" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_0456631C.png" alt="gem install sidepop - installed log4net - installed sidepop" border="0" title="gem install sidepop - installed log4net - installed sidepop" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I type:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;gem install sidepop&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And that&amp;rsquo;s it. It looks and sees that I have a dependency on log4net. Notice how it nicely just pulls down log4net version 1.2.10 as well? &lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;Background&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;I can count on one hand all of the package management projects that have been &lt;a target="_blank" href="http://strangelights.com/blog/archive/2010/05/16/1661.aspx"&gt;started&lt;/a&gt; &lt;a target="_blank" href="http://github.com/dagda1/horn_src"&gt;for&lt;/a&gt; &lt;a target="_blank" href="http://github.com/phatboyg/nu"&gt;.NET&lt;/a&gt;. &lt;a target="_blank" href="http://twitter.com/drusellers"&gt;Dru Sellers&lt;/a&gt;, &lt;a target="_blank" href="http://twitter.com/phatboyg"&gt;Chris Patterson&lt;/a&gt;, and I have talked about package management stuff from time to time. Dru and Chris have been a part of one project (&lt;a target="_blank" href="http://github.com/phatboyg/nu"&gt;Nu&lt;/a&gt;) that has been started several times to start to answer this question. We&amp;rsquo;ve participated on the mailing list for &lt;a target="_blank" href="http://groups.google.com/group/horn-development"&gt;HornGet&lt;/a&gt;. At one point I casually asked why we couldn&amp;rsquo;t just use gems. Other people out there have probably stated the same thing. But no one has really carried the idea forward. Until now.&lt;/p&gt;
&lt;p&gt;Yesterday Dru asked for a &lt;a target="_blank" href="http://code.google.com/p/uppercut/issues/detail?id=16"&gt;gem-ify&lt;/a&gt; feature for &lt;a target="_blank" href="http://projectuppercut.org"&gt;UppercuT&lt;/a&gt;. We started talking and looking at how easy it is to create a gem. Then we figured out how to make the &lt;a target="_blank" href="http://stackoverflow.com/questions/3250794/gems-with-net-applications-how-do-i-set-up-the-executables-so-they-run-without"&gt;executables&lt;/a&gt; piece work as well. This is where you can install a gem and then call the executable from the command line anywhere and get output. From the &lt;a target="_blank" href="http://groups.google.com/group/chucknorrisframework/browse_thread/thread/4f0c0deeadbd61d4"&gt;thread&lt;/a&gt; on &lt;a target="_blank" href="http://groups.google.com/group/chucknorrisframework/"&gt;ChuckNorris&lt;/a&gt; where we talked about this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Here is something you might find pretty interesting: &lt;a target="_blank" href="http://rubygems.org/gems/roundhouse"&gt;http://rubygems.org/gems/roundhouse&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://rubygems.org/gems/roundhouse"&gt;&lt;/a&gt;If you have ruby installed, you can install roundhouse now from the command line:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;gem install roundhouse&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This gives you the opportunity to type this anywhere:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;rh &amp;lt;options&amp;gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;&lt;strong&gt;Why Should I Care?&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;If you work with Open Source, you know how much of a pain it can be to update your references. You update one library, say NHibernate, and find out that you also need to update your references to Castle. And possibly, you might then need to update your references to log4net. It can be a painful process. This is the start of answering that question.&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;&lt;strong&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_18034CB0.png"&gt;&lt;img height="221" width="404" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_76A3A713.png" align="right" alt="Right now it&amp;#39;s starting to look like the answer for gems in .NET is just gems." border="0" title="Right now it&amp;#39;s starting to look like the answer for gems in .NET is just gems." style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;margin-left:0px;border-left-width:0px;margin-right:0px;" /&gt;&lt;/a&gt;&lt;/strong&gt;Why Should I Get Excited?&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;It sounds like &lt;a target="_blank" href="http://twitter.com/jeremydmiller/statuses/18628012354"&gt;Jeremy Miller&lt;/a&gt; among others are getting excited about this. And why not? We&amp;rsquo;ve been trying to answer the gems question since Ruby made it so easy. &lt;/p&gt;
&lt;p&gt;The implications of this are awesome! I still haven&amp;rsquo;t fully grokked what we&amp;rsquo;ve just opened up.&amp;nbsp; But it&amp;rsquo;s huge! &lt;/p&gt;
&lt;p&gt;It doesn&amp;rsquo;t get us all of the way there to updating the references in our source code folder. That&amp;rsquo;s where projects, like Nu, are going to start showing up that leverage the idea of using the gems infrastructure to get the libraries from the ruby folders to your source code folder. You are going to see UppercuT come back soon with taking care of getting your gem built with the proper version.&lt;/p&gt;
&lt;p&gt;This is the start of something very cool.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;Related Posts&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Before you comment about &amp;ldquo;cluttering&amp;rdquo; the ruby community, please be sure to read this (we&amp;rsquo;re with you on this):&amp;nbsp; &lt;a target="_blank" href="http://devlicio.us/blogs/rob_reynolds/archive/2010/07/19/gems-for-net-community-response.aspx" title="http://devlicio.us/blogs/rob_reynolds/archive/2010/07/19/gems-for-net-community-response.aspx"&gt;http://devlicio.us/blogs/rob_reynolds/archive/2010/07/19/gems-for-net-community-response.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://devlicio.us/blogs/rob_reynolds/archive/2010/07/16/how-to-gems-and-net.aspx"&gt;How To - Gems and .NET&lt;/a&gt;&amp;nbsp; and &lt;a target="_blank" href="http://devlicio.us/blogs/rob_reynolds/archive/2010/07/17/how-to-gems-and-net-dependencies-references.aspx"&gt;How To &amp;ndash; Gems &amp;amp; .NET - Dependencies (References)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://devlicio.us/blogs/rob_reynolds/archive/2010/07/20/how-to-uppercut-and-gems.aspx"&gt;Walkthrough &amp;ndash; Create Gems Even Easier With a Conventional Build (UppercuT)!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://devlicio.us/blogs/rob_reynolds/archive/2010/07/26/the-future-of-net-open-source-software-delivery.aspx"&gt;The Future is Now!&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=61091" width="1" height="1"&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/SidePOP/default.aspx">SidePOP</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/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></channel></rss>