<?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>Bradley Holt &#187; FOSS</title>
	<atom:link href="http://bradley-holt.com/tag/foss/feed/" rel="self" type="application/rss+xml" />
	<link>http://bradley-holt.com</link>
	<description></description>
	<lastBuildDate>Fri, 06 Jan 2012 18:57:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>The Future of CouchDB and Couchbase Server</title>
		<link>http://bradley-holt.com/2012/01/the-future-of-couchdb-and-couchbase-server/</link>
		<comments>http://bradley-holt.com/2012/01/the-future-of-couchdb-and-couchbase-server/#comments</comments>
		<pubDate>Thu, 05 Jan 2012 19:42:03 +0000</pubDate>
		<dc:creator>Bradley Holt</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Couchbase]]></category>
		<category><![CDATA[CouchDB]]></category>
		<category><![CDATA[FOSS]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[NoSQL]]></category>

		<guid isPermaLink="false">http://bradley-holt.com/?p=1491</guid>
		<description><![CDATA[&#8220;What&#8217;s the future of CouchDB? It&#8217;s Couchbase.&#8221; —Damien Katz &#8220;The future of CouchDB is CouchDB.&#8221; —Noah Slater First of all, don&#8217;t panic. The Apache CouchDB project is thriving. There are plenty of core contributors who are dedicated to the project. If you&#8217;re using CouchDB, you&#8217;re fine. If you&#8217;re considering using CouchDB, you&#8217;ll be fine. CouchDB [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>&#8220;<a href="http://damienkatz.net/2012/01/the_future_of_couchdb.html">What&#8217;s the future of CouchDB? It&#8217;s Couchbase.</a>&#8221; —Damien Katz</p></blockquote>
<blockquote><p>&#8220;<a href="https://twitter.com/nslater/status/154938284647260160">The future of CouchDB is CouchDB.</a>&#8221; —Noah Slater</p></blockquote>
<p>First of all, don&#8217;t panic. The Apache CouchDB project is thriving. There are plenty of core contributors who are dedicated to the project. If you&#8217;re using CouchDB, you&#8217;re fine. If you&#8217;re considering using CouchDB, you&#8217;ll be fine. CouchDB has a bright future ahead of it. Couchbase has repeatedly said that they&#8217;re not the CouchDB company, so this shouldn&#8217;t be a surprise to anyone.</p>
<p>My interpretation of this announcement is that CouchDB is forking. Going forward, you&#8217;ll have two choices, either Apache CouchDB or Couchbase Server. The <a href="https://issues.apache.org/jira/browse/COUCHDB?report=com.atlassian.jira.plugin.system.project:roadmap-panel">road map for Apache CouchDB</a> will continue to be determined by community consensus. The road map for Couchbase Server will be determined by Couchbase, the company.</p>
<p>CouchDB has two futures: CouchDB and Couchbase Server. Traditionally, forking a project in this manner has been considered a Bad Thing. From The Jargon File entry for <a href="http://catb.org/jargon/html/F/forked.html">forked</a>:</p>
<blockquote><p>An open-source software project is said to have forked or be forked when the project group fissions into two or more parts pursuing separate lines of development (or, less commonly, when a third party unconnected to the project group begins its own line of development).  Forking is considered a <a href="http://catb.org/jargon/html/B/Bad-Thing.html"><em>Bad Thing</em></a> — not merely because it implies a lot of wasted effort in the future, but because forks tend to be accompanied by a great deal of strife and acrimony between the successor groups over issues of legitimacy, succession, and design direction.  There is serious social pressure against forking.  As a result, major forks (such as the Gnu-Emacs/XEmacs split, the fissionings of the 386BSD group into three daughter projects, and the short-lived GCC/EGCS split) are rare enough that they are remembered individually in hacker folklore.</p></blockquote>
<p>In my humble opinion, forking should no longer be considered a Bad Thing. Distributed revision control systems, such as Git, have made it much easier to merge changes back-and-forth between forked projects. If an individual or organization wants to take a project in a different direction, great! It sounds like Couchbase Server will be designed to meet a set of needs that are not being met by CouchDB. If so, a fork is perfectly appropriate as now both sets of needs can be met.</p>
]]></content:encoded>
			<wfw:commentRss>http://bradley-holt.com/2012/01/the-future-of-couchdb-and-couchbase-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Top Five Posts of 2011</title>
		<link>http://bradley-holt.com/2011/12/top-five-posts-of-2011/</link>
		<comments>http://bradley-holt.com/2011/12/top-five-posts-of-2011/#comments</comments>
		<pubDate>Fri, 30 Dec 2011 17:15:32 +0000</pubDate>
		<dc:creator>Bradley Holt</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[AMQP]]></category>
		<category><![CDATA[CouchApp]]></category>
		<category><![CDATA[CouchDB]]></category>
		<category><![CDATA[Databases]]></category>
		<category><![CDATA[Domain-Driven Design]]></category>
		<category><![CDATA[FOSS]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[NoSQL]]></category>
		<category><![CDATA[Open Standards]]></category>
		<category><![CDATA[OSCON]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHP-QAT]]></category>
		<category><![CDATA[Quality Assurance]]></category>
		<category><![CDATA[RabbitMQ]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[Scaling]]></category>
		<category><![CDATA[Software Design]]></category>

		<guid isPermaLink="false">http://bradley-holt.com/?p=1480</guid>
		<description><![CDATA[Continuing a trend started by Cal Evans and then followed by Chris Cornutt, Matthew Turland, and Joe Devon; here are the top five most viewed posts from my blog in 2011. 5. CouchDB and Domain-Driven Design This post covered two topics that are of great interest to me. Document databases like CouchDB have much potential [...]]]></description>
			<content:encoded><![CDATA[<p>Continuing a trend started by <a href="http://blog.calevans.com/2011/12/29/top-three-posts-of-2011/">Cal Evans</a> and then followed by <a href="http://blog.phpdeveloper.org/?p=425">Chris Cornutt</a>, <a href="http://matthewturland.com/2011/12/29/top-10-posts-of-2011/">Matthew Turland</a>, and <a href="http://mysqltalk.wordpress.com/2011/12/30/top-posts-of-2011/">Joe Devon</a>; here are the top five most viewed posts from my blog in 2011.</p>
<h3>5. <a href="http://bradley-holt.com/2011/08/couchdb-and-domain-driven-design/">CouchDB and Domain-Driven Design</a></h3>
<p>This post covered two topics that are of great interest to me. Document databases like CouchDB have much potential when it comes to domain-driven design. The post outlined some techniques for serializing domain objects into CouchDB documents.</p>
<h3>4. <a href="http://bradley-holt.com/2011/07/addressing-the-nosql-criticism/">Addressing the NoSQL Criticism</a></h3>
<p>I heard a lot of NoSQL bashing this year at OSCON. As a result, I decided to write a rebuttal to many of the criticisms that I heard. This post inspired a lively <a href="http://bradley-holt.com/2011/07/addressing-the-nosql-criticism/#comments">comment thread</a>.</p>
<h3>3. <a href="http://bradley-holt.com/2011/07/testing-php-5-4/">Testing PHP 5.4</a></h3>
<p>This was a short post on how to help the <a href="http://qa.php.net/">PHP Quality Assurance Team</a> by running the tests for the latest development version of PHP 5.4. It covered downloading, compiling, and running the tests. Most importantly, it also covered reporting your test results.</p>
<h3>2. <a href="http://bradley-holt.com/2011/07/exploring-rabbitmq-and-php/">Exploring RabbitMQ and PHP</a></h3>
<p>I was exploring the possibility of using RabbitMQ for an upcoming project. I decided to post some notes on my experience getting started with RabbitMQ and integrating it with PHP. I haven&#8217;t ended up using RabbitMQ in production yet, but I&#8217;m confident that I&#8217;ll end up using it at some point.</p>
<h3>1. <a href="http://bradley-holt.com/2011/07/couchdb-jquery-plugin-reference/">CouchDB jQuery Plugin Reference</a></h3>
<p>I had been frustrated by the lack of documentation for the CouchDB jQuery plugin—so decided to write my own. After I wrote the blog post, <a href="http://www.maxogden.com/">Max Ogden</a> pointed me to <a href="http://arandomurl.com/">Dale Harvey</a>‘s <a href="https://github.com/daleharvey/jquery.couch.js-docs">documentation generator for jquery.couch.js</a> and a copy of the generated <a href="http://daleharvey.github.com/jquery.couch.js-docs/symbols/index.html">jQuery CouchDB documentation</a>. Max and Dale are also working on a more flexible jquery.couch2.js.</p>
]]></content:encoded>
			<wfw:commentRss>http://bradley-holt.com/2011/12/top-five-posts-of-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Propose a Session for Vermont Code Camp 2011</title>
		<link>http://bradley-holt.com/2011/08/propose-a-session-for-vermont-code-camp-2011/</link>
		<comments>http://bradley-holt.com/2011/08/propose-a-session-for-vermont-code-camp-2011/#comments</comments>
		<pubDate>Mon, 08 Aug 2011 16:58:04 +0000</pubDate>
		<dc:creator>Bradley Holt</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[BTV]]></category>
		<category><![CDATA[FOSS]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Vermont]]></category>
		<category><![CDATA[vtcc3]]></category>
		<category><![CDATA[vtcodecamp]]></category>

		<guid isPermaLink="false">http://bradley-holt.com/?p=1294</guid>
		<description><![CDATA[Vermont is a beautiful place to visit—especially in the fall! We&#8217;re looking for Vermonters and non-Vermonters alike to speak at this year&#8217;s Vermont Code Camp. Vermont Code Camp is organized entirely by community volunteers, with the help of our great sponsors (we&#8217;re still accepting sponsorships, too). Vermont Code Camp is a polyglot event. We&#8217;re looking [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://vtcodecamp.org/"><img class="alignright size-full wp-image-722" title="Vermont Code Camp" src="http://bradley-holt.com/wp-content/uploads/2010/07/Vermont-Code-Camp-gradient-250x96.png" alt="Vermont Code Camp" width="250" height="96" /></a>Vermont is a beautiful place to visit—especially in the fall! We&#8217;re looking for Vermonters and non-Vermonters alike to <a href="http://vtcodecamp.org/propose-a-session/">speak at this year&#8217;s Vermont Code Camp</a>. Vermont Code Camp is organized entirely by community volunteers, with the help of our great <a href="http://vtcodecamp.org/sponsors/">sponsors</a> (we&#8217;re still accepting sponsorships, too). Vermont Code Camp is a polyglot event. We&#8217;re looking for sessions on .NET, PHP, Ruby, Python, Java, and more. <a href="http://vtcodecamp.org/propose-a-session/">Abstracts are due this Friday, August 12</a> and we&#8217;re going to try and have the <a href="http://vtcodecamp.org/schedule/">session list</a> available by August 19. Check out the <a href="http://vtcodecamp.org/2010-schedule/">2010 schedule</a> to get an idea of what we had for talks last year.</p>
<p>Personally, I&#8217;d like to encourage submissions on the following topics:</p>
<ul>
<li>More talks related to free/open source software (PHP, Ruby, Python, etc.)</li>
<li>Arduino and/or other hardware programming</li>
<li>Software development patterns and practices</li>
<li>Web analytics and metrics</li>
<li>Front-end web development (JavaScript, CSS, etc.)</li>
<li>Node.js and other emerging technologies</li>
<li>Mobile application development</li>
<li>Anything you&#8217;re passionate about!</li>
</ul>
<p><a href="http://vtcodecamp.org/propose-a-session/">Propose a session or two now</a>—you know you want to!</p>
]]></content:encoded>
			<wfw:commentRss>http://bradley-holt.com/2011/08/propose-a-session-for-vermont-code-camp-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exploring RabbitMQ and PHP</title>
		<link>http://bradley-holt.com/2011/07/exploring-rabbitmq-and-php/</link>
		<comments>http://bradley-holt.com/2011/07/exploring-rabbitmq-and-php/#comments</comments>
		<pubDate>Wed, 20 Jul 2011 22:10:38 +0000</pubDate>
		<dc:creator>Bradley Holt</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[AMQP]]></category>
		<category><![CDATA[FOSS]]></category>
		<category><![CDATA[Open Standards]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[RabbitMQ]]></category>

		<guid isPermaLink="false">http://bradley-holt.com/?p=1179</guid>
		<description><![CDATA[I&#8217;m exploring the possibility of using RabbitMQ for an upcoming project. RabbitMQ is a free/open source message broker platform. It uses the open Advanced Message Queuing Protocol (AMQP) standard and is written in Erlang using the Open Telecom Platform (OTP). It promises a high level of availability, throughput, scalability, and portability. Since it is built [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m exploring the possibility of using <a href="http://www.rabbitmq.com/">RabbitMQ</a> for an upcoming project. RabbitMQ is a free/open source message broker platform. It uses the open <a href="http://www.amqp.org/">Advanced Message Queuing Protocol</a> (AMQP) standard and is written in <a href="http://www.erlang.org/">Erlang using the Open Telecom Platform</a> (OTP). It promises a high level of availability, throughput, scalability, and portability. Since it is built using open standards, it is interoperable with other messaging systems and can be accessed from any platform.</p>
<p>I&#8217;ll be using RabbitMQ first from PHP, but I plan on using it to send and receive messages to and from other systems. Following are the steps I used to get RabbitMQ and PHP&#8217;s AMQP library setup on my development machine.</p>
<p>First, I installed RabbitMQ using MacPorts:</p>
<pre><code class="no-highlight">$ sudo port install rabbitmq-server</code></pre>
<p>Then, I started RabbitMQ:</p>
<pre><code class="no-highlight">$ sudo rabbitmq-server -detached</code></pre>
<p>Next, I installed the <a href="http://hg.rabbitmq.com/rabbitmq-c/">librabbitmq</a> library using a slight variation of the instructions on <a href="http://www.php.net/manual/en/amqp.installation.php">PHP&#8217;s AMQP Installation</a> page (you may need to install <a href="http://mercurial.selenic.com/">Mercurial</a> first):</p>
<pre><code class="no-highlight">$ hg clone http://hg.rabbitmq.com/rabbitmq-c/rev/3c549bb09c16 rabbitmq-c
$ cd rabbitmq-c
$ hg clone http://hg.rabbitmq.com/rabbitmq-codegen/rev/f8b34141e6cb codegen
$ autoreconf -i &amp;&amp; ./configure &amp;&amp; make &amp;&amp; sudo make install</code></pre>
<p>Then, I installed the AMQP extension using PECL:</p>
<pre><code class="no-highlight">$ sudo pecl install amqp-beta</code></pre>
<p>To test that everything works, I opened up two interactive PHP shells using <code>php -a</code>. I ran the following code in the first PHP shell:</p>
<pre><code class="php">$exchangeName = 'messages';
$routeKey = 'routeA';
$message = 'Hello, world.';
$connection = new AMQPConnection();
$connection-&gt;connect();
$exchange = new AMQPExchange($connection);
$exchange-&gt;declare($exchangeName);
</code></pre>
<p>I then ran the following code in the second PHP shell:</p>
<pre><code class="php">$exchangeName = 'messages';
$routeKey = 'routeA';
$connection = new AMQPConnection();
$connection-&gt;connect();
$queue = new AMQPQueue($connection);
$queue-&gt;declare($exchangeName);
$queue-&gt;bind($exchangeName, $routeKey);</code></pre>
<p>Back in the first PHP shell:</p>
<pre><code class="php">$exchange-&gt;publish($message, $routeKey);</code></pre>
<p>Back in the second PHP shell:</p>
<pre><code class="php">$message = $queue-&gt;get();
print_r($message);</code></pre>
<p>Here is the output I got from the print_r statement:</p>
<pre><code class="php">Array
(
    [routing_key] =&gt; routeA
    [exchange] =&gt; messages
    [delivery_tag] =&gt; 1
    [Content-type] =&gt; text/plain
    [count] =&gt; 0
    [msg] =&gt; Hello, world.
)</code></pre>
<p>There are several other options that can be set, and a lot more to learn about RabbitMQ and AMP. Check out the <a href="http://www.php.net/manual/en/book.amqp.php">documentation for PHP&#8217;s AMQP extension</a> for details about working with AMQP servers from PHP.</p>
]]></content:encoded>
			<wfw:commentRss>http://bradley-holt.com/2011/07/exploring-rabbitmq-and-php/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Testing PHP 5.4</title>
		<link>http://bradley-holt.com/2011/07/testing-php-5-4/</link>
		<comments>http://bradley-holt.com/2011/07/testing-php-5-4/#comments</comments>
		<pubDate>Fri, 01 Jul 2011 20:05:46 +0000</pubDate>
		<dc:creator>Bradley Holt</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[FOSS]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHP-QAT]]></category>
		<category><![CDATA[Quality Assurance]]></category>

		<guid isPermaLink="false">http://bradley-holt.com/?p=1125</guid>
		<description><![CDATA[Rasmus Lerdorf today posted instructions for testing the upcoming PHP 5.4 release. Running the PHP tests and submitting the associated report will help the PHP team get PHP 5.4 ready faster as it gives them reports of failed tests from a variety of platforms. I just did this today for the first time and can [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://toys.lerdorf.com/">Rasmus Lerdorf</a> today posted <a href="http://codepad.org/SXfRlJ0w">instructions for testing the upcoming PHP 5.4 release</a>. Running the PHP tests and submitting the associated report will help the PHP team get PHP 5.4 ready faster as it gives them reports of failed tests from a variety of platforms. I just did this today for the first time and can tell you that it is very easy. Following are the steps that Rasmus outlined, in a bit more detail.</p>
<p>First, make sure that you have <code>subversion</code>, <code>autoconf</code>, <code>automake</code>, <code>gcc</code>, <code>bison</code>, <code>flex</code>, and <code>re2c</code> installed. I&#8217;m using a Mac, so I was able to install most of these using MacPorts (Homebrew would have worked, too). Next, do a checkout of the PHP 5.4 branch:</p>
<pre><code class="bash">$ svn co https://svn.php.net/repository/php/php-src/branches/PHP_5_4 php54</code></pre>
<p>Then:</p>
<pre><code class="bash">$ cd php54
$ ./buildconf
$ ./configure
$ make
$ make test</code></pre>
<p>Both the <code>make</code> and <code>make test</code> steps may take awhile. Assuming you get some failed tests like I did, then you will see the following message and prompt:</p>
<pre><code class="no-highlight">You may have found a problem in PHP.
This report can be automatically sent to the PHP QA team at
http://qa.php.net/reports and http://news.php.net/php.qa.reports
This gives us a better understanding of PHP's behavior.
If you don't want to send the report immediately you can choose
option "s" to save it.    You can then email it to qa-reports@lists.php.net later.
Do you want to send this report now? [Yns]:</code></pre>
<p>I opted to send the report now, so entered <code>Y</code>. Next, I was prompted for my email address:</p>
<pre><code class="no-highlight">Please enter your email address.
(Your address will be mangled so that it will not go out on any
mailinglist in plain text):</code></pre>
<p>I entered my email address and then:</p>
<pre><code class="no-highlight">Posting to http://qa.php.net/buildtest-process.php

Thank you for helping to make PHP better.</code></pre>
<p>Pretty straightforward. At this point, your report should be aggregated on the <a href="http://qa.php.net/reports/">PHP Test Reports Summary</a> page. If you want to run more tests, then configure as many extensions as possible during the configure step. Take a look at the <a href="http://codepad.org/SXfRlJ0w">shell script in Rasmus&#8217; instructions</a> for details. If you&#8217;d like, you can examine the failed tests and see if you can come up with a patch to fix the problem. Again, see <a href="http://codepad.org/SXfRlJ0w">Rasmus&#8217; instructions</a> for details.</p>
]]></content:encoded>
			<wfw:commentRss>http://bradley-holt.com/2011/07/testing-php-5-4/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Speaking at OSCON 2011</title>
		<link>http://bradley-holt.com/2011/04/speaking-at-oscon-2011/</link>
		<comments>http://bradley-holt.com/2011/04/speaking-at-oscon-2011/#comments</comments>
		<pubDate>Mon, 25 Apr 2011 17:50:14 +0000</pubDate>
		<dc:creator>Bradley Holt</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[CouchDB]]></category>
		<category><![CDATA[FOSS]]></category>
		<category><![CDATA[OSCON]]></category>

		<guid isPermaLink="false">http://bradley-holt.com/?p=1076</guid>
		<description><![CDATA[I&#8217;ll be speaking at this year&#8217;s O&#8217;Reilly Open Source Convention (OSCON). O&#8217;Reilly has introduced a new conference to be co-located with OSCON called OSCON Data which will &#8220;focus on the practical nuts and bolts of dealing with data.&#8221; I&#8217;ll be giving a three hour tutorial at OSCON Data on Learning CouchDB and a forty minute [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.oscon.com/"><img class="alignright" src="http://foundline.com/media/oscon-150x71.jpg" border="0" alt="O'Reilly Open Source Convention (OSCON)" width="150" height="71" /></a>I&#8217;ll be speaking at this year&#8217;s <a href="http://www.oscon.com/">O&#8217;Reilly Open Source Convention</a> (OSCON). O&#8217;Reilly has introduced a new conference to be co-located with OSCON called OSCON Data which will &#8220;focus on the practical nuts and bolts of dealing with data.&#8221; I&#8217;ll be giving a three hour tutorial at OSCON Data on <a href="http://www.oscon.com/oscon2011/public/schedule/detail/18964">Learning CouchDB</a> and a forty minute presentation at OSCON on <a href="http://www.oscon.com/oscon2011/public/schedule/detail/18958">CouchApps with CouchDB, JavaScript &amp; HTML5</a>. Another forty minute talk of mine, Getting Started with CouchDB, is on the wait-list for <del>the main</del> OSCON <ins>Data</ins> <del>event</del>. OSCON will take place in Portland, Oregon from July 25-29, 2011 (OSCON Data will be July 25-27). Registration should open soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://bradley-holt.com/2011/04/speaking-at-oscon-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scaling CouchDB</title>
		<link>http://bradley-holt.com/2011/03/scaling-couchdb/</link>
		<comments>http://bradley-holt.com/2011/03/scaling-couchdb/#comments</comments>
		<pubDate>Wed, 30 Mar 2011 14:41:55 +0000</pubDate>
		<dc:creator>Bradley Holt</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[CouchDB]]></category>
		<category><![CDATA[Databases]]></category>
		<category><![CDATA[FOSS]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[Load Testing]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[Scaling]]></category>

		<guid isPermaLink="false">http://bradley-holt.com/?p=1041</guid>
		<description><![CDATA[My latest book, Scaling CouchDB, is now available in ebook format. This is a short book (about 72 pages) and serves as a practical guide to scaling CouchDB and designing a distributed system to meet your capacity needs. Replication, conflict resolution, load balancing, clustering, distributed load testing, and monitoring are covered. The chapters on load [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://oreilly.com/catalog/9781449303433/"><img class="alignright" src="http://covers.oreilly.com/images/0636920018407/cat.gif" border="0" alt="Scaling CouchDB" width="180" height="236" /></a>My latest book, <a href="http://oreilly.com/catalog/9781449303433/">Scaling CouchDB</a>, is now available in ebook format. This is a short book (about 72 pages) and serves as a practical guide to scaling CouchDB and designing a distributed system to meet your capacity needs. Replication, conflict resolution, load balancing, clustering, distributed load testing, and monitoring are covered. The chapters on load balancing (using Apache) and distributed load testing (using Tsung) are broadly applicable, even if you aren&#8217;t a CouchDB user.</p>
<p>If you blog and would like to review <a href="http://oreilly.com/catalog/9781449303433/">Scaling CouchDB</a> or my previous book, <a href="http://oreilly.com/catalog/9781449303129/">Writing and Querying MapReduce Views in CouchDB</a>, then please let me know and I can arrange to have you sent a review copy.</p>
<p><em>Update (3/31/2011)</em>: At the request of a commenter, here is the table of contents:</p>
<ol>
<li>Defining Scaling Goals
<ol>
<li>What is Scalability?</li>
<li>Capacity Planning</li>
<li>The CAP Theorem
<ol>
<li>Consistency</li>
<li>Availability</li>
<li>Partition Tolerance</li>
</ol>
</li>
</ol>
</li>
<li>Tuning and Designing for Scale
<ol>
<li>Performance Tips</li>
<li>Document Design</li>
</ol>
</li>
<li>Replication
<ol>
<li>Filters and Specifying Documents</li>
<li>Conflict Resolution
<ol>
<li>Picking the Same Revision as CouchDB</li>
<li>Picking a Conflicted Revision</li>
<li>Merging Revisions</li>
</ol>
</li>
</ol>
</li>
<li>Load Balancing
<ol>
<li>CouchDB Nodes</li>
<li>Replication Setup</li>
<li>Proxy Server Configuration</li>
<li>Testing</li>
</ol>
</li>
<li>Clustering
<ol>
<li>BigCouch</li>
<li>Lounge</li>
<li>Pillow</li>
</ol>
</li>
<li>Distributed Load Testing
<ol>
<li>Installing Tsung</li>
<li>Configuring Tsung</li>
<li>Running Tsung</li>
<li>Monitoring</li>
<li>Identifying Bottlenecks</li>
<li>Test Configuration</li>
</ol>
</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://bradley-holt.com/2011/03/scaling-couchdb/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Writing and Querying MapReduce Views in CouchDB</title>
		<link>http://bradley-holt.com/2011/01/writing-and-querying-mapreduce-views-in-couchdb/</link>
		<comments>http://bradley-holt.com/2011/01/writing-and-querying-mapreduce-views-in-couchdb/#comments</comments>
		<pubDate>Mon, 31 Jan 2011 16:43:29 +0000</pubDate>
		<dc:creator>Bradley Holt</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[CouchDB]]></category>
		<category><![CDATA[Databases]]></category>
		<category><![CDATA[FOSS]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[REST]]></category>

		<guid isPermaLink="false">http://bradley-holt.com/?p=959</guid>
		<description><![CDATA[My first book, Writing and Querying MapReduce Views in CouchDB, has been published by O&#8217;Reilly Media. It is a short and concise ebook with step-by-step instructions and lots of sample code. Most examples are provided both in Futon and using CouchDB&#8217;s RESTful HTTP API (using cURL). In my experience, web developers who are new to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://oreilly.com/catalog/9781449303129/"><img class="alignright" style="border: 0pt none;" src="http://covers.oreilly.com/images/0636920018247/lrg.jpg" border="0" alt="Writing and Querying MapReduce Views in CouchDB: Indexing and Querying Documents" width="352" height="462" /></a>My first book, <a href="http://oreilly.com/catalog/9781449303129/"><em>Writing and Querying MapReduce Views in CouchDB</em></a>, has been published by O&#8217;Reilly Media. It is a short and concise ebook with step-by-step instructions and lots of sample code. Most examples are provided both in Futon and using CouchDB&#8217;s RESTful HTTP API (using cURL).</p>
<p>In my experience, web developers who are new to CouchDB often encounter three main barriers to understanding and using CouchDB. First, its JSON documents. Second, its RESTful HTTP API. Third, its MapReduce views. The first two are fairly straightforward and many web developers already have experience with JSON and RESTful HTTP APIs. Once you understand the benefits of using JSON as a document format and exposing the database through a RESTful HTTP API, then understanding MapReduce views becomes the main barrier.</p>
<p>The goal of this book is to walk readers through both writing MapReduce views and then querying these same views. Both the Map and Reduce steps are explained separately. Several example Map functions are demonstrated and the built-in Reduce functions are covered. There are also discussions about custom Reduce functions and the limitations of MapReduce. There are examples of creating both temporary views and saving views permanently to design documents. Finally, there is a chapter on querying views which talks about range queries, limiting rows, skipping rows, reversing results, exact grouping, group levels, and including the original documents in query results.</p>
<p>P.S. If you are a blogger and would like to review this book, then please ping me and let me know.</p>
]]></content:encoded>
			<wfw:commentRss>http://bradley-holt.com/2011/01/writing-and-querying-mapreduce-views-in-couchdb/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Behind The New VPR Homepage</title>
		<link>http://bradley-holt.com/2010/10/behind-the-new-vpr-homepage/</link>
		<comments>http://bradley-holt.com/2010/10/behind-the-new-vpr-homepage/#comments</comments>
		<pubDate>Mon, 11 Oct 2010 15:09:47 +0000</pubDate>
		<dc:creator>Bradley Holt</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Atom Syndication Format]]></category>
		<category><![CDATA[ClearBearing]]></category>
		<category><![CDATA[CouchDB]]></category>
		<category><![CDATA[FOSS]]></category>
		<category><![CDATA[Found Line]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[Mobile Computing]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[Open Standards]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Public Media]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[Vermont]]></category>
		<category><![CDATA[VPR]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://bradley-holt.com/?p=888</guid>
		<description><![CDATA[Found Line had the privilege of designing and developing Vermont Public Radio&#8216;s (VPR) new homepage. VPR&#8217;s Online Manager, Jonathan Butler, wrote a blog post about how the redesigned homepage delivers more content to VPR.net visitors. Here I&#8217;ll talk about the technology behind this new homepage. Atom Syndication Format Most of VPR&#8217;s web content is currently [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://foundline.com/">Found Line</a> had the privilege of designing and developing <a href="http://www.vpr.net/">Vermont Public Radio</a>&#8216;s (VPR) new homepage. VPR&#8217;s Online Manager, Jonathan Butler, wrote a blog post about how the <a href="http://vprblog.blogspot.com/2010/10/new-vprnet-homepage.html">redesigned homepage delivers more content to VPR.net visitors.</a> Here I&#8217;ll talk about the technology behind this new homepage.</p>
<h3>Atom Syndication Format</h3>
<p>Most of VPR&#8217;s web content is currently stored in a proprietary content management system (CMS). The first step was publishing the needed content from the CMS out into an open format. VPR&#8217;s Dan Allen published from the CMS <a href="http://www.atomenabled.org/">Atom</a> feeds of the various content we would need for the new homepage.</p>
<h3>PHP and Zend Framework</h3>
<p>Once we had the needed Atom feeds, we created a <a href="http://framework.zend.com/">Zend Framework</a> web application to import these feeds. Components such as <a href="http://framework.zend.com/manual/en/zend.feed.reader.html">Zend_Feed_Reader</a> made the job easier. The weather data comes from the National Oceanic and Atmospheric Administration&#8217;s (NOAA) National Weather Service&#8217;s <a href="http://www.weather.gov/forecasts/xml/rest.php">National Digital Forecast Database XML/REST Service</a>. The market data comes from the <a href="http://code.google.com/apis/finance/">Google Finance API</a>.</p>
<h3>CouchDB</h3>
<p>All of the data (except for weather, which is pulled directly with a bit of caching) is stored in <a href="http://couchdb.apache.org/">CouchDB</a>. Since we&#8217;re storing documents with varying metadata (i.e. Atom entries) choosing a document-oriented database made a lot of sense. CouchDB&#8217;s map/reduce views make for very efficient queries. Its RESTful HTTP API provides a lot of options for scaling and caching. We&#8217;re caching documents within the Zend Framework application and conditionally requesting these documents from CouchDB with ETags when a cache is available. The current cache is simply file-based but we&#8217;re considering using <a href="http://memcached.org/">Memcached</a> for even better performance. On a related note, the homepage itself also supports conditional HTTP requests.</p>
<h3>Apache and nginx</h3>
<p>We had the pleasure of working with another great Vermont company, <a href="http://www.clearbearing.com/">ClearBearing</a>, on this project. ClearBearing handles the infrastructure layer for <a href="http://www.vpr.net/">VPR.net</a>. The current website was (and still is) served up by <a href="http://httpd.apache.org/">Apache</a>. ClearBearing already had <a href="http://nginx.org/">nginx</a> in place as a reverse proxy to handle caching. Since we weren&#8217;t replacing the entire CMS we needed a way for the existing CMS and this new application to coexist. We decided to host the new application separately (still administered by ClearBearing) and reverse proxy requests for certain URIs (primarily the homepage) to the new application. This provides a clean separation between the new application and the existing CMS while still allowing for them to be hosted on the same domain from an end-user perspective.</p>
<h3>Licensing</h3>
<p>You&#8217;ll notice that all of the standards used are open standards and all of the technologies used are free and open source software. Additionally, all of the code we have written for VPR is licensed to them under the permissive <a href="http://www.opensource.org/licenses/bsd-license.php">New BSD License</a>. This means that VPR is free to use this code however they want, study and modify the code, and redistribute the code as-is or modified. They can do all of this without paying additional licensing fees.</p>
<h3>Design</h3>
<p>While this post is primarily about the technology behind VPR&#8217;s new homepage, I should mention that Found Line&#8217;s <a href="http://foundline.com/people/jason-pelletier">Jason Pelletier</a> designed the new homepage and implemented all of its HTML and CSS. We worked closely with Jonathan Butler and John Van Hoesen, Vice President for News &amp; Programming, to make sure the new design meets the needs of website visitors and the organization.</p>
<h3>Next Steps</h3>
<p>The launch of this new homepage was just one iteration with many more to come. As Jonathan Butler mentioned in his blog post, VPR has plans to further improve online services for their listeners. Look for a redesigned VPR Classical page soon. There are also plans for better mobile access to VPR and VPR Classical programming. Fortunately much of the work that has been done can be leveraged to create additional online services for VPR&#8217;s listeners.</p>
<p>A special thanks for the <a href="http://www.vpr.net/support/">support of VPR&#8217;s listeners</a>—you made this new homepage possible! If you have questions, comments, complaints, or suggestions about the new homepage then please <a href="http://www.vpr.net/inside_vpr/contact_us/?subject=VPR+Homepage">contact VPR</a> directly with your feedback (although you&#8217;re welcome to comment here as well).</p>
]]></content:encoded>
			<wfw:commentRss>http://bradley-holt.com/2010/10/behind-the-new-vpr-homepage/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Vermont Code Camp</title>
		<link>http://bradley-holt.com/2010/08/vermont-code-camp-2/</link>
		<comments>http://bradley-holt.com/2010/08/vermont-code-camp-2/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 13:23:11 +0000</pubDate>
		<dc:creator>Bradley Holt</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[BTV]]></category>
		<category><![CDATA[btvphpug]]></category>
		<category><![CDATA[FOSS]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Software Deployment]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Vermont]]></category>
		<category><![CDATA[vtcodecamp]]></category>

		<guid isPermaLink="false">http://bradley-holt.com/?p=713</guid>
		<description><![CDATA[This year&#8217;s Vermont Code Camp will be on Saturday, September 11th, 2010 at Kalkin Hall on the University of Vermont campus. Last year&#8217;s event was a big success with 85 attendees and 19 sessions and this one promises to be even bigger and better! The second annual Vermont Code Camp will be a full day [...]]]></description>
			<content:encoded><![CDATA[<p>This year&#8217;s <a href="http://vtcodecamp.org/">Vermont Code Camp</a> will be on Saturday, September 11th, 2010 at Kalkin Hall on the University of Vermont campus. Last year&#8217;s event was a big success with 85 attendees and 19 sessions and this one promises to be even bigger and better! The second annual Vermont Code Camp will be a full day event bringing together technology community members, students, and professionals from around Vermont and beyond.</p>
<p><a href="http://vtcodecamp.org/"><img class="size-full wp-image-722 alignleft" title="Vermont Code Camp" src="http://bradley-holt.com/wp-content/uploads/2010/07/Vermont-Code-Camp-gradient-250x96.png" alt="Vermont Code Camp" width="250" height="96" /></a>There will be four rooms with sessions on .NET, PHP, Ruby, Python, Java, and more. Two of the rooms will have .NET topics and another will have sessions on free/open source software. There will be a fourth room where developers will be introduced to various technologies that they may not use every day. For example, are you a .NET developer? Come and learn about PHP, Ruby, Python, or Java. A Ruby developer? Learn about .NET, PHP, Python, or Java. You get the idea.</p>
<p>Vermont Code Camp is a great way to bring together technology user groups from around Vermont. The <a href="http://www.vtdotnet.org/">Vermont.NET User Group</a> is the primary organizer of the event but we hope to see others from the <a href="http://groups.google.com/group/burlington-vt-php">Burlington, VT  PHP Users Group</a> (which I organize), the <a href="http://vtrails.org/">Vermont Ruby On  Rails User Group</a>, the <a href="http://www.uvm.org/vague/">Vermont Area  Group of Unix Enthusiasts</a> (VAGUE), the <a href="http://www.gmoug.org/">Green Mountain Oracle Users Group</a>, the <a href="http://www.neaug.org/">New England Adobe User Group</a>, and the <a href="http://vtsql.sqlpass.org/">VT SQL Server Users Group</a> there. Do you know of any other Vermont technology user groups? Please let me know so that we can invite them!</p>
]]></content:encoded>
			<wfw:commentRss>http://bradley-holt.com/2010/08/vermont-code-camp-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

