<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Out of my mind...: Category Ruby</title>
    <link>http://blog.fredjean.net/articles/category/ruby</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>Frederic Jean's Random Thoughts</description>
    <item>
      <title>37signals Getting Real Book</title>
      <description>&lt;p&gt;
&lt;a href="http://37signals.com/svn/archives2/the_getting_real_book.php"&gt;David announced&lt;/a&gt; that the &lt;a href="https://gettingreal.37signals.com/"&gt;Getting Real book&lt;/a&gt; was now available as a PDF file.
&lt;/p&gt;&lt;p&gt;
I bought a copy, downloaded it and read it from end to end. It is mostly a compilation of the &lt;a href="http://37signals.com/svn/"&gt;37signals blog&lt;/a&gt; with supporting quotes and evidence. It is a good read overall, although it did make me envious of how developers at &lt;a href="http://37signals.com/"&gt;37signals&lt;/a&gt; and other startups are able to work without the overhead that I have to face here at Sun. I'm not really the target audience though since the book is better targetted to small teams and startups working on products.
&lt;/p&gt;&lt;p&gt;
I certainly recommend it.
&lt;/p&gt;&lt;p&gt;
&lt;strong&gt;Update:&lt;/strong&gt; The &lt;a href="http://37signals.com/svn/archives2/getting_real_book_update_new_version_sales_feedback_contributors_etc.php"&gt;37signals team released a refreshed version of the PDF&lt;/a&gt; in response to comments from people who bought the book. It is certainly a great example of a company walking the talk.
&lt;/p&gt;

</description>
      <pubDate>Fri, 03 Mar 2006 18:22:14 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:2c3d2823754ed76cb05b5efd045dd318</guid>
      <author>fred@fredjean.net (Frederic Jean)</author>
      <link>http://blog.fredjean.net/articles/2006/03/03/37signals-getting-real-book</link>
      <category>Development Process</category>
      <category>Ruby</category>
      <trackback:ping>http://blog.fredjean.net/articles/trackback/18</trackback:ping>
    </item>
    <item>
      <title>Ruby on Rails Tutorial on apple.com</title>
      <description>&lt;p&gt;
Apple has posted a &lt;a href="http://developer.apple.com/tools/rubyonrails.html"&gt;tutorial about Ruby on Rails&lt;/a&gt; on their web site. It does highlight Textmate and explains why Mac OS X is such a great platform to develop RoR applications.
&lt;/p&gt;&lt;p&gt;
Of course, you knew that already if you played with RoR on a Mac...
&lt;/p&gt;

</description>
      <pubDate>Mon, 27 Feb 2006 22:52:51 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:d36f7a06d2b56173f341ab6cba0ba274</guid>
      <author>fred@fredjean.net (Frederic Jean)</author>
      <link>http://blog.fredjean.net/articles/2006/02/27/ruby-on-rails-tutorial-on-apple-com</link>
      <category>Ruby</category>
      <trackback:ping>http://blog.fredjean.net/articles/trackback/17</trackback:ping>
    </item>
    <item>
      <title>Better-than-Google activity indicators with Rails</title>
      <description>&lt;p&gt;
The next time that you use your GMail account, look on the upper-right corner of the screen when you go from email to email. You'll notice that a red box shows up containing the word "Loading...".  This is a very helpful indicator that GMail is in the process of doing something.
&lt;/p&gt;&lt;p&gt;
&lt;a href="http://mir.aculo.us/"&gt;Mir.aculo.us&lt;/a&gt; has &lt;a href="http://mir.aculo.us/articles/2005/11/14/ajax-activity-indicators-with-rails-0-14-3"&gt;a great article&lt;/a&gt; on how to achieve a similar effect using an animated GIF image. You can achieve an even nicer effect by adding partials and &lt;a href="http://script.aculo.us/"&gt;Script.aculo.us&lt;/a&gt; effects.
&lt;/p&gt;&lt;p&gt;
First, make sure that the javascripts files are loaded by adding this to the head of your page:
&lt;/p&gt;
&lt;div class="typocode"&gt;&lt;table class="typocode_linenumber"&gt;&lt;tr&gt;&lt;td class="lineno"&gt;
&lt;pre&gt;
1
&lt;/pre&gt;
&lt;/td&gt;&lt;td width="100%"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;notextile&gt;&lt;span class="punct"&gt;&amp;lt;%=&lt;/span&gt;&lt;span class="string"&gt; javascript_include_tag :defaults %&amp;gt;&lt;/span&gt;&lt;/notextile&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;
This will force the default sets of javascripts files to load. These do include effects.js and application.js.
&lt;/p&gt;&lt;p&gt;
Next, create a file called application.js under public/javascripts if it doesn't already exists. Add this code:
&lt;/p&gt;
&lt;div class="typocode"&gt;&lt;table class="typocode_linenumber"&gt;&lt;tr&gt;&lt;td class="lineno"&gt;
&lt;pre&gt;
1
2
3
4
5
6
7
8
9
10
11
&lt;/pre&gt;
&lt;/td&gt;&lt;td width="100%"&gt;&lt;pre&gt;&lt;code class="typocode_javascript "&gt;&lt;notextile&gt;Ajax.Responders.register({
    onCreate: function() {
        if($('loading') &amp;amp;#38;&amp;amp; Ajax.activeRequestCount&amp;gt;0) {
            Effect.Appear('loading',{duration:0.5});
        }  
    },
    onComplete: function() {
        if($('loading') &amp;amp;&amp;amp; Ajax.activeRequestCount==0)
            Effect.Fade('loading', {duration:1.0});
    }
});&lt;/notextile&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;
Then create a partial called _loading.rhtml:
&lt;/p&gt;
&lt;div class="typocode"&gt;&lt;table class="typocode_linenumber"&gt;&lt;tr&gt;&lt;td class="lineno"&gt;
&lt;pre&gt;
1
2
3
&lt;/pre&gt;
&lt;/td&gt;&lt;td width="100%"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;&lt;notextile&gt;&amp;lt;div id=&amp;quot;loading&amp;quot; style=&amp;quot;display: none;&amp;quot; class=&amp;quot;loading&amp;quot;&amp;gt;
    &amp;lt;h2&amp;gt;&amp;lt;img src=&amp;quot;http://typo.fredjean.net/typo/images/load.gif&amp;quot;&amp;gt;&amp;amp;nbsp;Loading...&amp;amp;nbsp;&amp;lt;/h2&amp;gt;
&amp;lt;/div&amp;gt;&lt;/notextile&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;
I also added the following CSS to my application's stylesheet:
&lt;/p&gt;
&lt;div class="typocode"&gt;&lt;table class="typocode_linenumber"&gt;&lt;tr&gt;&lt;td class="lineno"&gt;
&lt;pre&gt;
1
2
3
4
5
6
7
8
&lt;/pre&gt;
&lt;/td&gt;&lt;td width="100%"&gt;&lt;pre&gt;&lt;code class="typocode_css "&gt;&lt;notextile&gt;.loading {
    background: rgb(250,250,250); 
    border: solid 2px; 
    vertical-align: middle; 
    text-align: center; 
    padding-left: 20px; 
    padding-right: 20px;
}&lt;/notextile&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;
I finally included the partial at the bottom of my layout:
&lt;/p&gt;
&lt;div class="typocode"&gt;&lt;table class="typocode_linenumber"&gt;&lt;tr&gt;&lt;td class="lineno"&gt;
&lt;pre&gt;
1
&lt;/pre&gt;
&lt;/td&gt;&lt;td width="100%"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;notextile&gt;&lt;span class="punct"&gt;&amp;lt;%=&lt;/span&gt;&lt;span class="string"&gt; render :partial &lt;/span&gt;&lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;loading&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="punct"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="string"&gt;&lt;/span&gt;&lt;/notextile&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;
From that point on, I got a "loading" indicator each time I clicked on a link created through the link_to_remote helper method. No need to go ahead and add the effects to each invocations.
&lt;/p&gt;&lt;p&gt;
-- Fred
&lt;/p&gt;





&lt;!-- technorati tags start --&gt;&lt;p style="text-align:right;font-size:10px;"&gt;Technorati Tags: &lt;a href="http://www.technorati.com/tag/Rails" rel="tag"&gt;Rails&lt;/a&gt;, &lt;a href="http://www.technorati.com/tag/Ruby" rel="tag"&gt;Ruby&lt;/a&gt;&lt;/p&gt;&lt;!-- technorati tags end --&gt;

</description>
      <pubDate>Mon, 20 Feb 2006 02:46:37 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:14613e940d99e38066ee673b9a1a6e09</guid>
      <author>fred@fredjean.net (Frederic Jean)</author>
      <link>http://blog.fredjean.net/articles/2006/02/20/better-than-google-activity-indicators-with-rails</link>
      <category>Ruby</category>
    </item>
    <item>
      <title>First Boulder-Denver Ruby Enthusiasts Meeting</title>
      <description>&lt;p&gt;
The Boulder-Denver Ruby Group had its first meet and greet last night at the Southern Sun Pub and Grill in South Boulder. The attendance was much higher than was expected, and the crowd quite noisy.
&lt;/p&gt;&lt;p&gt;
The group is going to start meeting in a more regular venue next month (&lt;a href="http://rubyforge.org/pipermail/bdrg-members/2006-January/000005.html"&gt;see this message in archives&lt;/a&gt;). It's certainly going to be an interesting group to interact with. I am glad that such a group is forming in the Denver area. I read many blog entries from people in Seattle and Portland boasting about their meetings.
&lt;/p&gt;&lt;p&gt;
A big theme was the &lt;a href="http://www.waterfall2006.com/"&gt;Waterfall 2006&lt;/a&gt; conference being planned for Niagara falls. Looks like I might have to skip that one though ;).
&lt;/p&gt;&lt;p&gt;
-- Fred
&lt;/p&gt;

</description>
      <pubDate>Mon, 20 Feb 2006 02:44:24 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:c81199aabe9371d66ab5164c31c4e9ac</guid>
      <author>fred@fredjean.net (Frederic Jean)</author>
      <link>http://blog.fredjean.net/articles/2006/02/20/first-boulder-denver-ruby-enthusiasts-meeting</link>
      <category>Ruby</category>
    </item>
    <item>
      <title>Geocoding, REXML and the Missing Method</title>
      <description>&lt;a href="http://www.davisworld.org/"&gt;Scott Davis&lt;/a&gt; introduces the audience of his &lt;a href="http://www.davisworld.org/presentations/realWorldWebMapping.zip"&gt;Real World Mapping presentation&lt;/a&gt; to the &lt;a href="http://geocoder.us/"&gt;geocoder.us&lt;/a&gt; web site, which allows anyone to transform US based addresses to longitude and latitude coordinates. There are many options beyond the web based UI, including SOAP, XML-RPC, and RESTful web services. We will be using the RESTful RDF service for this demonstration.&lt;/p&gt;

&lt;p&gt;The first step is to find (and URL encode) an address. For this demonstration, we will be using "Mission &amp; Valencia Sts, San Francisco CA" as the address. You will see the following XML document if you point a browser at &lt;a href="http://rpc.geocoder.us/service/rest?address=Mission+%26+Valencia+Sts%2C+San+Francisco+CA"&gt;http://rpc.geocoder.us/service/rest?address=Mission+%26+Valencia+Sts%2C+San+Francisco+CA&lt;/a&gt;:&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;table class="typocode_linenumber"&gt;&lt;tr&gt;&lt;td class="lineno"&gt;
&lt;pre&gt;
1
2
3
4
5
6
7
&lt;/pre&gt;
&lt;/td&gt;&lt;td width="100%"&gt;&lt;pre&gt;&lt;code class="typocode_xml "&gt;&lt;notextile&gt;&lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;rdf&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;RDF&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;geo&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;Point&lt;/span&gt; &lt;span class="namespace"&gt;rdf&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="attribute"&gt;nodeID&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;aid06646235&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
    &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;dc&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;description&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;Mission St and Valencia St, San Francisco CA 94110&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;dc&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;description&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;geo&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;long&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;-122.420082&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;geo&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;long&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="namespace"&gt;geo&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;lat&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;37.74533&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;geo&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;lat&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;geo&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;Point&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="namespace"&gt;rdf&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;&lt;span class="tag"&gt;RDF&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;&lt;/notextile&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This is technically an RDF document. It can still be parsed as a regular XML document though. Let's define a Location class:&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;table class="typocode_linenumber"&gt;&lt;tr&gt;&lt;td class="lineno"&gt;
&lt;pre&gt;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
&lt;/pre&gt;
&lt;/td&gt;&lt;td width="100%"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;notextile&gt;&lt;span class="ident"&gt;require&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;rexml/document&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;
&lt;span class="ident"&gt;require&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;net/http&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;

&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;Location&lt;/span&gt;
  &lt;span class="ident"&gt;require&lt;/span&gt; &lt;span class="constant"&gt;REXML&lt;/span&gt;

  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;initialize&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;address&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
    &lt;span class="ident"&gt;geocoder&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;Net&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;HTTP&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;new&lt;/span&gt;&lt;span class="punct"&gt;(&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;rpc.geocode.us&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;,&lt;/span&gt; &lt;span class="number"&gt;80&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
    &lt;span class="ident"&gt;query&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;/service/rest?address=&lt;span class="expr"&gt;#{address}&lt;/span&gt;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
    &lt;span class="ident"&gt;query&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;gsub!&lt;/span&gt;&lt;span class="punct"&gt;(/&lt;/span&gt;&lt;span class="regex"&gt; &lt;/span&gt;&lt;span class="punct"&gt;/,&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;+&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;)&lt;/span&gt;
    &lt;span class="attribute"&gt;@entry&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;Document&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;new&lt;/span&gt; &lt;span class="ident"&gt;geocoder&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;get&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;query&lt;/span&gt;&lt;span class="punct"&gt;).&lt;/span&gt;&lt;span class="ident"&gt;body&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;
  
  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;long&lt;/span&gt;
    &lt;span class="attribute"&gt;@entry&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;elements&lt;/span&gt;&lt;span class="punct"&gt;[&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;//geo:long&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;].&lt;/span&gt;&lt;span class="ident"&gt;text&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;
  
  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;lat&lt;/span&gt;
    &lt;span class="attribute"&gt;@entry&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;elements&lt;/span&gt;&lt;span class="punct"&gt;[&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;//geo:lat&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;].&lt;/span&gt;&lt;span class="ident"&gt;text&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;
  
  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;desc&lt;/span&gt;
    &lt;span class="attribute"&gt;@entry&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;elements&lt;/span&gt;&lt;span class="punct"&gt;[&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;//dc:description&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;].&lt;/span&gt;&lt;span class="ident"&gt;text&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/notextile&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;From there, you can create a Location object and get the coordinates:&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;table class="typocode_linenumber"&gt;&lt;tr&gt;&lt;td class="lineno"&gt;
&lt;pre&gt;
1
2
3
&lt;/pre&gt;
&lt;/td&gt;&lt;td width="100%"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;notextile&gt;&lt;span class="ident"&gt;location&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;Location&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;new&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Mission St and Valencia St, San Francisco CA 94110&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
&lt;span class="ident"&gt;location&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;lat&lt;/span&gt;
&lt;span class="ident"&gt;location&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;long&lt;/span&gt;&lt;/notextile&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;From there, you can use the location in a mapping application (such as a Google Maps mashup for example...)&lt;/p&gt; 

</description>
      <pubDate>Mon, 20 Feb 2006 02:35:48 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:bf5d3c0e400793148313cae5d8761bfb</guid>
      <author>fred@fredjean.net (Frederic Jean)</author>
      <link>http://blog.fredjean.net/articles/2006/02/20/geocoding-rexml-and-the-missing-method</link>
      <category>Ruby</category>
    </item>
  </channel>
</rss>
