<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml"
>

<channel>
	<title>High Earth Orbit &#187; Ruby</title>
	<atom:link href="http://highearthorbit.com/category/technology/programming/ruby/feed/" rel="self" type="application/rss+xml" />
	<link>http://highearthorbit.com</link>
	<description>Transmitting ideas, observations, and images from 42,000 km.</description>
	<lastBuildDate>Thu, 27 Oct 2011 17:23:11 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9-rare</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Bug in open-uri when dealing with multiple headers</title>
		<link>http://highearthorbit.com/bug-in-nethttp-when-dealing-with-multiple-headers/</link>
		<comments>http://highearthorbit.com/bug-in-nethttp-when-dealing-with-multiple-headers/#comments</comments>
		<pubDate>Tue, 14 Aug 2007 15:45:56 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://highearthorbit.com/bug-in-nethttp-when-dealing-with-multiple-headers/</guid>
		<description><![CDATA[I just discovered a bug in Ruby&#8217;s open-uri library, caused by the Net::HTTP library, or at best really annoying behavior that will break when you try and use it. The problem lies in dealing with an HTTP request that returns multiple values for a field. This forum topic discusses that having multiple instances of a [...]]]></description>
			<content:encoded><![CDATA[<p>I just discovered a bug in Ruby&#8217;s open-uri library, caused by the Net::HTTP library, or at best really annoying behavior that <em>will break</em> when you try and use it. The problem lies in dealing with an HTTP request that returns multiple values for a field. <a href="http://rubyforge.org/tracker/?func=detail&amp;aid=12775&amp;group_id=1306&amp;atid=5145" title="RubyForge: Multiple x-forwarded-for header fields">This forum topic discusses</a> that having multiple instances of a field is valid in HTTP1.1 (RFC2616). </p>
<p>So when you use Net::HTTP to fetch a document like this, it will create an array for every field, holding each value found for the field. That&#8217;s great. However, in open-uri#last_modified then gets this array and joins the values together to get a single string. </p>
<p>The example I ran into is the <em>Last-Modified</em> field. Given HTTP headers like this:</p>
<pre>
HTTP/1.1 200 OK
Server: Undisclosed-Webserver/0.1
Date: Tue, 14 Aug 2007 15:03:29 GMT
Last-modified: Tue, 14 Aug 2007 15:03:29 GMT
Content-type: application/vnd.google-earth.kml+xml
Last-modified: Wed, 08 Aug 2007 18:34:55 GMT
Connection: close
</pre>
<p>And then calling <code>response.each_header {|f,v| puts "#{f}: #{v}"}</code> will result in <code>Last-Modified: "Tue, 14 Aug 2007 15:21:22 GMT, Wed, 08 Aug 2007 18:34:55 GMT"</code>. Go ahead and try throwing <code>Time.httpdate</code> at that. You&#8217;ll get <code>ArgumentError: not RFC 2616 compliant date:</code>. </p>
<p>To simply recreate this bug, try the following ruby code:</p>
<pre>
require 'open-uri'
res = open("http://popsci.com/popsci/kml/popsci_future_environment.kml")
res.last_modified
</pre>
<p>A simple solution, or workaround, is to just get the hash and deal with it yourself: <code>response.to_hash.each {|f,v| puts "#{f}: #{v}"} # => last-modified: "Tue, 14 Aug 2007 15:21:22 GMT</code> </p>
<p>I&#8217;m not going to mention any names on this particular offending party that was silly to include 2 Last-Modified dates, but <a href="http://www.popsci.com/" title="Popular Science">you know who you are</a>. </p>
]]></content:encoded>
			<wfw:commentRss>http://highearthorbit.com/bug-in-nethttp-when-dealing-with-multiple-headers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>open-uri and can&#8217;t convert Hash into String</title>
		<link>http://highearthorbit.com/open-uri-and-cant-convert-hash-into-string/</link>
		<comments>http://highearthorbit.com/open-uri-and-cant-convert-hash-into-string/#comments</comments>
		<pubDate>Mon, 19 Mar 2007 04:03:06 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://highearthorbit.com/open-uri-and-cant-convert-hash-into-string/</guid>
		<description><![CDATA[I&#8217;m posting this in hopes that search engines grab it and put it at the top of their list when other poor soul&#8217;s run into this problem.
If you&#8217;re trying to grab a web resource using Open-URI, and you are using basic authentication (username/password) then you&#8217;ll need to make sure to require 'open-uri' or you&#8217;ll get:

open("http://example.com/site", [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m posting this in hopes that search engines grab it and put it at the top of their list when other poor soul&#8217;s run into this problem.</p>
<p>If you&#8217;re trying to grab a web resource using <a href="http://www.ruby-doc.org/stdlib/libdoc/open-uri/rdoc/classes/OpenURI.html">Open-URI</a>, and you are using basic authentication (username/password) then you&#8217;ll need to make sure to <code>require 'open-uri'</code> or you&#8217;ll get:</p>
<pre>
open("http://example.com/site", :http_basic_authentication => ["username", "password"])
TypeError: can't convert Hash into String
</pre>
<p>Of course, then you toss some yummy <a href="http://code.whytheluckystiff.net/hpricot/" title="Hpricot">Hpricot</a> into the mix for parsing/scraping the good bits of the HTML.</p>
]]></content:encoded>
			<wfw:commentRss>http://highearthorbit.com/open-uri-and-cant-convert-hash-into-string/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Sunlight Datakit &#8211; Congress in your App</title>
		<link>http://highearthorbit.com/sunlight-datakit-congress-in-your-app/</link>
		<comments>http://highearthorbit.com/sunlight-datakit-congress-in-your-app/#comments</comments>
		<pubDate>Wed, 28 Feb 2007 16:09:24 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Mashup]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://highearthorbit.com/sunlight-datakit-congress-in-your-app/</guid>
		<description><![CDATA[Sunlight Labs has released a public API, their Sunlight Datakit. It&#8217;s a straight-forward, simple API for getting access to their Civic data, like Congressional Representatives, zipcodes, timezones, and some geographic information.

There is some basic information about elected representatives that makes politico mashups easier: the ability to tie a name to a state, the district and [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://sunlightlabs.com" title="Sunlight Labs homepage">Sunlight Labs</a> has released a public API, their <a href="http://sunlightlabs.com/datakit/" title="Sunlight Labs Datakit">Sunlight Datakit</a>. It&#8217;s a straight-forward, simple API for getting access to their Civic data, like Congressional Representatives, zipcodes, timezones, and some geographic information.</p>
<blockquote><p>
There is some basic information about elected representatives that makes politico mashups easier: the ability to tie a name to a state, the district and zip codes that they represent, their office telephone number, and so on. We have put together a simple labs &#8220;datakit&#8221; that does this for us, drawing from several publicaly available data sources. We are making this fully available and have provided a fully documented API for the methods we have developed for those sources. Find out about the datakit here.
</p></blockquote>
<p>Of course, any API needs a nice little client to tie it into your applications. Here is my Ruby client. It&#8217;s very simple, because is uses the fallback <code>method_missing</code> to handle any function passed to the class. This also allows the class to be extended by implementing specific methods if more processing of the response is needed.</p>
<pre><span class="ident">require</span> <span class="punct">'</span><span class="string">open-uri</span><span class="punct">'</span>
<span class="ident">require</span> <span class="punct">'</span><span class="string">rexml/document</span><span class="punct">'</span>
<span class="ident">require</span> <span class="punct">'</span><span class="string">cgi</span><span class="punct">'</span>
<span class="constant">SUNLIGHT_HOST</span> <span class="punct">=</span> <span class="punct">'</span><span class="string">http://sunlightlabs.com/datakit/</span><span class="punct">'</span>

<span class="keyword">class </span><span class="class">Sunlight</span>
  <span class="keyword">def </span><span class="method">self.method_missing</span><span class="punct">(</span><span class="ident">service_method</span><span class="punct">,</span> <span class="punct">*</span><span class="ident">args</span><span class="punct">)</span>
    <span class="ident">params</span> <span class="punct">=</span> <span class="ident">args</span><span class="punct">[</span><span class="number">0</span><span class="punct">].</span><span class="ident">collect</span> <span class="punct">{|</span><span class="ident">k</span><span class="punct">,</span><span class="ident">v</span><span class="punct">|</span> <span class="constant">CGI</span><span class="punct">.</span><span class="ident">escape</span><span class="punct">(</span><span class="ident">k</span><span class="punct">.</span><span class="ident">to_s</span><span class="punct">)</span> <span class="punct">+</span> <span class="punct">'</span><span class="string">=</span><span class="punct">'</span> <span class="punct">+</span> <span class="constant">CGI</span><span class="punct">.</span><span class="ident">escape</span><span class="punct">(</span><span class="ident">v</span><span class="punct">.</span><span class="ident">to_s</span><span class="punct">)}.</span><span class="ident">join</span><span class="punct">('</span><span class="string">&amp;</span><span class="punct">')</span>
    <span class="ident">url</span> <span class="punct">=</span> <span class="constant">SUNLIGHT_HOST</span> <span class="punct">+</span> <span class="ident">service_method</span><span class="punct">.</span><span class="ident">to_s</span> <span class="punct">+</span> <span class="punct">&quot;</span><span class="string">?</span><span class="punct">&quot;</span> <span class="punct">+</span> <span class="ident">params</span>
    <span class="ident">open</span><span class="punct">(</span><span class="ident">url</span><span class="punct">).</span><span class="ident">read</span><span class="punct">.</span><span class="ident">split</span><span class="punct">(&quot;</span><span class="string">|</span><span class="punct">&quot;)</span>
  <span class="keyword">end</span>
<span class="keyword">end</span>

<span class="ident">resp</span> <span class="punct">=</span> <span class="constant">Sunlight</span><span class="punct">.</span><span class="ident">getDistrictFromZip5</span><span class="punct">({</span><span class="symbol">:zip</span> <span class="punct">=&gt;</span> <span class="number">20740</span><span class="punct">})</span>
<span class="ident">puts</span> <span class="ident">resp</span><span class="punct">.</span><span class="ident">inspect</span>
  <span class="comment"># MD:5</span>
  <span class="comment"># MD:4</span>

<span class="ident">resp</span> <span class="punct">=</span> <span class="constant">Sunlight</span><span class="punct">.</span><span class="ident">getRepresentativeNameFromCityState</span><span class="punct">({</span><span class="symbol">:city</span> <span class="punct">=&gt;</span> <span class="punct">'</span><span class="string">Detroit</span><span class="punct">',</span> <span class="symbol">:state</span> <span class="punct">=&gt;</span> <span class="punct">&quot;</span><span class="string">MI</span><span class="punct">&quot;})</span>
<span class="ident">puts</span> <span class="ident">resp</span><span class="punct">.</span><span class="ident">inspect</span>
  <span class="comment"># Kilpatrick, Carolyn C.</span>
  <span class="comment"># Conyers, John  Jr.</span>
  <span class="comment"># Levin, Sander M.</span>
  <span class="comment"># McCotter, Thaddeus G.</span>
  <span class="comment"># Dingell, John D.</span>
</pre>
<p>The Sunlight Datakit currently offers the following functions. Check out the <a href="http://sunlightlabs.com/datakit/" title="Sunlight labs datakit">documentation</a> for information on the parameters and returned values. </p>
<ul>
<li>getDistrictFromZip5</li>
<li>getStateFromZip5</li>
<li>getDistrictFromZip9</li>
<li>getStateFromZip9.php</li>
<li>getRepresentativeNameFromDistrict</li>
<li>getRepresentativePhoneNumberFromDistrict</li>
<li>getRepresentativeRoomNumberFromDistrict</li>
<li>getCityFromZip5</li>
<li>getCityStateFromZip5</li>
<li>getLatitudeFromCityState</li>
<li>getLongitudeFromCityState</li>
<li>getZipCodesFromCityState</li>
<li>getTimezoneFromCityState</li>
<li>getRepresentativeNameFromCityState</li>
<li>getRepresentativeNameFromState</li>
<li>getStateAbbreviationFromStateName</li>
<li>getStateNameFromStateAbbreviation</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://highearthorbit.com/sunlight-datakit-congress-in-your-app/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ruby &amp; Python Bindings officially part of Cocoa</title>
		<link>http://highearthorbit.com/ruby-python-bindings-officially-part-of-cocoa/</link>
		<comments>http://highearthorbit.com/ruby-python-bindings-officially-part-of-cocoa/#comments</comments>
		<pubDate>Wed, 13 Dec 2006 19:47:56 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://highearthorbit.com/ruby-python-bindings-officially-part-of-cocoa/</guid>
		<description><![CDATA[Leopard will officially support Ruby &#038; Python bindings in Cocoa which is terrific news. I&#8217;m a big fan of interpreted languages when appropriate.
Of course, there are about a dozen other very cool technologies for developers in Leopard that should really make application development, faster, better, and more fun. I&#8217;ve gotten a chance to play some [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://developer.apple.com/leopard/overview/apptech.html">Leopard will officially support Ruby &#038; Python bindings in Cocoa</a> which is terrific news. I&#8217;m a big fan of interpreted languages when appropriate.</p>
<p>Of course, there are about a dozen other very cool technologies for developers in Leopard that should really make application development, faster, better, and more fun. I&#8217;ve gotten a chance to play some with Leopard previews, and the actual User-facing improvements are minimal. But what users will eventually get will be lots of better third-party applications. (via <a href="http://theocacao.com/document.page/373" title="Theocacoa">Theocacoa</a> and <a href="http://michael-mccracken.net/wp/?p=79">Michael McCracken</a>)</p>
<p>It&#8217;s great to see how much effort is going into not just creating slicker UI&#8217;s, but better supporting the people that really make or break an operating environment &#8211; developers. Microsoft has had a lot of developer support for quite awhile, and I constantly hear about various .NET meetings/presentations/technologies etc. Apple really kicked it off by releasing XCode for free (no &#8216;professional versions&#8217; need apply) and then having terrific Developer Documentation and examples. </p>
<p>The Leopard developer page makes some odd claims:</p>
<blockquote><p>
Mac users love to exchange quick messages, have video conferences, and collaborate on each other&#8217;s desktops across the network.
</p></blockquote>
<p>um&#8230; right, ok. I just <em>love</em> collaborating on your desktop. Anyways, I can&#8217;t wait to dive in and start developing on Leopard. </p>
<p class="tags">Tags: <a href="http://technorati.com/tag/macosx" title="See the Technorati tag page for 'macosx'." rel="tag">macosx</a>, <a href="http://technorati.com/tag/apple" title="See the Technorati tag page for 'apple'." rel="tag">apple</a>, <a href="http://technorati.com/tag/leopard" title="See the Technorati tag page for 'leopard'." rel="tag">leopard</a>, <a href="http://technorati.com/tag/ruby" title="See the Technorati tag page for 'ruby'." rel="tag">ruby</a>, <a href="http://technorati.com/tag/python" title="See the Technorati tag page for 'python'." rel="tag">python</a>, <a href="http://technorati.com/tag/cocoa" title="See the Technorati tag page for 'cocoa'." rel="tag">cocoa</a>, <a href="http://technorati.com/tag/bindings" title="See the Technorati tag page for 'bindings'." rel="tag">bindings</a>, <a href="http://technorati.com/tag/objective-c" title="See the Technorati tag page for 'objective-c'." rel="tag">objective-c</a>, <a href="http://technorati.com/tag/programming" title="See the Technorati tag page for 'programming'." rel="tag">programming</a>, <a href="http://technorati.com/tag/microsoft" title="See the Technorati tag page for 'microsoft'." rel="tag">microsoft</a>, <a href="http://technorati.com/tag/.net" title="See the Technorati tag page for '.net'." rel="tag">.net</a>, <a href="http://technorati.com/tag/theocacoa" title="See the Technorati tag page for 'theocacoa'." rel="tag">theocacoa</a>, <a href="http://technorati.com/tag/michaelmccracken" title="See the Technorati tag page for 'michaelmccracken'." rel="tag">michaelmccracken</a></p>]]></content:encoded>
			<wfw:commentRss>http://highearthorbit.com/ruby-python-bindings-officially-part-of-cocoa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby Hardware</title>
		<link>http://highearthorbit.com/ruby-hardware-2/</link>
		<comments>http://highearthorbit.com/ruby-hardware-2/#comments</comments>
		<pubDate>Fri, 08 Dec 2006 16:19:17 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Gadgets]]></category>
		<category><![CDATA[Nokia]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Roomba]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://highearthorbit.com/ruby-hardware-2/</guid>
		<description><![CDATA[On Wednesday at the SouthEast Michigan Ruby Brigade I gave a &#8216;lightning talk&#8217; on Ruby &#038; Hardware. It is a quick succession of slides (written using S5) on some of the cool hardware devices you can control with Ruby, or hardware you can control your computer with. 
It has includes examples and links to using [...]]]></description>
			<content:encoded><![CDATA[<p>On Wednesday at the <a href="http://rubymi.org" title="SouthEast Michigan Ruby Brigade">SouthEast Michigan Ruby Brigade</a> I gave a &#8216;lightning talk&#8217; on <a href="http://code.highearthorbit.com/presentations/RubyHardware/RubyHardware.html">Ruby &#038; Hardware</a>. It is a quick succession of slides (written using <a href="http://meyerweb.com/eric/tools/s5/" title="Eric Meyer's S5 homepage">S5</a>) on some of the cool hardware devices you can control with Ruby, or hardware you can control your computer with. </p>
<p>It has includes examples and links to using Ruby with:</p>
<ul>
<li>NabazTag</li>
<li>Symbian Mobile Phones</li>
<li>Nokia 770</li>
<li>Roomba vacuum cleaners</li>
<li>Apple Remotes (the kind you get with your MacBook/MacMini)</li>
<li>SlimDevices SqueezeBox and SlimServer</li>
<li>Lego Mindstorms NXT</li>
</ul>
<p>There are definitely more devices out there that can or <em>should</em> work with Ruby. Given <a href="http://ruby-serialport.rubyforge.org/" title="ruby-serialport homepage">ruby-serialport</a> it&#8217;s possible to control just about anything. </p>
<p class="tags">Tags: <a href="http://technorati.com/tag/ruby" title="See the Technorati tag page for 'ruby'." rel="tag">ruby</a>, <a href="http://technorati.com/tag/programming" title="See the Technorati tag page for 'programming'." rel="tag">programming</a>, <a href="http://technorati.com/tag/roomba" title="See the Technorati tag page for 'roomba'." rel="tag">roomba</a>, <a href="http://technorati.com/tag/nabaztag" title="See the Technorati tag page for 'nabaztag'." rel="tag">nabaztag</a>, <a href="http://technorati.com/tag/symbian" title="See the Technorati tag page for 'symbian'." rel="tag">symbian</a>, <a href="http://technorati.com/tag/nokia770" title="See the Technorati tag page for 'nokia770'." rel="tag">nokia770</a>, <a href="http://technorati.com/tag/apple" title="See the Technorati tag page for 'apple'." rel="tag">apple</a>, <a href="http://technorati.com/tag/squeezebox" title="See the Technorati tag page for 'squeezebox'." rel="tag">squeezebox</a>, <a href="http://technorati.com/tag/slimserver" title="See the Technorati tag page for 'slimserver'." rel="tag">slimserver</a>, <a href="http://technorati.com/tag/slimdevices" title="See the Technorati tag page for 'slimdevices'." rel="tag">slimdevices</a>, <a href="http://technorati.com/tag/brigade" title="See the Technorati tag page for 'brigade'." rel="tag">brigade</a>, <a href="http://technorati.com/tag/rubymi" title="See the Technorati tag page for 'rubymi'." rel="tag">rubymi</a>, <a href="http://technorati.com/tag/rubybrigade" title="See the Technorati tag page for 'rubybrigade'." rel="tag">rubybrigade</a></p>]]></content:encoded>
			<wfw:commentRss>http://highearthorbit.com/ruby-hardware-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tesly is good Testing</title>
		<link>http://highearthorbit.com/tesly-is-good-testing/</link>
		<comments>http://highearthorbit.com/tesly-is-good-testing/#comments</comments>
		<pubDate>Wed, 11 Oct 2006 04:13:56 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://highearthorbit.com/tesly-is-good-testing/</guid>
		<description><![CDATA[Ben Curtis recently released Tesly Jr., is a great web service that runs through your Rails tests, formats the output, displays them, and allows you to share them with other people. It installs as a plugin in your Rails application. Whenever you run rake to test your app, it uploads the results automatically to the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://highearthorbit.com/wp-content/uploads/2006/10/tesly.png" title="Telsy Jr. Results" target="_new"><img src="http://highearthorbit.com/wp-content/uploads/2006/10/tesly.thumbnail.png" alt="Telsy Jr. Results" align="right" hspace="5px" vspace="5px"/></a><a href="http://www.bencurtis.com/archives/2006/10/html-test-reporter-for-rails/" title="Ben Curtis' Blog">Ben Curtis</a> recently released <a href="http://junior.tesly.com/ " title="Tesly Jr.">Tesly Jr.</a>, is a great web service that runs through your Rails tests, formats the output, displays them, and allows you to share them with other people. It installs as a plugin in your Rails application. Whenever you run <code>rake</code> to test your app, it uploads the results automatically to the Tesly Jr. server.</p>
<p>Using Tesly Jr., its very easy to keep your development team up to date with the status of the project. Combine this with <a href="http://blog.testingrails.com/2006/9/4/running-tests-on-deploy-with-capistrano" title="Testing Rails blog">runing tests on deploy</a> with Capistrano (via <a href="http://weblog.jamisbuck.org/2006/10/5/running-tests-on-deploy" title="Jamis Buck Weblog">Jamis Buck</a>) and you have a that much better integration of testing into your development and release cycle. </p>
<p>Tesly Jr. is free when using the hosted service, and available for just $24 if you want your own copy to run on your own systems. </p>
<p class="tags">Tags: <a href="http://technorati.com/tag/rails" title="See the Technorati tag page for 'rails'." rel="tag">rails</a>, <a href="http://technorati.com/tag/ruby" title="See the Technorati tag page for 'ruby'." rel="tag">ruby</a>, <a href="http://technorati.com/tag/programming" title="See the Technorati tag page for 'programming'." rel="tag">programming</a>, <a href="http://technorati.com/tag/rubyonrails" title="See the Technorati tag page for 'rubyonrails'." rel="tag">rubyonrails</a>, <a href="http://technorati.com/tag/teslyjr" title="See the Technorati tag page for 'teslyjr'." rel="tag">teslyjr</a>, <a href="http://technorati.com/tag/bencurtis" title="See the Technorati tag page for 'bencurtis'." rel="tag">bencurtis</a>, <a href="http://technorati.com/tag/testing" title="See the Technorati tag page for 'testing'." rel="tag">testing</a>, <a href="http://technorati.com/tag/capistrano" title="See the Technorati tag page for 'capistrano'." rel="tag">capistrano</a>, <a href="http://technorati.com/tag/jamisbuck" title="See the Technorati tag page for 'jamisbuck'." rel="tag">jamisbuck</a></p>]]></content:encoded>
			<wfw:commentRss>http://highearthorbit.com/tesly-is-good-testing/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ruby Hardware</title>
		<link>http://highearthorbit.com/ruby-hardware/</link>
		<comments>http://highearthorbit.com/ruby-hardware/#comments</comments>
		<pubDate>Wed, 04 Oct 2006 03:08:48 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Presentation]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://highearthorbit.com/ruby-hardware/</guid>
		<description><![CDATA[I put together a presentation that didn&#8217;t get time at the first AnnArbor.rb meeting. The topic is &#8220;Ruby &#038; Hardware&#8221; and is a quick rundown of some cool devices that can run (or be interfaced by) Ruby, such as NabazTag, SqueezeBox, Nokia 770. They&#8217;re all at various levels of support and functionality, but you can [...]]]></description>
			<content:encoded><![CDATA[<p>I put together a presentation that didn&#8217;t get time at the first <a href="http://rubymi.org" title="RubyMI.org homepage">AnnArbor.rb</a> meeting. The topic is &#8220;Ruby &#038; Hardware&#8221; and is a quick rundown of some cool devices that can run (or be interfaced by) Ruby, such as NabazTag, SqueezeBox, Nokia 770. They&#8217;re all at various levels of support and functionality, but you can run Ruby on all of them. </p>
<p>Check out the presentation here: <a href="http://code.highearthorbit.com/presentations/RubyHardware/" title="Ruby &#038; Hardware presentation" rel="me">Ruby &#038; Hardware</a>. </p>
<p>I&#8217;ll be talking about them at the November AnnArbor.rb/<a href="http://rubymi.org" title="RubyMI.org homepage">RubyMI</a> meeting if you want to come by. </p>
<p class="tags">Tags: <a href="http://technorati.com/tag/ruby" title="See the Technorati tag page for 'ruby'." rel="tag">ruby</a>, <a href="http://technorati.com/tag/gadgets" title="See the Technorati tag page for 'gadgets'." rel="tag">gadgets</a>, <a href="http://technorati.com/tag/hardware" title="See the Technorati tag page for 'hardware'." rel="tag">hardware</a>, <a href="http://technorati.com/tag/presentation" title="See the Technorati tag page for 'presentation'." rel="tag">presentation</a>, <a href="http://technorati.com/tag/nokia" title="See the Technorati tag page for 'nokia'." rel="tag">nokia</a>, <a href="http://technorati.com/tag/slimserver" title="See the Technorati tag page for 'slimserver'." rel="tag">slimserver</a>, <a href="http://technorati.com/tag/squeezebox" title="See the Technorati tag page for 'squeezebox'." rel="tag">squeezebox</a>, <a href="http://technorati.com/tag/nabaztag" title="See the Technorati tag page for 'nabaztag'." rel="tag">nabaztag</a>, <a href="http://technorati.com/tag/roomba" title="See the Technorati tag page for 'roomba'." rel="tag">roomba</a>, <a href="http://technorati.com/tag/michigan" title="See the Technorati tag page for 'michigan'." rel="tag">michigan</a></p>]]></content:encoded>
			<wfw:commentRss>http://highearthorbit.com/ruby-hardware/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>42.291599 -83.712446</georss:point>
	</item>
		<item>
		<title>Writing Microformats</title>
		<link>http://highearthorbit.com/writing-microformats/</link>
		<comments>http://highearthorbit.com/writing-microformats/#comments</comments>
		<pubDate>Thu, 28 Sep 2006 21:08:51 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[microformats]]></category>

		<guid isPermaLink="false">http://highearthorbit.com/writing-microformats/</guid>
		<description><![CDATA[Besides consuming Microformats &#8211; it&#8217;s useful to know how to produce them. Assaf Arkin has extracted a  Microformat Helper from his scrAPI plugin. It supports hAtom, basic hCard, and the datetime design pattern currently &#8211; and should be easy to add some more microformats. Check out his Microformat Helper Cheatsheet if you&#8217;re addicted to [...]]]></description>
			<content:encoded><![CDATA[<p>Besides consuming Microformats &#8211; it&#8217;s useful to know how to produce them. Assaf Arkin has extracted a  <a href='http://www.agilewebdevelopment.com/plugins/microformat_helper' title='Rails Microformat Helper'>Microformat Helper</a> from his scrAPI plugin. It supports hAtom, basic hCard, and the datetime design pattern currently &#8211; and should be easy to add some more microformats. Check out his <a href="http://blog.labnotes.org/?s=microformats">Microformat Helper Cheatsheet</a> if you&#8217;re addicted to that sort of thing. </p>
<p>Out of the Ruby realm, BlogHelper has a good set of tools and howtos for <a href="http://bloghelper.is-there.net/using-microformats-in-wordpress/" title="BlogHelper blog">Using Microformats in WordPress</a>.</p>
<p class="tags">Tags: <a href="http://technorati.com/tag/ruby" title="See the Technorati tag page for 'ruby'." rel="tag">ruby</a>, <a href="http://technorati.com/tag/microformatsstandards" title="See the Technorati tag page for 'microformatsstandards'." rel="tag">microformatsstandards</a>, <a href="http://technorati.com/tag/" title="See the Technorati tag page for ''." rel="tag"></a>, <a href="http://technorati.com/tag/hatom" title="See the Technorati tag page for 'hatom'." rel="tag">hatom</a>, <a href="http://technorati.com/tag/assafarkin" title="See the Technorati tag page for 'assafarkin'." rel="tag">assafarkin</a>, <a href="http://technorati.com/tag/cheatsheet" title="See the Technorati tag page for 'cheatsheet'." rel="tag">cheatsheet</a>, <a href="http://technorati.com/tag/wordpress" title="See the Technorati tag page for 'wordpress'." rel="tag">wordpress</a>, <a href="http://technorati.com/tag/bloghelper" title="See the Technorati tag page for 'bloghelper'." rel="tag">bloghelper</a></p>]]></content:encoded>
			<wfw:commentRss>http://highearthorbit.com/writing-microformats/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Yahoo! does Ruby!</title>
		<link>http://highearthorbit.com/yahoo-does-ruby/</link>
		<comments>http://highearthorbit.com/yahoo-does-ruby/#comments</comments>
		<pubDate>Sat, 23 Sep 2006 23:57:26 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://highearthorbit.com/yahoo-does-ruby/</guid>
		<description><![CDATA[Yahoo!, has an addition to their quickly growing Developer Network, the Yahoo Developer Network: Ruby Center. (via  RubyBlog.de)
Yahoo has really impressed me with their change from &#8220;annoying portal with too many links&#8221; to &#8220;doing lots of cool stuff and telling people how to use it too&#8221;. Their developer network is a great resource for [...]]]></description>
			<content:encoded><![CDATA[<p>Yahoo!, has an addition to their quickly growing Developer Network, the <a href="http://developer.yahoo.com/ruby/" title="Yahoo Developer Center for Ruby">Yahoo Developer Network: Ruby Center</a>. (via <a href="http://rubyblog.de/index.php/2006/09/22/yahoo-eroffnet-ruby-developer-center/" title="RubyBlog.de"> RubyBlog.de</a>)</p>
<p>Yahoo has really impressed me with their change from &#8220;annoying portal with too many links&#8221; to &#8220;doing lots of cool stuff and telling people how to use it too&#8221;. Their developer network is a great resource for both just learning about a <a href="http://developer.yahoo.com/python/" title="Yahoo Developer Network: Python Center">language</a>/<a href="http://developer.yahoo.com/yui/" title="Yahoo User Interface library">tool</a>/<a href="http://developer.yahoo.com/ypatterns/" title="Yahoo design patterns">design pattern</a>, as well as how to leverage really deep and useful Yahoo resources within your own application. </p>
<p>Providing these resources is definitely in their own interests, such as <a href="http://developer.yahoo.com/ruby/ruby-cache.html" title="Yahoo Ruby: Caching">Cache Yahoo! Web Service Calls using Ruby</a>, but is also just a great service to the community. Their <a href="http://gallery.yahoo.com/" title="Yahoo Gallery">Gallery</a> is also a good place for interesting sites and project ideas. </p>
<p class="tags">Tags: <a href="http://technorati.com/tag/ruby" title="See the Technorati tag page for 'ruby'." rel="tag">ruby</a>, <a href="http://technorati.com/tag/yahoo" title="See the Technorati tag page for 'yahoo'." rel="tag">yahoo</a>, <a href="http://technorati.com/tag/programming" title="See the Technorati tag page for 'programming'." rel="tag">programming</a></p>]]></content:encoded>
			<wfw:commentRss>http://highearthorbit.com/yahoo-does-ruby/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Converting table-based Calendars to hCalendar</title>
		<link>http://highearthorbit.com/converting-table-based-calendars-to-hcalendar/</link>
		<comments>http://highearthorbit.com/converting-table-based-calendars-to-hcalendar/#comments</comments>
		<pubDate>Thu, 07 Sep 2006 04:06:22 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[FOSS4G]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://highearthorbit.com/converting-table-based-calendars-to-hcalendar/</guid>
		<description><![CDATA[I am looking over the FOSS4G Schedule of sessions. It&#8217;s all table based, and it&#8217;s somewhat difficult to find specific tracks, rooms, etc. So I took what was the table-based, non-semantic, calendar and converted it into a much more useful hCalendar output, which can be easily translated to iCal for your subscription fun using Brian [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://highearthorbit.com/wp-content/uploads/2006/09/foss4g_ical.png" title="Zoom into FOSS4G Calendar in iCal"><img src="http://highearthorbit.com/wp-content/uploads/2006/09/foss4g_ical.thumbnail.png" alt="FOSS4G Calendar in iCal" align='right' hspace='5px' vspace='5px'/></a>I am looking over the <a href='http://www.foss4g2006.org/conferenceTimeTable.py?confId=1&#038;showDate=all&#038;showSession=all&#038;detailLevel=contribution&#038;viewMode=parallel' title='FOSS4G Schedule'>FOSS4G Schedule of sessions</a>. It&#8217;s all table based, and it&#8217;s somewhat difficult to find specific tracks, rooms, etc. So I took what was the table-based, non-semantic, calendar and converted it into a much more useful <a href='http://microformats.org/wiki/hcalendar' title='Microformats Wiki: hCalendar'>hCalendar</a> output, which can be easily translated to iCal for your subscription fun using <a href='http://suda.co.uk/' title="Brian Suda's homepage">Brian Suda&#8217;s</a> <a href="http://suda.co.uk/projects/X2V/" title="X2V conversion utility">X2V</a>.</p>
<p>You can get the <a href='http://code.highearthorbit.com/foss4g.html' title='FOSS4G hCalendar'>hCalendar here</a> and the <a href="http://suda.co.uk/projects/X2V/get-vcal.php?uri=http://code.highearthorbit.com/foss4g.html" title="FOSS4G iCal">iCal link here</a>.</p>
<h2>The Problem</h2>
<p>Here is the current HTML of the schedule. As you can see, this is an absolute mess of DOM. This table is in fact already the 4th embedded table (tables-within-tables-within-tables oh my!)</p>
<pre style="height: 150px;"><code>
<table align="center" width="100%">
<tr>
<td width="100%">
<table align="center" border="0" width="100%"
		 celspacing="0" cellpadding="0" bgcolor="#E6E6E6">
<tr>
<td colspan="12" align="center" bgcolor="white"><b>Tuesday, 12 September 2006</b></td>
</tr>
<tr>
<td colspan="12">
<table bgcolor="white" cellpadding="0"
      cellspacing="1" width="100%" style="padding:3px;
      border-top:1px solid #E6E6E6;border-bottom:1px solid #E6E6E6;">
<tr></tr>
</table>
</td>
</tr>
<tr>
<td valign="top" rowspan="12" bgcolor="white" width="40"><font color="gray" size="-1">07:00</font></td>
<td id="conf" valign="top" rowspan="24" align="center" bgcolor="#FFFFFF" style="color:#777777" width="11%" colspan="9" >
    <b>Registration</b><small>(Amphipôle (niv. 3): 07:00 - 09:00)</small>
  </td>
</tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr>
<td valign="top" rowspan="12" bgcolor="white" width="40"><font color="gray" size="-1">08:00</font></td>
</tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr></tr>
<tr>
<td valign="top" rowspan="12" bgcolor="white" width="40"><font color="gray" size="-1">09:00</font></td>
<td id="entry" valign="top" rowspan="42" align="center" bgcolor="#CCFFFF" style="color:#777777" width="11%">
<table width="100%">
<tr>
<td width="100%" align="center" style="">
   [20] <a href="/contributionDisplay.py?contribId=20&amp;sessionId=60&amp;confId=1" style="">Getting Started with MapServer</a>
   <small>by Mr. Jeff MCKENNA (DM Solutions Group)</small>
 </td>
<td align="right" valign="top" nowrap style="">
 <a href="/materialDisplay.py?contribId=20&amp;amp;sessionId=60&amp;amp;materialId=paper&amp;amp;confId=1"><img src="/images/smallPaper.gif" border="0" alt="paper"><small> paper</small></a>
  </td>
</tr>
</table>
</td>

</code></pre>
<p>In the middle there was some actual interesting bits, such as presentation title, author, times, etc. So what we need to do is walk through all this and build up a conference.</p>
<h2>The Solution</h2>
<p>Employing some slick Ruby scripting &#8211; and using the very useful  <a href='http://blog.labnotes.org/2006/07/11/scraping-with-style-scrapi-toolkit-for-ruby/' title='LabNotes blog: scrAPI'>scrAPI</a> from <a href='http://blog.labnotes.org/' title="Assaf's Blog, LabNotes">Assaf</a> we can define scrapers to walk over the multiple days, and then within those days grab each of the sessions. These are then output into proper hCalendar format like: </p>
<pre style="height: 150px;">
&lt;span class="vevent"&gt;
 &lt;a class="url" href="http://www.foss4g2006.org/contributionDisplay.py?contribId=189&amp;amp;sessionId=46&amp;amp;confId=1"&gt;
&nbsp;&nbsp;&lt;span class="summary"&gt;Enabling Users to Produce personalized Geodata&lt;/span&gt;
&nbsp;&nbsp;&lt;span class="details"&gt;&lt;span class="vcard"&gt;&lt;span class="fn"&gt;Mr. Andrew TURNER&lt;/span&gt;&lt;span class="org"&gt;HighEarthOrbit&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&nbsp;&nbsp;&lt;abbr class="dtstart" title="2006-09-15T10:30:00Z"&gt;Friday,  15 September 2006 from 10:30&lt;/abbr&gt;-
&nbsp;&nbsp;&lt;abbr class="dtend" title="2006-09-15T11:00:00Z"&gt;11:00&lt;/abbr&gt;,
 at the &lt;span class="location"&gt;Amphimax MAX 350&lt;/span&gt;
 &lt;/a&gt;
&lt;/span&gt;
</pre>
<p>The code below makes parsing the nightmare above fairly simple, but due to the lack of any proper classes or id&#8217;s (each presentation is <code>id="entry"</code> &#8211; eep!), we have to find the bits we want by their current markup attributes. Not suggested, but at least this is nicer than trying to figure out the 10-levels of DOM starting at the root.</p>
<p>You can see the <a href="http://code.highearthorbit.com/foss4gcal.rb" title="FOSS4G Ruby parser">parser here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://highearthorbit.com/converting-table-based-calendars-to-hcalendar/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>RubyConf*MI &#8211; the word is &#8220;Testing&#8221;</title>
		<link>http://highearthorbit.com/rubyconfmi-the-word-is-testing/</link>
		<comments>http://highearthorbit.com/rubyconfmi-the-word-is-testing/#comments</comments>
		<pubDate>Mon, 28 Aug 2006 03:19:13 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Conference]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://highearthorbit.com/rubyconfmi-the-word-is-testing/</guid>
		<description><![CDATA[I went to my fourth conference this summer. Conferences, especially small ones, are a great chance to get quick insights into new ideas or technologies, but most importantly to share ideas with a lot of other people.
The presentations were good, many revolved around testing, with some talking about performance and deployment. There were very few [...]]]></description>
			<content:encoded><![CDATA[<p>I went to my fourth conference this summer. Conferences, especially small ones, are a great chance to get quick insights into new ideas or technologies, but most importantly to share ideas with a lot of other people.</p>
<p>The presentations were good, many revolved around testing, with some talking about performance and deployment. There were very few presentations of new novel ideas or techniques. That&#8217;s where discussions come in.</p>
<p>I&#8217;m a new Ruby programmer who came to the party by the way of the popular gateway drug, Rails. So I&#8217;m still behind on proper and good Ruby tools and techniques. <a href='http://on-ruby.blogspot.com/2006/08/rubyconfmi-wrap-up.html' title='On Ruby blog' rel='met'>Pat Eyler</a> gave an overview of various Ruby libraries for testing and performance such as <a href='http://testunit.talbott.ws/' title='test/unit'>test/unit</a>, <a href='http://www.zenspider.com/ZSS/Products/ZenTest/' title='autotest'>autotest</a>, unit_diff, <a href='http://rspec.rubyforge.org/' title='rspec'>rspec</a>, <a href='http://eigenclass.org/hiki.rb?rcov' title='rcov'>rcov</a>, <a href='http://rubyforge.org/projects/ruby-prof' title='ruby-prof'>ruby-prof</a>, and <a href='http://www.ruby-doc.org/stdlib/libdoc/benchmark/rdoc/index.html' title='benchmark'>benchmark</a>. </p>
<p>He sequed very well into <a href='http://rubymi.org' title='SouthEast Michigan Ruby Users Group'>SouthEast Michigan&#8217;s own</a> <a href="http://blog.hurleyhome.com/" title="Hurley's Harangue" rel="acquaintence">Patrick Hurley&#8217;s</a> talk on C optimization. Coming from a C/C++ background, knowing how easy it is to add small chunks of fast C code to <em>dramatically</em> speed up code (Patrick&#8217;s example showed a 20-times increase). </p>
<p>Back in Rails (esque) land, <a href='http://blogs.mktec.com/zdennis/' title='ZDennis Blog' rel='met'>Zach Dennis</a> talked about his <a href='http://blogs.mktec.com/zdennis/pages/ActiveRecord_Extensions' title='ActiveRecord Extensions'>ActiveRecord:Extensions</a> (AR:E). ActiveRecord isn&#8217;t Rails specific, but makes a big part of the functionality behind Rails. <a href='http://blogs.mktec.com/zdennis/pages/ActiveRecord_Extensions' title='ActiveRecord Extensions'>AR:E</a> adds a lot of very convenient functionality as well as speed improvements to database operations. </p>
<p>And of course, we made another pilgrimage to the Grand Rapids Brewing Comany.</p>
<p class="tags">Tags: <a href="http://technorati.com/tag/ruby" title="See the Technorati tag page for 'ruby'." rel="tag">ruby</a>, <a href="http://technorati.com/tag/conference" title="See the Technorati tag page for 'conference'." rel="tag">conference</a>, <a href="http://technorati.com/tag/rubyconfmi" title="See the Technorati tag page for 'rubyconfmi'." rel="tag">rubyconfmi</a>, <a href="http://technorati.com/tag/optimization" title="See the Technorati tag page for 'optimization'." rel="tag">optimization</a>, <a href="http://technorati.com/tag/programming" title="See the Technorati tag page for 'programming'." rel="tag">programming</a>, <a href="http://technorati.com/tag/pateyler" title="See the Technorati tag page for 'pateyler'." rel="tag">pateyler</a>, <a href="http://technorati.com/tag/patrickhurley" title="See the Technorati tag page for 'patrickhurley'." rel="tag">patrickhurley</a>, <a href="http://technorati.com/tag/activerecord" title="See the Technorati tag page for 'activerecord'." rel="tag">activerecord</a>, <a href="http://technorati.com/tag/activerecordextensions" title="See the Technorati tag page for 'activerecordextensions'." rel="tag">activerecordextensions</a>, <a href="http://technorati.com/tag/rcov" title="See the Technorati tag page for 'rcov'." rel="tag">rcov</a>, <a href="http://technorati.com/tag/testunit" title="See the Technorati tag page for 'testunit'." rel="tag">testunit</a>, <a href="http://technorati.com/tag/autotest" title="See the Technorati tag page for 'autotest'." rel="tag">autotest</a>, <a href="http://technorati.com/tag/rspec" title="See the Technorati tag page for 'rspec'." rel="tag">rspec</a>, <a href="http://technorati.com/tag/benchmark" title="See the Technorati tag page for 'benchmark'." rel="tag">benchmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://highearthorbit.com/rubyconfmi-the-word-is-testing/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Ruby Conference Michigan &#8211; Saturday August 26</title>
		<link>http://highearthorbit.com/ruby-conference-michigan-saturday-august-26/</link>
		<comments>http://highearthorbit.com/ruby-conference-michigan-saturday-august-26/#comments</comments>
		<pubDate>Tue, 22 Aug 2006 13:34:37 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Conference]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Travel]]></category>

		<guid isPermaLink="false">http://highearthorbit.com/ruby-conference-michigan-saturday-august-26/</guid>
		<description><![CDATA[I&#8217;ll be at the RubyConf*MI which is the premiere Ruby event in Michigan. 
hCalendar info
RubyConf*MI: Saturday, August 26, 9AM-5PM, at Science Building at Calvin College, Grand Rapids, Michigan
It&#8217;s just a 1-day conference, but should be a great time. Get to see David Black, author of  Ruby for Rails, speak, as well as SouthEast Michigan&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://highearthorbit.com/wp-content/uploads/2006/08/rubyconfmi_logo.thumbnail.jpg' alt='RubyConf*MI Logo' align='right' hspace='5px' vspace='5px'/>I&#8217;ll be at the <a href='http://rubyconfmi.org/' title="RubyConf*MI Homepage">RubyConf*MI</a> which is <em>the</em> premiere Ruby event in Michigan. </p>
<h3><a href='hhttp://microformats.org/wiki/hcalendar'>hCalendar info</a></h3>
<p><span class="vevent"><a class="url" href="http://rubyconfmi.org/"><span class="summary">RubyConf*MI</span>: <abbr class="dtstart" title="2006-08-26T14:00Z">Saturday, August 26, 9AM</abbr>-<abbr class="dtend" title="2005-08-26T21:00Z">5PM</abbr>, at <span class="location">Science Building at Calvin College, <span class="adr"><span class="locality">Grand Rapids</span>, <span class="region">Michigan</span></span></span></a></span></p>
<p>It&#8217;s just a 1-day conference, but should be a great time. Get to see <span class="vcard"><a class="url fn" href='http://www.manning.com/black/' title='Ruby for Rails Book'>David Black</a></span>, author of  <a href='http://www.manning.com/black/' title='Ruby for Rails Book'>Ruby for Rails</a>, speak, as well as <span class="vcard"><a class="org" href='http://rubymi.org' title='SouthEast Michigan Ruby Users Group'>SouthEast Michigan&#8217;s own</a> <a class = "url fn" href='http://blog.hurleyhome.com/' title='Hurley Home' rel='acquaintence'>Patrick Hurley</a></span>. </p>
<p>If you&#8217;re in the <span class="adr"><span class="locality">Grand Rapids</span>, <span class="region">Michigan</a> area, stop by.</p>
<p class="tags">Tags: <a href="http://technorati.com/tag/ruby" title="See the Technorati tag page for 'ruby'." rel="tag">ruby</a>, <a href="http://technorati.com/tag/michigan" title="See the Technorati tag page for 'michigan'." rel="tag">michigan</a>, <a href="http://technorati.com/tag/grandrapids" title="See the Technorati tag page for 'grandrapids'." rel="tag">grandrapids</a>, <a href="http://technorati.com/tag/conference" title="See the Technorati tag page for 'conference'." rel="tag">conference</a>, <a href="http://technorati.com/tag/rubymi" title="See the Technorati tag page for 'rubymi'." rel="tag">rubymi</a>, <a href="http://technorati.com/tag/rubyconfmi" title="See the Technorati tag page for 'rubyconfmi'." rel="tag">rubyconfmi</a></p>]]></content:encoded>
			<wfw:commentRss>http://highearthorbit.com/ruby-conference-michigan-saturday-august-26/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<georss:point>42.929001 -85.540092</georss:point>
	</item>
		<item>
		<title>How does a Framework Scale and not splinter?</title>
		<link>http://highearthorbit.com/how-does-a-framework-scale-and-not-splinter/</link>
		<comments>http://highearthorbit.com/how-does-a-framework-scale-and-not-splinter/#comments</comments>
		<pubDate>Sun, 20 Aug 2006 04:34:00 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://highearthorbit.com/how-does-a-framework-scale-and-not-splinter/</guid>
		<description><![CDATA[One of the discussions that came up at BarCamp Grand Rapids was how can a framework (and language) scale and grow, without splintering too much. There were a disproportionate number of Java developers present, and one of the few complaints they had about Java was the large number of frameworks that were available. None had [...]]]></description>
			<content:encoded><![CDATA[<p>One of the discussions that came up at <a href='barcamp.org/BarCampGrandRapids' title='BarCamp Grand Rapids Wiki'>BarCamp Grand Rapids</a> was how can a framework (and language) scale and grow, without splintering too much. There were a disproportionate number of Java developers present, and one of the few complaints they had about Java was the large number of frameworks that were available. None had a market dominance, or clear set of features. Every week new frameworks pop up.</p>
<p>Compare to the few of us that were Rails proponents. Currently, Rails is the only Ruby framework with any market share (are there even any others?). The question was, in the future will more Ruby frameworks show up, steal market/mind-share, and splinter the community. Diversity is good, new ideas help spur innovation. However, large fracturing confuses new developers and makes support and interoperability difficult.</p>
<p>One definite way to address this possible problem is by keeping the core framework simple and effective and having good support for extensions, plugins, and additions by other developers. Rails currently does this very well, and it looks like this will become even more solid in the future.</p>
<p>A <a href='http://leviathon.agileevolved.com/' title='Ruby on Rails Plugin Repository'>Ruby on Rails Plugin Repository</a> is being realized and should be fully supported soon. <a href='http://www.lukeredpath.co.uk/2006/8/18/rails-plugin-repository-is-on-the-way' title='Luke Redpath: Rails plugin repository is on the way'>Luke Redpath</a> has a good discussion on the current progress and future path. To date, the plugin repository has been wiki based, or required knowing the appropriate subversion repository for a plugin. This new effort will centralize plugins, promote proper documentation, annotation, and testing.</p>
<p>Perl has <a href='www.cpan.org/' title='CPAN Repository'>CPAN</a>, an absolutely incredible repository of modules that has probably kept Perl alive and made it a very powerful language. Ruby Gems provide a very similar infrastructure for distributing great enhancements to the language. Hopefully, the <a href='http://leviathon.agileevolved.com/' title='Ruby on Rails Plugin Repository'>Ruby on Rails Plugin Repository</a> will keep the community united and working to support and build on a single framework while still allowing them to bring in their application specific features. </p>
<p class="tags">Tags: <a href="http://technorati.com/tag/ruby" title="See the Technorati tag page for 'ruby'." rel="tag">ruby</a>, <a href="http://technorati.com/tag/rails" title="See the Technorati tag page for 'rails'." rel="tag">rails</a>, <a href="http://technorati.com/tag/rubyonrails" title="See the Technorati tag page for 'rubyonrails'." rel="tag">rubyonrails</a>, <a href="http://technorati.com/tag/perl" title="See the Technorati tag page for 'perl'." rel="tag">perl</a>, <a href="http://technorati.com/tag/java" title="See the Technorati tag page for 'java'." rel="tag">java</a>, <a href="http://technorati.com/tag/barcamp" title="See the Technorati tag page for 'barcamp'." rel="tag">barcamp</a>, <a href="http://technorati.com/tag/barcampgrandrapids" title="See the Technorati tag page for 'barcampgrandrapids'." rel="tag">barcampgrandrapids</a>, <a href="http://technorati.com/tag/frameworks" title="See the Technorati tag page for 'frameworks'." rel="tag">frameworks</a></p>]]></content:encoded>
			<wfw:commentRss>http://highearthorbit.com/how-does-a-framework-scale-and-not-splinter/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Microformat Ruby Parser</title>
		<link>http://highearthorbit.com/microformat-ruby-parser/</link>
		<comments>http://highearthorbit.com/microformat-ruby-parser/#comments</comments>
		<pubDate>Sun, 06 Aug 2006 18:42:51 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://highearthorbit.com/microformat-ruby-parser/</guid>
		<description><![CDATA[With help from Assaf, I&#8217;ve generalized the Microformat parsers even more. Now, there is a base-class Microformat that provides a structure for any sub-class to be created that specifies a Microformat that you want to parse.
It&#8217;s not robust, in that it assumes that the important information is actually in the text of the tag, and [...]]]></description>
			<content:encoded><![CDATA[<p>With help from <a href='http://blog.labnotes.org/'>Assaf</a>, I&#8217;ve generalized the <a href='http://microformats.org/wiki'>Microformat</a> parsers even more. Now, there is a base-class <code>Microformat</code> that provides a structure for any sub-class to be created that specifies a Microformat that you want to parse.</p>
<p>It&#8217;s not robust, in that it assumes that the important information is actually in the text of the tag, and nothing is in any of the tag&#8217;s attributes. This should probably be added, where the properties would be an array that specify if the value comes from text or a named attribute.</p>
<pre>
<code>
class Microformat < Scraper::Base  def self.properties(*symbols)
    symbols.each do |symbol|
      html_class = symbol.to_s.gsub(/_/, "-")
      process ".#{html_class}", symbol=>["abbr@title", "a@href", :text]
    end
  end
end

class Geo < Microformat
  properties :latitude, :longitude
end
class Adr < Microformat
  properties :post_office_box,
    :extended_address,
    :street_address,
    :locality,
    :region,
    :postal_code,
    :country_name
end
</code>
</pre>
<p>To use you just have a generalized scraper:</p>
<pre>
<code>
class Location < Scraper::Base   array :geos
  array :adrs
  process ".adr", :adrs => Adr
  process ".geo", :geos => Geo
  result :geos, :adrs
end
</code></pre>
<p>which will now return an object with a <code>.geos</code> and <code>.adrs</code> for <a href='http://microformats.org/wiki/geo'>geo</a> and <a href='http://microformats.org/wiki/adr'>adr</a> attributes, respectively. </p>
<p><strong>Updated</strong>: Assaf pointed out that he added the ability to pull out the correct data if the microformat was stored in an abbr vs. a span.<br />
<code>process ".#{html_class}", symbol=>["abbr@title", "a@href", :text]</code></p>
<p class="tags">Tags: <a href="http://technorati.com/tag/ruby" title="See the Technorati tag page for 'ruby'." rel="tag">ruby</a>, <a href="http://technorati.com/tag/microformats" title="See the Technorati tag page for 'microformats'." rel="tag">microformats</a>, <a href="http://technorati.com/tag/geo" title="See the Technorati tag page for 'geo'." rel="tag">geo</a>, <a href="http://technorati.com/tag/adr" title="See the Technorati tag page for 'adr'." rel="tag">adr</a>, <a href="http://technorati.com/tag/scrapi" title="See the Technorati tag page for 'scrapi'." rel="tag">scrapi</a>, <a href="http://technorati.com/tag/parsing" title="See the Technorati tag page for 'parsing'." rel="tag">parsing</a></p>]]></content:encoded>
			<wfw:commentRss>http://highearthorbit.com/microformat-ruby-parser/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>scrAPI &#8211; Microformat Parsing in Ruby</title>
		<link>http://highearthorbit.com/scrapi-microformat-parsing-in-ruby/</link>
		<comments>http://highearthorbit.com/scrapi-microformat-parsing-in-ruby/#comments</comments>
		<pubDate>Fri, 04 Aug 2006 23:49:26 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Project]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://highearthorbit.com/scrapi-microformat-parsing-in-ruby/</guid>
		<description><![CDATA[I was looking for some nice Ruby utility to help in parsing out Microformats from webpages. There are 3 projects currently on RubyForge:

uformatparser &#8211; looks very flexible and mature. developed by LabNotes
uformats &#8211; pretty good, only supports a couple of formats
mfTools &#8211; nothing released yet, unknown status

Talking on #microformats I was pointed to LabNotes newer [...]]]></description>
			<content:encoded><![CDATA[<p>I was looking for some nice Ruby utility to help in parsing out <a href='http://microformats.com/' title='Microformats homepage'>Microformats</a> from webpages. There are 3 projects currently on <a href='http://rubyforge.org' title='RubyForge homepage'>RubyForge</a>:</p>
<ul>
<li><a href='http://rubyforge.org/projects/uformatparser/' title='uformatparser RubyForge project page'>uformatparser</a> &#8211; looks very flexible and mature. developed by <a href='http://blog.labnotes.org' title='LabNotes Blog'>LabNotes</a></li>
<li><a href='http://rubyforge.org/projects/uformats/' title='uformats RubyForge project page'>uformats</a> &#8211; pretty good, only supports a couple of formats</li>
<li><a href='http://rubyforge.org/projects/mftools/' title='mfTools RubyForge project page'>mfTools</a> &#8211; nothing released yet, unknown status</li>
</ul>
<p>Talking on <code>#microformats</code> I was pointed to <a href='http://blog.labnotes.org' title='LabNotes Blog'>LabNotes</a> newer incarnation of a parser: <a href='http://blog.labnotes.org/2006/07/11/scraping-with-style-scrapi-toolkit-for-ruby/' title='scrAPI announcement'>scrAPI</a>. It&#8217;s a much more generic HTML parser/scraper, that can handle getting data from HTML by structure, class, or id. <a href='http://blog.labnotes.org/wp-content/uploads/mashup-camp-ii/index.html' title='Presentation about scrAPI'>Here is Assaf&#8217;s presentation</a> at Mashup Camp II where he gives some good tutorials and discussion about the API. </p>
<h2>Down and dirty with the code</h2>
<p>To illustrate <a href='http://blog.labnotes.org/2006/07/11/scraping-with-style-scrapi-toolkit-for-ruby/' title='scrAPI announcement'>scrAPI</a>, I&#8217;ll show you the code needed to parse <a href='http://microformats.com/wiki/geo' title='Microformats Wiki: geo'>geo</a> location data from a webpage. </p>
<p>First we just do bring in the necessary libraries, and get an example HTML page:</p>
<pre><code>
require 'scrapi/lib/scrapi'
require "net/http"

h = Net::HTTP.new("code.highearthorbit.com", 80)
resp, data = h.get("/greaseroute/index.php")
</code></pre>
<p>Then we define our scrapers. The <a href='http://microformats.com/wiki/geo' title='Microformats Wiki: geo'>geo</a> microformat looks like:<br />
&lt;div class=&#8221;geo&#8221;&gt;<br />
  &lt;span class=&#8221;latitude&#8221;&gt;35.126&lt;/span&gt;,<br />
  &lt;span class=&#8221;longitude&#8221;&gt;-80.764&lt;/span&gt;<br />
&lt;/div&gt;</p>
<p>The <code>process</code> method of the <code>Geo</code> class can take a HTML structure path, CSS class or id, and then the attribute to store. Also, our general <code>Location</code> scraper will look for all <code>geo</code> class tags in the HTML, and fill out the <code>geos</code> array using the <code>Geo</code> class Scraper.</p>
<pre><code>
class Geo < Scraper::Base
  process ".latitude", :latitude => :text
  process ".longitude", :longitude => :text
end

class Location < Scraper::Base
  array :geos
  process ".geo", :geos => Geo
  result :geos
end
</code></pre>
<p>Finally, now that we&#8217;ve built up our &#8220;tools&#8221;, we can scrape the data, and output all the found locations.</p>
<pre><code>
locations = Location.scrape(data)

locations.each {|loc| puts "[#{loc.latitude} x #{loc.longitude}]" }
</code></pre>
<p>That was really easy, and effective. Additionally, due to the <a href='http://microformats.com/' title='Microformats homepage'>Microformats</a> standards, we can feel pretty confident on changes to the original site&#8217;s markup to not mess up our parsing. </p>
]]></content:encoded>
			<wfw:commentRss>http://highearthorbit.com/scrapi-microformat-parsing-in-ruby/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>RubyCocoa</title>
		<link>http://highearthorbit.com/rubycocoa/</link>
		<comments>http://highearthorbit.com/rubycocoa/#comments</comments>
		<pubDate>Fri, 04 Aug 2006 15:17:53 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Applescript]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://highearthorbit.com/rubycocoa/</guid>
		<description><![CDATA[RubyCocoa is a bridge between the Mac OS X Cocoa Framework API that makes it callable from Ruby code. You can create applications, objects, call Mac OS X Services. You can even call Applescript:

require 'osx/cocoa'
include OSX
def speak (str)
  str.gsub! (/"/, '\"')
  src = %(say "#{str}")
  NSAppleScript.alloc.initWithSource(src).executeAndReturnError(nil)
end
speak "Hello World!"
speak "Kon nich Wah. Ogan [...]]]></description>
			<content:encoded><![CDATA[<p><a href='http://rubycocoa.sourceforge.net/' title='RubyCocoa bridge'>RubyCocoa</a> is a bridge between the Mac OS X Cocoa Framework API that makes it callable from Ruby code. You can create applications, objects, call Mac OS X Services. You can even call Applescript:</p>
<pre><code>
require 'osx/cocoa'
include OSX
def speak (str)
  str.gsub! (/"/, '\"')
  src = %(say "#{str}")
  NSAppleScript.alloc.initWithSource(src).executeAndReturnError(nil)
end
speak "Hello World!"
speak "Kon nich Wah. Ogan key desu ka?"
</code></pre>
<p><a href='http://blog.bleything.ne' title='Ben Bleything blog'>Ben Bleything</a> submitted a talk to RubyConf, titled &#8220;<a href='http://blog.bleything.net/pages/harmonize'>Harmonize: Exploiting RubyCocoa and Sync Services for Fun and Profit</a>&#8221;  where he discusses making a wrapper around the SyncAPI in Ruby. (<a href='http://blog.bleything.net/articles/2006/08/04/introducing-harmonize' title='blethythingblog: Introducing Harmonize'>blog post introducing Harmonize</a>) </p>
<p><a href='http://rubycocoa.sourceforge.net/' title='RubyCocoa bridge'>RubyCocoa</a> looks like it may have stagnated a little as the last release was November 2005, but perhaps with such a renewed interest in <a href='http://radar.oreilly.com/archives/2006/07/ruby_book_sales_pass_perl.html' title="O'Reilly: Ruby Book Sales Pass Perl ">Ruby</a>, and Mac OS X gaining popularity, perhaps new life with be breathed into it. Projects such as <a href='http://www.syncbridge.com/' title='SyncBridge'>SyncBridge</a> and <a href='http://blog.bleything.net/pages/harmonize' title='Harmonize homepage'>Harmonize</a> also obviously help. </p>
<p><strong>Update</strong>: Check out the very good examples and information at <a href='http://www.rubycocoa.com/'>RubyCocoa.com</a>, including how to <a href='http://www.rubycocoa.com/appleremote/1'>use your Apple Remote from RubyCocoa</a> .</p>
<p class="tags">Tags: <a href="http://technorati.com/tag/ruby" title="See the Technorati tag page for 'ruby'." rel="tag">ruby</a>, <a href="http://technorati.com/tag/cocoa" title="See the Technorati tag page for 'cocoa'." rel="tag">cocoa</a>, <a href="http://technorati.com/tag/rubycocoa" title="See the Technorati tag page for 'rubycocoa'." rel="tag">rubycocoa</a>, <a href="http://technorati.com/tag/programming" title="See the Technorati tag page for 'programming'." rel="tag">programming</a>, <a href="http://technorati.com/tag/macosx" title="See the Technorati tag page for 'macosx'." rel="tag">macosx</a></p>]]></content:encoded>
			<wfw:commentRss>http://highearthorbit.com/rubycocoa/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Making your Rails project setup easier</title>
		<link>http://highearthorbit.com/making-your-rails-project-setup-easier/</link>
		<comments>http://highearthorbit.com/making-your-rails-project-setup-easier/#comments</comments>
		<pubDate>Thu, 27 Jul 2006 14:39:23 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://highearthorbit.com/making-your-rails-project-setup-easier/</guid>
		<description><![CDATA[Luke Redpath has come up with a brilliant, and simple solution for having to install a large set of standard Rails plugins with each new Rails project.  Rails Plugin Packs™ is a YAML file defined set of plugins that his Plugin will then go through and install.
Therefore, you can build up your set of [...]]]></description>
			<content:encoded><![CDATA[<p><a href='http://www.lukeredpath.co.uk' title='Luke Redpath blog'>Luke Redpath</a> has come up with a brilliant, and simple solution for having to install a large set of standard Rails plugins with each new Rails project.  <a href='http://www.lukeredpath.co.uk/index.php/2006/07/27/install-your-favorite-rails-plugins-easily-with-rails-plugin-packs/'>Rails Plugin Packs™</a> is a YAML file defined set of plugins that his Plugin will then go through and install.</p>
<p>Therefore, you can build up your set of Location based plugins, such as:</p>
<ul>
<li><a href='http://thepochisuperstarmegashow.com/ProjectsDoc/ym4r_mapstraction-doc/'>YM4R Mapstraction</a> </li>
<li><a href='http://rubyforge.org/projects/georuby/'>Georuby</a></li>
<li><a href='http://dev.robotcoop.com/Libraries/'>Yahoo Geocoder and Search</a></li>
<li><a href='http://dev.robotcoop.com/Libraries/metacarta-geoparser/'>Metacarta Geoparser</a></li>
</ul>
<h2>Plugin Packs</h2>
<pre><code>
about:
  name: Mapping Pack
  description: A set of mapping and geocoding plugins
  author: Andrew Turner
  email: rails@highearthorbit.com
  website: http://www.highearthorbit.com
plugins:
  ym4r_mapstraction:
    source: svn://rubyforge.org/var/svn/ym4r/Plugins/Mapstraction/trunk/ym4r_mapstraction
  GeoRuby:
    source:
  metacarta-geoparser:
    source: http://opensource.agileevolved.com/svn/root/rails_plugins/unobtrusive_javascript/tags/rel-0.1
  yahoo-geocode:
    source: http://opensource.agileevolved.com/svn/root/rails_plugins/navigation_mappings/trunk
</code></pre>
<pre><code>
about:
  name: User site
  description: Plugins for a standard site with users for authentication and basic cms
  author: Andrew Turner
  email: rails@highearthorbit.com
  website: http://www.highearthorbit.com
plugins:
  acts_as_authenticated:
    source: http://svn.techno-weenie.net/projects/plugins/acts_as_authenticated
  comatose:
    source: http://mattmccray.com/svn/rails/plugins
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://highearthorbit.com/making-your-rails-project-setup-easier/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ruby and Mapstraction</title>
		<link>http://highearthorbit.com/ruby-and-mapstraction/</link>
		<comments>http://highearthorbit.com/ruby-and-mapstraction/#comments</comments>
		<pubDate>Wed, 26 Jul 2006 18:21:00 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Maps]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://highearthorbit.com/ruby-and-mapstraction/</guid>
		<description><![CDATA[Wow, Guilhem has been busy. He recently announced YM4R for Mapstraction. Now you can embed Mapstraction maps into your Ruby on Rails projects. 
In case you didn&#8217;t know, Mapstraction is a Javascript library that encapsulates the API&#8217;s for GoogleMaps, YahooMaps, and Microsoft Virtual Earth maps. You can write once, but switch between any of the [...]]]></description>
			<content:encoded><![CDATA[<p>Wow, <a href='http://thepochisuperstarmegashow.com' title="Guilhem's blog">Guilhem</a> has been busy. He recently <a href='http://thepochisuperstarmegashow.com/2006/07/22/ym4rgm-update-ym4rmapstraction/'>announced YM4R for Mapstraction</a>. Now you can embed <a href='http://www.mapstraction.com'>Mapstraction</a> maps into your Ruby on Rails projects. </p>
<p>In case you didn&#8217;t know, <a href='http://www.mapstraction.com'>Mapstraction</a> is a Javascript library that encapsulates the API&#8217;s for <a href='http://www.google.com/apis/maps'>GoogleMaps</a>, <a href='http://developer.yahoo.com/maps'>YahooMaps</a>, and <a href='http://www.viavirtualearth.com/VVE/Dashboard/Default.ashx'>Microsoft Virtual Earth</a> maps. You can write once, but switch between any of the map types.</p>
]]></content:encoded>
			<wfw:commentRss>http://highearthorbit.com/ruby-and-mapstraction/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>YM4R &#8211; Rails mapping with GeoRSS support</title>
		<link>http://highearthorbit.com/ym4r-rails-mapping-with-georss-support/</link>
		<comments>http://highearthorbit.com/ym4r-rails-mapping-with-georss-support/#comments</comments>
		<pubDate>Tue, 11 Jul 2006 22:30:49 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[GeoRSS]]></category>
		<category><![CDATA[Maps]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://highearthorbit.com/ym4r-rails-mapping-with-georss-support/</guid>
		<description><![CDATA[The newer, more full-featured kid on the embedding Maps-in-your-Rails-App-block has gotten an update. YM4R v0.5.1 was released a couple of days ago. It&#8217;s now mostly a plugin, instead of a gem, since it includes a lot of Rails specific stuff. There are Ruby libraries for creating GoogleMaps tiles, and geocoding that are still in the [...]]]></description>
			<content:encoded><![CDATA[<p>The newer, more full-featured kid on the embedding Maps-in-your-Rails-App-block has gotten an update. <a href='http://thepochisuperstarmegashow.com/2006/07/08/ym4r-051/' title='YM4R v0.5.1 release announcement'>YM4R v0.5.1</a> was released a couple of days ago. It&#8217;s now mostly a plugin, instead of a gem, since it includes a lot of Rails specific stuff. There are Ruby libraries for creating GoogleMaps tiles, and geocoding that are still in the gem, which is great too.</p>
<p>And I&#8217;ve even done my part to contribute by submitting my GeoRSS Simple Parser. </p>
<p><!-- technorati tags start -->
<p style="text-align:right;font-size:10px;">Technorati Tags: <a href="http://www.technorati.com/tag/ym4r" rel="tag">ym4r</a>, <a href="http://www.technorati.com/tag/plugin" rel="tag">plugin</a>, <a href="http://www.technorati.com/tag/rubyonrails" rel="tag">rubyonrails</a>, <a href="http://www.technorati.com/tag/rails" rel="tag">rails</a>, <a href="http://www.technorati.com/tag/ruby" rel="tag">ruby</a></p>
<p><!-- technorati tags end --></p>
]]></content:encoded>
			<wfw:commentRss>http://highearthorbit.com/ym4r-rails-mapping-with-georss-support/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Geographic support in Ruby gems</title>
		<link>http://highearthorbit.com/435/</link>
		<comments>http://highearthorbit.com/435/#comments</comments>
		<pubDate>Sat, 17 Jun 2006 21:26:25 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Cartographer Plugin]]></category>
		<category><![CDATA[Maps]]></category>
		<category><![CDATA[Open-Source]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Project]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://highearthorbit.com/435/</guid>
		<description><![CDATA[I ran across GeoRuby, a Ruby gem for handling spatial data types in a database, awhile ago. However, I never sunk my teeth into how it worked and how to get it going.
In the meantime, I settled myself to using the adequate Cartographer Plugin to easily create Google Maps. I even went so far as [...]]]></description>
			<content:encoded><![CDATA[<p>I ran across <a href='http://rubyforge.org/projects/georuby/'>GeoRuby</a>, a Ruby gem for handling spatial data types in a database, awhile ago. However, I never sunk my teeth into how it worked and how to get it going.</p>
<p>In the meantime, I settled myself to using the adequate <a href='http://rubyforge.org/projects/cartographer/'>Cartographer Plugin</a> to easily create Google Maps. I even went so far as to extend Cartographer to switch to Yahoo! maps and MapQuest Maps. </p>
<p>I just came across another mapping gem, <a href='http://rubyforge.org/projects/ym4r/'>YM4R</a> (yellow maps for Ruby) which handles GoogleMaps v2 (there is a patch for Cartographer to do the same), and Yahoo! maps, local, and traffic. Wow!</p>
<p>Not only that, it&#8217;s by the same developer of GeoRuby, <a href='http://thepochisuperstarmegashow.com'>The Pochi Superstar Mega Show!</a>. </p>
<p>Check out the very good, and complete <a href='http://thepochisuperstarmegashow.com/2006/06/02/ym4r-georuby-spatial-adapter-demo/'>Ym4r + GeoRuby + Spatial Adapter tutorial</a></p>
]]></content:encoded>
			<wfw:commentRss>http://highearthorbit.com/435/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

