<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://devlicious.com/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 : Git</title><link>http://devlicious.com/blogs/rob_reynolds/archive/tags/Git/default.aspx</link><description>Tags: Git</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><item><title>Let’s Get Chocolatey! Kind of like apt-get for Windows</title><link>http://devlicious.com/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://devlicious.com/blogs/rob_reynolds/rsscomments.aspx?PostID=68256</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicious.com/blogs/rob_reynolds/commentapi.aspx?PostID=68256</wfw:comment><comments>http://devlicious.com/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://devlicious.com/aggbug.aspx?PostID=68256" width="1" height="1"&gt;</description><category domain="http://devlicious.com/blogs/rob_reynolds/archive/tags/Git/default.aspx">Git</category><category domain="http://devlicious.com/blogs/rob_reynolds/archive/tags/Tools/default.aspx">Tools</category><category domain="http://devlicious.com/blogs/rob_reynolds/archive/tags/.NET/default.aspx">.NET</category><category domain="http://devlicious.com/blogs/rob_reynolds/archive/tags/Agile/default.aspx">Agile</category><category domain="http://devlicious.com/blogs/rob_reynolds/archive/tags/Gems/default.aspx">Gems</category><category domain="http://devlicious.com/blogs/rob_reynolds/archive/tags/NuGet/default.aspx">NuGet</category></item><item><title>AppHarbor - Azure Done Right AKA Heroku for .NET</title><link>http://devlicious.com/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://devlicious.com/blogs/rob_reynolds/rsscomments.aspx?PostID=66401</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicious.com/blogs/rob_reynolds/commentapi.aspx?PostID=66401</wfw:comment><comments>http://devlicious.com/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://devlicious.com/aggbug.aspx?PostID=66401" width="1" height="1"&gt;</description><category domain="http://devlicious.com/blogs/rob_reynolds/archive/tags/NHibernate/default.aspx">NHibernate</category><category domain="http://devlicious.com/blogs/rob_reynolds/archive/tags/Fluent+NHibernate/default.aspx">Fluent NHibernate</category><category domain="http://devlicious.com/blogs/rob_reynolds/archive/tags/RoundhousE/default.aspx">RoundhousE</category><category domain="http://devlicious.com/blogs/rob_reynolds/archive/tags/HowTo/default.aspx">HowTo</category><category domain="http://devlicious.com/blogs/rob_reynolds/archive/tags/UppercuT/default.aspx">UppercuT</category><category domain="http://devlicious.com/blogs/rob_reynolds/archive/tags/Development/default.aspx">Development</category><category domain="http://devlicious.com/blogs/rob_reynolds/archive/tags/Git/default.aspx">Git</category><category domain="http://devlicious.com/blogs/rob_reynolds/archive/tags/Tools/default.aspx">Tools</category><category domain="http://devlicious.com/blogs/rob_reynolds/archive/tags/.NET/default.aspx">.NET</category><category domain="http://devlicious.com/blogs/rob_reynolds/archive/tags/Agile/default.aspx">Agile</category><category domain="http://devlicious.com/blogs/rob_reynolds/archive/tags/Gems/default.aspx">Gems</category><category domain="http://devlicious.com/blogs/rob_reynolds/archive/tags/Challenge/default.aspx">Challenge</category></item><item><title>Two Major Milestones for RoundhousE and UppercuT</title><link>http://devlicious.com/blogs/rob_reynolds/archive/2010/01/01/two-major-milestones-for-roundhouse-and-uppercut.aspx</link><pubDate>Fri, 01 Jan 2010 21:04:21 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:54860</guid><dc:creator>Rob Reynolds</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicious.com/blogs/rob_reynolds/rsscomments.aspx?PostID=54860</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicious.com/blogs/rob_reynolds/commentapi.aspx?PostID=54860</wfw:comment><comments>http://devlicious.com/blogs/rob_reynolds/archive/2010/01/01/two-major-milestones-for-roundhouse-and-uppercut.aspx#comments</comments><description>&lt;p&gt;This last year I had a focus to get more involved in Open Source (OSS). The year before I had been involved a little by submitting a patch here and there, but 2009 was a big year for me in OSS. I now manage 4 open source projects that have solved a need for me and others. Coming up on the end of the year it was important for me to get some final touches into at least two projects to finish out the year.&lt;/p&gt;  &lt;p&gt;&amp;#160;&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_587E2919.png"&gt;&lt;img style="border-right-width:0px;margin:0px 5px 0px 1px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="UppercuT, http://projectuppercut.org" border="0" alt="UppercuT, http://projectuppercut.org" align="left" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_5AF7350A.png" width="244" height="174" /&gt;&lt;/a&gt; &lt;/h4&gt;  &lt;h4&gt;&lt;strong&gt;&lt;u&gt;UppercuT&lt;/u&gt;&lt;/strong&gt;&lt;/h4&gt;  &lt;p&gt;&lt;a href="http://projectuppercut.org/" target="_blank"&gt;UppercuT&lt;/a&gt; (UC), for those of you who have never heard of it, is an automated build tool that uses conventions to build your code. That means that you can have a professional build for most projects out of the box within 3 minutes! You drop it into a project, update a simple configuration and you’re done.&amp;#160; It is also extendable (to the point of steps being completely replaced) so it’s very powerful. The goals we had for UC when we started it are that it’s insanely easy to use, easy to upgrade your builds, and easy to extend. It has met all of those goals and has some features that other build tools do not have (versioning out of the box and templating for configurations, documents, sql, deployment files, etc to name a couple). Check it out at &lt;a href="http://projectuppercut.org" target="_blank"&gt;http://projectuppercut.org&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;So what &lt;strong&gt;milestone&lt;/strong&gt; did we finish for UC? When the project started, there were plans for support for multiple types of source control for versioning the assemblies. We supported Subversion (SVN) from the beginning, but the priority for other types was lower. I’m pleased to announce that in the last two months we’ve added both TFS and GIT. The GIT one is a little more interesting. It follows what is suggested for versioning by &lt;a href="http://codeprairie.net/blogs/chrisortman/default.aspx" target="_blank"&gt;Chris Ortman&lt;/a&gt;, &lt;a href="http://gitfu.wordpress.com/2008/05/25/git-describe-great-another-way-to-refer-to-commits/" target="_blank"&gt;GitFu&lt;/a&gt; and in the &lt;a href="http://www.kernel.org/pub/software/scm/git/docs/git-describe.html" target="_blank"&gt;Git&lt;/a&gt; documentation. We also go the extra mile to show the SHA1 as well so you could theoretically get to that version.&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_1837E9D2.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="Git Versioning with UppercuT - two types of versioning" border="0" alt="Git Versioning with UppercuT - two types of versioning" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_3D25847E.png" width="244" height="235" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;How easy is it to do versioning with Git? Assuming you have a git repository, you crack open the configuration and change your source control to git:&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_4729FFDC.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="GIT &amp;#39;er DONE!!!" border="0" alt="GIT &amp;#39;er DONE!!!" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_4C987080.png" width="644" height="56" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;If you’ve used UppercuT in the past or have been dying to try it out, set a goal to look at the &lt;a href="http://code.google.com/p/uppercut/downloads/list" target="_blank"&gt;latest verion&lt;/a&gt; this year before February.&lt;/p&gt;  &lt;p&gt;&amp;#160;&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_2987FF10.png"&gt;&lt;img style="border-right-width:0px;margin:0px 1px 0px 5px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="RoundhousE, http://projectroundhouse.org" border="0" alt="RoundhousE, http://projectroundhouse.org" align="right" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_697E42FD.png" width="244" height="232" /&gt;&lt;/a&gt; &lt;strong&gt;&lt;u&gt;RoundhousE&lt;/u&gt;&lt;/strong&gt;&lt;/h4&gt;  &lt;p&gt;&lt;a href="http://projectroundhouse.org/" target="_blank"&gt;RoundhousE&lt;/a&gt; (RH), for those of you who have not heard of it, is a database migrations tool that uses SQL Scripts. RH is kind of like &lt;a href="http://tarantino.googlecode.com" target="_blank"&gt;Tarantino&lt;/a&gt;. We had originally wanted to contribute our ideas to Tarantino, but some of the goals for the two didn’t line up nicely so RoundhousE was born. RoundhousE runs update scripts (the goal is DDL/DML only), but it also looks for other scripts in other folders (like functions, views, and sprocs). The reasoning for the separation is so that versioning and seeing version history is much cleaner in source control. RH also versions databases the way you want. We prefer to &lt;a href="http://ferventcoder.com/archive/2009/11/19/roundhouse-version-your-database.aspx" target="_blank"&gt;version our databases based on source control&lt;/a&gt;, but it is extendable to be versioned in any way (or not at all). RH has an MSBuild task, a NAnt task, but most importantly, a command line console (rh.exe). Everything is &lt;a href="http://ferventcoder.com/archive/2009/11/15/roundhouse-configuration.aspx" target="_blank"&gt;configurable&lt;/a&gt; (including the version and scripts run tables).&amp;#160; Check it out at &lt;a href="http://projectroundhouse.org" target="_blank"&gt;http://projectroundhouse.org&lt;/a&gt;. RH has quite an extensive roadmap for where it is going (we are moving it to be a total migration package, not just a migration runner).&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;So what &lt;strong&gt;milestone&lt;/strong&gt; did we finish for RH? Making RH environment aware so you can execute environment specific scripts. Why would you want to do that? What if you wanted to insert a bunch of test data into your database but didn’t want that to get into production? What if you want to grant permissions to different users in different environments? &lt;/p&gt;  &lt;p&gt;Here I have a set of permissions scripts. Notice they are environment specific. &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_3B444743.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="Couple of scripts" border="0" alt="Couple of scripts" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_4CB4A81B.png" width="388" height="84" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Notice also that they have two things. They have “&lt;strong&gt;.ENV.&lt;/strong&gt;” in the name to let RH know they are environment scripts. Then they also have the name of the specific environment (&lt;strong&gt;LOCAL, TEST&lt;/strong&gt;) they should be run in. By the way, If you use UC and templating, you only maintain one file in source control and the file per environment is generated at build time (I digress). So we have some environment files and now I run RH to migrate my database.&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_52FB7EA9.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="Lots of RH automated goodness here." border="0" alt="Lots of RH automated goodness here." src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_3D8DA374.png" width="644" height="369" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;We can see from the log notes below that it only runs the LOCAL environment script in the LOCAL environment.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;LOCAL.GrantRobDataReaderDataWriterPermissions.ENV.sql is an environment file. We are in the LOCAL environment. This will run based on this check.      &lt;br /&gt;Running LOCAL.GrantRobDataReaderDataWriterPermissions.ENV.sql on (local) - TestRoundhousE.       &lt;br /&gt;TEST.GrantRobDataReaderDataWriterPermissions.ENV.sql is an environment file. We are in the LOCAL environment. &lt;strong&gt;This will NOT run based on this check.&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;And to be sure, let’s take a peek in the database:&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_5CC0247A.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="View of ScriptsRun table with run output" border="0" alt="View of ScriptsRun table with run output" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_364E1B62.png" width="644" height="283" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;If you’ve looked at RoundhousE in the past or haven’t yet looked at it, it’s worth &lt;a href="http://code.google.com/p/roundhouse/downloads/list" target="_blank"&gt;downloading&lt;/a&gt; and running the sample to see what it can do.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;By the way, you’ve probably noticed that have a definite theme with our developer automation tool suite (&lt;a href="http://codebetter.com/blogs/dru.sellers/archive/2009/09/25/warmup.aspx" target="_blank"&gt;WarmuP&lt;/a&gt;, &lt;a href="http://projectuppercut.org/" target="_blank"&gt;UppercuT&lt;/a&gt;, &lt;a href="http://projectroundhouse.org/" target="_blank"&gt;RoundhousE&lt;/a&gt;, &lt;a href="http://codebetter.com/blogs/dru.sellers/archive/2009/05/29/dropkick-an-idea-for-deployments.aspx" target="_blank"&gt;DropkicK&lt;/a&gt;, &lt;a href="http://github.com/drusellers/headlock" target="_blank"&gt;HeadlocK&lt;/a&gt;, and &lt;a href="http://sidepop.googlecode.com/" target="_blank"&gt;SidePOP&lt;/a&gt;). We are still not solid on the library name, but pretty close. Each of the tools are designed to be enjoyable to use and free. We respond to inquiries and fix problems quickly. Once we have a name for the library, we may offer enterprise support for those that would require that.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicious.com/aggbug.aspx?PostID=54860" width="1" height="1"&gt;</description><category domain="http://devlicious.com/blogs/rob_reynolds/archive/tags/RoundhousE/default.aspx">RoundhousE</category><category domain="http://devlicious.com/blogs/rob_reynolds/archive/tags/UppercuT/default.aspx">UppercuT</category><category domain="http://devlicious.com/blogs/rob_reynolds/archive/tags/Development/default.aspx">Development</category><category domain="http://devlicious.com/blogs/rob_reynolds/archive/tags/Git/default.aspx">Git</category><category domain="http://devlicious.com/blogs/rob_reynolds/archive/tags/Tools/default.aspx">Tools</category><category domain="http://devlicious.com/blogs/rob_reynolds/archive/tags/.NET/default.aspx">.NET</category></item></channel></rss>