<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>public abstract string[] Blog()</title>
	<atom:link href="http://extractmethod.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://extractmethod.wordpress.com</link>
	<description>Wandering the Internet is search of better code and coding techniques</description>
	<lastBuildDate>Sat, 21 Jun 2008 14:01:14 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='extractmethod.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/aa59efbf3eef34a86e290a03a0aeb4a1?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>public abstract string[] Blog()</title>
		<link>http://extractmethod.wordpress.com</link>
	</image>
			<item>
		<title>This Blog has Moved</title>
		<link>http://extractmethod.wordpress.com/2008/06/21/moving/</link>
		<comments>http://extractmethod.wordpress.com/2008/06/21/moving/#comments</comments>
		<pubDate>Sat, 21 Jun 2008 14:00:34 +0000</pubDate>
		<dc:creator>casademora</dc:creator>
				<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://extractmethod.wordpress.com/?p=22</guid>
		<description><![CDATA[I&#8217;m moving this blog to blog.codedemora.com. I&#8217;ll be keeping this on up for historical reasons.  Pleas update your bookmarks and RSS feeds
Thanks
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=extractmethod.wordpress.com&blog=2356552&post=22&subd=extractmethod&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I&#8217;m moving this blog to <a href="http://blog.codedemora.com">blog.codedemora.com</a>. I&#8217;ll be keeping this on up for historical reasons.  Pleas update your bookmarks and RSS feeds</p>
<p>Thanks</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/extractmethod.wordpress.com/22/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/extractmethod.wordpress.com/22/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/extractmethod.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/extractmethod.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/extractmethod.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/extractmethod.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/extractmethod.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/extractmethod.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/extractmethod.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/extractmethod.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/extractmethod.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/extractmethod.wordpress.com/22/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=extractmethod.wordpress.com&blog=2356552&post=22&subd=extractmethod&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://extractmethod.wordpress.com/2008/06/21/moving/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4c5bc935da066bf73113e426f396ba60?s=96&#38;d=identicon" medium="image">
			<media:title type="html">casademora</media:title>
		</media:content>
	</item>
		<item>
		<title>I still say Regions are not useful&#8230;but&#8230;</title>
		<link>http://extractmethod.wordpress.com/2008/06/02/i-still-say-regions-are-not-usefulbut/</link>
		<comments>http://extractmethod.wordpress.com/2008/06/02/i-still-say-regions-are-not-usefulbut/#comments</comments>
		<pubDate>Mon, 02 Jun 2008 07:35:01 +0000</pubDate>
		<dc:creator>casademora</dc:creator>
				<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[regions]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://extractmethod.wordpress.com/2008/06/02/i-still-say-regions-are-not-usefulbut/</guid>
		<description><![CDATA[There was quite a bit of uproar regarding my rant about C# regions. At the time, I was looking through a lot of really bad code, and I was pretty peeved at how all the pieces of complex code were hidden away by Visual Studio.&#160; However, some of the comments seemed to imply that there [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=extractmethod.wordpress.com&blog=2356552&post=21&subd=extractmethod&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>There was quite a bit of uproar regarding my rant about C# regions. At the time, I was looking through a lot of really bad code, and I was pretty peeved at how all the pieces of complex code were hidden away by Visual Studio.&nbsp; However, some of the comments seemed to imply that there is no such thing as &#8220;perfect&#8221; or &#8220;good&#8221; code when you refer to code written by someone other than yourself. And, to be honest, that is true: I like to think the code I write is better than most other developers. However, I want to qualify what better is:</p>
<p>Better code is:</p>
<ul>
<li>Code that is tested</li>
<li>Code that is maintainable</li>
<li>Code that is understandable by someone other than me</li>
<li>Code that is changeable by someone other than me</li>
</ul>
<p>Even with those guidelines, there is still some room to define more terms, but we have to stop at some point. Notice how none of these points really points to Lines of Code, the degree of algorithm obfuscation or how low the average cyclomatic complexity is for your codebase. These bullet points take a professional approach to the software development profession. That is, I and many others are professionals, and we should write our code as professionals. I hold myself to the same high standards as I hold others. Granted, I don&#8217;t meet those standards all the time either. I try not to beat myself up about it, because I would never win.</p>
<p>However, I wanted to be less emotional about why regions are really not that great. Just flat out, the main reason I see is that when you encapsulate code in region blocks, you miss an opportunity for one of many refactorings. In other words, you are knowingly violating principles of good software development by hiding the &#8220;bad&#8221; code under the rug.</p>
<p>Regions are simply comments preprocessor-style comments. As with normal comments, they are removed before the code is compiled, and are only there to help our non-digital brains cope with the mess we created in the first place.</p>
<p>I try my best to follow the TDD (and by extension, BDD) methodology, and so far, I have found no need for regions. Ever. I find that they clutter the code. I also find that TDD manages the mess I create much better than regions because they are like little pieces of thoughts that stick around to keep verifying my intentions several features back. TDD is by no means a do all methodology, but it has saved my butt several times, and does tend to make you write code that is neat, well tested, well organized and region free.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/extractmethod.wordpress.com/21/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/extractmethod.wordpress.com/21/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/extractmethod.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/extractmethod.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/extractmethod.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/extractmethod.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/extractmethod.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/extractmethod.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/extractmethod.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/extractmethod.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/extractmethod.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/extractmethod.wordpress.com/21/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=extractmethod.wordpress.com&blog=2356552&post=21&subd=extractmethod&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://extractmethod.wordpress.com/2008/06/02/i-still-say-regions-are-not-usefulbut/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4c5bc935da066bf73113e426f396ba60?s=96&#38;d=identicon" medium="image">
			<media:title type="html">casademora</media:title>
		</media:content>
	</item>
		<item>
		<title>Desert Code Camp, Tomorrow</title>
		<link>http://extractmethod.wordpress.com/2008/05/31/desert-code-camp-tomorrow/</link>
		<comments>http://extractmethod.wordpress.com/2008/05/31/desert-code-camp-tomorrow/#comments</comments>
		<pubDate>Sat, 31 May 2008 07:18:16 +0000</pubDate>
		<dc:creator>casademora</dc:creator>
				<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[codecamp]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://extractmethod.wordpress.com/2008/05/31/desert-code-camp-tomorrow/</guid>
		<description><![CDATA[This is so last minute notice, but tomorrow is the Desert Code Camp in Tempe, AZ. I&#8217;ve attended the last few code camps, and they&#8217;ve been loads of help to me and my career in software development. This year, I decided that I should try to give something back, so I&#8217;m presenting on a couple [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=extractmethod.wordpress.com&blog=2356552&post=20&subd=extractmethod&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>This is so last minute notice, but tomorrow is the <a href="http://www.desertcodecamp.com">Desert Code Camp</a> in Tempe, AZ. I&#8217;ve attended the last few code camps, and they&#8217;ve been loads of help to me and my career in software development. This year, I decided that I should try to give something back, so I&#8217;m presenting on a couple of topics: Test Driven Development, and Behavior Driven Development. I&#8217;ve been practicing and evangelizing TDD for a couple of years now, and this is yet another outlet to try to convince others that this is the path toward code enlightenment.</p>
<p><strong>Spoiler Alert:</strong> BDD on the other hand is somewhat new to me. However, as I&#8217;ve read many of the descriptions, and BDD testing frameworks, its really all about the way you look at tests, and the eventual evolution of what your firstly written unit tests eventually become: behavior specifications. I will be talking about the little I&#8217;ve learned about rspec, nspec, and nbehave tomorrow.</p>
<p>See you all tomorrow!</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/extractmethod.wordpress.com/20/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/extractmethod.wordpress.com/20/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/extractmethod.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/extractmethod.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/extractmethod.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/extractmethod.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/extractmethod.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/extractmethod.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/extractmethod.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/extractmethod.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/extractmethod.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/extractmethod.wordpress.com/20/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=extractmethod.wordpress.com&blog=2356552&post=20&subd=extractmethod&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://extractmethod.wordpress.com/2008/05/31/desert-code-camp-tomorrow/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4c5bc935da066bf73113e426f396ba60?s=96&#38;d=identicon" medium="image">
			<media:title type="html">casademora</media:title>
		</media:content>
	</item>
		<item>
		<title>Just say No! to C# Regions</title>
		<link>http://extractmethod.wordpress.com/2008/02/29/just-say-no-to-c-regions/</link>
		<comments>http://extractmethod.wordpress.com/2008/02/29/just-say-no-to-c-regions/#comments</comments>
		<pubDate>Fri, 29 Feb 2008 22:17:53 +0000</pubDate>
		<dc:creator>casademora</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://extractmethod.wordpress.com/2008/02/29/just-say-no-to-c-regions/</guid>
		<description><![CDATA[I&#8217;ve seen lots of C# code over the last few days, and 100% of it contains the #region construct.  So far, I have see it used in only one way: to hide big code blocks. Some of you might be saying &#8220;Duh! That&#8217;s what they&#8217;re for!&#8221;.
Well, let&#8217;s think about that for a minute:
You need [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=extractmethod.wordpress.com&blog=2356552&post=19&subd=extractmethod&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I&#8217;ve seen lots of C# code over the last few days, and 100% of it contains the <b><i>#region</i></b> construct.  So far, I have see it used in only one way: to hide big code blocks. Some of you might be saying &#8220;Duh! That&#8217;s what they&#8217;re for!&#8221;.</p>
<p>Well, let&#8217;s think about that for a minute:</p>
<blockquote><p>You need a language construct so that your IDE can help you hide your big messy code block from you (because it&#8217;s just so hideous, you don&#8217;t even want to look at it anymore)?</p></blockquote>
<p>If your code is so bad, that you just want to <a href="http://feeds.feedburner.com/~r/AyendeRahien/~3/133405738/Things-that-scares-me.aspx">shove it under the covers</a>, then I would argue that your design and the solution to said design is too complex.</p>
<p>Most of the uses I&#8217;ve seen of regions are to group member fields, constructors (and related overloads), methods and properties together. This has to be the most retarded way to use a tool because you have other tools to perform this same function. Granted not everyone can buy <a href="http://www.jetbrains.com/resharper">Resharper</a>, but the File Structure window provides all that same information. Heck, if you simply followed a simple code standard such as:</p>
<blockquote>
<pre><span class="kwrd">class</span> &lt;className&gt;
{

  <span class="kwrd">private</span> members
  constructors
  properties
  methods

}</pre>
</blockquote>
<p>this would do the same job. Honestly, if you can&#8217;t LOOK at your code and tell a constructor apart from a property or field, then you should be looking for a different line of work. Please, stop commenting the obvious!</p>
<p>Now, you will eventually get classes that are thousands of lines long, however there are other constructs in the language that can help you keep things neat without using this lame excuse for a preprocessor tag. When you DO find your class encroaching on this large line number threshold, that is a prime time to look at your code for <a href="http://c2.com/cgi-bin/wiki?CopyAndPasteProgramming">copy/paste refactoring tragedies</a> and do it right. It might be a little painful now, but it could be the thing that saves your project in the long run.</p>
<p>Another lame way I&#8217;ve seen regions used is within a method. Usually there is a large block of setup code that is copy and pasted all over the place, with the same region tags. C&#8217;mon people, at that point, read about the <a href="http://www.refactoring.com/catalog/extractMethod.html">Extract Method refactoring</a> and actually <b>REUSE</b> that block of code <i>intelligently</i>!</p>
<p>I honestly can&#8217;t think of any reason to use <i><b>#region</b></i> tags because all the things they are hiding is just really bad code. When you start to just hide bad code, you are less inclined to go back and refactor it properly.</p>
<p>Let&#8217;s try this analogy: if you were looking to lose weight before the summer beach season, the best thing to do is get a mirror. This way, you will be re-motivated on a regular basis.</p>
<p>The mere act of having the bad code stare back at you will make sure that it is at least not forgotten. Nearly all codebases have some code that is not koesher. Let&#8217;s try to make that lump of code as small as possible. By then, you may even find a way to get rid of that eyesore (and system-sore) all together&#8230;after all, it was probably some hack anyway.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/extractmethod.wordpress.com/19/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/extractmethod.wordpress.com/19/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/extractmethod.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/extractmethod.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/extractmethod.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/extractmethod.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/extractmethod.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/extractmethod.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/extractmethod.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/extractmethod.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/extractmethod.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/extractmethod.wordpress.com/19/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=extractmethod.wordpress.com&blog=2356552&post=19&subd=extractmethod&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://extractmethod.wordpress.com/2008/02/29/just-say-no-to-c-regions/feed/</wfw:commentRss>
		<slash:comments>48</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4c5bc935da066bf73113e426f396ba60?s=96&#38;d=identicon" medium="image">
			<media:title type="html">casademora</media:title>
		</media:content>
	</item>
		<item>
		<title>Antlr + log4net = ?</title>
		<link>http://extractmethod.wordpress.com/2008/02/14/antlr-log4net/</link>
		<comments>http://extractmethod.wordpress.com/2008/02/14/antlr-log4net/#comments</comments>
		<pubDate>Fri, 15 Feb 2008 06:50:13 +0000</pubDate>
		<dc:creator>casademora</dc:creator>
				<category><![CDATA[ANTLR]]></category>
		<category><![CDATA[log4net]]></category>
		<category><![CDATA[grammar]]></category>
		<category><![CDATA[log]]></category>
		<category><![CDATA[parse]]></category>

		<guid isPermaLink="false">http://extractmethod.wordpress.com/2008/02/14/antlr-log4net/</guid>
		<description><![CDATA[I&#8217;ve been using log4net in nearly every application I&#8217;ve written for the past couple of years. It has met my needs in every single instance. From logging to a file, to sending emails, to writing to a console, to doing all three at the same time, you can&#8217;t beat log4net (or your own flavor).
I&#8217;ve also [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=extractmethod.wordpress.com&blog=2356552&post=18&subd=extractmethod&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I&#8217;ve been using log4net in nearly every application I&#8217;ve written for the past couple of years. It has met my needs in every single instance. From logging to a file, to sending emails, to writing to a console, to doing all three at the same time, you can&#8217;t beat log4net (or your own flavor).</p>
<p>I&#8217;ve also started to use ANTLR for, what else, parsing some input. I got the hang of parsing input and converting it to an Abstract Syntax Tree without too many issues. However, when it came time to include actions when walking the tree, and finding out the values that are being created or parsed, nothing beats the old printf function. Or rather, WriteLine.  However, in all the ANTLR examples I found, everyone was writing to the Console. I don&#8217;t like writing to the console directly anymore, as I find that there may be a case when I want to pipe that output to the System Event Log (for example). So, I didn&#8217;t think too hard in what needed to come next: a reference to a log4net Logger in the grammar file.</p>
<p>In your grammar file, start with:</p>
<pre>@header{

<span class="kwrd">   using</span> System.Reflection;

<span class="kwrd">   using</span> System.Text;    <span class="kwrd"></span> <span class="kwrd">   using</span> log4net;

}</pre>
<p>Then add a dash of</p>
<pre>@members {

<span class="kwrd">   private</span> <span class="kwrd">readonly</span> <span class="kwrd">static</span> ILog Log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); }</pre>
<p>Then, in your actions, you can reference your Log object like so:</p>
<pre>myRule  : methodName <span class="str">'('</span> oneParam <span class="str">')'</span>

{

  Log.Debug(<span class="str">"Who cares where I am, I can send my parse output to log4net!"</span>);

}

;</pre>
<p>Parse with glee now that you can watch the parser do what it does best to your DSLs&#8230;</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/extractmethod.wordpress.com/18/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/extractmethod.wordpress.com/18/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/extractmethod.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/extractmethod.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/extractmethod.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/extractmethod.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/extractmethod.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/extractmethod.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/extractmethod.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/extractmethod.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/extractmethod.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/extractmethod.wordpress.com/18/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=extractmethod.wordpress.com&blog=2356552&post=18&subd=extractmethod&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://extractmethod.wordpress.com/2008/02/14/antlr-log4net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4c5bc935da066bf73113e426f396ba60?s=96&#38;d=identicon" medium="image">
			<media:title type="html">casademora</media:title>
		</media:content>
	</item>
		<item>
		<title>A Simple DataTable Constraint for RhinoMocks</title>
		<link>http://extractmethod.wordpress.com/2008/02/07/a-simple-datatable-constraint-for-rhinomocks/</link>
		<comments>http://extractmethod.wordpress.com/2008/02/07/a-simple-datatable-constraint-for-rhinomocks/#comments</comments>
		<pubDate>Thu, 07 Feb 2008 07:08:16 +0000</pubDate>
		<dc:creator>casademora</dc:creator>
				<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[constrain]]></category>
		<category><![CDATA[DataTable]]></category>
		<category><![CDATA[RhinoMocks]]></category>
		<category><![CDATA[tests]]></category>
		<category><![CDATA[unit]]></category>

		<guid isPermaLink="false">http://extractmethod.wordpress.com/2008/02/07/a-simple-datatable-constraint-for-rhinomocks/</guid>
		<description><![CDATA[I&#8217;ve been a huge fan of Rhino Mocks since I heard about it on a way-back-episode of Dot Net Rocks HanselMinutes. One of the more awesome features of Rhino Mocks is that it utilizes a Record/Playback semantic so that you can set up your mocks with actual calls to the mock objects, then play them [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=extractmethod.wordpress.com&blog=2356552&post=17&subd=extractmethod&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I&#8217;ve been a huge fan of <a href="http://www.ayende.com/projects/rhino-mocks.aspx">Rhino Mocks</a> since I heard about it on a way-back-episode of <strike><a href="http://www.dotnetrocks.com">Dot Net Rocks</a></strike> <a href="http://hanselminutes.com/default.aspx?showID=43">HanselMinutes</a>. One of the more awesome features of Rhino Mocks is that it utilizes a Record/Playback semantic so that you can set up your mocks with actual calls to the mock objects, then play them back in your tests. This is great if you rely on intellisense when calling your object instances, or if you use <a href="http://www.jetbrains.com/resharper">Resharper</a> or another code refactoring tool.</p>
<p>Recently, I trying to use Rhino Mocks with DataTables like so:</p>
<blockquote>
<pre>DataTable a = <span class="kwrd">new</span> DataTable();
DataTable b = <span class="kwrd">new</span> DataTable(); 

MockObject mock = mockRepository.CreateMock&lt;MockObject&gt;();

<span class="kwrd">using</span> (mockRepository.Record())
{
   Expect.Call(mock.CreateRecord(<span class="str">"TableName"</span>, a, b).Return(1);
}
<span class="kwrd">using</span> (mockRepository.Playback())
{
  MyObject obj = <span class="kwrd">new</span> MyObject(mock);
  obj.Save();
}</pre>
</blockquote>
<p>When I ran the test, Rhino Mocks says that a the DataTable created during the obj.Save() call wasn&#8217;t the same as the one expected. This was correct as there were now two instances, and it seems that the default check Rhino Mocks performs is an Object.Equals(). Since I needed to do some more deep comparisons of the Expected and Actual DataTables, a fellow developer and I started a very simple DataTableConstraint:</p>
<div class="csharpcode">
<pre>    <span class="kwrd">class</span> DataTableConstraint : AbstractConstraint
    {
        <span class="kwrd">private</span> <span class="kwrd">readonly</span> DataTable _expected;
        <span class="kwrd">private</span> <span class="kwrd">string</span> _errorMessage;

        <span class="kwrd">public</span> DataTableConstraint(DataTable expected)
        {
            _expected = expected;
        }

        <span class="kwrd">public</span> <span class="kwrd">override</span> <span class="kwrd">bool</span> Eval(<span class="kwrd">object</span> obj)
        {
            DataTable actual = obj <span class="kwrd">as</span> DataTable;
            <span class="kwrd">if</span> (actual == <span class="kwrd">null</span>)
                <span class="kwrd">return</span> <span class="kwrd">false</span>;

            <span class="kwrd">if</span> (!CheckColumns(actual))
            {
                <span class="kwrd">return</span> <span class="kwrd">false</span>;
            }
            <span class="kwrd">if</span> (!CheckData(actual))
            {
                <span class="kwrd">return</span> <span class="kwrd">false</span>;
            }
            <span class="kwrd">return</span> <span class="kwrd">true</span>;
        }

        <span class="kwrd">private</span> <span class="kwrd">bool</span> CheckData(DataTable actual)
        {
            <span class="kwrd">if</span> (actual.Rows.Count == 0)
            {
                _errorMessage = <span class="str">"Actual table has no data to compare"</span>;
                <span class="kwrd">return</span> <span class="kwrd">false</span>;
            }
            <span class="kwrd">try</span>
            {
                <span class="kwrd">for</span> (<span class="kwrd">int</span> i=0; i &lt; _expected.Rows.Count; i++)
                {
                    <span class="kwrd">foreach</span> (DataColumn column <span class="kwrd">in</span> _expected.Columns)
                    {
                        <span class="kwrd">object</span> expectedCell = _expected.Rows[i][column];
                        <span class="kwrd">object</span> actualCell = actual.Rows[i][column];

                        <span class="kwrd">if</span> (expectedCell != actualCell)
                        {
                            _errorMessage = <span class="kwrd">string</span>.Format(<span class="str">"Expected {0} in Row ({1}), Column ({2}), but was {3}"</span>, expectedCell, i, column.ColumnName, actualCell);
                            <span class="kwrd">return</span> <span class="kwrd">false</span>;
                        }
                    }
                }
                <span class="kwrd">return</span> <span class="kwrd">true</span>;
            }
            <span class="kwrd">catch</span> (System.Exception e)
            {
                _errorMessage = e.Message;
                <span class="kwrd">return</span> <span class="kwrd">false</span>;
            }
        }

        <span class="kwrd">private</span> <span class="kwrd">bool</span> CheckColumns(DataTable actual)
        {
            <span class="kwrd">foreach</span> (DataColumn column <span class="kwrd">in</span> _expected.Columns)
            {
                <span class="kwrd">if</span> (!actual.Columns.Contains(column.ColumnName))
                {
                    _errorMessage = <span class="kwrd">string</span>.Format(<span class="str">"Could not find column {0} in {1}"</span>, column, actual);
                    <span class="kwrd">return</span> <span class="kwrd">false</span>;
                }
            }
            <span class="kwrd">return</span> <span class="kwrd">true</span>;
        }

        <span class="kwrd">public</span> <span class="kwrd">override</span> <span class="kwrd">string</span> Message
        {
            get { <span class="kwrd">return</span> _errorMessage; }
        }
    }</pre>
</div>
<p>To use this using the above sample code, do</p>
<blockquote>
<pre>Expect.Call(mock.CreateRecord(<span class="kwrd">null</span>, <span class="kwrd">null</span>, <span class="kwrd">null</span>).Constraints
(
  Is.Anything(),
  <span class="kwrd">new</span> DataTableConstraint(a),
  <span class="kwrd">new</span> DataTableConstraint(b)
);</pre>
</blockquote>
<p>Now, this is just a start, and will probably evolve more as I start to get more into verifying the data in two tables. Perhaps <a href="http://www.ayende.com/default.aspx">Oren</a> will create a new Syntax Helper along the lines of Data.Equals(expectedDataTable) since using a new Constraint() call is a little awkward.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/extractmethod.wordpress.com/17/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/extractmethod.wordpress.com/17/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/extractmethod.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/extractmethod.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/extractmethod.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/extractmethod.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/extractmethod.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/extractmethod.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/extractmethod.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/extractmethod.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/extractmethod.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/extractmethod.wordpress.com/17/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=extractmethod.wordpress.com&blog=2356552&post=17&subd=extractmethod&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://extractmethod.wordpress.com/2008/02/07/a-simple-datatable-constraint-for-rhinomocks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4c5bc935da066bf73113e426f396ba60?s=96&#38;d=identicon" medium="image">
			<media:title type="html">casademora</media:title>
		</media:content>
	</item>
		<item>
		<title>Integrating ANTLR Code Generation with Visual Studio 2008</title>
		<link>http://extractmethod.wordpress.com/2008/01/02/integrating-antlr-code-generation-with-visual-studio-2008/</link>
		<comments>http://extractmethod.wordpress.com/2008/01/02/integrating-antlr-code-generation-with-visual-studio-2008/#comments</comments>
		<pubDate>Wed, 02 Jan 2008 23:44:04 +0000</pubDate>
		<dc:creator>casademora</dc:creator>
				<category><![CDATA[ANTLR]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[DRY]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Visual Studio 2008]]></category>
		<category><![CDATA[build]]></category>
		<category><![CDATA[msbuild]]></category>

		<guid isPermaLink="false">http://extractmethod.wordpress.com/2008/01/02/integrating-antlr-code-generation-with-visual-studio-2008/</guid>
		<description><![CDATA[ANTLR is a DSL tool that can generate a language parser based on a grammar (*.g) file. From there, you hook into the parser so that your code can interpret the language into constructs your application can understand. But, in order to get your grammar file correct, you make end up using a variety of [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=extractmethod.wordpress.com&blog=2356552&post=6&subd=extractmethod&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a href="http://www.antlr.org/">ANTLR</a> is a DSL tool that can generate a language parser based on a grammar (*.g) file. From there, you hook into the parser so that your code can interpret the language into constructs your application can understand. But, in order to get your grammar file correct, you make end up using a variety of development methods such as TDD, and all of them will have the same step: run the <a href="http://www.antlr.org/works">ANTLR tool</a> against your grammar file to generate your parser code.The ANTLR web site has <a href="http://www.antlr.org/wiki/display/ANTLR3/Integration+with+development+environments" title="Integrating ANTLR With other development environments">an article</a> on <a href="http://www.antlr.org/wiki/display/ANTLR3/ANTLR+v3+documentation" title="ANTLR Documentation Wiki">its wiki</a> that will let you integrate the ANTLR tool into your Visual Studio Build process. Follow the steps outlined in that article <b>first</b>.  Since VS 2008 project files are basically MS Build files, the steps work almost verbatim. However, here are a few caveats I encountered:The Exec command in the <b>GenerateAntlrCode</b> target needed some <i>classpath</i> modifications. Basically, I needed to tell <a href="http://java.sun.com/">java</a> where the Antlr jar file was located. Here is what I ended up with:
<div class="csharpcode">
<pre><span class="lnum">1:  </span><span class="kwrd">&lt;</span><span class="html">Target</span> <span class="attr">Name</span><span class="kwrd">="GenerateAntlrCode"</span> <span class="attr">Inputs</span><span class="kwrd">="@(Antlr3)"</span> <span class="attr">Outputs</span><span class="kwrd">="%(Antlr3.OutputFiles)"</span><span class="kwrd">&gt;</span> <span class="lnum">   </span> <span class="lnum">2:  </span>    <span class="kwrd">&lt;</span><span class="html">Exec</span> <span class="attr">Command</span><span class="kwrd">="java -cp %22$(Antlr3ToolPath)\antlr.jar;$(Antlr3ToolPath)\antlr-3.0.1.jar;$(Antlr3ToolPath)\stringtemplate-3.1b1.jar%22 org.antlr.Tool -message-format vs2005 -lib $(AntlrGrammarPath)  @(Antlr3)"</span> <span class="attr">Outputs</span><span class="kwrd">="%(Antlr3.OutputFiles)"</span> <span class="kwrd">/&gt;</span> <span class="lnum">   </span> <span class="lnum">3:  </span>  <span class="kwrd">&lt;/</span><span class="html">Target</span><span class="kwrd">&gt;</span></pre>
</div>
<p>A couple of notes regarding this target:
<ul>
<li>%22 is the escaped form of double-quotes (&#8220;)</li>
<li>I decided to create a build variable so that any changes to a path was updated everywhere (<a href="http://en.wikipedia.org/wiki/Don't_repeat_yourself">DRY principle</a>).</li>
<li>You need to reference several jars:
<ul>
<li>antlr.jar -&gt; The Antlr 2.7.7 tool</li>
<li>antlr-3.0.1.jar -&gt; The Antlr 3.0.1 tool</li>
<li>stringtemplate-3.1b1.jar -&gt; The String Template library</li>
</ul>
</li>
</ul>
<p>The antlr 2.7.7 jar is needed for the StreamToken class that seems to be in a different namespace than the 3.0.1 jar.The properties called Antlr3ToolPath and Antlr3GrammarPath are defined in a property group like so:
<div class="csharpcode">
<pre><span class="lnum">1:  </span>  <span class="kwrd">&lt;</span><span class="html">PropertyGroup</span><span class="kwrd">&gt;</span> <span class="lnum">   </span> <span class="lnum">2:  </span>    <span class="kwrd">&lt;</span><span class="html">Antlr3ToolPath</span><span class="kwrd">&gt;</span>$(MSBuildProjectDirectory)\..\..\Tools\ANTLR<span class="kwrd">&lt;/</span><span class="html">Antlr3ToolPath</span><span class="kwrd">&gt;</span> <span class="lnum">  </span> <span class="lnum">3:  </span>    <span class="kwrd">&lt;</span><span class="html">AntlrGrammarPath</span><span class="kwrd">&gt;</span>$(MSBuildProjectDirectory)\Model\Parsers<span class="kwrd">&lt;/</span><span class="html">AntlrGrammarPath</span><span class="kwrd">&gt;</span> <span class="lnum">   </span> <span class="lnum">4:  </span>    <span class="kwrd">&lt;</span><span class="html">BuildDependsOn</span><span class="kwrd">&gt;</span>GenerateAntlrCode;$(BuildDependsOn)<span class="kwrd">&lt;/</span><span class="html">BuildDependsOn</span><span class="kwrd">&gt;</span> <span class="lnum">   </span> <span class="lnum"><span class="lnum">5:  </span>  <span class="kwrd">&lt;/</span><span class="html">PropertyGroup</span><span class="kwrd">&gt;</span></span></pre>
</div>
<p>The reason the GrammarPath is basically pointing to the output folder of the parser. This is needed because I am using the ANTLR output option of AST, which generates an Abstract Syntax Tree that much be consumed by another ANTLR grammar. For more details on why you need two grammar files for this process, I recommend the book The Definitive ANTLR Reference, by Terrence Parr.After that, I was able to use Visual Studio to generate the code on every build of the code. When using TDD tools like <a href="http://www.jetbrains.net/resharper">resharper</a> or <a href="http://www.testdriven.net">testdriven.net</a>, this is an added bonus in that any changes made to the grammar are incorporated in my unit tests. Bonus number 2: since the changes are within the project file itself, and since my continuous integration server is based on my Visual Studio Solution file, the grammar files are also included on my build server and will cause the build to fail if the grammar fails to compile.I hope your build goes just as nicely.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/extractmethod.wordpress.com/6/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/extractmethod.wordpress.com/6/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/extractmethod.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/extractmethod.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/extractmethod.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/extractmethod.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/extractmethod.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/extractmethod.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/extractmethod.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/extractmethod.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/extractmethod.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/extractmethod.wordpress.com/6/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=extractmethod.wordpress.com&blog=2356552&post=6&subd=extractmethod&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://extractmethod.wordpress.com/2008/01/02/integrating-antlr-code-generation-with-visual-studio-2008/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4c5bc935da066bf73113e426f396ba60?s=96&#38;d=identicon" medium="image">
			<media:title type="html">casademora</media:title>
		</media:content>
	</item>
		<item>
		<title>Automata, Grammars and Languages, Oh My!</title>
		<link>http://extractmethod.wordpress.com/2007/12/26/automata-grammars-and-languages-oh-my/</link>
		<comments>http://extractmethod.wordpress.com/2007/12/26/automata-grammars-and-languages-oh-my/#comments</comments>
		<pubDate>Wed, 26 Dec 2007 18:31:29 +0000</pubDate>
		<dc:creator>casademora</dc:creator>
				<category><![CDATA[ANTLR]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[grammars]]></category>
		<category><![CDATA[languages]]></category>
		<category><![CDATA[pragmatic development]]></category>

		<guid isPermaLink="false">http://extractmethod.wordpress.com/2007/12/26/automata-grammars-and-languages-oh-my/</guid>
		<description><![CDATA[As a student in the Engineering college, I thought all the computer science classes were a waste of time. I mean, who cares how to properly define a push down automata and prove that it is, in fact, deterministic? Can P = NP? How do you write a grammar that defines this language? This class [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=extractmethod.wordpress.com&blog=2356552&post=5&subd=extractmethod&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>As a student in the Engineering college, I thought all the computer science classes were a waste of time. I mean, who cares how to properly define a push down automata and prove that it is, in fact, deterministic? Can P = NP? How do you write a grammar that defines this language? This class was the engineering equivalent of the touchy-feely hippie course that was required to complete my Computer Engineering degree. I mean, we were engineers, we weren&#8217;t going to be doing proofs in our future careers. We were going to be paid to implement; and I am being paid to implement software now.&nbsp; </p>
<p>In much of the code I have seen, there have been far too many examples where a background in computer science was not present in the developer&#8217;s mind (minds when pairing).&nbsp; Not that you have to have a formal degree, or classes, but a fundamental understanding that there are good ways to do things, and bad ways. It goes back to the analogy of having all the tools in your toolbox to use so that every problem does not become the nail to your hammer. If you understand the concept and application of grammars and languages, then you can use the tools available to you to create one.&nbsp; </p>
<p>I have learned in the time since I completed college and have become a full time software engineer is that you need that background in computer science in order to understand the tools available to you, and to implement them properly.&nbsp; This is the difference between a software engineer with a college education and a hacker who just writes code.</p>
<p>So, to bring this post to something concrete, let&#8217;s look at what I&#8217;m working on now. I&#8217;ve been tasked with parsing some stuff for an application. I could have just as well created my own parser using my own TDD methods so that at least when I need to make changes to the parsing algorithm or the language changes, I can make changes easily and know where things break, FAST. But I thought to myself. &#8220;There is no way I am the first person to encounter this problem, someone else has to have some experience to share&#8221; So, poking around, I found an open-source project called <a href="http://www.antlr.org">ANTLR</a>. Now, to be honest, I&#8217;m still trying to wrap my head around certain aspects of what is done by the tool, and how to use it effectively. But, by using this tool, I effectively get a high end custom language parser generated for me based on my language specification. This is also a section of the code I don&#8217;t have to directly maintain. I do have to fix language inaccuracies, however, I get a lot of functionality for free. Things like error-checking, multi-language compatibility, and efficient parsing algorithms are useful, and completely maintained by someone else!</p>
<p>This post has turned into an agile leaning example, but this is <a title="Pragmatic Tips" href="http://www.pragprog.com/the-pragmatic-programmer/extracts/tips">one of the many tips included</a> in <a title="The Pragmatic Programmer" href="http://www.pragprog.com/the-pragmatic-programmer">The Pragmatic Programmer</a>. Be sure to learn the tools available to you because while it will be slower at first to <a href="http://en.wikipedia.org/wiki/Grok">grok</a> something new, once you get over the hump, you will be able to use that tool at a moment&#8217;s notice, and move on to other problems that need solving.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/extractmethod.wordpress.com/5/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/extractmethod.wordpress.com/5/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/extractmethod.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/extractmethod.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/extractmethod.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/extractmethod.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/extractmethod.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/extractmethod.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/extractmethod.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/extractmethod.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/extractmethod.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/extractmethod.wordpress.com/5/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=extractmethod.wordpress.com&blog=2356552&post=5&subd=extractmethod&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://extractmethod.wordpress.com/2007/12/26/automata-grammars-and-languages-oh-my/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4c5bc935da066bf73113e426f396ba60?s=96&#38;d=identicon" medium="image">
			<media:title type="html">casademora</media:title>
		</media:content>
	</item>
	</channel>
</rss>