<?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>The AboutUs Blog &#187; development</title>
	<atom:link href="http://blog.AboutUs.org/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.AboutUs.org</link>
	<description>The largest editable directory of websites</description>
	<lastBuildDate>Fri, 03 Feb 2012 19:33:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>“Spell check” your website code.</title>
		<link>http://blog.AboutUs.org/%e2%80%9cspell-check%e2%80%9d-your-website-code/</link>
		<comments>http://blog.AboutUs.org/%e2%80%9cspell-check%e2%80%9d-your-website-code/#comments</comments>
		<pubDate>Wed, 03 Aug 2011 17:00:00 +0000</pubDate>
		<dc:creator>MarkDilley</dc:creator>
				<category><![CDATA[AboutUs Articles]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[Did You Know?]]></category>

		<guid isPermaLink="false">http://blog.AboutUs.org/?p=12117</guid>
		<description><![CDATA[The HTML code that runs your website is most likely designed by a person. People make mistakes and you need to check to see how &#8216;valid&#8217; your code is. You do want it to show up in every person&#8217;s web browser, no matter if they have Internet Explorer, Firefox, Chrome, Camino, Opera, Rockmelt &#8211; or [...]]]></description>
			<content:encoded><![CDATA[<p></p><div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;">
				<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.AboutUs.org%2F%25e2%2580%259cspell-check%25e2%2580%259d-your-website-code%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe>
				</div><div class="really_simple_share_google1" style="width:90px;">
					<g:plusone size="medium" href="http://blog.AboutUs.org/%e2%80%9cspell-check%e2%80%9d-your-website-code/" ></g:plusone>
				</div><div class="really_simple_share_linkedin" style="width:px;">
					<script type="IN/Share" data-counter="right" data-url="http://blog.AboutUs.org/%e2%80%9cspell-check%e2%80%9d-your-website-code/"></script>
				</div><div class="really_simple_share_twitter" style="width:110px;">
					<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="“Spell check” your website code." data-url="http://blog.AboutUs.org/%e2%80%9cspell-check%e2%80%9d-your-website-code/" 
						data-via="" ></a> 
				</div></div>
		<div style="clear:both;"></div><p><a href="http://www.aboutus.org/Learn/W3C-Validation"><img src="http://blog.AboutUs.org/wp-content/uploads/2011/08/ChaulkboardCheckmark.png" alt="" title="ChaulkboardCheckmark" width="130" height="167" class="alignright size-full wp-image-12119" /></a><br />
The HTML code that runs your website is most likely designed by a person.  People make mistakes and you need to check to see how &#8216;valid&#8217; your code is.  You do want it to show up in every person&#8217;s web browser, no matter if they have Internet Explorer, Firefox, Chrome, Camino, Opera, Rockmelt &#8211; or any one of dozens of others.  </p>
<p>Validate your website code!  Did you even know such a thing existed!  Michelle Knight walks you though why it is important, how to do it and what to look out for in her article <b><a href="http://www.aboutus.org/Learn/W3C-Validation">W3C Validation</a></b>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.AboutUs.org/%e2%80%9cspell-check%e2%80%9d-your-website-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Developer At AboutUs!</title>
		<link>http://blog.AboutUs.org/new-developer-at-aboutus/</link>
		<comments>http://blog.AboutUs.org/new-developer-at-aboutus/#comments</comments>
		<pubDate>Wed, 04 May 2011 20:00:00 +0000</pubDate>
		<dc:creator>MarkDilley</dc:creator>
				<category><![CDATA[AboutUs.org]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://blog.AboutUs.org/?p=11499</guid>
		<description><![CDATA[Brad Heller joined AboutUs last week and here are his first weeks observations &#8211; One and a Half Minds are Better: Learning by Pairing &#8211; on the AboutUs Developers weblog.]]></description>
			<content:encoded><![CDATA[<p></p><div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;">
				<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.AboutUs.org%2Fnew-developer-at-aboutus%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe>
				</div><div class="really_simple_share_google1" style="width:90px;">
					<g:plusone size="medium" href="http://blog.AboutUs.org/new-developer-at-aboutus/" ></g:plusone>
				</div><div class="really_simple_share_linkedin" style="width:px;">
					<script type="IN/Share" data-counter="right" data-url="http://blog.AboutUs.org/new-developer-at-aboutus/"></script>
				</div><div class="really_simple_share_twitter" style="width:110px;">
					<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="New Developer At AboutUs!" data-url="http://blog.AboutUs.org/new-developer-at-aboutus/" 
						data-via="" ></a> 
				</div></div>
		<div style="clear:both;"></div><p>Brad Heller joined <a title="Our main website" href="http://AboutUs.org">AboutUs</a> last week and here are his first weeks observations &#8211; <a href="http://dev.aboutus.org/2011/05/03/one-and-a-half-minds-are-better-learning-by-pairing.html">One and a Half Minds are Better: Learning by Pairing</a> &#8211; on the AboutUs Developers weblog.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.AboutUs.org/new-developer-at-aboutus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile Metrics: Tracking Numbers that Matter</title>
		<link>http://blog.AboutUs.org/agile-metrics-tracking-numbers-that-matter/</link>
		<comments>http://blog.AboutUs.org/agile-metrics-tracking-numbers-that-matter/#comments</comments>
		<pubDate>Mon, 02 May 2011 17:46:33 +0000</pubDate>
		<dc:creator>jdhuntington</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[agile]]></category>

		<guid isPermaLink="false">http://blog.AboutUs.org/?p=11485</guid>
		<description><![CDATA[Many agile development teams keep track of velocity as a measure of their performance.* This is a useful measure, but it shouldn’t be the only one. This past week we realized that another performance metric of an agile team should be how much work it avoids doing. During a discussion with stakeholders last week, we realized [...]]]></description>
			<content:encoded><![CDATA[<p></p><div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;">
				<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.AboutUs.org%2Fagile-metrics-tracking-numbers-that-matter%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe>
				</div><div class="really_simple_share_google1" style="width:90px;">
					<g:plusone size="medium" href="http://blog.AboutUs.org/agile-metrics-tracking-numbers-that-matter/" ></g:plusone>
				</div><div class="really_simple_share_linkedin" style="width:px;">
					<script type="IN/Share" data-counter="right" data-url="http://blog.AboutUs.org/agile-metrics-tracking-numbers-that-matter/"></script>
				</div><div class="really_simple_share_twitter" style="width:110px;">
					<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Agile Metrics: Tracking Numbers that Matter" data-url="http://blog.AboutUs.org/agile-metrics-tracking-numbers-that-matter/" 
						data-via="" ></a> 
				</div></div>
		<div style="clear:both;"></div><p>Many agile development teams keep track of velocity as a measure of their performance.* This is a useful measure, but it shouldn’t be the only one. This past week we realized that another performance metric of an agile team should be how much work it <em>avoids</em> doing.</p>
<p>During a discussion with stakeholders last week, we realized that much of the work in our queue was a temporary fix for a problem we would ultimately solve at a later date. Thanks to the stakeholders keeping their own planning queue in a visible location, the development team was able to see that the proper fix for the problem was scheduled for just a few weeks later. We engaged the primary stakeholder in a discussion about the requirements of the proper fix, and deemed that it would be no more work than the temporary fix. Naturally, we started work on the proper fix, abandoning the temporary one &#8211; and eliminated nearly a week’s worth of work!</p>
<p>Velocity is a great metric to track, but perhaps agile teams should also get in the habit of tracking work <em>avoided</em> thanks to successful communication. After all, the best code is no code at all.</p>
<hr />
<p><strong>*</strong>: This, of course, is not the recommended use for velocity, but remains a method of measuring performance.</p>
<hr />
<center><em><strong>Cross posted at the AboutUs <a href="http://dev.aboutus.org/2011/05/02/agile-metrics.html">developers weblog</a>.</strong></em></center></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.AboutUs.org/agile-metrics-tracking-numbers-that-matter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introducing the AboutUs Developers Blog</title>
		<link>http://blog.AboutUs.org/introducing-the-aboutus-developers-blog/</link>
		<comments>http://blog.AboutUs.org/introducing-the-aboutus-developers-blog/#comments</comments>
		<pubDate>Mon, 18 Apr 2011 17:00:00 +0000</pubDate>
		<dc:creator>MarkDilley</dc:creator>
				<category><![CDATA[AboutUs.org]]></category>
		<category><![CDATA[Blogging]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[Did You Know?]]></category>

		<guid isPermaLink="false">http://blog.AboutUs.org/?p=11440</guid>
		<description><![CDATA[We have kicked around the idea of having the means of talking about technical matters regarding our website AboutUs.org for a while. And last week one got rolled out. Granted there are now a whole two posts on it, and you can subscribe to it to be enlightened. Dev.AboutUs.org It is beautiful looking and it [...]]]></description>
			<content:encoded><![CDATA[<p></p><div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;">
				<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.AboutUs.org%2Fintroducing-the-aboutus-developers-blog%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe>
				</div><div class="really_simple_share_google1" style="width:90px;">
					<g:plusone size="medium" href="http://blog.AboutUs.org/introducing-the-aboutus-developers-blog/" ></g:plusone>
				</div><div class="really_simple_share_linkedin" style="width:px;">
					<script type="IN/Share" data-counter="right" data-url="http://blog.AboutUs.org/introducing-the-aboutus-developers-blog/"></script>
				</div><div class="really_simple_share_twitter" style="width:110px;">
					<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Introducing the AboutUs Developers Blog" data-url="http://blog.AboutUs.org/introducing-the-aboutus-developers-blog/" 
						data-via="" ></a> 
				</div></div>
		<div style="clear:both;"></div><p><a href="http://dev.aboutus.org"><img class="alignright size-full wp-image-11444" title="Jumping the Shark" src="http://blog.AboutUs.org/wp-content/uploads/2011/04/Screen-shot-2011-04-18-at-5.48.18-PM1.png" alt="Jumping the Shark" width="209" height="215" /></a>We have kicked around the idea of having the means of talking about technical matters regarding our website AboutUs.org for a while.</p>
<p>And last week one got rolled out.  Granted there are now a whole two posts on it, and you can subscribe to it to be enlightened.</p>
<p><big><big><strong><a href="http://dev.aboutus.org/">Dev.AboutUs.org</a></strong></big></big></p>
<p>It is beautiful looking <img src='http://blog.AboutUs.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />   and it does the job.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.AboutUs.org/introducing-the-aboutus-developers-blog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kiwi: A Fast, Formal WikiText Parser</title>
		<link>http://blog.AboutUs.org/kiwi-a-fast-formal-wikitext-parser/</link>
		<comments>http://blog.AboutUs.org/kiwi-a-fast-formal-wikitext-parser/#comments</comments>
		<pubDate>Mon, 31 Jan 2011 18:00:00 +0000</pubDate>
		<dc:creator>Sam Goldstein</dc:creator>
				<category><![CDATA[AboutUs.org]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[Search Technology]]></category>
		<category><![CDATA[Kiwi]]></category>
		<category><![CDATA[MediaWiki]]></category>
		<category><![CDATA[MediaWiki Data Summit]]></category>
		<category><![CDATA[O'Reilly]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[WikiText Parsing]]></category>

		<guid isPermaLink="false">http://blog.AboutUs.org/?p=8895</guid>
		<description><![CDATA[AboutUs developer Karl Matthias will be traveling to O&#8217;Reilly Media&#8217;s headquarters next Friday to present at a MediaWiki data summit. He&#8217;ll be talking about Kiwi, a fast formal parser we&#8217;ve developed at AboutUs for parsing MediaWiki style wikitext. AboutUs.org has its roots in MediaWiki. We began several years ago as a MediaWiki installation with a few custom [...]]]></description>
			<content:encoded><![CDATA[<p></p><div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;">
				<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.AboutUs.org%2Fkiwi-a-fast-formal-wikitext-parser%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe>
				</div><div class="really_simple_share_google1" style="width:90px;">
					<g:plusone size="medium" href="http://blog.AboutUs.org/kiwi-a-fast-formal-wikitext-parser/" ></g:plusone>
				</div><div class="really_simple_share_linkedin" style="width:px;">
					<script type="IN/Share" data-counter="right" data-url="http://blog.AboutUs.org/kiwi-a-fast-formal-wikitext-parser/"></script>
				</div><div class="really_simple_share_twitter" style="width:110px;">
					<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Kiwi: A Fast, Formal WikiText Parser" data-url="http://blog.AboutUs.org/kiwi-a-fast-formal-wikitext-parser/" 
						data-via="" ></a> 
				</div></div>
		<div style="clear:both;"></div><p><a href="https://github.com/aboutus/kiwi"><img class="alignright size-full wp-image-8897" title="Kiwi" src="http://blog.AboutUs.org/wp-content/uploads/2011/01/Kiwi.png" alt="" width="200" height="150" /></a>AboutUs developer <a href="http://www.aboutus.org/KarlMatthias">Karl Matthias</a> will be traveling to <a href="http://www.aboutus.org/OReilly.com">O&#8217;Reilly Media&#8217;s</a> headquarters next Friday to present at a MediaWiki data summit.  He&#8217;ll be talking about Kiwi, a fast formal parser we&#8217;ve developed at AboutUs for parsing MediaWiki style wikitext.</p>
<p>AboutUs.org has its roots in MediaWiki. We began several years ago as a MediaWiki installation with a few custom plugins.</p>
<p>We&#8217;ve changed a lot since then. The application has been rewritten in Ruby, and we&#8217;ve pulled in a variety of other technologies as we&#8217;ve increased our scale and added new functionality. We still do use parts of MediaWiki&#8217;s PHP codebase to parse the wiki content contributed by our editors.  It&#8217;s the best wikitext parser out there, and hard to replace.</p>
<p><span id="more-8895"></span></p>
<p>We wanted to experiment with alternatives for parsing the wikitext in our database.  Wikitext is notoriously difficult to parse.  It is a c<a href="http://en.wikipedia.org/wiki/Context-sensitive_language">ontext-sensitive</a> language, and so can&#8217;t be parsed with the traditional parser generator tools used to parse most programming languages or grammars.  Attempts have been made to <a href="http://www.mediawiki.org/wiki/Markup_spec">formalize wikitext</a>, but so far, none of these efforts are complete.</p>
<p><a href="http://www.aboutus.org/WardCunningham">Ward Cunningham </a>had been experimenting with <a href="http://en.wikipedia.org/wiki/Parsing_expression_grammar">PEG</a>, a new style of parser which was first<br />
written about in 2004. PEG style parsers combine the tokenizing and parsing stages of the traditional parser generators that have existed since the 1970s.  This new parsing philosophy makes formal definitions of context-sensitive grammars like wikitext possible.</p>
<p><a href="http://www.aboutus.org/ThomasLuce">Thomas Luce</a>, another developer at AboutUs, went home one weekend and began using a PEG parser generator to create a recursive descent wikitext parser.  Within a few days he&#8217;d implemented a good chunk of wikitext&#8217;s features.  I wrote a <a href="https://github.com/samg/wikiwiki">simple wiki</a> application that uses the parser so we could see the results as it improved.  Within a few weeks, with contributions from Karl and Ward, we felt like we were approaching a full wikitext parser implementation &#8211; and one that parses at blazing speeds, since it compiles down to C code.</p>
<p>We&#8217;ve built an admin-only &#8220;parse with Kiwi&#8221; feature into AboutUs.org, and may switch over to it completely in the near future.  We&#8217;ve also open-sourced <a href="https://github.com/AboutUs/kiwi">Kiwi</a> under a BSD-style license so it can be used on other websites.  We hope wiki aficionados will find it useful, and that it will be improved by the wiki developer community.</p>
<p>At the very least, Kiwi is cool for demonstrating that parsing wikitext can be done with a formal parser. It was also great to simplify some of our infrastructure in the process of developing Kiwi.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.AboutUs.org/kiwi-a-fast-formal-wikitext-parser/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Indexing data that&#8217;s not in your database with Sphinx and Thinking Sphinx</title>
		<link>http://blog.AboutUs.org/indexing-data-thats-not-in-your-database-with-sphinx-and-thinking-sphinx-2/</link>
		<comments>http://blog.AboutUs.org/indexing-data-thats-not-in-your-database-with-sphinx-and-thinking-sphinx-2/#comments</comments>
		<pubDate>Mon, 18 Oct 2010 22:11:58 +0000</pubDate>
		<dc:creator>Sam Goldstein</dc:creator>
				<category><![CDATA[AboutUs.org]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[Did You Know?]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://blog.AboutUs.org/?p=6053</guid>
		<description><![CDATA[Editor&#8217;s note: This is cross-posted at Drastic Code. We recently re-implemented the site&#8217;s search feature here at AboutUs. Behind the scenes the new search uses Sphinx (a super-fast and scalable search engine) and Thinking Sphinx (which allows easy configuration and querying of Sphinx from within Rails). One thing that makes Sphinx so much faster than [...]]]></description>
			<content:encoded><![CDATA[<p></p><div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;">
				<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.AboutUs.org%2Findexing-data-thats-not-in-your-database-with-sphinx-and-thinking-sphinx-2%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe>
				</div><div class="really_simple_share_google1" style="width:90px;">
					<g:plusone size="medium" href="http://blog.AboutUs.org/indexing-data-thats-not-in-your-database-with-sphinx-and-thinking-sphinx-2/" ></g:plusone>
				</div><div class="really_simple_share_linkedin" style="width:px;">
					<script type="IN/Share" data-counter="right" data-url="http://blog.AboutUs.org/indexing-data-thats-not-in-your-database-with-sphinx-and-thinking-sphinx-2/"></script>
				</div><div class="really_simple_share_twitter" style="width:110px;">
					<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Indexing data that&#8217;s not in your database with Sphinx and Thinking Sphinx" data-url="http://blog.AboutUs.org/indexing-data-thats-not-in-your-database-with-sphinx-and-thinking-sphinx-2/" 
						data-via="" ></a> 
				</div></div>
		<div style="clear:both;"></div><p><em>Editor&#8217;s note: This is cross-posted at <a href="http://drasticcode.com/2010/10/13/indexing-data-that-s-not-in-your-database-with-sphinx-and-thinking-sphinx">Drastic Code</a>.</em></p>
<p>We recently re-implemented the site&#8217;s search feature here at <a href="http://AboutUs.org/AboutUs.org">AboutUs</a>.  Behind the scenes the <a href="http://AboutUs.org/AboutUs_Search">new search</a> uses <a href="http://sphinxsearch.com">Sphinx</a> (a super-fast and scalable search engine) and <a href="http://freelancing-god.github.com/ts/en/">Thinking Sphinx</a> (which allows easy configuration and querying of Sphinx from within Rails).</p>
<p>One thing that makes Sphinx so much faster than alternatives like Solr is that it communicates directly with your database when it is building its search index.  This is far faster than talking with your application layer, and indexing the result of your application models&#8217; methods.  In our case we&#8217;re able to reindex about 40 million records in around 4 hours.  Solr used to take days.</p>
<p>There is a major disadvantage to this approach though.  Since Sphinx is talking directly to the database, you can&#8217;t index the results of method calls on your ruby objects.  I&#8217;ve discovered though that this is not nearly as limiting as it may sound, since you <strong>can</strong> index the results of <span class="caps">SQL</span> functions. Even better, manipulating and transforming your data with <span class="caps">SQL</span> functions as you index it, is <strong>virtually free</strong>.  I haven&#8217;t noticed any impact on our index times, after adding many functions to our indexing process.</p>
<p>Here are a couple real examples.</p>
<p><span id="more-6053"></span></p>
<p>In our app, we deal a lot with domain names, and websites.  One feature of our search displays domain names that match your query.  Our stakeholders wanted these to be sorted by the importance of the tld, with <code>.com</code> at the top, followed by <code>.org</code>, <code>.gov</code>, etc. Since this sort order is basically arbitrary I replace each tld with an integer, using mySQL&#8217;s <code>REPLACE</code> function, store this attribute in Sphinx, and sort on it when querying.</p>
<p>This is what it looks like in Thinking Sphinx&#8217;s <code>define_index</code> block:</p>
<pre><code class="ruby">
  define_index do
    # Attributes that allow for fast sorting of domain names by tld, favoring .com's etc.
    # Useful in "exact domain match" search
    replace_str = "LOWER(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(page_title,'com','1'),'org','2'),'gov','3'),'edu','4'),'net','5'),'co.uk','6'),'de','7'),'co.jp','8'),'info','9'))"
    has replace_str, :as =&gt; :page_title_sortable_by_tld, :type =&gt; :string
</code></pre>
<p>It&#8217;s not pretty, but it&#8217;s far prettier than trying to do this in ruby, at query time.  Now we just add an <code> &#58order &#61&#62 "page_title_sortable_by_tld ASC"</code> to our calls to <code>Page.search</code>.</p>
<p>Another place we use this is to convert a flag stored in a serialized <span class="caps">YAML</span> structure into a boolean attribute that Sphinx can sort on and filter by.</p>
<pre><code class="ruby">
    # Allow favoring in search results based on whether a page is
    # "pro_followed" (i.e. it has its external links followed).
    #
    # Since this data is stored in a serialized YAML structure we need some SQL
    # function fanciness to access this data as a boolean value.  If the below
    # YAML key value appear in the text field LOCATE will return an integer
    # greater than 0.  If not it will return 0.  Coercing this to 1 or 0 (with
    # "&gt; 0") allows sphinx to interpret this as a boolean value.
    join page_data_latest.page_datum
    has 'LOCATE(":follow_external_links: true", `page_data`.`content`) &gt; 0',
      :as =&gt; :pro_followed, :type =&gt; :boolean

</code></pre>
<p>This code searches a field in the database for the some literal <span class="caps">YAML</span> text, and stores whether it was found as a true/false attribute in the search index.  This is way easier than deserializing  the <span class="caps">YAML</span> and storing this value in a boolean field in mySQL.</p>
<p>This has proved to be a very useful technique for us, and is far easier and more efficient than denormalizing some of our data to a &#8220;search text&#8221; column, or doing a bunch of post-querying processing within Ruby on Rails.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.AboutUs.org/indexing-data-thats-not-in-your-database-with-sphinx-and-thinking-sphinx-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How (and Why) to Get Everyone Coding: Part II</title>
		<link>http://blog.AboutUs.org/how-and-why-to-get-everyone-coding-part-ii/</link>
		<comments>http://blog.AboutUs.org/how-and-why-to-get-everyone-coding-part-ii/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 21:33:30 +0000</pubDate>
		<dc:creator>Steven Walling</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[The Business]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://blog.aboutus.org/?p=3688</guid>
		<description><![CDATA[In Part I of &#8220;How (and Why) to Get Everyone Coding,&#8221; AboutUs staffer Ted brought up some situations where there are direct business advantages to having more people with even very simple technical skills. This is the &#8220;with enough eyes, all bugs are shallow&#8221; saying everyone has heard. But what about the purely cultural advantages [...]]]></description>
			<content:encoded><![CDATA[<p></p><div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;">
				<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.AboutUs.org%2Fhow-and-why-to-get-everyone-coding-part-ii%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe>
				</div><div class="really_simple_share_google1" style="width:90px;">
					<g:plusone size="medium" href="http://blog.AboutUs.org/how-and-why-to-get-everyone-coding-part-ii/" ></g:plusone>
				</div><div class="really_simple_share_linkedin" style="width:px;">
					<script type="IN/Share" data-counter="right" data-url="http://blog.AboutUs.org/how-and-why-to-get-everyone-coding-part-ii/"></script>
				</div><div class="really_simple_share_twitter" style="width:110px;">
					<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="How (and Why) to Get Everyone Coding: Part II" data-url="http://blog.AboutUs.org/how-and-why-to-get-everyone-coding-part-ii/" 
						data-via="" ></a> 
				</div></div>
		<div style="clear:both;"></div><p><a href="http://www.flickr.com/photos/rachel-johnson/4390151356/"><img class="alignleft size-full wp-image-3678" title="Coding" src="http://blog.aboutus.org/http://blog.aboutus.org/wp-content/uploads/2010/03/4390151356_8490fc582a.jpg" alt="" width="180" height="120" /></a> In <a href="http://blog.aboutus.org/how-to-get-everyone-coding/">Part I</a> of &#8220;How (and Why) to Get Everyone Coding,&#8221; AboutUs staffer Ted brought up some situations where there are direct business advantages to having more people with even very simple technical skills. This is the &#8220;with enough eyes, all bugs are shallow&#8221; saying everyone has heard.</p>
<p>But what about the purely cultural advantages of having non-technical staff coding? Would it still be useful to have staff learn to code, even if no one got real access to the codebase?</p>
<p><span id="more-3688"></span></p>
<p>He said yes, &#8220;because whenever I&#8217;ve had a conversation with devs when they get any inkling that I understand what they&#8217;re saying, they view me differently. I can see it in the way they treat me. It&#8217;s just a different kind of conversation when their work is not so mysterious.&#8221;</p>
<p>AboutUs community guru Mark was more skeptical about the ROI of learning to code. He said that for people who are in constant contact with developers, like project and product managers, the benefits are clear. But should startups really be paying a CFO or marketing staff to learn to code? Reactions were mixed on this point, with some people enthusiastic about the idea and others skeptical.</p>
<p>Ward Cunningham helped some of our non-development staff to get more familiar with code. Here&#8217;s what he has to say about it:</p>
<blockquote><p>I surprised the world by showing how collective-ownership can empower a community where anybody can edit. What the world doesn&#8217;t yet realize is that wiki is a miniature of the development methods I was creating at wiki&#8217;s founding. These methods evolved to become Agile software development.</p>
<p>AboutUs is an agile development shop. Contributing to an agile codebase isn&#8217;t much more complicated than contributing to wiki. If its a large codebase then contributing can seem mysterious as it is with Wikipedia. But this complexity comes from sociological effects, nothing inherent in the technology.</p>
<p>I hope that as the world comes to understand large wikis they will also understand that a large computer program, like those we are forced to deal with every day, or even civilization itself, must be made through collective-ownership if it is to remain healthy and last. I hope the staff at AboutUs can serve as an example.</p></blockquote>
<p>Hopefully this has been a useful example for anyone interested in getting non-technical members of a startup into the code. If you have had an experience with this kind of effort, good or bad, it would be great to get your feedback.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.AboutUs.org/how-and-why-to-get-everyone-coding-part-ii/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How (and Why) to Get Everyone Coding: Part I</title>
		<link>http://blog.AboutUs.org/how-to-get-everyone-coding/</link>
		<comments>http://blog.AboutUs.org/how-to-get-everyone-coding/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 21:21:40 +0000</pubDate>
		<dc:creator>Steven Walling</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[The Business]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://blog.aboutus.org/?p=3675</guid>
		<description><![CDATA[Recently, we came across the closing keynote at PyCon by Antonio Rodriguez. In it, he made what he called a &#8220;crazy proposition&#8221; that caught our attention. Here&#8217;s the main thrust of it: I think every employee in a web startup— or in fact any company which depends on software in any meaningful way— should learn [...]]]></description>
			<content:encoded><![CDATA[<p></p><div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;">
				<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.AboutUs.org%2Fhow-to-get-everyone-coding%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe>
				</div><div class="really_simple_share_google1" style="width:90px;">
					<g:plusone size="medium" href="http://blog.AboutUs.org/how-to-get-everyone-coding/" ></g:plusone>
				</div><div class="really_simple_share_linkedin" style="width:px;">
					<script type="IN/Share" data-counter="right" data-url="http://blog.AboutUs.org/how-to-get-everyone-coding/"></script>
				</div><div class="really_simple_share_twitter" style="width:110px;">
					<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="How (and Why) to Get Everyone Coding: Part I" data-url="http://blog.AboutUs.org/how-to-get-everyone-coding/" 
						data-via="" ></a> 
				</div></div>
		<div style="clear:both;"></div><p><a href="http://www.flickr.com/photos/rachel-johnson/4390151356/"><img class="alignleft size-full wp-image-3678" title="Coding" src="http://blog.aboutus.org/http://blog.aboutus.org/wp-content/uploads/2010/03/4390151356_8490fc582a.jpg" alt="" width="180" height="120" /></a>Recently, we came across the <a href="http://theonda.org/pages/pycon2010">closing keynote at PyCon</a> by Antonio Rodriguez. In it, he made what he called a &#8220;crazy proposition&#8221; that caught our attention. Here&#8217;s the main thrust of it:</p>
<blockquote><p>I think every employee in a web startup— or in fact any company which depends on software in any meaningful way— should learn how to code. From the slickest sales guy to the most obstinate operations guy, from the laziest intern to the most professorial manager, if they don&#8217;t have their hands in the code, your startup is much more likely to fail.</p></blockquote>
<p>AboutUs.org is built on Rails, not Python, but this declaration about culture and code in Web startups was very interesting to us nonetheless. We haven&#8217;t gotten <em>everyone</em> in our startup to code, but we certainly have had non-programmers dipping a toe into the codebase. Here&#8217;s our experience with such an endeavor, and the reflections of the staff involved.</p>
<p><span id="more-3675"></span></p>
<h2>Tip of the Iceberg</h2>
<p>The first serious project that got non-technical staff involved in code was a smaller one, not our main site <a href="http://aboutus.org">AboutUs.org</a>. It was headed up by <a href="http://www.aboutus.org/User:Julia">Julia</a> and <a href="http://www.aboutus.org/User:TedErnst">Ted</a>, who work in operations, finance, and organizational development.</p>
<p>The work mostly involved simple front end development, but some of the facts of life for coders became clear to them quickly. One of these points was the need for good source control. <a href="http://www.aboutus.org/Ward_Cunningham">Ward Cunningham</a> took a little time to help them get set up with GitHub.</p>
<p>From then on out, they were largely on their own, using online help sources to work their way through it — coding by Google, basically. All of this has been relatively smooth sailing, and Ted said he thinks it could be the tip of the iceberg for us in terms of getting everyone playing with code.</p>
<h2>A Little Knowledge</h2>
<p>Ted stressed that it was &#8220;definitely&#8221; a good idea to have people start small and work on what amounted to a side project. Not working right away on our main product afforded us more room for experimentation. </p>
<p>&#8220;The idea of pushing into GitHub is in some ways a scary one,&#8221; he said, &#8220;for mission critical software, if I pushed something that was a mistake that devs didn&#8217;t realize was a mistake, it would still be my fault. That phrase, &#8216;a little bit of knowledge is a dangerous thing&#8217;, it&#8217;s true.&#8221;</p>
<h2>Squashing Small Bugs</h2>
<p>So now that some of our staff have tried some front end work and tinkering with code, what about the idea of say, pulling an offsite for non-technical staff to learn to write a simple program?</p>
<p>Ted said, &#8220;I think it&#8217;s a great idea for a lot of reasons. There are a lot of things that don&#8217;t get done because the devs are working on higher priority stuff, and it&#8217;s not dangerous. It&#8217;s changing wording, for an example. Non-devs can do that and it won&#8217;t be a big problem. I love the idea of going even further than that, and learning how the basics of the code work.&#8221;</p>
<p>&#8220;Even reading commits is a good thing, which some of us have done. We&#8217;ve read commits over a period of time, watching what the devs are doing. But if actually we had commit access, even if we didn&#8217;t have deploy access, to be able to find small bugs and things that are simple, that would free up quite a bit of the dev time.&#8221;</p>
<p>Ted got excited talking about how he and <a href="http://www.aboutus.org/MarkDilley">Mark</a>, the AboutUs <a href="http://aboutus.org/Community">Community</a> lead, were able to refer to line numbers and other specific features of the codebase when talking with AboutUs developers. Clearly it&#8217;s not hard to get some staff interested in learning more about coding.</p>
<p><em>Read <a href="http://blog.aboutus.org/how-and-why-to-get-everyone-coding-part-ii/">Part II</a> for more, including Ward Cunningham&#8217;s thoughts about getting everyone to code.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.AboutUs.org/how-to-get-everyone-coding/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>AboutUs is hiring Agile Rails Developers</title>
		<link>http://blog.AboutUs.org/aboutus-is-hiring-agile-rails-developers/</link>
		<comments>http://blog.AboutUs.org/aboutus-is-hiring-agile-rails-developers/#comments</comments>
		<pubDate>Fri, 09 Oct 2009 00:30:03 +0000</pubDate>
		<dc:creator>Ted Ernst</dc:creator>
				<category><![CDATA[AboutUs.org]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://blog.aboutus.org/?p=3005</guid>
		<description><![CDATA[That&#8217;s right, we&#8217;re looking for several highly talented folks to to join our Portland, OR or Lahore offices. Here&#8217;s a rundown of the position. If you or anyone you know might be a good fit, email your cover letter and resume to jobs@aboutus.org (be sure to include the job title and city in the subject [...]]]></description>
			<content:encoded><![CDATA[<p></p><div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;">
				<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.AboutUs.org%2Faboutus-is-hiring-agile-rails-developers%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe>
				</div><div class="really_simple_share_google1" style="width:90px;">
					<g:plusone size="medium" href="http://blog.AboutUs.org/aboutus-is-hiring-agile-rails-developers/" ></g:plusone>
				</div><div class="really_simple_share_linkedin" style="width:px;">
					<script type="IN/Share" data-counter="right" data-url="http://blog.AboutUs.org/aboutus-is-hiring-agile-rails-developers/"></script>
				</div><div class="really_simple_share_twitter" style="width:110px;">
					<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="AboutUs is hiring Agile Rails Developers" data-url="http://blog.AboutUs.org/aboutus-is-hiring-agile-rails-developers/" 
						data-via="" ></a> 
				</div></div>
		<div style="clear:both;"></div><p><img class="alignright" title="large_uncle-sam" src="http://blog.aboutus.org/http://blog.aboutus.org/wp-content/uploads/2009/06/large_uncle-sam.jpg" alt="We Want You!" width="218" height="299" />That&#8217;s right, we&#8217;re looking for several highly talented folks to to join our <a href="http://www.aboutus.org/Category:AboutUsPortland">Portland</a>, OR or <a href="http://www.aboutus.org/Category:AboutUsLahore">Lahore</a> offices.</p>
<p>Here&#8217;s a rundown of the position. If you or anyone you know might be a good fit, email your cover letter and resume to jobs@aboutus.org (be sure to include the job title and city in the subject line).</p>
<h2>Agile Rails Developer</h2>
<p>Top 10 Rails site (Alexa #715) seeking talent for our small development team. <a href="http://www.aboutus.org" target="_blank">AboutUs.org</a> is a structured <a href="http://www.aboutus.org/WikiWiki" target="_blank">wiki</a> of all websites. We run much of our site on AWS and are experimenting with other technologies that scale to support hundreds of thousands of people working together on millions of pages. We&#8217;re <a href="http://www.aboutus.org/list/venture-capital" target="_blank">venture</a>-backed, and our founder&#8217;s history of leading <a href="http://www.aboutus.org/list/startup" target="_blank">startups</a> to successful acquisition helped him <a href="http://blog.aboutus.org/ray-gets-the-thumbs-up-at-oen/" target="_blank">win the Entrepreneurship Award for Individual Achievement</a> from the Oregon Entrepreneurs Network last month.<a href="http://www.aboutus.org/OEN.org" target="_blank"></a></p>
<p>Requirements</p>
<p>We are looking for people to join an elite team. To be successful, you&#8217;ll need to have already done the following:</p>
<ul>
<li> Deployed web applications</li>
<li>Wielded advanced programming
<ul>
<li>closures</li>
<li>metaprogramming</li>
<li>distributed computing</li>
<li>service-oriented architecture</li>
</ul>
</li>
<li>Worked with XP/Agile methods</li>
</ul>
<p><strong><a href="http://www.aboutus.org/AboutUs.org/Jobs#Agile_Ruby_Developer">Read more&#8230;</a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.AboutUs.org/aboutus-is-hiring-agile-rails-developers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Tokyo Tyrant in Production</title>
		<link>http://blog.AboutUs.org/using-tokyo-tyrant-in-production/</link>
		<comments>http://blog.AboutUs.org/using-tokyo-tyrant-in-production/#comments</comments>
		<pubDate>Wed, 12 Aug 2009 00:25:43 +0000</pubDate>
		<dc:creator>didip</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[The Business]]></category>
		<category><![CDATA[tokyo cabinet]]></category>
		<category><![CDATA[tokyo tyrant]]></category>

		<guid isPermaLink="false">http://blog.aboutus.org/?p=2710</guid>
		<description><![CDATA[Here at AboutUs, we have hundreds of GBs of data. Most are static, immutable data, keyed by a specific primary key. With such a use case, key value databases make perfect sense. After looking at various options, we chose to experiment with Tokyo Cabinet &#38; Tokyo Tyrant first, because Tokyo has such a low barrier [...]]]></description>
			<content:encoded><![CDATA[<p></p><div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;">
				<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.AboutUs.org%2Fusing-tokyo-tyrant-in-production%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe>
				</div><div class="really_simple_share_google1" style="width:90px;">
					<g:plusone size="medium" href="http://blog.AboutUs.org/using-tokyo-tyrant-in-production/" ></g:plusone>
				</div><div class="really_simple_share_linkedin" style="width:px;">
					<script type="IN/Share" data-counter="right" data-url="http://blog.AboutUs.org/using-tokyo-tyrant-in-production/"></script>
				</div><div class="really_simple_share_twitter" style="width:110px;">
					<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Using Tokyo Tyrant in Production" data-url="http://blog.AboutUs.org/using-tokyo-tyrant-in-production/" 
						data-via="" ></a> 
				</div></div>
		<div style="clear:both;"></div><p>Here at AboutUs, we have hundreds of GBs of data. Most are static, immutable data, keyed by a specific primary key.</p>
<p>With such a use case, key value databases make perfect sense. After looking at various options, we chose to experiment with <a href="http://tokyocabinet.sourceforge.net/" target="_blank">Tokyo Cabinet</a> &amp; <a href="http://tokyocabinet.sourceforge.net/tyrantdoc/" target="_blank">Tokyo Tyrant</a> first, because Tokyo has such a low barrier to entry.</p>
<p>A couple of benefits that we saw immediately from using Tokyo:</p>
<ul>
<li>It is fast. Not as fast as in-memory store, but if you have more disk space than memory for storing data &#8212; for example, cache data &#8212; Tokyo is an attractive choice.</li>
<li>Tokyo&#8217;s performance is affected by number of keys. But it took far more keys to slow it down than we expected.  Tokyo didn&#8217;t show any significant slowing even when we pushed 10 million keys in a single database. We were pleasantly surprised with its performance.</li>
<li>It can handle memcache protocol. This lowers the barrier to entry, making Tokyo attractive for experimentation.</li>
</ul>
<p><strong>Installation</strong><br />
Installing Tokyo isn&#8217;t trivial, but it&#8217;s not hard, either. It requires libbz2-dev to be installed first:</p>
<pre># For RPM based
sudo yum install libbz2-dev

# For debian based
sudo apt-get install libbz2-dev</pre>
<p>If you want to use Tokyo&#8217;s binary protocol &#8212; via rufus-tokyo for example &#8212; you need to have both Tokyo Cabinet and Tokyo Tyrant installed. We guessed that we might need just the header files, but decided we did  not want to manage those files manually.</p>
<p><strong>First Try &#8212; Success!<br />
</strong></p>
<p>In our first non-experimental run, we let Tokyo Tyrant handle our page cache. We have been interested in alternative databases for a while, but page cache was the first project that allowed us to try one out.</p>
<p>Each AboutUs domain page is built from at least three individual widgets. Because we intend to create more widgets, building pages on the fly, every render, is clearly inefficient. That&#8217;s why we came up with the page cache solution.</p>
<p>Deploying page cache is a smooth process. The size of our casket.tch file has grown to 51 GB, but so far, we&#8217;ve had to restart Tokyo Tyrant only once.</p>
<p><strong>Second Try &#8212; Fail!<br />
</strong></p>
<p>Our next opportunity to try out Tokyo was in making  our domain information easily available to our web application. Our total domain information is  about 160 GB. It&#8217;s not a trivial size to handle, and we still want quick access to it, especially since each piece of information is keyed by domain name.</p>
<p>Since our first attempt was a success, we thought Tokyo Tyrant would have no problem with handling our 160 GB opportunity.</p>
<p>Filled with hope, we naively pushed the entire 160GB to Tokyo Tyrant without throttling, using a simple script. As Tokyo grew, approaching 40 GB, it began slow down significantly. After 60GB, it died. We could neither restart the ttserver, nor recover the casket.tch.</p>
<p>In hind sight, we could have:</p>
<ul>
<li>Used more than one database.</li>
<li>Sharded multiple instances of Tokyo based on domain names.</li>
</ul>
<p>But we didn&#8217;t. Instead, we recovered quickly, and used Amazon&#8217;s SimpleDB.</p>
<p><strong>Conclusion</strong></p>
<p>We are still very happy with Tokyo&#8217;s performance in handling our page cache.</p>
<p>With better design, we could have used it to serve our domain information. But Tokyo is competing against other databases we are currently evaluating, including Amazon Web Services. For us, ease of use is a big deciding factor. But we&#8217;re still evaluating.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.AboutUs.org/using-tokyo-tyrant-in-production/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

