<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Beyond The Type</title>
  <id>http://beyondthetype.com</id>
  <updated>2007-05-09T00:00:00Z</updated>
  <author>
    <name>Martin Sadler</name>
  </author>
  <entry>
    <title>An Introduction to Desktop Apps with Ruby</title>
    <link href="http://beyondthetype.com/2010/09/28/an-introduction-to-desktop-apps-with-ruby" rel="alternate"/>
    <id>http://beyondthetype.com/2010/09/28/an-introduction-to-desktop-apps-with-ruby</id>
    <published>2010-09-28T00:00:00Z</published>
    <updated>2010-09-28T00:00:00Z</updated>
    <author>
      <name>Martin Sadler</name>
    </author>
    <summary type="html">&lt;p&gt;&lt;img src="http://beyondthetype.com/images/trayapp.png" style="float:left; padding: 10px;" alt="JRuby Try App" /&gt;
In a guest post for &lt;a href="http://rubylearning.com/blog"&gt;Ruby Learning&lt;/a&gt; I run through how to create
a &lt;a href="http://rubylearning.com/blog/2010/09/29/an-introduction-to-desktop-apps-with-ruby/"&gt;desktop tray application using JRuby&lt;/a&gt;&amp;hellip;&lt;/p&gt;
</summary>
    <content type="html">&lt;p&gt;&lt;img src="http://beyondthetype.com/images/trayapp.png" style="float:left; padding: 10px;" alt="JRuby Try App" /&gt;
In a guest post for &lt;a href="http://rubylearning.com/blog"&gt;Ruby Learning&lt;/a&gt; I run through how to create
a &lt;a href="http://rubylearning.com/blog/2010/09/29/an-introduction-to-desktop-apps-with-ruby/"&gt;desktop tray application using JRuby&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You can read the full article at: &lt;a href="http://rubylearning.com/blog/2010/09/29/an-introduction-to-desktop-apps-with-ruby"&gt;http://rubylearning.com/blog/2010/09/29/an-introduction-to-desktop-apps-with-ruby&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Blogging evolved</title>
    <link href="http://beyondthetype.com/2010/09/27/blogging-evolved" rel="alternate"/>
    <id>http://beyondthetype.com/2010/09/27/blogging-evolved</id>
    <published>2010-09-27T00:00:00Z</published>
    <updated>2010-09-27T00:00:00Z</updated>
    <author>
      <name>Martin Sadler</name>
    </author>
    <summary type="html">&lt;p&gt;&lt;img src="http://farm4.static.flickr.com/3481/3951267367_b8da36b873_m.jpg" style="float:left; padding: 10px;" alt="Yellow Brick, Dorothy" /&gt;
So I say goodbye to my customised &lt;a href="http://radiantcms.org/"&gt;Radiant&lt;/a&gt; install and hello to the ultra simple and easy to use &lt;a href="http://cloudhead.io/toto"&gt;Toto&lt;/a&gt; blogging engine&amp;hellip;&lt;/p&gt;
</summary>
    <content type="html">&lt;p&gt;&lt;img src="http://farm4.static.flickr.com/3481/3951267367_b8da36b873_m.jpg" style="float:left; padding: 10px;" alt="Yellow Brick, Dorothy" /&gt;
So I say goodbye to my customised &lt;a href="http://radiantcms.org/"&gt;Radiant&lt;/a&gt; install and hello to the ultra simple and easy to use &lt;a href="http://cloudhead.io/toto"&gt;Toto&lt;/a&gt; blogging engine.&lt;/p&gt;

&lt;p&gt;Built on &lt;a href="http://rack.rubyforge.org/"&gt;Rack&lt;/a&gt;, there is no database, all article content is stored in plain text and
versioned by &lt;a href="http://git-scm.com/"&gt;Git&lt;/a&gt;. Using the &lt;a href="http://github.com/cloudhead/dorothy"&gt;Dorothy template&lt;/a&gt; made it
stupidly easy to get started. Not to mention hosting is a no brainer with a simple push
to &lt;a href="http://heroku.com/"&gt;Heroku&lt;/a&gt; and the job is done. Very satisfying.&lt;/p&gt;

&lt;p&gt;I do encourage you to checkout &lt;a href="http://github.com/cloudhead/toto"&gt;Toto&amp;rsquo;s source code&lt;/a&gt;, it does
a heck of a lot for v.little LOC&amp;rsquo;s. Impressive.&lt;/p&gt;

&lt;p&gt;The largest amount of time with anything like this was spent migrating from the existing blog; cleaning up the
existing content, making sure urls rewrite and moving comments to &lt;a href="http://disqus.com/"&gt;Disqus&lt;/a&gt;.
If you find yourself doing the same &lt;a href="http://beyondthetype.com/contact"&gt;drop me a line&lt;/a&gt; as I have a couple of scripts that might make
your life a bit easier.&lt;/p&gt;

&lt;p&gt;What does this all mean? Well, I spend most of my day at the command line with a text
editor already open&amp;hellip; if this helps lower the barrier and gets me blogging more, all the better
for it.&lt;/p&gt;

&lt;h2&gt;Reference&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://cloudhead.io/toto"&gt;Toto Homepage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://fadeyev.net/2010/05/10/getting-started-with-toto/"&gt;Getting Started With Toto&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.rubyinside.com/deploy-blog-with-toto-and-heroku-2962.html"&gt;Publicity on RubyInside&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.usabilitypost.com/2010/02/06/blogging-simplified/"&gt;Info on migration at Usability Post&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://thechangelog.com/post/1179362218/github-follow-friday"&gt;The ChangeLog follow Friday&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.flickr.com/photos/22058765@N02/3951267367/"&gt;Yellow brick photo attribution&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</content>
  </entry>
  <entry>
    <title>Spy on external HTTP API requests in Rails</title>
    <link href="http://beyondthetype.com/2009/11/16/spy-on-external-http-api-requests-in-rails" rel="alternate"/>
    <id>http://beyondthetype.com/2009/11/16/spy-on-external-http-api-requests-in-rails</id>
    <published>2009-11-16T00:00:00Z</published>
    <updated>2009-11-16T00:00:00Z</updated>
    <author>
      <name>Martin Sadler</name>
    </author>
    <summary type="html">&lt;p&gt;&lt;img src="http://beyondthetype.com/assets/12/apaye.png" style="float:left; padding: 3px;" alt="A.P. AYE" /&gt;
Ever had to use a third party API through a gem or library in your
Rails app and wondered where the requests are going to?&lt;/p&gt;
</summary>
    <content type="html">&lt;p&gt;&lt;img src="http://beyondthetype.com/assets/12/apaye.png" style="float:left; padding: 3px;" alt="A.P. AYE" /&gt;
Ever had to use a third party API through a gem or library in your
Rails app and wondered where the requests are going to?&lt;/p&gt;

&lt;p&gt;Through the magic of &lt;a href="http://github.com/martinbtt/net-http-spy"&gt;Net HTTP Spy&lt;/a&gt;
(a little gem I wrote) you can spy on the majority of HTTP traffic to external
API&amp;rsquo;s taking place in your Rails application.&lt;/p&gt;

&lt;h3&gt;Installation&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;&lt;pre&gt;sudo gem install martinbtt-net-http-spy&lt;/pre&gt;&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;Real World Example using Google Data API&amp;rsquo;s&lt;/h3&gt;

&lt;p&gt;You can now get access to pretty much any Google
application/content through their &lt;a href="http://code.google.com/apis/gdata/docs/directory.html"&gt;comprehensive set of API&amp;rsquo;s&lt;/a&gt; &amp;ndash; very handy indeed.&lt;/p&gt;

&lt;p&gt;In this example we are going to use the &lt;a href="http://doclistmanager.googlecodesamples.com/"&gt;DocList manager sample application&lt;/a&gt; as seen on
the &lt;a href="http://code.google.com/apis/gdata/articles/gdata_on_rails.html"&gt;GData on Rails tutorial pages&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;First grab the source:
&lt;code&gt;&lt;pre&gt;svn co http://gdata-samples.googlecode.com/svn/trunk/doclist/DocListManager&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;Then create a new file initializers/api_logging.rb and add the following:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;if ENV.has_key?('API\_LOGGING')
  gem 'martinbtt-net-http-spy'
  require 'net-http-spy'
  Net::HTTP.http_logger = Rails.logger
  Net::HTTP.http\_logger\_options = {:body =&amp;gt; true} if ENV['API\_LOGGING\_FULL']
end
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Sample Usage and Output:&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;API_LOGGING=true ./script/server
Processing DoclistController#documents (for 127.0.0.1 at 2009-11-14 20:24:47) [POST]
  Parameters: {"authenticity_token"=&amp;gt;"76e735433a9459f28a2dfb23090dec203b73e65c"}
CONNECT: ["docs.google.com", 80]
GET /feeds/default/private/full/-/document/mine
PARAMS {} 
BODY: Net::HTTPOK
Rendered doclist/_documents_list (7.4ms)
Completed in 1672ms (View: 11 | 200 OK [http://localhost/]

Processing DoclistController#show (for 127.0.0.1 at 2009-11-14 20:24:49) [POST]
  Parameters: {"url"=&amp;gt;"http://docs.google.com/feeds/default/private/full/document:0BUjxlHAOrFICZGh1aGdrZ18xM2ZudGt3M2Zz", "authenticity_token"=&amp;gt;"76e735434a9459f08a2dfb23090dec203b73e65c"}
CONNECT: ["docs.google.com", 80]
GET /feeds/default/private/expandAcl/document:0BUjxlHAOrFICZGh1aGdrZ18xM2ZudGt3M2Zz
PARAMS {} 
BODY: Net::HTTPOK
CONNECT: ["docs.google.com", 80]
GET /feeds/download/documents/Export?docID=0BUjxlHAOrFICZGh1aGdrZ18xM2ZudGt3M2Zz&amp;amp;exportFormat=png
PARAMS {} 
BODY: Net::HTTPOK
Rendered doclist/_show (7.7ms)
Completed in 2515ms (View: 15 | 200 OK [http://localhost/doclist/show]
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Note 1: By setting  API_LOGGING=full the BODY: portion of the logging output will be replaced with the
actual body response from the server. In this case it is the XML used to display the documents.&lt;/p&gt;

&lt;p&gt;Note 2: Not all API libs are built the same and many interact with Net::HTTP in ways not easy
to capture. Also be warned.. this modifies the Net::HTTP class directly so be careful if
you intend using this in production.&lt;/p&gt;

&lt;h2&gt;Summary&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://github.com/martinbtt/net-http-spy"&gt;Net HTTP spy&lt;/a&gt; provides a great way to peek at what is going on under the hood of your application and find out
which http requests are being made to third parties. I&amp;rsquo;ve used this technique successfully with my team at work
to track down API issues and I&amp;rsquo;ve also had numerous reports of other developers making use of the gem for the same reasons.&lt;/p&gt;

&lt;p&gt;I hope you find this post helpful and if you have any further questions or feedback feel free to ask in the comments
section.&lt;/p&gt;

&lt;h2&gt;Quick Reference&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;HTTP Spy on GitHub: &lt;a href="http://github.com/martinbtt/net-http-spy"&gt;http://github.com/martinbtt/net-http-spy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GData on Rails tutorials: &lt;a href="http://code.google.com/apis/gdata/articles/gdata_on_rails.html"&gt;http://code.google.com/apis/gdata/articles/gdata_on_rails.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Google API Directory: &lt;a href="http://code.google.com/apis/gdata/docs/directory.html"&gt;http://code.google.com/apis/gdata/docs/directory.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</content>
  </entry>
  <entry>
    <title>Edge Monkeybars</title>
    <link href="http://beyondthetype.com/2008/12/04/edge-monkeybars" rel="alternate"/>
    <id>http://beyondthetype.com/2008/12/04/edge-monkeybars</id>
    <published>2008-12-04T00:00:00Z</published>
    <updated>2008-12-04T00:00:00Z</updated>
    <author>
      <name>Martin Sadler</name>
    </author>
    <summary type="html">&lt;p&gt;&lt;img src="http://beyondthetype.com/assets/10/monkey-keyboard.gif" style="float: left; padding: 5px; width: 150px" alt="monkey at keyboard" /&gt;
&lt;a href="http://monkeybars.rubyforge.org"&gt;Monkeybars&lt;/a&gt;  lets you create elegant looking cross platform desktop apps with &lt;a href="http://jruby.codehaus.org/"&gt;JRuby&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You&amp;rsquo;ll want to play with the &lt;a href="http://gitorious.org/projects/monkeybars/repos/monkeybars-with-inline-ruby-swing"&gt;latest&lt;/a&gt; and &lt;a href="http://gitorious.org/projects/monkeybars/repos/mainline"&gt;greatest&lt;/a&gt; versions of &lt;a href="http://monkeybars.rubyforge.org"&gt;Monkeybars&lt;/a&gt; without conflicting with your current gem install. Here is a little guide on how to do just that&amp;hellip;&lt;/p&gt;
</summary>
    <content type="html">&lt;p&gt;&lt;img src="http://beyondthetype.com/assets/10/monkey-keyboard.gif" style="float: left; padding: 5px; width: 150px" alt="monkey at keyboard" /&gt;
&lt;a href="http://monkeybars.rubyforge.org"&gt;Monkeybars&lt;/a&gt;  lets you create elegant looking cross platform desktop apps with &lt;a href="http://jruby.codehaus.org/"&gt;JRuby&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You&amp;rsquo;ll want to play with the &lt;a href="http://gitorious.org/projects/monkeybars/repos/monkeybars-with-inline-ruby-swing"&gt;latest&lt;/a&gt; and &lt;a href="http://gitorious.org/projects/monkeybars/repos/mainline"&gt;greatest&lt;/a&gt; versions of &lt;a href="http://monkeybars.rubyforge.org"&gt;Monkeybars&lt;/a&gt; without conflicting with your current gem install. Here is a little guide on how to do just that.&lt;/p&gt;

&lt;br style="clear: both" /&gt;


&lt;h3&gt;Download&lt;/h3&gt;

&lt;p&gt;Fire up a terminal and enter the following:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;pre&gt;mkdir -p ~/code/gems
git clone git://gitorious.org/monkeybars/mainline.git monkeybars-mainline
cd monkeybars-mainline
rake jar
mate ~/.bash_profile&lt;/pre&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This might take a while so grab a cup of coffee while you wait. At last count the Monkeybars repo was ~90MB.&lt;/p&gt;

&lt;h3&gt;Edit your bash profile&lt;/h3&gt;

&lt;p&gt;Once your bash profile pops up in Textmate add the following to the bottom of it:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;pre&gt;function monkeybars-edge() {
 ruby ~/code/gems/monkeybars-mainline/bin/monkeybars $1 $2
}&lt;/pre&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Great, almost there. You&amp;rsquo;ll just need to reload you bash profile, so either start a new terminal or run the following
&lt;code&gt;&lt;pre&gt;. ~/.bash_profile&lt;/pre&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Note the leading dot.&lt;/p&gt;

&lt;h3&gt;Result?&lt;/h3&gt;

&lt;p&gt;Lets see if that worked:
&lt;code&gt;&lt;pre&gt;
martin$ monkeybars-edge myapp
Creating directory myapp
Copying monkeybars project structure
&lt;/pre&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Excellent.&lt;/p&gt;

&lt;h3&gt;Anything else?&lt;/h3&gt;

&lt;p&gt;The version of Monkeybars added to the classpath in src/manifest.rb is likely to be an older one. If you peek in the lib/java directory you&amp;rsquo;ll see which version you have. Update the manifest line accordingly. In the example below it was  0.6.4 and I updated to 0.6.5.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;pre&gt;require &amp;lsquo;resolver&amp;rsquo;&lt;/p&gt;

&lt;p&gt;case Monkeybars::Resolver.run_location
when Monkeybars::Resolver::IN_FILE_SYSTEM
  add_to_classpath &amp;lsquo;../lib/java/monkeybars-0.6.5.jar&amp;rsquo;
end
&lt;/pre&gt;&lt;/code&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Tweetobix</title>
    <link href="http://beyondthetype.com/2008/11/22/tweetobix" rel="alternate"/>
    <id>http://beyondthetype.com/2008/11/22/tweetobix</id>
    <published>2008-11-22T00:00:00Z</published>
    <updated>2008-11-22T00:00:00Z</updated>
    <author>
      <name>Martin Sadler</name>
    </author>
    <summary type="html">&lt;p&gt;Published as a follow up to my talk given at &lt;a href="http://www.rubyinside.com/ruby-manor-experimental-ruby-conference-in-london-november-22-2008-1224.html"&gt;RubyManor&lt;/a&gt; in November 2008.&lt;/p&gt;

&lt;p&gt;A &lt;a href="http://jruby.codehaus.org/"&gt;JRuby&lt;/a&gt; &lt;a href="http://twitter.com"&gt;Twitter&lt;/a&gt; client built using &lt;a href="http://monkeybars.rubyforge.org/"&gt;MonkeyBars&lt;/a&gt;.  As demo&amp;rsquo;d at &lt;a href="http://rubymanor.org"&gt;RubyManor&lt;/a&gt;!&lt;/p&gt;
</summary>
    <content type="html">&lt;p&gt;Published as a follow up to my talk given at &lt;a href="http://www.rubyinside.com/ruby-manor-experimental-ruby-conference-in-london-november-22-2008-1224.html"&gt;RubyManor&lt;/a&gt; in November 2008.&lt;/p&gt;

&lt;p&gt;A &lt;a href="http://jruby.codehaus.org/"&gt;JRuby&lt;/a&gt; &lt;a href="http://twitter.com"&gt;Twitter&lt;/a&gt; client built using &lt;a href="http://monkeybars.rubyforge.org/"&gt;MonkeyBars&lt;/a&gt;.  As demo&amp;rsquo;d at &lt;a href="http://rubymanor.org"&gt;RubyManor&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;&lt;img src="http://beyondthetype.com/assets/7/tweetobix_login.png" alt="Tweetobix login" /&gt;&lt;/p&gt;

&lt;h3&gt;Before you start&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://dist.codehaus.org/jruby/"&gt;JRuby&lt;/a&gt; (latest version &amp;ndash; currently 1.1.5) (including copy of &lt;a href="http://repository.codehaus.org/org/jruby/jruby-complete/1.1.5/jruby-complete-1.1.5.jar"&gt;jruby-complete.jar&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.netbeans.org/downloads/index.html"&gt;NetBeans&lt;/a&gt; (full version)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://monkeybars.rubyforge.org/"&gt;Monkeybars&lt;/a&gt; gem (sudo gem install monkeybars)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://rawr.rubyforge.org/"&gt;Rawr&lt;/a&gt; gem (sudo gem install rawr -v 0.3.2)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://twitter.com"&gt;Twitter&lt;/a&gt; gem  (jruby -S gem install twitter)&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Create the App skeleton&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;&lt;pre&gt;
  $. monkeybars projectname
  $. cd projectname
  $. rawr install
  # (choose option 2)
  $. jruby -S rake generate ALL=&amp;lsquo;src/login&amp;rsquo;
&lt;/pre&gt;&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;Install Gems &amp;amp; Unpack Gems&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;&lt;pre&gt;
  $. jruby -S gem install twitter
  $. cd lib/ruby
  $. jruby -S gem unpack twitter
  $. jruby -S gem unpack hpricot
&lt;/pre&gt;&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;Enter NetBeans&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;File &amp;gt; New Project.  Choose Java category &amp;gt; Java Project with existing sources&lt;/li&gt;
&lt;li&gt;Give your app a name and set project folder to where you created your app [hit next]&lt;/li&gt;
&lt;li&gt;Exsisting sources &amp;ndash; choose the src directory in your app [hit finish]&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;Your project will now appear in NetBeans. There are a couple more things to do before you can begin.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In a terminal (not NetBeans) copy jruby-complete.jar into the lib/java directory.&lt;/li&gt;
&lt;li&gt;Back in NetBeans.. right click the Libraries folder. Choose &amp;lsquo;Add Jar/Folder&amp;rsquo; and choose jruby-complete.jar you just added.&lt;/li&gt;
&lt;li&gt;Again right click on the Libraries folder and choose &amp;lsquo;Add Library&amp;hellip;&amp;rsquo;  and select &amp;lsquo;Swing Layout Extensions&amp;rsquo;&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;Next we setup a frame to display the GUI for the login:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Right click on login directory. Choose &amp;lsquo;New &amp;gt; New Frame Form&amp;rsquo;.&lt;/li&gt;
&lt;li&gt;Name it &amp;lsquo;LoginFrame&amp;rsquo; (it can be anything you like but probably best sticking with  NameFrame convention)&lt;/li&gt;
&lt;li&gt;You can now start building your interface. woot!&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;Remember to update your login_view.rb with the name of the frame. e.g.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;pre&gt;
class LoginView &amp;lt; ApplicationView
  set_java_class &amp;lsquo;login.LoginFrame
&lt;/pre&gt;&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;Running the project&lt;/h3&gt;

&lt;p&gt;Still in NetBeans.. Hit the run (play icon) button. It will ask which class you want to choose for the &amp;lsquo;main class&amp;rsquo;.
Choose &amp;lsquo;org.rubyforge.rawr.Main&amp;rsquo;.&lt;/p&gt;

&lt;p&gt;Note, if things don&amp;rsquo;t go to plan you can still set this by right clicking on the project name and choosing from the menu &amp;lsquo;Set Configuration &amp;gt; Customize&amp;hellip;&amp;rsquo;. The main class can be set in the &amp;lsquo;Run&amp;rsquo; section of the configuration dialog that pops up.&lt;/p&gt;

&lt;h3&gt;Packaging for distribution&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;&lt;pre&gt;
rake rawr:bundle:app    # Bundles the jar from rawr:jar into a native Mac OS X application (.app)
rake rawr:bundle:exe    # Bundles the jar from rawr:jar into a native Windows application (.exe)
rake rawr:bundle:web    # Bundles the jar from rawr:jar into a Java Web Start application (.jnlp)
&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;h3&gt;Gotchas&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Embedding images in Netbeans kills the rawr build (null.pointer.exception) &amp;ndash; there is a workaround for this in rawr 1.0&lt;/li&gt;
&lt;li&gt;Some Ruby gems won&amp;rsquo;t run on JRuby e.g. Twitter4R&lt;/li&gt;
&lt;li&gt;Hpricot doesn&amp;rsquo;t compile using the latest version of RAWR&lt;/li&gt;
&lt;li&gt;Monkeybars doesn&amp;rsquo;t seem to require frozen gems automatically from lib/ruby&lt;/li&gt;
&lt;li&gt;Make sure you have jruby-complete.jar and  swing-layout-1.0.3.jar in you lib/java directory&lt;/li&gt;
&lt;li&gt;Both those jars need to be added to the manifest for packaging.&lt;/li&gt;
&lt;li&gt;Sometimes build paths get set incorrectly, and it can be difficult to find out why..&lt;/li&gt;
&lt;li&gt;Have to remove all mention of &amp;ldquo;require &amp;lsquo;rubygems&amp;rsquo;&amp;rdquo; from frozen gems to make packaging work?!&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Sample Application &amp;ndash; Download and Source code&lt;/h3&gt;

&lt;p&gt;Coming Soon!&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Download for Mac (app)&lt;/li&gt;
&lt;li&gt;Download for Windows (.exe)&lt;/li&gt;
&lt;li&gt;Download for Linux and all other platforms (jar)&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;Source Code:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
 git clone git://github.com/martinbtt/tweetobix.git
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;Or go direct to the &lt;a href="http://github.com/martinbtt/tweetobix"&gt;Tweetobix project page on github&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Useful Resources&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;http://www.ibm.com/developerworks/java/library/j-monkeybars/index.html&lt;/li&gt;
&lt;li&gt;http://groups.google.com/group/monkeybars&lt;/li&gt;
&lt;li&gt;http://groups.google.com/group/rawr-lib&lt;/li&gt;
&lt;li&gt;http://jruby.codehaus.org&lt;/li&gt;
&lt;li&gt;http://monkeybars.rubyforge.org/tutorials/usage2.html  &amp;ndash; Hello world app&lt;/li&gt;
&lt;li&gt;http://jrubyinside.com&lt;/li&gt;
&lt;li&gt;http://wiki.jruby.org/wiki/Main_Page&lt;/li&gt;
&lt;li&gt;http://java.sun.com/developer/onlineTraining/tools/netbeans_part1&lt;/li&gt;
&lt;li&gt;http://monkeybars.rubyforge.org/api/index.html&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Notes&lt;/h3&gt;

&lt;p&gt;At the time of writing there are a few aspects of the packaging process that are not working. (See gotchas&amp;hellip;)
Hopefully with a bit of further investigation and feedback we can get it working.  I will keep updating this page as things progress.&lt;/p&gt;

&lt;h3&gt;Screenshots&lt;/h3&gt;

&lt;p&gt;&lt;img src="http://beyondthetype.com/assets/9/tweetobix_main.gif" alt="Tweetobix main page" /&gt;&lt;/p&gt;

&lt;p&gt;Tweetobix friends timeline page and tweet box.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>RailsConf Europe presentation slides now published</title>
    <link href="http://beyondthetype.com/2008/09/08/railsconf-europe-presentation-slides-now-published" rel="alternate"/>
    <id>http://beyondthetype.com/2008/09/08/railsconf-europe-presentation-slides-now-published</id>
    <published>2008-09-08T00:00:00Z</published>
    <updated>2008-09-08T00:00:00Z</updated>
    <author>
      <name>Martin Sadler</name>
    </author>
    <summary type="html">&lt;p&gt;The presentation files from the talk I gave at RailsConf Europe are now available for download.&lt;/p&gt;

&lt;p&gt;Direct link: &lt;a href="http://assets.en.oreilly.com/1/event/13/Stories%20on%20a%20Cloud%20-%20Distributed%20Browser%20Testing%20with%20Selenium%20Presentation%201.pdf"&gt;Stories on a Cloud &amp;ndash; Distributed Browser Testing with Selenium Presentation&lt;/a&gt; (PDF format)&amp;hellip;&lt;/p&gt;
</summary>
    <content type="html">&lt;p&gt;The presentation files from the talk I gave at RailsConf Europe are now available for download.&lt;/p&gt;

&lt;p&gt;Direct link: &lt;a href="http://assets.en.oreilly.com/1/event/13/Stories%20on%20a%20Cloud%20-%20Distributed%20Browser%20Testing%20with%20Selenium%20Presentation%201.pdf"&gt;Stories on a Cloud &amp;ndash; Distributed Browser Testing with Selenium Presentation&lt;/a&gt; (PDF format).&lt;/p&gt;

&lt;p&gt;I really enjoyed giving the talk and their seemed to be enough interest for follow up material. All good!
I&amp;rsquo;ll be publishing supporting links and research details very soon, so watch this space.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Speaking at RailsConf Europe</title>
    <link href="http://beyondthetype.com/2008/09/02/speaking-at-railsconf-europe" rel="alternate"/>
    <id>http://beyondthetype.com/2008/09/02/speaking-at-railsconf-europe</id>
    <published>2008-09-02T00:00:00Z</published>
    <updated>2008-09-02T00:00:00Z</updated>
    <author>
      <name>Martin Sadler</name>
    </author>
    <summary type="html">&lt;p&gt;A quick shout about our talk tomorrow at &lt;a href="http://www.railsconfeurope.com"&gt;RailsConf Europe&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://www.beyondthetype.com/assets/6/stories_on_a_cloud.jpg" alt="Stories on a Cloud - Distributed Browser Testing with Selenium" /&gt;&lt;/p&gt;
</summary>
    <content type="html">&lt;p&gt;A quick shout about our talk tomorrow at &lt;a href="http://www.railsconfeurope.com"&gt;RailsConf Europe&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://www.beyondthetype.com/assets/6/stories_on_a_cloud.jpg" alt="Stories on a Cloud - Distributed Browser Testing with Selenium" /&gt;&lt;/p&gt;

&lt;p&gt;Drive your browser (or somebody else&amp;rsquo;s!) through an RSpec story. In this talk I&amp;rsquo;ll be covering Rspec stories, Selenium, message queues, packaging your apps for cross platform distribution, and more!&lt;/p&gt;

&lt;p&gt;Read more info over at the &lt;a href="http://en.oreilly.com/railseurope2008/public/schedule/detail/3507"&gt;O'Reilly Conference page&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Is this thing on? Converted to Radiant from Mephisto</title>
    <link href="http://beyondthetype.com/2008/07/29/is-this-thing-on-converted-to-radiant-from-mephisto" rel="alternate"/>
    <id>http://beyondthetype.com/2008/07/29/is-this-thing-on-converted-to-radiant-from-mephisto</id>
    <published>2008-07-29T00:00:00Z</published>
    <updated>2008-07-29T00:00:00Z</updated>
    <author>
      <name>Martin Sadler</name>
    </author>
    <summary type="html">&lt;p&gt;More news to follow shortly..&lt;/p&gt;

&lt;p&gt;&lt;img src="http://www.beyondthetype.com/assets/5/lightswitch_thumbnail.jpg" alt="Light Switch" /&gt;&lt;/p&gt;

&lt;p&gt;sneak peak: &lt;a href="http://github.com/martinbtt/radiant-import-mephisto"&gt;http://github.com/martinbtt/radiant-import-mephisto&lt;/a&gt;&lt;/p&gt;
</summary>
    <content type="html">&lt;p&gt;More news to follow shortly..&lt;/p&gt;

&lt;p&gt;&lt;img src="http://www.beyondthetype.com/assets/5/lightswitch_thumbnail.jpg" alt="Light Switch" /&gt;&lt;/p&gt;

&lt;p&gt;sneak peak: &lt;a href="http://github.com/martinbtt/radiant-import-mephisto"&gt;http://github.com/martinbtt/radiant-import-mephisto&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>New RSS feed URL</title>
    <link href="http://beyondthetype.com/2008/01/03/new-rss-feed-url" rel="alternate"/>
    <id>http://beyondthetype.com/2008/01/03/new-rss-feed-url</id>
    <published>2008-01-03T00:00:00Z</published>
    <updated>2008-01-03T00:00:00Z</updated>
    <author>
      <name>Martin Sadler</name>
    </author>
    <summary type="html">&lt;p&gt;Just a quick note to say the RSS feed for this blog has changed. Please update your feed reader to use:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feeds.feedburner.com/BeyondTheType"&gt;http://feeds.feedburner.com/BeyondTheType&lt;/a&gt;&lt;/p&gt;
</summary>
    <content type="html">&lt;p&gt;Just a quick note to say the RSS feed for this blog has changed. Please update your feed reader to use:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feeds.feedburner.com/BeyondTheType"&gt;http://feeds.feedburner.com/BeyondTheType&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>New Year, New start. Hello CitySafe</title>
    <link href="http://beyondthetype.com/2008/01/02/new-year-new-start-hello-citysafe" rel="alternate"/>
    <id>http://beyondthetype.com/2008/01/02/new-year-new-start-hello-citysafe</id>
    <published>2008-01-02T00:00:00Z</published>
    <updated>2008-01-02T00:00:00Z</updated>
    <author>
      <name>Martin Sadler</name>
    </author>
    <summary type="html">&lt;p&gt;As of January this year I&amp;rsquo;m pleased to announce I will be working with
the &lt;a href="http://workingwithrails.com/search?q=citysafe"&gt;team&lt;/a&gt; at &lt;a href="http://www.citysafe.org"&gt;CitySafe&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;CitySafe build tools to help emergency responders collaborate and communicate&amp;hellip;&lt;/p&gt;
</summary>
    <content type="html">&lt;p&gt;As of January this year I&amp;rsquo;m pleased to announce I will be working with
the &lt;a href="http://workingwithrails.com/search?q=citysafe"&gt;team&lt;/a&gt; at &lt;a href="http://www.citysafe.org"&gt;CitySafe&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;CitySafe build tools to help emergency responders collaborate and communicate.
These include mission critical apps in use daily by the Police, Government, and high profile financial and retail institutions.
It&amp;rsquo;s predominately Ruby (on Rails) based so I&amp;rsquo;m looking forward to getting stuck in.&lt;/p&gt;

&lt;p&gt;For those of you wondering about &lt;a href="http://www.workingwithrails.com"&gt;Working With Rails&lt;/a&gt;&amp;hellip;.
This remains under ownership of  &lt;a href="http://www.dsc.net"&gt;DSC&lt;/a&gt; and I have passed all the day to day running over to colleagues there.  Prior to my departure I ensured that the Hackfests would continue up until March. Much thanks goes to Josette @ &lt;a href="http://www.oreilly.com/"&gt;O'Reilly&lt;/a&gt; for the &lt;a href="http://www.railsconf.com"&gt;RailsConf&lt;/a&gt; ticket prizes.&lt;/p&gt;

&lt;p&gt;All in all WWR has been an amazing project. I&amp;rsquo;m so pleased to have created it and see it grow from strength to strength benefiting the community so greatly. Many thanks to everyone who uses the site and contributed in some way over the past year. It has been fantastic to have your input and feedback.&lt;/p&gt;

&lt;p&gt;I&amp;rsquo;ve heard many success stories from developers starting user groups as a result of finding each other on WWR, to getting a job through recommendations, collaborating on projects or helping to get Rails adopted in their workplace.
Not forgetting to mention the numerous prizes given away through the regular Hackfests.&lt;/p&gt;

&lt;p&gt;I hope it has benefited you in some way and continues to do so.  Thanks everyone!&lt;/p&gt;

&lt;p&gt;Stay tuned&amp;hellip;&lt;/p&gt;

&lt;p&gt;Continue to keep up with my news via this blog (&lt;a href="http://feeds.feedburner.com/BeyondTheType"&gt;rss&lt;/a&gt;) and via &lt;a href="http://twitter.com/martinbtt"&gt;Twitter&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
</feed>
