<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>All Things (v7)</title>
	<atom:link href="http://anthonyeden.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://anthonyeden.wordpress.com</link>
	<description>Stuff and Stuff</description>
	<lastBuildDate>Wed, 26 Aug 2009 19:00:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='anthonyeden.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>All Things (v7)</title>
		<link>http://anthonyeden.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://anthonyeden.wordpress.com/osd.xml" title="All Things (v7)" />
	<atom:link rel='hub' href='http://anthonyeden.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Profiling JRuby</title>
		<link>http://anthonyeden.wordpress.com/2009/08/26/profiling-jruby/</link>
		<comments>http://anthonyeden.wordpress.com/2009/08/26/profiling-jruby/#comments</comments>
		<pubDate>Wed, 26 Aug 2009 19:00:54 +0000</pubDate>
		<dc:creator>anthonyeden</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[refinery jruby profiling]]></category>

		<guid isPermaLink="false">http://anthonyeden.wordpress.com/?p=102</guid>
		<description><![CDATA[Writing multi-threaded applications is quite a challenging task, but perhaps even more challenging is debugging them when they don&#8217;t work as you expect. These past couple of weeks I&#8217;ve been working hard to troubleshoot issues with a distributed processing system built on Refinery. When running with a relatively small number of threads things work fine [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthonyeden.wordpress.com&amp;blog=3548766&amp;post=102&amp;subd=anthonyeden&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Writing multi-threaded applications is quite a challenging task, but perhaps even more challenging is debugging them when they don&#8217;t work as you expect. These past couple of weeks I&#8217;ve been working hard to troubleshoot issues with a distributed processing system built on <a href="http://github.com/aeden/refinery">Refinery</a>. When running with a relatively small number of threads things work fine &#8211; processing goes about its merry way at a level of throughput that is expected. As soon as we increase the number of threads though, all hell breaks loose.</p>
<p>As part of the troubleshooting process we decided to hook up a profiler. I started out looking at the profiler that&#8217;s built into JRuby (use the &#8211;sample option) and got a little bit of data. Urged on by <a href="http://twitter.com/dje">@dje</a> I started looking at Java profilers. It&#8217;s been a while since I&#8217;ve dug into the world of Java so I started with open source tools to get my bearings. Suffice to say I did not find what I was looking for there, so I did what any self-respecting Internet-savvy being would do in my place: I twittered it.</p>
<p>Thanks to <a href="http://twitter.com/sethladd">@sethladd</a> I downloaded <a href="http://www.yourkit.com/">YourKit</a>, got it hooked up in about 30 minutes with the production system and away I went. The results so far have been promising. Some of the issues that could be fixed have, however we are basically at a point where we&#8217;ve run into a wall with Ruby&#8217;s Net::HTTP implementation. The long term solution is probably to replace the Net::HTTP library with something based on the Reactor pattern (see my <a href="http://github.com/aeden/jruby-http-reactor">jruby-http-reactor</a> project for the initial baby-steps in that direction) but the bottom line is without a profiler to help us get headed on the right path we probably would have spent a lot more time &#8220;fixing&#8221; things that weren&#8217;t broken. If you&#8217;re considering using JRuby consider that you will have access to a wide variety of Java tools that can be quite helpful when troubleshooting.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/anthonyeden.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/anthonyeden.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/anthonyeden.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/anthonyeden.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/anthonyeden.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/anthonyeden.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/anthonyeden.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/anthonyeden.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/anthonyeden.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/anthonyeden.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/anthonyeden.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/anthonyeden.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/anthonyeden.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/anthonyeden.wordpress.com/102/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthonyeden.wordpress.com&amp;blog=3548766&amp;post=102&amp;subd=anthonyeden&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://anthonyeden.wordpress.com/2009/08/26/profiling-jruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/31254903db793bf6f84bbd607fe092fd?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">anthonyeden</media:title>
		</media:content>
	</item>
		<item>
		<title>Browser on VMWare Talking to Server on Host</title>
		<link>http://anthonyeden.wordpress.com/2009/05/29/browser-on-vmware-talking-to-server-on-host/</link>
		<comments>http://anthonyeden.wordpress.com/2009/05/29/browser-on-vmware-talking-to-server-on-host/#comments</comments>
		<pubDate>Fri, 29 May 2009 12:51:04 +0000</pubDate>
		<dc:creator>anthonyeden</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[vmware tricks]]></category>

		<guid isPermaLink="false">http://blog.anthonyeden.com/2009/05/29/browser-on-vmware-talking-to-server-on-host/</guid>
		<description><![CDATA[One of the things I have been meaning to do for a while is set up VMWare so I can run a browser on WinXP that connects to a server running in OS X. I finally did that this morning. Here&#8217;s how: 1.) Follow the instructions here (Rob Sanheim, FTW): http://robsanheim.com/2007/12/11/creating-a-static-loopback-address-to-use-in-vmware/ 2.) If you provide [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthonyeden.wordpress.com&amp;blog=3548766&amp;post=97&amp;subd=anthonyeden&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>One of the things I have been meaning to do for a while is set up VMWare so I can run a browser on WinXP that connects to a server running in OS X. I finally did that this morning. Here&#8217;s how:</p>
<p>1.) Follow the instructions here (Rob Sanheim, FTW): <a href="http://robsanheim.com/2007/12/11/creating-a-static-loopback-address-to-use-in-vmware/">http://robsanheim.com/2007/12/11/creating-a-static-loopback-address-to-use-in-vmware/</a></p>
<p>2.) If you provide a different interface depending on the requested host name, then Edit C:\WINDOWS\system32\drivers\etc\hosts to point 10.0.0.100 (or whatever IP address you selected in step 1 to a hostname (for example local.mysite.com).</p>
<p>That&#8217;s pretty much it. I noticed that I had to restart IE for it to recognize the new hosts file changes, but otherwise it works like a charm.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/anthonyeden.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/anthonyeden.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/anthonyeden.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/anthonyeden.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/anthonyeden.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/anthonyeden.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/anthonyeden.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/anthonyeden.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/anthonyeden.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/anthonyeden.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/anthonyeden.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/anthonyeden.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/anthonyeden.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/anthonyeden.wordpress.com/97/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthonyeden.wordpress.com&amp;blog=3548766&amp;post=97&amp;subd=anthonyeden&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://anthonyeden.wordpress.com/2009/05/29/browser-on-vmware-talking-to-server-on-host/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/31254903db793bf6f84bbd607fe092fd?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">anthonyeden</media:title>
		</media:content>
	</item>
		<item>
		<title>Ensure has_one Instance Exists</title>
		<link>http://anthonyeden.wordpress.com/2009/05/20/ensure-has_one-instance-exists/</link>
		<comments>http://anthonyeden.wordpress.com/2009/05/20/ensure-has_one-instance-exists/#comments</comments>
		<pubDate>Wed, 20 May 2009 18:48:28 +0000</pubDate>
		<dc:creator>anthonyeden</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[has_one]]></category>

		<guid isPermaLink="false">http://blog.anthonyeden.com/?p=87</guid>
		<description><![CDATA[Sometimes you want to ensure that a has_one relationship always exists, even if the relationship is added after existing instances have already been created in your database. One way to solve the problem is to add an after_create and then have a rake task go through your database and create instances in each case where [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthonyeden.wordpress.com&amp;blog=3548766&amp;post=87&amp;subd=anthonyeden&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Sometimes you want to ensure that a has_one relationship always exists, even if the relationship is added after existing instances have already been created in your database. One way to solve the problem is to add an after_create and then have a rake task go through your database and create instances in each case where the has_one instance doesn&#8217;t yet exist. </p>
<p>I think the following is more elegant:</p>
<pre>
  has_one :thing
  def thing_with_create
    thing_without_create || create_thing
  end
  alias_method_chain :thing, :create
</pre>
<p>I can then access o.thing and it will automatically create it if it doesn&#8217;t exist.</p>
<p>What do you think?</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/anthonyeden.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/anthonyeden.wordpress.com/87/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/anthonyeden.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/anthonyeden.wordpress.com/87/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/anthonyeden.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/anthonyeden.wordpress.com/87/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/anthonyeden.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/anthonyeden.wordpress.com/87/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/anthonyeden.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/anthonyeden.wordpress.com/87/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/anthonyeden.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/anthonyeden.wordpress.com/87/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/anthonyeden.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/anthonyeden.wordpress.com/87/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthonyeden.wordpress.com&amp;blog=3548766&amp;post=87&amp;subd=anthonyeden&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://anthonyeden.wordpress.com/2009/05/20/ensure-has_one-instance-exists/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/31254903db793bf6f84bbd607fe092fd?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">anthonyeden</media:title>
		</media:content>
	</item>
		<item>
		<title>Capistrano, Rails and Amazon CloudFront</title>
		<link>http://anthonyeden.wordpress.com/2009/04/14/capistrano-rails-and-amazon-cloudfront/</link>
		<comments>http://anthonyeden.wordpress.com/2009/04/14/capistrano-rails-and-amazon-cloudfront/#comments</comments>
		<pubDate>Tue, 14 Apr 2009 18:17:34 +0000</pubDate>
		<dc:creator>anthonyeden</dc:creator>
				<category><![CDATA[amazon web services]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[aws]]></category>
		<category><![CDATA[cloudfront]]></category>

		<guid isPermaLink="false">http://blog.anthonyeden.com/?p=66</guid>
		<description><![CDATA[Amazon CloudFront (ACF), the content delivery network that is now part of Amazon's Web Services provides a simple means of deploying content to a fast, low-cost global content delivery network. As part of our deployment process for chi.mp we now deploy our static assets to ACF. Here's how we do it.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthonyeden.wordpress.com&amp;blog=3548766&amp;post=66&amp;subd=anthonyeden&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://aws.amazon.com/cloudfront/">Amazon CloudFront (ACF)</a>, the content delivery network that is now part of Amazon&#8217;s Web Services provides a simple means of deploying content to a fast, low-cost global content delivery network. As part of our deployment process for chi.mp we now deploy our static assets to ACF (well, technically this will be deployed as part of the next release). Here&#8217;s how we do it: <a href="http://gist.github.com/95255">http://gist.github.com/95255</a>.</p>
<p>Let&#8217;s go through this piece by piece:</p>
<p><code><br />
# get the previous timestamp<br />
old_timestamp = File.read("config/deploy_timestamp").to_i rescue 0<br />
</code></p>
<p>The first step is to get the previous timestamp. This will be saved in memory and compared against file modification times to determine if a put or a copy should be used.</p>
<pre>
# generate timestamp into config/deploy_timestamp
timestamp = Time.now.to_i
File.open("config/deploy_timestamp", 'w') do |f|
  f.write(timestamp)
end
</pre>
<p>The next step is to update the time stamp file and store the new time stamp in memory.</p>
<pre>
# generate minified JS and CSS
system('rake asset:packager:build_all')
</pre>
<p>This portion uses the asset packager plugin for Rails to package up JS and CSS files into bundled assets.</p>
<pre>
# sync local public/ directory to S3 bucket
# the S3 bucket directory should be the
#  timestamp generated above
require 'right_aws'
s3 = RightAws::S3.new(access_key_id, secret_access_key)
bucket = s3.bucket('a-bucket')
</pre>
<p>Here we connect to S3 using RightScale&#8217;s RightAws library. You will need to put your access key ID and secret access key into the variables provided. The bucket name should be a bucket that has already been set up as an Amazon CloudFront S3 source. Documentation on how to set up a CloudFront configuration can be found in the <a href="http://docs.amazonwebservices.com/AmazonCloudFront/latest/GettingStartedGuide/">ACF Getting Started Guide</a>.</p>
<pre>
put_count = 0
copy_count = 0
Dir.glob('public/**/*').each do |f|
  next if File.directory?(f)
  key = "#{timestamp}/#{f.gsub(/public\//, '')}"
  if File.new(f).mtime.to_i &gt; old_timestamp
    puts "putting #{f} into S3 as #{key}"
    bucket.put(key, File.read(f), {}, 'public-read')
    put_count += 1
  else
    old_key = bucket.key(
      "#{old_timestamp}/#{f.gsub(/public\//, '')}"
    )
    if old_key.exists?
      puts "copying #{old_key} to #{key}"
      old_key.copy(key)

      acl = s3.interface.get_acl(bucket.name, old_key.name)
      s3.interface.put_acl(bucket.name, new_key.name, acl[:object])

      copy_count += 1
    else
      puts "putting #{f} into S3 as #{key}"
      bucket.put(key, File.read(f), {}, 'public-read')
      put_count += 1
    end
  end
end
puts "done. #{put_count} files uploaded,
  #{copy_count} keys copied"
</pre>
<p>This code loops through all of the files and directories in the <code>public</code> directory and for any file it first checks to see if the file modification time is after the previous timestamp. If it is then the data from the file will be pushed to S3 using a key that is the file path prefixed with the time stamp. If the modification time is before the previous time stamp then the file hasn&#8217;t changed. In this case the script will look up the old key in S3. If the old key exists then <code>key.copy()</code> is used to make a copy of the resource (reducing the time required to process large files) and set the ACL to the old key&#8217;s ACL. If the key does not exist then the file data will be put into S3.</p>
<p>The S3 key is always prefixed with the time stamp. This is done because Amazon CloudFront will cache files for a minimum of 24 hours. If you were to release a new version of an asset and overwrite the old asset in S3 it could be quite some time before ACF would pick up the change. By prefixing the key with the time stamp you will always get the latest version as long as the asset host is configured properly in your Rails application (more on that in a bit).</p>
<pre>
# add and commit the config/deploy_timestamp file
system('git add config/deploy_timestamp')
system('git commit -m "deploy_assets complete,
   updating timestamp"')
system('git push')
</pre>
<p>This last little bit of code commits the updated deploy_timestamp file into the git repository and pushes it to the remote repo. This works for us because we use Github. If you do not then you&#8217;d want to adjust these lines to push the file into your source code repository.</p>
<p>The last piece of the puzzle is to set the asset host in Rails. Here&#8217;s what that might look like:</p>
<pre>
ts_file = File.join(RAILS_ROOT, "config/deploy_timestamp")
ts = File.read(ts_file).to_i
config.action_controller.asset_host = Proc.new { |source, request|
  if request.ssl?
    "https://yoursite.com"
  else
    "http://cdn.yoursite.com/#{ts}"
  end
}
</pre>
<p>This code can go either in your config block in <code>config/environment.rb</code> or in specific environment configs. You&#8217;ll also need to set up a CNAME record pointing cdn.yoursite.com to your Amazon CDN host. If you aren&#8217;t using Rails you&#8217;d still need some way to indicate that all images should be originating from Amazon CloudFront. Note that resources requested from SSL encrypted pages must still go to your SSL-enabled servers since CloudFront does not support SSL at this time.</p>
<p>One final caveat: if you are using images that are specified in stylesheets you&#8217;ll need to ensure that you use relative paths to those images.</p>
<p><del datetime="2009-05-29T14:48:01+00:00"><strong>Update 1</strong> It turns out that when you copy a key in S3 the original key ACL is not retained. This is unfortunate since it means copied assets will now be marked private. Furthermore it appears that RightAWS does not support URI-based group identifiers for S3 ACLs, which means there is no way to change the permissions on a copied key to public-read. It seems likely that I can switch to another S3 lib to get this functionality, but that&#8217;ll have to wait. More updates will be forthcoming when I fix this.</del></p>
<p><strong>Update 2</strong> Thanks to Alex&#8217;s comment I&#8217;ve re-enabled the key copy in the example code. It&#8217;s a bit slow to copy the ACL, but for large files it will still perform significantly better.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/anthonyeden.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/anthonyeden.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/anthonyeden.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/anthonyeden.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/anthonyeden.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/anthonyeden.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/anthonyeden.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/anthonyeden.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/anthonyeden.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/anthonyeden.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/anthonyeden.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/anthonyeden.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/anthonyeden.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/anthonyeden.wordpress.com/66/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthonyeden.wordpress.com&amp;blog=3548766&amp;post=66&amp;subd=anthonyeden&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://anthonyeden.wordpress.com/2009/04/14/capistrano-rails-and-amazon-cloudfront/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/31254903db793bf6f84bbd607fe092fd?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">anthonyeden</media:title>
		</media:content>
	</item>
		<item>
		<title>Upgrading to Rails 2.3</title>
		<link>http://anthonyeden.wordpress.com/2009/04/07/upgrading-to-rails-23/</link>
		<comments>http://anthonyeden.wordpress.com/2009/04/07/upgrading-to-rails-23/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 01:19:00 +0000</pubDate>
		<dc:creator>anthonyeden</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[2.3]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[upgrade]]></category>

		<guid isPermaLink="false">http://blog.anthonyeden.com/?p=59</guid>
		<description><![CDATA[I spent most of today working on upgrading chi.mp to Rails 2.3. Upgrading required more than just simply freezing the new gems. Here are my notes so far: application.rb becomes application_controller.rb The source file application.rb becomes application_controller.rb. uninitialized constant Rails::Plugin::OpenIdAuthentication The OpenIdAuthentication plugin needed to be upgraded to the latest from github: script/plugin install git://github.com/rails/open_id_authentication.git [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthonyeden.wordpress.com&amp;blog=3548766&amp;post=59&amp;subd=anthonyeden&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I spent most of today working on upgrading chi.mp to Rails 2.3. Upgrading required more than just simply freezing the new gems. Here are my notes so far:</p>
<p><b>application.rb becomes application_controller.rb</b></p>
<p>The source file application.rb becomes application_controller.rb.</p>
<p><b>uninitialized constant Rails::Plugin::OpenIdAuthentication</b></p>
<p>The OpenIdAuthentication plugin needed to be upgraded to the latest from github:</p>
<p><code>script/plugin install git://github.com/rails/open_id_authentication.git --force</code></p>
<p><b>undefined method `use_transactional_fixtures=&#8217; for Test::Unit::TestCase:Class</b></p>
<p>Two problems occurred that caused this. First, the test/unit/test_helper.rb was opening up Test::Unit::TestCase to add additional items when it should be opening up ActiveSupport::TestCase. Additionally some of our tests were old and still extended from Test::Unit::TestCase instead of ActiveSupport::TestCase.</p>
<p><b>formatted_xxx_url</b></p>
<p>Formatted URLs should now use the normal xxx_url methods and just include :format =&gt; format in the options Hash.</p>
<p><b>has_many collections do not support .destroy(id)</b></p>
<p>They did, I&#8217;m certain (and I have code from 2.2.2 that works to prove it), but it no longer works. The easiest way to fix this is to replace collection.destroy(id) with collection.find(id).destroy. There is a lighthouse ticket for this as well if you&#8217;re interested in following along at home: <a href="https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/2306-associationcollections-destroy-method-is-not-compatible-with-old-version">https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/2306-associationcollections-destroy-method-is-not-compatible-with-old-version</a>.</p>
<p><b>Enumerable.group_by now returns an OrderedHash</b></p>
<p>This one was maddening. First of all, as mentioned, Enumerable.group_by now returns an OrderedHash instead of an array of arrays. This taken by itself would have been ok, but our test expectation for this was showing the result as being a Hash where the keys were the arrays and the values were nil.</p>
<p><b>Local cache strategy freezes memcached objects</b></p>
<p>The local cache strategy now uses MemoryCache as a local storage mechanism in front of remote caches like memcached. Unfortunately the MemoryCache#write method freezes the objects and therefore if you try to modify them afterward an error is raised. The only way I&#8217;ve found to stop this for the moment is to change value.freeze to value in the MemoryStore.write method. This probably isn&#8217;t the best solution but it does the job.</p>
<p>That&#8217;s it so far, running locally. Next step is to test in an integrated environment.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/anthonyeden.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/anthonyeden.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/anthonyeden.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/anthonyeden.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/anthonyeden.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/anthonyeden.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/anthonyeden.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/anthonyeden.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/anthonyeden.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/anthonyeden.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/anthonyeden.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/anthonyeden.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/anthonyeden.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/anthonyeden.wordpress.com/59/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthonyeden.wordpress.com&amp;blog=3548766&amp;post=59&amp;subd=anthonyeden&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://anthonyeden.wordpress.com/2009/04/07/upgrading-to-rails-23/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/31254903db793bf6f84bbd607fe092fd?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">anthonyeden</media:title>
		</media:content>
	</item>
		<item>
		<title>Displaying A Default Image</title>
		<link>http://anthonyeden.wordpress.com/2009/03/13/displaying-a-default-image/</link>
		<comments>http://anthonyeden.wordpress.com/2009/03/13/displaying-a-default-image/#comments</comments>
		<pubDate>Fri, 13 Mar 2009 15:38:58 +0000</pubDate>
		<dc:creator>anthonyeden</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://blog.anthonyeden.com/?p=49</guid>
		<description><![CDATA[Have you ever wanted to display a default image if the img tag source references a file that cannot be found? You might think that you could use the onerror event on the img tag, but don&#8217;t be fooled into thinking it&#8217;s that easy! No, it isn&#8217;t, because most browsers don&#8217;t support that event in [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthonyeden.wordpress.com&amp;blog=3548766&amp;post=49&amp;subd=anthonyeden&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Have you ever wanted to display a default image if the img tag source references a file that cannot be found? You might think that you could use the onerror event on the img tag, but don&#8217;t be fooled into thinking it&#8217;s that easy! No, it isn&#8217;t, because most browsers don&#8217;t support that event in the way you expect.</p>
<p>Here&#8217;s a little bit of JavaScript that I have used to successfully replace a broken image with a default (assumes <a href="http://prototypejs.org/">prototype</a> is used). Also note that this has been extracted somewhat from my implementation and thus may have gathered bugs during the extraction, but the concept should still be clear.</p>
<pre>
$$('img.my_class_name').each(function(e) {
  var i = new Image();
  i.onerror = function() {
    e.src = "error.png";
    e.onerror = "";
    return true;
  };
  i.src = e.src;
});
</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/anthonyeden.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/anthonyeden.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/anthonyeden.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/anthonyeden.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/anthonyeden.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/anthonyeden.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/anthonyeden.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/anthonyeden.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/anthonyeden.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/anthonyeden.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/anthonyeden.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/anthonyeden.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/anthonyeden.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/anthonyeden.wordpress.com/49/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthonyeden.wordpress.com&amp;blog=3548766&amp;post=49&amp;subd=anthonyeden&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://anthonyeden.wordpress.com/2009/03/13/displaying-a-default-image/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/31254903db793bf6f84bbd607fe092fd?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">anthonyeden</media:title>
		</media:content>
	</item>
		<item>
		<title>RDDB on Github</title>
		<link>http://anthonyeden.wordpress.com/2009/03/06/rddb-on-github/</link>
		<comments>http://anthonyeden.wordpress.com/2009/03/06/rddb-on-github/#comments</comments>
		<pubDate>Fri, 06 Mar 2009 14:55:36 +0000</pubDate>
		<dc:creator>anthonyeden</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.anthonyeden.com/?p=50</guid>
		<description><![CDATA[I just imported the source code for RDDB from RubyForge into Github. First let me say that the SVN import from Github is hot &#8211; they&#8217;ve done a really good job. Second, please do not interpret this as an indication that I am going to resume work on RDDB &#8211; I&#8217;m not (I don&#8217;t think). [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthonyeden.wordpress.com&amp;blog=3548766&amp;post=50&amp;subd=anthonyeden&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I just imported the source code for RDDB from RubyForge into Github. First let me say that the SVN import from Github is hot &#8211; they&#8217;ve done a really good job. Second, please do not interpret this as an indication that I am going to resume work on RDDB &#8211; I&#8217;m not (I don&#8217;t think). At this point I&#8217;m just trying to get all of my projects on Github because it rocks and if I <strong>do</strong> want to work on any of these projects I can easily <strong>and </strong>others can fork them, which is really the big win.</p>
<p>Anyhow, if you want RDDB go to github: <a href="http://github.com/aeden/rddb/tree/master">http://github.com/aeden/rddb/tree/master</a></p>
<p>Unrelated to RDDB, I also put support into the Moneta S3 implementation for passing :multi_thread as an option to the Moneta::S3.new method.</p>
<p>Have fun!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/anthonyeden.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/anthonyeden.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/anthonyeden.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/anthonyeden.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/anthonyeden.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/anthonyeden.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/anthonyeden.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/anthonyeden.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/anthonyeden.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/anthonyeden.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/anthonyeden.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/anthonyeden.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/anthonyeden.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/anthonyeden.wordpress.com/50/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthonyeden.wordpress.com&amp;blog=3548766&amp;post=50&amp;subd=anthonyeden&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://anthonyeden.wordpress.com/2009/03/06/rddb-on-github/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/31254903db793bf6f84bbd607fe092fd?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">anthonyeden</media:title>
		</media:content>
	</item>
		<item>
		<title>S3 in Moneta</title>
		<link>http://anthonyeden.wordpress.com/2009/03/02/s3-in-moneta/</link>
		<comments>http://anthonyeden.wordpress.com/2009/03/02/s3-in-moneta/#comments</comments>
		<pubDate>Mon, 02 Mar 2009 15:33:18 +0000</pubDate>
		<dc:creator>anthonyeden</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[amazon web services]]></category>
		<category><![CDATA[aws]]></category>
		<category><![CDATA[moneta]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[s3]]></category>

		<guid isPermaLink="false">http://blog.anthonyeden.com/?p=45</guid>
		<description><![CDATA[Sometimes you just have to shave a yak, mostly because it&#8217;s fun. I am working on a project where I need access to a distributed key/value store, in my case S3. I could have just gone to S3 directly but since Yehuda Katz recently announced Moneta, which is a generic key/value store interface I figured [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthonyeden.wordpress.com&amp;blog=3548766&amp;post=45&amp;subd=anthonyeden&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Sometimes you just have to shave a yak, mostly because it&#8217;s fun.</p>
<p>I am working on a project where I need access to a distributed key/value store, in my case S3. I could have just gone to S3 directly but since <a href="http://yehudakatz.com/">Yehuda Katz</a> <a href="http://yehudakatz.com/2009/02/12/initial-release-of-moneta-unified-keyvalue-store-api/">recently announced</a> <a href="http://github.com/wycats/moneta/tree/master">Moneta</a>, which is a generic key/value store interface I figured I&#8217;d give a shot at building an S3 implementation. The result is in <a href="http://github.com/aeden/moneta/tree/master">my fork on github</a>.</p>
<p>Some points of interest. I refactored the specs so that specs which had dependencies (such as the memcache implementation) are in their own spec files. This makes it much easier to run only a single spec for one implementation at a time, highly useful since some of the dependencies are not things I really want or need on my dev machine, nor do I really want to run <strong>all</strong> of the specs every time.</p>
<p>The Moneta interface includes the ability to specify :expires_in with a number of seconds as a common means for setting expiration of the key in the store. This is not something S3 supports out of the box. Initially I tried to make it work with HTTP Expires header to no avail. I settled on using a meta header (non-standard HTTP headers used by S3 for client info) to store the expiration date and then I check for the expiration when retrieving the S3 key object. This actually worked quite well even though it did require jumping through some implementation hoops and resulted in more code than I was originally hoping for.</p>
<p>I also had to raise the expiration times just a smidge in the specs since it was quite possible that the test operation would not complete before 1 second would pass and it was causing random behavior. Once I got the expiration working it was golden and all of the specs were passing.</p>
<p>Side note: I don&#8217;t usually use RSpec, but the ability to use it_should_behave_like &#8220;some spec&#8221; is quite elegant.</p>
<p>That&#8217;s all for now. Enjoy!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/anthonyeden.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/anthonyeden.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/anthonyeden.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/anthonyeden.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/anthonyeden.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/anthonyeden.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/anthonyeden.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/anthonyeden.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/anthonyeden.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/anthonyeden.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/anthonyeden.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/anthonyeden.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/anthonyeden.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/anthonyeden.wordpress.com/45/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthonyeden.wordpress.com&amp;blog=3548766&amp;post=45&amp;subd=anthonyeden&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://anthonyeden.wordpress.com/2009/03/02/s3-in-moneta/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/31254903db793bf6f84bbd607fe092fd?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">anthonyeden</media:title>
		</media:content>
	</item>
		<item>
		<title>ActiveWarehouse-ETL and Adapter Extensions Released</title>
		<link>http://anthonyeden.wordpress.com/2009/01/15/aw-etl-and-adapter-extensions-released/</link>
		<comments>http://anthonyeden.wordpress.com/2009/01/15/aw-etl-and-adapter-extensions-released/#comments</comments>
		<pubDate>Thu, 15 Jan 2009 13:44:23 +0000</pubDate>
		<dc:creator>anthonyeden</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[activewarehouse]]></category>
		<category><![CDATA[data warehouse]]></category>
		<category><![CDATA[etl]]></category>

		<guid isPermaLink="false">http://blog.anthonyeden.com/?p=42</guid>
		<description><![CDATA[I&#8217;ve finally got around to publishing a new release of ActiveWarehouse-ETL and the AdapterExtensions library. This release brings these two libraries up to date with how RubyGems works and cleans up a bunch of details. It also should make them both work with Rails 2.2 (although I haven&#8217;t tested it recently to be 100% confident). [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthonyeden.wordpress.com&amp;blog=3548766&amp;post=42&amp;subd=anthonyeden&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve finally got around to publishing a new release of ActiveWarehouse-ETL and the AdapterExtensions library. This release brings these two libraries up to date with how RubyGems works and cleans up a bunch of details. It also should make them both work with Rails 2.2 (although I haven&#8217;t tested it recently to be 100% confident).</p>
<p>I also updated the activewarehouse RubyForge site at the same time.</p>
<p>Now that those are out it&#8217;s time to get a new tutorial written. Hopefully I&#8217;ll be able to do that in the next couple of weeks. Additionally I&#8217;m going to try to spend a little bit of time moving the documentation over to the github wiki. Good times.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/anthonyeden.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/anthonyeden.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/anthonyeden.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/anthonyeden.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/anthonyeden.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/anthonyeden.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/anthonyeden.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/anthonyeden.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/anthonyeden.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/anthonyeden.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/anthonyeden.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/anthonyeden.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/anthonyeden.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/anthonyeden.wordpress.com/42/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthonyeden.wordpress.com&amp;blog=3548766&amp;post=42&amp;subd=anthonyeden&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://anthonyeden.wordpress.com/2009/01/15/aw-etl-and-adapter-extensions-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/31254903db793bf6f84bbd607fe092fd?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">anthonyeden</media:title>
		</media:content>
	</item>
		<item>
		<title>Autotest Growl Notifications with Growl-Glue</title>
		<link>http://anthonyeden.wordpress.com/2008/12/29/autotest-growl-notifications-with-growl-glue/</link>
		<comments>http://anthonyeden.wordpress.com/2008/12/29/autotest-growl-notifications-with-growl-glue/#comments</comments>
		<pubDate>Mon, 29 Dec 2008 16:25:37 +0000</pubDate>
		<dc:creator>anthonyeden</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[autotest]]></category>
		<category><![CDATA[gem]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://blog.anthonyeden.com/?p=35</guid>
		<description><![CDATA[While trying to set up Growl notification from autotest today I came across a nifty little gem called growl-glue. Growl-glue makes autotest play nicely with Growl without having to jump through hoops in your .autotest configuration. Installation is a snap, just sudo gem install growl-glue and then add this snippet to your .autotest config: require [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthonyeden.wordpress.com&amp;blog=3548766&amp;post=35&amp;subd=anthonyeden&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>While trying to set up Growl notification from autotest today I came across a nifty little gem called <a href="http://growl-glue.rubyforge.org/">growl-glue</a>. Growl-glue makes autotest play nicely with Growl without having to jump through hoops in your .autotest configuration.</p>
<p>Installation is a snap, just <code>sudo gem install growl-glue</code> and then add this snippet to your .autotest config:</p>
<blockquote><p><code>require 'growl_glue'<br />
GrowlGlue::Autotest.initialize</code></p></blockquote>
<p>You can configure the images that are displayed, enable sound playback depending on what the autotest result is, and so on. I really love little gems like this that do one task well and make my life a little bit easier.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/anthonyeden.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/anthonyeden.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/anthonyeden.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/anthonyeden.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/anthonyeden.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/anthonyeden.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/anthonyeden.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/anthonyeden.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/anthonyeden.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/anthonyeden.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/anthonyeden.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/anthonyeden.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/anthonyeden.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/anthonyeden.wordpress.com/35/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=anthonyeden.wordpress.com&amp;blog=3548766&amp;post=35&amp;subd=anthonyeden&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://anthonyeden.wordpress.com/2008/12/29/autotest-growl-notifications-with-growl-glue/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/31254903db793bf6f84bbd607fe092fd?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">anthonyeden</media:title>
		</media:content>
	</item>
	</channel>
</rss>
