<?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; Opinions</title>
	<atom:link href="http://www.adaruby.com/category/opinions/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>Why You Should Be Grateful for Coding in Ruby</title>
		<link>http://www.adaruby.com/2010/02/03/be-grateful-coding-ruby-on-rails/</link>
		<comments>http://www.adaruby.com/2010/02/03/be-grateful-coding-ruby-on-rails/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 18:05:27 +0000</pubDate>
		<dc:creator>ceefour</dc:creator>
				<category><![CDATA[Opinions]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[syntax]]></category>

		<guid isPermaLink="false">http://www.adaruby.com/?p=165</guid>
		<description><![CDATA[
			
				
			
		

How do you feel during your daily Ruby programming workflow? Do you feel fun or productive? Either way, you&#8217;ve got to feel grateful!
After several years not doing any serious PHP programming, today I get curious.
Right now, PHP has evolved. PHP programmers are not &#8220;script kiddies&#8221; anymore, they&#8217;re professional programmers with quality MVC web frameworks.
Now it [...]


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%2F2010%2F02%2F03%2Fbe-grateful-coding-ruby-on-rails%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.adaruby.com%2F2010%2F02%2F03%2Fbe-grateful-coding-ruby-on-rails%2F&amp;source=AdaRubyWeb&amp;style=normal&amp;service=bit.ly" height="61" width="50" title="Why You Should Be Grateful for Coding in Ruby" alt=" Why You Should Be Grateful for Coding in Ruby" /><br />
			</a>
		</div>
<p><img class="alignnone size-medium wp-image-166" title="Being grateful" src="http://www.adaruby.com/wp-content/uploads/2010/02/adaruby01-529710929_7b3d85e103-272x300.jpg" alt="Being grateful" width="272" height="300" /></p>
<p>How do you feel during your daily <strong>Ruby programmin</strong>g workflow? Do you feel <strong>fun</strong> or <strong>productive</strong>? Either way, you&#8217;ve got to feel <em>grateful</em>!</p>
<p>After several years not doing any serious PHP programming, today I get curious.</p>
<p>Right now, PHP has evolved. PHP programmers are not &#8220;script kiddies&#8221; anymore, they&#8217;re professional programmers with quality MVC web frameworks.</p>
<p>Now it won&#8217;t be fair if I compared Ruby on Rails with PHP, as that&#8217;d be like comparing apples and oranges. So I have to pick some killer app written in PHP that competes directly with Rails, as long as it&#8217;s <em>not WordPress or Drupal</em>. <img src='http://www.adaruby.com/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' title="Why You Should Be Grateful for Coding in Ruby" /> </p>
<p>So I checked out <a href="http://www.symfony-project.org/" rel="nofollow" >Symfony</a>, the most popular PHP web framework out there. I&#8217;ve never programmed Symfony, but I&#8217;ve heard a lot of good things about it.</p>
<p>After initial reading on the documentation, it seems the good things I&#8217;ve heard about it are true. The development model is very similar to Ruby on Rails. Scaffolds and plenty of helpers.</p>
<p>However, the syntax is unbearable. (at least for me!) Check out <a href="http://www.symfony-project.org/jobeet/1_4/Doctrine/en/04" rel="nofollow" >this tutorial example code</a>:</p>
<pre class="brush: php;">// apps/frontend/modules/job/templates/showSuccess.php
&lt;?php slot('title') ?&gt;
 &lt;?php echo sprintf('%s is looking for a %s', $job-&gt;getCompany(), $job-&gt;getPosition()) ?&gt;
&lt;?php end_slot(); ?&gt;</pre>
<p><em>slot()</em> and <em>end_slot()</em> aren&#8217;t even a proper block construct. They&#8217;re just two separate functions made to look like they&#8217;re blocks.</p>
<p>Compare with how to do the same in Ruby on Rails:</p>
<pre class="brush: ruby;"># app/views/jobs/show_success.html.erb
&lt;% content_for :title do %&gt;
  &lt;%= @job.company %&gt; is looking for a &lt;%= @job.position %&gt;
&lt;!-- or: &lt;%= &quot;#{@job.company} is looking for a #{@job.position}&quot; %&gt; --&gt;
&lt;% end %&gt;</pre>
<p>It might be a <strong>simple example</strong>, but that begs your gratefulness <em>even more</em>: Imagine coding a much more <strong>complex web application</strong>!</p>
<p>I certainly won&#8217;t blame it on Symfony. Its developers have done a great job releasing an excellent web framework using PHP language as its foundation.</p>
<p>However, the PHP programming language (at least in its current incarnation v5.x) while makes great things possible unfortunately make them greatly ugly at the same time. To be fair, it&#8217;s not hard to abuse Ruby if you want to get cryptic. But at least, Ruby programming language when used properly will yield beautiful and highly readable code like the above example.</p>
<p>What&#8217;s your take? Time to get <em>opinionated</em>, guys! <img src='http://www.adaruby.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' title="Why You Should Be Grateful for Coding in Ruby" /> </p>
<p><a href="http://www.flickr.com/photos/gi/529710929/" rel="nofollow" >Image credits</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/2010/02/03/be-grateful-coding-ruby-on-rails/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>A Server Hard Drive Crash :(</title>
		<link>http://www.adaruby.com/2008/05/12/a-server-hard-drive-crash/</link>
		<comments>http://www.adaruby.com/2008/05/12/a-server-hard-drive-crash/#comments</comments>
		<pubDate>Mon, 12 May 2008 10:31:32 +0000</pubDate>
		<dc:creator>ceefour</dc:creator>
				<category><![CDATA[Complaints]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Opinions]]></category>

		<guid isPermaLink="false">http://adaruby.com/2008/05/12/a-server-hard-drive-crash/</guid>
		<description><![CDATA[
			
				
			
		
Just got a server hard drive crash  
We should be back operational soon. In the mean time please bear with us. Thank you.  


No related posts.
Related posts brought to you by Yet Another Related Posts Plugin.


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%2F05%2F12%2Fa-server-hard-drive-crash%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.adaruby.com%2F2008%2F05%2F12%2Fa-server-hard-drive-crash%2F&amp;source=AdaRubyWeb&amp;style=normal&amp;service=bit.ly" height="61" width="50" title="A Server Hard Drive Crash :(" alt=" A Server Hard Drive Crash :(" /><br />
			</a>
		</div>
<p>Just got a server hard drive crash <img src='http://www.adaruby.com/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' title="A Server Hard Drive Crash :(" /> </p>
<p>We should be back operational soon. In the mean time please bear with us. Thank you. <img src='http://www.adaruby.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' title="A Server Hard Drive Crash :(" /> </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/05/12/a-server-hard-drive-crash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Migrating Subversion repositories using SVK</title>
		<link>http://www.adaruby.com/2008/03/20/migrating-subversion-repositories-using-svk/</link>
		<comments>http://www.adaruby.com/2008/03/20/migrating-subversion-repositories-using-svk/#comments</comments>
		<pubDate>Thu, 20 Mar 2008 11:02:41 +0000</pubDate>
		<dc:creator>ceefour</dc:creator>
				<category><![CDATA[Cool]]></category>
		<category><![CDATA[Opinions]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[dump]]></category>
		<category><![CDATA[export]]></category>
		<category><![CDATA[import]]></category>
		<category><![CDATA[load]]></category>
		<category><![CDATA[migrate]]></category>
		<category><![CDATA[migration]]></category>
		<category><![CDATA[repository]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svk]]></category>

		<guid isPermaLink="false">http://adaruby.com/2008/03/20/migrating-subversion-repositories-using-svk/</guid>
		<description><![CDATA[
			
				
			
		
Recently I got a task which involves moving, or let&#8217;s say copying, an entire Subversion repository with history to another server. Problem is, I didn&#8217;t have access to the server itself, which means I couldn&#8217;t do a regular &#8220;svnadmin dump&#8221;.
SVK comes to the rescue!

To make it work, first of all you need to install SVK. [...]


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%2F20%2Fmigrating-subversion-repositories-using-svk%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.adaruby.com%2F2008%2F03%2F20%2Fmigrating-subversion-repositories-using-svk%2F&amp;source=AdaRubyWeb&amp;style=normal&amp;service=bit.ly" height="61" width="50" title="Migrating Subversion repositories using SVK" alt=" Migrating Subversion repositories using SVK" /><br />
			</a>
		</div>
<p>Recently I got a task which involves moving, or let&#8217;s say copying, an entire Subversion repository with history to another server. Problem is, I didn&#8217;t have access to the server itself, which means I couldn&#8217;t do a regular &#8220;svnadmin dump&#8221;.</p>
<p>SVK comes to the rescue!</p>
<p><a href="http://www.flickr.com/photos/jenniferbuehrer/447221619/" rel="nofollow" ><img src="http://farm1.static.flickr.com/250/447221619_5ab9e67a0a.jpg?v=0" alt="Firefighter in style!" height="500" width="332" title="Migrating Subversion repositories using SVK" /></a></p>
<p>To make it work, first of all you need to install SVK. In Ubuntu it goes like this:</p>
<pre>sudo aptitude install svk</pre>
<p>When you first run svk it&#8217;ll ask you to create a local depot, you can simply agree to its suggestion.</p>
<p>Now we mirror both of the Subversion repositories we&#8217;re trying to import and export from and to. Note that you need to create the destination repository first.</p>
<pre>svk mirror //source http://svn.source.com/project1/
svk mirror //dest http://svn.dest.com/newproject/</pre>
<p>A bit of niceness with this method instead of a regular svn dump/load procedure is that:</p>
<ul>
<li> you can import to a different folder/subfolder instead of the root folder</li>
<li>you can do a partial export (subfolder of project repository)</li>
</ul>
<p>Before doing the actual migration process, let&#8217;s sync these mirrors first:</p>
<pre>svk sync //source
svk sync //dest</pre>
<p>And then you&#8217;ll do the real thing. But we can simulate it first by using &#8220;&#8211;check-only&#8221;, kinda&#8217; like when you simulate a DVD burning session before actually writing it.</p>
<pre>svk smerge //source //dest --incremental --log --sync --verbatim --track-rename --baseless --check-only</pre>
<p>There are several switches that I used above, feel free to use them only as needed:</p>
<ul>
<li>-I [--incremental]: apply each change individually</li>
<li>-l [--log]: use logs of merged revisions as commit message</li>
<li>-B [--baseless]: use the earliest revision as the merge point</li>
<li>-s [--sync]: synchronize mirrored sources before update</li>
<li>&#8211;verbatim: verbatim merge log without indents and header</li>
<li>&#8211;track-rename: track changes made to renamed node</li>
<li>-C [--check-only]: try operation but make no changes</li>
</ul>
<p>After you&#8217;re ready, redo the above command without &#8220;&#8211;check-only&#8221;:</p>
<pre>svk smerge //source //dest --incremental --log --sync --verbatim --track-rename --baseless</pre>
<p>Simply wait several minutes&#8211;or possibly hours (or days!) if your project is sufficiently large&#8211;for SVK to do its job for you!</p>
<p>Are there disadvantages of using SVK to a &#8220;genuine&#8221; SVN dump/load? Sure, among them is that the original author names are lost.</p>
<p>Good luck!</p>
<p>Related articles and resources:</p>
<ul>
<li><a href="http://svk.bestpractical.com/" rel="nofollow" >HomePage &#8211; SVK Wiki</a></li>
<li><a href="http://utsl.gen.nz/talks/git-svn/intro.html" rel="nofollow" >An introduction to git-svn for Subversion/SVK users and deserters</a></li>
<li><a href="http://scottstuff.net/blog/articles/2005/07/07/distributed-development-with-svk" rel="nofollow" >Distributed development with SVK</a></li>
<li><a href="http://www.newartisans.com/blog_files/svk.primer.php" rel="nofollow" >An SVK primer | Tools | New Artisans LLC</a></li>
<li><a href="http://hsenidians.blogspot.com/2007/07/using-svk-for-offline-access-to.html" rel="nofollow" >Make it happen: Using SVK for offline access to subversion</a></li>
<li><a href="http://www.jkraemer.net/2006/8/15/work-offline-with-svk-and-subversion" rel="nofollow" >jkraemer.net: Work offline with SVK and Subversion</a></li>
<li><a href="http://sablog.com/archives/2006/03/20/svk-mirror-subversion-repositories-locally-and-more" rel="nofollow" >SVK &#8211; Mirror Subversion Repositories Locally and More at sablog.com</a></li>
</ul>


<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/20/migrating-subversion-repositories-using-svk/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Rearranging Stuff Notice, `Experience Report&#8217; Coming Up Soon!</title>
		<link>http://www.adaruby.com/2008/02/10/rearranging-stuff-notice-experience-report-coming-up-soon/</link>
		<comments>http://www.adaruby.com/2008/02/10/rearranging-stuff-notice-experience-report-coming-up-soon/#comments</comments>
		<pubDate>Mon, 11 Feb 2008 00:13:32 +0000</pubDate>
		<dc:creator>ceefour</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Opinions]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Rails Hosting]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[305]]></category>
		<category><![CDATA[317]]></category>
		<category><![CDATA[321]]></category>
		<category><![CDATA[324]]></category>
		<category><![CDATA[328]]></category>
		<category><![CDATA[335]]></category>
		<category><![CDATA[355]]></category>
		<category><![CDATA[356]]></category>

		<guid isPermaLink="false">http://adaruby.com/2008/02/10/rearranging-stuff-notice-experience-report-coming-up-soon/</guid>
		<description><![CDATA[
			
				
			
		
I&#8217;d like to express a warm notice that AdaRuby.com might be down intermittently as we&#8217;ll be having major rearrangement and server upgrades of our hosting facilities in the coming days.

The upside is, when it&#8217;s done (and oh YES it will be done!), I&#8217;ll be providing you interesting information on the stuff that we&#8217;re doing, especially [...]


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%2F02%2F10%2Frearranging-stuff-notice-experience-report-coming-up-soon%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.adaruby.com%2F2008%2F02%2F10%2Frearranging-stuff-notice-experience-report-coming-up-soon%2F&amp;source=AdaRubyWeb&amp;style=normal&amp;service=bit.ly" height="61" width="50" title="Rearranging Stuff Notice, `Experience Report&#8217; Coming Up Soon!" alt=" Rearranging Stuff Notice, `Experience Report&#8217; Coming Up Soon!" /><br />
			</a>
		</div>
<p>I&#8217;d like to express a warm notice that AdaRuby.com might be down intermittently as we&#8217;ll be having major rearrangement and server upgrades of our hosting facilities in the coming days.</p>
<p><a href="http://www.flickr.com/photos/asmundur/2209570995/" rel="nofollow"  title="Maintenance, rearranging, server upgrades"><img src="http://farm3.static.flickr.com/2112/2209570995_3969af4b35.jpg" title="Rearranging Stuff Notice, `Experience Report&#8217; Coming Up Soon!" alt="2209570995 3969af4b35 Rearranging Stuff Notice, `Experience Report&#8217; Coming Up Soon!" /></a></p>
<p>The upside is, when it&#8217;s done (and oh YES it will be done!), I&#8217;ll be providing you interesting information on the stuff that we&#8217;re doing, especially our experience regarding the hosting services that we have been using all this time.</p>
<p>Looking forward to hearing you share your experience as well!</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/02/10/rearranging-stuff-notice-experience-report-coming-up-soon/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Design Patterns in Ruby: Software Engineering, The Ruby Way</title>
		<link>http://www.adaruby.com/2008/01/31/design-patterns-in-ruby-software-engineering-the-ruby-way/</link>
		<comments>http://www.adaruby.com/2008/01/31/design-patterns-in-ruby-software-engineering-the-ruby-way/#comments</comments>
		<pubDate>Thu, 31 Jan 2008 11:21:43 +0000</pubDate>
		<dc:creator>ceefour</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[Cool]]></category>
		<category><![CDATA[Enterprise]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Opinions]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[299]]></category>
		<category><![CDATA[308]]></category>
		<category><![CDATA[309]]></category>
		<category><![CDATA[318]]></category>
		<category><![CDATA[319]]></category>
		<category><![CDATA[343]]></category>

		<guid isPermaLink="false">http://adaruby.com/2008/01/31/design-patterns-in-ruby-software-engineering-the-ruby-way/</guid>
		<description><![CDATA[
			
				
			
		
Design Patterns in Ruby documents smart ways to resolve many problems that Ruby developers commonly encounter. Addison-Wesley Professional press has this exciting book, authored by Russ Olsen.
Russ Olsen has done a great job of selecting classic patterns and augmenting these with newer patterns that have special relevance for Ruby. Most design pattern books are based [...]


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%2F31%2Fdesign-patterns-in-ruby-software-engineering-the-ruby-way%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.adaruby.com%2F2008%2F01%2F31%2Fdesign-patterns-in-ruby-software-engineering-the-ruby-way%2F&amp;source=AdaRubyWeb&amp;style=normal&amp;service=bit.ly" height="61" width="50" title="Design Patterns in Ruby: Software Engineering, The Ruby Way" alt=" Design Patterns in Ruby: Software Engineering, The Ruby Way" /><br />
			</a>
		</div>
<p><a href="http://www.amazon.com/gp/product/0321490452?ie=UTF8&amp;tag=adaruby-20&amp;link_code=as3&amp;camp=211189&amp;creative=373489&amp;creativeASIN=0321490452" rel="nofollow" ><strong>Design Patterns in Ruby</strong></a> documents smart ways to resolve many problems that Ruby developers commonly encounter. Addison-Wesley Professional press has this exciting book, authored by <a href="http://www.amazon.com/exec/obidos/search-handle-url/105-0627583-5658824?%5Fencoding=UTF8&amp;search-type=ss&amp;index=books&amp;field-author=Russ%20Olsen" rel="nofollow" >Russ Olsen</a>.</p>
<blockquote><p>Russ Olsen has done a great job of selecting classic patterns and augmenting these with newer patterns that have special relevance for Ruby. Most design pattern books are based on C++ and Java. But Ruby is different—and the language&#8217;s unique qualities make design patterns easier to implement and use.</p>
<p>In this book, Russ Olsen demonstrates how to combine Ruby&#8217;s power and elegance with patterns, and write more sophisticated, effective software with far fewer lines of code.The book especially calls attention to Ruby features that simplify the use of patterns, including dynamic typing, code closures, and &#8220;mixins&#8221; for easier code reuse.</p>
<p><strong>Design Patterns in Ruby </strong>also identifies innovative new patterns that have emerged from the Ruby community. These include ways to create custom objects with metaprogramming, as well as the ambitious Rails-based &#8220;Convention over Configuration&#8221; pattern, designed to help integrate entire applications and frameworks.</p></blockquote>
<p>More resources:</p>
<ul>
<li><a href="http://www.amazon.com/gp/product/0321490452?ie=UTF8&amp;tag=adaruby-20&amp;link_code=as3&amp;camp=211189&amp;creative=373489&amp;creativeASIN=0321490452" rel="nofollow" >&#8220;Design Patterns in Ruby&#8221; at Amazon.com</a></li>
<li><a href="http://search.barnesandnoble.com/booksearch/isbnInquiry.asp?z=y&amp;endeca=1&amp;isbn=0321490452&amp;itm=9" rel="nofollow" >Review at barnesandnoble homepage</a></li>
</ul>


<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/31/design-patterns-in-ruby-software-engineering-the-ruby-way/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ruby on Rails, Java EE, RIA, Adobe Flex, Comet, Messaging, EDA, SOA, &#8230;, ouch!!</title>
		<link>http://www.adaruby.com/2008/01/17/ruby-on-rails-java-ee-ria-adobe-flex-comet-messaging-eda-soa-ouch/</link>
		<comments>http://www.adaruby.com/2008/01/17/ruby-on-rails-java-ee-ria-adobe-flex-comet-messaging-eda-soa-ouch/#comments</comments>
		<pubDate>Thu, 17 Jan 2008 11:25:37 +0000</pubDate>
		<dc:creator>ceefour</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Cool]]></category>
		<category><![CDATA[Enterprise]]></category>
		<category><![CDATA[JRuby]]></category>
		<category><![CDATA[Opinions]]></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>
		<category><![CDATA[286]]></category>
		<category><![CDATA[291]]></category>
		<category><![CDATA[299]]></category>
		<category><![CDATA[309]]></category>
		<category><![CDATA[311]]></category>
		<category><![CDATA[322]]></category>
		<category><![CDATA[325]]></category>
		<category><![CDATA[327]]></category>
		<category><![CDATA[330]]></category>
		<category><![CDATA[331]]></category>
		<category><![CDATA[332]]></category>
		<category><![CDATA[333]]></category>
		<category><![CDATA[350]]></category>
		<category><![CDATA[351]]></category>
		<category><![CDATA[353]]></category>
		<category><![CDATA[358]]></category>
		<category><![CDATA[366]]></category>
		<category><![CDATA[368]]></category>

		<guid isPermaLink="false">http://adaruby.com/2008/01/17/ruby-on-rails-java-ee-ria-adobe-flex-comet-messaging-eda-soa-ouch/</guid>
		<description><![CDATA[
			
				
			
		
You know what, I really wanna learn this whole JavaEE-related thingy&#8230;&#8230;
For some reason it&#8217;s unavoidable&#8230;&#8230;. it&#8217;s bound to be touched by me&#8230;&#8230;

You see, the trend is going RIA. MVC is going away. AJAX ain&#8217;t gonna compete. At least not fully. And will lose in many ways in respect to something like Adobe&#8217;s Flex. (Unfortunately there&#8217;s [...]


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%2F17%2Fruby-on-rails-java-ee-ria-adobe-flex-comet-messaging-eda-soa-ouch%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.adaruby.com%2F2008%2F01%2F17%2Fruby-on-rails-java-ee-ria-adobe-flex-comet-messaging-eda-soa-ouch%2F&amp;source=AdaRubyWeb&amp;style=normal&amp;service=bit.ly" height="61" width="50" title="Ruby on Rails, Java EE, RIA, Adobe Flex, Comet, Messaging, EDA, SOA, &#8230;, ouch!!" alt=" Ruby on Rails, Java EE, RIA, Adobe Flex, Comet, Messaging, EDA, SOA, &#8230;, ouch!!" /><br />
			</a>
		</div>
<p>You know what, I really wanna learn this whole <a href="http://java.sun.com/javaee/" rel="nofollow" >JavaEE</a>-related thingy&#8230;&#8230;</p>
<p>For some reason it&#8217;s unavoidable&#8230;&#8230;. it&#8217;s bound to be touched by me&#8230;&#8230;</p>
<p><a href="http://www.flickr.com/photos/ckinskey/2197267694/" rel="nofollow"  title="too many things at once!"><img src="http://farm3.static.flickr.com/2059/2197267694_57c9a653b2.jpg?v=0" title="Ruby on Rails, Java EE, RIA, Adobe Flex, Comet, Messaging, EDA, SOA, &#8230;, ouch!!" alt=" Ruby on Rails, Java EE, RIA, Adobe Flex, Comet, Messaging, EDA, SOA, &#8230;, ouch!!" /></a></p>
<p>You see, the trend is going <a href="http://en.wikipedia.org/wiki/Rich_Internet_application" rel="nofollow" >RIA</a>. <a href="http://en.wikipedia.org/wiki/Model-view-controller" rel="nofollow" >MVC</a> is going away. <a href="http://en.wikipedia.org/wiki/AJAX" rel="nofollow" >AJAX</a> ain&#8217;t gonna compete. At least not fully. And will lose in many ways in respect to something like <a href="http://www.adobe.com/products/flex/" rel="nofollow" >Adobe&#8217;s Flex</a>. (Unfortunately there&#8217;s not much competitor better than Flex, and fortunately it&#8217;d probably be &#8220;standard&#8221; in the near future). Esp. with <a href="http://www.readwriteweb.com/archives/adobe_takes_fle.php" rel="nofollow" >Flex going open source</a>. Flex will need a backend, since it&#8217;s not a server-side product. There is <a href="http://www.adobe.com/products/livecycle/dataservices/" rel="nofollow" >Flex LiveCycle Data Services ES</a> (what a name!!) by Adobe. There&#8217;s also <a href="http://labs.adobe.com/technologies/blazeds/" rel="nofollow" >BlazeDS</a> open source. There&#8217;s also the excellent <a href="http://www.themidnightcoders.com/weborb/" rel="nofollow" >WebORB</a>, which is <a href="http://www.themidnightcoders.com/weborb/rubyonrails/index.htm" rel="nofollow" >free <strong>and open source</strong> for Rails</a> and <a href="http://www.themidnightcoders.com/weborb/php/index.htm" rel="nofollow" >PHP</a>. Oh yeah, it&#8217;s free for Rails! <img src='http://www.adaruby.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' title="Ruby on Rails, Java EE, RIA, Adobe Flex, Comet, Messaging, EDA, SOA, &#8230;, ouch!!" /> </p>
<p>Sure you can go with plain Rails, but it&#8217;s maybe too much work, when WebORB already does it for you.</p>
<p>This is wonderful, but it only gives you <a href="http://en.wikipedia.org/wiki/Remote_procedure_call" rel="nofollow" >plain RPC</a>. It&#8217;s traditional (legacy?) synchronous RPC camouflaged as &#8220;asynchronous&#8221;.</p>
<p>Real asynchronous power comes from <a href="http://en.wikipedia.org/wiki/Message_queue" rel="nofollow" >Messaging</a>. And the buzzword is now <a href="http://en.wikipedia.org/wiki/Comet_%28programming%29" rel="nofollow" >Comet</a>. The latest <a href="http://www.mortbay.org/" rel="nofollow" >Jetty</a> already <a href="http://ajaxian.com/archives/jetty-servlet-container-implements-comet" rel="nofollow" >supports Comet technique</a>, which can continuously &#8220;streams&#8221; asynchronous messages and data <strong>to</strong> (instead of being pulled) your client-side web UI&#8230; (that might just be a Flex app)</p>
<p>Simple messaging is fine, but the real power of messaging comes from features that had existed for a long time it&#8217;s actually legacy, such as publish/subcribe, message routing, and reliable delivery and timeouts. Fortunately, we have <a href="http://activemq.apache.org/" rel="nofollow" >ActiveMQ</a>, and yes we have <a href="http://code.google.com/p/activemessaging/wiki/ActiveMessaging" rel="nofollow" >activemessaging library for Ruby and Rails plugin</a>.</p>
<p>Unfortunately messaging servers have different protocols. Although there are &#8220;universal&#8221; protocols like <a href="http://stomp.codehaus.org/Protocol" rel="nofollow" >Stomp </a>and <a href="http://www.iona.com/opensource/amqp/" rel="nofollow" >AMQP</a> (backed by <a href="http://www.rabbitmq.com/" rel="nofollow" >RabbitMQ</a>), you can also use an <a href="http://en.wikipedia.org/wiki/Enterprise_Service_Bus" rel="nofollow"  title="Enterprise service bus">ESB</a> like <a href="http://mule.mulesource.org/" rel="nofollow" >Mule</a> or <a href="https://open-esb.dev.java.net/" rel="nofollow" >OpenESB</a> or <a href="http://servicemix.apache.org/" rel="nofollow" >Apache ServiceMix</a> if your component needs to talk to components with a different protocol. Oh yes they&#8217;re from the Java world.</p>
<p>Even as we&#8217;re embracing THE <a href="http://wiki.rubyonrails.org/rails/pages/ActiveRecord" rel="nofollow" >ActiveRecord</a>, the Java community coming up with an also-cool solution called <a href="http://java.sun.com/javaee/overview/faq/persistence.jsp" rel="nofollow"  title="Java Persistence API">JPA</a>, supported by all popular Java ORM tools such as <a href="http://www.hibernate.org/" rel="nofollow" >Hibernate</a> and <a href="http://www.oracle.com/technology/products/ias/toplink/index.html" rel="nofollow" >TopLink</a>; Microsoft strikes back with the invulnerable <a href="http://msdn2.microsoft.com/en-us/netframework/aa904594.aspx" rel="nofollow" >LINQ</a>.</p>
<p>Yet we still have too many queued messages and database records to handle, we need to know how to make use of them. <a href="http://en.wikipedia.org/wiki/Event_Driven_Architecture" rel="nofollow"  title="Event Driven Architecture">EDA</a> comes to the rescue, like what <a href="http://esper.codehaus.org/" rel="nofollow" >Esper</a> does. And of course <a href="http://en.wikipedia.org/wiki/Business_Intelligence" rel="nofollow"  title="Business Intelligence">BI</a> and reporting tools such as <a href="http://www.jaspersoft.com/JasperSoft_JasperReports.html" rel="nofollow" >JasperReports</a>, <a href="http://www.pentaho.com/" rel="nofollow" >Pentaho</a> and Ruby&#8217;s <a href="http://rubyreports.org/" rel="nofollow" >Ruport</a>.</p>
<p>We like <a href="http://en.wikipedia.org/wiki/REST" rel="nofollow" >REST</a>&#8217;s simplicity over <a href="http://fuzzypanic.blogspot.com/2006/04/ws-deathstar.html" rel="nofollow"  title="WS-DeathStar">WS-*</a> for enterprise-y <a href="http://en.wikipedia.org/wiki/Service-oriented_architecture" rel="nofollow"  title="Service-oriented architecture">SOA</a> apps. <a href="http://microformats.org/" rel="nofollow" >Microformats</a> is very nice with just a little <a href="http://code.whytheluckystiff.net/hpricot/" rel="nofollow" >Hpricot</a> and <a href="http://mofo.rubyforge.org/" rel="nofollow" >Mofo</a> goodness. And thanks to <a href="https://rubyforge.org/projects/mechanize/" rel="nofollow" >Mechanize</a> or <a href="http://scrubyt.org/" rel="nofollow" >Scrubyt</a> or <a href="http://openkapow.com/" rel="nofollow" >openkapow</a> and the good ole&#8217; <a href="http://en.wikipedia.org/wiki/RSS" rel="nofollow" >RSS</a>, mashup is always getting easier. Let&#8217;s hope Atom&#8217;s <a href="http://atomenabled.org/" rel="nofollow"  title="Atom Publishing Protocol">APP</a> really does take off as well. But sometimes we want more flexibility, we want <a href="http://en.wikipedia.org/wiki/Business_Process_Modeling" rel="nofollow"  title="Business Process Modeling">BPM</a>-powered workflow. No worries, we have <a href="http://www.jboss.com/products/jbpm" rel="nofollow" >JBoss&#8217;</a> <a href="http://jbpm.org/" rel="nofollow" >jBPM</a>. Our Ruby community also has <a href="http://openwferu.rubyforge.org/" rel="nofollow" >OpenWFEru</a>!</p>
<p>Everybody hates the login form, especially if it comes more often than we brush our teeth. We want <a href="http://en.wikipedia.org/wiki/Single_sign-on" rel="nofollow"  title="Single sign-on">SSO</a>, be it <a href="http://www.ja-sig.org/products/cas/" rel="nofollow" >CAS</a>, <a href="http://openid.net/" rel="nofollow" >OpenID</a>, <a href="http://en.wikipedia.org/wiki/SAML" rel="nofollow" >SAML</a>, or plain <a href="http://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol" rel="nofollow"  title="Lightweight Directory Access Protocol">LDAP</a> (with <a href="http://www.openldap.org/" rel="nofollow" >OpenLDAP</a>), we want it now.</p>
<p>And no, I haven&#8217;t forgotten <a href="http://code.google.com/android/" rel="nofollow" >Android</a>, nor <a href="http://www.apple.com/iphone/" rel="nofollow" >iPhone</a>, nor <a href="http://www.symbian.com/" rel="nofollow" >Symbian</a>, nor <a href="http://www.microsoft.com/windowsmobile/smartphone/default.mspx" rel="nofollow" >Windows Mobile</a>. The mobile space is getting more, not less, fragmented. All because they know the market is growing. Everybody wants a pie. (me too!)</p>
<p><a href="http://www.zedshaw.com/rants/rails_is_a_ghetto.html" rel="nofollow" >You&#8217;ve heard him</a>. Not all startups are profitable. Especially not when we&#8217;re fighting with each other. The &#8220;enterprise&#8221;, and corporate, has money&#8230; (unfortunately not all of us do, no matter how much we [all] want it&#8230;)</p>
<p>Users are getting more demanding and demands are getting more complicated, so are the technologies. We probably should embrace these technologies and the people who work on them (whether paid or unpaid or voluntary or forced&#8230;!) more so than we criticize and demotivate each other.</p>
<p><a href="http://www.ruby-lang.org/" rel="nofollow" >Ruby</a> is a great tool, and so is <a href="http://java.sun.com/" rel="nofollow" >Java</a> (<a href="http://en.wikipedia.org/wiki/Java_Virtual_Machine" rel="nofollow" >JVM</a>) and so is <a href="http://jruby.codehaus.org/" rel="nofollow" >JRuby</a> and its close mates like <a href="http://groovy.codehaus.org/" rel="nofollow" >Groovy</a>, <a href="http://www.scala-lang.org/" rel="nofollow" >Scala</a>, <a href="http://www.jython.org/" rel="nofollow" >Jython</a>, and <a href="http://www.mozilla.org/rhino/" rel="nofollow" >Rhino</a> with <a href="http://www.ecmascript.org/" rel="nofollow" >ECMAScript 4</a> and <a href="http://www.ibm.com/developerworks/webservices/library/ws-ajax1/" rel="nofollow"  title="ECMAScript for XML">E4X</a> support. <a href="http://www.hendyirawan.com/2007/08/20/erlang-the-concurrent-programming-language/" rel="nofollow" >Some people are also starting to fall in love</a> with <a href="http://erlang.org/" rel="nofollow" >Erlang</a>.</p>
<p>Oh well&#8230; This isn&#8217;t a rant. It&#8217;s just a brain-dump from me. Hope somebody finds it useful. Good morning guys <img src='http://www.adaruby.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' title="Ruby on Rails, Java EE, RIA, Adobe Flex, Comet, Messaging, EDA, SOA, &#8230;, ouch!!" /> </p>
<p><strong>UPDATE:</strong> Clarifications regarding WebORB and messaging protocols.</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/17/ruby-on-rails-java-ee-ria-adobe-flex-comet-messaging-eda-soa-ouch/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Ruby DSL Blocks: A Common Pattern For Developing DSL</title>
		<link>http://www.adaruby.com/2007/11/27/ruby-dsl-blocks-a-common-pattern-for-developing-dsl/</link>
		<comments>http://www.adaruby.com/2007/11/27/ruby-dsl-blocks-a-common-pattern-for-developing-dsl/#comments</comments>
		<pubDate>Tue, 27 Nov 2007 11:00:59 +0000</pubDate>
		<dc:creator>ceefour</dc:creator>
				<category><![CDATA[Cool]]></category>
		<category><![CDATA[Opinions]]></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/27/ruby-dsl-blocks-a-common-pattern-for-developing-dsl/</guid>
		<description><![CDATA[
			
				
			
		
There’s a common pattern for developing DSL (Domain Specific Language) in Ruby. It’s used in RSpec, the Statemachine Gem, and Unclebob’s Clean Code talk at RailsConf 2007. The name for this pattern is the DSL Block Pattern.


RSpec
describe "Bowling Game" do
    it "should score 0 on a gutter game" do
    [...]


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%2F27%2Fruby-dsl-blocks-a-common-pattern-for-developing-dsl%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.adaruby.com%2F2007%2F11%2F27%2Fruby-dsl-blocks-a-common-pattern-for-developing-dsl%2F&amp;source=AdaRubyWeb&amp;style=normal&amp;service=bit.ly" height="61" width="50" title="Ruby DSL Blocks: A Common Pattern For Developing DSL" alt=" Ruby DSL Blocks: A Common Pattern For Developing DSL" /><br />
			</a>
		</div>
<p>There’s a common pattern for developing DSL (Domain Specific Language) in Ruby. It’s used in RSpec, the Statemachine Gem, and Unclebob’s Clean Code talk at RailsConf 2007. The name for this pattern is the <strong>DSL Block Pattern</strong>.</p>
<blockquote></blockquote>
<blockquote></blockquote>
<blockquote><p><strong>RSpec</strong></p>
<pre><code>describe "Bowling Game" do
    it "should score 0 on a gutter game" do
        game = Game.new
        20.times { game.roll(0) }
        game.score.should eql(0)
    end
end
</code></pre>
<p><strong><code>Statemachine</code></strong></p>
<p>sm = Statemachine.build do<br />
trans :locked, :coin, :unlocked<br />
trans :locked, :pass, :locked<br />
trans :unlocked, :pass, :locked<br />
trans :unlocked, :coin, :unlocked<br />
end</p>
<p><strong>Parser</strong></p>
<pre><code>parser = Args.expect do
    boolean "l"
    number "p"
    string "d"
end
</code></pre>
</blockquote>
<blockquote><p>You’ve got to write code for specific domain such as writing specifications (RSpec), defining a Statemachine, or defining command line arguments (Unclebob’s Clean Code talk). These domains have a contained and well defined terminology set. Often the cleanest, most elegant way to express this code is to create a DSL.</p></blockquote>
<blockquote><p>We can see that the Order object is doing all the work.  It’s got the responsibility of interpreting the DSL, so let’s call it the Interpreter Object.  The Module::order method simply creates an instance of Order and calls istance_eval on it.  This causes the block to execute using the binding of the Order instance.  All of the methods on Order will be accessible to the block.</p></blockquote>
<p>For more information, read <a href="http://blog.8thlight.com/articles/2007/05/20/ruby-dls-blocks" rel="nofollow" >Ruby DSL Blocks article by Micah</a>.<a href="http://blog.8thlight.com/articles/2007/05/20/ruby-dls-blocks" rel="nofollow" ></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/27/ruby-dsl-blocks-a-common-pattern-for-developing-dsl/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Sexy DSL for Active Record Permissions</title>
		<link>http://www.adaruby.com/2007/11/19/concept-dsl-for-active-record-permissions/</link>
		<comments>http://www.adaruby.com/2007/11/19/concept-dsl-for-active-record-permissions/#comments</comments>
		<pubDate>Mon, 19 Nov 2007 15:49:59 +0000</pubDate>
		<dc:creator>ceefour</dc:creator>
				<category><![CDATA[Cool]]></category>
		<category><![CDATA[Enterprise]]></category>
		<category><![CDATA[Opinions]]></category>
		<category><![CDATA[Praises]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://adaruby.com/2007/11/19/concept-dsl-for-active-record-permissions/</guid>
		<description><![CDATA[
			
				
			
		
Robert Thau from Smartleaf proposes a cool idea for implementing DSL for use in Active Record permissions. It makes it easy  for a lot of users to have access rights and very exciting at the same time&#8230;
This is the Tease&#8230;.

class Order &#60; ActiveRecord::Base

  access_control_keys ['id', 'owner_id', 'paid']

  require_privilege :place,
    [...]


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%2F19%2Fconcept-dsl-for-active-record-permissions%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.adaruby.com%2F2007%2F11%2F19%2Fconcept-dsl-for-active-record-permissions%2F&amp;source=AdaRubyWeb&amp;style=normal&amp;service=bit.ly" height="61" width="50" title="Sexy DSL for Active Record Permissions" alt=" Sexy DSL for Active Record Permissions" /><br />
			</a>
		</div>
<p>Robert Thau from <a href="http://www.smartleaf.com/" rel="nofollow" >Smartleaf</a> proposes a cool idea for <a href="http://www.smartleaf.com/rst/perm_present/perm_present.html" rel="nofollow" >implementing DSL for use in Active Record permissions</a>. It makes it easy  for a lot of users to have access rights and very exciting at the same time&#8230;</p>
<blockquote><p>This is the Tease&#8230;.</p></blockquote>
<blockquote>
<pre>class Order &lt; ActiveRecord::Base

  access_control_keys ['id', 'owner_id', 'paid']

  require_privilege :place,
    :for_action =&gt; :create,
    :to_update_attribute =&gt; [:payment_authenticator, :paid]

  require_privilege :edit,      # LineItem also checks this for attr changes
    :to_associate_as  =&gt; ['LineItem#order'],
    :to_dissociate_as =&gt; ['LineItem#order'],
    :to_update_attribute =&gt; [ :shipping_address ]

  require_privilege :ship,       :to_update_attribute =&gt; :shipped

  ...

end</pre>
<p>&nbsp;</p>
<p> The implementation:</p>
<ul>
<li>Data model</li>
<li>Checking privileges:  does user <em>x</em> have privilege <em>y</em>     on this order?</li>
<li>Finding <em>all</em> orders where user <em>x</em> has      privilege <em>y</em></li>
<li>Adding privilege checks in interesting places&#8230;
<ul>
<li>On events:  create, update&#8230;</li>
<li>On attribute sets</li>
<li>For associations</li>
</ul>
</li>
</ul>
</blockquote>
<blockquote><p>It&#8217;s just Ruby!  Class variables and class methods:</p>
<blockquote>
<ul>
<li>All declared privileges (for choosers in the UI)</li>
<li>Dual-keyed hash:  <tt>reflected_privilege[<em>type</em>][<em>key</em>]</tt></li>
<li>&#8230; e.g., <tt>reflected_privilege[:read_attribute][<em>attr</em>]</tt></li>
<li>&#8230; e.g., <tt>reflected_privilege[:associate][<em>assoc_key</em>]</tt></li>
<li>Class helpers (<tt>permits_update_attr?</tt>, etc.) just read the     hash, and do the appropriate check.</li>
</ul>
</blockquote>
</blockquote>
<blockquote></blockquote>
<p>Read more on:<a href="http://www.smartleaf.com/rst/perm_present/perm_present.html" rel="nofollow" ></a></p>
<blockquote>
<p>&nbsp;</p>
</blockquote>
<p><a href="http://www.smartleaf.com/rst/perm_present/perm_present.html" rel="nofollow" >http://www.smartleaf.com/rst/perm_present/perm_present.html</a></p>
<p><a href="http://www.smartleaf.com/rst/perm_present/perm_present.html" rel="nofollow" ></a>No downloadable code (yet), but still cool <img src='http://www.adaruby.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' title="Sexy DSL for Active Record Permissions" /> </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/19/concept-dsl-for-active-record-permissions/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Be an Expert of Ruby on Rails&#8217; Active Record!</title>
		<link>http://www.adaruby.com/2007/10/23/be-an-expert-of-ruby-on-rails-active-record/</link>
		<comments>http://www.adaruby.com/2007/10/23/be-an-expert-of-ruby-on-rails-active-record/#comments</comments>
		<pubDate>Tue, 23 Oct 2007 14:54:35 +0000</pubDate>
		<dc:creator>ceefour</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[Cool]]></category>
		<category><![CDATA[Enterprise]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Opinions]]></category>
		<category><![CDATA[Praises]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://adaruby.com/2007/10/23/be-an-expert-of-ruby-on-rails-active-record/</guid>
		<description><![CDATA[
			
				
			
		
Any Ruby on Rails programmer would have touched Active Record, probably in a very early phase. Active Record deals with everything that&#8217;s related to the database of your Ruby on Rails applications, and in many ways a bit more.

Apress recently launched Pro Active Record: Databases with Ruby on Rails, which I can honestly say, is [...]


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%2F10%2F23%2Fbe-an-expert-of-ruby-on-rails-active-record%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.adaruby.com%2F2007%2F10%2F23%2Fbe-an-expert-of-ruby-on-rails-active-record%2F&amp;source=AdaRubyWeb&amp;style=normal&amp;service=bit.ly" height="61" width="50" title="Be an Expert of Ruby on Rails&#8217; Active Record!" alt=" Be an Expert of Ruby on Rails&#8217; Active Record!" /><br />
			</a>
		</div>
<p>Any <a href="http://www.rubyonrails.org/" rel="nofollow" >Ruby on Rails</a> programmer would have touched <a href="http://ar.rubyonrails.com/" rel="nofollow" >Active Record</a>, probably in a very early phase. Active Record deals with everything that&#8217;s related to the database of your Ruby on Rails applications, and in many ways a bit more.</p>
<p><a href="http://www.flickr.com/photos/debeney/1338722410/" rel="nofollow" ><img src="http://farm2.static.flickr.com/1030/1338722410_b59d1018af.jpg?v=0" height="375" width="500" title="Be an Expert of Ruby on Rails&#8217; Active Record!" alt=" Be an Expert of Ruby on Rails&#8217; Active Record!" /></a></p>
<p><a href="http://www.apress.com/" rel="nofollow" >Apress</a> recently launched <a href="http://www.amazon.com/gp/product/1590598474?ie=UTF8&amp;tag=adaruby-20&amp;link_code=as3&amp;camp=211189&amp;creative=373489&amp;creativeASIN=1590598474" rel="nofollow" >Pro Active Record: Databases with Ruby on Rails</a>, which I can honestly say, is the most exhaustive, if not the only, book about Active Record I&#8217;ve ever known to date.</p>
<p>The book starts with a little bit of a “wow” factor, especially true if you&#8217;re new to Ruby on Rails: demonstrating the ease of use of Active Record itself. No configuration needed! Seriously, that&#8217;s not the claim of the book but it&#8217;s fact of Active Record: all you need is your database credentials and name of the table you want to work with. Everything else is almost magical.</p>
<p>The next sections deal with installing and configuring Active Record. I have to say sometimes (based on my own experiences) it&#8217;s not that trivial, especially on Windows. The book guides you through installing drivers/adapters for common and less popular DBMSes. OK, let&#8217;s name them: DB2, Firebird, FrontBase, MySQL, OpenBase, Oracle, PostgreSQL, SQLite, Microsoft SQL Server, Sybase, they&#8217;re all covered! I was wondering if I can connect to ODBC?</p>
<p>The second chapter deals with the “simple” things, namely, how to do SELECT, UPDATE, DELETE, INSERT, or what you cool guys usually call “CRUD”, the Active Record-way. This information is usually taken for granted, but it&#8217;s explained quite deeply in this book.</p>
<p>The next chapter guides you to design your tables so they work smoothly with Active Record. Although you can use legacy designs just fine with Active Record, your life will be much, much easier if you follow Active Record conventions. This book shows you just how, and in many cases, why.</p>
<p>Chapter 4 shows you how to use core Active Record features, including triggers and validations. If you&#8217;re asking that question, then the answer is yes, it&#8217;s almost completely overlapping with native but proprietary DBMS functionality such as PL/SQL, DBMS triggers, and constraints. The book doesn&#8217;t seem to explain much of this holy war, but I encourage you to ask Google why <a href="http://www.google.co.id/search?q=stored+procedures+are+evil" rel="nofollow" >stored procedures are evil</a>.</p>
<p>Chapter 5 gives you a view of Active Record “bonus features”. I think the chapter title is a misnomer because these features are not just bonus, but one of the greatest strengths of Active Record (compared to other ORM). Things like nested sets, lists, observers, aggregations, and little bit of extending Active Record: these are things that you&#8217;ll do, and use, daily &#8212; not something you try to avoid. They make your life as a DB integrator easier, not the other way around.</p>
<p>You want to make sure your app works fine, chapter 6 covers unit testing very thoroughly, down to the descriptions of errors (i.e. Active Record Exception objects) you may encounter.</p>
<p>If you already had a previous database, as most of us are, no worries, chapter 7 will guide you how to work with them. This is one of the most useful chapters in this book, because there is less information on the Internet on this topic, but it&#8217;s very common that everybody is bound to meet this problem. Come on, who actually learned Active Record before hearing the word DBMS?</p>
<p>The last chapter talks about issues that you&#8217;ll encounter in the “real world”, including alternatives and related enhancements to Active Record. What follows is the appendix, which is a really useful quick reference.</p>
<p align="left">The book is really, really good. Full of core information, and related information that aren&#8217;t readily available even after asking Mr. Google a hundred times. Despite being written by 3 different developers: <a href="http://falicon.com/" rel="nofollow" >Kevin Marshall</a>, <a href="http://giantrobots.thoughtbot.com" rel="nofollow" >Chad Pytel</a>, and <a href="http://www.thoughtbot.com/" rel="nofollow" >Jon Yurek</a>; the entire book is nicely structured and feels cohesive. It will save you lots of time in times of frustration, you can look up the information much quickly here than does a search engine.</p>
<p>Interested already? You can get more information about <a href="http://www.amazon.com/gp/product/1590598474?ie=UTF8&amp;tag=adaruby-20&amp;link_code=as3&amp;camp=211189&amp;creative=373489&amp;creativeASIN=1590598474" rel="nofollow" >Pro Active Record book on Amazon</a>, and buy it there too of course. It&#8217;s also <a href="http://www.apress.com/book/view/9781590598474" rel="nofollow"  title="Databases with Ruby on Rails">available on Apress official site</a>.</p>
<p>Personal minor gripe, not a flaw, is there wasn&#8217;t a (detachable) cheatsheet. A poster-sized, deluxe exclusive cheatsheet would be a tremendous killer plus to this book. I really think Apress should make this kind of thing mandatory in the future, not only regular Appendixes.</p>
<p>Other resources related to this book:</p>
<ul>
<li><a href="http://jystewart.net/process/2007/10/boo-review-pro-activerecord/" rel="nofollow" >James Stewart&#8217;s review</a></li>
<li><a href="http://opensource.apress.com/article/288/pro-active-record-published" rel="nofollow" >Inside Apress blog</a></li>
</ul>


<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/10/23/be-an-expert-of-ruby-on-rails-active-record/feed/</wfw:commentRss>
		<slash:comments>7</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>
	</channel>
</rss>
