<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>philcrissman.com</title>
	
	<link>http://philcrissman.com</link>
	<description>Web Development, startups, entrepreneurship, books, art, and other stuff</description>
	<lastBuildDate>Mon, 21 Sep 2009 20:42:04 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/philcrissman" type="application/rss+xml" /><feedburner:emailServiceId>philcrissman</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>Google Classic</title>
		<link>http://feedproxy.google.com/~r/philcrissman/~3/hc9ALdzBzSA/google-classic</link>
		<comments>http://philcrissman.com/2009/09/06/google-classic#comments</comments>
		<pubDate>Sun, 06 Sep 2009 18:34:28 +0000</pubDate>
		<dc:creator>Phil Crissman</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Google]]></category>

		<guid isPermaLink="false">http://philcrissman.com/?p=2071</guid>
		<description><![CDATA[
This is lovely work.
Via ffffound.
Tweet This!Share this on FacebookShare this on del.icio.usDigg this!Share this on RedditStumble upon something good? Share it on StumbleUponEmail this to a friend?Subscribe to the comments for this post?Add this to Google Bookmarks]]></description>
			<content:encoded><![CDATA[<p><a href="http://philcrissman.com/wp-content/uploads/2009/09/google_classic.jpg"><img src="http://philcrissman.com/wp-content/uploads/2009/09/google_classic.jpg" alt="google_classic" title="google_classic" width="600" height="426" class="alignnone size-full wp-image-2072" /></a></p>
<p>This is lovely work.</p>
<p>Via <a href="http://ffffound.com/image/5d4f2e5bde8b8fd03dd5f0accfe8a47057e42266">ffffound</a>.</p>
<div class="sexy-bookmarks sexy-bookmarks-expand"><ul class="socials"><li class="sexy-twitter"><a href="http://twitter.com/home?status=Google+Classic+-+http://ri.ms/9a0d+" rel="nofollow" title="Tweet This!">Tweet This!</a></li><li class="sexy-facebook"><a href="http://www.facebook.com/share.php?u=http://philcrissman.com/2009/09/06/google-classic&amp;t=Google+Classic" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a></li><li class="sexy-delicious"><a href="http://del.icio.us/post?url=http://philcrissman.com/2009/09/06/google-classic&amp;title=Google+Classic" rel="nofollow" title="Share this on del.icio.us">Share this on del.icio.us</a></li><li class="sexy-digg"><a href="http://digg.com/submit?phase=2&amp;url=http://philcrissman.com/2009/09/06/google-classic&amp;title=Google+Classic" rel="nofollow" title="Digg this!">Digg this!</a></li><li class="sexy-reddit"><a href="http://reddit.com/submit?url=http://philcrissman.com/2009/09/06/google-classic&amp;title=Google+Classic" rel="nofollow" title="Share this on Reddit">Share this on Reddit</a></li><li class="sexy-stumbleupon"><a href="http://www.stumbleupon.com/submit?url=http://philcrissman.com/2009/09/06/google-classic&amp;title=Google+Classic" rel="nofollow" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a></li><li class="sexy-mail"><a href="mailto:?subject=%22Google%20Classic%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22%0D%0A%0D%0AThis%20is%20lovely%20work.%0D%0A%0D%0AVia%20ffffound.%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://philcrissman.com/2009/09/06/google-classic" rel="nofollow" title="Email this to a friend?">Email this to a friend?</a></li><li class="sexy-comfeed"><a href="http://philcrissman.com/2009/09/06/google-classic/feed" rel="nofollow" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a></li><li class="sexy-google"><a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://philcrissman.com/2009/09/06/google-classic&amp;title=Google+Classic" rel="nofollow" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a></li></ul><div style="clear:both;"></div></div>
<p><a href="http://feedads.g.doubleclick.net/~a/FMLMYXm6GNGkM90K5fY4vLnopWs/0/da"><img src="http://feedads.g.doubleclick.net/~a/FMLMYXm6GNGkM90K5fY4vLnopWs/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/FMLMYXm6GNGkM90K5fY4vLnopWs/1/da"><img src="http://feedads.g.doubleclick.net/~a/FMLMYXm6GNGkM90K5fY4vLnopWs/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/philcrissman/~4/hc9ALdzBzSA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://philcrissman.com/2009/09/06/google-classic/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://philcrissman.com/2009/09/06/google-classic</feedburner:origLink></item>
		<item>
		<title>A Fledgling Freelance Professor</title>
		<link>http://feedproxy.google.com/~r/philcrissman/~3/iNADCTiDQzA/a-fledgling-freelance-professor</link>
		<comments>http://philcrissman.com/2009/08/20/a-fledgling-freelance-professor#comments</comments>
		<pubDate>Thu, 20 Aug 2009 20:37:22 +0000</pubDate>
		<dc:creator>Phil Crissman</dc:creator>
				<category><![CDATA[Asides]]></category>

		<guid isPermaLink="false">http://philcrissman.com/?p=2065</guid>
		<description><![CDATA[[_why] is a fledgling freelance professor, one who will die young and make no lasting impression. except there was that time when i vacuumed all of Greenland for them.bio from the blog that formerly lived at whytheluckystiff.net
Unit testing, in particular, is designed to reel in spontaneous hacking. It is like framing a picture before it [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>[_why] is a fledgling freelance professor, one who will die young and make no lasting impression. except there was that time when i vacuumed all of Greenland for them.<br /><em>bio from the blog that formerly lived at whytheluckystiff.net</em></p></blockquote>
<blockquote><p>Unit testing, in particular, is designed to reel in spontaneous hacking. It is like framing a picture before it has been painted. Hacking, at heart, will continue to be something of spontaneous order, something of anarchy, and the landscape of hacking is something which comes from human action but is not of human design.<br /><em>From &#8220;This Hack was not properly planned,&#8221; quoted on <a href="http://anarchaia.org/archive/2007/12/25.html">Anarchaia</a></em></p></blockquote>
<blockquote><p>
No, let’s not have rules. I don’t feel comfortable with having coding standards or any protocol on Camping. The point of Camping is to have very ugly, tricky code that goes against all the rules that people make for “beautiful” code these days. To show that ugly code can do beautiful things, maybe.</p>
<p>I don’t want to demonize anyone here, I just want to express the ideas that make Camping different. Camping’s personality is 80&#215;50. It is like the little gears of a watch that are all meshed together into a tight little mind-bending machine. The challenge of Camping isn’t to figure out how to automate obfuscation. The challenge is to bring new tricks into the code that push Ruby’s parser and make everyone look twice. Not all code needs to be a factory, some of it can just be origami.</p>
<p>_why<br />
<br /><em>From <a href="http://kneath.tumblr.com/post/167536641/no-lets-not-have-rules-i-dont-feel">Kyle Neath&#8217;s</a> tumblr.</em>
</p></blockquote>
<p><a href="http://en.wikipedia.org/wiki/Why_the_lucky_stiff">Why the lucky stiff</a></p>
<p><a href="http://ejohn.org/blog/eulogy-to-_why/">John Resig&#8217;s eulogy to _why</a></p>
<div class="sexy-bookmarks sexy-bookmarks-expand"><ul class="socials"><li class="sexy-twitter"><a href="http://twitter.com/home?status=A+Fledgling+Freelance+Professor+-+http://ri.ms/kc1x+" rel="nofollow" title="Tweet This!">Tweet This!</a></li><li class="sexy-facebook"><a href="http://www.facebook.com/share.php?u=http://philcrissman.com/2009/08/20/a-fledgling-freelance-professor&amp;t=A+Fledgling+Freelance+Professor" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a></li><li class="sexy-delicious"><a href="http://del.icio.us/post?url=http://philcrissman.com/2009/08/20/a-fledgling-freelance-professor&amp;title=A+Fledgling+Freelance+Professor" rel="nofollow" title="Share this on del.icio.us">Share this on del.icio.us</a></li><li class="sexy-digg"><a href="http://digg.com/submit?phase=2&amp;url=http://philcrissman.com/2009/08/20/a-fledgling-freelance-professor&amp;title=A+Fledgling+Freelance+Professor" rel="nofollow" title="Digg this!">Digg this!</a></li><li class="sexy-reddit"><a href="http://reddit.com/submit?url=http://philcrissman.com/2009/08/20/a-fledgling-freelance-professor&amp;title=A+Fledgling+Freelance+Professor" rel="nofollow" title="Share this on Reddit">Share this on Reddit</a></li><li class="sexy-stumbleupon"><a href="http://www.stumbleupon.com/submit?url=http://philcrissman.com/2009/08/20/a-fledgling-freelance-professor&amp;title=A+Fledgling+Freelance+Professor" rel="nofollow" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a></li><li class="sexy-mail"><a href="mailto:?subject=%22A%20Fledgling%20Freelance%20Professor%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22%5B_why%5D%20is%20a%20fledgling%20freelance%20professor%2C%20one%20who%20will%20die%20young%20and%20make%20no%20lasting%20impression.%20except%20there%20was%20that%20time%20when%20i%20vacuumed%20all%20of%20Greenland%20for%20them.bio%20from%20the%20blog%20that%20formerly%20lived%20at%20whytheluckystiff.net%0D%0A%0D%0AUnit%20testing%2C%20in%20particular%2C%20is%20designed%20to%20reel%20in%20spontaneous%20hack%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://philcrissman.com/2009/08/20/a-fledgling-freelance-professor" rel="nofollow" title="Email this to a friend?">Email this to a friend?</a></li><li class="sexy-comfeed"><a href="http://philcrissman.com/2009/08/20/a-fledgling-freelance-professor/feed" rel="nofollow" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a></li><li class="sexy-google"><a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://philcrissman.com/2009/08/20/a-fledgling-freelance-professor&amp;title=A+Fledgling+Freelance+Professor" rel="nofollow" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a></li></ul><div style="clear:both;"></div></div>
<p><a href="http://feedads.g.doubleclick.net/~a/8uqh3DXh-emU5X4YYFA2oR3x1VY/0/da"><img src="http://feedads.g.doubleclick.net/~a/8uqh3DXh-emU5X4YYFA2oR3x1VY/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/8uqh3DXh-emU5X4YYFA2oR3x1VY/1/da"><img src="http://feedads.g.doubleclick.net/~a/8uqh3DXh-emU5X4YYFA2oR3x1VY/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/philcrissman/~4/iNADCTiDQzA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://philcrissman.com/2009/08/20/a-fledgling-freelance-professor/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://philcrissman.com/2009/08/20/a-fledgling-freelance-professor</feedburner:origLink></item>
		<item>
		<title>Rails Test Prescriptions To Be Published by Pragmatic</title>
		<link>http://feedproxy.google.com/~r/philcrissman/~3/snwVJPaJ2bw/rails-test-prescriptions-to-be-published-by-pragmatic</link>
		<comments>http://philcrissman.com/2009/08/18/rails-test-prescriptions-to-be-published-by-pragmatic#comments</comments>
		<pubDate>Tue, 18 Aug 2009 15:23:11 +0000</pubDate>
		<dc:creator>Phil Crissman</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://philcrissman.com/?p=2059</guid>
		<description><![CDATA[
Image by Sebastian Bergmann
Noel Rappin&#8217;s Rails Test Prescriptions will be published by Pragmatic. Congratulations, Noel!
I was going to wait until I had finished this book to review it, but since you only have until August 28th to buy the ebook for $9.00 from http://lulu.com, I thought I&#8217;d plug it now.
Despite having not finished the book [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/sebastian_bergmann/2282734669/"><img src="http://farm3.static.flickr.com/2248/2282734669_596c7822ee.jpg" border="none" /></a><br />
<small>Image by <a href="http://www.flickr.com/photos/sebastian_bergmann/2282734669/">Sebastian Bergmann</a></small><br />
Noel Rappin&#8217;s <a href="http://railsrx.com">Rails Test Prescriptions</a> will be published by <a href="http://pragprog.com/">Pragmatic</a>. Congratulations, Noel!</p>
<p>I was going to wait until I had finished this book to review it, but since you only have until August 28th to buy the ebook for $9.00 from <a href="http://www.lulu.com/content/e-book/rails_test_prescriptions/6418439">http://lulu.com</a>, I thought I&#8217;d plug it now.</p>
<p>Despite having not finished the book yet, I recommend it highly, based in part upon the parts I have read so far, and in part on reviews and recommendations from folks on <a href="http://railsbridge.org">RailsBridge</a> of whom I think rather highly, among others. Noel&#8217;s stated aim is to answer all test-related questions within this volume; a tall order, but it sounds like it will make for a very complete topic guide.</p>
<p>I have to be honest; I&#8217;m not sure how being published in a more permanent form will affect the goal of answering any and all testing questions. From Noel&#8217;s RailsRx Book page:</p>
<blockquote><p>If you have a question about Rails testing that starts with &#8220;How do I?&#8221; or &#8220;How does that work?&#8221;, I want you to be able to find the answer in this book. If you are relatively new to testing Rails programs, and want to get placed on the right track, I want you to find help in this book. If you are a more advanced Rails programmer looking to find best practice for more specific topics, guess what &#8212; I want the answer to be in this book.</p></blockquote>
<p>The self-publishing ebook format seems perfectly suited to this goal. If you need to change or update a chapter, you can just <em>do it</em> and update the PDF that will be downloaded, while also allowing those who&#8217;ve already purchased the ebook to update also. I&#8217;m not sure this is going to be possible with a traditional paper-artifact style book; you could allow free ebook updates to any who have purchased the book, but that&#8217;s not the usual model for Pragmatic (as far as I know), let alone any other publishers.</p>
<p>That aside&#8211;I&#8217;m sure Noel and the Pragmatic team are creative enough to find a way to keep this book fulfilling Noel&#8217;s original vision for it. As someone who has fuzzy aspirations of publishing himself, I&#8217;m very happy for Noel; all the best!</p>
<p>As an aside, the other ebooks I&#8217;ve been reading, for which I also hope to post a review when I&#8217;m finished, are Mike Gunderloy&#8217;s <a href="http://www.railsfreelancebook.com/">Rails Freelancing Handbook</a>, and <a href="http://www.railsrescuebook.com/">Rails Rescue Handbook</a>, which are also both excellent so far.</p>
<p><small>Also, it is not my intention to start a Darth Vader image theme on the site. I just stumbled across the above image on Flickr and couldn&#8217;t resist.</small></p>
<div class="sexy-bookmarks sexy-bookmarks-expand"><ul class="socials"><li class="sexy-twitter"><a href="http://twitter.com/home?status=Rails+Test+Prescriptions+To+Be+Published+by+Pragmatic+-+http://ri.ms/r1wf+" rel="nofollow" title="Tweet This!">Tweet This!</a></li><li class="sexy-facebook"><a href="http://www.facebook.com/share.php?u=http://philcrissman.com/2009/08/18/rails-test-prescriptions-to-be-published-by-pragmatic&amp;t=Rails+Test+Prescriptions+To+Be+Published+by+Pragmatic" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a></li><li class="sexy-delicious"><a href="http://del.icio.us/post?url=http://philcrissman.com/2009/08/18/rails-test-prescriptions-to-be-published-by-pragmatic&amp;title=Rails+Test+Prescriptions+To+Be+Published+by+Pragmatic" rel="nofollow" title="Share this on del.icio.us">Share this on del.icio.us</a></li><li class="sexy-digg"><a href="http://digg.com/submit?phase=2&amp;url=http://philcrissman.com/2009/08/18/rails-test-prescriptions-to-be-published-by-pragmatic&amp;title=Rails+Test+Prescriptions+To+Be+Published+by+Pragmatic" rel="nofollow" title="Digg this!">Digg this!</a></li><li class="sexy-reddit"><a href="http://reddit.com/submit?url=http://philcrissman.com/2009/08/18/rails-test-prescriptions-to-be-published-by-pragmatic&amp;title=Rails+Test+Prescriptions+To+Be+Published+by+Pragmatic" rel="nofollow" title="Share this on Reddit">Share this on Reddit</a></li><li class="sexy-stumbleupon"><a href="http://www.stumbleupon.com/submit?url=http://philcrissman.com/2009/08/18/rails-test-prescriptions-to-be-published-by-pragmatic&amp;title=Rails+Test+Prescriptions+To+Be+Published+by+Pragmatic" rel="nofollow" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a></li><li class="sexy-mail"><a href="mailto:?subject=%22Rails%20Test%20Prescriptions%20To%20Be%20Published%20by%20Pragmatic%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22%0D%0AImage%20by%20Sebastian%20Bergmann%0D%0ANoel%20Rappin%27s%20Rails%20Test%20Prescriptions%20will%20be%20published%20by%20Pragmatic.%20Congratulations%2C%20Noel%21%0D%0A%0D%0AI%20was%20going%20to%20wait%20until%20I%20had%20finished%20this%20book%20to%20review%20it%2C%20but%20since%20you%20only%20have%20until%20August%2028th%20to%20buy%20the%20ebook%20for%20%249.00%20from%20http%3A%2F%2Flulu.com%2C%20I%20thought%20I%27d%20pl%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://philcrissman.com/2009/08/18/rails-test-prescriptions-to-be-published-by-pragmatic" rel="nofollow" title="Email this to a friend?">Email this to a friend?</a></li><li class="sexy-comfeed"><a href="http://philcrissman.com/2009/08/18/rails-test-prescriptions-to-be-published-by-pragmatic/feed" rel="nofollow" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a></li><li class="sexy-google"><a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://philcrissman.com/2009/08/18/rails-test-prescriptions-to-be-published-by-pragmatic&amp;title=Rails+Test+Prescriptions+To+Be+Published+by+Pragmatic" rel="nofollow" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a></li></ul><div style="clear:both;"></div></div>
<p><a href="http://feedads.g.doubleclick.net/~a/OumOReIbyBCbkJyBre7ZerOSk8c/0/da"><img src="http://feedads.g.doubleclick.net/~a/OumOReIbyBCbkJyBre7ZerOSk8c/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/OumOReIbyBCbkJyBre7ZerOSk8c/1/da"><img src="http://feedads.g.doubleclick.net/~a/OumOReIbyBCbkJyBre7ZerOSk8c/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/philcrissman/~4/snwVJPaJ2bw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://philcrissman.com/2009/08/18/rails-test-prescriptions-to-be-published-by-pragmatic/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://philcrissman.com/2009/08/18/rails-test-prescriptions-to-be-published-by-pragmatic</feedburner:origLink></item>
		<item>
		<title>Darth Vader Saving the Black Sea</title>
		<link>http://feedproxy.google.com/~r/philcrissman/~3/-cBvgseO-IQ/darth-vader-saving-the-black-sea</link>
		<comments>http://philcrissman.com/2009/08/14/darth-vader-saving-the-black-sea#comments</comments>
		<pubDate>Fri, 14 Aug 2009 14:56:26 +0000</pubDate>
		<dc:creator>Phil Crissman</dc:creator>
				<category><![CDATA[Asides]]></category>
		<category><![CDATA[art]]></category>
		<category><![CDATA[interesting]]></category>
		<category><![CDATA[photo]]></category>

		<guid isPermaLink="false">http://philcrissman.com/?p=2052</guid>
		<description><![CDATA[Photo: Daniel Bohzkov
The article is interesting, but I guess I&#8217;m a total geek and was a lot more interested in this 9-year old image of the dark lord of the Sith taking a Brita to the Black Sea. Go, Darth.

Tweet This!Share this on FacebookShare this on del.icio.usDigg this!Share this on RedditStumble upon something good? Share [...]]]></description>
			<content:encoded><![CDATA[<div style="padding: 0 0 0 15px;float: right;"><img src="http://www.we-make-money-not-art.com/wow/0aabrititiiaaal.jpg" border="none" /><br /><small>Photo: <a href="http://www.andrewkreps.com/bozhkov.html">Daniel Bohzkov</a></small></div>
<p>The <a href="http://www.we-make-money-not-art.com/archives/2009/08/oron-catts-director-of-symbiot.php">article</a> is interesting, but I guess I&#8217;m a total geek and was a lot more interested in this 9-year old image of the dark lord of the Sith taking a Brita to the Black Sea. Go, Darth.</p>
<p style="clear:both;">
<div class="sexy-bookmarks sexy-bookmarks-expand"><ul class="socials"><li class="sexy-twitter"><a href="http://twitter.com/home?status=Darth+Vader+Saving+the+Black+Sea+-+http://ri.ms/pqzy+" rel="nofollow" title="Tweet This!">Tweet This!</a></li><li class="sexy-facebook"><a href="http://www.facebook.com/share.php?u=http://philcrissman.com/2009/08/14/darth-vader-saving-the-black-sea&amp;t=Darth+Vader+Saving+the+Black+Sea" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a></li><li class="sexy-delicious"><a href="http://del.icio.us/post?url=http://philcrissman.com/2009/08/14/darth-vader-saving-the-black-sea&amp;title=Darth+Vader+Saving+the+Black+Sea" rel="nofollow" title="Share this on del.icio.us">Share this on del.icio.us</a></li><li class="sexy-digg"><a href="http://digg.com/submit?phase=2&amp;url=http://philcrissman.com/2009/08/14/darth-vader-saving-the-black-sea&amp;title=Darth+Vader+Saving+the+Black+Sea" rel="nofollow" title="Digg this!">Digg this!</a></li><li class="sexy-reddit"><a href="http://reddit.com/submit?url=http://philcrissman.com/2009/08/14/darth-vader-saving-the-black-sea&amp;title=Darth+Vader+Saving+the+Black+Sea" rel="nofollow" title="Share this on Reddit">Share this on Reddit</a></li><li class="sexy-stumbleupon"><a href="http://www.stumbleupon.com/submit?url=http://philcrissman.com/2009/08/14/darth-vader-saving-the-black-sea&amp;title=Darth+Vader+Saving+the+Black+Sea" rel="nofollow" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a></li><li class="sexy-mail"><a href="mailto:?subject=%22Darth%20Vader%20Saving%20the%20Black%20Sea%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22Photo%3A%20Daniel%20Bohzkov%0D%0AThe%20article%20is%20interesting%2C%20but%20I%20guess%20I%27m%20a%20total%20geek%20and%20was%20a%20lot%20more%20interested%20in%20this%209-year%20old%20image%20of%20the%20dark%20lord%20of%20the%20Sith%20taking%20a%20Brita%20to%20the%20Black%20Sea.%20Go%2C%20Darth.%0D%0A%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://philcrissman.com/2009/08/14/darth-vader-saving-the-black-sea" rel="nofollow" title="Email this to a friend?">Email this to a friend?</a></li><li class="sexy-comfeed"><a href="http://philcrissman.com/2009/08/14/darth-vader-saving-the-black-sea/feed" rel="nofollow" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a></li><li class="sexy-google"><a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://philcrissman.com/2009/08/14/darth-vader-saving-the-black-sea&amp;title=Darth+Vader+Saving+the+Black+Sea" rel="nofollow" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a></li></ul><div style="clear:both;"></div></div>
<p><a href="http://feedads.g.doubleclick.net/~a/QJ8HsIMyTfJQrbInv5YD8WjaPIk/0/da"><img src="http://feedads.g.doubleclick.net/~a/QJ8HsIMyTfJQrbInv5YD8WjaPIk/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/QJ8HsIMyTfJQrbInv5YD8WjaPIk/1/da"><img src="http://feedads.g.doubleclick.net/~a/QJ8HsIMyTfJQrbInv5YD8WjaPIk/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/philcrissman/~4/-cBvgseO-IQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://philcrissman.com/2009/08/14/darth-vader-saving-the-black-sea/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://philcrissman.com/2009/08/14/darth-vader-saving-the-black-sea</feedburner:origLink></item>
		<item>
		<title>How Not To Extend Rails Plugins</title>
		<link>http://feedproxy.google.com/~r/philcrissman/~3/RH8150E9QHg/how-not-to-extend-rails-plugins</link>
		<comments>http://philcrissman.com/2009/08/13/how-not-to-extend-rails-plugins#comments</comments>
		<pubDate>Fri, 14 Aug 2009 00:11:07 +0000</pubDate>
		<dc:creator>Phil Crissman</dc:creator>
				<category><![CDATA[Asides]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://philcrissman.com/?p=2039</guid>
		<description><![CDATA[
Photo by haydenseek
I wanted to add a method to a plugin we were using on a Rails app, and for the sake of keeping things separate, I didn&#8217;t want to add it directly to the plugin itself. That way, if we upgrade the plugin at some point, my additional method won&#8217;t disappear.
My solution is normally [...]]]></description>
			<content:encoded><![CDATA[<div style="padding: 0 15px 0 0;float:left;"><a href="http://www.flickr.com/photos/haydnseek/57931259/"><img src="http://farm1.static.flickr.com/30/57931259_6b9117a052_m.jpg" border="none" /></a><br />
<small>Photo by <a href="http://www.flickr.com/photos/haydnseek/57931259/">haydenseek</a></small></div>
<p>I wanted to add a method to a plugin we were using on a Rails app, and for the sake of keeping things separate, I didn&#8217;t want to add it directly to the plugin itself. That way, if we upgrade the plugin at some point, my additional method won&#8217;t disappear.</p>
<p>My solution is normally to add an initializer, like <code>config/initializers/the_plugin.rb</code>; so I did, and tried the following:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p20393"><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code" id="p2039code3"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">module</span> ThePlugin
  <span style="color:#9966CC; font-weight:bold;">class</span> Base
    <span style="color:#9966CC; font-weight:bold;">def</span> my_nifty_new_method
      <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;nifty&quot;</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>This is wrong! What I did (which I learned, when the application exploded after a local server restart), was open up the <em>module</em> for extension, and <em>replace</em> the Base class with a class that <em>only</em> had one method in it. Not what I had in mind at all.</p>
<p>What you should do instead is:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p20394"><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code" id="p2039code4"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> <span style="color:#6666ff; font-weight:bold;">ThePlugin::Base</span>
  <span style="color:#9966CC; font-weight:bold;">def</span> my_nifty_new_method
    <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;nifty&quot;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>There we go. That feels better. For those of you following along and nodding, yes, this time we just opened the class that we wanted to extend, and added a method, leaving all the other methods alone so that everything keeps working as it should.</p>
<div class="sexy-bookmarks sexy-bookmarks-expand"><ul class="socials"><li class="sexy-twitter"><a href="http://twitter.com/home?status=How+Not+To+Extend+Rails+Plugins+-+http://ri.ms/ly4v+" rel="nofollow" title="Tweet This!">Tweet This!</a></li><li class="sexy-facebook"><a href="http://www.facebook.com/share.php?u=http://philcrissman.com/2009/08/13/how-not-to-extend-rails-plugins&amp;t=How+Not+To+Extend+Rails+Plugins" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a></li><li class="sexy-delicious"><a href="http://del.icio.us/post?url=http://philcrissman.com/2009/08/13/how-not-to-extend-rails-plugins&amp;title=How+Not+To+Extend+Rails+Plugins" rel="nofollow" title="Share this on del.icio.us">Share this on del.icio.us</a></li><li class="sexy-digg"><a href="http://digg.com/submit?phase=2&amp;url=http://philcrissman.com/2009/08/13/how-not-to-extend-rails-plugins&amp;title=How+Not+To+Extend+Rails+Plugins" rel="nofollow" title="Digg this!">Digg this!</a></li><li class="sexy-reddit"><a href="http://reddit.com/submit?url=http://philcrissman.com/2009/08/13/how-not-to-extend-rails-plugins&amp;title=How+Not+To+Extend+Rails+Plugins" rel="nofollow" title="Share this on Reddit">Share this on Reddit</a></li><li class="sexy-stumbleupon"><a href="http://www.stumbleupon.com/submit?url=http://philcrissman.com/2009/08/13/how-not-to-extend-rails-plugins&amp;title=How+Not+To+Extend+Rails+Plugins" rel="nofollow" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a></li><li class="sexy-mail"><a href="mailto:?subject=%22How%20Not%20To%20Extend%20Rails%20Plugins%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22%0D%0APhoto%20by%20haydenseek%0D%0A%0D%0AI%20wanted%20to%20add%20a%20method%20to%20a%20plugin%20we%20were%20using%20on%20a%20Rails%20app%2C%20and%20for%20the%20sake%20of%20keeping%20things%20separate%2C%20I%20didn%27t%20want%20to%20add%20it%20directly%20to%20the%20plugin%20itself.%20That%20way%2C%20if%20we%20upgrade%20the%20plugin%20at%20some%20point%2C%20my%20additional%20method%20won%27t%20disappear.%0D%0A%0D%0AMy%20solution%20is%20no%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://philcrissman.com/2009/08/13/how-not-to-extend-rails-plugins" rel="nofollow" title="Email this to a friend?">Email this to a friend?</a></li><li class="sexy-comfeed"><a href="http://philcrissman.com/2009/08/13/how-not-to-extend-rails-plugins/feed" rel="nofollow" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a></li><li class="sexy-google"><a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://philcrissman.com/2009/08/13/how-not-to-extend-rails-plugins&amp;title=How+Not+To+Extend+Rails+Plugins" rel="nofollow" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a></li></ul><div style="clear:both;"></div></div>
<p><a href="http://feedads.g.doubleclick.net/~a/VIWFz_9d38OCmgQ4uQrSm_cCLeo/0/da"><img src="http://feedads.g.doubleclick.net/~a/VIWFz_9d38OCmgQ4uQrSm_cCLeo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/VIWFz_9d38OCmgQ4uQrSm_cCLeo/1/da"><img src="http://feedads.g.doubleclick.net/~a/VIWFz_9d38OCmgQ4uQrSm_cCLeo/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/philcrissman/~4/RH8150E9QHg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://philcrissman.com/2009/08/13/how-not-to-extend-rails-plugins/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://philcrissman.com/2009/08/13/how-not-to-extend-rails-plugins</feedburner:origLink></item>
		<item>
		<title>script/console, under the hood</title>
		<link>http://feedproxy.google.com/~r/philcrissman/~3/RwH156_Fkys/scriptconsole-under-the-hood</link>
		<comments>http://philcrissman.com/2009/07/24/scriptconsole-under-the-hood#comments</comments>
		<pubDate>Fri, 24 Jul 2009 15:55:42 +0000</pubDate>
		<dc:creator>Phil Crissman</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://philcrissman.com/?p=2025</guid>
		<description><![CDATA[
Photo by Steffe
I&#8217;ve recently started digging into script/console a little deeper. As a tool for Rails development, I think it&#8217;s safe to say that words like &#8220;indispensable&#8221; come to mind when the topic of the console arises. That said, I&#8217;ve yet to see a really complete guide to using script/console &#8212; lots and lots of [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://farm3.static.flickr.com/2427/3618515225_6446a9876b.jpg?v=0" /><br />
Photo by <a href="http://www.flickr.com/photos/steffe/">Steffe</a></p>
<p>I&#8217;ve recently started digging into script/console a little deeper. As a tool for Rails development, I think it&#8217;s safe to say that words like &#8220;indispensable&#8221; come to mind when the topic of the console arises. That said, I&#8217;ve yet to see a really complete guide to using script/console &#8212; lots and lots of collections of tips and tricks, but never a good solid guide to what&#8217;s going on with script/console.</p>
<p>This is the first of what will hopefully be several posts about what&#8217;s really going on when you open the rails console.<br />
<span id="more-2025"></span><br />
If we look at just the console script, we&#8217;ll find just these three lines:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p20258"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p2025code8"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#!/usr/bin/env ruby</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">dirname</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">__FILE__</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#996600;">'/../config/boot'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'commands/plugin'</span></pre></td></tr></table></div>

<p>The first line is simply the shebang line that lets the file be an executable ruby script. The second line requires the file config/boot. This file is a little over a hundred lines by default, so we won&#8217;t reproduce it here; you can read it quickly (if you want to) in one of your own rails projects. It basically sets some load paths and some constants, and ends by booting rails with <code>Rails.boot!</code>.</p>
<p>The third line requires <code>commands/console</code>&#8230; and that&#8217;s it. So to see what&#8217;s actually happening, we&#8217;ll have to look there.</p>
<p>You can find <code>commands/console.rb</code> in <code>railties/lib</code> in your rails directory, in <code>vendor</code> if you have frozen rails to a specific version, or otherwise under your rails gem in the lib directory.</p>
<p>(e.g., on this machine it&#8217;s in<br />
 /usr/local/lib/ruby/gems/1.8/gems/rails/lib/commands/console.rb).</p>
<p><code>console.rb</code> looks like this:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p20259"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
</pre></td><td class="code" id="p2025code9"><pre class="ruby" style="font-family:monospace;">irb = RUBY_PLATFORM =~ <span style="color:#006600; font-weight:bold;">/</span><span style="color:#006600; font-weight:bold;">&#40;</span>:?mswin<span style="color:#006600; font-weight:bold;">|</span>mingw<span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">/</span> ? <span style="color:#996600;">'irb.bat'</span> : <span style="color:#996600;">'irb'</span>
&nbsp;
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'optparse'</span>
&nbsp;
options = <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#ff3333; font-weight:bold;">:sandbox</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">false</span>, <span style="color:#ff3333; font-weight:bold;">:irb</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> irb <span style="color:#006600; font-weight:bold;">&#125;</span>
OptionParser.<span style="color:#9900CC;">new</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>opt<span style="color:#006600; font-weight:bold;">|</span>
  opt.<span style="color:#9900CC;">banner</span> = <span style="color:#996600;">&quot;Usage: console [environment] [options]&quot;</span>
  opt.<span style="color:#9900CC;">on</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'-s'</span>, <span style="color:#996600;">'--sandbox'</span>, <span style="color:#996600;">'Rollback database modifications on exit.'</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">|</span>v<span style="color:#006600; font-weight:bold;">|</span> options<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:sandbox</span><span style="color:#006600; font-weight:bold;">&#93;</span> = v <span style="color:#006600; font-weight:bold;">&#125;</span>
  opt.<span style="color:#9900CC;">on</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;--irb=[#{irb}]&quot;</span>, <span style="color:#996600;">'Invoke a different irb.'</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">|</span>v<span style="color:#006600; font-weight:bold;">|</span> options<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:irb</span><span style="color:#006600; font-weight:bold;">&#93;</span> = v <span style="color:#006600; font-weight:bold;">&#125;</span>
  opt.<span style="color:#9900CC;">on</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;--debugger&quot;</span>, <span style="color:#996600;">'Enable ruby-debugging for the console.'</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">|</span>v<span style="color:#006600; font-weight:bold;">|</span> options<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:debugger</span><span style="color:#006600; font-weight:bold;">&#93;</span> = v <span style="color:#006600; font-weight:bold;">&#125;</span>
  opt.<span style="color:#9900CC;">parse</span>!<span style="color:#006600; font-weight:bold;">&#40;</span>ARGV<span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
libs =  <span style="color:#996600;">&quot; -r irb/completion&quot;</span>
libs <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">%</span><span style="color:#006600; font-weight:bold;">&#40;</span> <span style="color:#006600; font-weight:bold;">-</span>r <span style="color:#996600;">&quot;#{RAILS_ROOT}/config/environment&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
libs <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> <span style="color:#996600;">&quot; -r console_app&quot;</span>
libs <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> <span style="color:#996600;">&quot; -r console_sandbox&quot;</span> <span style="color:#9966CC; font-weight:bold;">if</span> options<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:sandbox</span><span style="color:#006600; font-weight:bold;">&#93;</span>
libs <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> <span style="color:#996600;">&quot; -r console_with_helpers&quot;</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">if</span> options<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:debugger</span><span style="color:#006600; font-weight:bold;">&#93;</span>
  <span style="color:#9966CC; font-weight:bold;">begin</span>
    <span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'ruby-debug'</span>
    libs <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> <span style="color:#996600;">&quot; -r ruby-debug&quot;</span>
    <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;=&gt; Debugger enabled&quot;</span>
  <span style="color:#9966CC; font-weight:bold;">rescue</span> <span style="color:#CC00FF; font-weight:bold;">Exception</span>
    <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;You need to install ruby-debug to run the console in debugging mode. With gems, use 'gem install ruby-debug'&quot;</span>
    <span style="color:#CC0066; font-weight:bold;">exit</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
ENV<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'RAILS_ENV'</span><span style="color:#006600; font-weight:bold;">&#93;</span> = <span style="color:#9966CC; font-weight:bold;">case</span> ARGV.<span style="color:#9900CC;">first</span>
  <span style="color:#9966CC; font-weight:bold;">when</span> <span style="color:#996600;">&quot;p&quot;</span>; <span style="color:#996600;">&quot;production&quot;</span>
  <span style="color:#9966CC; font-weight:bold;">when</span> <span style="color:#996600;">&quot;d&quot;</span>; <span style="color:#996600;">&quot;development&quot;</span>
  <span style="color:#9966CC; font-weight:bold;">when</span> <span style="color:#996600;">&quot;t&quot;</span>; <span style="color:#996600;">&quot;test&quot;</span>
  <span style="color:#9966CC; font-weight:bold;">else</span>
    ARGV.<span style="color:#9900CC;">first</span> <span style="color:#006600; font-weight:bold;">||</span> ENV<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'RAILS_ENV'</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">||</span> <span style="color:#996600;">'development'</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">if</span> options<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:sandbox</span><span style="color:#006600; font-weight:bold;">&#93;</span>
  <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Loading #{ENV['RAILS_ENV']} environment in sandbox (Rails #{Rails.version})&quot;</span>
  <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Any modifications you make will be rolled back on exit&quot;</span>
<span style="color:#9966CC; font-weight:bold;">else</span>
  <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Loading #{ENV['RAILS_ENV']} environment (Rails #{Rails.version})&quot;</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#CC0066; font-weight:bold;">exec</span> <span style="color:#996600;">&quot;#{options[:irb]} #{libs} --simple-prompt&quot;</span></pre></td></tr></table></div>

<p>There&#8217;s a fair bit in there, so let&#8217;s look at what it&#8217;s doing in detail.</p>
<p>Line 1 is setting a local variable named <code>irb</code>. It checks to see if the constant <code>RAILS_PLATFORM</code> matches a value that would indicate we&#8217;re using some flavor of Microsoft Windows; if we are, it sets <code>irb</code> to <code>irb.bat</code>, which is what irb will be named for a Windows build of ruby; otherwise it&#8217;s set to simply <code>irb</code>, which is the commands name on *nix systems, including Mac OS X.</p>
<p>Next it requires &#8216;optparse&#8217;. <code>optparse</code> is a Ruby library for parsing options (I imagine you guessed that).</p>
<p>Then a local variable named <code>options</code> is created, and is given a few default parameters: <code>:sandbox</code> is set to false (more on this in a moment), and <code>:irb</code> is set to the local variable irb (in other words, to either &#8216;irb.bat&#8217; or &#8216;irb&#8217;, depending on the result of the expression on line 1).</p>
<p>An <code>OptionsParser</code> object is created next. We won&#8217;t dive into the details of this, but you&#8217;ll note a striking similarity to what you see in this block and what you&#8217;ll see if you type <code>script/console -h</code> in your rails root.</p>
<p>So if we follow along, we&#8217;ll read about the three standard command line arguments we can use when firing up the console:</p>
<p><code>--sandbox</code>, which just adds the feature that any changes you make to the database will be undone at the end of your console session<br />
<code>--irb</code>, which allows you to choose a different version of irb if applicable; so, if you have Ruby 1.9 installed, but not set as your default ruby version, you could start up the console with <code>script/console --irb=irb1.9</code>, and see how your console experiments work with Ruby 1.9.<br />
<code>--debugger</code>, which enables ruby debugging.</p>
<p>Next a local variable named <code>libs</code> is created; it&#8217;s a string, and a number of lines are concatenated to it, each in the form &#8221; -r [some library or module]&#8220;. The libs variable is eventually going to be passed to irb when the console starts it; the -r switch to irb simple requires whatever the next argument is. So this is simply building a list of the modules and libraries which are going to be present when the console is fired up.</p>
<p>The next section handles the case where you have actually typed <code>script/console --debugger</code>; it tries to require ruby-debug, and if an exception is raised, it will helpfully suggest that you run <code>gem install ruby-debug</code>.</p>
<p>On line 31, console sets the environment; it looks at your first argument to see if you tried to specify an environment, and if not, sets it to either <code>ARGV.first</code> (the first argument, if applicable), <code>ENV['RAILS_ENV']</code> (whatever the environment is already set to), or as a last resort to &#8216;<code>development</code>&#8216; (which is probably what you want, most of the time, hence why you may only rarely use this feature).</p>
<p>If you try this by typing <code>script/console foo</code>, you&#8217;ll see that console will try (and fail, unless you&#8217;ve created a foo environment) to find the file <code>/config/environments/foo.rb</code>. So as long as the environment you specify exists, the console will use it.</p>
<p>Now, since it&#8217;s using <code>ARGV.first</code>, you might ask yourself why, if you type <code>script/console --sandbox</code>, the console does not try to load the &#8220;<code>--sandbox</code>&#8221; environment. Good question! The answer can be found up in line 11: <code>opt.parse!(ARGV)</code>. The <code>parse!</code> method parses destructively; it pulls any valid options out of <code>ARGV</code>, and then returns whatever&#8217;s left over. So if <code>ARGV</code> started out as <code>"test --sandbox --irb=irb1.9"</code>, after <code>opts.parse!(ARGV)</code> it will just equal <code>"test"</code>. If nothing but valid options were supplied (i.e., no attempt to specify an environment), ARGV would be an empty string, and the environment will be set to either <code>ENV['RAILS_ENV'</code>], if it exists, or to 'development' if it doesn't.</p>
<p>So now console's figured out which environment to use, it checks to see if you've specified the sandbox option, and if you have, it prints a friendly message to remind you that anything you do to the database will be undone when you exit the console.</p>
<p>But wait, you might say. Other than print a message, it doesn't do anything; what actually makes the sandbox/database rollback work? Good question. If you look back up at lines 14-18, where the libs variable is set, you'll note that <code>console_sandbox</code> is required, but <em>only if</em> <code>options[:sandbox]</code> returns true. <code>console_sandbox</code> will take care of all that database rollback headache for us; so that's where it will come from.</p>
<p>There's only one line left: an <code>exec</code> expression. exec is going to execute the string you pass to it on the command line. So a plain vanilla run of script/console is actually running:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p202510"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p2025code10"><pre class="ruby" style="font-family:monospace;">irb <span style="color:#006600; font-weight:bold;">-</span>r irb<span style="color:#006600; font-weight:bold;">/</span>completion <span style="color:#006600; font-weight:bold;">-</span>r ~<span style="color:#006600; font-weight:bold;">/</span>your_rails_project_path<span style="color:#006600; font-weight:bold;">/</span>config<span style="color:#006600; font-weight:bold;">/</span>environment <span style="color:#006600; font-weight:bold;">-</span>r console_app <span style="color:#006600; font-weight:bold;">-</span>r console_with_helpers <span style="color:#006600; font-weight:bold;">--</span>simple_prompt</pre></td></tr></table></div>

<p>If you really want to, you could just type all that every time you want to use the console, but I'm guessing you'll stick with script/console.</p>
<p>If you're thinking there must be a little more to it than this, you're right; you'll remember that when <code>libs</code> was created, the modules <code>console_app</code> and <code>console_with_helpers</code> were required. That may be what I write about next, but in the meantime, if you have Rails installed you can always just open those files up and see what's in them.</p>
<div class="sexy-bookmarks sexy-bookmarks-expand"><ul class="socials"><li class="sexy-twitter"><a href="http://twitter.com/home?status=script%2Fconsole%2C+under+the+hood+-+http://ri.ms/wtcp+" rel="nofollow" title="Tweet This!">Tweet This!</a></li><li class="sexy-facebook"><a href="http://www.facebook.com/share.php?u=http://philcrissman.com/2009/07/24/scriptconsole-under-the-hood&amp;t=script%2Fconsole%2C+under+the+hood" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a></li><li class="sexy-delicious"><a href="http://del.icio.us/post?url=http://philcrissman.com/2009/07/24/scriptconsole-under-the-hood&amp;title=script%2Fconsole%2C+under+the+hood" rel="nofollow" title="Share this on del.icio.us">Share this on del.icio.us</a></li><li class="sexy-digg"><a href="http://digg.com/submit?phase=2&amp;url=http://philcrissman.com/2009/07/24/scriptconsole-under-the-hood&amp;title=script%2Fconsole%2C+under+the+hood" rel="nofollow" title="Digg this!">Digg this!</a></li><li class="sexy-reddit"><a href="http://reddit.com/submit?url=http://philcrissman.com/2009/07/24/scriptconsole-under-the-hood&amp;title=script%2Fconsole%2C+under+the+hood" rel="nofollow" title="Share this on Reddit">Share this on Reddit</a></li><li class="sexy-stumbleupon"><a href="http://www.stumbleupon.com/submit?url=http://philcrissman.com/2009/07/24/scriptconsole-under-the-hood&amp;title=script%2Fconsole%2C+under+the+hood" rel="nofollow" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a></li><li class="sexy-mail"><a href="mailto:?subject=%22script%2Fconsole%2C%20under%20the%20hood%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22%0D%0APhoto%20by%20Steffe%0D%0A%0D%0AI%27ve%20recently%20started%20digging%20into%20script%2Fconsole%20a%20little%20deeper.%20As%20a%20tool%20for%20Rails%20development%2C%20I%20think%20it%27s%20safe%20to%20say%20that%20words%20like%20%22indispensable%22%20come%20to%20mind%20when%20the%20topic%20of%20the%20console%20arises.%20That%20said%2C%20I%27ve%20yet%20to%20see%20a%20really%20complete%20guide%20to%20using%20script%2Fcons%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://philcrissman.com/2009/07/24/scriptconsole-under-the-hood" rel="nofollow" title="Email this to a friend?">Email this to a friend?</a></li><li class="sexy-comfeed"><a href="http://philcrissman.com/2009/07/24/scriptconsole-under-the-hood/feed" rel="nofollow" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a></li><li class="sexy-google"><a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://philcrissman.com/2009/07/24/scriptconsole-under-the-hood&amp;title=script%2Fconsole%2C+under+the+hood" rel="nofollow" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a></li></ul><div style="clear:both;"></div></div>
<p><a href="http://feedads.g.doubleclick.net/~a/T0UtxHEoqS5tfmJopVSa_2QmJz8/0/da"><img src="http://feedads.g.doubleclick.net/~a/T0UtxHEoqS5tfmJopVSa_2QmJz8/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/T0UtxHEoqS5tfmJopVSa_2QmJz8/1/da"><img src="http://feedads.g.doubleclick.net/~a/T0UtxHEoqS5tfmJopVSa_2QmJz8/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/philcrissman/~4/RwH156_Fkys" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://philcrissman.com/2009/07/24/scriptconsole-under-the-hood/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://philcrissman.com/2009/07/24/scriptconsole-under-the-hood</feedburner:origLink></item>
		<item>
		<title>Ruby’s Object::send can call private and protected methods</title>
		<link>http://feedproxy.google.com/~r/philcrissman/~3/geaz9pufw3Y/rubys-objectsend-can-call-private-and-protected-methods</link>
		<comments>http://philcrissman.com/2009/06/26/rubys-objectsend-can-call-private-and-protected-methods#comments</comments>
		<pubDate>Sat, 27 Jun 2009 02:18:10 +0000</pubDate>
		<dc:creator>Phil Crissman</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://philcrissman.com/?p=2011</guid>
		<description><![CDATA[
Photo by xiaming
One of the hallmarks of object oriented programming in most every implementation of it that I know of is the ability to designate certain methods as &#8220;private&#8221; or &#8220;protected&#8221;, thus keeping them from being called willy-nilly by any old script that wants to call them. Ruby also has this, of course, but interestingly [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/xiaming/99206245/"><img src="http://farm1.static.flickr.com/30/99206245_862bc5c93d.jpg?v=0" /></a><br />
<small>Photo by <a href="http://www.flickr.com/photos/xiaming/99206245/">xiaming</a></small></p>
<p>One of the hallmarks of object oriented programming in most every implementation of it that I know of is the ability to designate certain methods as &#8220;private&#8221; or &#8220;protected&#8221;, thus keeping them from being called willy-nilly by any old script that wants to call them. Ruby also has this, of course, but interestingly enough it can be easily circumvented.</p>
<p>I guess there are a few posts floating around about it, but I discovered it by accident playing around in irb this evening. I was reading David A. Black&#8217;s The Well Grounded Rubyist, where he mentions that you could send a message to a class either within the class definition itself, or by simply sending it to the class object like you&#8217;d send any other message:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p201116"><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code" id="p2011code16"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;"># The normal way to do it</span>
<span style="color:#9966CC; font-weight:bold;">class</span> Thing
  message <span style="color:#ff3333; font-weight:bold;">:whatever</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># you could also do this</span>
Thing.<span style="color:#9900CC;">message</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:whatever</span><span style="color:#006600; font-weight:bold;">&#41;</span></pre></td></tr></table></div>

<p><span id="more-2011"></span><br />
David mention&#8217;s attr_accessor in this context, so I thought I&#8217;d try that. Open <code>irb</code>:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p201117"><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code" id="p2011code17"><pre class="ruby" style="font-family:monospace;"><span style="color:#006600; font-weight:bold;">&gt;&gt;</span> <span style="color:#9966CC; font-weight:bold;">class</span> Thing
?<span style="color:#006600; font-weight:bold;">&gt;</span> <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#006600; font-weight:bold;">&gt;&gt;</span> Thing.<span style="color:#9900CC;">attr_accessor</span> <span style="color:#ff3333; font-weight:bold;">:name</span>
<span style="color:#CC00FF; font-weight:bold;">NoMethodError</span>: private method <span style="color:#996600;">'attr_accessor'</span> called <span style="color:#9966CC; font-weight:bold;">for</span> Thing:<span style="color:#9966CC; font-weight:bold;">Class</span></pre></td></tr></table></div>

<p>Oh. So much for that, then. But, knowing of the existence of the send method, I thought I&#8217;d try that.</p>

<div class="wp_codebox"><table width="100%" ><tr id="p201118"><td class="line_numbers"><pre>1
2
</pre></td><td class="code" id="p2011code18"><pre class="ruby" style="font-family:monospace;">Thing.<span style="color:#9900CC;">send</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:attr_accessor</span>, <span style="color:#ff3333; font-weight:bold;">:name</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">nil</span></pre></td></tr></table></div>

<p>For the non-<code>irb</code> user, that <code>nil</code> that was returned, and the fact that no error message was returned, indicated that our experiment worked. Now <code>Thing</code>&#8217;s have a name attribute.</p>

<div class="wp_codebox"><table width="100%" ><tr id="p201119"><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code" id="p2011code19"><pre class="ruby" style="font-family:monospace;"><span style="color:#006600; font-weight:bold;">&gt;&gt;</span> t = Thing.<span style="color:#9900CC;">new</span>
<span style="color:#006600; font-weight:bold;">&gt;&gt;</span> t.<span style="color:#9900CC;">name</span> = <span style="color:#996600;">&quot;Larry&quot;</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Larry&quot;</span>
<span style="color:#006600; font-weight:bold;">&gt;&gt;</span> t.<span style="color:#9900CC;">name</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Larry&quot;</span></pre></td></tr></table></div>

<p>What&#8217;s interesting about all this is that <code>attr_accessor</code> is a private method on <code>Class</code>. Yet we just called it.</p>
<p><code>send</code> is often introduced as a way to show how everything is an object and that you can do exciting things like <code>1.send(:+, 1)</code> and get <code>2</code> as the result. No one usually mentions that it can be used to call private or protected methods from outside a given class.</p>
<p>To make it clear what you could do here:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p201120"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code" id="p2011code20"><pre class="ruby" style="font-family:monospace;"><span style="color:#006600; font-weight:bold;">&gt;&gt;</span> <span style="color:#9966CC; font-weight:bold;">class</span> Thing
?<span style="color:#006600; font-weight:bold;">&gt;</span>    <span style="color:#9966CC; font-weight:bold;">def</span> hello
?<span style="color:#006600; font-weight:bold;">&gt;</span>     <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Hello, world!&quot;</span>
?<span style="color:#006600; font-weight:bold;">&gt;</span>   <span style="color:#9966CC; font-weight:bold;">end</span>
?<span style="color:#006600; font-weight:bold;">&gt;</span>   private
?<span style="color:#006600; font-weight:bold;">&gt;</span>     <span style="color:#9966CC; font-weight:bold;">def</span> private_hello
?<span style="color:#006600; font-weight:bold;">&gt;</span>       <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Hello, privately.&quot;</span>
?<span style="color:#006600; font-weight:bold;">&gt;</span>     <span style="color:#9966CC; font-weight:bold;">end</span>
?<span style="color:#006600; font-weight:bold;">&gt;</span> <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#006600; font-weight:bold;">&gt;&gt;</span> t = Thing.<span style="color:#9900CC;">new</span>
<span style="color:#006600; font-weight:bold;">&gt;&gt;</span> t.<span style="color:#9900CC;">hello</span>
Hello, world!
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">nil</span>
<span style="color:#006600; font-weight:bold;">&gt;&gt;</span> t.<span style="color:#9900CC;">private_hello</span>
<span style="color:#CC00FF; font-weight:bold;">NoMethodError</span>: private method <span style="color:#996600;">'private_hello'</span> called <span style="color:#9966CC; font-weight:bold;">for</span> ...
<span style="color:#006600; font-weight:bold;">&gt;&gt;</span> t.<span style="color:#9900CC;">send</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:private_hello</span><span style="color:#006600; font-weight:bold;">&#41;</span>
Hello, privately.
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">nil</span></pre></td></tr></table></div>

<p>So, yes. You can do this, if you so choose. Please use your powers for good, and not for evil.</p>
<p>Now <em>why</em> this works, I can&#8217;t yet say, though I&#8217;m interested in learning, if there is a reason. Evidently there <a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/7404">may have been some debate</a> as to whether ruby 1.9 would still have this behavior, but as of this writing it does. </p>
<p>Note: I did only a brief search, and it seems <a href="http://www.google.com/search?client=safari&#038;rls=en-us&#038;q=ruby+send+method&#038;ie=UTF-8&#038;oe=UTF-8">this functionality is not unknown</a>, though it still seems somewhat odd to me that such an easy way to sidestep the private/protected designation of methods exists.</p>
<div class="sexy-bookmarks sexy-bookmarks-expand"><ul class="socials"><li class="sexy-twitter"><a href="http://twitter.com/home?status=Ruby%27s+Object%3A%3Asend+can+call+private+and+protected+methods+-+http://ri.ms/5snb+" rel="nofollow" title="Tweet This!">Tweet This!</a></li><li class="sexy-facebook"><a href="http://www.facebook.com/share.php?u=http://philcrissman.com/2009/06/26/rubys-objectsend-can-call-private-and-protected-methods&amp;t=Ruby%27s+Object%3A%3Asend+can+call+private+and+protected+methods" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a></li><li class="sexy-delicious"><a href="http://del.icio.us/post?url=http://philcrissman.com/2009/06/26/rubys-objectsend-can-call-private-and-protected-methods&amp;title=Ruby%27s+Object%3A%3Asend+can+call+private+and+protected+methods" rel="nofollow" title="Share this on del.icio.us">Share this on del.icio.us</a></li><li class="sexy-digg"><a href="http://digg.com/submit?phase=2&amp;url=http://philcrissman.com/2009/06/26/rubys-objectsend-can-call-private-and-protected-methods&amp;title=Ruby%27s+Object%3A%3Asend+can+call+private+and+protected+methods" rel="nofollow" title="Digg this!">Digg this!</a></li><li class="sexy-reddit"><a href="http://reddit.com/submit?url=http://philcrissman.com/2009/06/26/rubys-objectsend-can-call-private-and-protected-methods&amp;title=Ruby%27s+Object%3A%3Asend+can+call+private+and+protected+methods" rel="nofollow" title="Share this on Reddit">Share this on Reddit</a></li><li class="sexy-stumbleupon"><a href="http://www.stumbleupon.com/submit?url=http://philcrissman.com/2009/06/26/rubys-objectsend-can-call-private-and-protected-methods&amp;title=Ruby%27s+Object%3A%3Asend+can+call+private+and+protected+methods" rel="nofollow" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a></li><li class="sexy-mail"><a href="mailto:?subject=%22Ruby%27s%20Object%3A%3Asend%20can%20call%20private%20and%20protected%20methods%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22%0D%0APhoto%20by%20xiaming%0D%0A%0D%0AOne%20of%20the%20hallmarks%20of%20object%20oriented%20programming%20in%20most%20every%20implementation%20of%20it%20that%20I%20know%20of%20is%20the%20ability%20to%20designate%20certain%20methods%20as%20%22private%22%20or%20%22protected%22%2C%20thus%20keeping%20them%20from%20being%20called%20willy-nilly%20by%20any%20old%20script%20that%20wants%20to%20call%20them.%20Ruby%20also%20ha%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://philcrissman.com/2009/06/26/rubys-objectsend-can-call-private-and-protected-methods" rel="nofollow" title="Email this to a friend?">Email this to a friend?</a></li><li class="sexy-comfeed"><a href="http://philcrissman.com/2009/06/26/rubys-objectsend-can-call-private-and-protected-methods/feed" rel="nofollow" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a></li><li class="sexy-google"><a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://philcrissman.com/2009/06/26/rubys-objectsend-can-call-private-and-protected-methods&amp;title=Ruby%27s+Object%3A%3Asend+can+call+private+and+protected+methods" rel="nofollow" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a></li></ul><div style="clear:both;"></div></div>
<p><a href="http://feedads.g.doubleclick.net/~a/CvT858JoI4e7_jr8TKde0T5RU3k/0/da"><img src="http://feedads.g.doubleclick.net/~a/CvT858JoI4e7_jr8TKde0T5RU3k/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/CvT858JoI4e7_jr8TKde0T5RU3k/1/da"><img src="http://feedads.g.doubleclick.net/~a/CvT858JoI4e7_jr8TKde0T5RU3k/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/philcrissman/~4/geaz9pufw3Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://philcrissman.com/2009/06/26/rubys-objectsend-can-call-private-and-protected-methods/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://philcrissman.com/2009/06/26/rubys-objectsend-can-call-private-and-protected-methods</feedburner:origLink></item>
		<item>
		<title>blip.fm/philcrissman</title>
		<link>http://feedproxy.google.com/~r/philcrissman/~3/Uu7hsO1Ikt0/blip-fmphilcrissman</link>
		<comments>http://philcrissman.com/2009/06/25/blip-fmphilcrissman#comments</comments>
		<pubDate>Thu, 25 Jun 2009 22:40:28 +0000</pubDate>
		<dc:creator>Phil Crissman</dc:creator>
				<category><![CDATA[Asides]]></category>
		<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://philcrissman.com/?p=2009</guid>
		<description><![CDATA[I barely use Blip.fm. Every time I visit it, I think, this is pretty cool. I should use this more. Then I don&#8217;t really use it.
I&#8217;m at http://blip.fm/philcrissman, if you like that sort of thing.
Tweet This!Share this on FacebookShare this on del.icio.usDigg this!Share this on RedditStumble upon something good? Share it on StumbleUponEmail this to [...]]]></description>
			<content:encoded><![CDATA[<p>I barely use Blip.fm. Every time I visit it, I think, this is pretty cool. I should use this more. Then I don&#8217;t really use it.</p>
<p>I&#8217;m at <a href="http://blip.fm/philcrissman">http://blip.fm/philcrissma</a>n, if you like that sort of thing.</p>
<div class="sexy-bookmarks sexy-bookmarks-expand"><ul class="socials"><li class="sexy-twitter"><a href="http://twitter.com/home?status=blip.fm%2Fphilcrissman+-+http://ri.ms/khfg+" rel="nofollow" title="Tweet This!">Tweet This!</a></li><li class="sexy-facebook"><a href="http://www.facebook.com/share.php?u=http://philcrissman.com/2009/06/25/blip-fmphilcrissman&amp;t=blip.fm%2Fphilcrissman" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a></li><li class="sexy-delicious"><a href="http://del.icio.us/post?url=http://philcrissman.com/2009/06/25/blip-fmphilcrissman&amp;title=blip.fm%2Fphilcrissman" rel="nofollow" title="Share this on del.icio.us">Share this on del.icio.us</a></li><li class="sexy-digg"><a href="http://digg.com/submit?phase=2&amp;url=http://philcrissman.com/2009/06/25/blip-fmphilcrissman&amp;title=blip.fm%2Fphilcrissman" rel="nofollow" title="Digg this!">Digg this!</a></li><li class="sexy-reddit"><a href="http://reddit.com/submit?url=http://philcrissman.com/2009/06/25/blip-fmphilcrissman&amp;title=blip.fm%2Fphilcrissman" rel="nofollow" title="Share this on Reddit">Share this on Reddit</a></li><li class="sexy-stumbleupon"><a href="http://www.stumbleupon.com/submit?url=http://philcrissman.com/2009/06/25/blip-fmphilcrissman&amp;title=blip.fm%2Fphilcrissman" rel="nofollow" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a></li><li class="sexy-mail"><a href="mailto:?subject=%22blip.fm%2Fphilcrissman%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22I%20barely%20use%20Blip.fm.%20Every%20time%20I%20visit%20it%2C%20I%20think%2C%20this%20is%20pretty%20cool.%20I%20should%20use%20this%20more.%20Then%20I%20don%27t%20really%20use%20it.%0D%0A%0D%0AI%27m%20at%20http%3A%2F%2Fblip.fm%2Fphilcrissman%2C%20if%20you%20like%20that%20sort%20of%20thing.%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://philcrissman.com/2009/06/25/blip-fmphilcrissman" rel="nofollow" title="Email this to a friend?">Email this to a friend?</a></li><li class="sexy-comfeed"><a href="http://philcrissman.com/2009/06/25/blip-fmphilcrissman/feed" rel="nofollow" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a></li><li class="sexy-google"><a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://philcrissman.com/2009/06/25/blip-fmphilcrissman&amp;title=blip.fm%2Fphilcrissman" rel="nofollow" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a></li></ul><div style="clear:both;"></div></div>
<p><a href="http://feedads.g.doubleclick.net/~a/okxitfVUWc4OO4AMVjUkHnFaVMw/0/da"><img src="http://feedads.g.doubleclick.net/~a/okxitfVUWc4OO4AMVjUkHnFaVMw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/okxitfVUWc4OO4AMVjUkHnFaVMw/1/da"><img src="http://feedads.g.doubleclick.net/~a/okxitfVUWc4OO4AMVjUkHnFaVMw/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/philcrissman/~4/Uu7hsO1Ikt0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://philcrissman.com/2009/06/25/blip-fmphilcrissman/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://philcrissman.com/2009/06/25/blip-fmphilcrissman</feedburner:origLink></item>
		<item>
		<title>Scripty2</title>
		<link>http://feedproxy.google.com/~r/philcrissman/~3/t8eoft4OgMo/scripty2</link>
		<comments>http://philcrissman.com/2009/06/25/scripty2#comments</comments>
		<pubDate>Thu, 25 Jun 2009 22:38:20 +0000</pubDate>
		<dc:creator>Phil Crissman</dc:creator>
				<category><![CDATA[Asides]]></category>

		<guid isPermaLink="false">http://philcrissman.com/?p=2007</guid>
		<description><![CDATA[Calloo, callay. 
Making the web more delicious: Scripty2
Tweet This!Share this on FacebookShare this on del.icio.usDigg this!Share this on RedditStumble upon something good? Share it on StumbleUponEmail this to a friend?Subscribe to the comments for this post?Add this to Google Bookmarks]]></description>
			<content:encoded><![CDATA[<p>Calloo, callay. </p>
<p>Making the web more delicious: <a href="http://scripty2.com/">Scripty2</a></p>
<div class="sexy-bookmarks sexy-bookmarks-expand"><ul class="socials"><li class="sexy-twitter"><a href="http://twitter.com/home?status=Scripty2+-+http://ri.ms/mlgw+" rel="nofollow" title="Tweet This!">Tweet This!</a></li><li class="sexy-facebook"><a href="http://www.facebook.com/share.php?u=http://philcrissman.com/2009/06/25/scripty2&amp;t=Scripty2" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a></li><li class="sexy-delicious"><a href="http://del.icio.us/post?url=http://philcrissman.com/2009/06/25/scripty2&amp;title=Scripty2" rel="nofollow" title="Share this on del.icio.us">Share this on del.icio.us</a></li><li class="sexy-digg"><a href="http://digg.com/submit?phase=2&amp;url=http://philcrissman.com/2009/06/25/scripty2&amp;title=Scripty2" rel="nofollow" title="Digg this!">Digg this!</a></li><li class="sexy-reddit"><a href="http://reddit.com/submit?url=http://philcrissman.com/2009/06/25/scripty2&amp;title=Scripty2" rel="nofollow" title="Share this on Reddit">Share this on Reddit</a></li><li class="sexy-stumbleupon"><a href="http://www.stumbleupon.com/submit?url=http://philcrissman.com/2009/06/25/scripty2&amp;title=Scripty2" rel="nofollow" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a></li><li class="sexy-mail"><a href="mailto:?subject=%22Scripty2%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22Calloo%2C%20callay.%20%0D%0A%0D%0AMaking%20the%20web%20more%20delicious%3A%20Scripty2%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://philcrissman.com/2009/06/25/scripty2" rel="nofollow" title="Email this to a friend?">Email this to a friend?</a></li><li class="sexy-comfeed"><a href="http://philcrissman.com/2009/06/25/scripty2/feed" rel="nofollow" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a></li><li class="sexy-google"><a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://philcrissman.com/2009/06/25/scripty2&amp;title=Scripty2" rel="nofollow" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a></li></ul><div style="clear:both;"></div></div>
<p><a href="http://feedads.g.doubleclick.net/~a/JwHrexOROWh3IwXgbYeBBZqY8q4/0/da"><img src="http://feedads.g.doubleclick.net/~a/JwHrexOROWh3IwXgbYeBBZqY8q4/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/JwHrexOROWh3IwXgbYeBBZqY8q4/1/da"><img src="http://feedads.g.doubleclick.net/~a/JwHrexOROWh3IwXgbYeBBZqY8q4/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/philcrissman/~4/t8eoft4OgMo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://philcrissman.com/2009/06/25/scripty2/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://philcrissman.com/2009/06/25/scripty2</feedburner:origLink></item>
		<item>
		<title>The Idle Canadians</title>
		<link>http://feedproxy.google.com/~r/philcrissman/~3/s3oh7iEx3As/the-idle-canadians</link>
		<comments>http://philcrissman.com/2009/06/20/the-idle-canadians#comments</comments>
		<pubDate>Sat, 20 Jun 2009 22:45:37 +0000</pubDate>
		<dc:creator>Phil Crissman</dc:creator>
				<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://philcrissman.com/?p=2002</guid>
		<description><![CDATA[
Mark is an old friend of mine; good to see he&#8217;s still doing music.
Tweet This!Share this on FacebookShare this on del.icio.usDigg this!Share this on RedditStumble upon something good? Share it on StumbleUponEmail this to a friend?Subscribe to the comments for this post?Add this to Google Bookmarks]]></description>
			<content:encoded><![CDATA[<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/HnOBoPQVVgs&#038;hl=en&#038;fs=1&#038;rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/HnOBoPQVVgs&#038;hl=en&#038;fs=1&#038;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p>Mark is an old friend of mine; good to see he&#8217;s still doing music.</p>
<div class="sexy-bookmarks sexy-bookmarks-expand"><ul class="socials"><li class="sexy-twitter"><a href="http://twitter.com/home?status=The+Idle+Canadians+-+http://ri.ms/uggo+" rel="nofollow" title="Tweet This!">Tweet This!</a></li><li class="sexy-facebook"><a href="http://www.facebook.com/share.php?u=http://philcrissman.com/2009/06/20/the-idle-canadians&amp;t=The+Idle+Canadians" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a></li><li class="sexy-delicious"><a href="http://del.icio.us/post?url=http://philcrissman.com/2009/06/20/the-idle-canadians&amp;title=The+Idle+Canadians" rel="nofollow" title="Share this on del.icio.us">Share this on del.icio.us</a></li><li class="sexy-digg"><a href="http://digg.com/submit?phase=2&amp;url=http://philcrissman.com/2009/06/20/the-idle-canadians&amp;title=The+Idle+Canadians" rel="nofollow" title="Digg this!">Digg this!</a></li><li class="sexy-reddit"><a href="http://reddit.com/submit?url=http://philcrissman.com/2009/06/20/the-idle-canadians&amp;title=The+Idle+Canadians" rel="nofollow" title="Share this on Reddit">Share this on Reddit</a></li><li class="sexy-stumbleupon"><a href="http://www.stumbleupon.com/submit?url=http://philcrissman.com/2009/06/20/the-idle-canadians&amp;title=The+Idle+Canadians" rel="nofollow" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a></li><li class="sexy-mail"><a href="mailto:?subject=%22The%20Idle%20Canadians%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22%0D%0A%0D%0AMark%20is%20an%20old%20friend%20of%20mine%3B%20good%20to%20see%20he%27s%20still%20doing%20music.%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://philcrissman.com/2009/06/20/the-idle-canadians" rel="nofollow" title="Email this to a friend?">Email this to a friend?</a></li><li class="sexy-comfeed"><a href="http://philcrissman.com/2009/06/20/the-idle-canadians/feed" rel="nofollow" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a></li><li class="sexy-google"><a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://philcrissman.com/2009/06/20/the-idle-canadians&amp;title=The+Idle+Canadians" rel="nofollow" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a></li></ul><div style="clear:both;"></div></div>
<p><a href="http://feedads.g.doubleclick.net/~a/y7fNgzy9tFKOZ1jb7I_5-g16kgU/0/da"><img src="http://feedads.g.doubleclick.net/~a/y7fNgzy9tFKOZ1jb7I_5-g16kgU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/y7fNgzy9tFKOZ1jb7I_5-g16kgU/1/da"><img src="http://feedads.g.doubleclick.net/~a/y7fNgzy9tFKOZ1jb7I_5-g16kgU/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/philcrissman/~4/s3oh7iEx3As" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://philcrissman.com/2009/06/20/the-idle-canadians/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://philcrissman.com/2009/06/20/the-idle-canadians</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 1.806 seconds. --><!-- Cached page generated by WP-Super-Cache on 2009-10-29 15:42:12 -->
