<?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"
	>

<channel>
	<title>John Yerhot / Weblog /</title>
	<atom:link href="http://www.johnyerhot.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.johnyerhot.com</link>
	<description>Ruby On Rails Developer</description>
	<pubDate>Wed, 24 Jun 2009 15:30:43 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Zip Code Distance Searching in Ruby on Rails</title>
		<link>http://www.johnyerhot.com/2009/06/23/zipcode-distance-searching-in-ruby-on-rails/</link>
		<comments>http://www.johnyerhot.com/2009/06/23/zipcode-distance-searching-in-ruby-on-rails/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 01:51:59 +0000</pubDate>
		<dc:creator>John</dc:creator>
		
		<category><![CDATA[Ruby]]></category>

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

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

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

		<guid isPermaLink="false">http://www.johnyerhot.com/?p=105</guid>
		<description><![CDATA[In my last entry we looked at using scopes to dynamically build scopes for searching in your Ruby on Rails application.  In Tryst, we needed to let our uses search for other singles that were xxx miles from their location.  We require that new users enter their zip code, so that is what we had [...]]]></description>
			<content:encoded><![CDATA[<p>In my <a href="http://www.johnyerhot.com/2009/06/21/smart-searching-using-named-scopes/">last entry</a> we looked at using scopes to dynamically build scopes for searching in your Ruby on Rails application.  In <a href="http://trystme.com">Tryst</a>, we needed to let our uses search for other singles that were xxx miles from their location.  We require that new users enter their zip code, so that is what we had to go off of.</p>
<p>When I was researching the best way to do this, I did a quick Twitter poll - most of my friend thought I should just use <a href="http://code.google.com/apis/maps/documentation/services.html">Google&#8217;s GeoCoding API</a>, which will let you preform these types of searches.  I really didn&#8217;t want to go this route for a couple reasons.</p>
<ol>
<li>It&#8217;s an external dependency.  Yes, Google&#8217;s uptime is impeccable, but I don&#8217;t want to rely on them</li>
<li>Google&#8217;s TOS requires that the site/app/service be free.  Tryst may end up with paid features down the road and I didn&#8217;t want to have to rewrite a substantial amount of code 1 year from now.</li>
<li>It&#8217;s a challenge.</li>
</ol>
<p>So, we decided to do our own thing.</p>
<p>Our workflow for a search would work like this - we get a distance and a zip code as search parameters, feed both of these into something that returns all the zip codes within the specified distance, and then find all the uses in those zip codes.  Easy enough.</p>
<p>PS.  I&#8217;m using MySQL here.</p>
<p>First, we need a reference for zip codes.  I found <a href="http://www.maxmind.com/app/geolitecity">this</a> great free CSV that has all zip codes, major cities, longitude, latitude, area codes, and even <a href="http://code.google.com/apis/adwords/docs/developer/adwords_api_us_metros.html">metropolitan codes</a>. Import it into your database and remove any rows that were not in the US.  I actually had a &#8216;Location&#8217; model in my Rails application that I imported this into.</p>
<p>After some digging around the webs, I found some crazy algorithms for generating distance between different locations based on their longitude and latitude.  I&#8217;m not going to pretend to understand everything that is happening here, but after some playing around I ended up with this:</p>
<pre>SELECT o.zip_code
FROM locations z, locations o, locations a

WHERE z.zip_code = #{zip_code}
AND	z.zip_code = a.zip_code
AND	(3956 * (2 * ASIN(SQRT(
		POWER(SIN(((z.latitude-o.latitude)*0.017453293)/2),2) +
		COS(z.latitude*0.017453293) *
		COS(o.latitude*0.017453293) *
		POWER(SIN(((z.longitude-o.longitude)*0.017453293)/2),2)
	)))) &lt;= #{distance}</pre>
<p>I&#8217;ll let you guess which part does the calculation. :)<br />
<strong>zip_code</strong> and <strong>distance</strong> you&#8217;ll need to pipe into the SQL, but you&#8217;ll get back all the zip codes with in your specification.  We just thew the returned array of zip odes into a scope like this:</p>
<pre># models/users.rb
def search(params)
    scope = User.scoped({})
    ...
    scope = scope.conditions "users.zip_code in (?)", zip_codes unless zip_codes.blank?
    ...
end</pre>
<p>Now, this query is fairly slow.  By slow, I mean about 25-30ms correctly indexed on my development box.  For us it&#8217;s just fine.</p>
<p>I hope that helped someone out - I had a hell of a time finding a solution I liked and I really think this is the best one.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.johnyerhot.com/2009/06/23/zipcode-distance-searching-in-ruby-on-rails/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Smart Searching Using Anonymous Scopes</title>
		<link>http://www.johnyerhot.com/2009/06/21/smart-searching-using-named-scopes/</link>
		<comments>http://www.johnyerhot.com/2009/06/21/smart-searching-using-named-scopes/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 03:31:04 +0000</pubDate>
		<dc:creator>John</dc:creator>
		
		<category><![CDATA[Geeky]]></category>

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

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

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

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

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

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

		<guid isPermaLink="false">http://www.johnyerhot.com/?p=103</guid>
		<description><![CDATA[I really like how Lovetastic&#8217;s search works.  Instead of a plethora of select boxes, users can simply use expressions to create searches.  We did something similar with Tryst&#8217;s searching.  One text field and you enter stuff like age ranges (30-45), things like smoke-yes or smoke-no, cities, zipcodes, etc.

To make this whole thing more Rails like, [...]]]></description>
			<content:encoded><![CDATA[<p>I really like how <a href="http://lovetastic.com/guys">Lovetastic&#8217;s search</a> works.  Instead of a plethora of select boxes, users can simply use expressions to create searches.  We did something similar with <a href="http://trystme.com">Tryst</a>&#8217;s searching.  One text field and you enter stuff like age ranges (30-45), things like smoke-yes or smoke-no, cities, zipcodes, etc.</p>
<p><a href="http://www.johnyerhot.com/wp-content/uploads/2009/06/tryst_search.png"><img class="alignnone size-full wp-image-104" title="tryst_search" src="http://www.johnyerhot.com/wp-content/uploads/2009/06/tryst_search.png" alt="Tryst.com Search" width="500" height="84" /></a></p>
<p>To make this whole thing more Rails like, I did not want to just use Regex to parse out search terms and plug them into a complicated SQL query.  That would be soooooo PHP.</p>
<p>Named Scopes are awesome.  You can use them to built decently formatted and fairly complicated SQL queries in a nice, no bullshit, manner. You can do cool stuff like this:</p>
<pre>@users = User.active.males.in_zipcode(params[:zip_code]).nonsmokers.top_ten</pre>
<p>Just keep stacking scopes on.  Rails generates the query and it usually doesn&#8217;t suck.</p>
<p>Go read the <a href="http://api.rubyonrails.org/classes/ActiveRecord/NamedScope/ClassMethods.html">API docs</a> for the basics on Named Scopes. We&#8217;re gonna do some not basic stuff.  Check out <a href="http://railscasts.com/episodes/112-anonymous-scopes">Ryan Bate&#8217;s Anonymous Scopes Railscast</a>, which introduced me to this method of generating Scopes.</p>
<p>We wanted to add a Class Method called search and have it define the Scopes.  We pass in the params hash, anything else we need (like the current user), and let it handle the Scoping and determining what we&#8217;re looking for from the search params.</p>
<p>To start, here is our search class method.</p>
<pre># app/models/user.rb
 def self.search(params, current_user)
    page = params[:page] || 1
    search_terms = params[:search]
end</pre>
<p>Yeah, using <a href="http://wiki.github.com/mislav/will_paginate">Will Paginate</a> and assigning my search terms to a local variable.  I&#8217;ve also written another Class Method that does the parsing of the params.</p>
<pre># app/models/user.r.b
def self.search(params, current_user)
    page = params[:page] || 1
    search_terms = params[:search]
   #parse params
    max_age, min_age, zip_codes, gender, smoke, drink = self.get_parameters(search_terms.to_s, current_user)
  end</pre>
<p>Now, we&#8217;re going to define some dynamic scopes.  This is awesome.  For it to work, we&#8217;ll add an initializer.</p>
<pre>#config/initializers/scopes.rb

<span class="r">class</span> <span class="cl">ActiveRecord::Base</span>
  named_scope :conditions, lambda { |*args| {:conditions =&gt; args} }
end</pre>
<p>Now, lets make the scopes.</p>
<pre>def self.search(params, current_user)
    page = params[:page] || 1
    search_terms = params[:search]

    max_age, min_age, zip_codes, gender, smoke, drink = self.get_parameters(search_terms.to_s, current_user)

    scope = User.scoped({})
    scope = scope.conditions &#8220;users.age &gt;= ? and users.age &lt;= ?&#8221;, min_age, max_age unless min_age.blank?
    scope = scope.conditions &#8220;users.zip_code in (?)&#8221;, zip_codes unless zip_codes.blank?
    scope = scope.conditions &#8220;users.smoker = ?&#8221;, smoke unless smoke.blank?
    scope = scope.conditions &#8220;users.drink = ?&#8221;, drink unless drink.blank?
    scope = scope.conditions &#8220;users.gender = ?&#8221;, gender unless gender.blank?
    scope.paginate :page =&gt; page, :order =&gt; &#8220;created_at DESC&#8221;
  end</pre>
<p>Pretty slick, huh?  So now, in my controller I just need</p>
<pre># app/controllers/search.rb
def users
    @users = User.search(params, current_user)
end</pre>
<p>Assuming your class method for parsing out scope parameters doesn&#8217;t suck, you should have very clean, cuddly, and concise searching.  No more worrying about breaking some huge crappy SQL query.</p>
<p>You&#8217;ll notice I used</p>
<pre>users.zip_codes in (?)</pre>
<p>This is because I can pass an array of zipcodes and return all the users in those zipcodes.  This is because I&#8217;ve implemented radial distance searching base on zipcodes.  Users can search like &#8221; 60606 25miles&#8221; and return all users who are within 25 miles of 60606.   We&#8217;ll go into how this works in the next post.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.johnyerhot.com/2009/06/21/smart-searching-using-named-scopes/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Yes, I started a dating site.  I&#8217;m sorry.</title>
		<link>http://www.johnyerhot.com/2009/06/14/yes-i-started-a-dating-site-im-sorry/</link>
		<comments>http://www.johnyerhot.com/2009/06/14/yes-i-started-a-dating-site-im-sorry/#comments</comments>
		<pubDate>Mon, 15 Jun 2009 02:45:46 +0000</pubDate>
		<dc:creator>John</dc:creator>
		
		<category><![CDATA[Ruby]]></category>

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

		<guid isPermaLink="false">http://www.johnyerhot.com/?p=102</guid>
		<description><![CDATA[Ok, so five years ago I never would have though that I&#8217;d have started a &#8216;Web 2.0&#8242; dating site.  Hell, I didn&#8217;t think I&#8217;d be doing a lot of things, but here I am.   There is actually a small story how I got involved with (shamless self promotion) trystme.com.  Wanna hear it?  Good.
Originally, I wanted [...]]]></description>
			<content:encoded><![CDATA[<p>Ok, so five years ago I never would have though that I&#8217;d have started a &#8216;Web 2.0&#8242; dating site.  Hell, I didn&#8217;t think I&#8217;d be doing a lot of things, but here I am.   There is actually a small story how I got involved with (shamless self promotion) <a href="http://trystme.com" target="_blank">trystme.com</a>.  Wanna hear it?  Good.</p>
<p>Originally, I wanted to become an elementary school teacher and was halfway though getting my elementary eduction BA&#8230; until I started to volunteer at a school library.  I hated it.  Plus I realised I had too many tattoos to be a school teacher&#8230; never should have been in all those punk bands growing up.</p>
<p>So there went that idea - I quit school and took a year off.</p>
<p>I decided to go for something that is completely different and the opposite of little crazy kids - computer science.  I had always like computers, had some experience with Dreamweaver and the idea of not having my work talk back to me all the time sounded great.  I went back to school and loved CS.</p>
<p>About 3 years ago I graduated and I got a contract job with a small local development shop in Duluth, MN.  After a few months it went under and the guy screwed me out of a pay check or two, but I did walk away with something really cool - I was exposed to <a href="http://rubyonrails.org">Ruby on Rails</a>.  I freakin loved it.  LOVED IT.  I quit wasting my time with PHP and drank the Ruby juice.  I <a href="http://railsmagazine.com/authors/2">even wrote an article for a Rails magazine</a>.</p>
<p>Eventually I got a job working programming for this <a href="http://www.nesc.k12.mn.us">educational coop</a> in Norther Minnesota.  It was pretty slick.  I enjoyed the work, had tons of freedom, and actually got paid (unlike the contract gig).  Worked there for a little over a year&#8230; until&#8230; I got an iPhone January 2nd of 2009.</p>
<p>I had a couple week lapse in my old phone contact, so my old phone was still on but it would get left at home.  One day it rang and my wife answered it.  It was some lady from Chicago who said she worked for some company that was trying to find Rails developers and somewhere they found my resume or something crazy like that.  She even said that she had called before and left messages and that I never called back.  This is true - I rarley call back if I don&#8217;t know the caller.  Thanks telemarketers.</p>
<p>So, Jen tells me I should call this lady, Andrea The HR Lady From Chicago.  Jen and I had been talking about moving from Norther MN for sometime now and almost took a job in Milwaukee (thank God we didn&#8217;t).  The more I talked to Andrea The HR Lady From Chicago the more it sounded good.</p>
<p>So I got this job, moved to the Chicago Burbs, and met a guy at work named Mike.  Mike had lots of crazy ideas and had this one to start a dating site.  The original idea was to only spend two weeks developing it and whatever we had at the end of two weeks was it.  This sounded great at first, but since two weeks really meant about 40 hours between the two of us (since we&#8217;re doing this at night after our real jobs) it got stretched to about a month and a half.</p>
<p>There you have it.  We didn&#8217;t exactly build it to make tons of money. That&#8217;d be nice - we have ads on it, but really we just wanna see what happens.  I guess we want what every programmer with an entrepenurial spirit wants - to wake up one morning and find that your one lowely server is dying under the load and we have to split into an app server and a database server.  Then add Memcached, another app server, shard the database, another app server, hire a real DBA, and on and on.</p>
<p>Check it out - we launched it today, 14/6/2009 at 7:30pm, and are super proud of it.  If you&#8217;re looking for a date sign up and give it a try.  <a href="http://trystme.com/contact">Let us know what you think</a> and have fun.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.johnyerhot.com/2009/06/14/yes-i-started-a-dating-site-im-sorry/feed/</wfw:commentRss>
		</item>
		<item>
		<title>I&#8217;ve pulled a Brett Farve</title>
		<link>http://www.johnyerhot.com/2009/05/22/ive-pulled-a-brett-farve/</link>
		<comments>http://www.johnyerhot.com/2009/05/22/ive-pulled-a-brett-farve/#comments</comments>
		<pubDate>Sat, 23 May 2009 03:09:15 +0000</pubDate>
		<dc:creator>John</dc:creator>
		
		<category><![CDATA[Ruby On Rails]]></category>

		<guid isPermaLink="false">http://www.johnyerhot.com/?p=101</guid>
		<description><![CDATA[That&#8217;s right.  I&#8217;m pulling this blog from retirement.  It&#8217;s still getting quite a bit of traffic and I feel bad for just neglecting it.  Keep checking back for some real content.
]]></description>
			<content:encoded><![CDATA[<p>That&#8217;s right.  I&#8217;m pulling this blog from retirement.  It&#8217;s still getting quite a bit of traffic and I feel bad for just neglecting it.  Keep checking back for some real content.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.johnyerhot.com/2009/05/22/ive-pulled-a-brett-farve/feed/</wfw:commentRss>
		</item>
		<item>
		<title>blog.john.yerhot.org</title>
		<link>http://www.johnyerhot.com/2008/11/19/blogjohnyerhotorg/</link>
		<comments>http://www.johnyerhot.com/2008/11/19/blogjohnyerhotorg/#comments</comments>
		<pubDate>Wed, 19 Nov 2008 18:47:35 +0000</pubDate>
		<dc:creator>John</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.johnyerhot.com/?p=100</guid>
		<description><![CDATA[I will be moving this weblog to blog.john.yerhot.org in the next couple days.  I will also be moving from Wordpress to my own home brew platform.  johnyerhot.com will still go here, and so will all the posts, but I will not be posting here any longer.
blog.john.yerhot.org
]]></description>
			<content:encoded><![CDATA[<p>I will be moving this weblog to <strong>blog.john.yerhot.org</strong> in the next couple days.  I will also be moving from Wordpress to my own home brew platform.  johnyerhot.com will still go here, and so will all the posts, but I will not be posting here any longer.</p>
<h2><a href="http://blog.john.yerhot.org">blog.john.yerhot.org</a></h2>
]]></content:encoded>
			<wfw:commentRss>http://www.johnyerhot.com/2008/11/19/blogjohnyerhotorg/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Deployment Nightmare: Godaddy</title>
		<link>http://www.johnyerhot.com/2008/11/04/deployment-nightmare-godaddy/</link>
		<comments>http://www.johnyerhot.com/2008/11/04/deployment-nightmare-godaddy/#comments</comments>
		<pubDate>Tue, 04 Nov 2008 23:20:44 +0000</pubDate>
		<dc:creator>John</dc:creator>
		
		<category><![CDATA[Hosting]]></category>

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

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

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

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

		<guid isPermaLink="false">http://www.johnyerhot.com/?p=99</guid>
		<description><![CDATA[Against the advice of, well, the entire Rails community, I attempted to deploy a project to Godaddy.
Godaddy proudly displays the little Ruby logo next to Php when browsing through their hosting plans, and seeing as you can get Rails hosting for $7/month through them, it seems like a decent deal, even if you know it&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>Against the advice of, well, the entire Rails community, I attempted to deploy a project to Godaddy.</p>
<p>Godaddy proudly displays the little Ruby logo next to Php when browsing through their hosting plans, and seeing as you can get Rails hosting for $7/month through them, it seems like a decent deal, even if you know it&#8217;s gonna get slow.</p>
<p>Baisically, what ends up happening when deploying to Godaddy, is you upload your application to a special directory you create through their control pannel, modify your dispatch.fcgi file, .htaccess files, turn off Java and pray.  Its all supposed to run as FCGI in the end, which is not the speediest way to deploy a Rails app, but is acceptable for smaller, non-demanding applications.</p>
<p>The application I was attempting to deploy was a Rails 2.1 app, and I found that Godaddy is rocking Rails 1.1.6 (Release Aug 2006), so I froze Rails (standard practice), change the configs to point to the manually created database (no rake support here folks) and tried to hit it.  Nothing.  First, every time you modify the .htaccess file (and you will need to - many times) it takes 10-30 minutes for Apache to notice.  So, you&#8217;re stuck making a change, waiting, testing, washing and repeating.  If you&#8217;re using FCGI, there is literally NO output into the &#8216;errorlog&#8217; Godaddy gives you, so you have to deploy with regular CGI to get any idea why your application isn&#8217;t working and then switch back to FCGI and pray.</p>
<p>Finally, after a couple hours of searching the interwebs and poking and prodding, I was getting somewhere - the error log started to get populated, but FastCGI wasn&#8217;t starting correctly.  After some snooping, I saw that Rails 2.1 assumes that you&#8217;re not running whatever version of Gem was around in 2006.  Gem was failing with a <em>method not found</em> error when Rails tries to talk to Godaddy&#8217;s almost 3 year old version.</p>
<p>I putzed around a bit looking for ways to skip that step of Rails&#8217; boot process, swaping out boot.rb files from older version of Rails, hacking, etc.. and to no avail.</p>
<p>This is where I stopped.  I figured that even if I got past this problem, the version of Rmagick was from mid 2006 and would likely not work with my app, and I wasn&#8217;t about to try and get Godaddy to update it.  If they haven&#8217;t updated any of the Rails stuff yet, I don&#8217;t think they are going to any time soon.</p>
<p>My message for Godaddy is this:  I want the entire day I spend on this back.  You should stop advertising that you support Ruby/Rails when you obviously don&#8217;t.  I&#8217;d bet 90% of Rails apps in development today would not be able to run on their hosting plans. Eh.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.johnyerhot.com/2008/11/04/deployment-nightmare-godaddy/feed/</wfw:commentRss>
		</item>
		<item>
		<title>KVM, VMware, and my whole Saturday</title>
		<link>http://www.johnyerhot.com/2008/09/27/kvm-vmware-and-my-whole-saturday/</link>
		<comments>http://www.johnyerhot.com/2008/09/27/kvm-vmware-and-my-whole-saturday/#comments</comments>
		<pubDate>Sun, 28 Sep 2008 05:51:43 +0000</pubDate>
		<dc:creator>John</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.johnyerhot.com/?p=95</guid>
		<description><![CDATA[My big project for the weekend has been moving my humble lil web hosting setup to a separated out, virtualized environment.  We&#8217;re doing this at work and have been very happy with the results.
My original plan was to use KVM for the virtualization, so I could take advantage of paravirtualization.  Supposedly it is much faster [...]]]></description>
			<content:encoded><![CDATA[<p>My big project for the weekend has been moving my humble lil web hosting setup to a separated out, virtualized environment.  We&#8217;re doing this at work and have been very happy with the results.</p>
<p>My original plan was to use <a href="http://en.wikipedia.org/wiki/Kernel-based_Virtual_Machine">KVM</a> for the virtualization, so I could take advantage of <a href="http://en.wikipedia.org/wiki/Paravirtualization">paravirtualization</a>.  Supposedly it is much faster than a fully virtualized machine, but requires newer hardware&#8230;  anyway, shouldn&#8217;t be an issue, I&#8217;m using an AMD X2 4400 which has AMD-V built it.</p>
<p>So I spend an hour installing everything on a fresh install of <a href="http://www.ubuntu.com/">Hardy 8.04</a> only to realize that I couldn&#8217;t take advantage of paravirtualization because my motherboard didn&#8217;t even give an option to turn on AMD-V.  Further, I found that KVM&#8217;s networking is screwy, especially when bridging connections.</p>
<p>Another hour of deciding what to do and I decided it was best to go with the good old VMware Server solution.  Ended up creating three virtual machines, a Git server, web server, and a MySQL server.  I&#8217;m really excited to experiment optimizing each spoke in my web stack, and I can easily back everything up, or setup other development servers quickly and easily.</p>
<p>I&#8217;m pretty happy with it and am glad to have it up and running.  It&#8217;s totally nerdy and I love it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.johnyerhot.com/2008/09/27/kvm-vmware-and-my-whole-saturday/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Henry Rollins at Sacred Heart</title>
		<link>http://www.johnyerhot.com/2008/09/18/henry-rollins-at-sacred-heart/</link>
		<comments>http://www.johnyerhot.com/2008/09/18/henry-rollins-at-sacred-heart/#comments</comments>
		<pubDate>Thu, 18 Sep 2008 20:47:58 +0000</pubDate>
		<dc:creator>John</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.johnyerhot.com/?p=93</guid>
		<description><![CDATA[Just for those of you in N. Minnesota that love Henry Rollins as much as I, he&#8217;s gonna be at Sacred Heart Studio/Music Hall on October 23rd.  No word on how/where/when to get tickets&#8230;
Directions to Sacred Heart and their phone number = (218) 723-189.

]]></description>
			<content:encoded><![CDATA[<p>Just for those of you in N. Minnesota that love Henry Rollins as much as I, he&#8217;s gonna be at Sacred Heart Studio/Music Hall on October 23rd.  No word on how/where/when to get tickets&#8230;</p>
<p><a href="http://maps.google.com/maps?f=q&amp;hl=en&amp;geocode=&amp;q=201+West+Fourth+Street,+duluth,+mn&amp;sll=37.0625,-95.677068&amp;sspn=34.396866,93.164063&amp;ie=UTF8&amp;ll=46.788572,-92.105041&amp;spn=0.007258,0.022745&amp;z=16&amp;iwloc=addr">Directions to Sacred Heart</a> and their phone number = <span class="general" style="font-family: Verdana,Arial,Helvetica,sans-serif;">(218) 723-189.</span></p>
<p><a href="http://21361.com/website/news/index.html"><img src="http://media.musictoday.com/ticketing/HenryRollins/images/header.jpg" alt="" width="600" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.johnyerhot.com/2008/09/18/henry-rollins-at-sacred-heart/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Obligatory Google Chrome Post</title>
		<link>http://www.johnyerhot.com/2008/09/02/obligatory-google-chrome-post/</link>
		<comments>http://www.johnyerhot.com/2008/09/02/obligatory-google-chrome-post/#comments</comments>
		<pubDate>Wed, 03 Sep 2008 02:00:47 +0000</pubDate>
		<dc:creator>John</dc:creator>
		
		<category><![CDATA[Google]]></category>

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

		<guid isPermaLink="false">http://www.johnyerhot.com/?p=91</guid>
		<description><![CDATA[HERE IT IS.  Google&#8217;s rumored browser is actually real and you can download it.  Runs webkit (good thing), seems very fast, and looks like cotton candy.
No OSX or Linux version yet.
Eh.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://google.com/chrome">HERE IT IS</a>.  Google&#8217;s rumored browser is actually real and you can download it.  Runs webkit (good thing), seems very fast, and looks like cotton candy.</p>
<p>No OSX or Linux version yet.</p>
<p>Eh.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.johnyerhot.com/2008/09/02/obligatory-google-chrome-post/feed/</wfw:commentRss>
		</item>
		<item>
		<title>rQuote - Ruby on Rails Stock Quote Plugin</title>
		<link>http://www.johnyerhot.com/2008/08/29/rquote-ruby-on-rails-stock-quote-plugin/</link>
		<comments>http://www.johnyerhot.com/2008/08/29/rquote-ruby-on-rails-stock-quote-plugin/#comments</comments>
		<pubDate>Fri, 29 Aug 2008 18:36:29 +0000</pubDate>
		<dc:creator>John</dc:creator>
		
		<category><![CDATA[Geeky]]></category>

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

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

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

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

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

		<guid isPermaLink="false">http://www.johnyerhot.com/?p=90</guid>
		<description><![CDATA[I merged some stock quoting stuff I had into a Rails plugin today.  If you&#8217;d like to be able to simply grab real time stock quotes in your Rails app, this will do the job.  Pretty much any stock symbol will work and you can enter as many as you&#8217;d like, you&#8217;ll get [...]]]></description>
			<content:encoded><![CDATA[<p>I merged some stock quoting stuff I had into a Rails plugin today.  If you&#8217;d like to be able to simply grab real time stock quotes in your Rails app, this will do the job.  Pretty much any stock symbol will work and you can enter as many as you&#8217;d like, you&#8217;ll get a <del datetime="2008-08-31T22:27:35+00:00">hash </del> array of hashes containing each symbol&#8217;s current value, change since open, and volume.</p>
<p><a href="http://github.com/johnyerhot/rquote/tree/master">http://github.com/johnyerhot/rquote/tree/master</a></p>
<pre>
Rquote
======

Gets realtime stock quotes from Yahoo Finance. 

Its super simple to use.

Example
=======

quote = Rquote.new
quote.find("aapl", "msft") 

=> [{:change=>"-4.02", :price=>"169.72", :volume=>"16105013", :symbol=>"aapl"}, {:change=>"-0.42", :price=>"27.52",
:volume=>"27024456", :symbol=>"msft"}]

Copyright (c) 2008 John Yerhot, released under the MIT license
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.johnyerhot.com/2008/08/29/rquote-ruby-on-rails-stock-quote-plugin/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.091 seconds -->
<!-- Cached page served by WP-Cache -->
