<?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, 08 Nov 2009 06:05:01 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='houseofpostmodern.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/f61083c7c27d3439f4298d7ce1679a66?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>House of Postmodern</title>
		<link>http://houseofpostmodern.wordpress.com</link>
	</image>
			<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[toorcamp]]></category>
		<category><![CDATA[toorcon]]></category>
		<category><![CDATA[mayhem]]></category>
		<category><![CDATA[platform]]></category>
		<category><![CDATA[publishing]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[talk]]></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&blog=1452568&post=230&subd=houseofpostmodern&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><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.rubyforge.org/">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>
 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/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&blog=1452568&post=230&subd=houseofpostmodern&ref=&feed=1" /></div>]]></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 as [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=houseofpostmodern.wordpress.com&blog=1452568&post=227&subd=houseofpostmodern&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><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>
 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/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&blog=1452568&post=227&subd=houseofpostmodern&ref=&feed=1" /></div>]]></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[gemcutter]]></category>
		<category><![CDATA[ronin]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[yard]]></category>
		<category><![CDATA[ANSI]]></category>
		<category><![CDATA[color]]></category>
		<category><![CDATA[datamapper]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[output]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[tcp]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[thor]]></category>
		<category><![CDATA[udp]]></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.
Once DataMapper 0.10.0 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=houseofpostmodern.wordpress.com&blog=1452568&post=219&subd=houseofpostmodern&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><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>
 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/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&blog=1452568&post=219&subd=houseofpostmodern&ref=&feed=1" /></div>]]></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>
		<item>
		<title>New project mailing lists</title>
		<link>http://houseofpostmodern.wordpress.com/2009/10/18/new-project-mailing-lists/</link>
		<comments>http://houseofpostmodern.wordpress.com/2009/10/18/new-project-mailing-lists/#comments</comments>
		<pubDate>Sun, 18 Oct 2009 00:42:55 +0000</pubDate>
		<dc:creator>postmodern3</dc:creator>
				<category><![CDATA[ronin]]></category>
		<category><![CDATA[spidr]]></category>
		<category><![CDATA[irc]]></category>
		<category><![CDATA[privacy]]></category>

		<guid isPermaLink="false">http://houseofpostmodern.wordpress.com/?p=214</guid>
		<description><![CDATA[As I&#8217;ve begun to get increasing amounts of email from other developers and users, I&#8217;ve wondered whether it&#8217;s time to setup some mailing-lists.
Well, thanks to the efforts of Franck D&#8217;agostini, Spidr now has a mailing-list. I hope this mailing-list will help foster interesting discussions between users/developers and possible improvements to Spidr.
I also took the liberty [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=houseofpostmodern.wordpress.com&blog=1452568&post=214&subd=houseofpostmodern&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>As I&#8217;ve begun to get increasing amounts of email from other developers and users, I&#8217;ve wondered whether it&#8217;s time to setup some mailing-lists.</p>
<p>Well, thanks to the efforts of Franck D&#8217;agostini, <a href="http://spidr.rubyforge.org/">Spidr</a> now has a <a href="http://groups.google.com/group/spidr">mailing-list</a>. I hope this mailing-list will help foster interesting discussions between users/developers and possible improvements to Spidr.</p>
<p>I also took the liberty of setting up an IRC channel for Spidr, since IRC is still a mainstay of developers (although I like <a href="http://xmpp.org/about/">XMPP</a> a little more). Just join <a href="irc://irc.freenode.net/#spidr">#spidr</a> on <a href="http://freenode.net/">irc.freenode.net</a>.</p>
<p>Seeing the potential for how mailing-lists can help a project, I also setup a <a href="http://groups.google.com/group/ronin-ruby">Google Group</a> for <a href="http://ronin.rubyforge.org/">Ronin</a>. <b>Obvious Privacy Warning:</b> Since Google indexes pretty much everything, sketchy discussions relating to Ronin should probably happen somewhere beyond Google&#8217;s reach, for one&#8217;s own security and privacy.</p>
<p>So yeah, let&#8217;s see what will happen.</p>
 Tagged: irc, privacy, ronin, spidr <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/houseofpostmodern.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/houseofpostmodern.wordpress.com/214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/houseofpostmodern.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/houseofpostmodern.wordpress.com/214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/houseofpostmodern.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/houseofpostmodern.wordpress.com/214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/houseofpostmodern.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/houseofpostmodern.wordpress.com/214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/houseofpostmodern.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/houseofpostmodern.wordpress.com/214/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=houseofpostmodern.wordpress.com&blog=1452568&post=214&subd=houseofpostmodern&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://houseofpostmodern.wordpress.com/2009/10/18/new-project-mailing-lists/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>Spidr &#8220;solid&#8221; 0.2.0</title>
		<link>http://houseofpostmodern.wordpress.com/2009/10/14/spidr-solid-0-2-0/</link>
		<comments>http://houseofpostmodern.wordpress.com/2009/10/14/spidr-solid-0-2-0/#comments</comments>
		<pubDate>Wed, 14 Oct 2009 05:04:16 +0000</pubDate>
		<dc:creator>postmodern3</dc:creator>
				<category><![CDATA[ruby]]></category>
		<category><![CDATA[spidr]]></category>
		<category><![CDATA[yard]]></category>
		<category><![CDATA[crawl]]></category>
		<category><![CDATA[crawler]]></category>
		<category><![CDATA[gemcutter]]></category>
		<category><![CDATA[https]]></category>
		<category><![CDATA[link]]></category>
		<category><![CDATA[page]]></category>
		<category><![CDATA[pause]]></category>
		<category><![CDATA[skip]]></category>
		<category><![CDATA[spider]]></category>
		<category><![CDATA[ssl]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://houseofpostmodern.wordpress.com/?p=209</guid>
		<description><![CDATA[After a period of refactoring, Spidr 0.2.0 (code-named &#8220;solid&#8221;) has been released. Many things we&#8217;re added to this release, along with some very important bug-fixes and optimizations.
Major changes
Spidr, along with many of my other projects, has moved to YARD based documentation. YARD&#8217;s tag based documentation format really helped me annotate every method within Spidr. The [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=houseofpostmodern.wordpress.com&blog=1452568&post=209&subd=houseofpostmodern&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>After a period of refactoring, <a href="http://spidr.rubyforge.org/">Spidr</a> 0.2.0 (code-named &#8220;solid&#8221;) has been released. Many things we&#8217;re added to this release, along with some very important bug-fixes and optimizations.</p>
<h2>Major changes</h2>
<p>Spidr, along with many of my other projects, has moved to <a href="http://yard.soen.ca/">YARD</a> based documentation. YARD&#8217;s tag based documentation format really helped me annotate every method within Spidr. The new YARD docs can be found in the usual <a href="http://spidr.rubyforge.org/docs/">location</a>.</p>
<p>Also following suite with many of my other projects, you can now find Spidr on the awesome and easy to use <a href="http://gemcutter.org/gems/spidr">gemcutter.org</a>.</p>
<p>Spidr should be a little faster now. Thanks to the work of <a href="http://github.com/justfalter/">justfalter</a>, HTTP sessions with unique hosts/ports are now cached and resued. HTTP sessions no longer have to be re-initialized upon every request. Also, the history and failures lists are now Ruby Sets, yielding improved lookup times for checking if a link has been previously visted.</p>
<p>The code-base of Spidr should be a little more organized. Many methods within <a href="http://spidr.rubyforge.org/docs/Spidr/Agent.html">Spidr::Agent</a> were grouped by functionality and moved to separate modules (<a href="http://spidr.rubyforge.org/docs/Spidr/Events.html">Events</a> and <a href="http://spidr.rubyforge.org/docs/Spidr/Filters.html">Filters</a>) which are included back into <kbd>Spidr::Agent</kbd>.</p>
<p>The <a href="http://spidr.rubyforge.org/docs/Spidr/Actions.html">Spidr::Actions</a> module was also added, which adds action methods that control spidering from within <a href="http://spidr.rubyforge.org/docs/Spidr/Events.html#every_url-instance_method">every_url</a>, <a href="http://spidr.rubyforge.org/docs/Spidr/Events.html#every_page-instance_method">every_page</a>, <a href="http://spidr.rubyforge.org/docs/Spidr/Events.html#every_failed_url-instance_method">every_failed_url</a>, <a href="http://spidr.rubyforge.org/docs/Spidr/Events.html#all_headers-instance_method">all_headers</a> event hooks. The <a href="http://spidr.rubyforge.org/docs/Spidr/Actions.html#pause%21-instance_method">pause!</a> method will pause the spider, while <a href="http://spidr.rubyforge.org/docs/Spidr/Actions.html#skip_page%21-instance_method">skip_page!</a> and <a href="http://spidr.rubyforge.org/docs/Spidr/Actions.html#skip_link%21-instance_method">skip_link!</a> can manipulate the processing of pages/links.</p>
<p>The <a href="http://spidr.rubyforge.org/docs/Spidr/Page.html#search-instance_method">Spidr::Page#search</a>, <a href="http://spidr.rubyforge.org/docs/Spidr/Page.html#at-instance_method">Spidr::Page#at</a>, <a href="http://spidr.rubyforge.org/docs/Spidr/Page.html#title-instance_method">Spidr::Page#title</a> methods were also added. These methods should make <kbd>Spidr::Page</kbd> feel alittle more like <a href="http://mechanize.rubyforge.org/mechanize/WWW/Mechanize/Page.html">WWW::Mechanize::Page</a>, allowing one to search the DOM (parsed by <a href="http://nokogiri.rubyforge.org/nokogiri/">Nokogiri</a>) with XPath/CSS-path expressions.</p>
<p>Lastly, many new examples which highlight some of the less-than-trivial things you can do with Spidr have been added to the <a href="http://spidr.rubyforge.org/#examples">website</a> and <a href="http://spidr.rubyforge.org/docs/">docs</a>.</p>
<h2>Important bug-fixes</h2>
<p><a href="http://spidr.rubyforge.org/docs/Spidr/Agent.html">Spidr::Agent</a> should now properly handle the spidering of SSL protected websites. Also thanks to <a href="http://github.com/justfalter/">justfalter</a>, HTTPS sessions are now properly initialized and stored in the HTTP session cache; so the SSL-handshake only need be performed once per unique host/port.</p>
<p><a href="http://spidr.rubyforge.org/docs/Spidr/Agent.html#get_page-instance_method">Spidr::Agent#get_page</a> will now correctly send the URI query along with the URI path for HTTP requests. Thanks go out to Damian Steer for reporting this.</p>
<p><a href="http://spidr.rubyforge.org/docs/Spidr/Page.html#doc-instance_method">Spidr::Page#doc</a> now returns a <a href="http://nokogiri.rubyforge.org/nokogiri/Nokogiri/XML/Document.html">Nokogiri::XML::Document</a> object for RSS/RDF/Atom pages, allowing one to properly search RSS/Atom feeds.</p>
<p><a href="http://spidr.rubyforge.org/docs/Spidr/Page.html#code-instance_method">Spidr::Page#code</a> will now return the HTTP Status code as an Integer.</p>
<p><a href="http://spidr.rubyforge.org/docs/Spidr/Page.html#links-instance_method">Spidr::Page#links</a> now properly handles the HTTP <kbd>Location</kbd> header.</p>
<p>The URI expansion/normalization performed by <a href="http://spidr.rubyforge.org/docs/Spidr/Page.html#to_absolute-instance_method">Spidr::Page#to_absolute</a> was greatly improved. <kbd>Spidr::Page#to_absolute</kbd> will now properly preserve trailing &#8216;/&#8217; characters on URI paths.</p>
<h2>Shout Outs</h2>
<p>A big thanks to everyone who helped with Spidr 0.2.0 by reporting bugs and testing new code. I hope this release will help users get more out of Spidr.</p>
 Tagged: crawl, crawler, gemcutter, https, link, page, pause, skip, spider, spidr, ssl, web <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/houseofpostmodern.wordpress.com/209/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/houseofpostmodern.wordpress.com/209/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/houseofpostmodern.wordpress.com/209/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/houseofpostmodern.wordpress.com/209/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/houseofpostmodern.wordpress.com/209/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/houseofpostmodern.wordpress.com/209/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/houseofpostmodern.wordpress.com/209/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/houseofpostmodern.wordpress.com/209/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/houseofpostmodern.wordpress.com/209/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/houseofpostmodern.wordpress.com/209/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=houseofpostmodern.wordpress.com&blog=1452568&post=209&subd=houseofpostmodern&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://houseofpostmodern.wordpress.com/2009/10/14/spidr-solid-0-2-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>Ruby things worth looking into</title>
		<link>http://houseofpostmodern.wordpress.com/2009/09/26/ruby-things-worth-looking-into/</link>
		<comments>http://houseofpostmodern.wordpress.com/2009/09/26/ruby-things-worth-looking-into/#comments</comments>
		<pubDate>Sat, 26 Sep 2009 01:00:47 +0000</pubDate>
		<dc:creator>postmodern3</dc:creator>
				<category><![CDATA[ffi]]></category>
		<category><![CDATA[gemcutter]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[rubygems]]></category>
		<category><![CDATA[sinatra]]></category>
		<category><![CDATA[thor]]></category>
		<category><![CDATA[yard]]></category>
		<category><![CDATA[gem]]></category>
		<category><![CDATA[handler]]></category>
		<category><![CDATA[libffi]]></category>
		<category><![CDATA[rack]]></category>
		<category><![CDATA[rdoc]]></category>

		<guid isPermaLink="false">http://houseofpostmodern.wordpress.com/?p=191</guid>
		<description><![CDATA[Over the past couple of months, I&#8217;ve been researching and playing with various up-and-coming Ruby libraries/services. So I thought it would be useful for other developers if I wrote something up.
Sinatra
If you already haven&#8217;t heard, Sinatra is cool sauce. Sinatra is a Ruby Domain Specific Language for creating web-apps that can fit in a single [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=houseofpostmodern.wordpress.com&blog=1452568&post=191&subd=houseofpostmodern&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Over the past couple of months, I&#8217;ve been researching and playing with various up-and-coming Ruby libraries/services. So I thought it would be useful for other developers if I wrote something up.</p>
<h2>Sinatra</h2>
<p>If you already haven&#8217;t heard, <a href="http://www.sinatrarb.com/intro.html">Sinatra</a> is cool sauce. Sinatra is a Ruby Domain Specific Language for creating web-apps that can fit in a single file.</p>
<pre># myapp.rb
require 'rubygems'
require 'sinatra'
get '/' do
  'Hello world!'
end</pre>
<pre>$ gem install sinatra
$ ruby myapp.rb</pre>
<p>It&#8217;s that easy. But let&#8217;s say you want to create an app accessible as a Class, just inherit Sinatra::Base.</p>
<pre>require 'rubygems'
require 'sinatra'

class MyApp &lt; Sinatra::Base

  get &#39;/&#39; do
    &#39;Hello world!&#39;
  end

end</pre>
<p>I found the URL param parsing and request routing on-par with that of Merb/Rails. I also enjoyed the <kbd>halt</kbd> and <kbd>pass</kbd> methods, which will cause Sinatra to re-route a request to other handlers.</p>
<p>Defining helper methods which can be used within request handlers was as easy as creating a module with some instance methods, then registering the module using the <kbd>helpers</kbd> method.</p>
<pre>module Helpers
  module Rendering
    include Rack::Utils

    alias h escape_html
  end
end

class MyApp &lt; Sinatra::Base

  helpers Helpers::Rendering

end</pre>
<p>Sinatra is built on top of Rack, so reviewing the <a href="http://rack.rubyforge.org/">Rack API</a> might not hurt. The current Rack::Request object can be accessed via the <kbd>request</kbd> method. The return value of a request handler can be a String, Array of Strings or even a Rack::Response object. Sinatra also provides the Rack <a href="http://vision-media.ca/resources/ruby/ruby-rack-middleware-tutorial">call</a> method, which can be overridden for more custom request routing (such as vhost routing to other Rack apps). Given Sinatra&#8217;s <a href="http://www.sinatrarb.com/api/index.html">API Documentation</a>, it&#8217;s fairly easy to customize and extend your Sinatra app.</p>
<h2>Thor</h2>
<p><a href="http://github.com/wycats/thor/">Thor</a> is an alternative to <a href="http://rake.rubyforge.org/">Rake</a> or <a href="http://www.rubyinside.com/sake-system-wide-rake-tasks-543.html">Sake</a>. Thor makes it very easy to define tasks as methods, and define command-line options/arguments for those tasks using a succinct syntax.</p>
<p>Thor tasks can be invoked via the <kbd>thor command, or loading the Thor class and calling the <kbd>start</kbd> method directly.</p>
<p>I also noticed that Rails3 is using Thor::Group and Thor::Actions, to create <a>code generators</a>.</p>
<p>While documentation is scarce for Thor, I fould it's <a href="http://github.com/wycats/thor/">code-base</a> fairly readable.</p>
<h2>FFI</h2>
<p>There's an easier way to write Ruby extensions to C libraries. It's called FFI, or Foreign Function Interface. <a href="http://github.com/ffi/ffi/">Ruby FFI</a> is a rubygem (named <kbd>ffi</kbd>) by Wayne Meissner which wraps around <a href="http://sourceware.org/libffi/">libffi</a>, to provide a Ruby interface to load libraries, attach functions, variables and mapping in Structs/Unions/enums/callbacks.</p>
<p>To create a Ruby interface to a library, simply create a module which extends FFI::Library and attach some functions as module methods.</p>
<pre>module FFI
  module TRE
    extend FFI::Library

    ffi_lib 'tre' # finds and loads the library

    # attaches a function named tre_regcomp, and defines the
    # types for it's arguments and return value.
    attach_function :tre_regcomp, [:pointer, :pointer, :int], :int
    # ...
  end
end</pre>
<p>More examples can be found <a href="http://wiki.github.com/ffi/ffi/examples">here</a>.</p>
<p>If you need to quickly write bindings for a library, give FFI a shot. Another benefit of having FFI Ruby bindings, is that they will work seamlessly with <a href="http://jruby.com/">JRuby</a> and <a href="http://rubini.us/">Rubinius</a>, on any platform that is supported by libffi.</p>
<h2>YARD</h2>
<p><a href="http://yard.soen.ca/">YARD</a> is an alternative to the defacto RDoc documentation generation, that allows one to annotate code using a <a href="http://yard.soen.ca/getting_started#docing">@tag</a> based syntax and Markdown/Textile/RDoc formatting. YARD stores all the gathered documentation information in a Marshalable data-store file (<kbd>.yardoc</kbd>), which opens the door to on-the-fly documentation searching. YARD can also export it's data to XML or XHTML+CSS+jQuery.</p>
<p>Want to use YARD in your project? Drop this task into your Rakefile.</p>
<pre>YARD::Rake::YardocTask.new do |t|
  t.files   = ['lib/**/*.rb']
  t.options = [
    '--protected',
    '--files', 'History.txt',
    '--title', 'MyProject'
  ]
end

task :docs =&gt; :yardoc</pre>
<pre>$ rake docs &amp;&amp; firefox doc/index.html</pre>
<p>Want to use YARD on someone else's (github) project, checkout <a href="http://rdoc.info/">rdoc.info</a>, it's built on YARD and Ruby 1.8.7.</p>
<p>YARD can also be extended to detect and document meta-programming methods which define other methods at runtime. For example, this <a href="http://github.com/postmodern/parameters/blob/master/lib/parameters/yard/handlers/ruby/parameter_handler.rb">YARD handler</a> (for Ruby 1.9.x) which documents <kbd>parameter</kbd> method-calls from the <a href="http://parameters.rubyforge.org/">Parameters</a> library.</p>
<p>Loren Segal's <a href="http://gnuu.org/2009/06/17/yard-at-montreal-rb/">slides</a> from his YARD presentation at Montreal.rb are also worth checking out.</p>
<h2>Gemcutter</h2>
<p><a href="http://gemcutter.org/">Gemcutter</a> provides easy and fun RubyGem hosting, which is <a href="http://github.com/qrush/gemcutter">open-source</a> and aims to become the <a href="http://www.mail-archive.com/rubygems-developers@rubyforge.org/msg03123.html">the default gem hosting solution</a> for Ruby. Did I mention that it looks classy (thanks to a redesign by <a href="http://robots.thoughtbot.com/post/165832471/gemcutter-org-redesign-preview">ThoughtBot</a>)?</p>
<p>Publishing gems to Gemcutter is as easy as running:</p>
<pre>gem push pkg/my_project-0.1.0.gem</pre>
<p>The <kbd>gem push</kbd> command can override previously uploaded versions of a gem. No more going into Rubyforge's File Admin panel to delete mistakenly uploaded versions, just run <kbd>gem push</kbd> again.</p>
<p>Also, Gemcutter is a <a href="http://www.sinatrarb.com/">Sinatra</a> app running on <a href="http://heroku.com/">Heruko</a>.</p>
 Tagged: ffi, gem, gemcutter, handler, libffi, rack, rdoc, ruby, rubygems, sinatra, thor, yard <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/houseofpostmodern.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/houseofpostmodern.wordpress.com/191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/houseofpostmodern.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/houseofpostmodern.wordpress.com/191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/houseofpostmodern.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/houseofpostmodern.wordpress.com/191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/houseofpostmodern.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/houseofpostmodern.wordpress.com/191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/houseofpostmodern.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/houseofpostmodern.wordpress.com/191/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=houseofpostmodern.wordpress.com&blog=1452568&post=191&subd=houseofpostmodern&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://houseofpostmodern.wordpress.com/2009/09/26/ruby-things-worth-looking-into/feed/</wfw:commentRss>
		<slash:comments>1</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;toorcamp&#8221; 0.2.4 finally released</title>
		<link>http://houseofpostmodern.wordpress.com/2009/07/19/ronin-toorcamp-0-2-4-finally-released/</link>
		<comments>http://houseofpostmodern.wordpress.com/2009/07/19/ronin-toorcamp-0-2-4-finally-released/#comments</comments>
		<pubDate>Sun, 19 Jul 2009 21:24:50 +0000</pubDate>
		<dc:creator>postmodern3</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[ronin]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[1.9.1]]></category>
		<category><![CDATA[fork]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[intext]]></category>
		<category><![CDATA[ronin-dorks]]></category>
		<category><![CDATA[ronin-exploits]]></category>
		<category><![CDATA[ronin-gen]]></category>
		<category><![CDATA[ronin-php]]></category>
		<category><![CDATA[ronin-scanners]]></category>
		<category><![CDATA[ronin-sql]]></category>
		<category><![CDATA[ronin-web]]></category>
		<category><![CDATA[Scanner]]></category>
		<category><![CDATA[scanners]]></category>
		<category><![CDATA[toorcamp]]></category>
		<category><![CDATA[website]]></category>

		<guid isPermaLink="false">http://houseofpostmodern.wordpress.com/?p=174</guid>
		<description><![CDATA[Update: As CG points out, I forgot to post the slides from the ToorCamp presentation. Here they are in XHTML form.
Update: @sanitybit discovered that parameters 0.1.7, which is required by ronin 0.2.4, was not released. Parameters 0.1.7 has now been released.
As promised in the Ronin: A Platform for Publishing and Mayhem talk at ToorCamp, Ronin [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=houseofpostmodern.wordpress.com&blog=1452568&post=174&subd=houseofpostmodern&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><b>Update:</b> As <a href="http://carnal0wnage.attackresearch.com/blog/7">CG</a> points out, I forgot to post the slides from the ToorCamp presentation. Here they are in <a href="http://ronin.rubyforge.org/talks/publishing_and_mayhem.html">XHTML form</a>.</p>
<p><b>Update:</b> @<a href="http://twitter.com/sanitybit">sanitybit</a> discovered that <a href="http://rubyforge.org/projects/parameters">parameters</a> 0.1.7, which is required by ronin 0.2.4, was not released. Parameters 0.1.7 has now been released.</p>
<p>As promised in the <a href="http://toorcamp.org/content/B5">Ronin: A Platform for Publishing and Mayhem</a> talk at <a href="http://toorcamp.org/">ToorCamp</a>, Ronin 0.2.4 has finally been released. I was wanting to release 0.2.4 before ToorCamp, and hand out copies while there, but due to time constraints I had to wait till after the event.</p>
<p><code>
<pre>$ gem update</pre>
<p></code></p>
<h2>Signed RubyGems</h2>
<p>All released versions of Ronin, from 0.2.4 onward, will be signed. You can download the public certificate used to verify all of my gems <a href="http://rubyforge.org/frs/download.php/57952/postmodern-public_cert.pem">here</a>. A more in depth explanation of RubyGem Signing is given in <a href="http://rubygems.org/read/chapter/21">Chapter 21</a> of the <a href="http://rubygems.org/read/">RubyGems Manual</a>.</p>
<h2>Bug Fixes</h2>
<p>Mr. <a href="//github.com/evoltech/">evoltech</a> discovered and fixed a bug in the lookup of command names containing dashes, which was causing issues with the <a href="http://ronin.rubyforge.org/gen/">ronin-gen</a> commands. <a href="http://github.com/cooperq/">flatline</a> also improved the reliability of the caching of exploits from Overlays, now any exceptions raised during the caching of each exploit will be ignored.</p>
<h2>Bytes and Chars</h2>
<p>The 0.2.4 release now comes with new convenience methods to make working with byte and char <a href="http://ronin.rubyforge.org/docs/ronin/Array.html">Arrays</a> easier:<br />
<code>
<pre>[0x41, 0x41, 0x42].chars
# =&gt; ["A", "A", "B"]</pre>
<p></code></p>
<p><code>
<pre>["A", "B"].bytes
# =&gt; [0x41, 0x42]</pre>
<p></code></p>
<p><code>
<pre>[0x41, 0x41, 0x41].char_string
# =&gt; "AAB"</pre>
<p></code></p>
<h2>Un-Hexdumping</h2>
<p>The <a href="http://ronin.rubyforge.org/docs/ronin/File.html#unhexdump-class_method">File.unhexdump</a> method was also added, making it even easier to un-hexdump those dumps.</p>
<h2>Exceptions</h2>
<p>Occasionally one needs to run some code which may raise exceptions, but you might not care about such exceptions, and would rather have them printed out. The <a href="http://ronin.rubyforge.org/docs/ronin/Kernel.html#catch_all-instance_method">catch_all</a> method does exactly that. <kbd>catch_all</kbd> will catch all exceptions and print abbreviated back-traces.</p>
<p><code>
<pre>require 'resolv'

catch_all do
  Resolv.getaddress('www.wired.com')
end</pre>
<p></code></p>
<p>Another note-worth change in 0.2.4, was the renaming of the <kbd>try</kbd> method to <kbd>attempt</kbd>; so as not to conflict with JRuby&#8217;s <kbd>try</kbd> method.</p>
<h2>HTTP</h2>
<p>The <a href="http://ronin.rubyforge.org/docs/ronin/Net.html#http_request-class_method">Net.http_request</a> method was added, allowing one to make arbitrary HTTP Requests, just specify the <kbd>:method</kbd> option.</p>
<p><code>
<pre>Net.http_request(:host =&gt; 'www.example.com', :method =&gt; :head)</pre>
<p></code></p>
<h2>Templates::Erb</h2>
<p>The <a href="http://ronin.rubyforge.org/docs/ronin/Ronin/Templates/Erb.html">Templates::Erb</a> module was added in 0.2.4, providing convenience methods for rendering <a href="http://www.ruby-doc.org/stdlib/libdoc/erb/rdoc/index.html">Embedded Ruby</a> (ERB) templates.</p>
<h2>Scanners::Scanner</h2>
<p>The <a href="http://ronin.rubyforge.org/docs/ronin/Ronin/Scanners/Scanner.html">Scanners::Scanner</a> module was also added in 0.2.4. The Scanner module can be included into any class and allows one to define multiple scanner rules by name, which are ran against each target, returning results in real-time via a callback.</p>
<p>An example usage of Scanners::Scanner would be to add scanner rules to all IPAddr objects, having each IP address within a netmask scanned.</p>
<p><code>
<pre>
require 'ronin/scanners/scanner'
require 'ronin/extensions/ip_addr'

class IPAddr

  include Ronin::Scanners::Scanner

  scanner(:dns) do |ip,results|
    Resolve.getnames(ip).each do |name|
      results.call(name)
    end
  end

  def each_target(&amp;block)
    each(&amp;block)
  end

end</pre>
<p></code></p>
<p>First we include Ronin::Scanners::Scanner into the IPAddr class. Then we define a simple scanner rule to perform reverse DNS lookup on an IP address and returns the results using the <kbd>result</kbd> callback. Finally we define the <kbd>each_target</kbd> method which enumerates over each IP address in the netmask, passing each to the block to be scanned.</p>
<p>To run all scanner rules on an IPAddr range:<br />
<code>
<pre>ip = IPAddr.new('10.1.1.1/24')
ip.scan</pre>
<p></code></p>
<p>To only run the DNS scanner rule:<br />
<code>
<pre>ip.dns_scan</pre>
<p></code></p>
<p>The SQL Injection, LFI and RFI scanning code has now been ported to use Scanners::Scanner.</p>
<h2>Accessible Extensions</h2>
<p>Extensions from Overlays are now more accessible. Within the Ronin console, they can be accessed as local variables:<br />
<code>
<pre>puts milw0rm.remote.first_page</pre>
<p></code></p>
<p>This is all thanks to the new Ronin#method_missing method; which catches missing instance method calls, and attempts to load the appropriate extension.</p>
<h2>Command Name Changes</h2>
<p>The <kbd>ls</kbd> and <kbd>rm</kbd> ronin commands have now been renamed to <kbd>list</kbd> and <kbd>remove</kbd>, respectively.</p>
<p>To list all installed Overlays:<br />
<code>
<pre>$ ronin list</pre>
<p></code></p>
<p>To remove (but not delete) an Overlay:<br />
<code>
<pre>$ ronin remove overlay-name</pre>
<p></code></p>
<h2>New Dorks</h2>
<p>ronin-dorks 0.1.2 saw the addition of the <a href="http://ronin.rubyforge.org/docs/ronin-dorks/Ronin/Web/Dorks.html#intext-class_method">intext</a>, <a href="http://ronin.rubyforge.org/docs/ronin-dorks/Ronin/Web/Dorks.html#allintext-class_method">allintext</a>, <a href="http://ronin.rubyforge.org/docs/ronin-dorks/Ronin/Web/Dorks.html#string_intext-class_method">string_intext</a>, <a href="http://ronin.rubyforge.org/docs/ronin-dorks/Ronin/Web/Dorks.html#all_strings_intext-class_method">all_strings_intext</a>, <a href="http://ronin.rubyforge.org/docs/ronin-dorks/Ronin/Web/Dorks.html#intitle-class_method">intitle</a>, <a href="http://ronin.rubyforge.org/docs/ronin-dorks/Ronin/Web/Dorks.html#allintitle-class_method">allintitle</a>, <a href="http://ronin.rubyforge.org/docs/ronin-dorks/Ronin/Web/Dorks.html#string_intitle-class_method">string_intitle</a> methods to <a href="http://ronin.rubyforge.org/docs/ronin-dorks/Ronin/Web/Dorks.html">Web::Dorks</a>. The new intext and intitle convenience methods should simplify the creation of future dorks.</p>
<h2>ronin.rubyforge.org Open Sourced</h2>
<p>Last but not least, the source-code for the <a href="http://ronin.rubyforge.org/">ronin.rubyforge.org</a> website has been open-sourced on <a href="http://github.com/postmodern/ronin.rubyforge.org/">GitHub</a>. Now if you want to make a correction or add a How-To, just <a href="http://github.com/postmodern/ronin.rubyforge.org/fork/">fork it</a>, commit your changes, then send <a href="http://github.com/postmodern/">me</a> a <a href="http://github.com/guides/pull-requests">pull-request</a> and I&#8217;ll upload your changes.</p>
<p>The collaborative editing is already happening, <a href="http://github.com/evoltech/">evoltech</a> already wrote up a new badass <a href="http://ronin.rubyforge.org/contribute/">Contribute</a> page, that explains typical Git(Hub) workflow.</p>
 Tagged: 1.9.1, fork, github, intext, ronin, ronin-dorks, ronin-exploits, ronin-gen, ronin-php, ronin-scanners, ronin-sql, ronin-web, ruby, Scanner, scanners, toorcamp, website <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/houseofpostmodern.wordpress.com/174/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/houseofpostmodern.wordpress.com/174/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/houseofpostmodern.wordpress.com/174/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/houseofpostmodern.wordpress.com/174/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/houseofpostmodern.wordpress.com/174/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/houseofpostmodern.wordpress.com/174/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/houseofpostmodern.wordpress.com/174/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/houseofpostmodern.wordpress.com/174/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/houseofpostmodern.wordpress.com/174/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/houseofpostmodern.wordpress.com/174/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=houseofpostmodern.wordpress.com&blog=1452568&post=174&subd=houseofpostmodern&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://houseofpostmodern.wordpress.com/2009/07/19/ronin-toorcamp-0-2-4-finally-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>Sketches: Aftermath</title>
		<link>http://houseofpostmodern.wordpress.com/2009/06/13/sketches-aftermath/</link>
		<comments>http://houseofpostmodern.wordpress.com/2009/06/13/sketches-aftermath/#comments</comments>
		<pubDate>Sat, 13 Jun 2009 00:55:25 +0000</pubDate>
		<dc:creator>postmodern3</dc:creator>
				<category><![CDATA[ruby]]></category>
		<category><![CDATA[editor]]></category>
		<category><![CDATA[irb]]></category>
		<category><![CDATA[reload]]></category>
		<category><![CDATA[reloading]]></category>
		<category><![CDATA[repl]]></category>
		<category><![CDATA[sketch]]></category>
		<category><![CDATA[sketches]]></category>
		<category><![CDATA[slime]]></category>

		<guid isPermaLink="false">http://houseofpostmodern.wordpress.com/?p=168</guid>
		<description><![CDATA[Apologies for not updating this blog more often. I have been very busy preparing for ToorCamp and releasing code.
One of my newer projects is Sketches. The idea for Sketches came from hacking sessions with Ronin. Eventually you need to automate some small task, this requires that you write a small method in the Ronin Console. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=houseofpostmodern.wordpress.com&blog=1452568&post=168&subd=houseofpostmodern&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Apologies for not updating this blog more often. I have been very busy preparing for <a href="http://toorcamp.org/">ToorCamp</a> and releasing code.</p>
<p>One of my newer projects is <a href="http://sketches.rubyforge.org/">Sketches</a>. The idea for Sketches came from hacking sessions with <a href="http://ronin.rubyforge.org/">Ronin</a>. Eventually you need to automate some small task, this requires that you write a small method in the Ronin Console. I would find myself either writing methods directly into the console or cluttering my home directory with small Ruby scripts that I would load into the console. Usually after testing my code, I realized some changes needed to be made, and the code redefined/reloaded.</p>
<p>This became tedious and was cramping my work-flow. I just wanted to write code in my editor of choice and have it reloaded into the console like magic.</p>
<p>I remembered that <a href="http://utilitybelt.rubyforge.org/">Utility Belt</a> had the ability to spawn an editor from IRB and load the resulting code after you exited it. Although, Utility Belt wont track the edited files and reload them whenever they change. Also, Utility Belt comes with a lot of OSX/S3 specific features that I didn&#8217;t really need.</p>
<p>So I dug up <a href="http://gist.github.com/20920">reval.rb</a>, borrowed the name Sketches from <a href="http://processing.org/">Processing&#8217;s</a> idea of code &#8220;sketches&#8221; and one week later I had Sketches working in IRB (and Ronin).</p>
<p>Sketches is easy to install:</p>
<pre>$ sudo gem install sketches</pre>
<p>Then just drop it into your <kbd>.irbrc</kbd>:</p>
<pre>require 'sketches'

Sketches.config :editor =&gt; 'gvim'</pre>
<p>When you want to pop open a new sketch:</p>
<pre>sketch</pre>
<p>You can also name your sketches:</p>
<pre>sketch :foo</pre>
<p>See all of your current sketches:</p>
<pre>sketches</pre>
<p>Don&#8217;t worry about closing the editor, sketches will persist until you exit IRB and can be re-opened using the <kbd>sketch</kbd> method:</p>
<pre>sketch :foo</pre>
<p>After posting it to <a href="http://www.reddit.com/r/ruby/comments/8nrwd/introducing_sketches_a_liveprogramming_gem/">reddit</a> I was surprised to see such an immediate positive reaction to the little project. I even saw posts on Twitter were people were using <a href="http://www.gnu.org/software/screen/">GNU Screen</a> with <a href="http://www.vim.org/">vim</a> for the editor command. I never thought of using <kbd>screen</kbd>, totally clever.</p>
 Tagged: editor, irb, reload, reloading, repl, ruby, sketch, sketches, slime <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/houseofpostmodern.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/houseofpostmodern.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/houseofpostmodern.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/houseofpostmodern.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/houseofpostmodern.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/houseofpostmodern.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/houseofpostmodern.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/houseofpostmodern.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/houseofpostmodern.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/houseofpostmodern.wordpress.com/168/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=houseofpostmodern.wordpress.com&blog=1452568&post=168&subd=houseofpostmodern&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://houseofpostmodern.wordpress.com/2009/06/13/sketches-aftermath/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>Ronin &#8220;faster&#8221; 0.2.3 has been released</title>
		<link>http://houseofpostmodern.wordpress.com/2009/05/07/ronin-faster-023-has-been-released/</link>
		<comments>http://houseofpostmodern.wordpress.com/2009/05/07/ronin-faster-023-has-been-released/#comments</comments>
		<pubDate>Thu, 07 May 2009 04:21:43 +0000</pubDate>
		<dc:creator>postmodern3</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[project]]></category>
		<category><![CDATA[ronin]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[1.9.1]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[cacheable]]></category>
		<category><![CDATA[CIDR]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[each]]></category>
		<category><![CDATA[enumerable]]></category>
		<category><![CDATA[extlib]]></category>
		<category><![CDATA[faster]]></category>
		<category><![CDATA[globbed]]></category>
		<category><![CDATA[init]]></category>
		<category><![CDATA[ip]]></category>
		<category><![CDATA[IPAddr]]></category>
		<category><![CDATA[iterate]]></category>
		<category><![CDATA[overlay]]></category>
		<category><![CDATA[overlays]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[ruby19]]></category>
		<category><![CDATA[rubygem]]></category>
		<category><![CDATA[subcommands]]></category>
		<category><![CDATA[try]]></category>

		<guid isPermaLink="false">http://houseofpostmodern.wordpress.com/?p=155</guid>
		<description><![CDATA[The wait is over, Ronin 0.2.3 (code-named &#8220;faster&#8221;) has finally been released. This release contains new code, more specs, some very important architectural changes and a few bug-fixes.
Ronin on Ruby 1.9.1
Probably the most important news in Ronin 0.2.3, is that Ronin is now Ruby 1.9.1 compatible. Ronin can now take advantage of the considerable performance [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=houseofpostmodern.wordpress.com&blog=1452568&post=155&subd=houseofpostmodern&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>The wait is over, Ronin 0.2.3 (code-named &#8220;faster&#8221;) has finally been released. This release contains new code, more specs, some very important architectural changes and a few bug-fixes.</p>
<h2>Ronin on Ruby 1.9.1</h2>
<p>Probably the most important news in Ronin 0.2.3, is that Ronin is now Ruby 1.9.1 compatible. Ronin can now take advantage of the considerable performance improvements in Ruby 1.9.1-p0. If you tend to do security research and find yourself having to use Ruby 1.9.1, you should look into using Ronin.</p>
<h2>Faster Load-Times</h2>
<p>Ronin also saw various architectural changes to help reduce load-times. The <kbd>ronin/models.rb</kbd> file was removed, which loaded models from the other Ronin libraries before the Database was setup. Now other Ronin libraries can call the <a href="http://ronin.rubyforge.org/docs/ronin/Ronin/Database.html#update%21-class_method">Database.update!</a> method, which will run non-destructive auto-migrations on the Database. <a href="http://ronin.rubyforge.org/docs/ronin/Ronin/UI/CommandLine.html">Ronin::UI::CommandLine</a> saw yet more refactoring. With the new <a href="http://ronin.rubyforge.org/docs/ronin/Ronin/UI/CommandLine.html">Ronin::UI::CommandLine</a>, sub-commands are loaded on-demand, instead of all at once.</p>
<p>Together these architectural changes have dramatically improved the load-time of Ronin&#8217;s console. On systems that rarely run the Ruby interpreter, start-up times for Ronin should look like the following:</p>
<pre>$ time (echo exit | (ronin &gt; /dev/null))

real	0m3.841s
user	0m1.141s
sys	0m0.514s</pre>
<p>On systems that regularly run the Ruby interpreter (thus caching frequently used memory and data) start-up times for Ronin will be a little quicker:</p>
<pre>$ time (echo exit | (ronin &gt; /dev/null))

real	0m1.656s
user	0m1.137s
sys	0m0.478s</pre>
<h2>New Convenience Methods</h2>
<p>In 0.2.3 the <a href="http://ronin.rubyforge.org/docs/ronin/IPAddr.html#each-instance_method">IPAddr#each</a> and <a href="http://ronin.rubyforge.org/docs/ronin/IPAddr.html#each-class_method">IPAddr.each</a> methods were added. It&#8217;s somewhat common to need to iterate over a range of IP addresses. Say you have a CIDR notation IP address, and need to iterate over every IP address covered by it&#8217;s netmask. Simply create a new <kbd>IPAddr</kbd> object and call <kbd>each</kbd>:</p>
<pre>ip = IPAddr.new('10.1.1.1/24')
ip.each do |addr|
  ...
end</pre>
<p>Well that&#8217;s sort of cool, but what if you have a globbed IP address, similar to the ones <a href="http://www.insecure.org/">nmap</a> accepts? <a href="http://ronin.rubyforge.org/docs/ronin/IPAddr.html#each-class_method">IPAddr.each</a> has you covered:</p>
<pre>IPAddr.each('10.1.1-5.*') do |addr|
  ...
end</pre>
<p>Both <kbd>IPAddr#each</kbd> and <kbd>IPAddr.each</kbd> can  iterate over IPv6 addresses.</p>
<p><a href="http://ronin.rubyforge.org/docs/ronin/Net.html#http_powered_by-class_method">Net.http_powered_by</a> and <a href="http://ronin.rubyforge.org/docs/ronin/Net.html#http_server-class_method">Net.http_server</a> also got added in 0.2.3. These methods provide quick access to the <kbd>X-Powered-By</kbd> and <kbd>Server</kbd> HTTP headers, respectively.</p>
<pre>Net.http_powered_by(:url =&gt; 'http://www.stalkdaily.com/')
# =&gt; "PHP/5.2.9"

Net.http_server(:url =&gt; 'http://www.darkc0de.com/)
# =&gt; "Apache/2.2.11 (Unix) PHP/4.4.9 mod_ssl/2.2.11 OpenSSL/0.9.8c mod_fastcgi/2.4.6 Phusion_Passenger/2.1.2 DAV/2 SVN/1.4.2"</pre>
<p><a href="http://ronin.rubyforge.org/docs/ronin/String.html#pad-instance_method">String#pad</a> was also added in 0.2.3. The pad method doesn&#8217;t do a lot, it merely pads a String out to a maximum length:</p>
<pre>"hello".pad('A', 48)
# =&gt; "helloAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"</pre>
<p>If you hate having to deal with exceptions in Ruby, the <kbd>try</kbd> method might prove useful. The <kbd>try</kbd> method simple attempts to run a block of code, catching and ignoring any exceptions that were raised:</p>
<pre>require 'resolv'

try do
  Resolv.getaddress('might.not.exist.com')
end</pre>
<h2>Cacheable</h2>
<p><kbd>Ronin::Objectify</kbd> was replaced by the new <a href="http://ronin.rubyforge.org/docs/ronin/Ronin/Cacheable.html">Ronin::Cacheable</a> module. Cacheable provides reliable caching and loading of <a href="http://contextify.rubyforge.org/">Contextified</a> objects with Ronin&#8217;s Database. Using the new Cacheble module, the data you want cached into the database must be defined in a <kbd>cache</kbd> block:</p>
<pre>ronin_exploit do
  cache do
    self.name = 'stupidhttpd'
    self.version = '0.2'
    self.author(:name =&gt; 'Postmodern')
  end

  ...
end</pre>
<p>The use of a <kbd>cache</kbd> block creates a separation between the data to be cached and the code which will eventually be loaded.</p>
<h2>Overlays</h2>
<p>As of 0.2.3, overlays now support the automatic loading of the <kbd>lib/init.rb</kbd> file. So if you have code you&#8217;d like automatically loaded (maybe extensions to the Array class) from your Overlay, simply require it in the <kbd>lib/init.rb</kbd> file.</p>
<p>The loading of Extensions from Overlays became a little more robust in 0.2.3. If an exception is encountered when loading an extension file, the exception will be printed and the file ignored.</p>
 Tagged: 1.9.1, cache, cacheable, CIDR, database, each, enumerable, extlib, faster, globbed, init, ip, IPAddr, iterate, overlay, overlays, performance, ronin, ruby, ruby19, rubygem, subcommands, try <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/houseofpostmodern.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/houseofpostmodern.wordpress.com/155/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/houseofpostmodern.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/houseofpostmodern.wordpress.com/155/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/houseofpostmodern.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/houseofpostmodern.wordpress.com/155/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/houseofpostmodern.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/houseofpostmodern.wordpress.com/155/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/houseofpostmodern.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/houseofpostmodern.wordpress.com/155/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=houseofpostmodern.wordpress.com&blog=1452568&post=155&subd=houseofpostmodern&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://houseofpostmodern.wordpress.com/2009/05/07/ronin-faster-023-has-been-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>
		<item>
		<title>Ronin &#8220;theouterlibs&#8221; 0.2.2 released</title>
		<link>http://houseofpostmodern.wordpress.com/2009/03/31/ronin-theouterlibs-022-released/</link>
		<comments>http://houseofpostmodern.wordpress.com/2009/03/31/ronin-theouterlibs-022-released/#comments</comments>
		<pubDate>Tue, 31 Mar 2009 00:15:23 +0000</pubDate>
		<dc:creator>postmodern3</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[project]]></category>
		<category><![CDATA[ronin]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[rubygems]]></category>
		<category><![CDATA[bytes]]></category>
		<category><![CDATA[chars]]></category>
		<category><![CDATA[const_missing]]></category>
		<category><![CDATA[cvs]]></category>
		<category><![CDATA[darcs]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[hex_unescape]]></category>
		<category><![CDATA[overlay]]></category>
		<category><![CDATA[overlays]]></category>
		<category><![CDATA[repertoire]]></category>
		<category><![CDATA[resources]]></category>
		<category><![CDATA[ronin-gen]]></category>
		<category><![CDATA[ronin-php]]></category>
		<category><![CDATA[ronin-web]]></category>
		<category><![CDATA[static]]></category>
		<category><![CDATA[unhexdump]]></category>

		<guid isPermaLink="false">http://houseofpostmodern.wordpress.com/?p=150</guid>
		<description><![CDATA[Ronin 0.2.2, code-named &#8220;theouterlibs&#8221;, has been released. This release of Ronin has seen more action in the other libraries which support Ronin. 
Ronin::Chars was split out of Ronin into the Chars 0.1.0 library, in order to help other frameworks and code which work with characters.
The ronin-overlay and ronin-ext sub-commands which handled generating skeleton Overlays and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=houseofpostmodern.wordpress.com&blog=1452568&post=150&subd=houseofpostmodern&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Ronin 0.2.2, code-named &#8220;theouterlibs&#8221;, has been released. This release of Ronin has seen more action in the other libraries which support Ronin. </p>
<p>Ronin::Chars was split out of Ronin into the <a href="http://chars.rubyforge.org/">Chars</a> 0.1.0 library, in order to help other frameworks and code which work with characters.</p>
<p>The ronin-overlay and ronin-ext sub-commands which handled generating skeleton Overlays and Extensions have been moved to the <a href="http://ronin.rubyforge.org/gen/">ronin-gen</a> library. The ronin-gen library provides various code-generates which allow other Ronin libraries to create their own custom code-generators.</p>
<p>The <a href="http://repertoire.rubyforge.org/">R&#8217;epertoire</a> library saw significant refactoring after various bugs were uncovered while testing Ronin 0.2.2. Now R&#8217;epertoire 0.2.1 has improved Git support, but CVS and Darcs support was removed.</p>
<p>Ronin also saw some minor improvements in 0.2.2. New convenience methods were added for formatting binary data:</p>
<ul>
<li><a href="http://ronin.rubyforge.org/docs/ronin/Integer.html#bytes-instance_method">Integer#bytes</a>: returns the bytes that make up the Integer.
<pre>0xff41.bytes(2)
# =&gt; [65, 255]</pre>
<pre>0xff41.bytes(4, :big)
# =&gt; [0, 0, 255, 65]</pre>
</li>
<li><a href="http://ronin.rubyforge.org/docs/ronin/String.html#hex_unescape-instance_method">String#hex_unescape</a>: unescape those annoying hex-escaped Strings.
<pre>"\\x68\\x65\\x6c\\x6c\\x6f".hex_unescape
# =&gt; "hello"</pre>
</li>
<li><a href="http://ronin.rubyforge.org/docs/ronin/String.html#unhexdump-instance_method">String#unhexdump</a>: un-hexdump a variety of hexdump formats.
<pre>File.read('data_dump.txt').unhexdump
# =&gt; "..."</pre>
</li>
</ul>
<p><a href="http://ronin.rubyforge.org/docs/ronin/Ronin/Static.html">Ronin::Static</a> was also added in 0.2.2. The Ronin::Static module handles static resource directories which Ronin can search within for various files and directories. <a href="http://ronin.rubyforge.org/docs/ronin/Ronin/Static/Finders.html">Ronin::Static::Finders</a> provides path/file/directory finder methods that can be included into classes. Ronin Overlays and Extensions can now have static/ directories of their own, which are accessible via the Ronin::Static::Finders methods.</p>
<p>Loaded extensions can now be reloaded on the fly:</p>
<pre>Platform.extensions.reload!</pre>
<p>Ronin Extensions also can be accessed via constants within the Ronin namespace:</p>
<pre>Ronin::HelloWord.name
# =&gt; "hello_word"</pre>
 Tagged: bytes, chars, const_missing, cvs, darcs, git, hack, hacking, hex_unescape, overlay, overlays, repertoire, resources, ronin, ronin-gen, ronin-php, ronin-web, rubygems, static, unhexdump <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/houseofpostmodern.wordpress.com/150/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/houseofpostmodern.wordpress.com/150/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/houseofpostmodern.wordpress.com/150/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/houseofpostmodern.wordpress.com/150/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/houseofpostmodern.wordpress.com/150/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/houseofpostmodern.wordpress.com/150/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/houseofpostmodern.wordpress.com/150/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/houseofpostmodern.wordpress.com/150/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/houseofpostmodern.wordpress.com/150/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/houseofpostmodern.wordpress.com/150/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=houseofpostmodern.wordpress.com&blog=1452568&post=150&subd=houseofpostmodern&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://houseofpostmodern.wordpress.com/2009/03/31/ronin-theouterlibs-022-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>