<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CEcDSX88cCp7ImA9WhNTEkw.&quot;"><id>tag:blogger.com,1999:blog-3371379742754813076</id><updated>2012-10-14T20:54:38.178+10:00</updated><category term="MySQL" /><category term="api" /><category term="latitude" /><category term="google" /><title type="text">Amateur Geek</title><subtitle type="html">I'm not quite a blogger, but I do dabble...</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://benpetro.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://benpetro.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Ben Petro</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uTrhCV2KQeQ/AAAAAAAAAAI/AAAAAAABlc0/AkCtPjmbMdo/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>46</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/benpetro" /><feedburner:info uri="benpetro" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>-27.512078</geo:lat><geo:long>153.10564</geo:long><entry gd:etag="W/&quot;DUMARnw5cSp7ImA9WxFbFk4.&quot;"><id>tag:blogger.com,1999:blog-3371379742754813076.post-5398018559644472384</id><published>2010-07-09T10:33:00.001+10:00</published><updated>2010-07-09T11:04:07.229+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-09T11:04:07.229+10:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="api" /><category scheme="http://www.blogger.com/atom/ns#" term="latitude" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><title>Google Latitude on Rails using OAuth</title><content type="html">I'm developing a Ruby on Rails App using the Latitude API. &amp;nbsp;I've spent the past 2 days working through numerous online turotials, API docs and various other sources to finally get a working result. &amp;nbsp;I thought I'd write it down to not only help others, but also remind myself when I come back to it next time.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-large;"&gt;1) Register domain with Google Webmaster Central&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-large;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
Go to: &lt;a href="https://www.google.com/accounts/ManageDomains"&gt;https://www.google.com/accounts/ManageDomains&lt;/a&gt;&lt;br /&gt;
Add domain, then verify it.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="line-height: 25px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Create a pair of RSA keys. In linux and OS X you can use openssl&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;blockquote&gt;openssl req -x509 -nodes -days 365 -newkey rsa:1024 -sha1 -subj ‘/C=US/ST=CA/L=San Francisco/CN=example.com’ -keyout rsakey.pem -out rsacert.pem&lt;/blockquote&gt;&lt;br /&gt;
Upload the rsacert.pem, and keep the rsakey.pem in a safe place. &amp;nbsp;For the Target URL path prefix, I just added my domain. &amp;nbsp;It's not important.&lt;br /&gt;
&lt;br /&gt;
Once the domain is registered, you will see an &lt;b&gt;OAuth Consumer Key &lt;/b&gt;and&lt;b&gt; Secret&lt;/b&gt;. &amp;nbsp;You need this for your app.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Now to your App&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;2) OAuth Gem&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Include in your &lt;i&gt;environment.rb&lt;/i&gt;&lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;config.gem "oauth"&lt;/span&gt;&lt;/blockquote&gt;Obviously you will need to install it on your system if you don't already have it. &amp;nbsp;I use version 0.4.1&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;3) Generate an OAuthAccessToken model&lt;/span&gt;&lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;$ ruby script/generate model OAuthAccessToken&lt;/span&gt;&lt;/blockquote&gt;Note: I've done this because I don't want to store my access token directly in my User model. &amp;nbsp;This gives me the option of having tokens for multiple scopes for a user through a polymorphic association.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Migration:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;create_table :oauth_access_tokens do |t|&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;t.string &amp;nbsp;:oauth_token, :oauth_secret, :scope&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;t.string &amp;nbsp;:subject_type, :limit &amp;gt; 30 #for polymorphic association&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;t.integer :subject_id&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;t.timestamps&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #666666;"&gt;end&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;4) User model&lt;/span&gt;&lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;has_one &amp;nbsp;:latitude_access_token, :model_name =&amp;gt; 'OAuthAccessToken', :as =&amp;gt; :subject, :conditions =&amp;gt; ['scope = ?','latitude']&lt;/span&gt;&lt;/blockquote&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;5) Setup OAuth Consumer for Latitude&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Create class &lt;i&gt;lib/o_auth_consumers.rb&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #666666;"&gt;class OAuthConsumers&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp;Latitude = OAuth::Consumer.new(&amp;nbsp;CONSUMER_KEY, CONSUMER_SECRET, {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;:site =&amp;gt; "https://www.google.com",&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;:request_token_path =&amp;gt; "/accounts/OAuthGetRequestToken",&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;:access_token_path =&amp;gt; "/accounts/OAuthGetAccessToken",&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;:authorize_path=&amp;gt; "/latitude/apps/OAuthAuthorizeToken",&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;:signature_method =&amp;gt; "RSA-SHA1",&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;:private_key_file =&amp;gt; "#{RAILS_ROOT}/config/rsakey.pem" #path to my rsakey that I saved earlier&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp;})&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Remember to change the&amp;nbsp;CONSUMER_KEY and&amp;nbsp;CONSUMER_SECRET according to the information supplied when you registered your Domain (Step 1)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;6) Generate a controller for the app&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;ruby script/generate controller latitude&lt;/span&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;require 'oauth'&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;require 'oauth/signature/rsa/sha1'&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;class LatitudeController &amp;lt; ApplicationController&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp;def index&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;#check the user has a latitude oauth access token&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if current_user.latitude_access_token&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;token = OAuth::Token.new(current_user.latitude_access_token.oauth_token, current_user.latitude_access_token.oauth_secret)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;@request = JSON.parse(OAuthConsumers::Google.request('get', "https://www.googleapis.com/latitude/v1/currentLocation", token).body)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;@lat = @request['data']['latitude']&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;@lng = @request['data']['longitude']&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;@time = Time.at((@request['data']['timestampMs'].to_i)/1000).strftime('%b %d, %Y - %T')&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;else&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;redirect_to :action =&amp;gt; 'authorise'&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;end&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp;end&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp;def authorise&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if !params[:oauth_token]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;request_token = OAuthConsumers::Latitude.get_request_token(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{ :oauth_callback =&amp;gt; "http://localhost:3000/latitude/authorise" },&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{ :scope =&amp;gt; "https://www.googleapis.com/auth/latitude" }&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;session[:oauth_secret] = request_token.secret&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;redirect_to request_token.authorize_url + "&amp;amp;domain=example.com&amp;amp;granularity=best&amp;amp;location=all"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;else&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;request_token = OAuth::RequestToken.new(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; OAuthConsumers::Latitude,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; params[:oauth_token],&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; session[:oauth_secret]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; )&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;begin&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;access_token = request_token.get_access_token( :oauth_verifier =&amp;gt; params[:oauth_verifier] )&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;rescue&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;redirect_to :action =&amp;gt; 'index'&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;end&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;if access_token&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#now save the access token for this user&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;OauthAccessToken.create :subject =&amp;gt; current_user,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;:scope =&amp;gt; 'latitude',&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;:oauth_token =&amp;gt; access_token.token,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;:oauth_secret =&amp;gt; access_token.secret&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;end&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;redirect_to latitude_path&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;end&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp;end&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;end&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;7) Enjoy the Latitude&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
That's pretty much it. &amp;nbsp;Go to http://localhost:3000/latitude, you will be directed to Google to authorise your account, then once that all goes through, you will be sent back to your app, an Access Token will be created which will be stored for your user. &amp;nbsp;I'm not exactly sure how long this lasts at the moment, but I'm testing that right now and will update if I find anything important.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Thanks to:&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.manu-j.com/blog/add-google-oauth-ruby-on-rails-sites/214/"&gt;http://www.manu-j.com/blog/add-google-oauth-ruby-on-rails-sites/214/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://oauth.rubyforge.org/rdoc/"&gt;http://oauth.rubyforge.org/rdoc/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/apis/accounts/docs/OAuth.html"&gt;http://code.google.com/apis/accounts/docs/OAuth.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://stakeventures.com/articles/2008/02/23/developing-oauth-clients-in-ruby"&gt;http://stakeventures.com/articles/2008/02/23/developing-oauth-clients-in-ruby&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/apis/latitude/v1/using_rest.html"&gt;http://code.google.com/apis/latitude/v1/using_rest.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
Interested in your thoughts and comments. &amp;nbsp;Let me know if my code sucks.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=_ngrO67W4Ww:B2gZgo-UMzU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=_ngrO67W4Ww:B2gZgo-UMzU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?i=_ngrO67W4Ww:B2gZgo-UMzU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=_ngrO67W4Ww:B2gZgo-UMzU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=_ngrO67W4Ww:B2gZgo-UMzU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?i=_ngrO67W4Ww:B2gZgo-UMzU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=_ngrO67W4Ww:B2gZgo-UMzU:PWZOeuedlUc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?i=_ngrO67W4Ww:B2gZgo-UMzU:PWZOeuedlUc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/benpetro/~4/_ngrO67W4Ww" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://benpetro.blogspot.com/feeds/5398018559644472384/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3371379742754813076&amp;postID=5398018559644472384" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/5398018559644472384?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/5398018559644472384?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/benpetro/~3/_ngrO67W4Ww/google-latitude-in-rails-using-oauth.html" title="Google Latitude on Rails using OAuth" /><author><name>Ben Petro</name><uri>https://plus.google.com/105393083628412021020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uTrhCV2KQeQ/AAAAAAAAAAI/AAAAAAABlc0/AkCtPjmbMdo/s512-c/photo.jpg" /></author><thr:total>6</thr:total><feedburner:origLink>http://benpetro.blogspot.com/2010/07/google-latitude-in-rails-using-oauth.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQBSX46fyp7ImA9WxBVFUg.&quot;"><id>tag:blogger.com,1999:blog-3371379742754813076.post-5489878475743508179</id><published>2010-02-19T13:29:00.001+10:00</published><updated>2010-02-19T13:32:38.017+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-19T13:32:38.017+10:00</app:edited><title>Google Reader goes realtime through PubSubHubbub</title><content type="html">PubSubHubbub is awesome...&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Truly awesome.&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=ml4yqThlm0U:vtorXFDrPV8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=ml4yqThlm0U:vtorXFDrPV8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?i=ml4yqThlm0U:vtorXFDrPV8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=ml4yqThlm0U:vtorXFDrPV8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=ml4yqThlm0U:vtorXFDrPV8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?i=ml4yqThlm0U:vtorXFDrPV8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=ml4yqThlm0U:vtorXFDrPV8:PWZOeuedlUc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?i=ml4yqThlm0U:vtorXFDrPV8:PWZOeuedlUc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/benpetro/~4/ml4yqThlm0U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://benpetro.blogspot.com/feeds/5489878475743508179/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3371379742754813076&amp;postID=5489878475743508179" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/5489878475743508179?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/5489878475743508179?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/benpetro/~3/ml4yqThlm0U/google-reader-goes-realtime-through.html" title="Google Reader goes realtime through PubSubHubbub" /><author><name>Ben Petro</name><uri>https://plus.google.com/105393083628412021020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uTrhCV2KQeQ/AAAAAAAAAAI/AAAAAAABlc0/AkCtPjmbMdo/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://benpetro.blogspot.com/2010/02/google-reader-goes-realtime-through.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0AEQn0_eSp7ImA9WxBXE0s.&quot;"><id>tag:blogger.com,1999:blog-3371379742754813076.post-6817043449549038595</id><published>2010-01-24T17:06:00.003+10:00</published><updated>2010-01-25T07:48:23.341+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-25T07:48:23.341+10:00</app:edited><title>Keep track of your sex life with Nooky Diary</title><content type="html">I've built a new site: &lt;a href="http://nookydiary.com"&gt;http://nookydiary.com&lt;/a&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My wife has kept a diary for a long time now.  I'm a web developer, so I thought there could be a better way.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Nooky Diary is the totally private, safe way to keep track of your sex life.  Join now for free with either your Twitter or Facebook account and see what you think.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=gm2e476y6YQ:OWoD_a3F1Q8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=gm2e476y6YQ:OWoD_a3F1Q8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?i=gm2e476y6YQ:OWoD_a3F1Q8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=gm2e476y6YQ:OWoD_a3F1Q8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=gm2e476y6YQ:OWoD_a3F1Q8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?i=gm2e476y6YQ:OWoD_a3F1Q8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=gm2e476y6YQ:OWoD_a3F1Q8:PWZOeuedlUc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?i=gm2e476y6YQ:OWoD_a3F1Q8:PWZOeuedlUc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/benpetro/~4/gm2e476y6YQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://benpetro.blogspot.com/feeds/6817043449549038595/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3371379742754813076&amp;postID=6817043449549038595" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/6817043449549038595?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/6817043449549038595?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/benpetro/~3/gm2e476y6YQ/keep-track-of-your-sex-life-with-nooky.html" title="Keep track of your sex life with Nooky Diary" /><author><name>Ben Petro</name><uri>https://plus.google.com/105393083628412021020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uTrhCV2KQeQ/AAAAAAAAAAI/AAAAAAABlc0/AkCtPjmbMdo/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://benpetro.blogspot.com/2010/01/keep-track-of-your-sex-life-with-nooky.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcARnY6fSp7ImA9WxNVFUQ.&quot;"><id>tag:blogger.com,1999:blog-3371379742754813076.post-8225893508777675002</id><published>2009-10-27T08:21:00.003+10:00</published><updated>2009-10-27T08:27:27.815+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-27T08:27:27.815+10:00</app:edited><title>Install MySQL on Snow Leopard including Rails Gem</title><content type="html">After much pain, I've finally got MySQL installed on Snow Leopard including the MySQL 2.8.1 gem:&lt;br /&gt;&lt;br /&gt;1) I installed the x86_64 package from:&lt;br /&gt;&lt;a href="http://dev.mysql.com/downloads/mysql/5.1.html#macosx-dmg"&gt;http://dev.mysql.com/downloads/mysql/5.1.html#macosx-dmg&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2) Then ran:&lt;br /&gt;&lt;br /&gt;sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config --with-mysql-dir=/usr/local/mysql --with-mysql-lib=/usr/local/mysql/lib --with-mysql-include=/usr/local/mysql/include&lt;br /&gt;&lt;br /&gt;This was to fix the following problems I was continually having:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Rails:&lt;/b&gt;&lt;br /&gt;uninitialized constant MysqlCompat::MysqlRes&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=fxKyy6IOyq0:u8MlLh3rmsg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=fxKyy6IOyq0:u8MlLh3rmsg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?i=fxKyy6IOyq0:u8MlLh3rmsg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=fxKyy6IOyq0:u8MlLh3rmsg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=fxKyy6IOyq0:u8MlLh3rmsg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?i=fxKyy6IOyq0:u8MlLh3rmsg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=fxKyy6IOyq0:u8MlLh3rmsg:PWZOeuedlUc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?i=fxKyy6IOyq0:u8MlLh3rmsg:PWZOeuedlUc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/benpetro/~4/fxKyy6IOyq0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://benpetro.blogspot.com/feeds/8225893508777675002/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3371379742754813076&amp;postID=8225893508777675002" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/8225893508777675002?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/8225893508777675002?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/benpetro/~3/fxKyy6IOyq0/install-mysql-on-snow-leopard-including.html" title="Install MySQL on Snow Leopard including Rails Gem" /><author><name>Ben Petro</name><uri>https://plus.google.com/105393083628412021020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uTrhCV2KQeQ/AAAAAAAAAAI/AAAAAAABlc0/AkCtPjmbMdo/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://benpetro.blogspot.com/2009/10/install-mysql-on-snow-leopard-including.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU4BSHw4fip7ImA9WxNSFU4.&quot;"><id>tag:blogger.com,1999:blog-3371379742754813076.post-742169213100418155</id><published>2009-08-29T18:18:00.000+10:00</published><updated>2009-08-29T18:19:19.236+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-29T18:19:19.236+10:00</app:edited><title>Delete all .svn folders within a directory</title><content type="html">find . -name ".svn" -type d -exec rm -rf {} \;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=1h113fNkpqg:oBQoOS9oH88:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=1h113fNkpqg:oBQoOS9oH88:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?i=1h113fNkpqg:oBQoOS9oH88:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=1h113fNkpqg:oBQoOS9oH88:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=1h113fNkpqg:oBQoOS9oH88:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?i=1h113fNkpqg:oBQoOS9oH88:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=1h113fNkpqg:oBQoOS9oH88:PWZOeuedlUc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?i=1h113fNkpqg:oBQoOS9oH88:PWZOeuedlUc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/benpetro/~4/1h113fNkpqg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://benpetro.blogspot.com/feeds/742169213100418155/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3371379742754813076&amp;postID=742169213100418155" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/742169213100418155?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/742169213100418155?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/benpetro/~3/1h113fNkpqg/delete-all-svn-folders-within-directory.html" title="Delete all .svn folders within a directory" /><author><name>Ben Petro</name><uri>https://plus.google.com/105393083628412021020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uTrhCV2KQeQ/AAAAAAAAAAI/AAAAAAABlc0/AkCtPjmbMdo/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://benpetro.blogspot.com/2009/08/delete-all-svn-folders-within-directory.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUCQHs7cCp7ImA9WxJbF0o.&quot;"><id>tag:blogger.com,1999:blog-3371379742754813076.post-8062722674967671759</id><published>2009-07-28T19:43:00.001+10:00</published><updated>2009-07-28T19:44:21.508+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-28T19:44:21.508+10:00</app:edited><title>Expire cache from rake task in Rails</title><content type="html">This will remove all fragment cache files from the cache directory:&lt;br /&gt;&lt;br /&gt;task :expire_cache =&gt; :environment do&lt;br /&gt;  ActionController::Base.new.expire_fragment(%r{/})&lt;br /&gt;end&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=RdEQBtCkT1g:dIPmccYmlZo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=RdEQBtCkT1g:dIPmccYmlZo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?i=RdEQBtCkT1g:dIPmccYmlZo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=RdEQBtCkT1g:dIPmccYmlZo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=RdEQBtCkT1g:dIPmccYmlZo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?i=RdEQBtCkT1g:dIPmccYmlZo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=RdEQBtCkT1g:dIPmccYmlZo:PWZOeuedlUc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?i=RdEQBtCkT1g:dIPmccYmlZo:PWZOeuedlUc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/benpetro/~4/RdEQBtCkT1g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://benpetro.blogspot.com/feeds/8062722674967671759/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3371379742754813076&amp;postID=8062722674967671759" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/8062722674967671759?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/8062722674967671759?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/benpetro/~3/RdEQBtCkT1g/expire-cache-from-rake-task-in-rails.html" title="Expire cache from rake task in Rails" /><author><name>Ben Petro</name><uri>https://plus.google.com/105393083628412021020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uTrhCV2KQeQ/AAAAAAAAAAI/AAAAAAABlc0/AkCtPjmbMdo/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://benpetro.blogspot.com/2009/07/expire-cache-from-rake-task-in-rails.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUADQH86fSp7ImA9WxJbEEk.&quot;"><id>tag:blogger.com,1999:blog-3371379742754813076.post-5565061697485161234</id><published>2009-07-20T09:52:00.004+10:00</published><updated>2009-07-20T09:56:11.115+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-20T09:56:11.115+10:00</app:edited><title>Inspiration for my home reno</title><content type="html">&lt;div&gt;I'm planning on raising my house by about 8 metres, then turning the hose on and flooding the neighbourhood.  It shouldn't take too long before I achieve the desired waterfront views shown here:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;img style="cursor:pointer; cursor:hand;width: 480px;" src="http://i138.photobucket.com/albums/q244/saraaras1989/2777301703_a725b17eec_o.jpg" border="0" alt="" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=TNxA2Cu2Pc4:x-d8aP4thqY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=TNxA2Cu2Pc4:x-d8aP4thqY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?i=TNxA2Cu2Pc4:x-d8aP4thqY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=TNxA2Cu2Pc4:x-d8aP4thqY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=TNxA2Cu2Pc4:x-d8aP4thqY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?i=TNxA2Cu2Pc4:x-d8aP4thqY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=TNxA2Cu2Pc4:x-d8aP4thqY:PWZOeuedlUc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?i=TNxA2Cu2Pc4:x-d8aP4thqY:PWZOeuedlUc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/benpetro/~4/TNxA2Cu2Pc4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://benpetro.blogspot.com/feeds/5565061697485161234/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3371379742754813076&amp;postID=5565061697485161234" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/5565061697485161234?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/5565061697485161234?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/benpetro/~3/TNxA2Cu2Pc4/inspiration-for-my-home-reno.html" title="Inspiration for my home reno" /><author><name>Ben Petro</name><uri>https://plus.google.com/105393083628412021020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uTrhCV2KQeQ/AAAAAAAAAAI/AAAAAAABlc0/AkCtPjmbMdo/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://benpetro.blogspot.com/2009/07/inspiration-for-my-home-reno.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcBQ3s5eip7ImA9WxJUFk0.&quot;"><id>tag:blogger.com,1999:blog-3371379742754813076.post-2303529595927726172</id><published>2009-07-15T07:45:00.002+10:00</published><updated>2009-07-15T07:47:32.522+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-15T07:47:32.522+10:00</app:edited><title>Log slow queries in MySQL</title><content type="html">sudo nano /etc/mysql/my.cnf&lt;br /&gt;&lt;br /&gt;log_slow_queries        = /path/to/mysql-slow.log&lt;br /&gt;long_query_time = 4&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;http://dev.mysql.com/doc/refman/5.0/en/slow-query-log.html&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=fByLMyDSSgY:rewrqDtSD0Q:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=fByLMyDSSgY:rewrqDtSD0Q:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?i=fByLMyDSSgY:rewrqDtSD0Q:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=fByLMyDSSgY:rewrqDtSD0Q:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=fByLMyDSSgY:rewrqDtSD0Q:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?i=fByLMyDSSgY:rewrqDtSD0Q:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=fByLMyDSSgY:rewrqDtSD0Q:PWZOeuedlUc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?i=fByLMyDSSgY:rewrqDtSD0Q:PWZOeuedlUc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/benpetro/~4/fByLMyDSSgY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://benpetro.blogspot.com/feeds/2303529595927726172/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3371379742754813076&amp;postID=2303529595927726172" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/2303529595927726172?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/2303529595927726172?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/benpetro/~3/fByLMyDSSgY/log-slow-queries-in-mysql.html" title="Log slow queries in MySQL" /><author><name>Ben Petro</name><uri>https://plus.google.com/105393083628412021020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uTrhCV2KQeQ/AAAAAAAAAAI/AAAAAAABlc0/AkCtPjmbMdo/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://benpetro.blogspot.com/2009/07/log-slow-queries-in-mysql.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU4HQ3k-eSp7ImA9WxJUFk0.&quot;"><id>tag:blogger.com,1999:blog-3371379742754813076.post-8021834241580915922</id><published>2009-07-15T07:45:00.001+10:00</published><updated>2009-07-15T07:45:32.751+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-15T07:45:32.751+10:00</app:edited><title>Stop/Start MySQL</title><content type="html">Start mysql server:&lt;br /&gt;# /etc/init.d/mysql start&lt;br /&gt;&lt;br /&gt;stop mysql server:&lt;br /&gt;# /etc/init.d/mysql stop&lt;br /&gt;&lt;br /&gt;restart mysql server&lt;br /&gt;# /etc/init.d/mysql restart&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=xTE4dDXFREo:oiL0HH_R5Bg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=xTE4dDXFREo:oiL0HH_R5Bg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?i=xTE4dDXFREo:oiL0HH_R5Bg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=xTE4dDXFREo:oiL0HH_R5Bg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=xTE4dDXFREo:oiL0HH_R5Bg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?i=xTE4dDXFREo:oiL0HH_R5Bg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=xTE4dDXFREo:oiL0HH_R5Bg:PWZOeuedlUc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?i=xTE4dDXFREo:oiL0HH_R5Bg:PWZOeuedlUc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/benpetro/~4/xTE4dDXFREo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://benpetro.blogspot.com/feeds/8021834241580915922/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3371379742754813076&amp;postID=8021834241580915922" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/8021834241580915922?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/8021834241580915922?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/benpetro/~3/xTE4dDXFREo/stopstart-mysql.html" title="Stop/Start MySQL" /><author><name>Ben Petro</name><uri>https://plus.google.com/105393083628412021020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uTrhCV2KQeQ/AAAAAAAAAAI/AAAAAAABlc0/AkCtPjmbMdo/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://benpetro.blogspot.com/2009/07/stopstart-mysql.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0AMR3g-fip7ImA9WxJUFUs.&quot;"><id>tag:blogger.com,1999:blog-3371379742754813076.post-6739282180886426958</id><published>2009-07-14T21:09:00.001+10:00</published><updated>2009-07-14T21:09:46.656+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-14T21:09:46.656+10:00</app:edited><title>rails gem install mysql</title><content type="html">&lt;span class="Apple-style-span" style="color: rgb(221, 221, 221); font-family: 'Trebuchet MS'; font-size: 14px; line-height: 20px; "&gt;&lt;pre style="padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-color: rgb(165, 178, 155); border-right-color: rgb(165, 178, 155); border-bottom-color: rgb(165, 178, 155); border-left-color: rgb(165, 178, 155); font-family: Verdana, Arial; font-size: 10px; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: rgb(19, 22, 31); background-position: initial initial; "&gt;sudo gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config&lt;/pre&gt;&lt;/span&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=x09VNpUR6Dc:q38HcFQPoYk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=x09VNpUR6Dc:q38HcFQPoYk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?i=x09VNpUR6Dc:q38HcFQPoYk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=x09VNpUR6Dc:q38HcFQPoYk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=x09VNpUR6Dc:q38HcFQPoYk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?i=x09VNpUR6Dc:q38HcFQPoYk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=x09VNpUR6Dc:q38HcFQPoYk:PWZOeuedlUc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?i=x09VNpUR6Dc:q38HcFQPoYk:PWZOeuedlUc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/benpetro/~4/x09VNpUR6Dc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://benpetro.blogspot.com/feeds/6739282180886426958/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3371379742754813076&amp;postID=6739282180886426958" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/6739282180886426958?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/6739282180886426958?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/benpetro/~3/x09VNpUR6Dc/rails-gem-install-mysql.html" title="rails gem install mysql" /><author><name>Ben Petro</name><uri>https://plus.google.com/105393083628412021020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uTrhCV2KQeQ/AAAAAAAAAAI/AAAAAAABlc0/AkCtPjmbMdo/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://benpetro.blogspot.com/2009/07/rails-gem-install-mysql.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YDRnw6eCp7ImA9WxJUFUs.&quot;"><id>tag:blogger.com,1999:blog-3371379742754813076.post-6551317405395571604</id><published>2009-07-14T20:25:00.005+10:00</published><updated>2009-07-14T20:59:37.210+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-14T20:59:37.210+10:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MySQL" /><title>Installing MySQL on Mac OSX</title><content type="html">1) Download MySql: &lt;a href="http://dev.mysql.com/downloads/mysql/5.1.html#macosx-dmg"&gt;http://dev.mysql.com/downloads/mysql/5.1.html#macosx-dmg&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2) Install the MySQL package&lt;br /&gt;&lt;br /&gt;3) Install the Startup Item&lt;br /&gt;&lt;br /&gt;4) Set mysql as a variable in the PATHS environment:&lt;br /&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;export PATH=/usr/local/mysql/bin:$PATH&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;MySQL is now installed to run at startup with NO user/password requirements. Now would be a good time to secure it:&lt;br /&gt;&lt;a href="http://dev.mysql.com/doc/refman/5.0/en/default-privileges.html"&gt;http://dev.mysql.com/doc/refman/5.0/en/default-privileges.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;5) Log in to mysql as root&lt;br /&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;mysql -u root&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;5) Drop the anonymous users&lt;br /&gt;&lt;span style="font-style:italic;"&gt;DROP USER '';&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;6) Change the root password:&lt;br /&gt;&lt;span style="font-style:italic;"&gt;SET PASSWORD FOR 'root'@'localhost' = PASSWORD('root');&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Done!&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=fkE1_KLdeB4:HdmEFgBrvY8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=fkE1_KLdeB4:HdmEFgBrvY8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?i=fkE1_KLdeB4:HdmEFgBrvY8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=fkE1_KLdeB4:HdmEFgBrvY8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=fkE1_KLdeB4:HdmEFgBrvY8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?i=fkE1_KLdeB4:HdmEFgBrvY8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=fkE1_KLdeB4:HdmEFgBrvY8:PWZOeuedlUc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?i=fkE1_KLdeB4:HdmEFgBrvY8:PWZOeuedlUc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/benpetro/~4/fkE1_KLdeB4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://benpetro.blogspot.com/feeds/6551317405395571604/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3371379742754813076&amp;postID=6551317405395571604" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/6551317405395571604?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/6551317405395571604?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/benpetro/~3/fkE1_KLdeB4/installing-mysql-on-mac-osx.html" title="Installing MySQL on Mac OSX" /><author><name>Ben Petro</name><uri>https://plus.google.com/105393083628412021020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uTrhCV2KQeQ/AAAAAAAAAAI/AAAAAAABlc0/AkCtPjmbMdo/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://benpetro.blogspot.com/2009/07/installing-mysql-on-mac-osx.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUEBSH47cSp7ImA9WxVVGE4.&quot;"><id>tag:blogger.com,1999:blog-3371379742754813076.post-5585725476540814362</id><published>2009-03-12T15:59:00.001+10:00</published><updated>2009-03-12T16:00:59.009+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-12T16:00:59.009+10:00</app:edited><title>Tweeting for change</title><content type="html">&lt;a href="http://www.twitterchange.com"&gt;www.twitterchange.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Time to go viral!&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=t8yS0wb98Bk:UsVKVNgkwqg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=t8yS0wb98Bk:UsVKVNgkwqg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?i=t8yS0wb98Bk:UsVKVNgkwqg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=t8yS0wb98Bk:UsVKVNgkwqg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=t8yS0wb98Bk:UsVKVNgkwqg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?i=t8yS0wb98Bk:UsVKVNgkwqg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/benpetro?a=t8yS0wb98Bk:UsVKVNgkwqg:PWZOeuedlUc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/benpetro?i=t8yS0wb98Bk:UsVKVNgkwqg:PWZOeuedlUc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/benpetro/~4/t8yS0wb98Bk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://benpetro.blogspot.com/feeds/5585725476540814362/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3371379742754813076&amp;postID=5585725476540814362" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/5585725476540814362?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/5585725476540814362?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/benpetro/~3/t8yS0wb98Bk/tweeting-for-change.html" title="Tweeting for change" /><author><name>Ben Petro</name><uri>https://plus.google.com/105393083628412021020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uTrhCV2KQeQ/AAAAAAAAAAI/AAAAAAABlc0/AkCtPjmbMdo/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://benpetro.blogspot.com/2009/03/tweeting-for-change.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYFSXo9eyp7ImA9WxVSEkw.&quot;"><id>tag:blogger.com,1999:blog-3371379742754813076.post-2968893507556286075</id><published>2009-01-06T14:45:00.003+10:00</published><updated>2009-01-06T15:01:58.463+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-06T15:01:58.463+10:00</app:edited><title>A Short Story</title><content type="html">And as the great lord of the Karkan people rose above the rich soil of the blessed land of white dwarves, there was finally peace that overcame the troubled souls of the forbidden palace.  For it had begun whereby the cursed rift of day and night had been severed, revealing the first elvan prince of the land of shadows, begot to the evil king Chibeeb, son of Cantance, lord of blood-lust lost souls.&lt;br /&gt;&lt;br /&gt;And as the fire descended from the fourth layer of the seventh dimension of the fifteenth sector of possessed corpses, the evil demon king, Karth, reigned terror upon the great pastures that once thrived in the territory of forgotten dwarf knights.  The only power which could stop the force of evil showering from the bridge between the afterlife was the once eternal great knight dwarf sorcerer, Ge.  For he possessed a power so powerfully powerful that one thrust of his mighty orb-sword would send a shiver through the soul of every poor peasant dragon farmer that once roamed the heavenly mountains of the dry land of the third moon of the Great Sea.  A sea so vast it would take a fleet of 30 warrior frigates 95 moon days to cross at full head-wind portside.  A sea which saw the loss of 40,000 lives during the everlasting, indefinite battle of 320 years of which the black goddess woman child of the shadow province of the underside of hell lay a terror so evil that her offspring still wince in their mother's shameful memory.&lt;br /&gt;&lt;br /&gt;But even in its darkest hour, the north star still rose over the horizon of life, casting eternal health-light over the land.  The only shadows that day were cast by the sea of dead;  an entire population of elvan dwarf giants had fallen under the wrath of the black goddess - granter of life through the myth of death.&lt;br /&gt;&lt;br /&gt;Not even Ge, powerfully powerful power dwarf knight god king sorcerer could repel the force possessed by the blood crazed black goddess, for his once mighty orb-sword cowered at the notion of battle against its eternal enemy - the staff of black rift-war demon spawn.&lt;br /&gt;&lt;br /&gt;But Ge could only hide from his destiny for so long, and soon the wrath of the mistress of the demon lord, Chakrine - ruler of the people of the wide lance of the serpent scythe - had cast his demonic soul of elf-blood into the desert field of red atmospheres. And it was on this field that the great battle of kindred death souls was fought between the knight dwarf Ge and his eternal brother rival demon kid, Chakrine.&lt;br /&gt;&lt;br /&gt;-- An original piece, inspired by the writing of David Eddings and scrawled onto a notepad during the winter of 2000 in Colorado.&lt;br /&gt;&lt;br /&gt;Copyright ME&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/benpetro?a=MY5lR2tZ"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=kxDysmho"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=kxDysmho" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=P6m5ds6g"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=HHB0P1Co"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=HHB0P1Co" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=lbDCqRMd"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=lbDCqRMd" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/benpetro/~4/BElYlKLJp5M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://benpetro.blogspot.com/feeds/2968893507556286075/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3371379742754813076&amp;postID=2968893507556286075" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/2968893507556286075?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/2968893507556286075?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/benpetro/~3/BElYlKLJp5M/short-story.html" title="A Short Story" /><author><name>Ben Petro</name><uri>https://plus.google.com/105393083628412021020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uTrhCV2KQeQ/AAAAAAAAAAI/AAAAAAABlc0/AkCtPjmbMdo/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://benpetro.blogspot.com/2009/01/short-story.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A08EQHw7fCp7ImA9WxdWFUs.&quot;"><id>tag:blogger.com,1999:blog-3371379742754813076.post-4641943294682054905</id><published>2008-07-09T12:16:00.001+10:00</published><updated>2008-07-09T12:16:41.204+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-09T12:16:41.204+10:00</app:edited><title>Lively Room</title><content type="html">&lt;iframe src='http://embed.lively.com/iframe?rid=-6146631826055066109' width='660' height='500' marginwidth='0' marginheight='0' frameborder='0' scrolling='no'&gt;&lt;/iframe&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/benpetro?a=k87Db4s3"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=WbmoKrhX"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=WbmoKrhX" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=ZXF5oSzL"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=Zh40vVk9"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=Zh40vVk9" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=ThMAYbxE"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=ThMAYbxE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/benpetro/~4/9QKTccO-fQg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://benpetro.blogspot.com/feeds/4641943294682054905/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3371379742754813076&amp;postID=4641943294682054905" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/4641943294682054905?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/4641943294682054905?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/benpetro/~3/9QKTccO-fQg/lively-room.html" title="Lively Room" /><author><name>Ben Petro</name><uri>https://plus.google.com/105393083628412021020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uTrhCV2KQeQ/AAAAAAAAAAI/AAAAAAABlc0/AkCtPjmbMdo/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://benpetro.blogspot.com/2008/07/lively-room.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEEFQXY7eyp7ImA9WxZUFk0.&quot;"><id>tag:blogger.com,1999:blog-3371379742754813076.post-195133589295834312</id><published>2008-04-08T08:12:00.002+10:00</published><updated>2008-04-08T08:16:50.803+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-08T08:16:50.803+10:00</app:edited><title>Delete old sessions in Rails</title><content type="html">I found a &lt;a href="http://www.realityforge.org/articles/2006/03/01/removing-stale-rails-sessions" target="_blank"&gt;useful method&lt;/a&gt; to remove the old sessions that were building up in my Rails apps:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class SessionCleaner&lt;br /&gt;  def self.remove_stale_sessions&lt;br /&gt;    CGI::Session::ActiveRecordStore::Session.&lt;br /&gt;      destroy_all( ['updated_at &amp;lt;?', 1.hour.ago] ) &lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I stuck this in a new class &lt;span style="font-weight:bold;"&gt;session_cleaner.rb&lt;/span&gt; in the /lib folder.&lt;br /&gt;&lt;br /&gt;And then set up a cron job at my host to run every hour:&lt;br /&gt;&lt;br /&gt;ruby $HOME/path/to/app/script/runner -e production "SessionCleaner.remove_stale_sessions"&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;No more redundant sessions!&lt;/span&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/benpetro?a=N0aEqV5b"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=Wk89PdAi"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=Wk89PdAi" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=gcdQjsIa"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=dXG6816y"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=dXG6816y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=DMizX7Oo"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=DMizX7Oo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/benpetro/~4/aRDzwpg_vNU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://benpetro.blogspot.com/feeds/195133589295834312/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3371379742754813076&amp;postID=195133589295834312" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/195133589295834312?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/195133589295834312?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/benpetro/~3/aRDzwpg_vNU/delete-old-sessions-in-rails.html" title="Delete old sessions in Rails" /><author><name>Ben Petro</name><uri>https://plus.google.com/105393083628412021020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uTrhCV2KQeQ/AAAAAAAAAAI/AAAAAAABlc0/AkCtPjmbMdo/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://benpetro.blogspot.com/2008/04/delete-old-sessions-in-rails.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UFR3wycCp7ImA9WxZXEEs.&quot;"><id>tag:blogger.com,1999:blog-3371379742754813076.post-2439873357003719213</id><published>2008-02-27T09:33:00.002+10:00</published><updated>2008-02-27T09:40:16.298+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-02-27T09:40:16.298+10:00</app:edited><title>Comment system moving to Disqus</title><content type="html">Despite the fact that I never have anything interesting to write about, nor do my 11 devoted readers have anything to say, I've implemented the &lt;a href="http://disqus.com"&gt;Disqus&lt;/a&gt; comment system into my blog today for future posts.&lt;br /&gt;&lt;br /&gt;I've known about Disqus for a few months now, but never really thought of any implementations for it.  I've decided to give it a chance and played around with it last night.  It's a very clever idea, and I'm trialling it here on this blog before possibly rolling it out into my other applications, namely &lt;a href="http://www.bopsta.com"&gt;Bopsta&lt;/a&gt; and my &lt;a href="http://www.pieronline.org"&gt;paid work&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Anyway, I'm going to start talking to myself now.... so please, don't mind me.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/benpetro?a=8CUF3JYB"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=ZCW7kgCF"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=ZCW7kgCF" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=jVxawiak"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=obgwmQTz"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=obgwmQTz" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=C1pq3Z54"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=C1pq3Z54" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/benpetro/~4/w98Y08LO60c" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/2439873357003719213?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/2439873357003719213?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/benpetro/~3/w98Y08LO60c/comment-system-moving-to-disqus.html" title="Comment system moving to Disqus" /><author><name>Ben Petro</name><uri>https://plus.google.com/105393083628412021020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uTrhCV2KQeQ/AAAAAAAAAAI/AAAAAAABlc0/AkCtPjmbMdo/s512-c/photo.jpg" /></author><feedburner:origLink>http://benpetro.blogspot.com/2008/02/comment-system-moving-to-disqus.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUEBQn0ycCp7ImA9WxZQGUQ.&quot;"><id>tag:blogger.com,1999:blog-3371379742754813076.post-3246006841338852098</id><published>2008-02-12T15:17:00.001+10:00</published><updated>2008-02-26T12:40:53.398+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-02-26T12:40:53.398+10:00</app:edited><title>Update to my experiment in the Social Graph API</title><content type="html">I've been playing around with &lt;a href="http://code.google.com/apis/socialgraph"&gt;Google's Social Graph API&lt;/a&gt; for the past few days and thought I'd mention a few of my findings.&lt;br /&gt;&lt;br /&gt;I wrote &lt;a href="http://benpetro.blogspot.com/2008/02/experiment-in-social-graph-api.html"&gt;last week&lt;/a&gt; that I played around with a few of my sites and updated the XFN relationships between my 'me' links.  It wasn't long before my updates where indexed by Google, and the example applications began functioning correctly.&lt;br /&gt;&lt;br /&gt;I wanted to build an application that would use this data in some way.  So basically, I built a simple &lt;a href="http://www.google.com.au/ig/add?moduleurl=http%3A%2F%2Fhosting.gmodules.com%2Fig%2Fgadgets%2Ffile%2F107398817552674432800%2Fsocial_graph1.xml"&gt;iGoogle gadget&lt;/a&gt; to display the 'me' links from an address you enter.&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gmodules.com/ig/ifr?url=http://hosting.gmodules.com/ig/gadgets/file/107398817552674432800/social_graph1.xml&amp;amp;synd=open&amp;amp;w=350&amp;amp;h=320&amp;amp;title=Social+Graph+API+Tester&amp;amp;border=%23ffffff%7C1px%2C1px+solid+black%7C1px%2C1px+solid+black%7C0px%2C1px+black&amp;amp;output=js"&gt;&lt;/script&gt;&lt;br /&gt;As you can see, my sites have been linked quite well, and I'm actually surprised at how quickly the indexes are being updated. For example, I added a 'me' reference to my &lt;a href="http://site.aussiescooters.com/riders/ben" rel="me"&gt;Aussie Scooters profile&lt;/a&gt;, and noticed that the Social Graph API picked up this new link within about 20hrs.&lt;br /&gt;&lt;br /&gt;As this was my first implementation using JSON fetched using the iGoogle Gadget _IG_FetchContent method, it took me a little bit of time before I could translate the JSON into usable Javascript objects.  Once I got it though, the rest of the work was very simple.&lt;br /&gt;&lt;br /&gt;I've since looked a bit more into &lt;a href="http://www.foaf-project.org"&gt;FOAF&lt;/a&gt; and have added a &lt;a href="http://benpetro.googlepages.com/foaf.rdf"&gt;FOAF description&lt;/a&gt; to this blog.  I'm hoping this is how the Social Graph API finds the profile photo/avatar URL, as it doesn't seem to be finding it any other way.&lt;br /&gt;&lt;br /&gt;I'm also going to try working on my friends/acquaintances connections to see where I can go with that, however I really don't have many!  Anyway, I'm very interested to know if anyone else is building on the Social Graph API and what they are doing with it.  I'm sure there will be some very practical implementations coming out soon.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/benpetro?a=geseRpNb"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=ZlJdFqSr"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=ZlJdFqSr" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=eLAJ30dI"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=DkGPjsBu"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=DkGPjsBu" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=QjULbiv9"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=QjULbiv9" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/benpetro/~4/BZRh-1IcwQY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://benpetro.blogspot.com/feeds/3246006841338852098/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3371379742754813076&amp;postID=3246006841338852098" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/3246006841338852098?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/3246006841338852098?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/benpetro/~3/BZRh-1IcwQY/update-to-my-experiment-in-social-graph.html" title="Update to my experiment in the Social Graph API" /><author><name>Ben Petro</name><uri>https://plus.google.com/105393083628412021020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uTrhCV2KQeQ/AAAAAAAAAAI/AAAAAAABlc0/AkCtPjmbMdo/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://benpetro.blogspot.com/2008/02/update-to-my-experiment-in-social-graph.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0ECR3g6cSp7ImA9WxZRFkU.&quot;"><id>tag:blogger.com,1999:blog-3371379742754813076.post-1199396950729800756</id><published>2008-02-11T08:13:00.000+10:00</published><updated>2008-02-11T08:14:26.619+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-02-11T08:14:26.619+10:00</app:edited><title>Wow, it looks good!</title><content type="html">&lt;object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="640" height="524" id="splash" align="middle"&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;param name="menu" value="false" /&gt;&lt;param name="movie" value="http://www.rockstargames.com/IV/flvPlayer/holder640x480Embed.swf?flvtolocation=www%2Erockstargames%2Ecom%2FIV%2Fwet%2FwhizMobile%2Fwhizmobile%2Eflv&amp;linktolocation=www%2Erockstargames%2Ecom%2FIV%2F%23%3Fpage%3DwhizMobile%26content%3Dvideo0" /&gt;&lt;param name="quality" value="high" /&gt;&lt;param name="bgcolor" value="#000000" /&gt; &lt;embed src="http://www.rockstargames.com/IV/flvPlayer/holder640x480Embed.swf?flvtolocation=www%2Erockstargames%2Ecom%2FIV%2Fwet%2FwhizMobile%2Fwhizmobile%2Eflv&amp;linktolocation=www%2Erockstargames%2Ecom%2FIV%2F%23%3Fpage%3DwhizMobile%26content%3Dvideo0" quality="high" bgcolor="#000000" menu="false" width="640" height="524" name="splash" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" &gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/benpetro?a=odrK8cAX"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=zv2XrEht"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=zv2XrEht" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=ZmxjV9Uu"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=VBILrb5B"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=VBILrb5B" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=WFdSGzPV"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=WFdSGzPV" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/benpetro/~4/QaotYQ2Sxqo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://benpetro.blogspot.com/feeds/1199396950729800756/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3371379742754813076&amp;postID=1199396950729800756" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/1199396950729800756?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/1199396950729800756?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/benpetro/~3/QaotYQ2Sxqo/wow-it-looks-good.html" title="Wow, it looks good!" /><author><name>Ben Petro</name><uri>https://plus.google.com/105393083628412021020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uTrhCV2KQeQ/AAAAAAAAAAI/AAAAAAABlc0/AkCtPjmbMdo/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://benpetro.blogspot.com/2008/02/wow-it-looks-good.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8HQH06cCp7ImA9WxZRFkU.&quot;"><id>tag:blogger.com,1999:blog-3371379742754813076.post-5884977862216623745</id><published>2008-02-11T07:55:00.000+10:00</published><updated>2008-02-11T08:00:31.318+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-02-11T08:00:31.318+10:00</app:edited><title>GTAIV says I'm a douchebag =)</title><content type="html">&lt;a href="http://www.rockstargames.com/IV/#?page=loveMeet&amp;amp;content=interactive0"&gt;&lt;img src="http://www.rockstargames.com/IV/wet/loveMeet/embed/mdouchebag.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's going to be hard not to get an XBOX 360 on April 29th....&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/benpetro?a=Xm8uYfJG"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=qU7NUhwE"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=qU7NUhwE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=AAGrZdwO"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=xdaG0c3n"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=xdaG0c3n" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=6mbiDqxe"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=6mbiDqxe" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/benpetro/~4/Z9SOB2LPV1A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://benpetro.blogspot.com/feeds/5884977862216623745/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3371379742754813076&amp;postID=5884977862216623745" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/5884977862216623745?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/5884977862216623745?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/benpetro/~3/Z9SOB2LPV1A/gtaiv-says-im-douchebag.html" title="GTAIV says I'm a douchebag =)" /><author><name>Ben Petro</name><uri>https://plus.google.com/105393083628412021020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uTrhCV2KQeQ/AAAAAAAAAAI/AAAAAAABlc0/AkCtPjmbMdo/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://benpetro.blogspot.com/2008/02/gtaiv-says-im-douchebag.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QCRn86eSp7ImA9WxZRFkQ.&quot;"><id>tag:blogger.com,1999:blog-3371379742754813076.post-3061827786107912250</id><published>2008-02-07T14:11:00.000+10:00</published><updated>2008-02-11T12:02:47.111+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-02-11T12:02:47.111+10:00</app:edited><title>Rails 2.0 broke my image_tag &amp; stylesheet_link_tag helpers</title><content type="html">I've recently updated a few of my apps to Rails 2.0.2, after first upgrading to 1.2.6 and fixing the deprecations.  It's been a smooth transition and I'm enjoying getting into the new conventions and features. However, since upgrading, Rails 2 now breaks my image_tag, stylesheet_link_tag helpers and other &lt;span style="font-weight: bold;"&gt;asset_tag_helpers&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;The code: &lt;span style="font-weight: bold;"&gt;image_tag("/images/logo.gif") or stylesheet_link_tag "global"&lt;/span&gt;&lt;br /&gt;The error: &lt;span style="font-weight: bold;"&gt;(Action Controller: Exception caught)&lt;/span&gt; - &lt;span style="font-weight: bold;"&gt;too many arguments for format string&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Now, I have Googled repeatedly and can find only one meaningful reference to this problem &lt;a href="http://dev.rubyonrails.org/ticket/8970"&gt;here&lt;/a&gt; however it  seems to be unrelated and is from August 07.&lt;br /&gt;&lt;br /&gt;If anyone else has also had any experience with this problem, please let me know that I'm not the only one!  I've created new empty Rails apps on different computers, all in 2.0.2 and I still get the same error!&lt;br /&gt;&lt;br /&gt;So, I did a bit of digging around and tried skipping the helper tag and looking at the &lt;span style="font-weight: bold;"&gt;asset_tag_helper&lt;/span&gt; definition:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;def image_tag(source, options = {})&lt;br /&gt;options.symbolize_keys!&lt;br /&gt;&lt;br /&gt;options[:src] = path_to_image(source)&lt;br /&gt;options[:alt] ||= File.basename(options[:src], '.*').split('.').first.capitalize&lt;br /&gt;&lt;br /&gt;if size = options.delete(:size)&lt;br /&gt;  options[:width], options[:height] = size.split("x") if size =~ %r{^\d+x\d+$}&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;if mouseover = options.delete(:mouseover)&lt;br /&gt;  options[:onmouseover]    = "this.src='#{image_path(mouseover)}'"&lt;br /&gt;  options[:onmouseout]    = "this.src='#{image_path(options[:src])}'"&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;tag("img", options)&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;Now, if I try calling &lt;%= tag("img", {:src =&gt; "/images/logo.gif"}) %&gt;, the app runs fine and the image is loaded.  So I have to look deeper than this.&lt;br /&gt;&lt;br /&gt;I tore the helper definition apart and it fails at the following line:&lt;br /&gt;&lt;pre&gt;     options[:src] = &lt;span style="font-weight: bold;"&gt;path_to_image&lt;/span&gt;(source)&lt;br /&gt;&lt;/pre&gt;So let's look at that... But hang on, where do I find that?  In &lt;span style="font-weight: bold;"&gt;asset_tag_help&lt;/span&gt;, it's an alias method:&lt;br /&gt;&lt;pre&gt;    &lt;code&gt;alias_method :path_to_image, :image_path&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;The image path definition is:&lt;br /&gt;&lt;pre&gt;     &lt;code&gt;def image_path(source)&lt;br /&gt;   compute_public_path(source, 'images')&lt;br /&gt; end&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;So, we're traced it to &lt;span style="font-weight: bold;"&gt;compute_public_path&lt;/span&gt;, and that's a big one!  Anyway, to cut a long story short, it eventually falls over at the &lt;span style="font-weight: bold;"&gt;compute_asset_host&lt;/span&gt; method at the highlighted line:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;        def compute_asset_host(source)&lt;br /&gt;       if host = ActionController::Base.asset_host&lt;br /&gt;         if host.is_a?(Proc)&lt;br /&gt;           host.call(source)&lt;br /&gt;         else&lt;br /&gt;           &lt;span style="color: rgb(255, 0, 0);"&gt;host % (source.hash % 4)&lt;/span&gt;&lt;br /&gt;         end&lt;br /&gt;       end&lt;br /&gt;     end&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;Now WHY!????????&lt;br /&gt;&lt;br /&gt;Well, I ran a few logger.debugs and found the following:&lt;br /&gt;&lt;br /&gt;source.hash % 4 =&gt; 0&lt;br /&gt;host =&gt; 'nothing', ie. blank.&lt;br /&gt;&lt;br /&gt;So I rewrote the line to be:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Line 466: host % (source.hash % 4) unless host.blank?&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;And Voila, it works.  Now is this a bug in Rails?  Is there something with my setup that's different to everyone else?  I'm not quite sure what to do about this, but I might try logging a ticket with someone and seeing what happens.  It seems like a bug to me, but maybe that's just me.&lt;br /&gt;&lt;br /&gt;Anyway, I'm happy it's working now for me, and I'll just have to remember to keep an eye on it until it's fixed for good.  Thanks for sticking with me, if any of you did. And please let me know if you've had this problem, or if it's worked okay for you straight out of the box.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Update:&lt;/span&gt; I've added a ticket: http://dev.rubyonrails.org/ticket/11035.  Not sure what happens now... unless someone wants to elighten me!&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/benpetro?a=1a2gZRvJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=HGBiW6il"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=HGBiW6il" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=O9zVChJa"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=PCxvPffh"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=PCxvPffh" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=KJmeZIc2"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=KJmeZIc2" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/benpetro/~4/c-UN_6DWNso" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://benpetro.blogspot.com/feeds/3061827786107912250/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3371379742754813076&amp;postID=3061827786107912250" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/3061827786107912250?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/3061827786107912250?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/benpetro/~3/c-UN_6DWNso/rails-20-broke-my-imagetag.html" title="Rails 2.0 broke my image_tag &amp; stylesheet_link_tag helpers" /><author><name>Ben Petro</name><uri>https://plus.google.com/105393083628412021020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uTrhCV2KQeQ/AAAAAAAAAAI/AAAAAAABlc0/AkCtPjmbMdo/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://benpetro.blogspot.com/2008/02/rails-20-broke-my-imagetag.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcERHs6eyp7ImA9WxZRE0k.&quot;"><id>tag:blogger.com,1999:blog-3371379742754813076.post-8793335525052923228</id><published>2008-02-07T09:31:00.000+10:00</published><updated>2008-02-07T09:53:25.513+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-02-07T09:53:25.513+10:00</app:edited><title>An experiment in the Social Graph API</title><content type="html">Google's newly released &lt;a href="http://code.google.com/apis/socialgraph/"&gt;Social Graph API&lt;/a&gt; seems very interesting to me.  As a pseudo-developer type guy, I might just think of a nifty way to use this data in an app of mine.&lt;br /&gt;&lt;br /&gt;Anyway, when it released earlier this week, I took a look around and tried testing out the example applications.  The results were a little underwhelming for me at first, until I realised that I really don't have much of a public online profile, nor many online friends!&lt;br /&gt;&lt;br /&gt;Using the &lt;a style="font-weight: bold;" href="http://socialgraph-resources.googlecode.com/svn/trunk/samples/findyours.html"&gt;Site Connectivity&lt;/a&gt; demo, I entered my blog address (benpetro.blogspot.com) and ran the test.  &lt;span style="font-weight: bold;"&gt;No results! &lt;/span&gt; I entered every other site I could think of including Bopsta, my Facebook account, my Pownce account (btw, who needs Pownce?) and all returned no results.  At first I thought that the demo may not be work correctly, but when I entered the example page (bradfitz.com), it returned about a thousand sites.  That guy is connected!&lt;br /&gt;&lt;br /&gt;This led me to investigate the &lt;a href="http://www.gmpg.org/xfn/join"&gt;XFN&lt;/a&gt; markup that I had built into my sites.  Considering I had never heard of XFN before this, I was fairly confident that it was pretty non-existant.  I went through Bopsta, and added XFN tags for my user relationships.  I then did the same for this blog, adding the links in the sidebar to my public profile pages.  I then waited....&lt;br /&gt;&lt;br /&gt;And it didn't take too long!  Now, 3 days later, I run the test and get the following results:&lt;br /&gt;&lt;br /&gt;&lt;table id="sites"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Your site&lt;/th&gt;&lt;th&gt;Score&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="base_site"&gt;&lt;img src="http://benpetro.blogspot.com/favicon.ico" class="favicon" width="16" /&gt; &lt;a href="http://benpetro.blogspot.com/"&gt;benpetro.blogspot.com/&lt;/a&gt;&lt;/td&gt;&lt;td class="total fully"&gt;8/8&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="base_site"&gt;     &lt;a href="http://pownce.com/sebeda"&gt;pownce.com/sebeda&lt;/a&gt;&lt;/td&gt;&lt;td class="total fully"&gt;8/8&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="base_site"&gt;&lt;img src="http://facebook.com/favicon.ico" class="favicon" width="16" /&gt; &lt;a href="http://www.facebook.com/profile.php?id=500870974"&gt;facebook.com/profile.php&lt;/a&gt;&lt;/td&gt;&lt;td class="total partial"&gt;2/8&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="base_site"&gt;&lt;img src="http://weewar.com/favicon.ico" class="favicon" width="16" /&gt; &lt;a href="http://weewar.com/user/sebeda/"&gt;weewar.com/user/sebeda/&lt;/a&gt;&lt;/td&gt;&lt;td class="total alone"&gt;1/8&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="base_site"&gt;&lt;img src="http://bopsta.com/favicon.ico" class="favicon" width="16" /&gt; &lt;a href="http://www.bopsta.com/bopsta.php?id=1"&gt;bopsta.com/bopsta.php&lt;/a&gt;&lt;/td&gt;&lt;td class="total alone"&gt;1/8&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="base_site"&gt;&lt;img src="http://picasaweb.google.com/favicon.ico" class="favicon" width="16" /&gt; &lt;a href="http://picasaweb.google.com/benpetro"&gt;picasaweb.google.com/benpetro&lt;/a&gt;&lt;/td&gt;&lt;td class="total alone"&gt;1/8&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="base_site"&gt;&lt;img src="http://weewar.com/favicon.ico" class="favicon" width="16" /&gt; &lt;a href="http://weewar.com/user/sebeda"&gt;weewar.com/user/sebeda&lt;/a&gt;&lt;/td&gt;&lt;td class="total alone"&gt;1/8&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="base_site"&gt;&lt;img src="http://facebook.com/favicon.ico" class="favicon" width="16" /&gt; &lt;a href="http://www.facebook.com/people/Ben_Petro/500870974"&gt;facebook.com/people/Ben_Petro/500870974&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Looks like I'm connected to myself okay, however no-one else connects to me. :(&lt;br /&gt;&lt;br /&gt;I ran the test on the &lt;a href="http://socialgraph-resources.googlecode.com/svn/trunk/samples/findcontacts.html?q=benpetro.blogspot.com"&gt;My Connections&lt;/a&gt; demo and found my one and only Pownce contact connected to me as an acquaintance.&lt;br /&gt;&lt;br /&gt;So, after improving the XFN markup of my blog, it has clearly improved my public profile connections.  I'm waiting to see if the alterations have any effect on Bopsta, and if they do, I'll update the post.&lt;br /&gt;&lt;br /&gt;Now....  what can I do with this data??????&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/benpetro?a=fdBMXTsp"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=uLwjlwVY"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=uLwjlwVY" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=fxdTCYHE"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=ZcgmJouE"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=ZcgmJouE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=ZZ4rbj9J"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=ZZ4rbj9J" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/benpetro/~4/0f8C0DRqHdM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://benpetro.blogspot.com/feeds/8793335525052923228/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3371379742754813076&amp;postID=8793335525052923228" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/8793335525052923228?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/8793335525052923228?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/benpetro/~3/0f8C0DRqHdM/experiment-in-social-graph-api.html" title="An experiment in the Social Graph API" /><author><name>Ben Petro</name><uri>https://plus.google.com/105393083628412021020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uTrhCV2KQeQ/AAAAAAAAAAI/AAAAAAABlc0/AkCtPjmbMdo/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://benpetro.blogspot.com/2008/02/experiment-in-social-graph-api.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0AAQn87fyp7ImA9WxZREkk.&quot;"><id>tag:blogger.com,1999:blog-3371379742754813076.post-6275742311344958060</id><published>2008-02-06T08:13:00.000+10:00</published><updated>2008-02-06T08:15:43.107+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-02-06T08:15:43.107+10:00</app:edited><title>Power of 10</title><content type="html">&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/BBsOeLcUARw&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/BBsOeLcUARw&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;This makes me feeler even shorter than I normally do!  It's a wonderful film, I'd love to see a higher res version.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/benpetro?a=oH3U78ok"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=Lj7WbUaL"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=Lj7WbUaL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=sLwIaAOg"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=NuVQ9RLf"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=NuVQ9RLf" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=3ixmFMb4"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=3ixmFMb4" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/benpetro/~4/zgjWkQbdUWU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://benpetro.blogspot.com/feeds/6275742311344958060/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3371379742754813076&amp;postID=6275742311344958060" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/6275742311344958060?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/6275742311344958060?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/benpetro/~3/zgjWkQbdUWU/power-of-10.html" title="Power of 10" /><author><name>Ben Petro</name><uri>https://plus.google.com/105393083628412021020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uTrhCV2KQeQ/AAAAAAAAAAI/AAAAAAABlc0/AkCtPjmbMdo/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://benpetro.blogspot.com/2008/02/power-of-10.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UCRn08eSp7ImA9WxZSF04.&quot;"><id>tag:blogger.com,1999:blog-3371379742754813076.post-1399766236973942881</id><published>2008-01-31T08:12:00.000+10:00</published><updated>2008-01-31T08:14:27.371+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-01-31T08:14:27.371+10:00</app:edited><title>Prototype.js Cheat Sheet</title><content type="html">Thanks to thinkweb2.com for the very handy Prototype 1.6 cheat sheet:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://thinkweb2.com/projects/prototype/prototype-1602-cheat-sheet/" target="_blank"&gt;http://thinkweb2.com/projects/prototype/prototype-1602-cheat-sheet/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There's a printer-friendly version toward the bottom of the post.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/benpetro?a=CUMXb3MC"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=3HKFFiwh"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=3HKFFiwh" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=QKwf9G39"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=iJ5afdw5"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=iJ5afdw5" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=6EQ2CveA"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=6EQ2CveA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/benpetro/~4/ylQAbl7Uk14" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://benpetro.blogspot.com/feeds/1399766236973942881/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3371379742754813076&amp;postID=1399766236973942881" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/1399766236973942881?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/1399766236973942881?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/benpetro/~3/ylQAbl7Uk14/prototypejs-cheat-sheet.html" title="Prototype.js Cheat Sheet" /><author><name>Ben Petro</name><uri>https://plus.google.com/105393083628412021020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uTrhCV2KQeQ/AAAAAAAAAAI/AAAAAAABlc0/AkCtPjmbMdo/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://benpetro.blogspot.com/2008/01/prototypejs-cheat-sheet.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE8FQnozfSp7ImA9WxZSFUs.&quot;"><id>tag:blogger.com,1999:blog-3371379742754813076.post-7083527925979017256</id><published>2008-01-29T10:31:00.000+10:00</published><updated>2008-01-29T10:33:33.485+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-01-29T10:33:33.485+10:00</app:edited><title>Google's Lego Logo</title><content type="html">&lt;img src="http://www.google.com.au/logos/lego08.gif" style="float:right;"/&gt;Apparently it's the 50th anniversary of Lego today.  That's cool enough, but Google's logo to mark the celebration is totally awesome.&lt;br /&gt;&lt;br /&gt;I'm a fan!&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/benpetro?a=6rDNua2t"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=jUVo0fvg"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=jUVo0fvg" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=LkqNh9NV"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=jTTevK1t"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=jTTevK1t" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=vMBUSNWA"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=vMBUSNWA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/benpetro/~4/n_tzad4CJKE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://benpetro.blogspot.com/feeds/7083527925979017256/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3371379742754813076&amp;postID=7083527925979017256" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/7083527925979017256?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/7083527925979017256?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/benpetro/~3/n_tzad4CJKE/googles-lego-logo.html" title="Google's Lego Logo" /><author><name>Ben Petro</name><uri>https://plus.google.com/105393083628412021020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uTrhCV2KQeQ/AAAAAAAAAAI/AAAAAAABlc0/AkCtPjmbMdo/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://benpetro.blogspot.com/2008/01/googles-lego-logo.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQDR389fSp7ImA9WxZTFk0.&quot;"><id>tag:blogger.com,1999:blog-3371379742754813076.post-8810388068945610564</id><published>2008-01-18T07:52:00.000+10:00</published><updated>2008-01-18T08:02:56.165+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-01-18T08:02:56.165+10:00</app:edited><title>iPod Touch meets metal ball-point pen</title><content type="html">I told you I wouldn't be a very good blogger.  I just have nothing interesting to say!&lt;br /&gt;&lt;br /&gt;This time however, I couldn't NOT say something.&lt;br /&gt;&lt;br /&gt;The iPhone is beautiful, no doubt about it.  The iPod Touch as well as it's basically the same product.  But what happens when you accidentally drop a metal ball-point pen from 20cm onto it? My friend recently found out....&lt;br /&gt;&lt;br /&gt;&lt;img src="http://benpetro.googlepages.com/brokenipod.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;Apple will replace the screen for $250.  Ouch, the price of beauty....&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/benpetro?a=B0ndbBWd"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=p0pg1Q7M"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=p0pg1Q7M" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=lv2scXCy"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=5mowgZac"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=5mowgZac" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/benpetro?a=BK2wOQYn"&gt;&lt;img src="http://feeds.feedburner.com/~f/benpetro?i=BK2wOQYn" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/benpetro/~4/gpmoHjKUng4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://benpetro.blogspot.com/feeds/8810388068945610564/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3371379742754813076&amp;postID=8810388068945610564" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/8810388068945610564?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3371379742754813076/posts/default/8810388068945610564?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/benpetro/~3/gpmoHjKUng4/ipod-touch-meets-metal-ball-point-pen.html" title="iPod Touch meets metal ball-point pen" /><author><name>Ben Petro</name><uri>https://plus.google.com/105393083628412021020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-uTrhCV2KQeQ/AAAAAAAAAAI/AAAAAAABlc0/AkCtPjmbMdo/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://benpetro.blogspot.com/2008/01/ipod-touch-meets-metal-ball-point-pen.html</feedburner:origLink></entry></feed>
