<?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>House of Postmodern</title>
	<atom:link href="http://houseofpostmodern.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://houseofpostmodern.wordpress.com</link>
	<description>Security, code, information with a side of ruby</description>
	<lastBuildDate>Sun, 19 Sep 2010 00:20:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='houseofpostmodern.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://1.gravatar.com/blavatar/f61083c7c27d3439f4298d7ce1679a66?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>House of Postmodern</title>
		<link>http://houseofpostmodern.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://houseofpostmodern.wordpress.com/osd.xml" title="House of Postmodern" />
	<atom:link rel='hub' href='http://houseofpostmodern.wordpress.com/?pushpress=hub'/>
		<item>
		<title>New Blog!</title>
		<link>http://houseofpostmodern.wordpress.com/2010/09/02/new-blog/</link>
		<comments>http://houseofpostmodern.wordpress.com/2010/09/02/new-blog/#comments</comments>
		<pubDate>Thu, 02 Sep 2010 05:14:41 +0000</pubDate>
		<dc:creator>postmodern3</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[github pages]]></category>
		<category><![CDATA[jekyll]]></category>
		<category><![CDATA[new blog]]></category>
		<category><![CDATA[postmodern]]></category>

		<guid isPermaLink="false">http://houseofpostmodern.wordpress.com/?p=277</guid>
		<description><![CDATA[I&#8217;ve finally gotten around to finalizing the move to my new Jekyll based blog at postmodern.github.com. The idea behind running a blog on GitHub Pages, was that if I&#8217;m committing changes to projects everyday, I might be more likely to commit blog posts more frequently. Also, I like using Git and Markdown to write/manage my [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=houseofpostmodern.wordpress.com&amp;blog=1452568&amp;post=277&amp;subd=houseofpostmodern&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve finally gotten around to finalizing the move to my new <a href="http://tom.preston-werner.com/jekyll/">Jekyll</a> based blog at <a href="http://postmodern.github.com/">postmodern.github.com</a>.</p>
<p>The idea behind running a blog on <a href="http://pages.github.com/">GitHub Pages</a>, was that if I&#8217;m committing changes to projects everyday, I might be more likely to commit blog posts more frequently. Also, I like using <a href="http://www.git-scm.org/">Git</a> and <a href="http://daringfireball.net/projects/markdown/">Markdown</a> to write/manage my Blog posts, instead of WordPresses PHP interface.</p>
<p>So if you have this Blog in your RSS Feed Reader, subscribe to the new Atom Feed:</p>
<pre>http://postmodern.github.com/atom.xml</pre>
<br /> Tagged: <a href='http://houseofpostmodern.wordpress.com/tag/github-pages/'>github pages</a>, <a href='http://houseofpostmodern.wordpress.com/tag/jekyll/'>jekyll</a>, <a href='http://houseofpostmodern.wordpress.com/tag/new-blog/'>new blog</a>, <a href='http://houseofpostmodern.wordpress.com/tag/postmodern/'>postmodern</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/houseofpostmodern.wordpress.com/277/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/houseofpostmodern.wordpress.com/277/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/houseofpostmodern.wordpress.com/277/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/houseofpostmodern.wordpress.com/277/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/houseofpostmodern.wordpress.com/277/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/houseofpostmodern.wordpress.com/277/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/houseofpostmodern.wordpress.com/277/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/houseofpostmodern.wordpress.com/277/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/houseofpostmodern.wordpress.com/277/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/houseofpostmodern.wordpress.com/277/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/houseofpostmodern.wordpress.com/277/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/houseofpostmodern.wordpress.com/277/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/houseofpostmodern.wordpress.com/277/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/houseofpostmodern.wordpress.com/277/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=houseofpostmodern.wordpress.com&amp;blog=1452568&amp;post=277&amp;subd=houseofpostmodern&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://houseofpostmodern.wordpress.com/2010/09/02/new-blog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/66f5d5b64b951b3eeb8b6c34fcb69237?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">postmodern3</media:title>
		</media:content>
	</item>
		<item>
		<title>SimpleMarkup is dead. Long live MarkDown (and Textile).</title>
		<link>http://houseofpostmodern.wordpress.com/2010/02/02/simplemarkup-is-dead-long-live-markdown-and-textile/</link>
		<comments>http://houseofpostmodern.wordpress.com/2010/02/02/simplemarkup-is-dead-long-live-markdown-and-textile/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 02:03:40 +0000</pubDate>
		<dc:creator>postmodern3</dc:creator>
				<category><![CDATA[ruby]]></category>
		<category><![CDATA[yard]]></category>
		<category><![CDATA[markdown]]></category>
		<category><![CDATA[rdoc]]></category>
		<category><![CDATA[simplemarkup]]></category>

		<guid isPermaLink="false">http://houseofpostmodern.wordpress.com/?p=268</guid>
		<description><![CDATA[If you use RDoc, than you&#8217;re probably familiar with it&#8217;s markup, known as SimpleMarkup. If you&#8217;ve been using RDoc for a while, you are also probably aware that SimpleMarkup is horribly broken, when it comes to handling odd formatting. Besides the usual formatting mistakes that can easily crash SimpleMarkup, I and other users began noticing [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=houseofpostmodern.wordpress.com&amp;blog=1452568&amp;post=268&amp;subd=houseofpostmodern&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>If you use <a href="http://rdoc.sourceforge.net/">RDoc</a>, than you&#8217;re probably familiar with it&#8217;s markup, known as <a href="http://rdoc.sourceforge.net/doc/files/markup/simple_markup_rb.html">SimpleMarkup</a>. If you&#8217;ve been using RDoc for a while, you are also probably aware that SimpleMarkup is horribly <a href="http://redmine.ruby-lang.org/issues/show/1042">broken</a>, when it comes to handling odd formatting.</p>
<p>Besides the usual formatting mistakes that can easily crash SimpleMarkup, I and other users began noticing odd <a href="http://rubyforge.org/tracker/index.php?func=detail&amp;aid=27674&amp;group_id=627&amp;atid=2472">error messages</a> when installing YARD documentation with SimpleMarkup:</p>
<pre><code>Unhandled special: Special: type=65, name=CROSSREF,_SPECIAL_, text="Spidr"</code></pre>
<p>Even after ditching RDoc for <a href="http://yardoc.org/">YARD</a>, SimpleMarkup (the default markup used by YARD) was able to reach forth from it&#8217;s icy RubyGem and introduce bugs into my code. This was the last straw, SimpleMarkup is dead, time to move on.</p>
<p>Luckily, YARD supports using alternate markup engines, such as <a href="http://daringfireball.net/projects/markdown/basics">MarkDown</a> or <a href="http://redcloth.org/textile">Textile</a>. Having used MarkDown regularly in the past, and that it matched SimpleMarkup&#8217;s syntax in some ways, I decided to convert all of my Ruby project&#8217;s to MarkDown formatted YARD documentation.</p>
<p>First, I had to specify the <kbd>--markup markdown</kbd> option in the <a href="http://github.com/postmodern/spidr/commit/38546a27c5a399f4b54e723de2dfbb87f61c8762#L2L14">yard_options</a> setting (provided by the <a href="http://hoe-yard.rubyforge.org/">hoe-yard</a> plugin) in the Rakefile.</p>
<p>Second, I renamed the README.*, History.* files to README.md, History.md, respectively.</p>
<p>Finally, I began the tedious process of converting SimpleMarkup formatted text to MarkDown:</p>
<ol>
<li>Replace the <kbd>=</kbd>, <kbd>==</kbd>, <kbd>===</kbd> headings with <kbd>#</kbd>, <kbd>##</kbd>, <kbd>###</kbd>.</li>
<li>Indent all source-code examples not following a YARD <kbd>@example</kbd> tag by 4 spaces.</li>
<li>Convert any raw URLs to MarkDown links.</li>
<li>Replace any +code+ or &lt;tt&gt;code&lt;/tt&gt; formatting with `code` or &lt;code&gt;code&lt;/code&gt;. (Note: `code` can handle spaces, numbers and symbols within the ` ` characters, where as +code+ cannot.)</li>
</ol>
<p>In conclusion, that is how I ridded myself of the last buggy vestiges of RDoc, and increased the reliability of my documentation using YARD.</p>
<br /> Tagged: <a href='http://houseofpostmodern.wordpress.com/tag/markdown/'>markdown</a>, <a href='http://houseofpostmodern.wordpress.com/tag/rdoc/'>rdoc</a>, <a href='http://houseofpostmodern.wordpress.com/tag/ruby/'>ruby</a>, <a href='http://houseofpostmodern.wordpress.com/tag/simplemarkup/'>simplemarkup</a>, <a href='http://houseofpostmodern.wordpress.com/tag/yard/'>yard</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/houseofpostmodern.wordpress.com/268/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/houseofpostmodern.wordpress.com/268/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/houseofpostmodern.wordpress.com/268/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/houseofpostmodern.wordpress.com/268/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/houseofpostmodern.wordpress.com/268/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/houseofpostmodern.wordpress.com/268/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/houseofpostmodern.wordpress.com/268/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/houseofpostmodern.wordpress.com/268/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/houseofpostmodern.wordpress.com/268/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/houseofpostmodern.wordpress.com/268/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/houseofpostmodern.wordpress.com/268/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/houseofpostmodern.wordpress.com/268/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/houseofpostmodern.wordpress.com/268/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/houseofpostmodern.wordpress.com/268/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=houseofpostmodern.wordpress.com&amp;blog=1452568&amp;post=268&amp;subd=houseofpostmodern&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://houseofpostmodern.wordpress.com/2010/02/02/simplemarkup-is-dead-long-live-markdown-and-textile/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/66f5d5b64b951b3eeb8b6c34fcb69237?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">postmodern3</media:title>
		</media:content>
	</item>
		<item>
		<title>Introducing static_paths 0.1.0</title>
		<link>http://houseofpostmodern.wordpress.com/2010/01/25/introducing-static_paths-0-1-0/</link>
		<comments>http://houseofpostmodern.wordpress.com/2010/01/25/introducing-static_paths-0-1-0/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 13:13:21 +0000</pubDate>
		<dc:creator>postmodern3</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[project]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[content]]></category>
		<category><![CDATA[directories]]></category>
		<category><![CDATA[directory]]></category>
		<category><![CDATA[files]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[rubygem]]></category>
		<category><![CDATA[static]]></category>

		<guid isPermaLink="false">http://houseofpostmodern.wordpress.com/?p=258</guid>
		<description><![CDATA[Update: Documentation has now been posted on static-paths.rubyforge.org. When writing a library which bundles static-content in a directory named data/ or static/, you usually need to find the directory using something like File.expand_path(File.join(File.dirname(__FILE__),'..','..','..','..','static)). But then you want to allow plugins to extend the functionality of your library, and even add their own static-content. Now you [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=houseofpostmodern.wordpress.com&amp;blog=1452568&amp;post=258&amp;subd=houseofpostmodern&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><b>Update:</b> Documentation has now been posted on <a href="http://static-paths.rubyforge.org/">static-paths.rubyforge.org</a>.</p>
<p>When writing a library which bundles static-content in a directory named <kbd>data/</kbd> or <kbd>static/</kbd>, you usually need to find the directory using something like <kbd>File.expand_path(File.join(File.dirname(__FILE__),'..','..','..','..','static))</kbd>.</p>
<p>But then you want to allow plugins to extend the functionality of your library, and even add their own static-content. Now you have to manage more than one directory path.</p>
<p>Enter <a href="http://static-paths.rubyforge.org/">StaticPaths</a>, a Ruby library for managing and searching through directories containing static-content. <kbd>StaticPaths</kbd> helps manage directories across multiple libraries in much the same way that RubyGems manages <kbd>lib/</kbd> directories using <kbd>$LOAD_PATH</kbd>. Except that <kbd>StaticPaths</kbd> does not use global variables.</p>
<h2>Example Usage</h2>
<pre><code>require 'static_paths'

module MyLibrary
  include StaticPaths

  # define the static dir(s)
  register_static_dir File.join(File.dirname(__FILE__),'..','..','static')
end</code></pre>
<p><a href="http://static-paths.rubyforge.org/StaticPaths/Methods.html#register_static_dir-instance_method">register_static_dir</a> will expand the path, make sure the path points to a directory, then adds the path to <a href="http://static-paths.rubyforge.org/StaticPaths.html#paths-class_method">StaticPaths.paths</a> and the local <a href="http://static-paths.rubyforge.org/StaticPaths/Methods.html#static_paths-instance_method">MyLibrary.static_paths</a>.</p>
<p>One can also unregister directories using <a href="http://static-paths.rubyforge.org/StaticPaths/Methods.html#unregister_static_dir!-instance_method">unregister_static_dir!</a>.</p>
<pre><code>MyLibrary.unregister_static_dir! File.join(File.dirname(__FILE__),'..','..','static')</code></pre>
<p>Or, one can use <a href="http://static-paths.rubyforge.org/StaticPaths/Methods.html#unregister_static_dirs!-instance_method">unregister_static_dirs!</a> to unregister all directories registered within a module/class.</p>
<pre><code>module MyLibrary
  def MyLibrary.cleanup!
    unregister_static_dirs!
  end
end</code></pre>
<p>To search through and access the content within registered directories, simply use the methods within the <a href="http://static-paths.rubyforge.org/StaticPaths/Finders.html">StaticPaths::Finders</a> module.</p>
<pre><code>module MyLibrary
  class UsesContent

    include StaticPaths::Finders

    def index
      find_static_file('index.html')
    end

    def file_dirs
      all_static_dirs('extra')
    end

    def copy(src,dest)
      each_static_dir(src) do |dir|
        FileUtils.cp_r(dir,dest)
      end
    end

  end
end</code></pre>
<h2>Installation:</h2>
<pre><code>$ sudo gem install static_paths</code></pre>
<br /> Tagged: content, directories, directory, files, library, ruby, rubygem, static <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/houseofpostmodern.wordpress.com/258/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/houseofpostmodern.wordpress.com/258/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/houseofpostmodern.wordpress.com/258/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/houseofpostmodern.wordpress.com/258/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/houseofpostmodern.wordpress.com/258/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/houseofpostmodern.wordpress.com/258/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/houseofpostmodern.wordpress.com/258/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/houseofpostmodern.wordpress.com/258/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/houseofpostmodern.wordpress.com/258/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/houseofpostmodern.wordpress.com/258/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/houseofpostmodern.wordpress.com/258/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/houseofpostmodern.wordpress.com/258/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/houseofpostmodern.wordpress.com/258/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/houseofpostmodern.wordpress.com/258/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=houseofpostmodern.wordpress.com&amp;blog=1452568&amp;post=258&amp;subd=houseofpostmodern&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://houseofpostmodern.wordpress.com/2010/01/25/introducing-static_paths-0-1-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/66f5d5b64b951b3eeb8b6c34fcb69237?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">postmodern3</media:title>
		</media:content>
	</item>
		<item>
		<title>(Fully) Document your DataMapper models with YARD</title>
		<link>http://houseofpostmodern.wordpress.com/2010/01/16/document-your-datamapper-models-with-yard/</link>
		<comments>http://houseofpostmodern.wordpress.com/2010/01/16/document-your-datamapper-models-with-yard/#comments</comments>
		<pubDate>Sat, 16 Jan 2010 00:37:20 +0000</pubDate>
		<dc:creator>postmodern3</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[project]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[yard-dm]]></category>
		<category><![CDATA[datamapper]]></category>
		<category><![CDATA[docs]]></category>
		<category><![CDATA[rdoc]]></category>
		<category><![CDATA[yard]]></category>

		<guid isPermaLink="false">http://houseofpostmodern.wordpress.com/?p=249</guid>
		<description><![CDATA[Any release quality software has to provide documentation, for the future maintainers and other developers. Traditionally, Ruby projects would use RDoc and add custom documentation blurbs to their classes, methods, attributes and constants. Unfortunately, there&#8217;s a major limitation to RDoc, I can&#8217;t be extended to recognize new meta-programming method calls. This rigidness of RDoc really [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=houseofpostmodern.wordpress.com&amp;blog=1452568&amp;post=249&amp;subd=houseofpostmodern&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Any release quality software has to provide documentation, for the future maintainers and other developers. Traditionally, Ruby projects would use <a href="http://rdoc.rubyforge.org/">RDoc</a> and add custom documentation blurbs to their classes, methods, attributes and constants. Unfortunately, there&#8217;s a major limitation to RDoc, I can&#8217;t be extended to recognize new meta-programming method calls.</p>
<p>This rigidness of RDoc really shows up when you need to document ORM backed projects, such as one containing <a href="http://datamapper.org/">DataMapper</a> models. DataMapper allows one to define the <a href="http://datamapper.org/docs/properties.html">properties</a> and <a href="http://datamapper.org/docs/associations.html">relations</a> between models using handy class-methods:</p>
<pre>class MyModel

  include DataMapper::Resource

  # The primary key of the model
  property :id, Serial

  # The name of the model
  property :name, String

  # The many authors contributing to the model
  has n, :authors

  # The user that owns the model
  belongs_to :user

end</pre>
<p>RDoc will not recognize <kbd>property, <kbd>has</kbd> or <kbd>belongs_to</kbd>. Nor will RDoc know that <kbd>property</kbd> adds a class-method and instance reader/writer methods with the given name to the model. Documentation fail.</p>
<h2>Enter YARD</h2>
<blockquote><p>YARD is a documentation generation tool for the Ruby programming language.  It enables the user to generate consistent, usable documentation that can be  exported to a number of formats very easily, and also supports extending for  custom Ruby constructs such as custom class level definitions.</p></blockquote>
<p><a href="http://github.com/lsegal/yard">http://github.com/lsegal/yard</a></p>
<p>YARD organizes most of it's parsing logic into multiple handlers; essentially classes that inherit <a href="http://yardoc.org/docs/yard/YARD/Handlers/Ruby/Base">YARD::Handlers::Ruby::Base</a> and define a <kbd>process</kbd> method. YARD also supports a plugin system, by loading any RubyGems installed on the system that are prefixed with <kbd>yard-</kbd> or <kbd>yard_</kbd>. Using these two features of YARD, one can easily create a YARD plugin gem containing custom handlers, which YARD can automatically load and use.</p>
<h2>yard-dm</h2>
<p><a href="http://github.com/postmodern/yard-dm">yard-dm</a> is a YARD plugin for parsing DataMapper model syntax. The plugin can handle the following statements:</p>
<pre>property :name, Type</pre>
<pre>has n, :things</pre>
<pre>has 1, :thing</pre>
<pre>has 0..n, :things</pre>
<pre>has 1..n, :things</pre>
<pre>has 2..5, :things</pre>
<pre>belongs_to :stuff</pre>
<h3>Install It</h3>
<pre>$ sudo gem install yard-dm</pre>
<h3>Use It</h3>
<pre>$ cd dm-project/
$ yardoc</pre>
<p>It's that easy.</p>
<p>Next time you need complete documentation on your DataMapper backed project, just install <a href="http://yardoc.org/">YARD</a> and <a href="http://github.com/postmodern/yard-dm">yard-dm</a>.</p>
<br /> Tagged: datamapper, docs, rdoc, ruby, yard <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/houseofpostmodern.wordpress.com/249/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/houseofpostmodern.wordpress.com/249/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/houseofpostmodern.wordpress.com/249/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/houseofpostmodern.wordpress.com/249/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/houseofpostmodern.wordpress.com/249/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/houseofpostmodern.wordpress.com/249/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/houseofpostmodern.wordpress.com/249/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/houseofpostmodern.wordpress.com/249/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/houseofpostmodern.wordpress.com/249/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/houseofpostmodern.wordpress.com/249/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/houseofpostmodern.wordpress.com/249/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/houseofpostmodern.wordpress.com/249/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/houseofpostmodern.wordpress.com/249/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/houseofpostmodern.wordpress.com/249/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=houseofpostmodern.wordpress.com&amp;blog=1452568&amp;post=249&amp;subd=houseofpostmodern&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://houseofpostmodern.wordpress.com/2010/01/16/document-your-datamapper-models-with-yard/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/66f5d5b64b951b3eeb8b6c34fcb69237?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">postmodern3</media:title>
		</media:content>
	</item>
		<item>
		<title>Using YARD with Hoe, correctly.</title>
		<link>http://houseofpostmodern.wordpress.com/2010/01/11/using-yard-with-hoe-correctly/</link>
		<comments>http://houseofpostmodern.wordpress.com/2010/01/11/using-yard-with-hoe-correctly/#comments</comments>
		<pubDate>Mon, 11 Jan 2010 07:19:08 +0000</pubDate>
		<dc:creator>postmodern3</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[hoe]]></category>
		<category><![CDATA[hoe-yard]]></category>
		<category><![CDATA[project]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[rubygems]]></category>
		<category><![CDATA[yard]]></category>
		<category><![CDATA[gem]]></category>
		<category><![CDATA[rdoc]]></category>

		<guid isPermaLink="false">http://houseofpostmodern.wordpress.com/?p=244</guid>
		<description><![CDATA[When I first switched from the more traditional RDoc to YARD, I was only using the basic YARD task. In YARD 0.2.3.5, a gem plugin was added to YARD that would run yardoc on an installed gem if has_rdoc was set to "yard" in the Gem Specification. The yardoc command would also use the rdoc_options [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=houseofpostmodern.wordpress.com&amp;blog=1452568&amp;post=244&amp;subd=houseofpostmodern&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>When I first switched from the more traditional <a href="http://episteme.arstechnica.com/eve/forums/a/ga/ul/299008287931/inlineimg/Y/train_wreck.jpg">RDoc</a> to <a href="http://yardoc.org/">YARD</a>, I was only using the basic YARD task. In YARD 0.2.3.5, a gem plugin was added to YARD that would run <kbd>yardoc</kbd> on an installed gem if <kbd>has_rdoc</kbd> was set to <kbd>"yard"</kbd> in the Gem Specification. The <kbd>yardoc</kbd> command would also use the <kbd>rdoc_options</kbd> and <kbd>extra_rdoc_files</kbd> options from the Gem Specification.</p>
<p>Since I use <a href="http://seattlerb.rubyforge.org/hoe/">Hoe</a> for all my gem publishing needs, I got tired of having to specify all of this information explicitly in my Rakefiles; after all Hoe is suppose to make one&#8217;s Rakefiles simple and elegant. So I took advantage of Hoe&#8217;s plugin system and created a Hoe plugin to properly configure my projects for YARD.</p>
<p>Introducing <a href="http://github.com/postmodern/hoe-yard/">hoe-yard</a>, a Hoe plugin that will:</p>
<ul>
<li>Automatically find the README and History files, irregardless of file extension.</li>
<li>Sets <kbd>has_rdoc</kbd> to yard.</li>
<li>Sets <kbd>rdoc_options</kbd>.</li>
<li>Sets <kbd>extra_rdoc_files</kbd>.</li>
<li>Adds YARD and hoe-yard as development dependencies.</li>
<li>Adds the <kbd>yard</kbd> and <kbd>docs</kbd> Rake tasks.</li>
</ul>
<h2>Install</h2>
<pre>$ sudo gem install hoe-yard</pre>
<h2>Usage</h2>
<pre>require 'rubygems'
require 'hoe'

Hoe.plugin :yard

Hoe.spec('my_project') do
  # ...

  # optional YARD settings
  self.yard_title = 'My Project (0.1.0)'
  self.yard_markup = :markdown
  self.yard_opts = ['--protected'] # any additional YARD options

  # ...
end</pre>
<p>Not only does hoe-yard make setting up YARD with a project extremely easy, it also ensures the documentation that is automatically generated when a gem is installed will match the documentation published for that gem.</p>
<br /> Tagged: gem, hoe, rdoc, ruby, yard <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/houseofpostmodern.wordpress.com/244/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/houseofpostmodern.wordpress.com/244/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/houseofpostmodern.wordpress.com/244/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/houseofpostmodern.wordpress.com/244/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/houseofpostmodern.wordpress.com/244/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/houseofpostmodern.wordpress.com/244/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/houseofpostmodern.wordpress.com/244/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/houseofpostmodern.wordpress.com/244/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/houseofpostmodern.wordpress.com/244/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/houseofpostmodern.wordpress.com/244/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/houseofpostmodern.wordpress.com/244/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/houseofpostmodern.wordpress.com/244/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/houseofpostmodern.wordpress.com/244/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/houseofpostmodern.wordpress.com/244/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=houseofpostmodern.wordpress.com&amp;blog=1452568&amp;post=244&amp;subd=houseofpostmodern&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://houseofpostmodern.wordpress.com/2010/01/11/using-yard-with-hoe-correctly/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/66f5d5b64b951b3eeb8b6c34fcb69237?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">postmodern3</media:title>
		</media:content>
	</item>
		<item>
		<title>Spidr 0.2.2 released.</title>
		<link>http://houseofpostmodern.wordpress.com/2010/01/11/spidr-0-2-2-released/</link>
		<comments>http://houseofpostmodern.wordpress.com/2010/01/11/spidr-0-2-2-released/#comments</comments>
		<pubDate>Mon, 11 Jan 2010 06:46:18 +0000</pubDate>
		<dc:creator>postmodern3</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[project]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[spidr]]></category>
		<category><![CDATA[wsoc]]></category>
		<category><![CDATA[auth]]></category>
		<category><![CDATA[basic]]></category>
		<category><![CDATA[cookiejar]]></category>
		<category><![CDATA[cookies]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[spider]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://houseofpostmodern.wordpress.com/?p=239</guid>
		<description><![CDATA[Spidr 0.2.2 (code-named &#8220;next-level&#8221;) has been released. This release contains a lot of changes that pushes Spidr into a new level of web spidering. Web Spider Obstacle Course (WSOC) Spidr 0.2.2 now requires and makes use of the new Web Spider Obstacle Course (WSOC) for testing. Before one runs the RSpec test-suite for Spidr, the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=houseofpostmodern.wordpress.com&amp;blog=1452568&amp;post=239&amp;subd=houseofpostmodern&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Spidr 0.2.2 (code-named &#8220;next-level&#8221;) has been released. This release contains a lot of changes that pushes Spidr into a new level of web spidering.</p>
<h2>Web Spider Obstacle Course (WSOC)</h2>
<p>Spidr 0.2.2 now requires and makes use of the new <a href="http://github.com/postmodern/wsoc/">Web Spider Obstacle Course (WSOC)</a> for testing. Before one runs the RSpec test-suite for Spidr, the WSOC server must first be started:</p>
<pre>$ wsoc_server</pre>
<p>Then simply run the specs as usual:</p>
<pre>$ rake spec</pre>
<h2>Cookie support</h2>
<p>As of 0.2.2, Spidr now comes with a <a href="http://spidr.rubyforge.org/docs/Spidr/CookieJar.html">CookieJar</a>, thanks to the work of <a href="http://twitter.com/zapnap/">@zapnap</a>. Now when the <a href="http://spidr.rubyforge.org/docs/Spidr/Agent.html">Spidr::Agent</a> visits a page, any new cookie values will be merged into the CookieJar, and sent back with any future requests.</p>
<p>Additionally, one can now access the Cookie values from a <a href="http://spidr.rubyforge.org/docs/Spidr/Page.html">Spidr::Page</a> object.</p>
<pre>page.cookie
# =&gt; "COUNTRY=USA%2C97.100.45.38; expires=Mon, 18-Jan-2010 06:19:24 GMT; path=/; domain=.php.net"</pre>
<pre>page.cookies
# =&gt; ["COUNTRY=USA%2C97.100.45.38; expires=Mon, 18-Jan-2010 06:19:24 GMT; path=/; domain=.php.net"]</pre>
<h2>HTTP Basic Auth support</h2>
<p>Spidr 0.2.2 now comes with a brand new <a href="http://spidr.rubyforge.org/docs/Spidr/AuthStore.html">AuthStore</a>, for organizing HTTP Authentication credentials; also thanks to the work of <a href="http://twitter.com/zapnap/">@zapnap</a>.</p>
<p>Provided you have the credentials for the various HTTP Basic Auth protected areas that are to be spidered, Spidr can automatically respond to Basic Auth challenges. </p>
<p>Simply specify the credentials to the <a href="http://spidr.rubyforge.org/docs/Spidr/Agent.html">Spidr::Agent</a> and the agent will do the rest:</p>
<pre>Spidr.host('corporation.com') do |agent|
  agent.authorized.add('http://corporation.com/private/', 'user1233', 'motivate synergize')

  agent.every_page do |page|
    if page.url.path =~ /private/
      # ...
    end
  end
end</pre>
<h2>URL Sanitization</h2>
<p>A small yet important module was added in Spidr 0.2.2, and that is <a href="http://spidr.rubyforge.org/docs/Spidr/Sanitizers.html">Spidr::Sanitizers</a>. The <kbd>Sanitizers</kbd> module adds configuration settings to <a href="http://spidr.rubyforge.org/docs/Spidr/Agent.html">Spidr::Agent</a> for how incoming URLs are to be sanitized.</p>
<p>For instance, URL fragments are removed by default, but this can be changed:</p>
<pre>agent.strip_fragments
# =&gt; true
agent.strip_fragments = true</pre>
<p>Additionally, perhaps one might wish to strip the query strings from all URLs:</p>
<pre>agent.strip_query = true</pre>
<p><b>Note:</b> If YARD documentation generation fails when installing Spidr 0.2.2, this is due to a <a href="http://rubyforge.org/tracker/?func=detail&amp;aid=27674&amp;group_id=627&amp;atid=2472">bug in RDoc/SimpleMarkup generation</a>.</p>
<br /> Tagged: auth, basic, cookiejar, cookies, http, ruby, spider, spidr, web, wsoc <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/houseofpostmodern.wordpress.com/239/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/houseofpostmodern.wordpress.com/239/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/houseofpostmodern.wordpress.com/239/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/houseofpostmodern.wordpress.com/239/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/houseofpostmodern.wordpress.com/239/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/houseofpostmodern.wordpress.com/239/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/houseofpostmodern.wordpress.com/239/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/houseofpostmodern.wordpress.com/239/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/houseofpostmodern.wordpress.com/239/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/houseofpostmodern.wordpress.com/239/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/houseofpostmodern.wordpress.com/239/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/houseofpostmodern.wordpress.com/239/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/houseofpostmodern.wordpress.com/239/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/houseofpostmodern.wordpress.com/239/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=houseofpostmodern.wordpress.com&amp;blog=1452568&amp;post=239&amp;subd=houseofpostmodern&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://houseofpostmodern.wordpress.com/2010/01/11/spidr-0-2-2-released/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/66f5d5b64b951b3eeb8b6c34fcb69237?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">postmodern3</media:title>
		</media:content>
	</item>
		<item>
		<title>Introducing the new Web Spider Obstacle Course</title>
		<link>http://houseofpostmodern.wordpress.com/2010/01/11/introducing-the-new-web-spider-obstacle-course/</link>
		<comments>http://houseofpostmodern.wordpress.com/2010/01/11/introducing-the-new-web-spider-obstacle-course/#comments</comments>
		<pubDate>Mon, 11 Jan 2010 02:25:12 +0000</pubDate>
		<dc:creator>postmodern3</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[project]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[sinatra]]></category>
		<category><![CDATA[spidr]]></category>
		<category><![CDATA[wsoc]]></category>
		<category><![CDATA[course]]></category>
		<category><![CDATA[crawler]]></category>
		<category><![CDATA[obstacle]]></category>
		<category><![CDATA[spider]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://houseofpostmodern.wordpress.com/?p=236</guid>
		<description><![CDATA[The Web Spider Obstacle Course was originally developed for testing the Spidr library. The Obstacle Course was essentially a set of static files containing valid links, invalid links, links to previously visited pages and links to non-existent hosts/ports. Having the course hosted on spidr.rubyforge.org made it difficult to do advanced testing (such as using HTTP [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=houseofpostmodern.wordpress.com&amp;blog=1452568&amp;post=236&amp;subd=houseofpostmodern&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>The Web Spider Obstacle Course was originally developed for testing the <a href="http://spidr.rubyforge.org/">Spidr</a> library. The Obstacle Course was essentially a set of static files containing valid links, invalid links, links to previously visited pages and links to non-existent hosts/ports. Having the course hosted on spidr.rubyforge.org made it difficult to do advanced testing (such as using HTTP Redirects), not to mention slow to access.</p>
<p>Now the <a href="http://github.com/postmodern/wsoc/">Web Spider Obstacle Course (WSOC)</a> has been rewritten as a Ruby <a href="http://sinatrarb.com/">Sinatra</a> app that can be ran locally. Since most Ruby developers are familiar with Sinatra, it should not be too difficult to extend the Obstacle Course.</p>
<p>Currently WSOC tests a Web Spider&#8217;s ability to navigate:</p>
<ul>
<li>Empty links.</li>
<li>Circular links.</li>
<li>Links with relative-paths.</li>
<li>Links with absolute-paths.</li>
<li>Remote links.</li>
<li>javascript: links.</li>
<li>Links within frameset and iframe tags.</li>
<li>Cookie protected pages.</li>
<li>HTTP 300, 301, 302, 303 and 307 Redirects.</li>
<li>HTTP Baisc Auth protected pages.</li>
</ul>
<h2>3&#8230; 2&#8230; 1&#8230; Go</h2>
<h3>Install:</h3>
<pre>$ sudo gem install wsoc</pre>
<h3>Run:</h3>
<pre>wsoc_server -p 8080</pre>
<h3>Visit:</h3>
<pre>firefox http://localhost:8080/</pre>
<p>The front page of WSOC will explain the rules of the Obstacle Course and providing the Start URL for any would-be Web Spiders. The WSOC server still contains the Obstacle Course Specs, available at <a href="http://localhost:8080/specs">http://localhost:8080/specs</a>. The Obstace Course Specs are essentially a list of URLs, the expected behavior of the spider for the URL (<kbd>visit</kbd>, <kbd>ignore</kbd> or <kbd>fail</kbd>) and a message about the given URL. These specs can be access by Web Spider test suites in JSON (<a href="http://localhost:8080/specs.json">http://localhost:8080/specs.json</a>) or YAML (<a href="http://localhost:8080/specs.json">http://localhost:8080/specs.yaml</a>) formats.</p>
<h2>Use It</h2>
<p>If you actively maintain a Web Spider, or are thinking of writing a Web Spider/Crawler/Scanner, I highly recommend you use the Web Spider Obstacle Course as part of your testing solution. The Obstacle Course will test more than a Web Spiders ability to resolve relative links or only visit a link once.</p>
<p>The internet is a wild place, and will not always obey XHTML 1.1 Strict or HTTP 1.0 standards. Test your Web Spiders fully before setting them loose.</p>
<br /> Tagged: course, crawler, obstacle, ruby, sinatra, spider, test, testing, web, wsoc <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/houseofpostmodern.wordpress.com/236/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/houseofpostmodern.wordpress.com/236/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/houseofpostmodern.wordpress.com/236/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/houseofpostmodern.wordpress.com/236/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/houseofpostmodern.wordpress.com/236/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/houseofpostmodern.wordpress.com/236/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/houseofpostmodern.wordpress.com/236/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/houseofpostmodern.wordpress.com/236/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/houseofpostmodern.wordpress.com/236/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/houseofpostmodern.wordpress.com/236/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/houseofpostmodern.wordpress.com/236/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/houseofpostmodern.wordpress.com/236/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/houseofpostmodern.wordpress.com/236/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/houseofpostmodern.wordpress.com/236/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=houseofpostmodern.wordpress.com&amp;blog=1452568&amp;post=236&amp;subd=houseofpostmodern&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://houseofpostmodern.wordpress.com/2010/01/11/introducing-the-new-web-spider-obstacle-course/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/66f5d5b64b951b3eeb8b6c34fcb69237?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">postmodern3</media:title>
		</media:content>
	</item>
		<item>
		<title>ToorCamp: Ronin &#8211; A Platform for Publishing and Mayhem</title>
		<link>http://houseofpostmodern.wordpress.com/2009/11/01/toorcamp-ronin-a-platform-for-publishing-and-mayhem/</link>
		<comments>http://houseofpostmodern.wordpress.com/2009/11/01/toorcamp-ronin-a-platform-for-publishing-and-mayhem/#comments</comments>
		<pubDate>Sun, 01 Nov 2009 01:53:55 +0000</pubDate>
		<dc:creator>postmodern3</dc:creator>
				<category><![CDATA[ronin]]></category>
		<category><![CDATA[toorcon]]></category>
		<category><![CDATA[toorcamp]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[talk]]></category>
		<category><![CDATA[platform]]></category>
		<category><![CDATA[publishing]]></category>
		<category><![CDATA[mayhem]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://houseofpostmodern.wordpress.com/?p=230</guid>
		<description><![CDATA[I was pretty surprised and pleased when ToorCon finally released videos of the talks at ToorCamp 2009. At this years ToorCon: San Diego DVDs of the talks, pressed by MediaArchives, were handed out. Thanks to Mr. Pierce for grabbing a copy of my talk on Ronin and getting it back to me for transcoding/uploading. The [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=houseofpostmodern.wordpress.com&amp;blog=1452568&amp;post=230&amp;subd=houseofpostmodern&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I was pretty surprised and pleased when ToorCon finally released videos of the talks at <a href="http://toorcamp.org/">ToorCamp 2009</a>. At this years <a href="http://sandiego.toorcon.org/">ToorCon: San Diego</a> DVDs of the talks, pressed by <a href="http://www.mediaarchives.com/">MediaArchives</a>, were handed out. Thanks to <a href="http://deanpierce.net/">Mr. Pierce</a> for grabbing a copy of my talk on <a href="http://ronin-ruby.github.com/">Ronin</a> and getting it back to me for transcoding/uploading. The full talk has been transcoded to <a href="http://theora.org/">Ogg Theora</a> and uploaded to <a href="http://vimeo.com/">vimeo.com</a>. If you have a Vimeo account, you can download the original ogg file as well.</p>
<p><a href="http://vimeo.com/7359548">ToorCamp: Ronin &#8211; A Platform for Publish and Mayhem</a></p>
<p>Original slides can be found <a href="http://ronin.rubyforge.org/talks/publishing_and_mayhem.html">here</a>, in XHTML form.</p>
<p>Thanks go out to <a href="http://github.com/cooperq/">flatline</a> and <a href="http://github.com/evoltech/">evoltech</a> for going with me to ToorCamp, providing transportation and helping hitch-hike back when our van broke down. Also extra thanks to evoltech for letting me use his SUV sized laptop to run the slides on.</p>
<br /> Tagged: mayhem, platform, publishing, ronin, ruby, talk, toorcamp, video <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/houseofpostmodern.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/houseofpostmodern.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/houseofpostmodern.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/houseofpostmodern.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/houseofpostmodern.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/houseofpostmodern.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/houseofpostmodern.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/houseofpostmodern.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/houseofpostmodern.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/houseofpostmodern.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/houseofpostmodern.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/houseofpostmodern.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/houseofpostmodern.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/houseofpostmodern.wordpress.com/230/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=houseofpostmodern.wordpress.com&amp;blog=1452568&amp;post=230&amp;subd=houseofpostmodern&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://houseofpostmodern.wordpress.com/2009/11/01/toorcamp-ronin-a-platform-for-publishing-and-mayhem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/66f5d5b64b951b3eeb8b6c34fcb69237?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">postmodern3</media:title>
		</media:content>
	</item>
		<item>
		<title>Introducing Wordlist 0.1.0</title>
		<link>http://houseofpostmodern.wordpress.com/2009/10/21/introducing-wordlist-0-1-0/</link>
		<comments>http://houseofpostmodern.wordpress.com/2009/10/21/introducing-wordlist-0-1-0/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 06:39:43 +0000</pubDate>
		<dc:creator>postmodern3</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[wordlist]]></category>
		<category><![CDATA[bruteforce]]></category>
		<category><![CDATA[build]]></category>
		<category><![CDATA[crawl]]></category>
		<category><![CDATA[generate]]></category>
		<category><![CDATA[password]]></category>
		<category><![CDATA[rubygem]]></category>
		<category><![CDATA[sophsec]]></category>
		<category><![CDATA[spider]]></category>
		<category><![CDATA[spidr]]></category>
		<category><![CDATA[website]]></category>

		<guid isPermaLink="false">http://houseofpostmodern.wordpress.com/?p=227</guid>
		<description><![CDATA[Update: Evoltech correctly pointed out that the Wordlist::Builders::Website example was incorrect. The Website.build method must take a path argument and then any additional options. For a while now people have asked/told me that I should write a Wordlist library for Ruby. People have also brought up the need to build wordlists from existing corpora; such [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=houseofpostmodern.wordpress.com&amp;blog=1452568&amp;post=227&amp;subd=houseofpostmodern&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h2>Update:</h2>
<p> Evoltech correctly pointed out that the Wordlist::Builders::Website example was incorrect. The Website.build method must take a path argument and then any additional options.</p>
<p>For a while now people have asked/told me that I should write a Wordlist library for Ruby. People have also brought up the need to build wordlists from existing <a href="http://en.wikipedia.org/wiki/Text_corpus">corpora</a>; such as the text from a website. After seeing varying attempts at this task, I finally got serious and released <a href="http://wordlist.rubyforge.org/">Wordlist 0.1.0</a>.</p>
<p>Currently, the design of the Wordlist Ruby library is quite simple. <a href="http://wordlist.rubyforge.org/Wordlist/Builder.html">Wordlist::Builder</a> is the base class for all wordlist builders. It handles parsing text, filtering out duplicate words, and writing the unique words to a file. The Builder class stores the CRC32 hash of each word in a Hash, mapping the word length to the Set of CRC32 hashes. Using a bucket system for the CRC32 hashes, keeps both word lookup time and memory usage to a minimum.</p>
<pre>Wordlist::Builder.build('list.txt') do |builder|
  builder.parse(some_text)
  builder.parse_file('some/file.txt')
end</pre>
<p>Wordlist also provides <a href="http://wordlist.rubyforge.org/Wordlist/Builders/Website.html">Wordlist::Builders::Website</a>, which uses <a href="http://spidr.rubyforge.org/">Spidr</a> to completely spider a host, and build a wordlist from the inner-text recovered from every visited page.</p>
<pre>require 'wordlist/builders/website'

Wordlist::Builders::Website.build('list.txt',:host =&gt; 'www.example.com')</pre>
<p>Wordlist doesn&#8217;t just build wordlists, it can also enumerate them. Wordlist defines <a href="http://wordlist.rubyforge.org/Wordlist/List.html">Wordlist::List</a> as the base class for all wordlist readers. Per convenience, Wordlist also defines <a href="http://wordlist.rubyforge.org/Wordlist/FlatFile.html">Wordlist::FlatFile</a> which handles the enumeration of flat-file wordlists.</p>
<pre>list = Wordlist::FlatFile.new('list.txt')
list.each_word do |word|
  puts word
end</pre>
<p>The <a href="http://wordlist.rubyforge.org/Wordlist/List.html#M000021">Wordlist::List</a> also provides methods for defining text-mutation rules, which are applied in series to each enumerated word.</p>
<pre>list.mutate 'o', '0'
list.mutate '@', 0x41
list.mutate(/[hax]/i) { |match| match.swapcase }

list.each_mutation do |word|
  puts word
end</pre>
<p>A mutation rule takes a String or Regexp (which is used to match a sub-string within a word) and another String, Integer or block which is used as a replacement for the matched sub-string. A mutation rule will perform every possible combination of sub-string replacement, passing each mutated word to the next mutation rule, and so on.</p>
<p>One can install Wordlist using rubygems, by simply running the following command:</p>
<pre>$ sudo gem install wordlist</pre>
<p>The <a href="http://www.git-scm.com/">git</a> repository for Wordlist is located on <a href="http://github.com/sophsec/wordlist">GitHub</a>.</p>
<p>As of 0.1.0, Wordlist is fairly simple but it gets the job done. The library was fun to design and test, as it involved borrowing some techniques typically used in blind-fuzzing. Expect more features and updates to Wordlist as time goes on.</p>
<br /> Tagged: bruteforce, build, crawl, generate, password, ruby, rubygem, sophsec, spider, spidr, website, wordlist <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/houseofpostmodern.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/houseofpostmodern.wordpress.com/227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/houseofpostmodern.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/houseofpostmodern.wordpress.com/227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/houseofpostmodern.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/houseofpostmodern.wordpress.com/227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/houseofpostmodern.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/houseofpostmodern.wordpress.com/227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/houseofpostmodern.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/houseofpostmodern.wordpress.com/227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/houseofpostmodern.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/houseofpostmodern.wordpress.com/227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/houseofpostmodern.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/houseofpostmodern.wordpress.com/227/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=houseofpostmodern.wordpress.com&amp;blog=1452568&amp;post=227&amp;subd=houseofpostmodern&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://houseofpostmodern.wordpress.com/2009/10/21/introducing-wordlist-0-1-0/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/66f5d5b64b951b3eeb8b6c34fcb69237?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">postmodern3</media:title>
		</media:content>
	</item>
		<item>
		<title>Ronin &#8220;big-push&#8221; 0.3.0 released</title>
		<link>http://houseofpostmodern.wordpress.com/2009/10/20/ronin-big-push-0-3-0-released/</link>
		<comments>http://houseofpostmodern.wordpress.com/2009/10/20/ronin-big-push-0-3-0-released/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 09:19:24 +0000</pubDate>
		<dc:creator>postmodern3</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ronin]]></category>
		<category><![CDATA[yard]]></category>
		<category><![CDATA[gemcutter]]></category>
		<category><![CDATA[datamapper]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[tcp]]></category>
		<category><![CDATA[udp]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[thor]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[output]]></category>
		<category><![CDATA[color]]></category>
		<category><![CDATA[ANSI]]></category>

		<guid isPermaLink="false">http://houseofpostmodern.wordpress.com/?p=219</guid>
		<description><![CDATA[The long wait is over. Ronin 0.3.0, code-named &#8220;big-push&#8221;, has finally been released. DataMapper 0.10.0 Ronin was probably one of the first big Ruby apps to upgrade to DataMapper 0.10.0. As a result of this, we had to postpone the release of Ronin 0.3.0, until DataMapper 0.10.0 had finished it&#8217;s rigorous two month Q/A cycle. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=houseofpostmodern.wordpress.com&amp;blog=1452568&amp;post=219&amp;subd=houseofpostmodern&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>The long wait is over. <a href="http://ronin.rubyforge.org/">Ronin</a> 0.3.0, code-named &#8220;big-push&#8221;, has finally been released.</p>
<h2>DataMapper 0.10.0</h2>
<p>Ronin was probably one of the first big Ruby apps to upgrade to <a href="http://datamapper.org/">DataMapper</a> 0.10.0. As a result of this, we had to postpone the release of Ronin 0.3.0, until DataMapper 0.10.0 had finished it&#8217;s rigorous two month Q/A cycle.</p>
<p>Once DataMapper 0.10.0 had been released, the two months of Q/A and almost a complete rewrite of the code-base really showed itself. I think <a href="http://twitter.com/dkubb">@dkubb</a>, <a href="http://twitter.com/dbussink">@dbussink</a>, <a href="http://sick.snusnu.info/">@snusnu</a>, <a href="http://twitter.com/xshay">@xshay</a>, <a href="http://twitter.com/myabc">@myabc</a>, <a href="http://twitter.com/rsim">@rsim</a>, <a href="http://twitter.com/namelessjon">@namelessjon</a>, <a href="http://twitter.com/knowtheory">@knowtheory</a> and everyone else who helped with 0.10.0 deserves applause for their hard work and dedication.</p>
<h2>YARD</h2>
<p>As of 0.3.0, Ronin has successfully moved to <a href="http://yard.soen.ca/">YARD</a> based documentation. The new Ronin API docs can be found in the usual <a href="http://ronin.rubyforge.org/docs/ronin/">location</a>. YARD really helped improve the detail of the Ronin API docs, allowing developers to specify method arguments, accepted object-types, yield arguments, possible exceptions and return-types.</p>
<p>Additionally, YARD handlers were added to Ronin that parsed and regenerated documentation for DataMapper properties/relations. These additional YARD handlers helped improve documentation coverage for Ronin models, such as <a href="http://ronin.rubyforge.org/docs/ronin/Ronin/Arch.html">Ronin::Arch</a> or <a href="http://ronin.rubyforge.org/docs/ronin-exploits/Ronin/Exploits/Exploit.html">Ronin::Exploits::Exploit</a>.</p>
<h2>Ronin::UI::CommandLine</h2>
<p><kbd>Ronin::UI::CommandLine</kbd> was almost entirely refactored in 0.3.0. <a href="http://ronin.rubyforge.org/docs/ronin/Ronin/UI/CommandLine/Command.html">Ronin::UI::CommandLine::Command</a> was rewritten to use <a href="http://yehudakatz.com/2008/05/12/by-thors-hammer/">Thor</a>. Switching to Thor greatly simplified the ronin commands, making it easier to write new commands. A good example of this, is the source-code for the <kbd>install</kbd> command from <a href="http://github.com/postmodern/ronin/blob/0.2.4/lib/ronin/ui/command_line/commands/install.rb#L31">before</a> and <a href="http://github.com/postmodern/ronin/blob/0.3.0/lib/ronin/ui/command_line/commands/install.rb#L28">after</a> 0.3.0.</p>
<p>Another benefit to using Thor, albeit cosmetic, was being able to use Thor&#8217;s ANSI color-output. Normal output will now appear in green, warnings in yellow and error messages in red.</p>
<p>New convenience methods were also added to <kbd>Ronin::UI::CommandLine::Command</kbd> to help format and print various data: <a href="http://ronin.rubyforge.org/docs/ronin/Ronin/UI/CommandLine/Command.html#indent-instance_method">indent</a>, <a href="http://ronin.rubyforge.org/docs/ronin/Ronin/UI/CommandLine/Command.html#print_title-instance_method">print_title</a>, <a href="http://ronin.rubyforge.org/docs/ronin/Ronin/UI/CommandLine/Command.html#print_array-instance_method">print_array</a> and <a href="http://ronin.rubyforge.org/docs/ronin/Ronin/UI/CommandLine/Command.html#print_hash-instance_method">print_hash</a>.</p>
<h2>Ronin::UI::Output</h2>
<p>As of 0.3.0, <kbd>Ronin::UI::Diagnostics</kbd> and <kbd>Ronin::UI::Verbose</kbd> were replaced with the brand new <a href="http://ronin.rubyforge.org/docs/ronin/Ronin/UI/Output.html">Ronin::UI::Output</a> module. <kbd>Ronin::UI::Output</kbd> is designed to delegate how output is handled. By default all output is sent to <a href="http://ronin.rubyforge.org/docs/ronin/Ronin/UI/Output/Handler.html">Ronin::UI::Output::Handler</a>, which prints the output to the terminal. One can override the default output handler by using <a href="http://ronin.rubyforge.org/docs/ronin/Ronin/UI/Output.html#handler%3D-class_method">Ronin::UI::Output.handler=</a>, to specify the new handler module; which must define <kbd>print_info</kbd>, <kbd>print_debug</kbd>, <kbd>print_warning</kbd> and <kbd>print_error</kbd> methods.</p>
<p><kbd>Ronin::UI::Output</kbd> also provides the <a href="http://ronin.rubyforge.org/docs/ronin/Ronin/UI/Output/Helpers.html">Helpers</a> module, which can be included into any class and adds the <a href="http://ronin.rubyforge.org/docs/ronin/Ronin/UI/Output/Helpers.html#print_info-instance_method">print_info</a>, <a href="http://ronin.rubyforge.org/docs/ronin/Ronin/UI/Output/Helpers.html#print_debug-instance_method">print_debug</a>, <a href="http://ronin.rubyforge.org/docs/ronin/Ronin/UI/Output/Helpers.html#print_warning-instance_method">print_warning</a> and <a href="http://ronin.rubyforge.org/docs/ronin/Ronin/UI/Output/Helpers.html#print_error-instance_method">print_error</a> methods.</p>
<h2>New Convenience Methods</h2>
<p>New TCP and UDP networking methods were added to 0.3.0. Now one can easily create TCP/UDP servers using, <a href="http://ronin.rubyforge.org/docs/ronin/Net.html#tcp_server-class_method">Net.tcp_server</a>, <a href="http://ronin.rubyforge.org/docs/ronin/Net.html#tcp_server_session-class_method">Net.tcp_server_session</a>, <a href="http://ronin.rubyforge.org/docs/ronin/Net.html#tcp_single_server-class_method">Net.tcp_single_server</a>, <a href="http://ronin.rubyforge.org/docs/ronin/Net.html#udp_server-class_method">Net.udp_server</a> and <a href="http://ronin.rubyforge.org/docs/ronin/Net.html#udp_server_session-class_method">Net.udp_server_session</a>.</p>
<p><a href="http://ronin.rubyforge.org/docs/ronin/Ronin/Network/HTTP/Proxy.html">Ronin::Network::HTTP::Proxy</a> was also added to 0.3.0. The <kbd>Ronin::Network::HTTP::Proxy</a> helps parse and represent HTTP proxy addresses, and is now used by <a href="http://ronin.rubyforge.org/docs/ronin/Ronin/Network/HTTP.html#proxy-class_method">Ronin::Network::HTTP.proxy</a> and all <kbd>:proxy</kbd> options.</p>
<pre>proxy = Network::HTTP::Proxy.parse('148.233.239.24:80')
# =&gt; #&lt;Ronin::Network::HTTP::Proxy: 148.233.239.24:80&gt;</pre>
<p>The <kbd>Proxy</kbd> class can also be used to test a proxy.</p>
<pre>proxy.valid?
# =&gt; true
proxy.lag
# =&gt; 0.003881</pre>
<h2>Ronin::Platform</h2>
<p>The <a href="http://github.com/postmodern/ronin/blob/0.3.0/static/ronin/platform/overlay.xsl">overlay.xsl</a> file got a make-over in 0.3.0. <kbd>overlay.xsl</kbd> is a XML StyleSheet, which helps render <a href="http://github.com/postmodern/postmodern-overlay/raw/master/ronin.xml">ronin.xml</a> files from Overlays into proper XHTML when they are viewed in a web-browser. Now <kbd>ronin.xml</kbd> files should appear more like a standard "About" web-page.</p>
<p>Reloading Overlays/Extensions while ronin is running became possible with the addition of <a href="http://ronin.rubyforge.org/docs/ronin/Ronin/Platform.html#reload%21-class_method">Ronin::Platform.reload!</a>. Now if an Extension is modified, one can simply call <kbd>Platform.reload!</kbd> and get the updated version.</p>
<p>Ronin Extensions gained convenience methods for defining reader/writer methods to instance variables: <a href="http://ronin.rubyforge.org/docs/ronin/Ronin/Platform/Extension.html#attr_reader-instance_method">attr_reader</a>, <a href="http://ronin.rubyforge.org/docs/ronin/Ronin/Platform/Extension.html#attr_writer-instance_method">attr_writer</a> and <a href="http://ronin.rubyforge.org/docs/ronin/Ronin/Platform/Extension.html#attr_accessor-instance_method">attr_accessor</a>. They can be used in Ronin Extensions, just as one would use them in a class.</p>
<pre>ronin_extension do

  attr_accessor :var
  attr_reader :result

  setup do
    @var = 5
    @result = nil
  end
  ...
end</pre>
<p>Ronin Extensions also gained their own on-demand temp directory. When <a href="http://ronin.rubyforge.org/docs/ronin/Ronin/Platform/Extension.html#tmp_dir-instance_method">Ronin::Platform::Extension#tmp_dir</a> is called, a temp directory specifically for the extension will be created within <kbd>~/.ronin/tmp/</kbd>, and the path of the new temp directory will be returned.</p>
<h2>Upgrading</h2>
<p>As always, the rubygem files for Ronin 0.3.0 are available on <a href="http://rubyforge.org/frs/?group_id=3798">rubyforge.org</a>. One can update Ronin using rubygems by simplying running:</p>
<pre>$ gem update ronin</pre>
<p>Likewise, one can also install Ronin using rubygems:</p>
<pre>$ gem install ronin</pre>
<p>Also, as of Ronin 0.3.0 all releases of Ronin will also be made available on <a href="http://gemcutter.org/">gemcutter.org</a>.</p>
<br /> Tagged: ANSI, color, datamapper, gemcutter, http, output, proxy, ronin, ruby, server, tcp, test, thor, udp, yard <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/houseofpostmodern.wordpress.com/219/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/houseofpostmodern.wordpress.com/219/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/houseofpostmodern.wordpress.com/219/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/houseofpostmodern.wordpress.com/219/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/houseofpostmodern.wordpress.com/219/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/houseofpostmodern.wordpress.com/219/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/houseofpostmodern.wordpress.com/219/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/houseofpostmodern.wordpress.com/219/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/houseofpostmodern.wordpress.com/219/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/houseofpostmodern.wordpress.com/219/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/houseofpostmodern.wordpress.com/219/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/houseofpostmodern.wordpress.com/219/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/houseofpostmodern.wordpress.com/219/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/houseofpostmodern.wordpress.com/219/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=houseofpostmodern.wordpress.com&amp;blog=1452568&amp;post=219&amp;subd=houseofpostmodern&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://houseofpostmodern.wordpress.com/2009/10/20/ronin-big-push-0-3-0-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/66f5d5b64b951b3eeb8b6c34fcb69237?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">postmodern3</media:title>
		</media:content>
	</item>
	</channel>
</rss>
