<?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:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Kofno</title>
	<atom:link href="http://kofno.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://kofno.wordpress.com</link>
	<description>Who's Ready For Safe Fun?</description>
	<pubDate>Fri, 27 Jun 2008 03:04:35 +0000</pubDate>
	<generator>http://wordpress.org/?v=MU</generator>
	<language>en</language>
			<item>
		<title>Time&#8217;s Making Changes</title>
		<link>http://kofno.wordpress.com/2008/06/26/times-making-changes/</link>
		<comments>http://kofno.wordpress.com/2008/06/26/times-making-changes/#comments</comments>
		<pubDate>Fri, 27 Jun 2008 03:04:35 +0000</pubDate>
		<dc:creator>kofno</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[JRuby]]></category>

		<category><![CDATA[new job]]></category>

		<guid isPermaLink="false">http://kofno.wordpress.com/?p=860</guid>
		<description><![CDATA[What could be so stupendous as to merit sharing a title with The Best of Tesla?
The paperwork is finally done and everything is official, so I guess I can talk about it. I&#8217;ve got a new job with Collaborative Software Initiative. I start the first full week in July. I&#8217;m really excited. This is going [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>What could be so stupendous as to merit sharing a title with The Best of Tesla?</p>
<p>The paperwork is finally done and everything is official, so I guess I can talk about it. I&#8217;ve got a new job with <a href="http://www.csinitiative.com">Collaborative Software Initiative</a>. I start the first full week in July. I&#8217;m really excited. This is going to be a big change for me in a lot of ways.</p>
<p>First of all, since the company&#8217;s in Portland and I&#8217;m not, I&#8217;ll be working from home. People like to talk about the ups and downs of working from home: how you can never get away from work that way; how it&#8217;s hard to keep your personal life and your work separate; how you&#8217;re going to miss human contact. I think those people are jealous or nuts. When I&#8217;ve gotten to work from home in the past, it has ruled. I really think I&#8217;m going to eat it up.</p>
<p>The <a href="http://www.csinitiative.com/publichealth.php">client is in Utah</a> (well, the client is Utah), so I will be traveling a scosh, which I&#8217;ve never done. I&#8217;m looking forward to getting to see new places, but this is the aspect of the job that has me the most anxious. Since my daughter&#8217;s birth, I don&#8217;t think I&#8217;ve ever been away from her longer then twenty-four hours.</p>
<p>The product is a <a href="http://www.infoq.com/news/2008/05/csi-disease-management-jruby">JRuby on Rails application</a>, and it&#8217;s being developed in a lean/agile manner. I&#8217;ve been looking for a chance to work in an environment that was Ruby, or Smalltalk, and was agile. I&#8217;m not as fond of Java (the language) as I used to be, and my current company just doesn&#8217;t seem to be ready for agile development (if <a href="http://blog.toolshed.com/2008/06/stage-0-not-rea.html">this post</a> is any indicator).</p>
<p>The product is open source (or will be soon). This represents a huge change for me. A few months ago, I don&#8217;t think I appreciated how important this would be to me. Back then, I was trying to set up a talk about some work I had done in our software using JRuby for <a href="http://www.erubycon.com/">eRubyCon</a>. I thought it would be a good talk and fit right into the eRubyCon concept. I was eventually shut down because there was concern amongst the powers-that-be that I would be exposing too much of our architecture and we&#8217;d be giving up a competitive advantage.  That was when I realized that I&#8217;m an open source guy, and I need to be making my living writing open source.</p>
<p>That is lot of change for one guy with a family to feed to make. I feel like I should be nervous. I&#8217;m not. I&#8217;m excited and I can&#8217;t wait to get started.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/kofno.wordpress.com/860/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/kofno.wordpress.com/860/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kofno.wordpress.com/860/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kofno.wordpress.com/860/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kofno.wordpress.com/860/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kofno.wordpress.com/860/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kofno.wordpress.com/860/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kofno.wordpress.com/860/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kofno.wordpress.com/860/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kofno.wordpress.com/860/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kofno.wordpress.com/860/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kofno.wordpress.com/860/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kofno.wordpress.com&blog=408005&post=860&subd=kofno&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://kofno.wordpress.com/2008/06/26/times-making-changes/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/kofno-128.jpg" medium="image">
			<media:title type="html">kofno</media:title>
		</media:content>
	</item>
		<item>
		<title>Run SLIME and CLISP on Windows</title>
		<link>http://kofno.wordpress.com/2008/05/16/run-slime-and-clisp-on-windows/</link>
		<comments>http://kofno.wordpress.com/2008/05/16/run-slime-and-clisp-on-windows/#comments</comments>
		<pubDate>Sat, 17 May 2008 04:37:59 +0000</pubDate>
		<dc:creator>kofno</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[Emacs]]></category>

		<category><![CDATA[windows]]></category>

		<category><![CDATA[CLISP]]></category>

		<category><![CDATA[Slime]]></category>

		<category><![CDATA[Common Lisp]]></category>

		<guid isPermaLink="false">http://kofno.wordpress.com/?p=858</guid>
		<description><![CDATA[Friends! Let me free you from your complicated lives. From the complicated
part, not the lives part. -Bender

I managed to get SLIME and CLISP to play nice on Windows. As is often
the case when trying to get something interesting working on Windows,
I couldn&#8217;t find a single comprehensive source that explained
everything. I&#8217;ll document what I did here, [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><em>Friends! Let me free you from your complicated lives. From the complicated<br />
part, not the lives part. -Bender<br />
</em><br />
I managed to get SLIME and CLISP to play nice on Windows. As is often<br />
the case when trying to get something interesting working on Windows,<br />
I couldn&#8217;t find a single comprehensive source that explained<br />
everything. I&#8217;ll document what I did here, and maybe that will save<br />
someone else some time.</p>
<p>Oh yeah, and I did know about <a href="http://common-lisp.net/project/lispbox/">Lisp in a Box</a>, but that felt like<br />
cheating.</p>
<p>I already had <a href="http://www.cygwin.com/">cygwin</a> installed. I did a full install (I had some<br />
time on my hands). So I already had <a href="http://clisp.cons.org/">CLISP</a> installed, too.</p>
<p>You&#8217;re going to need <a href="http://ftp.gnu.org/pub/gnu/emacs/windows/">emacs</a> to run <a href="http://common-lisp.net/project/SLIME/#downloading">SLIME</a>. I use the Windows emacs<br />
build, rather cygwin&#8217;s build. The cygwin build of emacs 22 is pretty<br />
flaky on my machine.</p>
<p>When you go to download SLIME, make sure you grab the <em>cvs tarball</em><br />
and not the 2.0 tarball. The 2.0 release is not compatible with the<br />
current CLISP release. The SLIME readme contains the magic incantation<br />
to load SLIME into emacs. This goes in your .emacs file:</p>
<pre>(add-to-list 'load-path "~/.site-lisp/slime/")  ; your SLIME directory
(setq inferior-lisp-program "/bin/clisp.exe -K full") ; your Lisp system
(require 'slime)
(slime-setup)</pre>
<p>Change the paths so that they work for your system. Make sure that you<br />
leave the &#8220;-K full&#8221; on the clisp executable.</p>
<p>There&#8217;s a path error that occurs if you run SLIME now. This is caused<br />
by the difference between cygwin paths and windows paths. Note that I<br />
don&#8217;t use any of that cygpath crap in my .emacs file. I also didn&#8217;t<br />
want to write the elisp functions that would make Swank (it&#8217;s a SLIME<br />
thing) work. I liked this suggestion from <a href="http://www.cliki.net/SLIME%20Tips">CLiki</a> better:</p>
<pre>mkdir /c
touch /c/NOT_MOUNTED
mount C:\\ /c</pre>
<p>Start up emacs and run M-x SLIME. You should get the CL-USER&gt; prompt<br />
if everything worked.</p>
<p>I think that&#8217;s everything I did. If I missed anything, drop a note in<br />
the comments.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/kofno.wordpress.com/858/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/kofno.wordpress.com/858/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kofno.wordpress.com/858/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kofno.wordpress.com/858/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kofno.wordpress.com/858/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kofno.wordpress.com/858/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kofno.wordpress.com/858/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kofno.wordpress.com/858/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kofno.wordpress.com/858/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kofno.wordpress.com/858/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kofno.wordpress.com/858/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kofno.wordpress.com/858/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kofno.wordpress.com&blog=408005&post=858&subd=kofno&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://kofno.wordpress.com/2008/05/16/run-slime-and-clisp-on-windows/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/kofno-128.jpg" medium="image">
			<media:title type="html">kofno</media:title>
		</media:content>
	</item>
		<item>
		<title>Jackrabbit.rar + Glassfish + Windows == Frustration</title>
		<link>http://kofno.wordpress.com/2008/04/30/jackrabbitrar-glassfish-windows-frustration/</link>
		<comments>http://kofno.wordpress.com/2008/04/30/jackrabbitrar-glassfish-windows-frustration/#comments</comments>
		<pubDate>Thu, 01 May 2008 01:55:38 +0000</pubDate>
		<dc:creator>kofno</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[glassfish]]></category>

		<category><![CDATA[jackrabbit]]></category>

		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://kofno.wordpress.com/?p=857</guid>
		<description><![CDATA[There&#8217;s not a whole hell of a lot I can do about the platform I&#8217;m
stuck deploying on. Right now I wouldn&#8217;t recommend deploying the
jackrabbit.rar to a Glassfish Server running on Windows.
I&#8217;m using jackrabbit version 1.4. So far, I&#8217;ve gotten pas a few
pitfalls.
* Once the rar&#8217;s been downloaded, crack it open using 7z or WinRAR or
something. [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>There&#8217;s not a whole hell of a lot I can do about the platform I&#8217;m<br />
stuck deploying on. Right now I wouldn&#8217;t recommend deploying the<br />
jackrabbit.rar to a Glassfish Server running on Windows.</p>
<p>I&#8217;m using jackrabbit version 1.4. So far, I&#8217;ve gotten pas a few<br />
pitfalls.</p>
<p>* Once the rar&#8217;s been downloaded, crack it open using 7z or WinRAR or<br />
something. Then crack open the nekohtml.jar and rename the LICENSE<br />
file to LICENSE.txt (or something).</p>
<p>* Download <a href="http://www.day.com/maven/jsr170/jars/jcr-1.0.jar">jcr-1.0.jar</a> and copy it to the Glassfish lib directory.</p>
<p>* Then you should be able to follow this <a href="http://www.nabble.com/Jackrabbit-RAR-Deployment-in-Glassfish-%28and-on-Mac-OS-X%29-to12345659.html#a12345659">post</a> from the jackrabbit<br />
mailing list.</p>
<p>Everything seems great, but every time I grab this Jackrabbit instance<br />
from my servlet using JNDI, I get an error. Jackrabbit won&#8217;t create the<br />
session because it&#8217;s already locked by another process.</p>
<p>I&#8217;m not going to give up on this, but I&#8217;ve get to get something<br />
running by the weekend. For now, I&#8217;m just going to embed the<br />
jackrabbit stuff in my servlet. If anyone has any ideas, leave a<br />
comment.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/kofno.wordpress.com/857/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/kofno.wordpress.com/857/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kofno.wordpress.com/857/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kofno.wordpress.com/857/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kofno.wordpress.com/857/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kofno.wordpress.com/857/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kofno.wordpress.com/857/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kofno.wordpress.com/857/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kofno.wordpress.com/857/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kofno.wordpress.com/857/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kofno.wordpress.com/857/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kofno.wordpress.com/857/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kofno.wordpress.com&blog=408005&post=857&subd=kofno&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://kofno.wordpress.com/2008/04/30/jackrabbitrar-glassfish-windows-frustration/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/kofno-128.jpg" medium="image">
			<media:title type="html">kofno</media:title>
		</media:content>
	</item>
		<item>
		<title>gitk Not Finding Repos on Cygwin</title>
		<link>http://kofno.wordpress.com/2008/04/26/gitk-not-finding-repos-on-cygwin/</link>
		<comments>http://kofno.wordpress.com/2008/04/26/gitk-not-finding-repos-on-cygwin/#comments</comments>
		<pubDate>Sat, 26 Apr 2008 16:50:06 +0000</pubDate>
		<dc:creator>kofno</dc:creator>
		
		<category><![CDATA[cygwin]]></category>

		<category><![CDATA[git]]></category>

		<category><![CDATA[gitk]]></category>

		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://kofno.wordpress.com/?p=856</guid>
		<description><![CDATA[I&#8217;m using git on cygwin. For a while, gitk was not able to find any of
my git repos. Everything else was working, so it wasn&#8217;t a deal
breaker, but it was really annoying. I finally fixed it by removing
tty from the CYGWIN environment variable.
       ]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I&#8217;m using git on cygwin. For a while, gitk was not able to find any of<br />
my git repos. Everything else was working, so it wasn&#8217;t a deal<br />
breaker, but it was really annoying. I finally fixed it by removing<br />
tty from the CYGWIN environment variable.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/kofno.wordpress.com/856/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/kofno.wordpress.com/856/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kofno.wordpress.com/856/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kofno.wordpress.com/856/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kofno.wordpress.com/856/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kofno.wordpress.com/856/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kofno.wordpress.com/856/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kofno.wordpress.com/856/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kofno.wordpress.com/856/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kofno.wordpress.com/856/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kofno.wordpress.com/856/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kofno.wordpress.com/856/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kofno.wordpress.com&blog=408005&post=856&subd=kofno&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://kofno.wordpress.com/2008/04/26/gitk-not-finding-repos-on-cygwin/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/kofno-128.jpg" medium="image">
			<media:title type="html">kofno</media:title>
		</media:content>
	</item>
		<item>
		<title>Writing an ActiveRecord-JDBC Adapter</title>
		<link>http://kofno.wordpress.com/2008/04/23/writing-an-activerecord-jdbc-adapter/</link>
		<comments>http://kofno.wordpress.com/2008/04/23/writing-an-activerecord-jdbc-adapter/#comments</comments>
		<pubDate>Wed, 23 Apr 2008 23:55:57 +0000</pubDate>
		<dc:creator>kofno</dc:creator>
		
		<category><![CDATA[ActiveRecord]]></category>

		<category><![CDATA[JRuby]]></category>

		<guid isPermaLink="false">http://kofno.wordpress.com/?p=855</guid>
		<description><![CDATA[Rails 2.0 made writing your own ActiveRecord adapters easier. Combine
that with JDBC and you have some really nice tools for creating data
driven ruby applications working against any number of databases.
So, How Do I Write One?
Like a lot of things in the Ruby and Rails world, once you understand
the conventions, everything else is easy. So much [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Rails 2.0 made writing your own ActiveRecord adapters easier. Combine<br />
that with JDBC and you have some really nice tools for creating data<br />
driven ruby applications working against any number of databases.</p>
<h2>So, How Do I Write One?</h2>
<p>Like a lot of things in the Ruby and Rails world, once you understand<br />
the conventions, everything else is easy. So much so that, once you<br />
know what you are looking for, writing an adapter is about copying the<br />
patterns that have already been laid out in the other adapters.</p>
<p>The key steps for creating an adapter are:</p>
<p>- create a new lib/jdbc_adapter/jdbc_&lt;adaptername&gt;.rb</p>
<p>- update lib/active_record/connection_adapters/jdbc_adapter_spec.rb to<br />
require &#8216;jdbc_adapter/jdbc_&lt;adaptername&gt;&#8217;</p>
<p>- create a new test/&lt;adaptername&gt;_simple_test.rb and an associated<br />
test/db/&lt;adaptername&gt;.rb</p>
<p>- add test rake task to the Rakefile.</p>
<p>(these were basically stolen from an email on the <a href="http://www.nabble.com/Re%3A-Sqlite-3-adapter-p16825128.html">JRuby Users</a> mailing list).</p>
<h2>What Goes Where?</h2>
<p>For the most part, you can figure out everything else you need to know<br />
by reading the code. If you aren&#8217;t sure how to do something, there&#8217;s<br />
probably already an example of it in the code somewhere.<br />
Here are some things I think I&#8217;ve figured out:</p>
<p>- Most of the magic happens in the<br />
lib/jdbc_adapter/jdbc_&lt;adaptername&gt;.rb file. The rest of these<br />
points describe points of interest in that file.</p>
<p>- ::JdbcSpec::ActiveRecordExtensions is where you put the connection<br />
method, &lt;adaptername&gt;_connection. This is what Rails will call when<br />
someone sets the adapter name to &lt;adaptername&gt;. You can use this to<br />
turn Rails flavored config hashes into nasty JDBC URLs. Users will<br />
thank you.</p>
<p>- Create a ::JdbcSpec::&lt;AdapterName&gt; module. Make sure you follow the<br />
conventions for self.column_selector and<br />
self.adapter_selector. There&#8217;s no reason not to.</p>
<p>- Lots of crazy stuff happens in the ::JdbcSpec::&lt;AdapterName&gt;<br />
module. Write a custom create_table method. Rewrite &#8220;LIMIT 1&#8243;<br />
queries for dialects that don&#8217;t support the LIMIT keyword. Support<br />
migration behaviors that aren&#8217;t natively supported by the<br />
database. Many more examples exist.</p>
<p>- Create a ::JdbcSpec::&lt;AdapterName&gt;::Column module. This is where<br />
individual field customization happens. You can customize quoting<br />
and unquoting of fields and column names. You can cast special types<br />
(like bit to boolean). You can modify types on the fly.</p>
<h2>Anything Else?</h2>
<p>Eh, probably. I can&#8217;t think of anything else that you necessarily need<br />
to know. I suppose you could do all of your modules in Java as part of<br />
a Ruby Service. If your database driver has a friendly enough license,<br />
you could distribute that as its own gem. This simplifies distribution<br />
and installation for end users. I haven&#8217;t tried that yet, but it looks<br />
simple enough. Leave a comment if can think of something I missed.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/kofno.wordpress.com/855/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/kofno.wordpress.com/855/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kofno.wordpress.com/855/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kofno.wordpress.com/855/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kofno.wordpress.com/855/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kofno.wordpress.com/855/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kofno.wordpress.com/855/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kofno.wordpress.com/855/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kofno.wordpress.com/855/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kofno.wordpress.com/855/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kofno.wordpress.com/855/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kofno.wordpress.com/855/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kofno.wordpress.com&blog=408005&post=855&subd=kofno&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://kofno.wordpress.com/2008/04/23/writing-an-activerecord-jdbc-adapter/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/kofno-128.jpg" medium="image">
			<media:title type="html">kofno</media:title>
		</media:content>
	</item>
		<item>
		<title>Subversion Through Git (on Cygwin)</title>
		<link>http://kofno.wordpress.com/2008/04/20/subversion-through-git-on-cygwin/</link>
		<comments>http://kofno.wordpress.com/2008/04/20/subversion-through-git-on-cygwin/#comments</comments>
		<pubDate>Sun, 20 Apr 2008 22:19:08 +0000</pubDate>
		<dc:creator>kofno</dc:creator>
		
		<category><![CDATA[git]]></category>

		<category><![CDATA[org-mode]]></category>

		<guid isPermaLink="false">http://kofno.wordpress.com/?p=854</guid>
		<description><![CDATA[I hate to miss a good bandwagon. That&#8217;s why I have started using git as an interface to all the various subversion repos I have to deal with. So far I&#8217;m very happy with it. I&#8217;ve even started using it from my Windows machine. It works pretty well from cygwin. I did have to make [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I hate to miss a good bandwagon. That&#8217;s why I have started using <a href="http://git.or.cz">git</a> as an interface to all the various subversion repos I have to deal with. So far I&#8217;m very happy with it. I&#8217;ve even started using it from my Windows machine. It works pretty well from cygwin. I did have to make <a href="http://www.dont-panic.cc/capi/2007/07/13/git-on-windows-you-have-some-suspicious-patch-lines/">this</a> change to my pre-commit hooks.</p>
<p>I recently discovered <a href="http://orgmode.org/">org-mode</a> on emacs. A very useful way to track todo lists and to manage projects. I&#8217;ve been using git to track the changes to my org files as well. A deadly combo.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/kofno.wordpress.com/854/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/kofno.wordpress.com/854/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kofno.wordpress.com/854/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kofno.wordpress.com/854/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kofno.wordpress.com/854/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kofno.wordpress.com/854/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kofno.wordpress.com/854/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kofno.wordpress.com/854/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kofno.wordpress.com/854/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kofno.wordpress.com/854/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kofno.wordpress.com/854/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kofno.wordpress.com/854/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kofno.wordpress.com&blog=408005&post=854&subd=kofno&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://kofno.wordpress.com/2008/04/20/subversion-through-git-on-cygwin/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/kofno-128.jpg" medium="image">
			<media:title type="html">kofno</media:title>
		</media:content>
	</item>
		<item>
		<title>Rcov for JRuby Update</title>
		<link>http://kofno.wordpress.com/2008/03/19/rcov-for-jruby-update/</link>
		<comments>http://kofno.wordpress.com/2008/03/19/rcov-for-jruby-update/#comments</comments>
		<pubDate>Thu, 20 Mar 2008 01:45:54 +0000</pubDate>
		<dc:creator>kofno</dc:creator>
		
		<category><![CDATA[JRuby]]></category>

		<category><![CDATA[Rcov]]></category>

		<category><![CDATA[Rcov4jr]]></category>

		<guid isPermaLink="false">http://kofno.wordpress.com/?p=849</guid>
		<description><![CDATA[It works well in simple cases. Running from Rake doesn’t work. Running rcov from rspec doesn’t work yet, either.
There are 13 unit tests that fail (12 failures and 1 error). The failures are mostly minor differences in output between MRI and JRuby. The big  old up now is the one error. It appears to [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>It works well in simple cases. Running from Rake doesn’t work. Running rcov from rspec doesn’t work yet, either.</p>
<p>There are 13 unit tests that fail (12 failures and 1 error). The failures are mostly minor differences in output between <span class="caps">MRI</span> and JRuby. The big  old up now is the one error. It appears to be a bug in the reset code. Once data collection starts, calling reset clears the callected data (desirable) and prevents new data from being collection (less desirable). I think that’s why running rcov from rspec fails.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/kofno.wordpress.com/849/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/kofno.wordpress.com/849/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kofno.wordpress.com/849/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kofno.wordpress.com/849/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kofno.wordpress.com/849/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kofno.wordpress.com/849/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kofno.wordpress.com/849/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kofno.wordpress.com/849/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kofno.wordpress.com/849/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kofno.wordpress.com/849/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kofno.wordpress.com/849/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kofno.wordpress.com/849/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kofno.wordpress.com&blog=408005&post=849&subd=kofno&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://kofno.wordpress.com/2008/03/19/rcov-for-jruby-update/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/kofno-128.jpg" medium="image">
			<media:title type="html">kofno</media:title>
		</media:content>
	</item>
		<item>
		<title>Smalltalk Logos: [&#124;] Advocacy</title>
		<link>http://kofno.wordpress.com/2008/03/03/smalltalk-logos-advocacy/</link>
		<comments>http://kofno.wordpress.com/2008/03/03/smalltalk-logos-advocacy/#comments</comments>
		<pubDate>Tue, 04 Mar 2008 03:21:35 +0000</pubDate>
		<dc:creator>kofno</dc:creator>
		
		<category><![CDATA[Logos]]></category>

		<category><![CDATA[Smalltalk]]></category>

		<guid isPermaLink="false">http://kofno.wordpress.com/?p=848</guid>
		<description><![CDATA[The Smalltalk logos are mostly lame. Parrots and balloons don&#8217;t cut it compared to snakes, gemstones, and whatever the hell Duke is. Some may disagree, but the only reasonably good logo for Smalltalk is the block logo. It&#8217;s already been successful. Don&#8217;t believe me? See for yourself:
Smalltalk
Not Smalltalk
 I can&#8217;t believe it myself.
   [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>The Smalltalk logos are mostly lame. Parrots and balloons don&#8217;t cut it compared to <a href="http://www.python.org/community/logos/">snakes</a>, <a href="http://www.ruby-lang.org/en/news/2008/01/09/ruby-logo-available/">gemstones</a>, and whatever the hell <a href="https://duke.dev.java.net/">Duke</a> is. <a href="http://groups.google.com/group/comp.lang.smalltalk.advocacy/browse_thread/thread/0045c72ed6ecab2b/696b89adc9817ad2">Some may disagree</a>, but the only reasonably good logo for Smalltalk is the block logo. It&#8217;s already been successful. Don&#8217;t believe me? See for yourself:</p>
<p><a href="http://emaringolo.users.dolphinmap.net/pictures/stLogoWallpaper-UXGA.jpg">Smalltalk</a><br />
<a href="http://www.80stees.com/prodImageDisplay.asp?prodid=GAH003&amp;image=GAH003_SM2.jpg&amp;lgimage=GAH003_LG2.jpg&amp;gender=Mens">Not Smalltalk</a></p>
<p><a href="http://www.youtube.com/watch?v=wzEb5IzdcrU"> I can&#8217;t believe it myself.</a></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/kofno.wordpress.com/848/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/kofno.wordpress.com/848/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kofno.wordpress.com/848/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kofno.wordpress.com/848/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kofno.wordpress.com/848/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kofno.wordpress.com/848/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kofno.wordpress.com/848/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kofno.wordpress.com/848/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kofno.wordpress.com/848/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kofno.wordpress.com/848/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kofno.wordpress.com/848/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kofno.wordpress.com/848/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kofno.wordpress.com&blog=408005&post=848&subd=kofno&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://kofno.wordpress.com/2008/03/03/smalltalk-logos-advocacy/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/kofno-128.jpg" medium="image">
			<media:title type="html">kofno</media:title>
		</media:content>
	</item>
		<item>
		<title>Ruby TestCase: Resumable Assertions</title>
		<link>http://kofno.wordpress.com/2008/02/14/ruby-testcase-resumable-assertions/</link>
		<comments>http://kofno.wordpress.com/2008/02/14/ruby-testcase-resumable-assertions/#comments</comments>
		<pubDate>Thu, 14 Feb 2008 05:18:02 +0000</pubDate>
		<dc:creator>kofno</dc:creator>
		
		<category><![CDATA[Ruby]]></category>

		<category><![CDATA[Unit Testing]]></category>

		<guid isPermaLink="false">http://kofno.wordpress.com/?p=845</guid>
		<description><![CDATA[It’s hard to believe that, for all of Smalltalk’s elegance, it isn’t more widely accepted. I just read the SUnit chapter in Squeak By Example.  The SUnit TestCase class has a resumable assert method (TestCase#assert:description:resumable:). The use case for this is testing objects in a collection. Here’s a code example:
(1 to: 30) do: [ [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>It’s hard to believe that, for all of Smalltalk’s elegance, it isn’t more widely accepted. I just read the SUnit chapter in <a href="http://www.iam.unibe.ch/~scg/SBE/index.html">Squeak By Example</a>.  The SUnit TestCase class has a resumable assert method (TestCase#assert:description:resumable:). The use case for this is testing objects in a collection. Here’s a code example:</p>
<pre><span style="font-weight:bold;color:#444477;">(</span><span style="color:#ff9999;">1</span> <span style="color:#000044;">to</span><span style="font-weight:bold;color:#444477;">:</span> <span style="color:#ff9999;">30</span><span style="font-weight:bold;color:#444477;">)</span> <span style="font-weight:bold;color:#aa0000;">do</span><span style="font-weight:bold;color:#444477;">:</span> <span style="font-weight:bold;color:#444477;">[</span> <span style="color:#009999;">:each</span> <span style="font-weight:bold;color:#444477;">|</span>
    <span style="color:#0077ff;">self</span> <span style="color:#000044;">assert</span><span style="font-weight:bold;color:#444477;">:</span> <span style="color:#000044;">each</span> <span style="color:#000044;">even</span> <span style="color:#000044;">description</span><span style="font-weight:bold;color:#444477;">:</span> <span style="color:#000044;">each</span> <span style="color:#000044;">printString</span><span style="font-weight:bold;color:#444477;">,</span> <span style="font-weight:bold;color:#444477;">'</span><span style="background:#ffffee none repeat scroll 0 50%;color:#994444;"> is odd</span><span style="font-weight:bold;color:#444477;">'</span> <span style="color:#000044;">resumable</span><span style="font-weight:bold;color:#444477;">:</span> <span style="color:#0077ff;">true</span><span style="font-weight:bold;color:#444477;">]</span></pre>
<p>This code produces a test failure and outputs each object in the collection that fails the test (every odd number, in this example).</p>
<p>I decided that I wanted something like that in Ruby. Well, I want it in Java too, but coding in Java’s no fun <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>I was thinking of something like this:</p>
<pre><span style="color:#ff9999;">1</span><span style="font-weight:bold;color:#444477;">.</span><span style="color:#000044;">upto</span> <span style="color:#ff9999;">30</span> <span style="font-weight:bold;color:#aa0000;">do</span> <span style="font-weight:bold;color:#444477;">|</span> <span style="color:#000044;">each</span> <span style="font-weight:bold;color:#444477;">|</span>
       <span style="color:#000044;">assert_and_resume</span> <span style="color:#000044;">each</span> <span style="font-weight:bold;color:#444477;">%</span> <span style="color:#ff9999;">2</span> <span style="font-weight:bold;color:#444477;">==</span> <span style="color:#ff9999;">0</span><span style="font-weight:bold;color:#444477;">,</span> <span style="font-weight:bold;color:#444477;">"</span><span style="background:#ffffee none repeat scroll 0 50%;color:#994444;"><span style="color:#222277;">#{each}</span> is odd</span><span style="font-weight:bold;color:#444477;">"</span>
<span style="font-weight:bold;color:#aa0000;">end</span></pre>
<p>After poking through the TestCase source, I decided the easiest approach would be to write a custom assert, wrapping the assert_block method. I just needed to be able to catch the failed assertion and report the failure without stopping the test method.</p>
<p>So I wrangled a little code and came up with a solution that works like this:</p>
<pre><span style="color:#ff9999;">1</span><span style="font-weight:bold;color:#444477;">.</span><span style="color:#000044;">upto</span> <span style="color:#ff9999;">30</span> <span style="font-weight:bold;color:#aa0000;">do</span> <span style="font-weight:bold;color:#444477;">|</span> <span style="color:#000044;">each</span> <span style="font-weight:bold;color:#444477;">|</span>
       <span style="color:#000044;">assert_and_resume</span><span style="font-weight:bold;color:#444477;">(</span> <span style="font-weight:bold;color:#444477;">"</span><span style="background:#ffffee none repeat scroll 0 50%;color:#994444;"><span style="color:#222277;">#{ each }</span> is odd</span><span style="font-weight:bold;color:#444477;">"</span> <span style="font-weight:bold;color:#444477;">)</span> <span style="font-weight:bold;color:#444477;">{</span> <span style="color:#000044;">each</span> <span style="font-weight:bold;color:#444477;">%</span> <span style="color:#ff9999;">2</span> <span style="font-weight:bold;color:#444477;">==</span> <span style="color:#ff9999;">0</span> <span style="font-weight:bold;color:#444477;">}</span>
<span style="font-weight:bold;color:#aa0000;">end</span></pre>
<p>Pretty close to what I was thinking.</p>
<p>And here’s the implementation:</p>
<pre><span style="font-weight:bold;color:#aa0000;">module </span><span style="color:#005500;">Test</span>
  <span style="font-weight:bold;color:#aa0000;">module </span><span style="color:#005500;">Unit</span>

    <span style="font-style:italic;color:#000055;"># Resumable assertions are in a different module then the other</span>
    <span style="font-style:italic;color:#000055;"># assertions because they have a dependency on</span>
    <span style="font-style:italic;color:#000055;"># TestCase#add_failure.  The standard assertions can be included</span>
    <span style="font-style:italic;color:#000055;"># anywhere, so including Resumable assertions in the Assertions</span>
    <span style="font-style:italic;color:#000055;"># module might break existing code.</span>
    <span style="font-weight:bold;color:#aa0000;">module </span><span style="color:#005500;">ResumableAssertions</span>

      <span style="color:#000044;">require</span> <span style="font-weight:bold;color:#444477;">'</span><span style="background:#ffffee none repeat scroll 0 50%;color:#994444;">test/unit/assertions</span><span style="font-weight:bold;color:#444477;">'</span>
      <span style="font-weight:bold;color:#aa0000;">def </span><span style="color:#007777;">assert_and_resume</span><span style="font-weight:bold;color:#444477;">(</span> <span style="color:#000044;">description</span><span style="font-weight:bold;color:#444477;">,</span> <span style="font-weight:bold;color:#444477;">&amp;</span><span style="font-style:italic;color:#000055;">block )</span>
        <span style="font-weight:bold;color:#aa0000;">begin</span>
          <span style="color:#000044;">assert_block</span> <span style="color:#000044;">description</span><span style="font-weight:bold;color:#444477;">,</span> <span style="font-weight:bold;color:#444477;">&amp;</span><span style="font-style:italic;color:#000055;">block</span>
        <span style="font-weight:bold;color:#aa0000;">rescue</span> <span style="color:#0077ff;">AssertionFailedError</span> <span style="color:#444477;">=&gt;</span> <span style="color:#000044;">e</span>
          <span style="color:#000044;">add_failure</span> <span style="color:#000044;">e</span><span style="font-weight:bold;color:#444477;">.</span><span style="color:#000044;">message</span><span style="font-weight:bold;color:#444477;">,</span> <span style="color:#000044;">e</span><span style="font-weight:bold;color:#444477;">.</span><span style="color:#000044;">backtrace</span>
        <span style="font-weight:bold;color:#aa0000;">end</span>
      <span style="font-weight:bold;color:#aa0000;">end</span>

    <span style="font-weight:bold;color:#aa0000;">end</span>

    <span style="font-style:italic;color:#000055;"># Now we hook our assertion up to the test case. I could have just</span>
    <span style="font-style:italic;color:#000055;"># re-opened TestCase, but I wanted to keep the Assertion logic</span>
    <span style="font-style:italic;color:#000055;"># separate from the TestCase logic, as was the original author's</span>
    <span style="font-style:italic;color:#000055;"># design.</span>
    <span style="color:#000044;">require</span> <span style="font-weight:bold;color:#444477;">'</span><span style="background:#ffffee none repeat scroll 0 50%;color:#994444;">test/unit/testcase</span><span style="font-weight:bold;color:#444477;">'</span>
    <span style="color:#0077ff;">TestCase</span><span style="font-weight:bold;color:#444477;">.</span><span style="color:#000044;">send</span><span style="font-weight:bold;color:#444477;">(</span> <span style="color:#009999;">:include</span><span style="font-weight:bold;color:#444477;">,</span> <span style="color:#0077ff;">ResumableAssertions</span> <span style="font-weight:bold;color:#444477;">)</span>

  <span style="font-weight:bold;color:#aa0000;">end</span>
<span style="font-weight:bold;color:#aa0000;">end</span></pre>
<p>Not much to it. The only other change that I might like to make is to modify the output so that it’s clear that one method failed many times. On a lark, I ran this through <a href="http://caldersphere.rubyforge.org/ci_reporter/">ci_reporter</a> and then used <a href="http://antwrap.rubyforge.org/">Antwrap</a> to generate a junit report. Here’s an snapshot of what that report looks like:</p>
<p><a title="Resumable Assert Test Report" href="http://kofno.files.wordpress.com/2008/02/junit_report.png"><img src="http://kofno.files.wordpress.com/2008/02/junit_report.thumbnail.png" alt="Resumable Assert Test Report" /></a></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/kofno.wordpress.com/845/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/kofno.wordpress.com/845/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kofno.wordpress.com/845/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kofno.wordpress.com/845/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kofno.wordpress.com/845/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kofno.wordpress.com/845/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kofno.wordpress.com/845/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kofno.wordpress.com/845/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kofno.wordpress.com/845/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kofno.wordpress.com/845/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kofno.wordpress.com/845/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kofno.wordpress.com/845/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kofno.wordpress.com&blog=408005&post=845&subd=kofno&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://kofno.wordpress.com/2008/02/14/ruby-testcase-resumable-assertions/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/kofno-128.jpg" medium="image">
			<media:title type="html">kofno</media:title>
		</media:content>

		<media:content url="http://kofno.files.wordpress.com/2008/02/junit_report.thumbnail.png" medium="image">
			<media:title type="html">Resumable Assert Test Report</media:title>
		</media:content>
	</item>
		<item>
		<title>Book Avalanche: Design Patterns In Ruby</title>
		<link>http://kofno.wordpress.com/2008/02/09/book-avalanche-design-patterns-in-ruby/</link>
		<comments>http://kofno.wordpress.com/2008/02/09/book-avalanche-design-patterns-in-ruby/#comments</comments>
		<pubDate>Sat, 09 Feb 2008 05:36:05 +0000</pubDate>
		<dc:creator>kofno</dc:creator>
		
		<category><![CDATA[Books]]></category>

		<category><![CDATA[design patterns]]></category>

		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://kofno.wordpress.com/?p=844</guid>
		<description><![CDATA[Sitting on my desk at work is a copy of trusty the old GoF book. Whenever a new programmer asked me about patterns, that was the book I would hand him. The next time, I think I&#8217;ll hand him Design Patterns in Ruby instead. One reason is because I take any chance I can to [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Sitting on my desk at work is a copy of trusty the old <a href="http://www.amazon.com/Design-Patterns-Object-Oriented-Addison-Wesley-Professional/dp/0201633612/ref=pd_bbs_sr_5?ie=UTF8&amp;s=books&amp;qid=1202535166&amp;sr=8-5">GoF</a> book. Whenever a new programmer asked me about patterns, that was the book I would hand him. The next time, I think I&#8217;ll hand him <a href="http://" title="http://www.amazon.com/Design-Patterns-Ruby-Addison-Wesley-Professional/dp/0321490452/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1202534932&amp;sr=8-1"><i>Design Patterns in Ruby</i></a> instead. One reason is because I take any chance I can to introduce developers to Ruby, but the main reason is that <a href="http://jroller.com/rolsen/">Russ Olsen</a> does a great job of describing commonly used patterns.</p>
<p>Each pattern description is concise and easy to understand. The code samples lean towards simplistic, but are more then adequate for demonstrating the technique being described. Olsen starts with a code example that resembles how the implementation was describe in GoF. He then morphs the pattern into a more Ruby-ish implementation. Along the way he makes sure to describe the pros and cons of each implementation.</p>
<p>In addition to covering fourteen of the GoF patterns, the book also covers three additional patterns that are popular in the Ruby community. Those are Domain Specific Languages, Convention Over Configuration, and Creating Custom Objects  with Meta-programming. Again, the pattern descriptions are clear and the code examples nicely demonstrate the concepts.</p>
<p>If you&#8217;re just getting started a developer, and you&#8217;re interested in seeing what patterns are all about, <i>Design Patterns in Ruby</i> is a good place to start. If you&#8217;re already familiar with patterns, but not so familiar with Ruby, this book gives some good examples of how using Ruby impacts the patterns you&#8217;re already familiar. Even if you&#8217;re an experienced Rubyist, you may want to pick it up anyway. It&#8217;s a quick read and a nice book to have in your lending library.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/kofno.wordpress.com/844/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/kofno.wordpress.com/844/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kofno.wordpress.com/844/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kofno.wordpress.com/844/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kofno.wordpress.com/844/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kofno.wordpress.com/844/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kofno.wordpress.com/844/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kofno.wordpress.com/844/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kofno.wordpress.com/844/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kofno.wordpress.com/844/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kofno.wordpress.com/844/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kofno.wordpress.com/844/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kofno.wordpress.com&blog=408005&post=844&subd=kofno&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://kofno.wordpress.com/2008/02/09/book-avalanche-design-patterns-in-ruby/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/kofno-128.jpg" medium="image">
			<media:title type="html">kofno</media:title>
		</media:content>
	</item>
	</channel>
</rss>