<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Beige Sunshine</title>
	<atom:link href="http://blog.beigesunshine.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.beigesunshine.com</link>
	<description>Welcome to your head.</description>
	<lastBuildDate>Fri, 06 May 2011 20:59:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Things I Learned at Startup Weekend Calgary</title>
		<link>http://blog.beigesunshine.com/2011/05/04/things-i-learned-at-startup-weekend-calgary-2/</link>
		<comments>http://blog.beigesunshine.com/2011/05/04/things-i-learned-at-startup-weekend-calgary-2/#comments</comments>
		<pubDate>Thu, 05 May 2011 03:05:21 +0000</pubDate>
		<dc:creator>mendicant</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://blog.beigesunshine.com/2011/05/04/things-i-learned-at-startup-weekend-calgary-2/</guid>
		<description><![CDATA[Last weekend I went to Startup Weekend Calgary. The event was hosted by @deveshd and @justinnowak at CoworkYYC. Our Startup Weekend coordinator was @thubten. I would like to give a massive shout out to all of &#8230; <a class="more-link" href="http://blog.beigesunshine.com/2011/05/04/things-i-learned-at-startup-weekend-calgary-2/">More<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Last weekend I went to Startup Weekend Calgary. The event was hosted by <a href="http://twitter.com/deveshd">@deveshd</a> and <a href="http://twitter.com/justinnowak">@justinnowak</a> at <a href="http://www.coworkyyc.com" target="_blank">CoworkYYC</a>. Our Startup Weekend coordinator was <a href="https://twitter.com/thubten" target="_blank">@thubten</a>. I would like to give a massive shout out to all of these people as they did an incredible job making the weekend great.</p>
<p>As I had never been to a startup weekend before, I really had no idea what to expect. Despite never having been to a startup weekend I had two goals:</p>
<ul>
<li>I wanted to meet some new people in my field or a related field</li>
<li>I wanted to try something a little bit new and different and <strong>fun</strong></li>
</ul>
<p>I’m sure there’s a ton of people who have written posts about what happens at startup weekend. <a href="http://kroontje.tumblr.com/post/5153253065/startupweekendyyc-sleep-avoided-lessons-learned" target="_blank">Aaron</a> and <a href="http://www.clangager.com/my-calgary-startup-weekend-experience" target="_blank">Chad</a> sum it up much better than I will likely be able to anyway.</p>
<h2>My Journey</h2>
<p>The night started off with the pitches. There were a ton of good pitches and some very exciting ones. I had some ideas but there was exactly one reason why I didn’t pitch: All my ideas had some sort of resemblance to applications I have built at work – And I came here explicitly <strong>not </strong>to work on the sort of things I do at work. I came to work on something <strong>fun</strong>.</p>
<p>My night started off by getting on a team with <a href="https://twitter.com/clangager" target="_blank">@clangager</a>. Despite my goal of working on something fun, the original idea we were working on centered around bridging two applications via a middle tier. Luckily for us, the problem had already been solved and in such a way that it wasn’t worth attempting over.</p>
<p>Finally, after a night of deliberating, Chad and I ended up deciding on building <a href="http://twitter.com/sextrics" target="_blank">@sextrics</a> (Sex+Metrics), initially created to be <a href="http://www.ipoonow.com/" target="_blank">iPoo</a> of sex. Yes, a ridiculous idea. And if you check our twitter stream, many, many laughs were had over the weekend.</p>
<p>Here is the interesting part. Despite being a totally crazy and outlandish idea (I mean – “Hey! We’ll track how often you have sex, what position, what room and we’ll give you some badges and everyone will laugh”) everyone was intrigued. Literally every single person who came through the space came by to see just what the hell we were doing. And laugh. And talk. We had a ton of fun building it and a ton of fun with each other.</p>
<p>Halfway through the day Saturday, we were also joined by <a href="https://twitter.com/ianj_alberta" target="_blank">@ianj_alberta</a>, who had never used Ruby, Rails, GitHub or Heroku before. We had a lot of fun discussing Ruby, what it was and how it works. However, where his expertise really shone was due to the fact that not only was he a developer, he is also a photographer with Photoshop experience. He built all of the location icons and helped cut out all of the position icons.</p>
<p>In the end, we made our pitch and came in second to <a href="http://twitter.com/MidoDeals" target="_blank">@MidoDeals</a>. Congrats to that team.</p>
<h2></h2>
<h2>My Lessons</h2>
<p>It was a long weekend and my description above is a <strong>very</strong> distilled version of the weekend. However, I learned one very valuable lesson.</p>
<blockquote><p><font color="#000000">Any idea, no matter how small or ridiculous you might view it to be has the power to become great if you are just willing to throw it out there and see what people say.</font></p>
</blockquote>
<p>I never thought we would get as far as we did with our idea. <strong>But we did</strong>.</p>
<p>I never thought an idea that started out as a sex trophy case could turn into a viable prospect. <strong>But it did</strong>.</p>
<p>I never thought the experience would have such a profound effect on me. <strong>But it did</strong>.</p>
<h2>My Takeaways</h2>
<ol>
<li>Take a step outside the norm. It doesn’t even have to be outside your comfort zone. Just something different.</li>
<li>You would be surprised what you can accomplish in 54 hours.</li>
<li>Never limit yourself. Negativity and nay-saying could prevent you from seeing true value of something.</li>
</ol>
<p>Oh, and if you’re going to pitch something – make sure you have some sort of a business plan. We didn’t and I’m sure it cost us winning the weekend. Not that I care because I came away from Startup Weekend learning things that are far more valuable than a first place finish ever would have been.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.beigesunshine.com/2011/05/04/things-i-learned-at-startup-weekend-calgary-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>On a more positive note</title>
		<link>http://blog.beigesunshine.com/2010/07/09/on-a-more-positive-note/</link>
		<comments>http://blog.beigesunshine.com/2010/07/09/on-a-more-positive-note/#comments</comments>
		<pubDate>Fri, 09 Jul 2010 14:14:10 +0000</pubDate>
		<dc:creator>mendicant</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[OffTopic]]></category>

		<guid isPermaLink="false">http://blog.beigesunshine.com/2010/07/09/on-a-more-positive-note/</guid>
		<description><![CDATA[I went on a bit of a tangent in my last post. I focused more on negative things than what it was I was really trying to get across. So today, let’s take a look at &#8230; <a class="more-link" href="http://blog.beigesunshine.com/2010/07/09/on-a-more-positive-note/">More<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I went on a bit of a tangent in my last <a href="http://blog.beigesunshine.com/2010/07/04/look-who-finally-showed-up-an-ode-to-microsoft/">post</a>. I focused more on negative things than what it was I was really trying to get across. So today, let’s take a look at some of the good moves they’ve made in the last couple of years.</p>
<p>&#160;</p>
<h2></h2>
<h2>Powershell</h2>
<p>Yes, I know I whine about it a lot. But it is a step in the right direction. From a technical standpoint, it is exactly what users in the Microsoft world needed. The main reason I complain is because I like the way that unix shells work in general compared to the way windows shells do. It’s a cultural/ease of use thing. It was a welcome, though <strong>LONG OVERDUE</strong> tool.</p>
<h2>Asp.Net MVC</h2>
<p>Once again, a very welcome release. As I said in the last post, it still lacks compared to other MVC frameworks, but it is absolutely a <strong>step in the right direction</strong>. Maybe you will never even convince WebForms guys to use it, but at least it’s there and it seems to be taking off. You’ll never get rid of webforms from the standpoint of legacy apps that are too big/expensive to rewrite, but going forward we’ve at least got a choice.</p>
<p>My biggest concern with this one is that they shipped MVC2 with Visual Studio 2010. _If_ this means that ASP.Net MVC releases are going to be tied to the Visual Studio releases, they’ve just shot themselves in the foot big time.</p>
<h2>The Big One – JQuery</h2>
<p>Let’s face it, <a href="http://weblogs.asp.net/scottgu/archive/2008/09/28/jquery-and-microsoft.aspx">this</a> was probably one of the biggest announcements MS has ever made. It (could possibly) signify a shift in MS’s stance on open source and community projects. Instead of going out and writing yet another half baked framework, they went out and found a way to package (arguably) the best one with their framework. I understand there are other frameworks out there (and have even used them), but none seems to be nearly as popular as JQuery. In fact, JQuery has basically become the Kleenex of Javascript. Often time’s we on our team will say “I’m gonna JQuery that up” or “Throw some JQuery there”. It’s a noun, a verb… whatever it needs to be for us to say “Use Javascript”.</p>
<p>In fact, I don’t think there would be very many open source libraries with more acceptance and use than JQuery.</p>
<h2>Razor</h2>
<p>Okay, so maybe I don’t get it, but it does seem a lot better than webforms. But why release it just to throw into webmatrix? Unless I’m missing something here and it’s going to be in ASP.Net MVC next week, or V3.0 (when will that get released?) then it’s ridiculous that it isn’t integrated already.</p>
<h2>The big picture</h2>
<p>So, though I may not exactly like all the techs I’m about to list, let’s look at them from a high level. MS now has it set up that they can offer an MVC Stack (ASP.Net MVC), a great Javascript Library (JQuery), an IoC container (Unity), an ORM (Entity Framework) and a decent command line environment to deploy it with (using <a href="http://github.com/JamesKovacs/psake">psake</a> and <a href="http://twitter.com/ehexter/statuses/14016233788">Pstrami</a> if it ever comes out <img src='http://blog.beigesunshine.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> . Again very positive.</p>
<h2>So why the big rant?</h2>
<p>My biggest point in my last post was “What took so long?” I’ve heard two stories regarding why MVC came to fruition. One is that they were worried about all the MVC frameworks and finally decided to build their own. The other (way cooler) one is that the Gu was given a demo of rails at a conference and loved it so much that he wrote the humble beginnings of ASP.Net on the plane ride home.</p>
<p>Either way, imagine if, instead of a reactive release in 2009 we had gotten a more proactive release even in 2006? Imagine if RIGHT NOW we had in our hands what ASP.Net MVC is going to look like in 2013. Look at the other frameworks. Whenever someone gets something right, they copy it almost immediately. Imagine we had a framework like that.</p>
<p>Or what about entity framework. I haven’t used it yet. I don’t have a need. But in talking to people I have found that EF4 is a huge step forward. Not great yet, but not bad either. It works, but still has shortcomings. Once again, imagine if instead of a 2008 release we had something more along the lines of, i don’t know, 2006? Imagine if EF were nearly as mature as NHibernate. </p>
<p>All I’ve been trying to say is that MS is always late to the party and then tries to get people to push these tools when they know there are better ones out there. There may come a day when an MVP who knows both EF and NHibernate will push&#160; EF before NHibernate (it may even happen already) but it will not be common for a few more releases of EF.</p>
<h2>But once again the positive</h2>
<p>All these releases seem to be coming closer and closer together now. The IIS Express, Sql Server Compact Edition, Razor announcements recently are examples of that. It <strong>seems</strong> as though MS is paying attention to the developers and seemingly even <strong>other developer communities</strong> again. If they can continue to do that and continue shoving resources towards improving the development story on Windows, things are bound to improve. Hopefully quickly.</p>
<p>Let’s face it, outside Visual Studio, windows development is second rate compared to everything else, and I hope they change that because I don’t want to be second rate.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.beigesunshine.com/2010/07/09/on-a-more-positive-note/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Look who finally showed up! &#8212; An Ode to Microsoft</title>
		<link>http://blog.beigesunshine.com/2010/07/04/look-who-finally-showed-up-an-ode-to-microsoft/</link>
		<comments>http://blog.beigesunshine.com/2010/07/04/look-who-finally-showed-up-an-ode-to-microsoft/#comments</comments>
		<pubDate>Sun, 04 Jul 2010 14:41:17 +0000</pubDate>
		<dc:creator>mendicant</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[OffTopic]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.beigesunshine.com/2010/07/04/look-who-finally-showed-up-an-ode-to-microsoft/</guid>
		<description><![CDATA[&#160; I’m going to start by saying that the first part (and majority) of this post will be negative. Not the whole thing, but you’ve been warned. With the introduction of the Razor view engine today &#8230; <a class="more-link" href="http://blog.beigesunshine.com/2010/07/04/look-who-finally-showed-up-an-ode-to-microsoft/">More<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>&#160;</p>
<p>I’m going to start by saying that the first part (and majority) of this post will be negative. Not the whole thing, but you’ve been warned.</p>
<p>With the introduction of the <a href="http://weblogs.asp.net/scottgu/archive/2010/07/02/introducing-razor.aspx">Razor</a> view engine today and the subsequent <a href="https://twitter.com/bsimser/status/17666591357">very</a>&#160;<a href="http://twitter.com/jeremydmiller/status/17660673077">expected</a> <a href="http://twitter.com/karlseguin/status/17678315192">questioning</a> and <a href="http://weblogs.asp.net/scottgu/archive/2010/07/02/introducing-razor.aspx#7553058">praise</a>, I&#8217;m feeling the same way I do about so many releases that Microsoft has made since I&#8217;ve been a .Net developer:</p>
<p>At best, a little pissed off. But let’s get to that later.</p>
<p>Let’s start with Razor. High level, is it:</p>
<ul>
<li>New? Check. </li>
<li>Different? A little bit. </li>
<li>Ground breaking? <strong>No.</strong> </li>
<li>Revolutionary? <strong>Not even close.</strong> </li>
</ul>
<p>If you take a look at the example’s in Scott Gu’s introductory post and the examples for the <a href="http://sparkviewengine.com/">Spark</a> View Engine, you’ll see why people are commenting about the <a href="http://twitter.com/robconery/status/17658632556">similarity</a>.</p>
<p>The fact of the matter is, it’s <a href="http://sparkviewengine.com/">been</a>&#160;<a href="http://github.com/NHaml/NHaml">done</a>. So really, why be upset when people question the use of it? It’s this attitude that starts me on my rant.</p>
<h2>ASP.Net</h2>
<h2></h2>
<h2></h2>
<p>Let’s start way back on January 5, 2002. Love it or hate it, Microsoft introduced <a href="http://www.asp.net/web-forms">ASP.Net Webforms</a>. Whether you agree with it’s methodology or not, you can’t deny that it was:</p>
<li>New. </li>
<li>Different. </li>
<li>Ground breaking. </li>
<li>Revolutionary. </li>
<p>&#160;</p>
<p>In fact, it was so revolutionary, that it took until <a href="http://en.wikipedia.org/wiki/ASP.NET_MVC_Framework#Release_history">March 17, 2009</a> before they even released the <a href="http://www.asp.net/mvc">ASP.Net MVC</a> framework that acknowledged there was another point of view on web development. Now was ASP.Net MVC:</p>
<li>New? <a href="http://cakephp.org/">That’s</a> a <a href="http://struts.apache.org/">big</a>&#160;<a href="http://www.djangoproject.com/">fat</a>&#160;<a href="http://rubyonrails.org/">no</a>. </li>
<li>Different? Maybe to webforms developers. </li>
<li>Ground breaking? Far from it. </li>
<li>Revolutionary? Way too late for that. </li>
<p>&#160;</p>
<p>Yet there <strike>everyone</strike> the pure MS developers were finally being enlightened on what web development could be like. And we were supposed to be grateful. Grateful that literally years after other developers figured it out, MS did. Java got struts in 2000. Ruby got Rails in 2005. There’s numerous others, but to finally get to the subject of my annoyance:</p>
<p>&#160;</p>
<p><strong>WHAT IN THE F@%&amp; TOOK MICROSOFT SO LONG?</strong></p>
<p>&#160;</p>
<h2>Powershell</h2>
<p>Yet another leap forward…. at least for the Microsoft world. How does it stack up:</p>
<ul>
<li>New? Nope.</li>
<li>Different? A little.</li>
<li>Ground Breaking? Maybe if you include the .Net Integration.</li>
<li>Revolutionary? Not at all.</li>
</ul>
<p>There’s <a href="http://en.wikipedia.org/wiki/Bash_(Unix_shell)">literally</a>&#160;<a href="http://en.wikipedia.org/wiki/C_shell">hundreds</a>&#160;<a href="http://en.wikipedia.org/wiki/Friendly_interactive_shell">of</a>&#160;<a href="http://en.wikipedia.org/wiki/Z_shell">shells</a>. Microsoft finally got up to creating a real one. Reaching at least as far back as <a href="http://en.wikipedia.org/wiki/Thompson_shell">1971</a>, shells have a long and storied history. Probably the most celebrated of the shells, the <a href="http://en.wikipedia.org/wiki/Bash_(Unix_shell)">Bourne Again Shell</a> (bash) was first released in 1987, and was blowing the Microsoft world out of the water in terms of usability, capability and power from even back in the days of DOS. So why is it that it took until 2006 for Microsoft to take the next step?</p>
<p>The obvious omissions for me are: a real history search and a preserved history. Two of the most beneficial tools in a bash user’s aresenal. Credit where credit is due though: The .Net integration story in powershell is immensely intriguing.</p>
<h2>Are you seri-OSS?</h2>
<p>Bad pun, I know. But the problem is so bad that the developer community has had to take it upon themselves to solve these problems and innovate themselves. There is too many for me to go into each one so I’m going to short list it:</p>
<ul>
<li><a href="http://msdn.microsoft.com/en-us/library/bb399572.aspx">Entity Framework</a> vs <a href="http://nhforge.org/Default.aspx">NHibernate</a></li>
<li><a href="http://msdn.microsoft.com/en-us/library/ms182489(VS.80).aspx">MSTest</a> vs <a href="http://www.nunit.org/">NUnit</a>, <a href="http://www.mbunit.com/">MBUnit</a> and others</li>
<li><a href="http://unity.codeplex.com/">Unity</a> vs <a href="http://structuremap.github.com/structuremap/index.html">Structure Map</a>, <a href="http://www.castleproject.org/container/">Castle Windsor</a></li>
<li><a href="http://msdn.microsoft.com/en-us/library/wea2sca5(VS.80).aspx">MSBuild</a> vs <a href="http://nant.sourceforge.net/">NAnt</a></li>
<li><a href="http://weblogs.asp.net/scottgu/archive/2010/06/28/introducing-iis-express.aspx">IIS Express</a> vs <a href="http://en.wikipedia.org/wiki/WEBrick">WEBrick</a> and <a href="http://en.wikipedia.org/wiki/Mongrel_(web_server)">Mongrel</a> and the like</li>
</ul>
<p>And the four point system of New, Different, Ground Breaking and Revolutionary is going to look the same for all these. Even the aforementioned items had OSS precursors (MonoRail vs MVC and cygwin/bash vs Powershell).</p>
<h2>So why all the acclaim?</h2>
<p>Instead of looking from the outside in, let’s take a look at these from the average Microsoft Developer who never strays from the walled garden. Every single technology mentioned would answer something like:</p>
<ul>
<li>New? And shiny too!</li>
<li>Different? Mind bendingly so.</li>
<li>Ground Breaking? I’ve never seen anything like it!</li>
<li>Revolutionary? Unbelievably so!</li>
</ul>
<p>I’ve been an avid *nix user and had at least one or more *nix based systems in my house for 10+ years. I’ve been working (very casually) on a Rails site since 2006. I was a Java developer before I was a .Net developer. To me it always feel like we finally are arriving at the party, years after everyone else.</p>
<h2>Better late than never</h2>
<p>Truth be told, there _is_ a bright side to all this. Microsoft is finally starting to provide their developers with tools that other platforms have had for <strong>decades</strong>. Is there a push to be more developer friendly again? I’m not sure. All I know is that finally, they are attempting to move in the right direction. This is very positive. They aren’t there yet.</p>
<p>In fact, currently Microsoft is playing catch up. But it seems like once you awaken the sleeping Beast of Redmond that things start to get done. </p>
<h2></h2>
<h2></h2>
<h2>It’s not all a miss</h2>
<p>I’ve personally used some Microsoft Techs with great success in projects. The ones that come to mind immediately to mind are Prism and WPF. Though both could be improved (we rolled our own Event Aggregator in Prism) and WPF’s INotifyPropertyChanged is frustrating, both are a great step over what we previously had.</p>
<p>In fact, I think that the Framework itself is, overally, extremely impressive. I <strong>love</strong> C# as a language. I enjoy it and enjoy using it. It’s in many ways, far ahead of most other static languages, combined with VS and <a href="http://www.jetbrains.com/resharper/">R#</a> it’s a dream to use too.</p>
</p>
<h2>But…</h2>
<p>What happens if tomorrow the python devs make some huge leap forward that no other platform has? I would put money on the Java/Ruby/etc communities to mimic it almost immediately. Probably even the .Net OSS community will get something out. But will Microsoft have to wait for “the next release cycle”?</p>
<h2>Grateful?</h2>
<p>I’m going to be honest, I’m not happy with being second rate. In fact, I’m downright insulted that second rate is shoved in our faces and we’re expected to act like it’s the greatest thing ever. Yes new framework X <strong>IS</strong> much better than what we’ve got, but it’s still years behind what the other guys have. It’s a classic grass is greener situation, except for that the grass is measurably greener. You want to know why so many leaders are leaving .Net? It’s because Microsoft is behind the times and seemingly refuses to outright acknowledge it until people whine, bitch and complain for <strong>YEARS</strong>. </p>
<h2>Here’s an idea</h2>
<p>Wow me. Let’s go back to 2002. Do something. ANYTHING. Don’t just play catch up. Take it to the next level. Be the innovator. Beat the OSS community to the punch. If nothing else, Microsoft is putting itself in the position to do so. But intentions don’t keep developers on your platform. </p>
<p>I’ve been saying it for the last few years: .Net is in many ways stagnant, old and behind the times. </p>
<p>But I couldn’t be happier if they just came out and <strong>PROVED ME WRONG</strong>.</p>
<p>So prove me wrong. <strong>PLEASE</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.beigesunshine.com/2010/07/04/look-who-finally-showed-up-an-ode-to-microsoft/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>My Top Cygwin Utilities/Tips</title>
		<link>http://blog.beigesunshine.com/2010/04/08/my-top-cygwin-utilitiestips/</link>
		<comments>http://blog.beigesunshine.com/2010/04/08/my-top-cygwin-utilitiestips/#comments</comments>
		<pubDate>Fri, 09 Apr 2010 03:54:38 +0000</pubDate>
		<dc:creator>mendicant</dc:creator>
				<category><![CDATA[bash]]></category>
		<category><![CDATA[cygwin]]></category>

		<guid isPermaLink="false">http://blog.beigesunshine.com/2010/04/08/my-top-cygwin-utilitiestips/</guid>
		<description><![CDATA[&#160; Since it seems like more and more people are taking advantage of mSysGit and Cygwin to take advantage of Git, I thought I’d take a few minutes to talk about the utilities and tips that &#8230; <a class="more-link" href="http://blog.beigesunshine.com/2010/04/08/my-top-cygwin-utilitiestips/">More<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>&#160;</p>
<p>Since it seems like <a href="http://www.lostechies.com/blogs/jimmy_bogard/archive/2010/04/05/integrating-the-git-bash-into-console.aspx">more</a> and <a href="http://www.lostechies.com/blogs/derekgreer/archive/2010/04/08/getting-started-with-cgywin.aspx">more</a> <a href="http://www.lostechies.com/blogs/derickbailey/archive/2010/04/02/git-svn-script-to-do-svn-up-and-git-commit-with-svn-revision-number.aspx">people</a> are taking advantage of <a href="http://code.google.com/p/msysgit/">mSysGit</a> and <a href="http://www.cygwin.com/">Cygwin</a> to take advantage of Git, I thought I’d take a few minutes to talk about the utilities and tips that I use to help make things easier on myself when using my Cygwin environment.</p>
<p>Sometime in the last two years, I went completely over to Cygwin and Bash for my command line environment on Windows. I’ve been an avid <a href="http://www.freebsd.org/">FreeBSD</a>, then <a href="http://www.gentoo.org/">Gentoo</a> and then (after having kids and not a lot of time) <a href="http://www.ubuntu.com/">Ubuntu</a> user since about 2000/2001. In that time there are a few utilities that I’ve come to love that Windows has always left me wanting for.</p>
<p><strong>1. SSH</strong></p>
<p><strong></strong>SSH (secure shell) is an encrypted networking protocol that can be used for a myriad of things. At it’s most basic, you can think of it as a secure, encrypted version of telnet. </p>
<p>You need to have an SSH daemon (think windows service) installed and running in order to connect. You can find a decent tutorial <a href="http://www.petri.co.il/setup-ssh-server-vista.htm">here</a>. As well, you will need a client. I vastly prefer <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/">Putty</a>.</p>
<p>Not only can you login and access your computer remotely (via the command line interface) but there are a ton of options that it opens up for you. One of the most useful, in my opinion, is SSH Tunneling. Imagine being away from home, but needing to remote desktop into your home computer (for something you couldn’t do via command line right?) but you don’t have an RDP port open on your firewall. Well, simply set up a tunnel in putty:</p>
<p><a href="http://blog.beigesunshine.com/wp-content/uploads/2010/04/putty_tunnels.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="putty_tunnels" border="0" alt="putty_tunnels" src="http://blog.beigesunshine.com/wp-content/uploads/2010/04/putty_tunnels_thumb.png" width="368" height="354" /></a> </p>
<p>What this does create a tunnel from port 9000 on the client machine (the one you are using) to port 3389 on the host daddicant (in this case, my main computer). Now, if I want to remote desktop into daddicant, despite the fact that I don’t have the firewall open for RDP, I pull up remote desktop and….</p>
<p><a href="http://blog.beigesunshine.com/wp-content/uploads/2010/04/rdp.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="rdp" border="0" alt="rdp" src="http://blog.beigesunshine.com/wp-content/uploads/2010/04/rdp_thumb.png" width="314" height="196" /></a> </p>
<p>When I connect to localhost:9000, it will work as if connected to daddicant:3389 via the magic of SSH Tunneling. I really appreciate this from the point of view of not needing to manage my external firewall aside from providing an open SSH port.</p>
<p><strong>2. SCP</strong></p>
</p>
<p>Now that you’ve got the SSH daemon up and running, you can easily start copying your files back and forth. Have a zip file you need at home? Just use:</p>
<p>scp file.zip <a href="mailto:mendicant@beigesunshine.com:/home/mendicant/">mendicant@beigesunshine.com:/home/mendicant/</a></p>
<p>After entering your password (or if you’re up to it, a pubkey file, you can google that one or ask me to post about it later) it will connect and copy your file over. You can also use sftp in a similar fashion.</p>
<p><strong>3. Screen</strong></p>
<p>So, now we’re connected remotely, but what happens if A) I want to use multiple consoles or B) what if I’m on my way home but want to keep my session open?</p>
<p>Both are solved via the Screen utility. Start it using “screen”.</p>
<p>Now that you’re at the prompt there are a bunch of keyboard shortcuts you can use, most beginning by pressing Ctrl-A followed by another key. There is a tutorial <a href="http://blogamundo.net/code/screen/">here</a>, but here are my most used commands.</p>
<p>Ctrl-A C : Create a new console. You will now have two consoles running.</p>
<p>Ctrl-A [0-9] : Switch to your opened consoles.</p>
<p>Ctrl-A D : Detach from screen. This is the most useful because now that you’ve got a console running, you may have a long running process going which you don’t want to disturb when you log off. So just detach!</p>
<p>When you are ready to reattach, just log back in and type “screen –x”. This will re-attach screen to the already running one where your process is still happily chugging away and has been, even when you were logged off!</p>
<p><strong>4. tail</strong></p>
<p>You can use tail to show the last 10 lines of a file (or a configurable number using the –n switch). But the most useful part of tail is the –F command. Using “tail –n 100 –F mylog.txt” will show the last 100 lines of mylog.txt, but it won’t exit. Instead, it will continue to listen to the file and display anything that is written to the file to the screen. This means that you can have a log file scrolling on your screen as it gets written without having to have an app open refreshing. Try this:</p>
<p>1. Open screen.</p>
<p>2. touch test.txt</p>
<p>3. echo “line 1” &gt; test.txt</p>
<p>4. tail –f test.txt # YOu should see it output “line 1” to the screen</p>
<p>5. Ctrl-A C to open a new screen</p>
<p>6. echo “line 2” &gt;&gt; test.txt</p>
<p>7. Ctrl-A 0 to go back to the original screen, you will now see “line 2” on the screen as well!</p>
<p>You could do the same with the –f option of tail, but the –F will reconnect if the file is truncated, meaning those of you with rolling logs would be better served using –F.</p>
<p><strong>5. Finding files</strong></p>
<p>Can’t find that .docx file your wife was working on? </p>
<p>find /cygdrive –iname “*.docx” –type f</p>
<p>will find all of the .docx files on your system. the –iname means Case Insensitive Search. The –type f means only find files.</p>
<p>I use this a lot to remove .svn files via:</p>
<p>rm –rf `find ./ –iname “.svn” –type d`</p>
<p><strong>6. History Search</strong></p>
<p>This is probably the biggest reason I use bash over powershell, cmd or other windows command line utils. Open your ~/.inputrc file and add the following lines:</p>
<p>&quot;\e[A&quot;:history-search-backward</p>
<p>&quot;\e[B&quot;:history-search-forward</p>
<p>These lines will add back and forward searching to your up and down arrow keys (you could probably bind them just as easily to Ctrl-J and Ctrl-K for you VIM junkies out there). </p>
<p>Anyway, to test go to your prompt and type “source ~/.inputrc” to make sure the changes have taken and then type “cd” and press your up arrow key. This will get you cycling through all your commands that have started with “cd”.</p>
<p><strong>7. Ctrl-U</strong></p>
<p>This one is a small one, but if you need to clear everything that’s before your cursor, type Ctrl-U and it will clear the prompt. Similar to using “esc” in cmd. Hint: This also works in some other apps, such as in the address bar of <a href="http://www.opera.com">Opera</a>.</p>
<p>&#160;</p>
<p>That’s all that I can think of for right now. I’m sure there’s a lot more but those are some of the biggest ones. Let me know yours and I’ll update with the best ones!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.beigesunshine.com/2010/04/08/my-top-cygwin-utilitiestips/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>My feelings on testing</title>
		<link>http://blog.beigesunshine.com/2009/11/15/my-feelings-on-testing/</link>
		<comments>http://blog.beigesunshine.com/2009/11/15/my-feelings-on-testing/#comments</comments>
		<pubDate>Sun, 15 Nov 2009 17:01:23 +0000</pubDate>
		<dc:creator>mendicant</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://blog.beigesunshine.com/2009/11/15/my-feelings-on-testing/</guid>
		<description><![CDATA[&#160; At one of the recent WAN Parties, there was some discussion on testing. Some items came up that really got me thinking about why the last 2 years has sold me on testing. From memory, &#8230; <a class="more-link" href="http://blog.beigesunshine.com/2009/11/15/my-feelings-on-testing/">More<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>&#160;</p>
<p>At one of the recent WAN Parties, there was some discussion on testing. Some items came up that really got me thinking about why the last 2 years has sold me on testing. From memory, I&#8217;m going to go over my thoughts on some of the comments.</p>
<p><strong>It&#8217;s hard to write tests first. How did you learn?</strong></p>
<p>Well, I didn&#8217;t have a choice. I learned TDD by taking a job as a junior looking for some mentorship. My first two projects were:</p>
<ol>
<li>Get every old app we supported (~ 24) into a build script and onto our CI server</li>
<li>Write a small make work app, but do it completely via TDD.</li>
</ol>
<p>Me and my coworkers had done some pairing and I had written some tests with people, but I always had someone to lean on so it was kind of easy.</p>
<p>However, once I started out on my own, building a system from the ground up and having no idea where I wanted the design to go? That&#8217;s when things got difficult. I remember spending literally an entire afternoon writing a single test. One. I don&#8217;t even know if I finished. I just remember knowing Point A and Point B and having no idea which path to take between the two.</p>
<p>Of course, as my boss would come and check in on me he would say &quot;That&#8217;s good&#8230; but why can&#8217;t it look like this&quot;? He&#8217;d sit down and write a few lines and suddenly I&#8217;d feel like a total moron. </p>
<p>The point of the story is: It takes work. It takes writing tests and realizing their crap and continuing on writing more. Don&#8217;t expect your first foray into true TDD to be easy, and don&#8217;t expect to do it well. However, I can guarantee you that if you stick with it, it _will_ become second nature. </p>
<p>Also, if you can get one, find yourself a mentor to help you. It will help immensely.</p>
<p><strong>How do I know what I should be testing?</strong></p>
<p>I&#8217;m inclined to say &quot;Pretty much everything&quot;. I&#8217;m not a coverage nazi, though we do have some guidelines and goals around it in our shop. However, there&#8217;s just code that it doesn&#8217;t make sense to test. Like a value object made up entirely of autoprops. I&#8217;m pretty sure I know how that thing&#8217;s going to work.</p>
<p><strong>Don&#8217;t tests force your design?</strong></p>
<p>It seems like many people feel that because everyone has their brilliant idea of what the design of the system is going to be, that they will write tests that will suit their perceived design. For me this is true, but the true power of it is that it shows you <em>ahead of time</em> where your design has flaws.</p>
<p>Yes, I usually have a path that I think I&#8217;m going to take when I start writing a test. However, often times before I&#8217;m done a set of tests for a feature, I end up changing my mind. The thing about writing the tests first is that it shows you where your design has flaws and where it&#8217;s going to cause you pain. If it&#8217;s painful for me to write a test then it&#8217;s probably going to be a pain in the ass to write and maintain. Pain in writing tests usually signals that you&#8217;re trying to do too much at once, often you&#8217;re trying to break SRP.</p>
<p>In the end, you&#8217;re not only testing your code. You&#8217;re also testing your design.</p>
<p><strong>I hear all this propaganda over and over, but how do you know?</strong></p>
<p>For me, I have two projects that I currently work on. One with tests and one without. The one without tests was started before I learned about TDD (though I&#8217;m currently trying to begin adding tests, it&#8217;s very difficult to retrofit). As well, the one without TDD uses ruby. I heard someone say at the WAN Party the other night that Static Languages and their compilers are just a set of implicit tests. After using a dynamic language I can totally agree.</p>
<p>Anyway, I always find myself trying to find excuses to do something else than my non-TDD project. Why? Because I&#8217;m scared to do anything with it. Since I have no tests, I have spent (literally) countless hours fixing bugs only to have them come back into play the next time I fix another bug. I have no way of telling whether what I&#8217;m fixing is breaking something else that depends on it. Personally, I think that had I just bitten the bullet a year ago and started putting the tests ever just around the bugs I was currently fixing that I would be well ahead of where I am today on that project.</p>
<p><strong>I&#8217;m starting to notice a trend here&#8230;.</strong></p>
<p>I agree. The funny part I&#8217;ve always thought about testing is that as someone learning it, you don&#8217;t really see the benefits. In fact, in most cases, the benefits don&#8217;t ever fully show themselves until you&#8217;ve been working on a project for a long time, or even better, need to come back to it.</p>
<p>Maybe you&#8217;re at the opposite end of the spectrum. You&#8217;re not skeptical of the claims, you&#8217;re curious. Maybe you&#8217;re curious like I was 2 years ago because making any changes to an old project is like pulling teeth. Or maybe your current project has hit a standstill because bugs keep creeping in and every change introduces two new ones.</p>
<p><strong>My Story (in a nutshell)</strong></p>
<p>I graduated from University in 2004. I had been working for an Oil and Gas company doing some development part time during the 3 years prior. After graduating I took my first job as a software developer in a small (2 developers, about 6 hardware/network/whatever guys, plus admin staff) company. I was taught to develop in ways I always somewhat questioned. After a while I started to read up on things. The only article that still stands out in my mind that I read was Martin Fowler&#8217;s article on <a href="http://martinfowler.com/articles/injection.html">Dependency Injection</a>. I know I read some on the <a href="http://en.wikipedia.org/wiki/Open/closed_principle">Open Closed Principle</a>. And none of it made sense to me. I had too many stumbling blocks in my way:</p>
<ul>
<li>I didn&#8217;t learn anything in my Computer Science Degree except algorithms and some cool hardware stuff</li>
<li>My current &#8216;mentor&#8217; didn&#8217;t understand these things either</li>
<li>I knew I had problems, but I couldn&#8217;t even define them <em>even though I was reading about the solutions to my problems</em></li>
</ul>
<p>Then I got lucky. I went looking for jobs because I knew there was a better way and I told everyone I interviewed with that. Then I was finally told at one interview that they knew exactly what I was feeling because they had just gone through that pain. They also told me that they had the answers I was looking for.</p>
<p>I took that job and it was the best thing I ever did.</p>
<p>It gave me the things I needed:</p>
<ul>
<li>People who understood where I was coming from</li>
<li>A requirement to learn every day</li>
<li>Mentorship</li>
</ul>
<p>I truly believe that the easiest and best way to learn is to have someone with you guiding you in the right direction while also forcing you to go out on your own. I can understand people skepticism, I once had it. But then I got sick of fixing the same thing over and over. I realize that this is getting long so I&#8217;ll just end with another personal note: <strong>If I hadn&#8217;t taken that job and learned what I have over the last two years, I would no longer be in software.</strong></p>
<p>The short story is, Testing saved my career.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.beigesunshine.com/2009/11/15/my-feelings-on-testing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rubicant&#8217;s first real build</title>
		<link>http://blog.beigesunshine.com/2009/09/13/rubicants-first-real-build/</link>
		<comments>http://blog.beigesunshine.com/2009/09/13/rubicants-first-real-build/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 03:34:46 +0000</pubDate>
		<dc:creator>mendicant</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Build]]></category>
		<category><![CDATA[Rake]]></category>
		<category><![CDATA[rubicant]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://blog.beigesunshine.com/?p=98</guid>
		<description><![CDATA[So I’ve been using rubicant for a while personally, but never on anything beyond my own projects and not for anything big. After reading Ayende&#8217;s post about building Rhino Mocks with PSake, I wondered if rubicant &#8230; <a class="more-link" href="http://blog.beigesunshine.com/2009/09/13/rubicants-first-real-build/">More<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>So I’ve been using <a href="http://github.com/mendicantx/rubicant">rubicant</a> for a while personally, but never on anything beyond my own projects and not for anything big. After reading <a href="http://ayende.com/Blog/" target="_blank">Ayende&#8217;s</a> post about <a href="http://ayende.com/Blog/archive/2009/08/30/on-psake.aspx" target="_blank">building Rhino Mocks with PSake</a>, I wondered if rubicant could so something similar, so I decided to port his build script.</p>
<p>Of course, I didn’t have a generate assembly info method, so I basically took Oren’s and ported it as well (sorry Oren, I’ll take it out if you want). At the same time, I took the opportunity to remove the dependency on configatron from rubicant as well. It just seemed like overkill to require configatron when it really wasn’t buying me much. </p>
<p>In the end, I came up with this, which on the whole I don’t think looks too bad. I personally like it better, but I’ve been on a bit of a vendetta against PowerShell scripts since I wrote my first one some time ago. I don’t know why, but the friction it gave me over writing ruby scripts just always rubbed me the wrong way.</p>
<p>&#160;</p>
<pre style="width: 805px; height: 1995px">require 'fileutils'
require 'rake'
require 'rubicant'
include Rubicant

base_dir  = File.expand_path(&quot;.&quot;)
lib_dir = &quot;#{base_dir}\\SharedLibs&quot;
build_dir = &quot;#{base_dir}\\build&quot;
buildartifacts_dir = &quot;#{build_dir}\\&quot;
sln_file = &quot;#{base_dir}\\Rhino.Mocks-vs2008.sln&quot;
version = &quot;3.6.0.0&quot;
human_readable_version = &quot;3.6&quot;
tools_dir = &quot;#{base_dir}\\Tools&quot;
release_dir = &quot;#{base_dir}\\Release&quot;
upload_category = &quot;Rhino-Mocks&quot;
upload_script = &quot;C:\\Builds\\Upload\\PublishBuild.build&quot;
mbunit_dir = &quot;#{tools_dir}\\MbUnit&quot;

task :default =&gt; :release do
end

task :clean do
  rm_rf buildartifacts_dir
  rm_rf release_dir
end

task :init =&gt; :clean do

	generate_assembly_info({
		:path =&gt; &quot;#{base_dir}\\Rhino.Mocks\\Properties&quot;,
		:title =&gt; &quot;Rhino Mocks #{version}&quot;,
		:description =&gt; &quot;Mocking Framework for .NET&quot;,
		:company =&gt; &quot;Hibernating Rhinos&quot;,
		:product =&gt; &quot;Rhino Mocks #{version}&quot;,
		:version =&gt; version,
		:cls_compliant =&gt; false,
		:copyright =&gt; &quot;Hibernating Rhinos &amp; Ayende Rahien 2004 - 2009&quot;})

	generate_assembly_info({
		:path =&gt; &quot;#{base_dir}\\Rhino.Mocks.Tests\\Properties&quot;,
		:title =&gt; &quot;Rhino Mocks Tests #{version}&quot;,
		:description =&gt; &quot;Mocking Framework for .NET&quot;,
		:company =&gt; &quot;Hibernating Rhinos&quot;,
		:product =&gt; &quot;Rhino Mocks Test #{version}&quot;,
		:version =&gt; version,
		:cls_compliant =&gt; false,
		:copyright =&gt; &quot;Hibernating Rhinos &amp; Ayende Rahien 2004 - 2009&quot;})

	generate_assembly_info({
		:path =&gt; &quot;#{base_dir}\\Rhino.Mocks.Tests.Model\\Properties&quot;,
		:title =&gt; &quot;Rhino Mocks Tests #{version}&quot;,
		:description =&gt; &quot;Mocking Framework for .NET&quot;,
		:company =&gt; &quot;Hibernating Rhinos&quot;,
		:product =&gt; &quot;Rhino Mocks Test Model #{version}&quot;,
		:version =&gt; version,
		:cls_compliant =&gt; false,
		:copyright =&gt; &quot;Hibernating Rhinos &amp; Ayende Rahien 2004 - 2009&quot;})

	mkdir release_dir
	mkdir buildartifacts_dir

	cp_r &quot;#{mbunit_dir}\\.&quot;, build_dir
end

task :compile =&gt; :init do
	MsBuildRunner.new(:properties =&gt; { :OutDir =&gt; buildartifacts_dir },
					  :project_file =&gt; sln_file).run
end

task :test =&gt; :compile do
	begin
		MbUnitRunner.new(:mbunit_dir =&gt; build_dir,
					 :test_files =&gt; [&quot;Rhino.Mocks.Tests.dll&quot;],
					 :report_type =&gt; 'Html').run
	rescue
		fail 'Error: Failed to execute tests'
	end
end

task :merge do
	begin
		rm_f &quot;#{build_dir}\\Rhino.Mocks.Partial.dll&quot;
		mv &quot;#{build_dir}\\Rhino.Mocks.dll&quot;, &quot;#{build_dir}\\Rhino.Mocks.Partial.dll&quot;

		sh &quot;#{tools_dir}\\IlMerge.exe &quot; +
			&quot;#{build_dir}\\Rhino.Mocks.Partial.dll &quot; +
			&quot;#{build_dir}\\Castle.DynamicProxy2.dll &quot; +
			&quot;#{build_dir}\\Castle.Core.dll &quot; +
			&quot;/out:#{build_dir}\\Rhino.Mocks.dll &quot;+
			&quot;/t:library &quot;+
			&quot;/keyfile:#{base_dir}\\ayende-open-source.snk &quot; +
			&quot;/internalize:#{base_dir}\\ilmerge.exclude&quot;

	rescue
        fail 'Error: Failed to merge assemblies!'
	end

	puts &quot;done merge&quot;
end

task :release =&gt; [:test, :merge] do
	begin
		puts &quot;Zipping files&quot;
		sh &quot;#{tools_dir}\\zip.exe -9 -A -j &quot; +
			&quot;#{release_dir}\\Rhino.Mocks-#{human_readable_version}-Build-#{ENV['ccnetnumericlabel']}.zip &quot; +
			&quot;#{build_dir}\\Rhino.Mocks.dll &quot; +
			&quot;#{build_dir}\\Rhino.Mocks.xml &quot; +
			&quot;license.txt &quot; +
			&quot;acknowledgements.txt&quot;

	rescue
        fail 'Error: Failed to execute ZIP command'
	end
end

task :upload =&gt; :release do
	if (File.exists?(upload_script) )
		begin
			log = sh 'git log -n 1 --oneline'
			MsBuildRunner.new({:properties =&gt; { :Category =&gt; upload_category,
											   :Comment =&gt; log,
											   :File =&gt; &quot;#{release_dir}\\Rhino.Mocks-#{human_readable_version}-Build-#{ENV['ccnetnumericlabel']}.zip&quot; },
							   :project_file =&gt; upload_script }).run

		rescue
			fail &quot;Error: Failed to publish build&quot;
		end
	else
		puts &quot;could not find upload script #{upload_script}, skipping upload&quot;
	end
end</pre>
<p>If you want to give this script a try (I’ve tried everything but the upload piece, which for obvious reasons I couldn’t test) just follow these steps:</p>
<ol>
<li>Get a copy of the <a href="http://github.com/ayende/rhino-mocks" target="_blank">rhino mocks source</a>.</li>
<li>Make sure you’ve got <a href="http://rubyforge.org/projects/rubyinstaller/" target="_blank">ruby installed</a>.</li>
<li>Make sure gem is up to date: “gem update –system”</li>
<li>Add github to your gem sources: “gem sources -a <a href="http://gems.github.com">http://gems.github.com</a>”</li>
<li>Install rubicant: “gem install mendicantx-rubicant”</li>
<li>Copy the above script into a file named rakefile.rb in the rhino mocks directory.</li>
<li>Run it: “rake release”</li>
</ol>
<p>God willing, this will work. I’ve tried it on a couple of fresh systems, but have no good way of knowing if it works beyond my machines. If you do on the offhand decide to try it, please let me know below!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.beigesunshine.com/2009/09/13/rubicants-first-real-build/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>You really shouldn&#8217;t test that</title>
		<link>http://blog.beigesunshine.com/2009/05/22/you-really-shouldnt-test-that/</link>
		<comments>http://blog.beigesunshine.com/2009/05/22/you-really-shouldnt-test-that/#comments</comments>
		<pubDate>Fri, 22 May 2009 19:51:07 +0000</pubDate>
		<dc:creator>mendicant</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://blog.beigesunshine.com/2009/05/22/you-really-shouldnt-test-that/</guid>
		<description><![CDATA[&#160; You know, sometimes, you really shouldn’t test your code. What? Yes. You heard me. You shouldn’t test your code. Well, let me explain that better. I recently took a course where I was paired with &#8230; <a class="more-link" href="http://blog.beigesunshine.com/2009/05/22/you-really-shouldnt-test-that/">More<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>&#160;</p>
<p>You know, sometimes, you really shouldn’t test your code.</p>
<p>What?</p>
<p>Yes. You heard me. You shouldn’t test your code.</p>
<p>Well, let me explain that better. I recently took a course where I was paired with someone where neither one of us knew what it was that we _really_ wanted to do. We started to flush out an API for wiring up a hand rolled IOC automatically, and every time we did so, we hit a brick wall. The reason is that we kept trying to ‘test first’.</p>
<p>Don’t get me wrong, I am a complete advocate of test first development. HOWEVER, if you don’t know what the hell you’re doing, you can’t really test first. Being able to test first implies that you can think ahead of yourself and write something that does exactly what you know you need.</p>
<p>In our case, we kept wasting time trying to write tests that just didn’t work with how we NEEDED to do things. How did we solve this dilemma? We sat down and spiked out some code. Just hammered it out and got something working. Now, let me tell you, we wrote some pretty damn horrible and untestable (except via black box testing) code. However, what we did gain was an insight into the process and steps we needed to take to accomplish our task.</p>
<p>However! We didn’t keep that working code we spiked out. Once we had a spiked set of code and a <strong>solid</strong> idea of what it was we needed, we were able to test and rewrite the code we’d spiked in a much better, tested and well designed manner that would have taken forever if we’d just kept banging our heads against the wall.</p>
<p>To reiterate: </p>
<p>1) TDD with no idea what we were trying to accomplish = 3 hours wasted.</p>
<p>2) Spiking out some code, getting our heads around the steps needed, wiping it clean and restarting the TDD approach with an idea of what we needed to do = less than 1 hour to completion.</p>
<p>Remember, testing first doesn’t mean you should beat your head against a wall just to write a test before writing some code. Sometimes, in order to write a test, you need to write some code first. I guess some people will write tests afterwards, I personally prefer to rewrite, as I find I spend just as much time fixing the code when retrofitting tests as I do just rewriting it out.</p>
<p>In the end, you just need to remember that even if you’re doing TDD, you shouldn’t be afraid to spike out code. It’s the best way to learn and give yourself some direction.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.beigesunshine.com/2009/05/22/you-really-shouldnt-test-that/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>rubicant &#8211; MsBuild Task added</title>
		<link>http://blog.beigesunshine.com/2009/01/30/rubicant-msbuild-task-added/</link>
		<comments>http://blog.beigesunshine.com/2009/01/30/rubicant-msbuild-task-added/#comments</comments>
		<pubDate>Sat, 31 Jan 2009 06:38:14 +0000</pubDate>
		<dc:creator>mendicant</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Build]]></category>
		<category><![CDATA[Rake]]></category>
		<category><![CDATA[rubicant]]></category>

		<guid isPermaLink="false">http://blog.beigesunshine.com/2009/01/30/rubicant-msbuild-task-added/</guid>
		<description><![CDATA[I just added an MsBuild task for rubicant tonight. I&#8217;m not very familiar with the command line options for MsBuild so some of these could probably be improved a bit, but until I know more I &#8230; <a class="more-link" href="http://blog.beigesunshine.com/2009/01/30/rubicant-msbuild-task-added/">More<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I just added an <a href="http://msdn.microsoft.com/en-us/library/0k6kkbsd.aspx">MsBuild</a> task for <a href="http://github.com/mendicantx/rubicant">rubicant</a> tonight. I&#8217;m not very familiar with the command line options for MsBuild so some of these could probably be improved a bit, but until I know more I will leave them as they are.</p>
<p>The MsBuild Task is used to create tasks which will use MsBuild. This should help with people who need to build WPF applications (since MsBuild is the only way right now), or (fingers crossed) migrate from MsBuild. </p>
<p>The MsBuild Task is used as follows: </p>
<div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &#39;Courier New&#39;, courier, monospace; height: 260px; background-color: #f4f4f4">
<div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   1:</span> MsBuildTask.<span style="color: #0000ff">new</span>(:task_name =&gt; :dependencies) <span style="color: #0000ff">do</span> |msb|</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   2:</span>   msb.no_autoresponse</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   3:</span>   msb.target</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   4:</span>   msb.logger</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   5:</span>   msb.distributed_logger</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   6:</span>   msb.console_logger_parameters</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   7:</span>   msb.validate</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   8:</span>   msb.verbosity</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   9:</span>   msb.no_console_logger</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">  10:</span>   msb.max_cpu_count</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">  11:</span>   msb.ignore_project_extensions</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">  12:</span>   msb.file_logger</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">  13:</span>   msb.distributed_file_logger</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">  14:</span>   msb.node_reuse</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">  15:</span>   msb.properties</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">  16:</span>   msb.file_logger_parameters</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">  17:</span>   msb.project_file</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">  18:</span> end</pre>
</p></div>
</div>
<p>Each of setters matches a command line option for MsBuild. For more information on what each one does, please view the documentation at <a href="http://msdn.microsoft.com/en-us/library/ms164311.aspx">http://msdn.microsoft.com/en-us/library/ms164311.aspx</a>. </p>
<p>Values that can only be set (for example, /noautoresponse) can be set to true (set) or nil (unset). </p>
<p>Values, such as /property that take a list of option settings, must be passed a hash where the keys are the options and the values are the option values. For example, to set the output directory and Warning Level for a csproj compile, you could use: </p>
<div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &#39;Courier New&#39;, courier, monospace; background-color: #f4f4f4">
<div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   1:</span> MsBuildTask.<span style="color: #0000ff">new</span>(:compile) <span style="color: #0000ff">do</span> |msb|</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   2:</span>   msb.properties = { :OutputDir =&gt; <span style="color: #006080">&quot;.\\Output&quot;</span>, :WarningLevel =&gt; 2 }</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   3:</span>   msb.project_file = <span style="color: #006080">&quot;.\\Project1\\project.csproj&quot;</span></pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   4:</span> end</pre>
</p></div>
</div>
<p>As of yet, I haven&#8217;t added an MsBuild helper to help create this function. I will probably get this done fairly shortly.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.beigesunshine.com/2009/01/30/rubicant-msbuild-task-added/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Changing mbunit helper to a task</title>
		<link>http://blog.beigesunshine.com/2009/01/25/changing-mbunit-helper-to-a-task/</link>
		<comments>http://blog.beigesunshine.com/2009/01/25/changing-mbunit-helper-to-a-task/#comments</comments>
		<pubDate>Sun, 25 Jan 2009 15:48:58 +0000</pubDate>
		<dc:creator>mendicant</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.beigesunshine.com/2009/01/25/changing-mbunit-helper-to-a-task/</guid>
		<description><![CDATA[The mbunit function in rubicant has been changed from just a function to a complete task. MbUnitTask Behind the scenes, what MBUnitTask does is copies over the minimal necessary support files from an MBUnit directory and &#8230; <a class="more-link" href="http://blog.beigesunshine.com/2009/01/25/changing-mbunit-helper-to-a-task/">More<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The mbunit function in rubicant has been changed from just a function to a complete task.</p>
<h2></h2>
<h2>MbUnitTask</h2>
<p>Behind the scenes, what MBUnitTask does is copies over the minimal necessary support files from an MBUnit directory and then runs the tests. It uses the MBUnit Console Runner and is only tested with MBUnit 2.4. It is used as follows:</p>
<div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &#39;Courier New&#39;, courier, monospace; background-color: #f4f4f4">
<div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   1:</span> MbUnitTask.<span style="color: #0000ff">new</span>(:task_name =&gt; :dependencies) <span style="color: #0000ff">do</span> |mbunit|</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   2:</span>   mbunit.mbunit_dir = <span style="color: #006080">&quot;/path/to/mbunit&quot;</span> </pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   3:</span>   mbunit.test_dir = <span style="color: #006080">&quot;/path/to/testing/dir&quot;</span> </pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   4:</span>   mbunit.test_files = [<span style="color: #006080">&quot;tests.dll&quot;</span>]</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   5:</span>   mbunit.assembly_path =&gt; FileList[<span style="color: #006080">&quot;/assemblies/to/include/*.dll&quot;</span>],</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   6:</span>   mbunit.report_folder =&gt; <span style="color: #006080">&quot;sets /rf:&quot;</span>,</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   7:</span>   mbunit.report_name_format =&gt; <span style="color: #006080">&quot;sets /rnf:&quot;</span>,</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   8:</span>   mbunit.report_type =&gt; <span style="color: #006080">&quot;sets /rt:&quot;</span>,</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   9:</span>   mbunit.show_reports =&gt; <span style="color: #006080">&quot;sets /sr:&quot;</span>,</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">  10:</span>   mbunit.transform =&gt; <span style="color: #006080">&quot;sets /tr:&quot;</span>,</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">  11:</span>   mbunit.filter_category =&gt; <span style="color: #006080">&quot;sets /fc:&quot;</span>,</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">  12:</span>   mbunit.exclude_category =&gt; <span style="color: #006080">&quot;sets /ec:&quot;</span>,</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">  13:</span>   mbunit.filter_author =&gt; <span style="color: #006080">&quot;sets /fa:&quot;</span>,</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">  14:</span>   mbunit.filter_type =&gt; <span style="color: #006080">&quot;sets /ft:&quot;</span>,</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">  15:</span>   mbunit.filter_namespace =&gt; <span style="color: #006080">&quot;sets /fn:&quot;</span>,</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">  16:</span>   mbunit.verbose =&gt; <span style="color: #006080">&quot;sets /v{optionvalue}&quot;</span>,</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">  17:</span>   mbunit.shadow_copy =&gt; <span style="color: #006080">&quot;sets /sc:&quot;</span> }</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">  18:</span> end</pre>
</p></div>
</div>
<p>&#160;</p>
<h2>Mbunit helper</h2>
<p></p>
<div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &#39;Courier New&#39;, courier, monospace; background-color: #f4f4f4">
<div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   1:</span> mbunit(name, dependencies, mbunit_dir, test_dir, test_files, opts={}) </pre>
</p></div>
</div>
<p>Usage is:<br />
  </p>
<div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &#39;Courier New&#39;, courier, monospace; background-color: #f4f4f4">
<div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   1:</span> mbunit(:run_tests, [:compile_tests], <span style="color: #006080">&quot;/path/to/mbunit/dlls&quot;</span>,</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   2:</span>         FileList[<span style="color: #006080">&quot;/test/dlls/test.dll&quot;</span>],</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   3:</span>         {:working_dir =&gt; <span style="color: #006080">&quot;/dir/to/run/tests/in&quot;</span>,</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   4:</span>          :assembly_path =&gt; FileList[<span style="color: #006080">&quot;/assemblies/to/include/*.dll&quot;</span>],</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   5:</span>          :report_folder =&gt; <span style="color: #006080">&quot;sets /rf:&quot;</span>,</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   6:</span>          :report_name_format =&gt; <span style="color: #006080">&quot;sets /rnf:&quot;</span>,</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   7:</span>          :report_type =&gt; <span style="color: #006080">&quot;sets /rt:&quot;</span>,</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   8:</span>          :show_reports =&gt; <span style="color: #006080">&quot;sets /sr:&quot;</span>,</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   9:</span>          :transform =&gt; <span style="color: #006080">&quot;sets /tr:&quot;</span>,</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">  10:</span>          :filter_category =&gt; <span style="color: #006080">&quot;sets /fc:&quot;</span>,</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">  11:</span>          :exclude_category =&gt; <span style="color: #006080">&quot;sets /ec:&quot;</span>,</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">  12:</span>          :filter_author =&gt; <span style="color: #006080">&quot;sets /fa:&quot;</span>,</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">  13:</span>          :filter_type =&gt; <span style="color: #006080">&quot;sets /ft:&quot;</span>,</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">  14:</span>          :filter_namespace =&gt; <span style="color: #006080">&quot;sets /fn:&quot;</span>,</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">  15:</span>          :verbose =&gt; <span style="color: #006080">&quot;sets /v{optionvalue}&quot;</span>,</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">  16:</span>          :shadow_copy =&gt; <span style="color: #006080">&quot;sets /sc:&quot;</span> } </pre>
</p></div>
</div>
<p>Runs the tests in test_files in the test_dir with the dlls from mbunit_dir using the options in opts. </p>
<p>For more information on the command line arguments for the mbunit console runner, please visit: <a href="http://docs.mbunit.com/help/html/gettingstarted/MbUnitConsoleRunner.htm">http://docs.mbunit.com/help/html/gettingstarted/MbUnitConsoleRunner.htm</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.beigesunshine.com/2009/01/25/changing-mbunit-helper-to-a-task/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>rubicant update &#8211; Easy installation via gem</title>
		<link>http://blog.beigesunshine.com/2009/01/25/rubicant-update-easy-installation-via-gem/</link>
		<comments>http://blog.beigesunshine.com/2009/01/25/rubicant-update-easy-installation-via-gem/#comments</comments>
		<pubDate>Sun, 25 Jan 2009 15:43:53 +0000</pubDate>
		<dc:creator>mendicant</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Build]]></category>
		<category><![CDATA[Rake]]></category>
		<category><![CDATA[rubicant]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://blog.beigesunshine.com/2009/01/25/rubicant-update-easy-installation-via-gem/</guid>
		<description><![CDATA[Since I already had rubicant building as a gem, it made sense to make it available as a gem. I have moved the project to github and it is now located at: http://github.com/mendicantx/rubicant/ In addition, you &#8230; <a class="more-link" href="http://blog.beigesunshine.com/2009/01/25/rubicant-update-easy-installation-via-gem/">More<span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Since I already had rubicant building as a gem, it made sense to make it available as a gem. I have moved the project to <a href="http://github.com">github</a> and it is now located at: <a title="http://github.com/mendicantx/rubicant/" href="http://github.com/mendicantx/rubicant/">http://github.com/mendicantx/rubicant/</a></p>
<p>In addition, you can also install rubicant via gem:</p>
<div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &#39;Courier New&#39;, courier, monospace; background-color: #f4f4f4">
<div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   1:</span> gem sources -a http:<span style="color: #008000">//gems.github.com</span></pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   2:</span> sudo gem install mendicantx-rubicant</pre>
</p></div>
</div>
<p>You should only ever have to run the gem sources command once. This adds github to your sources of remote gems. From what I understand, there&#8217;s a ton of great projects there.</p>
<p>Now you don&#8217;t have an excuse to try it out!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.beigesunshine.com/2009/01/25/rubicant-update-easy-installation-via-gem/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

