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

<channel>
	<title>AdaRuby &#187; Plugins</title>
	<atom:link href="http://www.adaruby.com/category/plugins/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.adaruby.com</link>
	<description>Rich Dynamic Applications with Ruby on Rails</description>
	<lastBuildDate>Fri, 02 Jul 2010 09:06:16 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Advanced Rails: Go to the next level with Rails</title>
		<link>http://www.adaruby.com/2008/03/16/advanced-rails-go-to-the-next-level-with-rails/</link>
		<comments>http://www.adaruby.com/2008/03/16/advanced-rails-go-to-the-next-level-with-rails/#comments</comments>
		<pubDate>Sun, 16 Mar 2008 08:00:52 +0000</pubDate>
		<dc:creator>ceefour</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[book]]></category>

		<guid isPermaLink="false">http://adaruby.com/2008/03/16/advanced-rails-go-to-the-next-level-with-rails/</guid>
		<description><![CDATA[
			
				
			
		

Advanced Rails offers you an in-depth look at techniques for dealing with databases, security, performance, web services and much more.
O&#8217;Reilly Media, Inc. published an intermediate-to-expert Rails book, authored by Brad Ediger:
Chapters in this book help you understand not only the tricks and techniques used within the Rails framework itself, but also how to make use [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.adaruby.com%2F2008%2F03%2F16%2Fadvanced-rails-go-to-the-next-level-with-rails%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.adaruby.com%2F2008%2F03%2F16%2Fadvanced-rails-go-to-the-next-level-with-rails%2F&amp;source=AdaRubyWeb&amp;style=normal&amp;service=bit.ly" height="61" width="50" title="Advanced Rails: Go to the next level with Rails" alt=" Advanced Rails: Go to the next level with Rails" /><br />
			</a>
		</div>
<p><a href="http://www.amazon.com/gp/product/0596510322?ie=UTF8&amp;tag=adaruby-20&amp;link_code=as3&amp;camp=211189&amp;creative=373489&amp;creativeASIN=0596510322" rel="nofollow"  title="Advanced Rails book cover"><img src="http://localhost/~ceefour/adaruby.com/wp-content/uploads/2008/03/212klm7sfl_aa_sl160_.jpg" alt="Advanced Rails" title="Advanced Rails: Go to the next level with Rails" /></a></p>
<p><strong><a href="http://www.amazon.com/dp/0596510322?tag=adaruby-20&amp;camp=0&amp;creative=0&amp;linkCode=as1&amp;creativeASIN=0596510322&amp;adid=16BDDCJ0N0X01HK3VGQ0&amp;" rel="nofollow"  title="Advanced Rails on Amazon.com">Advanced Rails</a></strong> offers you an in-depth look at techniques for dealing with databases, security, performance, web services and much more.</p>
<p><a href="http://www.oreilly.com/" rel="nofollow" >O&#8217;Reilly Media</a>, Inc. published an intermediate-to-expert Rails book, authored by <a href="http://www.amazon.com/exec/obidos/search-handle-url/103-4936069-1092629?%5Fencoding=UTF8&amp;search-type=ss&amp;index=books&amp;field-author=Brad%20Ediger" rel="nofollow" >Brad Ediger</a>:</p>
<blockquote><p>Chapters in this book help you understand not only the tricks and techniques used within the Rails framework itself, but also how to make use of ideas borrowed from other programming paradigms. Advanced Rails pays particular attention to building applications that scale &#8212; whether &#8220;scale&#8221; means handling more users, or working with a bigger and more complex database.</p></blockquote>
<blockquote></blockquote>
<p>You&#8217;ll find plenty of examples and code samples that explain:</p>
<blockquote>
<ul>
<li>Aspects of Ruby that are often confusing or misunderstood</li>
<li>Metaprogramming</li>
<li>How to develop Rails plug-ins Different database management systems</li>
<li>Advanced database features, including triggers, rules, and stored procedures</li>
<li>How to connect to multiple databases</li>
<li>When to use the Active Support library for generic, reusable functions Security principles for web application design, and security issues endemic to the Web When and when not to optimize performance</li>
<li>Why version control and issue tracking systems are essential to any large or long-lived Rails project</li>
<li>Advanced Rails also gives you a look at REST for developing web services, ways to incorporate and extend Rails, how to use internationalization, and many other topics.</li>
</ul>
</blockquote>
<p><a href="http://www.amazon.com/dp/0596510322?tag=adaruby-20&amp;camp=14573&amp;creative=327641&amp;linkCode=as1&amp;creativeASIN=0596510322&amp;adid=1B5PH5PSP8TRB70WQNQC&amp;" rel="nofollow" >Advanced Rails</a> is an essential resource for improving your skills on Rails through advanced techniques.</p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.adaruby.com/2008/03/16/advanced-rails-go-to-the-next-level-with-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Overview of A Rails Plugin</title>
		<link>http://www.adaruby.com/2008/01/27/overview-of-a-rails-plugin/</link>
		<comments>http://www.adaruby.com/2008/01/27/overview-of-a-rails-plugin/#comments</comments>
		<pubDate>Sun, 27 Jan 2008 11:48:23 +0000</pubDate>
		<dc:creator>ceefour</dc:creator>
				<category><![CDATA[Beginner]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[294]]></category>
		<category><![CDATA[296]]></category>
		<category><![CDATA[344]]></category>

		<guid isPermaLink="false">http://adaruby.com/2008/01/27/overview-of-a-rails-plugin/</guid>
		<description><![CDATA[
			
				
			
		
A common stumbling block for beginner Rails developers is learning the basics required to write plugins. This is made more complicated by the fact that Ruby is inherently dynamic and offers many techniques for code reuse.
Luckily, if you can write Rails applications you can write plugins by simply drawing on a handful of basic patterns.
Why [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.adaruby.com%2F2008%2F01%2F27%2Foverview-of-a-rails-plugin%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.adaruby.com%2F2008%2F01%2F27%2Foverview-of-a-rails-plugin%2F&amp;source=AdaRubyWeb&amp;style=normal&amp;service=bit.ly" height="61" width="50" title="Overview of A Rails Plugin" alt=" Overview of A Rails Plugin" /><br />
			</a>
		</div>
<p><a href="http://www.alexyoung.org/" rel="nofollow" >A common stumbling block for beginner Rails developers</a> is learning the basics required to write plugins. This is made more complicated by the fact that Ruby is inherently dynamic and offers many techniques for code reuse.</p>
<p>Luckily, if you can write Rails applications you can write plugins by simply drawing on a handful of basic patterns.</p>
<p><strong>Why write plugins?</strong></p>
<blockquote><p>Writing a plugin will:</p>
<ul>
<li>Help make sharing code more efficient, whether it’s between projects or within the same project</li>
<li>Allow you to publish generic code to the community</li>
<li>Save time and increase your confidence by testing once and reusing many times</li>
<li>Share functionality in a robust manner, especially when using namespaces with ActiveRecord</li>
</ul>
</blockquote>
<p><strong>Usage</strong></p>
<blockquote><p>Rails provides installation scripts through <tt>script/plugin install</tt>, and a generator for creating new plugins: <tt>script/generate plugin</tt>. These will work with URLs, saving time when trying out plugins. You can read more about installing and managing plugins at the <a href="http://wiki.rubyonrails.org/rails/pages/Plugins" rel="nofollow" >Rails wiki</a>.</p></blockquote>
<p><strong>Rubyisms</strong></p>
<blockquote><p>Any of the following tools and techniques provided by Ruby are used by plugins to extend functionality:</p>
<ul>
<li>Mixins: including or extending classes using modules</li>
<li>Opening a class or module definition and adding or overriding methods</li>
<li>Dynamic extension through callbacks and hooks: <tt>method_missing</tt>, <tt>Class#inherited</tt>, <tt>Module#const_missing</tt>, <tt>Module#included</tt></li>
<li>Dynamic extension through code generation: <tt>eval</tt>, <tt>class_eval</tt>, <tt>instance_eval</tt></li>
</ul>
<p>These techniques fall into two broad categories:</p>
<ul>
<li>Using modules and classes to extend existing classes, providing new features</li>
<li>Using introspection to adapt generic code to specific cases</li>
</ul>
<p>It’s important to consider exactly what should be extended when writing a plugin. If complex meta-programming to adapt your plugin to the host application is required, care should be taken to ensure concurrency will not produce unexpected results.</p></blockquote>
<p>Hopefully this very short summary clears things a bit. Read more on  <a href="http://alexyoung.org/articles/show/40/a_taxonomy_of_rails_plugins" rel="nofollow" >Alex Young&#8217;s article</a>.</p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.adaruby.com/2008/01/27/overview-of-a-rails-plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sexy Time Zones in Ruby on Rails with Timezone_Fu</title>
		<link>http://www.adaruby.com/2008/01/21/sexy-time-zones-in-ruby-on-rails-with-timezone_fu/</link>
		<comments>http://www.adaruby.com/2008/01/21/sexy-time-zones-in-ruby-on-rails-with-timezone_fu/#comments</comments>
		<pubDate>Mon, 21 Jan 2008 11:23:17 +0000</pubDate>
		<dc:creator>ceefour</dc:creator>
				<category><![CDATA[Cool]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[296]]></category>
		<category><![CDATA[299]]></category>
		<category><![CDATA[315]]></category>
		<category><![CDATA[316]]></category>
		<category><![CDATA[344]]></category>
		<category><![CDATA[361]]></category>
		<category><![CDATA[362]]></category>
		<category><![CDATA[363]]></category>

		<guid isPermaLink="false">http://adaruby.com/2008/01/21/sexy-time-zones-in-ruby-on-rails-with-timezone_fu/</guid>
		<description><![CDATA[
			
				
			
		
As easy as:
has_timezone :fields =&#62; [ :start_datetime, :end_datetime]
Timezone_fu makes it really easy to deal with datetime fields in your models. It adds a method to your models, has_timezone.
The README for the plugin describes all of the options but below is an example:

class Event &#60; ActiveRecord::Base
    has_timezone :fields =&#62; [ :start_datetime, :end_datetime]
end

The  [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.adaruby.com%2F2008%2F01%2F21%2Fsexy-time-zones-in-ruby-on-rails-with-timezone_fu%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.adaruby.com%2F2008%2F01%2F21%2Fsexy-time-zones-in-ruby-on-rails-with-timezone_fu%2F&amp;source=AdaRubyWeb&amp;style=normal&amp;service=bit.ly" height="61" width="50" title="Sexy Time Zones in Ruby on Rails with Timezone Fu" alt=" Sexy Time Zones in Ruby on Rails with Timezone Fu" /><br />
			</a>
		</div>
<p>As easy as:<br />
<code>has_timezone :fields =&gt; [ :start_datetime, :end_datetime]</code><br />
<a href="http://hackd.wordpress.com/2007/11/23/sexy-time-zones-in-ruby-on-rails-with-timezone_fu/" rel="nofollow" >Timezone_fu</a> makes it really easy to deal with datetime fields in your models. It adds a method to your models, <strong>has_timezone</strong>.</p>
<blockquote><p>The README for the plugin describes all of the options but below is an example:</p></blockquote>
<blockquote>
<pre><tt>class Event &lt; ActiveRecord::Base
</tt><tt>    has_timezone :fields =&gt; [ :start_datetime, :end_datetime]
</tt><tt>end</tt></pre>
</blockquote>
<blockquote><p>The  model has three fields a start_datetime and end_datetime and a timezone. Adding has_timezone to the model changes the behavior of the two datetime attributes.<br />
Notice below that calling event.start_datetime shows the time in local time (”America/New York”).</p>
<pre><tt>&gt;&gt;</tt><tt> event = Event.find(:first</tt><tt>)</tt><tt></tt><tt>=&gt; #&lt;Event:0×1b71b40 @attributes={</tt>
 <tt>      “end_datetime”   =&gt; “2007-11-21 15:00:00″,
</tt><tt>      “start_datetime” =&gt; “2007-11-21 14:15:00″,
</tt><tt>      “timezone”       =&gt; “America/New_York”}</tt><tt>
</tt><tt>&gt;&gt; event.start_datetime
</tt><tt>=&gt;</tt><tt> Wed Nov 21 09:15:00 UTC 2007
</tt><tt>&gt;&gt; event.display_start_datetime
</tt><tt>=&gt; “Nov. 21, 2007 09:15 AM”</tt><tt>
</tt><tt>&gt;&gt; event.utc_start_datetime
</tt><tt>=&gt;</tt><tt> Wed Nov 21 14:15:00 UTC 2007</tt></pre>
<p>You can also set the value of the field to a local date/time and it will be converted to UTC automatically:</p>
<pre><tt>&gt;&gt; event.start_datetime = Time.now
</tt><tt>=&gt;</tt><tt> Sun Nov 25 06:26:35 +0000 2007
</tt><tt>=&gt;</tt><tt> #&lt;Biz::Event:0×1b71b40 @attributes={
</tt><tt>  “end_datetime”    =&gt;  “2007-11-21 15:00:00″</tt>
<tt>  “start_datetime”  =&gt;  Sun Nov 25 11:26:35 +0000 2007,
</tt><tt>  “timezone”        =&gt;  “America/New_York” } </tt></pre>
<p>If you want to access the fields and retrieve the database value you can use the utc_field_name method to access the UTC value of the attribute. The plugin makes a couple of core assumptions. One it assumes that the default rails timezone is UTC:</p>
<pre><tt>ENV[‘TZ’] = ‘UTC’</tt></pre>
<p>Second it assumes that the model has a timezone attribute named timezone:</p>
<pre><tt>t.column :timezone, :string, :default =&gt; ”</tt></pre>
</blockquote>
<p>Read more on:  <a href="http://hackd.wordpress.com/2007/11/23/sexy-time-zones-in-ruby-on-rails-with-timezone_fu/" rel="nofollow" >hackd.wordpress homepage</a>.</p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.adaruby.com/2008/01/21/sexy-time-zones-in-ruby-on-rails-with-timezone_fu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scraping Gmail with Mechanize and Hpricot</title>
		<link>http://www.adaruby.com/2008/01/11/scraping-gmail-with-mechanize-and-hpricot/</link>
		<comments>http://www.adaruby.com/2008/01/11/scraping-gmail-with-mechanize-and-hpricot/#comments</comments>
		<pubDate>Sat, 12 Jan 2008 00:14:00 +0000</pubDate>
		<dc:creator>ceefour</dc:creator>
				<category><![CDATA[Beginner]]></category>
		<category><![CDATA[Cool]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Praises]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[302]]></category>
		<category><![CDATA[326]]></category>
		<category><![CDATA[329]]></category>
		<category><![CDATA[336]]></category>
		<category><![CDATA[337]]></category>
		<category><![CDATA[354]]></category>
		<category><![CDATA[364]]></category>

		<guid isPermaLink="false">http://adaruby.com/2008/01/11/scraping-gmail-with-mechanize-and-hpricot/</guid>
		<description><![CDATA[
			
				
			
		
We&#8217;ve been doing a lot of scraping and mashups lately. So we&#8217;d love to share on how to do this. Fortunately Schadenfreude has written a good tutorial about using Mechanize and Hpricot to scrape Gmail.
The tutorial uses mechanize and hpricot to login to gmail and return a list of Unread emails.
Installation of required tools
 gem [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.adaruby.com%2F2008%2F01%2F11%2Fscraping-gmail-with-mechanize-and-hpricot%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.adaruby.com%2F2008%2F01%2F11%2Fscraping-gmail-with-mechanize-and-hpricot%2F&amp;source=AdaRubyWeb&amp;style=normal&amp;service=bit.ly" height="61" width="50" title="Scraping Gmail with Mechanize and Hpricot" alt=" Scraping Gmail with Mechanize and Hpricot" /><br />
			</a>
		</div>
<p>We&#8217;ve been doing a lot of scraping and mashups lately. So we&#8217;d love to share on how to do this. Fortunately <a href="http://schf.uc.org/articles/2007/02/14/scraping-gmail-with-mechanize-and-hpricot" rel="nofollow" >Schadenfreude has written a good tutorial about using Mechanize and Hpricot to scrape Gmail</a>.</p>
<p>The tutorial uses mechanize and hpricot to login to gmail and return a list of Unread emails.</p>
<p><strong>Installation of required tools</strong></p>
<blockquote><p> <code>gem install mechanize --include-dependencies<br />
</code></p></blockquote>
<blockquote><p>This will install both mechanize and hpricot.</p></blockquote>
<p><strong>Usage</strong></p>
<blockquote><p>Before we can scrape our gmail account, we will need to login. Mechanize is a lib for “automating interaction with websites”. It can store and send cookies as well so once we login our script will now have a session to putter around in as if it was a web browser.</p></blockquote>
<p>&nbsp;</p>
<blockquote>
<pre>require 'rubygems'
require 'mechanize'

agent = WWW::Mechanize.new
page = agent.get 'http://www.gmail.com'

form = page.forms.first
form.Email = '***your gmail account***'
form.Passwd = '***your password***'

page = agent.submit form</pre>
</blockquote>
<blockquote><p>After logging in gmail will try to redirect us to http://mail.google.com/mail?ui&amp;auth=DC8F…. we need to follow this link. Using hpricot we can search for the meta redirect and grab the href attribute then have mechanize follow the link.</p></blockquote>
<p>&nbsp;</p>
<blockquote><p> <code>page = agent.get page.search("//meta").first.attributes['href'].gsub(/'/,'')</code></p></blockquote>
<blockquote><p><em>Note we need to strip the single quotes from around the url, i used gsub for this.</em></p></blockquote>
<blockquote><p>The returned page will try to use javascript to load the interface but it will not work for use. Thankfully a <strong>noscript</strong> tag is included in the source and contains a helpful clue.</p></blockquote>
<blockquote>
<pre>&lt;noscript&gt;&lt;font face="arial"&gt;JavaScript must be enabled in order for you to use Gmail in standard view.
However, it seems JavaScript is either disabled or not supported by your browser.
To use standard view, enable JavaScript by changing your browser options, then &lt;a href=""&gt;try again&lt;/a&gt;.

&lt;p&gt;To use Gmail's basic HTML view, which does not require JavaScript,
&lt;a href="?ui=html&amp;zy=n"&gt;click here&lt;/a&gt;.&lt;/p&gt;&lt;/font&gt;

&lt;p&gt;&lt;font face="arial"&gt;If you want to view Gmail on a mobile phone or similar device
&lt;a href="?ui=mobile&amp;zyp=n"&gt;click here&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt;&lt;/noscript&gt;</pre>
</blockquote>
<p><strong>Full source</strong></p>
<p>&nbsp;</p>
<blockquote>
<pre>require 'rubygems'
require 'mechanize'

agent = WWW::Mechanize.new

page = agent.get 'http://www.gmail.com'
form = page.forms.first
form.Email = '***your gmail account***'
form.Passwd = '***your password***'
page = agent.submit form

page = agent.get page.search("//meta").first.attributes['href'].gsub(/'/,'')
page = agent.get page.uri.to_s.sub(/\?.*$/, "?ui=html&amp;zy=n")
page.search("//tr[@bgcolor='#ffffff']")  do |row|
from, subject = *row.search("//b/text()")
url = page.uri.to_s.sub(/ui.*$/, row.search("//a").first.attributes["href"])
puts "From: #{from}\nSubject: #{subject}\nLink: #{url}\n\n"

email = agent.get url
# ..
end</pre>
</blockquote>
<p>Enjoy the tutorial!</p>
<p>Read more on <a href="http://schf.uc.org/articles/2007/02/14/scraping-gmail-with-mechanize-and-hpricot" rel="nofollow" >Schadenfreude</a>.</p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.adaruby.com/2008/01/11/scraping-gmail-with-mechanize-and-hpricot/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Turbocharge Ruby on Rails with ActiveScaffold</title>
		<link>http://www.adaruby.com/2008/01/01/turbocharge-ruby-on-rails-with-activescaffold/</link>
		<comments>http://www.adaruby.com/2008/01/01/turbocharge-ruby-on-rails-with-activescaffold/#comments</comments>
		<pubDate>Tue, 01 Jan 2008 12:33:42 +0000</pubDate>
		<dc:creator>ceefour</dc:creator>
				<category><![CDATA[Cool]]></category>
		<category><![CDATA[GUI]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[296]]></category>
		<category><![CDATA[303]]></category>
		<category><![CDATA[304]]></category>
		<category><![CDATA[339]]></category>
		<category><![CDATA[351]]></category>
		<category><![CDATA[352]]></category>

		<guid isPermaLink="false">http://adaruby.com/2008/01/01/turbocharge-ruby-on-rails-with-activescaffold/</guid>
		<description><![CDATA[
			
				
			
		
ActiveScaffold is a plugin for Ruby on Rails (also known as Rails) that provides         dynamic model-based view generation. Instead of having to create pages by hand         that display your models, ActiveScaffold will introspect your ActiveRecord models    [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.adaruby.com%2F2008%2F01%2F01%2Fturbocharge-ruby-on-rails-with-activescaffold%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.adaruby.com%2F2008%2F01%2F01%2Fturbocharge-ruby-on-rails-with-activescaffold%2F&amp;source=AdaRubyWeb&amp;style=normal&amp;service=bit.ly" height="61" width="50" title="Turbocharge Ruby on Rails with ActiveScaffold" alt=" Turbocharge Ruby on Rails with ActiveScaffold" /><br />
			</a>
		</div>
<p><a href="http://activescaffold.com/" rel="nofollow" >ActiveScaffold</a> is a plugin for Ruby on Rails (also known as Rails) that provides         dynamic model-based view generation. Instead of having to create pages by hand         that display your models, ActiveScaffold will introspect your ActiveRecord models         and dynamically generate a CRUD (create, read, update, delete) user interface for         managing those objects.</p>
<p><strong>Installing ActiveScaffold</strong></p>
<blockquote><p> As ActiveScaffold is a Rails plugin, you can install it from a remote Web or         Subversion server. The command below will check out the ActiveScaffold plugin from         the ActiveScaffold Subversion server.</p>
<p><a title="listing1" name="listing1"></a>Install the latest version of the plugin:</p>
<pre>script/plugin install http://activescaffold.googlecode.com/svn/tags/active_scaffold</pre>
<p>Add this to your layout:</p>
<pre>&lt;%= javascript_include_tag :defaults %&gt;
&lt;%= active_scaffold_includes %&gt;</pre>
<p>Add this to your controller:</p>
<pre>active_scaffold :&lt;your_model_name&gt;</pre>
</blockquote>
<blockquote><p>for example:</p></blockquote>
<blockquote>
<pre>class UsersController &lt; ApplicationController
  active_scaffold :user
end</pre>
</blockquote>
<blockquote><p> That’s it! Your first ActiveScaffold is up and running.</p></blockquote>
<p><strong>The Model</strong></p>
<blockquote><p>Most modern Web application frameworks are based on the MVC (model, view,         controller) pattern, and Rails is no different. The model represents the data         stored in the database with each table having a corresponding         <code>ActiveRecord</code> model class in Ruby.</p>
<pre>class User &lt; ActiveRecord::Base
   belongs_to <img src='http://www.adaruby.com/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' title="Turbocharge Ruby on Rails with ActiveScaffold" /> rganization
end
class Organization &lt; ActiveRecord::Base
  has_many :projects
  has_many :users
end
class Project &lt; ActiveRecord::Base
  belongs_to <img src='http://www.adaruby.com/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' title="Turbocharge Ruby on Rails with ActiveScaffold" /> rganization
  has_many :projects_users
  has_many :administrators, :through =&gt; :projects_users, :source =&gt; :user,
           :conditions =&gt; "projects_users.role_type = 3"
  has_many :managers, :through =&gt; :projects_users, :source =&gt; :user,
           :conditions =&gt; "projects_users.role_type = 2"
  has_many :workers, :through =&gt; :projects_users, :source =&gt; :user,
           :conditions =&gt; "projects_users.role_type = 1"
end
class ProjectsUser &lt; ActiveRecord::Base
  belongs_to :project
  belongs_to :user
end</pre>
</blockquote>
<blockquote></blockquote>
<p>Visit <a href="http://www.activescaffold.com/" rel="nofollow" >ActiveScaffold home page</a> to find out more!</p>
<p><em>P.S.:</em> Happy New Year from AdaRuby.com crew (Hendy &amp; Eka)! <img src='http://www.adaruby.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' title="Turbocharge Ruby on Rails with ActiveScaffold" /> </p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.adaruby.com/2008/01/01/turbocharge-ruby-on-rails-with-activescaffold/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jRails: jQuery On Rails</title>
		<link>http://www.adaruby.com/2007/12/11/jrails-jquery-on-rails/</link>
		<comments>http://www.adaruby.com/2007/12/11/jrails-jquery-on-rails/#comments</comments>
		<pubDate>Tue, 11 Dec 2007 11:51:52 +0000</pubDate>
		<dc:creator>ceefour</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Cool]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false">http://adaruby.com/2007/12/11/jrails-jquery-on-rails/</guid>
		<description><![CDATA[
			
				
			
		
Using jRails, you can get all of the same default Rails helpers for javascript functionality using the lighter jQuery library.
 jRails is a drop-in jQuery replacement for Prototype/script.aculo.us on Rails. It has the features and the visual effect.The visual effects in jRails are based on the new jquery-fx library. jRails currently uses a slightly modified [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.adaruby.com%2F2007%2F12%2F11%2Fjrails-jquery-on-rails%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.adaruby.com%2F2007%2F12%2F11%2Fjrails-jquery-on-rails%2F&amp;source=AdaRubyWeb&amp;style=normal&amp;service=bit.ly" height="61" width="50" title="jRails: jQuery On Rails" alt=" jRails: jQuery On Rails" /><br />
			</a>
		</div>
<p>Using <a href="http://ennerchi.com" rel="nofollow" >jRails</a>, you can get all of the same default Rails helpers for javascript functionality using the lighter jQuery library.</p>
<blockquote><p> <strong>jRails</strong> is a drop-in <a href="http://jquery.com/" rel="nofollow" >jQuery</a> replacement for <a href="http://www.prototypejs.org/" rel="nofollow" >Prototype</a>/<a href="http://script.aculo.us/" rel="nofollow" >script.aculo.us</a> on Rails. It has the features and the visual effect.The visual effects in jRails are based on the new jquery-fx library. jRails currently uses a slightly modified version of jquery fx code to get some of the desired effects.</p></blockquote>
<p>Features of jRails :</p>
<blockquote><p>jRails provides drop-in functionality for these existing Rails methods.</p>
<ul>
<li>
<ul>
<li><strong>Scriptaculous</strong></li>
<li>draggable_element</li>
<li>drop_receiving_element</li>
<li>sortable_element</li>
<li>visual_effect</li>
</ul>
</li>
<li>
<ul>
<li><strong>RJS</strong></li>
<li>hide</li>
<li>insert_html</li>
<li>remove</li>
<li>replace</li>
<li>replace_html</li>
<li>show</li>
<li>toggle</li>
</ul>
</li>
</ul>
</blockquote>
<p>How to use it?</p>
<blockquote><p>Just install and go!      Once installed, the previous Prototype/script.aculo.us helpers will be replaced by jQuery ones.      In order for them to function correctly, just include the appropriate javascript files in the head of your page.</p>
<p>&nbsp;</p>
<pre>&lt;script src="/javascripts/jquery.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script src="/javascripts/jquery-ui.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script src="/javascripts/jquery-fx.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script src="/javascripts/jrails.js" type="text/javascript"&gt;&lt;/script&gt;</pre>
</blockquote>
<blockquote><p>You can also use the Rails javascript_include_tag helper with :default to load them automagically.</p>
<p>&nbsp;</p>
<pre>&lt;%= javascript_include_tag :defaults %&gt;</pre>
</blockquote>
<p>Visit <a href="ennerchi.com" rel="nofollow" >jRails home page</a> to find out more!</p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.adaruby.com/2007/12/11/jrails-jquery-on-rails/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Selenium on Rails</title>
		<link>http://www.adaruby.com/2007/12/09/selenium-on-rails/</link>
		<comments>http://www.adaruby.com/2007/12/09/selenium-on-rails/#comments</comments>
		<pubDate>Sun, 09 Dec 2007 11:45:03 +0000</pubDate>
		<dc:creator>ceefour</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Cool]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false">http://adaruby.com/2007/12/09/selenium-on-rails/</guid>
		<description><![CDATA[
			
				
			
		
Selenium Core provides an easy way to test Rails application.
 This plugin does four things:

The Selenium Core files don‘t have to pollute /public.
No need to create suite files, they are generated on the fly — one suite per directory in /test/selenium (suites can be nested).
Instead of writing the test cases in HTML you can use [...]


Related posts:<ol><li><a href='http://www.adaruby.com/2009/12/21/three-ways-you-can-speed-up-your-fresh-rails-development/' rel='bookmark' title='Permanent Link: Three Ways You Can Speed Up Your Fresh Rails Development'>Three Ways You Can Speed Up Your Fresh Rails Development</a> <small> A Ruby on Rails web application I&#8217;ve been developing...</small></li>
</ol>

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.adaruby.com%2F2007%2F12%2F09%2Fselenium-on-rails%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.adaruby.com%2F2007%2F12%2F09%2Fselenium-on-rails%2F&amp;source=AdaRubyWeb&amp;style=normal&amp;service=bit.ly" height="61" width="50" title="Selenium on Rails" alt=" Selenium on Rails" /><br />
			</a>
		</div>
<p><a href="http://www.openqa.org/selenium-core/" rel="nofollow" >Selenium Core</a> provides an easy way to test Rails application.</p>
<blockquote><p><strong> This plugin does four things:</strong></p>
<ol>
<li>The Selenium Core files don‘t have to pollute <tt>/public</tt>.</li>
<li>No need to create suite files, they are generated on the fly — one suite per directory in <tt>/test/selenium</tt> (suites can be nested).</li>
<li>Instead of writing the test cases in HTML you can use a number of better formats (see <tt>Formats</tt>).</li>
<li>Loading of fixtures and wiping of session (<tt>/selenium/setup</tt>).</li>
</ol>
</blockquote>
<blockquote><p><strong>Installation</strong></p></blockquote>
<blockquote>
<ol>
<li>Install Selenium on Rails: <tt>script/plugin install <a href="http://svn.openqa.org/svn/selenium-on-rails/selenium-on-rails" rel="nofollow" >http://svn.openqa.org/svn/selenium-on-rails/selenium-on-rails</a></tt></li>
<li>If you‘re on Windows, <tt>gem install win32-open3</tt></li>
<li>If the RedCloth gem is available the Selenese test cases can use it for better markup.</li>
<li>Run the Rakefile in the plugin‘s directory to run the tests in order to see that everything works. (If RedCloth isn‘t installed a few tests will fail since they assume RedCloth is installed.)</li>
<li>Create a test case: <tt>script/generate selenium login</tt></li>
<li>Start the server: <tt>script/server -e test</tt></li>
<li>Point your browser to <tt><a href="http://localhost:3000/selenium" rel="nofollow" >localhost:3000/selenium</a></tt></li>
<li>If everything works as expected you should see the Selenium test runner. The north east frame contains all your test cases (just one for now), and the north frame contains your test case.</li>
</ol>
</blockquote>
<blockquote><p><strong>Formats</strong></p></blockquote>
<blockquote><p>The test cases can be written in a number of formats. which one you choose is a matter of taste. You can generate  your test files by running <tt>sript/generate selenium </tt>or by creating them manually in your <tt>/test/selenium </tt>directory.</p></blockquote>
<blockquote>
<ul>
<li><strong>Selenese, .Sel</strong></li>
</ul>
</blockquote>
<blockquote><p> Selenese is the dumbest format (in a good way). You just write your commands delimited by | characters.</p>
<pre> |open|/selenium/setup|
 |open|/|
 |goBack|</pre>
<p>If you don‘t want to write Selenese tests by hand you can use <a href="http://www.openqa.org/selenium-ide/" rel="nofollow" >SeleniumIDE</a> which has <a href="http://wiki.openqa.org/display/SIDE/SeleniumOnRails" rel="nofollow" >support</a> for Selenese.</p>
<p>SeleniumIDE makes it super easy to record test and edit them.</p>
<ul>
<li><strong>RSelenese, .rSel</strong></li>
</ul>
</blockquote>
<blockquote><p> RSelenese enable you to write your tests in Ruby.</p>
<pre> setup :fixtures =&gt; :all
 open '/'
 assert_title 'Home'
 ('a'..'z').each {|c| open :controller =&gt; 'user', :action =&gt; 'create', :name =&gt; c }</pre>
<p>See <a href="http://svn.openqa.org/fisheye/browse/%7Eraw,r=1000/selenium-on-rails/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilder.html" rel="nofollow" >SeleniumOnRails::TestBuilder</a> for available commands.</p>
<p><strong>Configuration</strong></p>
<p>There are a number of settings available. You make them by renaming <tt>config.yml.example</tt> to <tt>config.yml</tt> and make your changes in that file.</p>
<ul>
<li><strong>Environment</strong></li>
</ul>
<p>Per default this plugin is only available in test environment. You can change this by setting <tt>environments</tt>, such as:</p>
<pre> #config.yml
 environments:
   - test
   - development</pre>
</blockquote>
<blockquote>
<ul>
<li><strong>Selenium Core Path</strong></li>
</ul>
<p>If you don‘t want to use the bundled Selenium Core version you can set <tt>selenium_path</tt> to the directory where Selenium Core is stored.</p>
<pre> #config.yml
 selenium_path: 'c:selenium'</pre>
<p><strong>Test Acceptance</strong></p>
<p>You can run all your Selenium tests as a Rake task. First, if you‘re on Windows, you have to make sure win32-open3 is installed. Then you have to configure which browsers you want to run, like this:</p>
<p>#config.yml  browsers:    firefox: &#8216;c:\Program Files\Mozilla Firefox\firefox.exe&#8217;    ie: &#8216;c:\Program Files\Internet Explorer\iexplore.exe&#8217; Now you‘re all set. First start a server:</p>
<p>script/server -e test Then run the tests:</p>
<p>rake test:acceptance Now it should work, otherwise let me know!</p>
<p><strong>Store results</strong></p>
<p>If you want to store the results from a <tt>test:acceptance</tt> you just need to set in which directory they should be stored:</p>
<pre> #config.yml
 result_dir: 'c:result'</pre>
<p>So when you run <tt>rake test:acceptance</tt> the tables with the results will be stored as <tt>.html</tt> files in that directory.</p>
<p>This can be useful especially for continous integration.</p></blockquote>
<p>Read more on: <a href="http://www.openqa.org/selenium-on-rails/index.html" rel="nofollow" >OpenQA project page</a>.</p>


<p>Related posts:<ol><li><a href='http://www.adaruby.com/2009/12/21/three-ways-you-can-speed-up-your-fresh-rails-development/' rel='bookmark' title='Permanent Link: Three Ways You Can Speed Up Your Fresh Rails Development'>Three Ways You Can Speed Up Your Fresh Rails Development</a> <small> A Ruby on Rails web application I&#8217;ve been developing...</small></li>
</ol></p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.adaruby.com/2007/12/09/selenium-on-rails/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Statemachine: Finite Statemachine framework</title>
		<link>http://www.adaruby.com/2007/11/25/statemachine-finite-statemachine-framework/</link>
		<comments>http://www.adaruby.com/2007/11/25/statemachine-finite-statemachine-framework/#comments</comments>
		<pubDate>Sun, 25 Nov 2007 11:00:45 +0000</pubDate>
		<dc:creator>ceefour</dc:creator>
				<category><![CDATA[Cool]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false">http://adaruby.com/2007/11/25/statemachine-finite-statemachine-framework/</guid>
		<description><![CDATA[
			
				
			
		
The Statemachine library is a simple yet full-featured Finite Statemachine framework. Define your statemachine in Ruby code and execute it in your system.
A statemachine keeps track of the status(state) of an application or device and responds to different inputs, which alter the state of the machine.
We have identified 3 fundamental components to a statemachine: States, [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.adaruby.com%2F2007%2F11%2F25%2Fstatemachine-finite-statemachine-framework%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.adaruby.com%2F2007%2F11%2F25%2Fstatemachine-finite-statemachine-framework%2F&amp;source=AdaRubyWeb&amp;style=normal&amp;service=bit.ly" height="61" width="50" title="Statemachine: Finite Statemachine framework" alt=" Statemachine: Finite Statemachine framework" /><br />
			</a>
		</div>
<p><strong>The <a href="http://statemachine.rubyforge.org" rel="nofollow" >Statemachine library</a></strong> is a simple yet full-featured Finite Statemachine framework. Define your statemachine in Ruby code and execute it in your system.</p>
<blockquote><p>A statemachine keeps track of the status(state) of an application or device and responds to different inputs, which alter the state of the machine.</p></blockquote>
<blockquote><p>We have identified 3 fundamental components to a statemachine: <strong>States, Transitions, and Events.</strong></p></blockquote>
<blockquote>
<ul>
<li>State: This is the status of the device or application the statemachine is being used for. At any given time, the statemachine is in one of its predefined states.</li>
<li>Transition: Moving from one state to another is called a transition.  Transitions are invoked by Events.</li>
<li>Event: Events are the inputs to a statemachine.</li>
</ul>
</blockquote>
<blockquote><p>This is a simple statemachine showing use of states and transitions.</p></blockquote>
<blockquote><p><img src="http://statemachine.rubyforge.org/images/examples/vending_machine.png" height="157" width="392" title="Statemachine: Finite Statemachine framework" alt="vending machine Statemachine: Finite Statemachine framework" /></p></blockquote>
<blockquote><p>Each transition can be defined by identifying the state where it begins, the event by which is invoked, and the state where it ends.Using this scheme we can define out vending machine like so…</p>
<table>
<tr>
<th>Origin State</th>
<th>Event</th>
<th>Destination State</th>
</tr>
<tr>
<td>Waiting</td>
<td>dollar</td>
<td>Paid</td>
</tr>
<tr>
<td>Paid</td>
<td>selection</td>
<td>Waiting</td>
</tr>
<tr>
<td>Waiting</td>
<td>selection</td>
<td>Waiting</td>
</tr>
<tr>
<td>Paid</td>
<td>dollar</td>
<td>Paid</td>
</tr>
</table>
</blockquote>
<blockquote><p>Defining it in ruby is not much harder:</p>
<pre>require 'rubygems'
require 'statemachine'

vending_machine = Statemachine.build do
  trans :waiting, :dollar, :paid
  trans :paid, :selection, :waiting
  trans :waiting, :selection, :waiting
  trans :paid, :dollar, :paid
end</pre>
<p><strong>Actions</strong> allow statemachines to perform operations at various point during execution. There are two models for incorporating actions into statemachines.</p>
<ul>
<li>Mealy: A Mealy machine performs actions on transitions. Each transition in a statemachine may invoke a unique action.</li>
<li>Moore: A Moore machine performs actions when entering a state. Each state may have it’s own entry action.</li>
</ul>
<p>Mealy and Moore machines each have advantages and disadvantages. But one great advantage of both it that they are not mutually exclusive. If we use both models, and toss in some exit actions, we’ve got it made!</p></blockquote>
<blockquote><p>Oftentimes duplication can arise within a statemachine.  One way to solve this problem is through the use of superstates.  A <strong>superstate</strong> is a state that contains other states. One statemachine may have multiple superstates. And every superstate may contain other superstates. Superstates can be nested.But, one problem with superstates is that they may not know which state to return to when coming into that state. To solve this problem, superstates come with the <strong>history state</strong>.</p></blockquote>
<p>More detailed download and installation instructions are available on <a href="http://statemachine.rubyforge.org">Statemachine library project page.<br />
</a></p>
<blockquote></blockquote>
<p align="center">&nbsp;</p>
<p>&nbsp;</p>
<p><strong>Update:</strong> An insightful reader, Justin Jones, suggests an alternative: <a href="http://agilewebdevelopment.com/plugins/acts_as_state_machine" rel="nofollow" >acts_as_state_machine plugin</a>. Read more on <a href="http://rails.aizatto.com/2007/05/24/ruby-on-rails-finite-state-machine-plugin-acts_as_state_machine/" rel="nofollow" >Aizatto&#8217;s</a> and <a href="http://practicalruby.blogspot.com/2006/10/actsasstatemachine-initial-state.html" rel="nofollow" >Practical Ruby</a>.</p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.adaruby.com/2007/11/25/statemachine-finite-statemachine-framework/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The Best microformats Resources for Web 2.0 Developers</title>
		<link>http://www.adaruby.com/2007/09/20/top-10-microformats-resources-for-web-20-developers/</link>
		<comments>http://www.adaruby.com/2007/09/20/top-10-microformats-resources-for-web-20-developers/#comments</comments>
		<pubDate>Thu, 20 Sep 2007 11:01:29 +0000</pubDate>
		<dc:creator>ceefour</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Beginner]]></category>
		<category><![CDATA[Books]]></category>
		<category><![CDATA[Cool]]></category>
		<category><![CDATA[Friends]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Opinions]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Praises]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false">http://adaruby.com/2007/09/20/top-10-microformats-resources-for-web-20-developers/</guid>
		<description><![CDATA[
			
				
			
		

microformats has been only two years old, yet it has brought significant changes in a relatively short time.
What is it, actually? According to microformats.org, &#8220;[microformats is] designed for humans first and machines second, [they] are a set of simple, open data formats built upon existing and widely adopted standards.&#8221;
Enough with the fluff, let&#8217;s see how [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.adaruby.com%2F2007%2F09%2F20%2Ftop-10-microformats-resources-for-web-20-developers%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.adaruby.com%2F2007%2F09%2F20%2Ftop-10-microformats-resources-for-web-20-developers%2F&amp;source=AdaRubyWeb&amp;style=normal&amp;service=bit.ly" height="61" width="50" title="The Best microformats Resources for Web 2.0 Developers" alt=" The Best microformats Resources for Web 2.0 Developers" /><br />
			</a>
		</div>
<p><a href="http://www.flickr.com/photos/torchlightlms/1206281509/" rel="nofollow"  title="Shave your Semantic (or semantic?) Web!"><img src="http://farm2.static.flickr.com/1187/1206281509_ce53f3d7ff.jpg" alt="Shave your Semantic (or semantic?) Web" title="The Best microformats Resources for Web 2.0 Developers" /></a></p>
<p><a href="http://microformats.org/" rel="nofollow" >microformats</a> has been <a href="http://microformats.org/blog/2007/06/21/microformatsorg-turns-2/" rel="nofollow" >only two years old</a>, yet it has brought significant changes in a relatively short time.</p>
<p>What is it, actually? <a href="http://microformats.org/about/" rel="nofollow" >According to microformats.org</a>, &#8220;[microformats is] designed for humans first and machines second, [they] are a set of simple, open data formats built upon existing and widely adopted standards.&#8221;</p>
<p>Enough with the fluff, let&#8217;s see how it <em>actually</em> works, microformats in action:</p>
<p><a href="http://www.linkedin.com/in/ariekeren" rel="nofollow"  title="Arie Kusuma Atmaja @ LinkedIn"><img src="http://farm2.static.flickr.com/1322/1408453688_afda913dd5.jpg" alt="Arie Kusuma Atmaja nampang gitu lhoh" title="The Best microformats Resources for Web 2.0 Developers" /></a><br />
<a href="http://www.flickr.com/photos/ceefour/1408453688/" rel="nofollow" >Flickr picture source</a></p>
<p align="left">The above picture is me browsing to <a href="http://www.linkedin.com/in/ariekeren" rel="nofollow" >the LinkedIn profile</a> of one of Indonesia&#8217;s  renowned Ruby on Rails experts, <a href="http://ariekusumaatmaja.wordpress.com/" rel="nofollow" >Arie Kusuma Atmaja</a>. The overlay window that contains these semantic information is <strong>not </strong>a <a href="http://www.linkedin.com/" rel="nofollow" >LinkedIn</a> feature. Rather, it is the easily usable, cross-browser <a href="http://leftlogic.com/lounge/articles/microformats_bookmarklet" rel="nofollow" >Microformats Bookmarklet by LeftLogic</a>. Go on&#8230; <em>try it</em> if you haven&#8217;t!</p>
<p align="left">As you can see, the mere act of clicking the bookmarklet shows you some important facts about Arie (or any microformats-enabled you&#8217;re currently at). In case of a <a href="http://microformats.org/wiki/hresume" rel="nofollow" >microformats-enabled resume</a> page like in LinkedIn, it shows you where he works, when, education information, and related stuff. For fun comparison purposes only, <a href="http://www.linkedin.com/in/ceefour" rel="nofollow"  title="Hendy Irawan's LinkedIn profile">my LinkedIn profile</a> has more detailed information than his, hehe <img src='http://www.adaruby.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' title="The Best microformats Resources for Web 2.0 Developers" /> </p>
<p align="left">The best part is not only that the information is human-readable, but it can also be extracted and processed automatically by machines or software. The primary distinguishing trait of a microformats-enabled HTML page is that it has <a href="http://en.wikipedia.org/wiki/Semantic_Web" rel="nofollow" >semantic meaning</a>. A microformats processor can know the difference between a name, an e-mail address, a street address, a job, a university, and so on; while in plain HTML, all you can infer are things dealing with paragraphs, tables, lists, and so on.</p>
<p align="left">Making microformats-enabled pages aren&#8217;t hard at all, actually it is very easy! It&#8217;s even much easier than CSS.</p>
<p align="left">To see how simple it is, let&#8217;s see a snippet of a real-world microformats, still courtesy of Arie:</p>
<pre>&lt;div id="masthead" class="vcard contact"&gt;
  &lt;div id="nameplate"&gt;
    &lt;h1 id="name"&gt;&lt;span class="fn n"&gt; &lt;span class="given-name"&gt;Arie&lt;/span&gt; &lt;span class="family-name"&gt;Kusuma Atmaja&lt;/span&gt; &lt;/span&gt;&lt;/h1&gt;
      &lt;p class="headline title"&gt;&lt;strong&gt;Senior Ruby Developer at IMT&lt;/strong&gt;&lt;/p&gt;
    &lt;div class="adr"&gt;
      &lt;p class="locality"&gt;Indonesia&lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;</pre>
<p align="left">Most of the above snippet is just HTML. The microformats part is simply the <strong>class=&#8221;</strong><em>something</em><strong>&#8220;</strong> convention. Simple, and it gets the job done. <img src='http://www.adaruby.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' title="The Best microformats Resources for Web 2.0 Developers" /> </p>
<p align="left">Some more commonly used microformats specifications include:</p>
<ul>
<li><a href="http://microformats.org/wiki/hcard" rel="nofollow" >hCard</a> for people and organizations</li>
<li><a href="http://microformats.org/wiki/hcalendar" rel="nofollow" >hCalendar</a> for calendars and Events</li>
<li><a href="http://microformats.org/wiki/hcalendar" rel="nofollow" >hCalendar</a> for calendars and Events</li>
<li><a href="http://microformats.org/wiki/vote-links" rel="nofollow" >VoteLinks</a> and <a href="http://microformats.org/wiki/hreview" rel="nofollow" >hReview</a> for opinions, ratings, and reviews</li>
<li><a href="http://gmpg.org/xfn" rel="nofollow" ><abbr title="XHTML Friends Network">XFN</abbr></a> for social networks</li>
<li><a href="http://microformats.org/wiki/rel-license" rel="nofollow" >rel-license</a> for licenses</li>
<li><a href="http://microformats.org/wiki/rel-tag" rel="nofollow" >rel-tag</a> for tags, keywords, and categories</li>
<li><a href="http://microformats.org/wiki/xoxo" rel="nofollow" >XOXO</a> for lists and outlines</li>
<li><a href="http://microformats.org/wiki/" rel="nofollow" >&#8230;and more&#8230;</a></li>
</ul>
<p align="left">Despite all these specifications, &#8220;who uses it?&#8221; is a good question. It turns out, there has been many, and more and more sites are adopting it. <a href="http://wordpress.org/extend/plugins/linkedin-hresume/" rel="nofollow" >LinkedIn with hResume</a> is one example, along with <a href="http://torrez.us/archives/2007/08/02/540/" rel="nofollow" >Google Maps</a>, <a href="http://www.ylocalblog.com/blog/2006/06/21/we-now-support-microformats/" rel="nofollow" >Yahoo</a>, <a href="http://www.flickr.com/groups/microformats/" rel="nofollow" >Flickr</a>, and <a href="http://microformats.org/wiki/hcard-examples-in-wild" rel="nofollow" >all these cool guys</a> have been using them. Why shouldn&#8217;t you?</p>
<p align="left">Interested? Here are some stuff to get you started:</p>
<ol>
<li><strong>Online Tools</strong>
<ol>
<li><a href="http://leftlogic.com/lounge/articles/microformats_bookmarklet" rel="nofollow" >Microformats Bookmarklet by LeftLogic</a><br />
A handy microformats explorer bookmarklet. Useful also if you&#8217;re on the go and you want to check out some microformats. No need to install anything fancy on the computer.</li>
<li><a href="https://addons.mozilla.org/firefox/addon/4106" rel="nofollow" >Operator Firefox Extension</a><br />
Microformats explorer extension for Firefox. Whether you&#8217;re a web developer or simply want to check out this latest technology, this is a very useful tool.</li>
<li> <a href="http://blog.codeeg.com/tails-firefox-extension-03/" rel="nofollow" >Tails Firefox extension</a> is another microformats Firefox extension</li>
<li><a href="http://tools.blogmatrix.com/extract/" rel="nofollow" >Almost Universal Microformats Parser</a> is a useful web-based tool to parse microformats.</li>
</ol>
</li>
<li><strong>Tutorials and Resources<br />
</strong></p>
<ol>
<li><a href="http://www.smashingmagazine.com/2007/05/04/microformats-what-they-are-and-how-to-use-them/" rel="nofollow" >Microformats, what they are and how to use them, by Smashing Magazine </a></li>
<li><a href="http://www.xfront.com/microformats/" rel="nofollow" >Microformats Tutorial</a> by XFront<br />
This is a very extensive tutorial. The complete tutorial package including the example files is a 13 MB download! <img src='http://www.adaruby.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' title="The Best microformats Resources for Web 2.0 Developers" /> </li>
<li><a href="http://www.thinkvitamin.com/features/design/how-to-use-microformats" rel="nofollow" >How to Use Microformats</a> by Vitamin Features</li>
<li><a href="http://whymicroformats.com/introduction-to-microformats/" rel="nofollow" >Introduction to Microformats</a> by WhyMicroformats.com</li>
<li><a href="http://www.digital-web.com/articles/the_big_picture_on_microformats/" rel="nofollow" >The Big Picture on Microformats</a> by Digital Web Magazine</li>
<li>Another by Digital Web Magazine: <a href="http://www.digital-web.com/articles/microformats_primer/" rel="nofollow" >Microformats Primer</a></li>
<li>Back to the future: <a href="http://www.readwriteweb.com/archives/mozilla_does_microformats_firefox3.php" rel="nofollow" >Mozilla Firefox 3.0 Does Microformats</a><br />
<a href="http://www.readwriteweb.com/" rel="nofollow" >Read/WriteWeb&#8217;s</a> articles also touched microformats-related stuff quite often.</li>
</ol>
</li>
<li><strong>Microformat Parsers</strong>
<ol>
<li><a href="http://mofo.rubyforge.org/" rel="nofollow" >Mofo Ruby Gem and Rails Plugin</a><br />
Of course, this is Ruby on Rails blog! Mofo is a microformats parser for Ruby and it also doubles as a Rails plugin. Check out <a href="http://errtheblog.com/post/37" rel="nofollow" >Chris Wanstrath&#8217;s post</a> for more information.<br />
There are also microformat parsers for other languages:</li>
<li><a href="http://www.danwebb.net/2007/2/9/sumo-a-generic-microformats-parser-for-javascript" rel="nofollow" >Sumo</a> is a microformats parser for JavaScript</li>
<li><a href="http://allinthehead.com/hkit" rel="nofollow" >hKit</a> is a microformats parser for PHP</li>
<li><a href="http://malatestapunk-stuff.blogspot.com/2007/01/php-microformats-parser.html" rel="nofollow" >Microformats Parser</a> is another parser for PHP</li>
<li><a href="http://phildawes.net/microformats/" rel="nofollow" >Microformats Parser for Python</a></li>
<li><a href="http://code.whytheluckystiff.net/hpricot/" rel="nofollow" >Hpricot Ruby Gem</a><br />
Found a bizarre microformat or inventing your own? No problem, Hpricot comes to the rescue. Parse any HTML-ish document as you see fit&#8230; More info available from <a href="http://redhanded.hobix.com/inspect/hpricot01.html" rel="nofollow" >this RedHanded post</a>.</li>
<li><a href="http://rubyforge.org/projects/scrapi" rel="nofollow" >scrAPI</a> is another Ruby library for parsing HTML that can be useful for processing microformats.</li>
</ol>
</li>
<li><strong>References</strong>
<ol>
<li><a href="http://microformats.org/" rel="nofollow" >Microformats.org</a><br />
&#8220;Official&#8221; web site of Microformats. You can read everything about microformats, current specifications and newly proposed specs.</li>
<li><a href="http://www.amazon.com/gp/product/1590598148?ie=UTF8&amp;tag=gauldong-20&amp;link_code=as3&amp;camp=211189&amp;creative=373489&amp;creativeASIN=1590598148" rel="nofollow" >&#8220;Microformats: Empowering Your Markup for Web 2.0&#8243; Book</a> by <a href="http://webdirections.org/" rel="nofollow" >John Allsopp</a><br />
&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;br /&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;<br />
This is the first book dedicated to, and is a comprehensive guide to, microformats. It explores why, in Bill Gates&#8217;s words, &#8220;We need microformats&#8221;; how microformats work; and the kinds of problems microformats help solve. the book covers every current microformat, with complete details of the syntax, semantics, and uses of each, along with real-world examples and a comprehensive survey of the tools available for working with them. the book also features case studies detailing how major web content publishers such as yahoo put microformats to work in their web applications.</li>
<li><a href="http://suda.co.uk/projects/microformats/cheatsheet/" rel="nofollow" >Brian Suda&#8217;s microformats cheatsheet</a><br />
For people who likes it quick and done, this is perfect. It lists microformats properties by format and also lists each format and the hierarchy. This includes elemental microformats, compound microformats and some of the standard design patterns used.</li>
<li><a href="http://www.ilovejackdaniels.com/cheat-sheets/microformats-cheat-sheet/" rel="nofollow" >Dave Child&#8217;s microformats cheatsheet</a> is another good reference</li>
<li>And <a href="http://microformats.org/wiki/cheatsheets" rel="nofollow" >more cheatsheets on microformats.org wiki</a></li>
<li><a href="http://www.w3.org/TR/grddl/" rel="nofollow" >Gleaning Resource Descriptions from Dialects of Languages (GRDDL)</a> is a recently approved W3C Recommendation that can be used, among others, for extracting semantic information (including microformats) from HTML pages.</li>
<li><a href="http://microformatique.com/" rel="nofollow" >microformatique</a>. A blog about all things microformats!</li>
</ol>
</li>
</ol>
<p>Feel free to add more resources as you see fit, in the comments! <img src='http://www.adaruby.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' title="The Best microformats Resources for Web 2.0 Developers" /> </p>
<p><strong>Updates:</strong></p>
<ol>
<li>I originally thought I was gonna list 10 resources&#8230; But it seems there are much more <img src='http://www.adaruby.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' title="The Best microformats Resources for Web 2.0 Developers" /> </li>
<li>More links to John Allsopp&#8217;s resources</li>
</ol>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.adaruby.com/2007/09/20/top-10-microformats-resources-for-web-20-developers/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Twitter API, Gampang Koq :))</title>
		<link>http://www.adaruby.com/2007/08/10/twitter-api-gampang-koq/</link>
		<comments>http://www.adaruby.com/2007/08/10/twitter-api-gampang-koq/#comments</comments>
		<pubDate>Sat, 11 Aug 2007 02:16:53 +0000</pubDate>
		<dc:creator>ceefour</dc:creator>
				<category><![CDATA[Beginner]]></category>
		<category><![CDATA[Cool]]></category>
		<category><![CDATA[Friends]]></category>
		<category><![CDATA[Indonesia]]></category>
		<category><![CDATA[Opinions]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Praises]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false">http://adaruby.com/2007/08/10/twitter-api-gampang-koq/</guid>
		<description><![CDATA[
			
				
			
		
Tau gak twitter tuh punya API

Ini contoh penggunaannya:
ceefour@ojalanow:~/bin$ salsabeela 'untuk sekarang enak gini'
Sending salsabeela 'untuk sekarang enak gini' '.... OK!
ceefour@ojalanow:~/bin$ salsabeela 'gak perlu mandi tiap hari  '
Sending salsabeela 'gak perlu mandi tiap hari  '.... OK!
ceefour@ojalanow:~/bin$ cat salsabeela
#!/usr/bin/ruby
require "#{File.dirname(__FILE__)}/twitter_pm"
send_pm 'salsabeela', ARGV.join(' ')

isi twitter_pm.rb :
ceefour@ojalanow:~/bin$ cat twitter_pm.rb
require 'rubygems'
gem 'twitter4r', '&#62;=0.2.0'
require 'twitter'
def send_pm(recipient_id, message)
t = Twitter::Client.new(:login [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.adaruby.com%2F2007%2F08%2F10%2Ftwitter-api-gampang-koq%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.adaruby.com%2F2007%2F08%2F10%2Ftwitter-api-gampang-koq%2F&amp;source=AdaRubyWeb&amp;style=normal&amp;service=bit.ly" height="61" width="50" title="Twitter API, Gampang Koq :))" alt=" Twitter API, Gampang Koq :))" /><br />
			</a>
		</div>
<p>Tau gak <a href="http://www.twitter.com/" rel="nofollow"  title="Twitter">twitter</a> tuh punya API</p>
<p><a href="http://www.flickr.com/photos/thestatusjoe/624140974/" rel="nofollow"  title="Twittervision"><img src="http://farm2.static.flickr.com/1137/624140974_42d87f9140.jpg?v=0" alt="Twittervision" height="373" width="500" title="Twitter API, Gampang Koq :))" /></a></p>
<p>Ini contoh penggunaannya:</p>
<p><tt>ceefour@ojalanow:~/bin$ salsabeela 'untuk sekarang enak gini'<br />
Sending salsabeela 'untuk sekarang enak gini' '.... OK!<br />
ceefour@ojalanow:~/bin$ salsabeela 'gak perlu mandi tiap hari <img src='http://www.adaruby.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' title="Twitter API, Gampang Koq :))" /> '<br />
Sending salsabeela 'gak perlu mandi tiap hari <img src='http://www.adaruby.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' title="Twitter API, Gampang Koq :))" /> '.... OK!<br />
ceefour@ojalanow:~/bin$ cat salsabeela<br />
#!/usr/bin/ruby<br />
require "#{File.dirname(__FILE__)}/twitter_pm"<br />
send_pm 'salsabeela', ARGV.join(' ')<br />
</tt><br />
isi twitter_pm.rb :</p>
<p><tt>ceefour@ojalanow:~/bin$ cat twitter_pm.rb<br />
require 'rubygems'<br />
gem 'twitter4r', '&gt;=0.2.0'<br />
require 'twitter'</tt></p>
<p><tt>def send_pm(recipient_id, message)<br />
t = Twitter::Client.new(:login =&gt; 'gauldong@gmail.com', :password =&gt; ****************)<br />
message = ARGV.join(' ')<br />
sent = false<br />
begin<br />
recipient = t.user(recipient_id)<br />
rescue<br />
raise("Cannot find user #{recipient_username}")<br />
end<br />
print "Sending #{recipient.screen_name} '#{message}'"<br />
$stdout.flush<br />
sending = Thread.new { t.message(:post, message, recipient); sent= true; }<br />
status = Thread.new { until sent; print '.'; sleep(0.5); $stdout.flush; end }<br />
sending.join<br />
status.join<br />
puts ' OK!'<br />
end<br />
</tt></p>
<p><a href="http://www.flickr.com/photos/36-degrees/502369514/" rel="nofollow"  title="Twittervision"><img src="http://farm1.static.flickr.com/211/502369514_dbe8f830ec.jpg?v=0" alt="Twittervision" height="375" width="500" title="Twitter API, Gampang Koq :))" /></a></p>
<p>ato gini :</p>
<p><tt>ceefour@ojalanow:~/bin$ irb -rubygems<br />
irb(main):001:0&gt; gem 'twitter4r'<br />
=&gt; true<br />
irb(main):002:0&gt; require 'twitter'<br />
=&gt; true<br />
irb(main):003:0&gt; t = Twitter::Client.new(:login =&gt; 'gauldong@gmail.com', :password =&gt; ****************)<br />
=&gt; #&lt;Twitter::Client:0xb773d658 @login="gauldong@gmail.com", @password=****************&gt;<br />
irb(main):004:0&gt; ollie = t.user('salsabeela')<br />
=&gt; #&lt;Twitter::User:0xb7738090 @protected=false, @id=7296272, @profile_image_url="http://assets2.twitter.com/system/user/profile_image/7296272/normal/profileollie.jpg?1183741074", @client=#&lt;Twitter::Client:0xb773d658 @login="gauldong@gmail.com", @password=****************&gt;, @screen_name="salsabeela", @description="What I learn today...", @url="http://blog.salsabeela.com", @location="Jakarta", @name="Ollie"&gt;<br />
irb(main):013:0* for f in ollie.friends; puts f.screen_name; end<br />
popurls<br />
al3x<br />
davewiner<br />
bbcnews<br />
detikcom<br />
ceefour<br />
confession<br />
21c<br />
hotdogsladies<br />
OpinionJournal<br />
cnnbrk<br />
avianto<br />
thomasarie<br />
jenniesbev<br />
twittown<br />
notstevenwright<br />
farry<br />
dhewlett<br />
mbot<br />
kukuhtw<br />
BarackObama<br />
jafrane<br />
javajive<br />
budip<br />
istribawel<br />
enda<br />
timer<br />
Indonesia<br />
unwinged<br />
</tt><br />
lucu kan? =))</p>
<p>thanks to <a href="http://susanpotter.net/" rel="nofollow"  title="Susan Potter">Susan Potter</a> for <a href="http://snakesgemscoffee.blogspot.com/2007/08/higher-leve-bdd-specing-using-rbehave.html" rel="nofollow" >making</a> <a href="http://twitter4r.rubyforge.org/" rel="nofollow"  title="Twitter4r Rubygem">twitter4r</a> gem <img src='http://www.adaruby.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' title="Twitter API, Gampang Koq :))" /> </p>
<p>PS: Twitter tuh apaan sich?!?!? =))</p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.adaruby.com/2007/08/10/twitter-api-gampang-koq/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
