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

<channel>
	<title>Brian@Nitobi</title>
	<atom:link href="http://blogs.nitobi.com/brian/feed/" rel="self" type="application/rss+xml" />
	<link>http://blogs.nitobi.com/brian</link>
	<description>Enterprise Ajax and Ruby, together at last.</description>
	<pubDate>Mon, 07 Jul 2008 22:19:28 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Ajax and Scotch, Patio edition</title>
		<link>http://blogs.nitobi.com/brian/2008/07/07/ajax-and-scotch-patio-edition/</link>
		<comments>http://blogs.nitobi.com/brian/2008/07/07/ajax-and-scotch-patio-edition/#comments</comments>
		<pubDate>Mon, 07 Jul 2008 22:19:28 +0000</pubDate>
		<dc:creator>brian.leroux</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[ajax]]></category>

		<category><![CDATA[nitobi]]></category>

		<category><![CDATA[patio]]></category>

		<category><![CDATA[scotch]]></category>

		<category><![CDATA[shebeen]]></category>

		<guid isPermaLink="false">http://blogs.nitobi.com/brian/?p=33</guid>
		<description><![CDATA[Nothing beats a cool beer (or perhaps a delicious scotch) on the patio in the summertime. Come join the Nitobi hackers on the patio between Shebeen room and the Irish Heather this Thursday (July 10, 2008). We&#8217;ll be up to our usual tricks: discussing the latest technology with a fresh perspective.
]]></description>
			<content:encoded><![CDATA[<p>Nothing beats a cool beer (or perhaps a delicious scotch) on the patio in the summertime. Come join the Nitobi hackers on the patio between Shebeen room and the Irish Heather this Thursday (July 10, 2008). We&#8217;ll be up to our usual tricks: discussing the latest technology with a fresh perspective.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.nitobi.com/brian/2008/07/07/ajax-and-scotch-patio-edition/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Rogers Wireless Customer Service Failure</title>
		<link>http://blogs.nitobi.com/brian/2008/06/17/rogers-customer-service-failure/</link>
		<comments>http://blogs.nitobi.com/brian/2008/06/17/rogers-customer-service-failure/#comments</comments>
		<pubDate>Tue, 17 Jun 2008 19:30:13 +0000</pubDate>
		<dc:creator>brian.leroux</dc:creator>
		
		<category><![CDATA[rant]]></category>

		<category><![CDATA[customer experience]]></category>

		<category><![CDATA[fail]]></category>

		<category><![CDATA[rogers]]></category>

		<guid isPermaLink="false">http://blogs.nitobi.com/brian/?p=32</guid>
		<description><![CDATA[My wallet and phone were stolen from the YWCA gym right out of my locker. The thief must have used bolt cutters when nobody was around. It was a real disappointment but the staff where helpful and after hours on various automated systems I had a police case number, my credit cards canceled and my [...]]]></description>
			<content:encoded><![CDATA[<p>My wallet and phone were stolen from the YWCA gym right out of my locker. The thief must have used bolt cutters when nobody was around. It was a real disappointment but the staff where helpful and after hours on various automated systems I had a police case number, my credit cards canceled and my phone locked so nobody could make long distance calls. </p>
<p>The bank was helpful and sympathetic. The credit card companies took it upon themselves to call me and the police to follow up about fraudulent charge attempts. </p>
<p>However, Rogers Wireless left me feeling like shit.</p>
<p>I called Rogers Wireless that night and they assured me the phone was locked so no calls could be made and to just go to a store the next day and they would help me get a new phone and SIM card. When I arrived at the store they told me I had to purchase the new phone and renew (thus extend) my contact. &#8216;This was not the impression the agent on the phone gave me.&#8217;, I said and they responded, &#8216;Those guys are retards. We only their sell phones. We&#8217;re like a car dealership.&#8217;. I&#8217;m not kidding you. That is what a retailer, with the Rogers sign and exclusively Rogers products told me. Those guys are retards? They had the good nature to call customer service on my behalf and things degraded to, &#8216;Its your own fault your phone was stolen SIR, not ours&#8217;. I felt like I was being scolded for even thinking they were going to help. I bought a new SIM card deciding I&#8217;d find a phone on my own and the agent hesitantly informed me, &#8216;uuuhhh, your phone was never locked&#8217;. I called customer service again and the agent sneered &#8216;those retailer people don&#8217;t know what they&#8217;re talking about.&#8217;  No long distance calls on my phone, at least.</p>
<p>I walked out tired, angry and disappointed. Negative and poisonous. </p>
<p>This incident represents an epic failure of a brand experience. The people in the store and on the phone represented a confidence destroying lack of professionalism and complete disregard for my misfortune. As a customer I, perhaps naively, expected to be treated better than that. </p>
<p>With complex pyramid scheme like plans, disparate messaging, disregard for the customer and belligerent employee hubris I doubt Rogers Wireless can continue to be a success as more companies enter into the wireless space. As a human being first and a consumer second I am now actively seeking better options.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.nitobi.com/brian/2008/06/17/rogers-customer-service-failure/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ajax and Scotch - TONIGHT!</title>
		<link>http://blogs.nitobi.com/brian/2008/05/22/ajax-and-scotch-tonight/</link>
		<comments>http://blogs.nitobi.com/brian/2008/05/22/ajax-and-scotch-tonight/#comments</comments>
		<pubDate>Thu, 22 May 2008 19:12:16 +0000</pubDate>
		<dc:creator>brian.leroux</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[air]]></category>

		<category><![CDATA[ajax]]></category>

		<category><![CDATA[brian.leroux]]></category>

		<category><![CDATA[flash]]></category>

		<category><![CDATA[flex]]></category>

		<category><![CDATA[papervision3d]]></category>

		<category><![CDATA[rant]]></category>

		<category><![CDATA[software]]></category>

		<category><![CDATA[scotch]]></category>

		<category><![CDATA[shebeen]]></category>

		<guid isPermaLink="false">http://blogs.nitobi.com/brian/?p=30</guid>
		<description><![CDATA[At the Shebeen Room. Be there!

]]></description>
			<content:encoded><![CDATA[<p>At the Shebeen Room. Be there!<br />
<img src="http://blogs.nitobi.com/brian/wp-content/uploads/2008/05/jb3qc8z2c99j3ez360hlvbmh_400.jpg" alt="Be there or your hair is a bird!" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.nitobi.com/brian/2008/05/22/ajax-and-scotch-tonight/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Enumerate a range of dates with Ruby</title>
		<link>http://blogs.nitobi.com/brian/2008/05/05/enumerate-a-range-of-dates-with-ruby/</link>
		<comments>http://blogs.nitobi.com/brian/2008/05/05/enumerate-a-range-of-dates-with-ruby/#comments</comments>
		<pubDate>Mon, 05 May 2008 21:14:41 +0000</pubDate>
		<dc:creator>brian.leroux</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blogs.nitobi.com/brian/?p=29</guid>
		<description><![CDATA[Quick snippet, having fun with dates. 

require 'rubygems'
require 'activesupport'
date_range = (DateTime.now-10.days)..DateTime.now
date_range.each { &#124;e&#124; puts e  }

]]></description>
			<content:encoded><![CDATA[<p>Quick snippet, having fun with dates. </p>
<p><code><br />
require 'rubygems'<br />
require 'activesupport'</p>
<p>date_range = (DateTime.now-10.days)..DateTime.now</p>
<p>date_range.each { |e| puts e  }<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.nitobi.com/brian/2008/05/05/enumerate-a-range-of-dates-with-ruby/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Papervision3D Training w/ John Grden</title>
		<link>http://blogs.nitobi.com/brian/2008/05/05/papervision3d-training-w-john-grden/</link>
		<comments>http://blogs.nitobi.com/brian/2008/05/05/papervision3d-training-w-john-grden/#comments</comments>
		<pubDate>Mon, 05 May 2008 21:12:35 +0000</pubDate>
		<dc:creator>brian.leroux</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[air]]></category>

		<category><![CDATA[flash]]></category>

		<category><![CDATA[flex]]></category>

		<category><![CDATA[papervision3d]]></category>

		<guid isPermaLink="false">http://blogs.nitobi.com/brian/?p=28</guid>
		<description><![CDATA[This past weekend James and I had the pleasure of taking in some Papervision3D training. 
Papervision3D, for the uninitiated, is a full fledged 3D engine in ActionScript 3. Its blazing fast and totally sweet.
John Grden is a great teacher and, as a result, the course was very approachable for programmer and designer alike. He was [...]]]></description>
			<content:encoded><![CDATA[<p>This past weekend James and I had the pleasure of taking in some <a href="http://www.richmediainstitute.com/training/papervision_chi/">Papervision3D training</a>. </p>
<p><a href="http://www.papervision3d.org/">Papervision3D</a>, for the uninitiated, is a full fledged 3D engine in ActionScript 3. Its blazing fast and totally sweet.</p>
<p><a href="http://www.rockonflash.com/blog/">John Grden</a> is a great teacher and, as a result, the course was very approachable for programmer and designer alike. He was careful to ensure everyone was working at the same pace and no one was left behind. His descriptions where clear and whenever in doubt he pointed out additional resources for our own study outside the class. </p>
<p>Day one was high level, API and capability overview. Quick demos of the overall Papervision architecture, history and direction. </p>
<p>Day two was deeper, looking into the more advanced capabilities and getting us to code for ourselves. Animation, interactivity, effects, colladas and performance tuning. I had a little trouble getting Flex Builder to play nice but after some gentle coaxing I was able to create an extremely rudimentary demo, by hand, with no trouble. </p>
<p>Papervision is an impressive platform. The potential for creating an innovative user experience is there from enhancing your existing RIA with some simple effects to full blown game development. Not to mention a 3D AIR application.  I found the API to be very approachable once I understood the concepts behind the library.  </p>
<p>I&#8217;m looking forward to building something a little more substantial with it &#8230; soon! Until then, here&#8217;s some resources:</p>
<p>Main site:<br />
<a href="http://blog.papervision3d.org/">http://blog.papervision3d.org/</a></p>
<p>Documentation:<br />
<a href="http://www.papervision3d.org/docs/as3/">http://www.papervision3d.org/docs/as3/</a></p>
<p>Developers blog:<br />
<a href="http://dev.papervision3d.org/">http://dev.papervision3d.org/</a></p>
<p>Mailing list:<br />
<a href="http://osflash.org/mailman/listinfo/Papervision3D_osflash.org">http://osflash.org/mailman/listinfo/Papervision3D_osflash.org</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.nitobi.com/brian/2008/05/05/papervision3d-training-w-john-grden/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ruby case statements in ERB</title>
		<link>http://blogs.nitobi.com/brian/2008/03/14/ruby-case-statements-in-erb/</link>
		<comments>http://blogs.nitobi.com/brian/2008/03/14/ruby-case-statements-in-erb/#comments</comments>
		<pubDate>Fri, 14 Mar 2008 21:29:37 +0000</pubDate>
		<dc:creator>brian.leroux</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blogs.nitobi.com/brian/?p=27</guid>
		<description><![CDATA[Fail spectacularly if you happen to indent incorrectly (but not intuitively). Thankfully, Jamis Buck points out a simple solution on the Ruby mailing list:

   
      one
   
      two
   
      something else
   

Thank [...]]]></description>
			<content:encoded><![CDATA[<p>Fail spectacularly if you happen to indent incorrectly (but not intuitively). Thankfully, <a href="http://groups.google.com/group/comp.lang.ruby/browse_thread/thread/c2b9f3619d5afbc0">Jamis Buck</a> points out a simple solution on the Ruby mailing list:</p>
<p><code><br />
   <% case number<br />
        when 1 %><br />
      one<br />
   <%   when 2 %><br />
      two<br />
   <%   else %><br />
      something else<br />
   <% end %><br />
</code></p>
<p>Thank you Jamis!</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.nitobi.com/brian/2008/03/14/ruby-case-statements-in-erb/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ruby recognized</title>
		<link>http://blogs.nitobi.com/brian/2008/03/10/ruby-recognized/</link>
		<comments>http://blogs.nitobi.com/brian/2008/03/10/ruby-recognized/#comments</comments>
		<pubDate>Mon, 10 Mar 2008 19:35:09 +0000</pubDate>
		<dc:creator>brian.leroux</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[IronRuby]]></category>

		<category><![CDATA[JRuby]]></category>

		<category><![CDATA[java]]></category>

		<category><![CDATA[nitobi]]></category>

		<category><![CDATA[rails]]></category>

		<category><![CDATA[ror]]></category>

		<category><![CDATA[ruby]]></category>

		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://blogs.nitobi.com/brian/?p=25</guid>
		<description><![CDATA[Each year O&#8217;Reilly publishes on their blog a State of the Computer Book Market analysis. It is an excellent indicator of computer programming language trends. Geeks love their books and programming geeks adorn their desks with as many reference books as possible. Despite living in a hyper connected world we cannot risk even one moment [...]]]></description>
			<content:encoded><![CDATA[<p>Each year <a href="http://oreilly.com">O&#8217;Reilly</a> publishes on their blog a <a href="http://radar.oreilly.com/archives/2008/03/state-of-the-computer-book-mar-23.html">State of the Computer Book Market</a> analysis. It is an excellent indicator of computer programming language trends. Geeks love their books and <em>programming geeks</em> adorn their desks with as many reference books as possible. Despite living in a hyper connected world we cannot risk even one moment without access to the more obscure and arcane intricacies of our chosen languages and toolsets. </p>
<p>And Ruby is cleaning up: officially recognized as a &#8220;Mid-Major Programming Language&#8221;. And in good company too with Visual Basic and ActionScript. </p>
<p>Perhaps its the growing body of knowledge or perhaps its just the beauty and simplicity of the language itself. Probably a little bit of both. Its nice to see such a fun and rewarding environment growing into the hearts of the mainstream.  We love Ruby here at Nitobi and we have grown a good number of Ruby projects and expertise. With Java and, soon, .NET support we&#8217;re looking forward to bringing Ruby to even more places. And adding more books to our shelves!</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.nitobi.com/brian/2008/03/10/ruby-recognized/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Tab sweeping</title>
		<link>http://blogs.nitobi.com/brian/2008/02/08/tab-sweeping/</link>
		<comments>http://blogs.nitobi.com/brian/2008/02/08/tab-sweeping/#comments</comments>
		<pubDate>Sat, 09 Feb 2008 00:32:45 +0000</pubDate>
		<dc:creator>brian.leroux</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blogs.nitobi.com/brian/?p=24</guid>
		<description><![CDATA[Ever since Firefox introduced tabbed browsing and session saver kept things alive after crashing, surfers everywhere use the tabs to store the sites they&#8217;re interested in and want to take a closer look at &#8212; but aren&#8217;t going to bookmark &#8212; at least not yet. 
In the &#8220;Getting Things Done&#8221; philosophy we should always Do, [...]]]></description>
			<content:encoded><![CDATA[<p>Ever since Firefox introduced tabbed browsing and session saver kept things alive after crashing, surfers everywhere use the tabs to store the sites they&#8217;re interested in and want to take a closer look at &#8212; but aren&#8217;t going to bookmark &#8212; at least not yet. </p>
<p>In the &#8220;Getting Things Done&#8221; philosophy we should always Do, Delegate or Defer any action item immediately to stay on task, be productive and focused. Well, as much of a GTD guy I want to be I always end up with a swath of tabs by Friday. So be it. I&#8217;ll defer them to this blog. </p>
<h2>More REST and Less Code with Merb</h2>
<p>The RESTful way of development is old hat for many Rails guys at this point and the one common complaint is the repetitious boilerplate scaffold code with respond_to for each mime type. <a href="http://merbivore.com">Merb</a> is learning from Rails and, in particular, the <a href="http://merb.rubyforge.org/classes/Merb/ResponderMixin.html">Merb Responder</a> and &#8220;provides&#8221; inteface abstracts these idioms from the controller cleaning things up. I love it.</p>
<h2>Flash based PDF viewer</h2>
<p>Viewing PDF documents isn&#8217;t too bad but if you can avoid the jarring effect of the loading dialogue and provide a slicker web based interface then why not. <a href="http://issuu.com/">Check out Issuu</a> for their inspired user experience that is web based and by far one of the best viewers for PDF I&#8217;ve come across.</p>
<h2>RESTful Authentication: The Definitive Guide</h2>
<p>Not only authentication but authorization with roles and permissions and, possibly the kitchen sink too. <a href="http://www.railsforum.com/viewtopic.php?id=14216">This is the most comprehensive guide I&#8217;ve seen to the common pattern of user accounts in a web based software system.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.nitobi.com/brian/2008/02/08/tab-sweeping/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ajax and Beer 2.0</title>
		<link>http://blogs.nitobi.com/brian/2008/02/06/ajax-and-beer-20-2/</link>
		<comments>http://blogs.nitobi.com/brian/2008/02/06/ajax-and-beer-20-2/#comments</comments>
		<pubDate>Wed, 06 Feb 2008 23:48:59 +0000</pubDate>
		<dc:creator>brian.leroux</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blogs.nitobi.com/brian/?p=23</guid>
		<description><![CDATA[Tonight its on, like Megatron, another installment of the formidable ]]></description>
			<content:encoded><![CDATA[<p>Tonight its on, like Megatron, another installment of the formidable <a href="http://upcoming.yahoo.com/event/398866/"Ajax and Beer</a> meetup. Now with more beer!</p>
<p><img src="http://farm3.static.flickr.com/2279/2246829683_27dbdd1cd0_m.jpg" style="float:right" /></p>
<p>If that isn&#8217;t enough, you find myself and other Nitobians out tomorrow night at <a href="http://upcoming.yahoo.com/event/414907/">DemoCamp Vancouver</a>. Do we have something to demo? Come and find out. </p>
<p>If demos and presentations aren&#8217;t your thing then do not despair, my hacker friends, this Sat we&#8217;re hosting <a href="http://upcoming.yahoo.com/event/415237/">Nitobi Hack Day 2.0</a>. We have beer. We have shwag. We have giant sandwich. Join us in capturing the elusive <a href="http://xkcd.com/323/">Balmer peak</a> and score some free stuff. </p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.nitobi.com/brian/2008/02/06/ajax-and-beer-20-2/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Super fast full text search on Rails with Sphinx and Ultrasphinx</title>
		<link>http://blogs.nitobi.com/brian/2008/01/30/super-fast-full-text-search-on-rails-with-sphinx-and-ultrasphinx/</link>
		<comments>http://blogs.nitobi.com/brian/2008/01/30/super-fast-full-text-search-on-rails-with-sphinx-and-ultrasphinx/#comments</comments>
		<pubDate>Wed, 30 Jan 2008 19:37:01 +0000</pubDate>
		<dc:creator>brian.leroux</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blogs.nitobi.com/brian/?p=22</guid>
		<description><![CDATA[Full text search is difficult, I mean really hard to do right, with good relevance, filterable, fast querying and indexing. Searching is just not something that any business should be trying to solve as a core objective unless they are planning to taking on the Google&#8230; or they have reams of unstructured data in weird [...]]]></description>
			<content:encoded><![CDATA[<p>Full text search is difficult, I mean <strong>really hard</strong> to do right, with good relevance, filterable, fast querying and indexing. Searching is just not something that any business should be trying to solve as a core objective unless they are planning to taking on the Google&#8230; or they have reams of unstructured data in weird silos without any other way of accessing it. Search simply should not replace solid Information Architecture. Content should be inherently findable without an ambiguous search box. The use cases for a powerful full text search are those very rare instances where there is either just a tonne of content that is too difficult to classify or you are interacting with content that has little or no structure, metadata or taxonomy. </p>
<p>And, of course, my next big project, required full text search. Massive amounts of data. Very little structure. Disparate content sources. </p>
<p>In past projects I&#8217;ve had some limited success, and spectacular failure, with <a href="http://ferret.davebalmain.com/api/">Ferret</a>, a Ruby port of the Java based <a href="jakarta.apache.org/lucene/">Lucene</a> search. It was slow, leaked memory and generally caused more pain than it should.</p>
<p>The next full text search project I ran into our client decided that the <a href="http://www.google.com/enterprise/mini/">Google Mini Search Appliance</a> would be the cheapest and quickest the way to go. He was right. It provides an out of the box search interface experience with fantastic relevance. <em>This is mighty Google in a box afterall.</em> The downside? Google Mini has limited customization without cycling through reams of skanky XSL/T. Deep integration is nearly impossible. That&#8217;s an ok tradeoff depending on your goals. For our project it just wouldn&#8217;t work. </p>
<p>My next thought was a project called <a href="http://lucene.apache.org/solr/">Solr</a> which is essentially an abstraction layer on top of (again) <a href="jakarta.apache.org/lucene/">Lucene</a>. Solr has an accompanying Rails plugin called, appropriately, <a href="http://acts-as-solr.rubyforge.org/">acts_as_solr</a>. The only issue, I could immediately see with Solr, is having to maintain a second server instance, which is generally something you&#8217;ll nearly always have to do for full text search. </p>
<p>Then <a href="http://www.sphinxsearch.com/">Sphinx</a> happens to appear on my radar via the excellent <a href="http://groups.google.com/group/rubyonrails-deployment/browse_thread/thread/980fe7cb20cb97dd">Deploying Rails Google Group</a>. To make a long story short here&#8217;s a couple of quotes from <a href="http://brainspl.at/">Ezra Zygmuntowicz</a>, of <a href="http://www.engineyard.com/">Engine Yard</a> fame, who literally wrote the book on <a href="http://www.pragprog.com/titles/fr_deploy">deploying rails applications</a>:</p>
<blockquote><p>
Ferret is unstable in production. Segfaults, corrupted indexes galore. We&#8217;ve switched around 40 clients form ferret to sphinx and solved their problems this way. I will never use ferret again after all the problems I have seen it cause peoples production apps. Plus sphinx can reindex many many times faster then ferret and uses<br />
less cpu and memory as well.
</p></blockquote>
<p>Right about here you can hear me say in a western Canadian accent, &#8220;Sphinx eh..&#8221;. Ezra continues in a later post:</p>
<blockquote><p>
 We have a bunch of clients using solr as well. In general it is more powerful then sphinx but a lot slower to reindex and querey. Also it uses 50 times the memory of sphinx. If you have a box or vm to put SOLR on by itself then it is a good option as well. but if sphinx can do everything you need from a a search indexer then it is a way better option cost wise.
</p></blockquote>
<p>Ok. I was fully intrigued in this crazy <a href="http://www.sphinxsearch.com/">Sphinx</a>. A little searching around I came across <a href="http://www.slashdotdash.net/articles/2007/08/06/rails-searching-with-sphinx">an excellent article from Ben Smith about using Rails with Sphinx</a>. Following his instructions for compiling with support for MySQL 5 installed via Darwin Ports was pretty easy. I chose the <a href="http://blog.evanweaver.com/files/doc/fauna/ultrasphinx/files/README.html">Ultrasphinx</a> plugin which makes working with Sphinx trivial. He mentions <a href="http://www.datanoise.com/articles/2007/3/23/acts_as_sphinx-plugin">acts_as_sphinx</a> and the predictably named <a href="http://seattlerb.rubyforge.org/Sphincter/">Sphincter</a> which I plan to revisit eventually.</p>
<p>So, how is Sphinx with Ultrasphinx? Awesome. I can&#8217;t quite reveal what exactly I&#8217;m working on, but I can say that I had recently downloaded all the page titles from Wikipedia and imported roughly 2.4 million of them into MySQL 5 into three columns. The first column is an integer index. The second is the raw page title. The final column is the page title with formatting removed and underscores replaced by spaces. You know, human readable and all that. </p>
<p>Running a hand rake task for indexing outputs:</p>
<p><code><br />
collected 2409850 docs, 67.8 MB<br />
sorted 8.9 Mhits, 100.0% done<br />
total 2409850 docs, 67771103 bytes<br />
total 34.220 sec, 1980424.75 bytes/sec, 70421.26 docs/sec<br />
</code></p>
<p>Roughly 34 seconds to index 2.4 million records. Not bad. I&#8217;ve had faster times so it might be time for me to reboot the old macbook. But what about actual searching? Consistently under a second. Relevance? Very good. </p>
<p>The verdict: Sphinx rocks.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.nitobi.com/brian/2008/01/30/super-fast-full-text-search-on-rails-with-sphinx-and-ultrasphinx/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
