<?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 : Development, RoundhousE</title><link>http://devlicio.us/blogs/rob_reynolds/archive/tags/Development/RoundhousE/default.aspx</link><description>Tags: Development, RoundhousE</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><item><title>RoundhousE–Intelligent Database Migrations And Versioning</title><link>http://devlicio.us/blogs/rob_reynolds/archive/2011/10/23/roundhouse-intelligent-database-migrations-and-versioning.aspx</link><pubDate>Sun, 23 Oct 2011 15:21:00 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:68316</guid><dc:creator>Rob Reynolds</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/rob_reynolds/rsscomments.aspx?PostID=68316</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/rob_reynolds/commentapi.aspx?PostID=68316</wfw:comment><comments>http://devlicio.us/blogs/rob_reynolds/archive/2011/10/23/roundhouse-intelligent-database-migrations-and-versioning.aspx#comments</comments><description>&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Because everyone wants to kick their database, but sometimes kicking your database is a good thing!&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Many would not argue that you should version your code, and few would argue against versioning your code in a way that can lead back to a specific point in source control history. However, most people don&amp;rsquo;t really think of doing the same thing with your database. That&amp;rsquo;s where RoundhousE (RH) comes in.&lt;/p&gt;
&lt;p&gt;I have been working on RH for over two years now and people always wander what it is, why and what sets it apart from other migrators. We set out to make a smart tool for migrations that came somewhat close to Ruby&amp;rsquo;s &lt;a href="http://api.rubyonrails.org/classes/ActiveRecord/Migration.html"&gt;ActiveRecord Migrations&lt;/a&gt; without going the code migrations route (yet). Hopefully this introduction will help you understand why it is different and whether it&amp;rsquo;s something that is in line with your needs. &lt;/p&gt;
&lt;h4&gt;What is RoundhousE? &lt;/h4&gt;
&lt;p&gt;RoundhousE (&lt;a href="http://projectroundhouse.org"&gt;http://projectroundhouse.org)&lt;/a&gt; is a database migrator that uses plain old SQL Scripts to transition a database from one version to another. RoundhousE currently works with Oracle, SQL Server (2000/2005/2008/Express), Access, MySQL, and soon SQLite and PostgreSQL. It comes in the form of a tool, MSBuild, and an embeddable DLL. While someone is working on a GUI, there is no visual tool at the current time.&lt;/p&gt;
&lt;h4&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/RoundhousE_5F00_Logo_5F00_3FA04CE5.jpg"&gt;&lt;img height="231" width="244" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/RoundhousE_5F00_Logo_5F00_thumb_5F00_63E53167.jpg" alt="RoundhousE - Kick It!" border="0" title="RoundhousE - Kick It!" style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;h4&gt;What sets RoundhousE apart from other migrators? &lt;/h4&gt;
&lt;p&gt;It subscribes to the idea of&lt;strong&gt; convention over configuration&lt;/strong&gt;, which means you can pass the migrator very few configuration options to get it to work (rh.exe /d dbname), but pass as many options as necessary to meet your conventions. Say you don&amp;rsquo;t like the tables or folder names that RH uses, you can override those to whatever you want. &lt;/p&gt;
&lt;p&gt;RH &lt;strong&gt;versions the database how you want&lt;/strong&gt; it versioned. You can supply it with a DLL path for it to pull the file version from. You can give it an XML file and XPath, or you can use the highest script number in the up folder. You can also just use a sequence based (non-global) form of passive versioning. &lt;a href="https://github.com/chucknorris/roundhouse/wiki/Versioning" title="https://github.com/chucknorris/roundhouse/wiki/Versioning"&gt;https://github.com/chucknorris/roundhouse/wiki/Versioning&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;RH believes in &lt;strong&gt;low maintenance&lt;/strong&gt; and keeping good clean history in your source control. This means that you don&amp;rsquo;t lump everything into one folder, you put your anytime scripts (views/functions/stored procedures/etc) into their own folders and track history as you go. RH is smart enough to only run these if they are new/different from the current existing scripts in the database.&lt;/p&gt;
&lt;p&gt;RH has three &lt;strong&gt;modes of operation&lt;/strong&gt;. Normal, DropCreate, and Restore. Notice none of those are Create like you may see in other migrators. If the intent in the end is to have a database ready to go, why would you want to have to make a step to specify that you want to create the database? RH is smart enough to realize that the database doesn&amp;rsquo;t exist and it creates it (unless you pass a switch explicitly telling it not to). Normal is just the migration as it is. DropCreate is used during development when you want to continually change the same scripts prior to production. Restore is used when you switch to maintenance mode and want to change the same maintenance script. &lt;a href="https://github.com/chucknorris/roundhouse/wiki/RoundhousEModes" title="https://github.com/chucknorris/roundhouse/wiki/RoundhousEModes"&gt;https://github.com/chucknorris/roundhouse/wiki/RoundhousEModes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;RH is &lt;strong&gt;environment aware&lt;/strong&gt;, which means you can have environment specific scripts. If you have scripts or permissions scripts that are different for each environment you can give them a special name.&amp;nbsp; &lt;a href="https://github.com/chucknorris/roundhouse/wiki/EnvironmentScripts"&gt;https://github.com/chucknorris/roundhouse/wiki/EnvironmentScripts&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;RH is an &lt;strong&gt;easy to start using on legacy databases&lt;/strong&gt;. You just take your old DDL/DML scripts and move them into a special folder that RH will only evaluate/run when it is creating a database (say on a new developers machine). You can arrange existing scripts into RH default folders or point RH to the existing folder types. RH splits scripts with the GO batch terminator in them.&lt;/p&gt;
&lt;p&gt;RH &lt;strong&gt;speeds up your development process&lt;/strong&gt;. You can use RH with NHibernate to refresh your database without leaving Visual Studio! Entity Framework and FluentMigrator are planned for this feature as well. &lt;a href="https://github.com/chucknorris/roundhouse/wiki/Roundhouserefreshdatabasefnh" title="https://github.com/chucknorris/roundhouse/wiki/Roundhouserefreshdatabasefnh"&gt;https://github.com/chucknorris/roundhouse/wiki/Roundhouserefreshdatabasefnh&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;RH runs on &lt;strong&gt;just the .NET framework&lt;/strong&gt;. This means you don&amp;rsquo;t need SMO installed like some other migrators require.&lt;/p&gt;
&lt;p&gt;While there are probably other features I haven&amp;rsquo;t mentioned, keep in mind that RH is not a code migrator (yet). If you are looking for a code migrator, there are quite a few good tools out there, including &lt;a href="https://github.com/schambers/fluentmigrator/wiki"&gt;FluentMigrator&lt;/a&gt; and &lt;a href="https://github.com/dradovic/MigSharp/wiki"&gt;Mig#.&lt;/a&gt; Entity Framework Code Migrations is really starting to shape up as well (Seriously! Although EF only works for SQL Server).&lt;/p&gt;
&lt;h4&gt;How do I get RoundhousE?&lt;/h4&gt;
&lt;p&gt;There are several avenues to get RH. You can use NuGet, Chocolatey, Gems, plain old downloads (still considered official releases), or source (both in git and svn). &lt;a href="https://github.com/chucknorris/roundhouse/wiki/Getroundhouse" title="https://github.com/chucknorris/roundhouse/wiki/Getroundhouse"&gt;https://github.com/chucknorris/roundhouse/wiki/Getroundhouse&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=68316" width="1" height="1"&gt;</description><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/RoundhousE/default.aspx">RoundhousE</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Development/default.aspx">Development</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Tools/default.aspx">Tools</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/.NET/default.aspx">.NET</category></item><item><title>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>Herding Code Talks About Nu</title><link>http://devlicio.us/blogs/rob_reynolds/archive/2010/08/27/herding-code-talks-about-nu.aspx</link><pubDate>Fri, 27 Aug 2010 06:22:58 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:61707</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=61707</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/rob_reynolds/commentapi.aspx?PostID=61707</wfw:comment><comments>http://devlicio.us/blogs/rob_reynolds/archive/2010/08/27/herding-code-talks-about-nu.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_33FC9938.png"&gt;&lt;img style="border-right-width:0px;margin:0px 0px 5px 5px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="Herding Code" border="0" alt="Herding Code" align="right" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_0BE9EA19.png" width="174" height="174" /&gt;&lt;/a&gt;&lt;a href="http://drusellers.codebetter.com" target="_blank"&gt;Dru&lt;/a&gt; and I were recently featured on &lt;a href="http://herdingcode.com/?p=272" target="_blank"&gt;Herding Code&lt;/a&gt; Podcast. In the podcast we talk about everything from package management in general to &lt;a href="http://nu.wikispot.org" target="_blank"&gt;Nubular&lt;/a&gt; (Nu) to other package management systems (&lt;a href="http://github.com/openrasta/openwrap" target="_blank"&gt;OpenWrap&lt;/a&gt;, &lt;a href="http://bricksproject.org/" target="_blank"&gt;Bricks&lt;/a&gt;, and &lt;a href="http://groups.google.com/group/horn-development" target="_blank"&gt;Horn&lt;/a&gt;, although horn was/is slightly different) to the possibility of Microsoft releasing a package management system. It was a good time and I enjoyed doing the podcast, but the herding code guys start recording at an insane 10:30 PM! I have no idea how I made it through the whole thing and was still able to talk afterwards.&lt;/p&gt;  &lt;p&gt;Some highlights:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;There is a lot of talk in the beginning about package management in general. &lt;/li&gt;    &lt;li&gt;Basically, I say the word “basically” way too much. &lt;/li&gt;    &lt;li&gt;For the first 16 minutes I think I was teetering on sleep, it was 10:30PM after all. Then after that I start to wake up and sound more articulate. &lt;/li&gt;    &lt;li&gt;Big shouts out to all the people in the community that have really been stepping up, and huge shout outs to &lt;a href="http://litanyagainstfear.com/" target="_blank"&gt;Nick Quaranto&lt;/a&gt; (@&lt;a href="http://twitter.com/qrush" target="_blank"&gt;qrush&lt;/a&gt;), &lt;a href="http://weblogs.asp.net/bsimser/" target="_blank"&gt;Bil Simser&lt;/a&gt; (@&lt;a href="http://twitter.com/bsimser" target="_blank"&gt;bsimser&lt;/a&gt;) and &lt;a href="http://systemex.net/" target="_blank"&gt;Michael Carter&lt;/a&gt; (@&lt;a href="http://twitter.com/kiliman" target="_blank"&gt;kiliman&lt;/a&gt;). &lt;/li&gt;    &lt;li&gt;40:16 – Discussion about what we would do if Microsoft released a package management system &lt;/li&gt;    &lt;li&gt;49:34 - “It’s spelled with an N U” - Dru Pimps Nu in the “Pimp Your Code” section of the podcast &lt;/li&gt;    &lt;li&gt;Going OT (off topic) 53:11 - “We junk punch audit” - Mentions for &lt;a href="http://projectroundhouse.org/" target="_blank"&gt;RoundhousE&lt;/a&gt; and what problems it solves. &lt;/li&gt;    &lt;li&gt;55:13 - “At the end of the day it is what it is as long as you bring your A game” - Basically Rehashed and Remixed. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_6AF67771.png"&gt;&lt;img style="border-right-width:0px;margin:0px 5px 5px 0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="Nubular (Nu)" border="0" alt="Nubular (Nu)" align="left" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_0960B85B.png" width="225" height="215" /&gt;&lt;/a&gt;Check out the herding code podcast and notes for more. I didn’t keep track of certain times for interesting bits in the beginning of the podcast, but &lt;a href="http://johnnycoder.com/blog/" target="_blank"&gt;Ben Griswold&lt;/a&gt; does an excellent job on the notes from the podcast.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://herdingcode.com/?p=272" target="_blank"&gt;&lt;strong&gt;http://herdingcode.com/?p=272&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=61707" 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/UppercuT/default.aspx">UppercuT</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Development/default.aspx">Development</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/.NET/default.aspx">.NET</category><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></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><item><title>Chuck Norris Welcomes You</title><link>http://devlicio.us/blogs/rob_reynolds/archive/2010/04/17/chuck-norris-welcomes-you.aspx</link><pubDate>Sat, 17 Apr 2010 14:57:21 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:57410</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=57410</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/rob_reynolds/commentapi.aspx?PostID=57410</wfw:comment><comments>http://devlicio.us/blogs/rob_reynolds/archive/2010/04/17/chuck-norris-welcomes-you.aspx#comments</comments><description>&lt;blockquote&gt;   &lt;p&gt;&amp;#160;&lt;a href="http://www.codesqueeze.com/the-ultimate-top-25-chuck-norris-the-programmer-jokes/" target="_blank"&gt;Chuck Norris doesn’t program with a keyboard. He stares the computer down until it does what he wants.&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_62A08492.png"&gt;&lt;img style="border-right-width:0px;margin:10px 0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="Chuck Norris welcomes you" border="0" alt="Chuck Norris welcomes you" align="right" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_42091F13.png" width="174" height="320" /&gt;&lt;/a&gt; All things need a name. We’ve tossed around a bunch of names for the framework of tools we’ve been working on, but one we kept coming back to was Chuck Norris. Why did we choose Chuck Norris? Well Chuck Norris sort of chose us. Everything we talked about, the name kept drawing us closer to it. We couldn’t escape Chuck Norris, no matter how hard we tried. So we gave in.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://www.chucknorrisfacts.com/node/101" target="_blank"&gt;Chuck Norris can divide by zero.&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h4&gt;&lt;strong&gt;What is the &lt;/strong&gt;&lt;a href="http://groups.google.com/group/chucknorrisframework" target="_blank"&gt;&lt;strong&gt;Chuck Norris Framework&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;?&lt;u&gt; &lt;/u&gt;&lt;/strong&gt;&lt;/h4&gt;  &lt;p&gt;&lt;a href="http://twitter.com/drusellers" target="_blank"&gt;@drusellers&lt;/a&gt; and I have been working on a variety of tools:&lt;/p&gt;  &lt;p&gt;WarmuP - &lt;a href="http://github.com/chucknorris/warmup" target="_blank"&gt;http://github.com/chucknorris/warmup&lt;/a&gt; (Template your entire project/solution and create projects ready to code - From Zero to a Solution with everything in seconds. Your templates, your choices.)     &lt;br /&gt;UppercuT - &lt;a href="http://projectuppercut.org/"&gt;http://projectuppercut.org&lt;/a&gt; (Build with Conventions - Professional Builds in Moments, Not Days!) | Code also at &lt;a title="http://github.com/chucknorris/uppercut" href="http://github.com/chucknorris/uppercut" target="_blank"&gt;http://github.com/chucknorris/uppercut&lt;/a&gt;     &lt;br /&gt;DropkicK - &lt;a href="http://github.com/chucknorris/dropkick" target="_blank"&gt;http://github.com/chucknorris/dropkick&lt;/a&gt; (Deploy Fluently)     &lt;br /&gt;RoundhousE - &lt;a href="http://projectroundhouse.org/"&gt;http://projectroundhouse.org&lt;/a&gt; (Professional Database Management with Versioning) | Code also at &lt;a title="http://github.com/chucknorris/roundhouse" href="http://github.com/chucknorris/roundhouse" target="_blank"&gt;http://github.com/chucknorris/roundhouse&lt;/a&gt;     &lt;br /&gt;SidePOP - &lt;a href="http://sidepop.googlecode.com/"&gt;http://sidepop.googlecode.com&lt;/a&gt; (Does your application need to check email?)     &lt;br /&gt;HeadlocK - &lt;a href="http://github.com/chucknorris/headlock" target="_blank"&gt;http://github.com/chucknorris/headlock&lt;/a&gt; (Hash a directory so you can later know if anything has changed) &lt;/p&gt;  &lt;p&gt;Others – still in concept or vaporware &lt;/p&gt;  &lt;h4&gt;&lt;strong&gt;What’s in a Name?&lt;/strong&gt;&lt;/h4&gt;  &lt;p&gt;People ask why we choose such violent names for each tool of our framework? At first it was about whipping your code into shape, but after awhile the naming became, “How can we relate this to Chuck Norris?” People also ask why we uppercase the last letter of each name. Well, that’s more about making you ask questions…but there are a few reasons for it. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://www.codesqueeze.com/the-ultimate-top-25-chuck-norris-the-programmer-jokes" target="_blank"&gt;Project managers never ask Chuck Norris for estimations…ever.&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;&lt;a href="http://www.codesqueeze.com/the-ultimate-top-25-chuck-norris-the-programmer-jokes/" target="_blank"&gt;The class object inherits from Chuck Norris&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://www.codesqueeze.com/the-ultimate-top-25-chuck-norris-the-programmer-jokes/" target="_blank"&gt;Chuck Norris doesn’t need garbage collection because he doesn’t call .Dispose(), he calls .DropKick()&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h4&gt;&lt;strong&gt;Call To Action&lt;/strong&gt;&lt;/h4&gt;  &lt;p&gt;So what are you waiting for? Join the &lt;a href="http://groups.google.com/group/chucknorrisframework" target="_blank"&gt;Google group&lt;/a&gt; today, download and play with the tools. &lt;/p&gt;  &lt;p&gt;And lastly, welcome to Chuck Norris. Or should I say Chuck Norris welcomes you…&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=57410" 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></item><item><title>RoundhousE – ADO.NET over SMO</title><link>http://devlicio.us/blogs/rob_reynolds/archive/2010/02/23/roundhouse-ado-net-over-smo.aspx</link><pubDate>Wed, 24 Feb 2010 03:43:34 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:55509</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=55509</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/rob_reynolds/commentapi.aspx?PostID=55509</wfw:comment><comments>http://devlicio.us/blogs/rob_reynolds/archive/2010/02/23/roundhouse-ado-net-over-smo.aspx#comments</comments><description>&lt;p&gt;One thing most database change management tools use is SQL Server Managment Objects (SMO).&amp;#160; Most do that because ADO.NET doesn’t allow the batch statement separator keyword GO in sql statements.&amp;#160; So most people write off the ability to use a database change tool for sql server without actually having the sql server installed on the machine that is running the tool. This is not a reality in some organizations, especially when licenses for SQL server are limited.&amp;#160; &lt;/p&gt;  &lt;h4&gt;&lt;strong&gt;&lt;u&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/RoundhousE_5F00_Logo_5F00_2E7DDB4C.jpg"&gt;&lt;img 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;" title="RoundhousE_Logo" border="0" alt="RoundhousE_Logo" align="right" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/RoundhousE_5F00_Logo_5F00_thumb_5F00_76E81A5D.jpg" width="244" height="231" /&gt;&lt;/a&gt;Split the GO&lt;/u&gt;&lt;/strong&gt;&lt;/h4&gt;  &lt;p&gt;Recently, a few guys have really been helping me get RoundhousE (RH) to the point of not using SMO anymore.I’d like to thank &lt;a href="http://twitter.com/jochenjonc" target="_blank"&gt;Jochen&lt;/a&gt; and &lt;a href="http://twitter.com/PascalMestdach" target="_blank"&gt;Pascal&lt;/a&gt; for all of your hard work recently on this and bearing with me while we worked out getting the &lt;a href="http://code.google.com/p/roundhouse/issues/detail?id=17" target="_blank"&gt;regex&lt;/a&gt; &lt;a href="http://code.google.com/p/roundhouse/issues/detail?id=22" target="_blank"&gt;ironed&lt;/a&gt; &lt;a href="http://code.google.com/p/roundhouse/issues/detail?id=25" target="_blank"&gt;out&lt;/a&gt; for splitting sql statements on GO when it isn’t in a comment section. &lt;/p&gt;  &lt;p&gt;There only two requirements with GO statements when using RH. The first one (a good practice IMHO) is that GO has to be the last statement on a line. The second is that using GO in between tick marks (‘), like for inserting it into a table, be sure it isn’t the last statement on a given line. This second one is a low possibility, but worth mentioning for those that might structure string insert/updates with GO in them in such a format.&lt;/p&gt;  &lt;p&gt;So to recap:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Good Stuff&lt;/strong&gt;&lt;/p&gt;  &lt;pre class="sql" name="code"&gt;sql statements GO

something something
GO

some more statement action go

/*
Use some database
GO
*/
--GO
--something something GO&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Not Gonna Work&lt;/strong&gt;&lt;/p&gt;

&lt;pre class="sql" name="code"&gt;do something GO do something else

insert into sometable (id, description)
VALUES
(1, 
&amp;#39; yep yep. uh huh...ya ya ya ya ya. GO
&amp;#39;)&lt;/pre&gt;

&lt;h4&gt;&lt;strong&gt;&lt;u&gt;Favor ADO.NET over SMO&lt;/u&gt;&lt;/strong&gt;&lt;/h4&gt;

&lt;p&gt;Those that have been using RH know that they can use it with SMO for 2005 and 2008. Being able to switch out either one of these has been a lifesaver for some organizations that have not yet upgraded to sql server 2008. Right now RH is in a transition state where SMO is still accessible while ADO.NET is really feeling it’s way out. So if you are using sql2005 or sql2008 now, you can continue doing so. Keep in mind that those will be deprecated in favor of ado.net at some point.&lt;/p&gt;

&lt;p&gt;Go check it &lt;a href="http://projectroundhouse.org" target="_blank"&gt;out&lt;/a&gt;! To use the new ado.net version, just change the databaseType (/dt in console) to “sqlserver”.&amp;#160; Please let me know if you find any problems with it.&lt;/p&gt;

&lt;pre class="xml" name="code"&gt;databaseType=&amp;quot;sqlserver&amp;quot;&lt;/pre&gt;

&lt;p&gt;For those that use Oracle, be on the lookout for coming support. Also, &lt;a href="http://fluentnhibernate.org/" target="_blank"&gt;Fluent NHibernate&lt;/a&gt; lovers, be ready for some &lt;a href="http://code.google.com/p/roundhouse/issues/detail?id=11" target="_blank"&gt;schema script generation&lt;/a&gt;!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=55509" 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/Development/default.aspx">Development</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/Tools/default.aspx">Tools</category><category domain="http://devlicio.us/blogs/rob_reynolds/archive/tags/.NET/default.aspx">.NET</category></item><item><title>Warmup – Getting Started</title><link>http://devlicio.us/blogs/rob_reynolds/archive/2010/02/01/warmup-getting-started.aspx</link><pubDate>Mon, 01 Feb 2010 14:25:00 GMT</pubDate><guid isPermaLink="false">40756a8b-6212-4073-9d98-6c26781577de:55241</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=55241</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/rob_reynolds/commentapi.aspx?PostID=55241</wfw:comment><comments>http://devlicio.us/blogs/rob_reynolds/archive/2010/02/01/warmup-getting-started.aspx#comments</comments><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What if there was a tool out there that could let you specify a structure for a project (visual studio solution + everything else) and save you up to 3+ hours of work every time you started a new project?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a target="_blank" href="http://github.com/drusellers/warmup"&gt;Warmup&lt;/a&gt; was an idea by &lt;a target="_blank" href="http://codebetter.com/blogs/dru.sellers/archive/2009/09/25/warmup.aspx"&gt;Dru Sellers&lt;/a&gt; to remove all of the setup work required every time you set up a new project. You know, create the solution, add projects, put in your references, etc. Then how about getting the infrastructure for your service/website/console set up as well with things like IoC, etc? What about patterns and other pet items that you put in any project?&lt;/p&gt;
&lt;p&gt;Yeah &amp;ndash; there&amp;rsquo;s an app for that. And it&amp;rsquo;s pretty simple to use. Plus you can change your templates when you have new ideas, so it&amp;rsquo;s totally rockstar! &lt;/p&gt;
&lt;p&gt;The first thing you do is to set up templates somewhere in source control (svn or git). Then you specify where that is to the configuration and what type of source control.&lt;/p&gt;
&lt;pre name="code" class="xml"&gt;&amp;lt;warmup
  sourceControlWarmupLocation=&amp;quot;git://github.com/ferventcoder/warmup-templates.git&amp;quot;
  sourceControlType=&amp;quot;git&amp;quot;
  /&amp;gt;&lt;/pre&gt;
&lt;p&gt;Then you run a simple command. If base was one of the folders below the directory above my source control, then that is what I would specify as the first argument.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;warmup.exe base &lt;em&gt;nameOfProject&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_3D2669E1.png"&gt;&lt;img height="209" width="243" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_5549D43C.png" alt="The base is a template" border="0" title="The base is a template" 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 specify &lt;em&gt;nameofProject&lt;/em&gt;. That is what I want my project to be named when I am complete.&amp;nbsp; &lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;Templating&lt;/span&gt;&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Let&amp;rsquo;s start by taking a look at the base template. The basic idea here is simple. Place &lt;strong&gt;__NAME__&lt;/strong&gt; everywhere you want to be replaced when running Warmup. In the same way &lt;a target="_blank" href="http://projectuppercut.org"&gt;UppercuT&lt;/a&gt; does token replacement with ConfigBuilder, DocBuilder, SqlBuilder, and DeployBuilder, Warmup does token replacement for an entire solution.&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_66BA3514.png"&gt;&lt;img height="484" width="258" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_4AC9001C.png" alt="__NAME__ for replacement" border="0" title="__NAME__ for replacement" 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;If we were to look at some of the files you would see the absolute depth of how naming really can be replaced. Let&amp;rsquo;s take a look at the solution though, that will hold quite a bit of meaning for you.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_156FC7EA.png"&gt;&lt;img height="378" width="338" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_6D5D18CA.png" alt="From Visual Studio - __NAME__ is everywhere" border="0" title="From Visual Studio - __NAME__ is everywhere" 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;Now that we have our template all set up, we have one thing to do. Open our .sln file in Notepad and delete the first line (not sure what happens here, but this works). Microsoft should be on the first line when we are done.&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_7337BC63.png"&gt;&lt;img height="145" width="244" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_127A6337.png" alt="__NAME__.sln first line must be deleted." border="0" title="__NAME__.sln first line must be deleted." 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;And now our template is all ready, so we check our changes into source. If we are using git, we need to push back to the repository we are looking at after we finish committing.&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;Run Warmup&lt;/span&gt;&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Now that we&amp;rsquo;ve seen our template, let&amp;rsquo;s run Warmup.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s call the new project &lt;strong&gt;Alpha&lt;/strong&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;warmup.exe base Alpha&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is the output: &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hardcore git cloning action to: C:\code\warmup\code_drop\warmup\Alpha &lt;br /&gt;Running: cmd&amp;nbsp; /c git clone git://github.com/ferventcoder/warmup-templates.git C:\code\warmup\code_drop\warmup\Alpha &lt;br /&gt;Initialized empty Git repository in C:/code/warmup/code_drop/warmup/Alpha/.git/ &lt;/p&gt;
&lt;p&gt;replacing tokens&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_74B8D877.png"&gt;&lt;img height="231" width="244" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_612B78D6.png" alt="image" border="0" title="image" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&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_4612A9C8.png"&gt;&lt;img height="244" width="222" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_102DB4AE.png" alt="__NAME__ is replaced with Alpha when running Warmup" border="0" title="__NAME__ is replaced with Alpha when running Warmup" 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;This project already has &lt;a target="_blank" href="http://projectuppercut.org"&gt;UppercuT&lt;/a&gt;, &lt;a target="_blank" href="http://projectroundhouse.org"&gt;RoundhousE&lt;/a&gt;, and others already in it. Take a look at the 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_55660BD7.png"&gt;&lt;img height="244" width="182" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_42B11220.png" alt="All of my references are good" border="0" title="All of my references are good" 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 open a command line and run build.bat.&amp;nbsp; I get a successful build with 31 passing tests! If I were to go to the code_drop folder, I&amp;rsquo;m all ready to deploy if I had my deployment framework already here. &lt;/p&gt;
&lt;p&gt;I can already run RoundhousE and create my database from here:&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_4C29D096.png"&gt;&lt;img height="173" width="244" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_2CD703F6.png" alt="Output from RoundhousE" border="0" title="Output from RoundhousE" 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;&lt;a href="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_0B0B2B65.png"&gt;&lt;img height="172" width="244" src="http://devlicio.us/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/rob_5F00_reynolds/image_5F00_thumb_5F00_69AB85C8.png" alt="Database is created and we are ready to rock!" border="0" title="Database is created and we are ready to rock!" 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;h4&gt;&lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;Conclusion&lt;/span&gt;&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;I have an entire structure that allows me to just concentrate on the stories at hand. Warmup may not be the best thing since sliced bread, but it&amp;rsquo;s going to save you oodles of time! If you know someone else that has created a template you want to use and it&amp;rsquo;s shared publicly, you can just edit the config file to point there. We have been using warmup for close to 3 months now and it saves us quite a bit of time. Plus we find more and more things we can put back into the templates to save us time. I believe this aspect of learning and growing your templates over time is the intention of warmup. Plus your template may not be the same as mine and that&amp;rsquo;s completely cool!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://devlicio.us/aggbug.aspx?PostID=55241" 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/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></item><item><title>Two Major Milestones for RoundhousE and UppercuT</title><link>http://devlicio.us/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://devlicio.us/blogs/rob_reynolds/rsscomments.aspx?PostID=54860</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://devlicio.us/blogs/rob_reynolds/commentapi.aspx?PostID=54860</wfw:comment><comments>http://devlicio.us/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://devlicio.us/aggbug.aspx?PostID=54860" 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/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></item></channel></rss>