<?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>Pivotal Labs &#187; Ryan Dy</title>
	<atom:link href="http://pivotallabs.com/author/rdy/feed/" rel="self" type="application/rss+xml" />
	<link>http://pivotallabs.com</link>
	<description>Agility Developed</description>
	<lastBuildDate>Tue, 21 May 2013 16:50:52 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>SF Standup 03/14/2012: Capybara and push state</title>
		<link>http://pivotallabs.com/sf-standup-03-14-2012-capybara-and-push-state/</link>
		<comments>http://pivotallabs.com/sf-standup-03-14-2012-capybara-and-push-state/#comments</comments>
		<pubDate>Thu, 15 Mar 2012 04:00:00 +0000</pubDate>
		<dc:creator>Ryan Dy</dc:creator>
				<category><![CDATA[Standup]]></category>
		<category><![CDATA[gem]]></category>
		<category><![CDATA[gplv2]]></category>
		<category><![CDATA[qt]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://pivotallabs.com/sf-standup-03-14-2012-capybara-and-push-state/</guid>
		<description><![CDATA[<p><h2>Help</h2>

<p>No help</p>

<h2>interesting</h2>

<p>If you are using <a href="https://github.com/thoughtbot/capybara-webkit">capybara-webkit gem</a> that you should install QT 4.7+, if you need to use pushState/replaceState. Also defining those functions with mock implementations is another good solution.</p>

<p>The <a href="https://github.com/flori/term-ansicolor">gem term-ansicolor</a> has been removed from the <a href="https://github.com/heroku/heroku">heroku gem</a>. It is still a dependency of foreman which is used by the lastest Heroku stack. The license on gem term-ansicolor is gplv2.</p>

<p>Guard with spork takes away a lot of the pain of using spork. Use the <a href="https://github.com/guard/guard-spork">gem guard-spork</a> which takes care of building you a sample guardfile. It takes care of restarting the appropriate framework you have in use be it test unit, rspec or cucumber.</p> <a href="http://pivotallabs.com/sf-standup-03-14-2012-capybara-and-push-state/">Continue reading <span class="meta-nav">&#8594;</span></a></p><p>The post <a href="http://pivotallabs.com/sf-standup-03-14-2012-capybara-and-push-state/">SF Standup 03/14/2012: Capybara and push state</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></description>
				<content:encoded><![CDATA[<h2>Help</h2>
<p>No help</p>
<h2>interesting</h2>
<p>If you are using <a href="https://github.com/thoughtbot/capybara-webkit">capybara-webkit gem</a> that you should install QT 4.7+, if you need to use pushState/replaceState. Also defining those functions with mock implementations is another good solution.</p>
<p>The <a href="https://github.com/flori/term-ansicolor">gem term-ansicolor</a> has been removed from the <a href="https://github.com/heroku/heroku">heroku gem</a>. It is still a dependency of foreman which is used by the lastest Heroku stack. The license on gem term-ansicolor is gplv2.</p>
<p>Guard with spork takes away a lot of the pain of using spork. Use the <a href="https://github.com/guard/guard-spork">gem guard-spork</a> which takes care of building you a sample guardfile. It takes care of restarting the appropriate framework you have in use be it test unit, rspec or cucumber.</p>
<p>The post <a href="http://pivotallabs.com/sf-standup-03-14-2012-capybara-and-push-state/">SF Standup 03/14/2012: Capybara and push state</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://pivotallabs.com/sf-standup-03-14-2012-capybara-and-push-state/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SF Standup 9/13/2011: Tempfiles, Rails3.1 Asset Pipeline and Ruby Kids</title>
		<link>http://pivotallabs.com/sf-standup-9-13-2011-tempfiles-rails3-1-asset-pipeline-and-ruby-kids/</link>
		<comments>http://pivotallabs.com/sf-standup-9-13-2011-tempfiles-rails3-1-asset-pipeline-and-ruby-kids/#comments</comments>
		<pubDate>Tue, 13 Sep 2011 20:32:00 +0000</pubDate>
		<dc:creator>Ryan Dy</dc:creator>
				<category><![CDATA[Labs]]></category>

		<guid isPermaLink="false">http://pivotallabs.com/sf-standup-9-13-2011-tempfiles-rails3-1-asset-pipeline-and-ruby-kids/</guid>
		<description><![CDATA[<p><h2>Help</h2>

<ul>
<li>Tempfiles created by paperclip or similar ruby gems don't seem to get cleaned up. Is it best to monkey patch the use of the tempfiles and make sure unlink is called? Is it better to create a cron job that inspects tempfiles that haven't been touched for awhile and clean them up?</li>
</ul>

<h2>Interesting</h2>

<ul>
<li>If you are migrating from a Rails 3.1 release candidate you might need to generate a new production.rb file that configures that asset pipeline in production differently. Also, if you are using Capistrano 2.80 you should: load 'deploy/assets' in your deploy.rb file. This will do the proper compilation and copying of assets in your shared release folder. Check out the asset pipeline <a href="http://guides.rubyonrails.org/asset_pipeline.html">guide</a>.</li>
<li>Kids Ruby is have an event in cooperation with <a href="http://gogaruco.com">Gogaruco</a> at Pivotal Labs this Sunday from 12-2. Register for it <a href="http://kidsruby-gogaruco2011.eventbrite.com/">here</a>.</li>
</ul> <a href="http://pivotallabs.com/sf-standup-9-13-2011-tempfiles-rails3-1-asset-pipeline-and-ruby-kids/">Continue reading <span class="meta-nav">&#8594;</span></a></p><p>The post <a href="http://pivotallabs.com/sf-standup-9-13-2011-tempfiles-rails3-1-asset-pipeline-and-ruby-kids/">SF Standup 9/13/2011: Tempfiles, Rails3.1 Asset Pipeline and Ruby Kids</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></description>
				<content:encoded><![CDATA[<h2>Help</h2>
<ul>
<li>Tempfiles created by paperclip or similar ruby gems don&#8217;t seem to get cleaned up. Is it best to monkey patch the use of the tempfiles and make sure unlink is called? Is it better to create a cron job that inspects tempfiles that haven&#8217;t been touched for awhile and clean them up?</li>
</ul>
<h2>Interesting</h2>
<ul>
<li>If you are migrating from a Rails 3.1 release candidate you might need to generate a new production.rb file that configures that asset pipeline in production differently. Also, if you are using Capistrano 2.80 you should: load &#8216;deploy/assets&#8217; in your deploy.rb file. This will do the proper compilation and copying of assets in your shared release folder. Check out the asset pipeline <a href="http://guides.rubyonrails.org/asset_pipeline.html">guide</a>.</li>
<li>Kids Ruby is have an event in cooperation with <a href="http://gogaruco.com">Gogaruco</a> at Pivotal Labs this Sunday from 12-2. Register for it <a href="http://kidsruby-gogaruco2011.eventbrite.com/">here</a>.</li>
</ul>
<p>The post <a href="http://pivotallabs.com/sf-standup-9-13-2011-tempfiles-rails3-1-asset-pipeline-and-ruby-kids/">SF Standup 9/13/2011: Tempfiles, Rails3.1 Asset Pipeline and Ruby Kids</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://pivotallabs.com/sf-standup-9-13-2011-tempfiles-rails3-1-asset-pipeline-and-ruby-kids/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SF Standup 06/15/2011: Ruby 1.9.2patched and iScroll</title>
		<link>http://pivotallabs.com/sf-standup-06-13-2011-ruby-1-9-2patched-and-iscroll/</link>
		<comments>http://pivotallabs.com/sf-standup-06-13-2011-ruby-1-9-2patched-and-iscroll/#comments</comments>
		<pubDate>Thu, 16 Jun 2011 05:42:00 +0000</pubDate>
		<dc:creator>Ryan Dy</dc:creator>
				<category><![CDATA[Labs]]></category>
		<category><![CDATA[iscroll]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[require]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://pivotallabs.com/sf-standup-06-13-2011-ruby-1-9-2patched-and-iscroll/</guid>
		<description><![CDATA[<p><h2>Ask for Help</h2>

<h2>Interesting Things</h2>

<ul>
<li>Looking for performance patches from ruby 1.9.3 that improve the performance of require? They have been back ported to <a href="http://www.rubyinside.com/get-edge-ruby-faster-loading-ruby-1-9-2-now-4973.html">ruby1.9.2p180</a>.</li>
<li>A new version of <a href="http://cubiq.org/iscroll-v4-1-3-introduces-performance-mode">iScroll</a> has been released &#40;v4.1.3&#41;. It has performance fixes and better compatibility support. If you need position:fixed or overflow:scroll on a mobile device today you need to check it out.</li>
</ul> <a href="http://pivotallabs.com/sf-standup-06-13-2011-ruby-1-9-2patched-and-iscroll/">Continue reading <span class="meta-nav">&#8594;</span></a></p><p>The post <a href="http://pivotallabs.com/sf-standup-06-13-2011-ruby-1-9-2patched-and-iscroll/">SF Standup 06/15/2011: Ruby 1.9.2patched and iScroll</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></description>
				<content:encoded><![CDATA[<h2>Ask for Help</h2>
<h2>Interesting Things</h2>
<ul>
<li>Looking for performance patches from ruby 1.9.3 that improve the performance of require? They have been back ported to <a href="http://www.rubyinside.com/get-edge-ruby-faster-loading-ruby-1-9-2-now-4973.html">ruby1.9.2p180</a>.</li>
<li>A new version of <a href="http://cubiq.org/iscroll-v4-1-3-introduces-performance-mode">iScroll</a> has been released &#40;v4.1.3&#41;. It has performance fixes and better compatibility support. If you need position:fixed or overflow:scroll on a mobile device today you need to check it out.</li>
</ul>
<p>The post <a href="http://pivotallabs.com/sf-standup-06-13-2011-ruby-1-9-2patched-and-iscroll/">SF Standup 06/15/2011: Ruby 1.9.2patched and iScroll</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://pivotallabs.com/sf-standup-06-13-2011-ruby-1-9-2patched-and-iscroll/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SF Standup 06/13/2011: Ackmate and UTF8</title>
		<link>http://pivotallabs.com/sf-standup-06-13-2011-ackmate-and-utf8/</link>
		<comments>http://pivotallabs.com/sf-standup-06-13-2011-ackmate-and-utf8/#comments</comments>
		<pubDate>Mon, 13 Jun 2011 14:24:00 +0000</pubDate>
		<dc:creator>Ryan Dy</dc:creator>
				<category><![CDATA[Standup]]></category>
		<category><![CDATA[textmate]]></category>

		<guid isPermaLink="false">http://pivotallabs.com/sf-standup-06-13-2011-ackmate-and-utf8/</guid>
		<description><![CDATA[<p><h2>Ask for Help</h2>

<h2>Interesting Things</h2>

<ul>
<li>If you are having trouble with find and files with textmate or ackmate you might want to add an exlcusion for "solrdata" in textmate folder references exclusion list. Apparently this is fixed in an undocumented version of <a href="https://github.com/protocool/AckMate">ackmate</a> on github. </li>
<li>Peter Cooper and Jason Siefer have a new Javascript <a href="http://javascriptshow.com">podcast</a>, subscribe today!</li>
</ul> <a href="http://pivotallabs.com/sf-standup-06-13-2011-ackmate-and-utf8/">Continue reading <span class="meta-nav">&#8594;</span></a></p><p>The post <a href="http://pivotallabs.com/sf-standup-06-13-2011-ackmate-and-utf8/">SF Standup 06/13/2011: Ackmate and UTF8</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></description>
				<content:encoded><![CDATA[<h2>Ask for Help</h2>
<h2>Interesting Things</h2>
<ul>
<li>If you are having trouble with find and files with textmate or ackmate you might want to add an exlcusion for &#8220;solrdata&#8221; in textmate folder references exclusion list. Apparently this is fixed in an undocumented version of <a href="https://github.com/protocool/AckMate">ackmate</a> on github. </li>
<li>Peter Cooper and Jason Siefer have a new Javascript <a href="http://javascriptshow.com">podcast</a>, subscribe today!</li>
</ul>
<p>The post <a href="http://pivotallabs.com/sf-standup-06-13-2011-ackmate-and-utf8/">SF Standup 06/13/2011: Ackmate and UTF8</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://pivotallabs.com/sf-standup-06-13-2011-ackmate-and-utf8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GoGaRuCo &#039;09 &#8211; CouchDB + Ruby: Perform Like a Pr0n Star &#8211; Matt Aimonetti</title>
		<link>http://pivotallabs.com/gogaruco-09-couchdb-ruby-perform-like-a-pr0n-star-matt-aimonetti/</link>
		<comments>http://pivotallabs.com/gogaruco-09-couchdb-ruby-perform-like-a-pr0n-star-matt-aimonetti/#comments</comments>
		<pubDate>Sun, 19 Apr 2009 05:24:00 +0000</pubDate>
		<dc:creator>Ryan Dy</dc:creator>
				<category><![CDATA[Labs]]></category>
		<category><![CDATA[gogaruco]]></category>

		<guid isPermaLink="false">http://pivotallabs.com/gogaruco-09-couchdb-ruby-perform-like-a-pr0n-star-matt-aimonetti/</guid>
		<description><![CDATA[<p><p><a href="http://gogaruco.com/schedule/#aimonetti">CouchDB + Ruby: Perform Like a Pr0n Star - Matt Aimonetti</a></p>

<h2>Intro</h2>

<p><a href="http://www.flickr.com/photos/pivotallabs/3453844770/" title="GoGaRuCo '09 - CouchDB + Ruby: Perform Like a Pr0n Star - Matt Aimonetti by pivotalphotos, on Flickr"><img src="http://farm4.static.flickr.com/3544/3453844770_c84435a544.jpg" height="500" alt="GoGaRuCo '09 - CouchDB + Ruby: Perform Like a Pr0n Star - Matt Aimonetti" width="375" /></a></p>

<p>Matt Aimonetti is part of the Merb team.</p>

<p>Size matters</p>

<ul>
<li>memory usage</li>
<li>amount of servers</li>
<li>infrastructure</li>
</ul>

<p>You need reliability</p>

<p>Fault tolerant</p>

<ul>
<li>downtime</li>
</ul>

<p><a href="http://www.flickr.com/photos/pivotallabs/3453031465/" title="GoGaRuCo '09 - CouchDB + Ruby: Perform Like a Pr0n Star - Matt Aimonetti by pivotalphotos, on Flickr"><img src="http://farm4.static.flickr.com/3358/3453031465_ab05c56493.jpg" height="375" alt="GoGaRuCo '09 - CouchDB + Ruby: Perform Like a Pr0n Star - Matt Aimonetti" width="500" /></a></p>

<p>Multiple Partners</p>

<ul>
<li>Nice public interfaces</li>
<li>no discrimination</li>
</ul>

<p>Scalability</p>

<ul>
<li>reaction underload</li>
<li>handle concurrent connections</li>
<li>numbert of requests persecond</li>
<li>latency</li>
</ul>

<h2>Approaches</h2>

<p>Every p0rn star needs a trick</p>

<p>Enter <a href="http://couchdb.apache.org/">CouchDB</a></p>

<p>Why aren't you a porn star now?  Because of RDBMS</p>

<p>What does RDBMS have problems?</p>

<ul>
<li>most/all fields become options, schema changes and it becomes hard to deal with</li>
<li>joins hurts performance &#40;add indices/tables&#41;</li>
<li>replication is difficult when using multiple masters</li>
<li>auto-incremental ids  </li>
</ul>

<p>What other kinds of approaches can we use?</p>

<p>Hypertable</p>

<p>Distributed Hash Table</p>

<ul>
<li>fault tolerant</li>
<li>used by p2p and IM</li>
<li>memached is another example</li>
</ul>

<p>Some other projects:
Project Voldemort, Tokyo Cabinet, Redis</p>

<h2>What is CouchDB?</h2>

<p>It is a project written in Erlang by Apache. It uses spider monkey.</p>

<p>Can be used as a key/value store.
Can also put data in a schema-less store, format your data as a JSON object and dump the whole thing into the db</p>

<p>CouchDB comes with a nice web interface called Futon that lets you inspect your database and its contents.</p>

<p>CouchDB is de-centralized.
You can do replication between multiple masters.</p>

<p>map/reduce is built in to compute data.  Maps and reduces can be written in Javascript.</p>

<p>Optimized for the web, more reads than writes.</p>

<ul>
<li>full Acid compliance</li>
<li>https rest interface</li>
<li>caching &#40;couchdb uses etags&#41; - this makes caching with existing HTTP caching technology &#40;nginx+memcache, varnish, etc&#41; really easy.</li>
<li>built-in conflict management using MVCC &#40;multiversion concurrency control&#41;
<ul>
<li>Every single record gets saved as a different revision</li>
</ul></li>
<li>document attachments are attached as document stubs, that also get replicated to different nodes and don't use a lot of memory</li>
</ul>

<p><a href="http://github.com/davisp/couchdb-lucene">couchdb-lucene</a></p>

<h2>How does this relate to Ruby?</h2>

<p>Using <a href="http://groups.google.com/group/couchrest">CouchRest</a>
Everything is a JSON object.</p>

<p>You can define properties so you get an attribute reader/writer, and do document.attr</p>

<p>There is no SQL in CouchDB, you do queries like Card.first, Card.all, Card.get&#40;'matt_aiomonetti'&#41;</p>

<p>The problem is trying to map documents into Object-Oriented languages, but it doesn't always work.  If you have dependent objects &#40;such as Card and Address&#41;, then you tell CouchDB to cast it as something.</p>

<pre><code>property :questions, :cast_as &#62; ['Question']
</code></pre>

<p>Callbacks:</p>

<p>save_callback :before, :generate_slug_from_title</p>

<p>Relationships can be done, but you have to decide how to do it, and there are a lot of ways.</p>

<h2>When to use couch?</h2>

<ul>
<li>When you need to scale you database and availibility is more important than consistency. </li>
<li>When your data is decentralized &#40;you have more than one master</li>
<li>When you need to compute data</li>
</ul>

<p><strong>Use cases:</strong></p>

<ul>
<li>Analytics - combined with traditional rdbms system to get statistics using couchdb</li>
<li>Personal finance - Bank accounts in different countries - download all accounts, and can process in one place - attach PDF files, desktop app, etc.</li>
<li>Medical Record System - Many patients with visits, history, records, etc.</li>
<li>distributed e-commerce sites &#40;1 main website working with multiple partners, the data can be replicated easily&#41;  In this case, CouchDB is much faster than RDBMS, because of drugs, compounds, and complex structures.</li>
</ul>

<h2>Questions</h2>

<p>Q: Can you use couchdb with objects that have attributes that change often?<br />
A: Yes you can use it.</p>

<p>Q: There are many ways to do relationships.  Can you give an example?<br />
A: Blog has an article with many comments.  You can make one doc that is an article, and you can add comments.  Problem is you need to send the whole document that increases risk of conflicts.  So you create a new object that is the comment object that just refers to the article.  Then, in the view you define the Article as aggregating all comments. Alternately, you can make a query to retrieve all comments for the article.</p> <a href="http://pivotallabs.com/gogaruco-09-couchdb-ruby-perform-like-a-pr0n-star-matt-aimonetti/">Continue reading <span class="meta-nav">&#8594;</span></a></p><p>The post <a href="http://pivotallabs.com/gogaruco-09-couchdb-ruby-perform-like-a-pr0n-star-matt-aimonetti/">GoGaRuCo &#039;09 &#8211; CouchDB + Ruby: Perform Like a Pr0n Star &#8211; Matt Aimonetti</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></description>
				<content:encoded><![CDATA[<p><a href="http://gogaruco.com/schedule/#aimonetti">CouchDB + Ruby: Perform Like a Pr0n Star &#8211; Matt Aimonetti</a></p>
<h2>Intro</h2>
<p><a href="http://www.flickr.com/photos/pivotallabs/3453844770/" title="GoGaRuCo '09 - CouchDB + Ruby: Perform Like a Pr0n Star - Matt Aimonetti by pivotalphotos, on Flickr"><img src="http://farm4.static.flickr.com/3544/3453844770_c84435a544.jpg" height="500" alt="GoGaRuCo '09 - CouchDB + Ruby: Perform Like a Pr0n Star - Matt Aimonetti" width="375" /></a></p>
<p>Matt Aimonetti is part of the Merb team.</p>
<p>Size matters</p>
<ul>
<li>memory usage</li>
<li>amount of servers</li>
<li>infrastructure</li>
</ul>
<p>You need reliability</p>
<p>Fault tolerant</p>
<ul>
<li>downtime</li>
</ul>
<p><a href="http://www.flickr.com/photos/pivotallabs/3453031465/" title="GoGaRuCo '09 - CouchDB + Ruby: Perform Like a Pr0n Star - Matt Aimonetti by pivotalphotos, on Flickr"><img src="http://farm4.static.flickr.com/3358/3453031465_ab05c56493.jpg" height="375" alt="GoGaRuCo '09 - CouchDB + Ruby: Perform Like a Pr0n Star - Matt Aimonetti" width="500" /></a></p>
<p>Multiple Partners</p>
<ul>
<li>Nice public interfaces</li>
<li>no discrimination</li>
</ul>
<p>Scalability</p>
<ul>
<li>reaction underload</li>
<li>handle concurrent connections</li>
<li>numbert of requests persecond</li>
<li>latency</li>
</ul>
<h2>Approaches</h2>
<p>Every p0rn star needs a trick</p>
<p>Enter <a href="http://couchdb.apache.org/">CouchDB</a></p>
<p>Why aren&#8217;t you a porn star now?  Because of RDBMS</p>
<p>What does RDBMS have problems?</p>
<ul>
<li>most/all fields become options, schema changes and it becomes hard to deal with</li>
<li>joins hurts performance &#40;add indices/tables&#41;</li>
<li>replication is difficult when using multiple masters</li>
<li>auto-incremental ids  </li>
</ul>
<p>What other kinds of approaches can we use?</p>
<p>Hypertable</p>
<p>Distributed Hash Table</p>
<ul>
<li>fault tolerant</li>
<li>used by p2p and IM</li>
<li>memached is another example</li>
</ul>
<p>Some other projects:<br />
Project Voldemort, Tokyo Cabinet, Redis</p>
<h2>What is CouchDB?</h2>
<p>It is a project written in Erlang by Apache. It uses spider monkey.</p>
<p>Can be used as a key/value store.<br />
Can also put data in a schema-less store, format your data as a JSON object and dump the whole thing into the db</p>
<p>CouchDB comes with a nice web interface called Futon that lets you inspect your database and its contents.</p>
<p>CouchDB is de-centralized.<br />
You can do replication between multiple masters.</p>
<p>map/reduce is built in to compute data.  Maps and reduces can be written in Javascript.</p>
<p>Optimized for the web, more reads than writes.</p>
<ul>
<li>full Acid compliance</li>
<li>https rest interface</li>
<li>caching &#40;couchdb uses etags&#41; &#8211; this makes caching with existing HTTP caching technology &#40;nginx+memcache, varnish, etc&#41; really easy.</li>
<li>built-in conflict management using MVCC &#40;multiversion concurrency control&#41;
<ul>
<li>Every single record gets saved as a different revision</li>
</ul>
</li>
<li>document attachments are attached as document stubs, that also get replicated to different nodes and don&#8217;t use a lot of memory</li>
</ul>
<p><a href="http://github.com/davisp/couchdb-lucene">couchdb-lucene</a></p>
<h2>How does this relate to Ruby?</h2>
<p>Using <a href="http://groups.google.com/group/couchrest">CouchRest</a><br />
Everything is a JSON object.</p>
<p>You can define properties so you get an attribute reader/writer, and do document.attr</p>
<p>There is no SQL in CouchDB, you do queries like Card.first, Card.all, Card.get&#40;&#8217;matt_aiomonetti&#8217;&#41;</p>
<p>The problem is trying to map documents into Object-Oriented languages, but it doesn&#8217;t always work.  If you have dependent objects &#40;such as Card and Address&#41;, then you tell CouchDB to cast it as something.</p>
<pre><code>property :questions, :cast_as &gt; ['Question']
</code></pre>
<p>Callbacks:</p>
<p>save_callback :before, :generate_slug_from_title</p>
<p>Relationships can be done, but you have to decide how to do it, and there are a lot of ways.</p>
<h2>When to use couch?</h2>
<ul>
<li>When you need to scale you database and availibility is more important than consistency. </li>
<li>When your data is decentralized &#40;you have more than one master</li>
<li>When you need to compute data</li>
</ul>
<p><strong>Use cases:</strong></p>
<ul>
<li>Analytics &#8211; combined with traditional rdbms system to get statistics using couchdb</li>
<li>Personal finance &#8211; Bank accounts in different countries &#8211; download all accounts, and can process in one place &#8211; attach PDF files, desktop app, etc.</li>
<li>Medical Record System &#8211; Many patients with visits, history, records, etc.</li>
<li>distributed e-commerce sites &#40;1 main website working with multiple partners, the data can be replicated easily&#41;  In this case, CouchDB is much faster than RDBMS, because of drugs, compounds, and complex structures.</li>
</ul>
<h2>Questions</h2>
<p>Q: Can you use couchdb with objects that have attributes that change often?<br />
A: Yes you can use it.</p>
<p>Q: There are many ways to do relationships.  Can you give an example?<br />
A: Blog has an article with many comments.  You can make one doc that is an article, and you can add comments.  Problem is you need to send the whole document that increases risk of conflicts.  So you create a new object that is the comment object that just refers to the article.  Then, in the view you define the Article as aggregating all comments. Alternately, you can make a query to retrieve all comments for the article.</p>
<p>The post <a href="http://pivotallabs.com/gogaruco-09-couchdb-ruby-perform-like-a-pr0n-star-matt-aimonetti/">GoGaRuCo &#039;09 &#8211; CouchDB + Ruby: Perform Like a Pr0n Star &#8211; Matt Aimonetti</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://pivotallabs.com/gogaruco-09-couchdb-ruby-perform-like-a-pr0n-star-matt-aimonetti/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Standup 02/18/2009</title>
		<link>http://pivotallabs.com/standup-02-18-2009/</link>
		<comments>http://pivotallabs.com/standup-02-18-2009/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 12:37:00 +0000</pubDate>
		<dc:creator>Ryan Dy</dc:creator>
				<category><![CDATA[Standup]]></category>
		<category><![CDATA[amazon s3]]></category>
		<category><![CDATA[desert]]></category>
		<category><![CDATA[ide]]></category>
		<category><![CDATA[rspec]]></category>
		<category><![CDATA[rubymine]]></category>
		<category><![CDATA[taste]]></category>
		<category><![CDATA[uploads]]></category>

		<guid isPermaLink="false">http://pivotallabs.com/standup-02-18-2009/</guid>
		<description><![CDATA[<p><p>We're looking for more information about <a href="http://taste.sourceforge.net">Taste</a> or other similar kinds of suggestion engines. What kind of experiences have people had integrating these tools into Rails applications. Are there other useful engines worth looking at?</p>

<p>Direct uploads to <a href="http://aws.amazon.com/s3/">Amazon S3 service</a> can be serviced by <a href="http://aws.amazon.com/ec2/">EC2</a> servers; however, there might be more direct ways of doings this with S3.</p>

<p>Newer versions of <a href="http://www.jetbrains.com/ruby/index.html">RubyMine</a> have been reported having problems running the gem version of rspec but a solutions has been found. The problem comes from the way gems are specified in RubyMine. You need to add the rspec gem you are using to the Project Structure >> Ruby SDK and Gems.</p>

<p>Using <a href="http://github.com/pivotal/desert/tree/master">Desert</a> and exception notifier can cause some slow startup times. If you are seeing this problem try moving exception notifier's sender_address inside your environment's post-load block.</p> <a href="http://pivotallabs.com/standup-02-18-2009/">Continue reading <span class="meta-nav">&#8594;</span></a></p><p>The post <a href="http://pivotallabs.com/standup-02-18-2009/">Standup 02/18/2009</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>We&#8217;re looking for more information about <a href="http://taste.sourceforge.net">Taste</a> or other similar kinds of suggestion engines. What kind of experiences have people had integrating these tools into Rails applications. Are there other useful engines worth looking at?</p>
<p>Direct uploads to <a href="http://aws.amazon.com/s3/">Amazon S3 service</a> can be serviced by <a href="http://aws.amazon.com/ec2/">EC2</a> servers; however, there might be more direct ways of doings this with S3.</p>
<p>Newer versions of <a href="http://www.jetbrains.com/ruby/index.html">RubyMine</a> have been reported having problems running the gem version of rspec but a solutions has been found. The problem comes from the way gems are specified in RubyMine. You need to add the rspec gem you are using to the Project Structure >> Ruby SDK and Gems.</p>
<p>Using <a href="http://github.com/pivotal/desert/tree/master">Desert</a> and exception notifier can cause some slow startup times. If you are seeing this problem try moving exception notifier&#8217;s sender_address inside your environment&#8217;s post-load block.</p>
<p>The post <a href="http://pivotallabs.com/standup-02-18-2009/">Standup 02/18/2009</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://pivotallabs.com/standup-02-18-2009/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Standup 03/6/2008</title>
		<link>http://pivotallabs.com/standup-03-6-2008/</link>
		<comments>http://pivotallabs.com/standup-03-6-2008/#comments</comments>
		<pubDate>Thu, 06 Mar 2008 23:17:00 +0000</pubDate>
		<dc:creator>Ryan Dy</dc:creator>
				<category><![CDATA[Standup]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[firebug]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[yui]]></category>

		<guid isPermaLink="false">http://pivotallabs.com/standup-03-6-2008/</guid>
		<description><![CDATA[<p><p>There is a firebug that works with <a href="http://www.mozilla.com/en-US/firefox/all-beta.html">Firefox 3</a>, it can be found at <a href="http://www.getfirebug.com/">GetFirebug.com</a>.  The current beta version 1.1 appears to fix a problem that Firebug was having with inspecting anchor elements.</p>

<p>Also, there is a google code project <a href="http://code.google.com/p/ie7-js/">ie7-js</a>.  It is a Javascript library that attempts to make IE7 behave more like a standards-compliant browser.  It includes a limited PNG transparency fix.  It also gives you Pseudo-element like :before and :after.</p>

<p>Combining this with <a href="http://developer.yahoo.com/yui/">yui</a> and IE7 gets a lot closer to behaving as you might expect!</p> <a href="http://pivotallabs.com/standup-03-6-2008/">Continue reading <span class="meta-nav">&#8594;</span></a></p><p>The post <a href="http://pivotallabs.com/standup-03-6-2008/">Standup 03/6/2008</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>There is a firebug that works with <a href="http://www.mozilla.com/en-US/firefox/all-beta.html">Firefox 3</a>, it can be found at <a href="http://www.getfirebug.com/">GetFirebug.com</a>.  The current beta version 1.1 appears to fix a problem that Firebug was having with inspecting anchor elements.</p>
<p>Also, there is a google code project <a href="http://code.google.com/p/ie7-js/">ie7-js</a>.  It is a Javascript library that attempts to make IE7 behave more like a standards-compliant browser.  It includes a limited PNG transparency fix.  It also gives you Pseudo-element like :before and :after.</p>
<p>Combining this with <a href="http://developer.yahoo.com/yui/">yui</a> and IE7 gets a lot closer to behaving as you might expect!</p>
<p>The post <a href="http://pivotallabs.com/standup-03-6-2008/">Standup 03/6/2008</a> appeared first on <a href="http://pivotallabs.com">Pivotal Labs</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://pivotallabs.com/standup-03-6-2008/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic (Feed is rejected)
Page Caching using apc
Database Caching 9/19 queries in 0.076 seconds using apc
Object Caching 914/1015 objects using apc

 Served from: pivotallabs.com @ 2013-05-22 07:21:52 by W3 Total Cache -->