<?xml version='1.0' encoding='UTF-8'?>
<feed xmlns='http://www.w3.org/2005/Atom'
      xmlns:thr='http://purl.org/syndication/thread/1.0'
      xml:base='http://www.tbray.org/ongoing/ongoing.atom'
      xml:lang='en-us'>
 <title>ongoing</title>
 <id>http://www.tbray.org/ongoing/</id>
 <link href='./' />
 <link rel='self' href='' />
 <link rel='replies'       thr:count='101'       href='/home/tbray.org/www/html/ongoing/comments.atom' />
 <logo>rsslogo.jpg</logo>
 <icon>/favicon.ico</icon>
 <updated>2008-06-16T20:33:01-07:00</updated>
 <author><name>Tim Bray</name></author>
 <subtitle>ongoing fragmented essay by Tim Bray</subtitle>
 <rights>All content written by Tim Bray and photos by Tim Bray Copyright Tim Bray, some rights reserved, see /ongoing/misc/Copyright</rights>
 <generator uri='/misc/Colophon'>Generated from XML source code using Perl, Expat, Emacs, Mysql, Ruby, Java, and ImageMagick.  Industrial-strength technology, baby.</generator>

<entry xml:base='When/200x/2008/06/15/'>
 <title>Cottage Life I: Logs</title>
 <link href='CL-Logs' />
 <link rel='replies'        thr:count='1'        type='application/xhtml+xml'        href='CL-Logs#comments' />
 <id>http://www.tbray.org/ongoing/When/200x/2008/06/15/CL-Logs</id>
 <published>2008-06-15T02:00:00-07:00</published>
 <updated>2008-06-16T00:00:17-07:00</updated>
 <category scheme='http://www.tbray.org/ongoing/What/' term='The World/Cottage Life' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='The World' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Cottage Life' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Arts/Photos/Cameras' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Arts' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Photos' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Cameras' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='The World/Places/Canada/Howe Sound' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Places' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Canada' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Howe Sound' />
 <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>I think that life in general and this space in particular would benefit from more of an outdoor flavor; words and pictures rooted in Nature. Our recent  <a href='/ongoing/When/200x/2008/06/11/Keats-Island'>acquisition of a piece of Keats Island</a>, should make this easier.  Welcome to <a href='/ongoing/What/The%20World/Cottage%20Life/'>Cottage Life</a>. Any piece of Pacific Northwest waterfront is going to include a lot of logs.</div></summary>
<content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
<p>I think that life in general and this space in particular would benefit
from more of an outdoor flavor; words and pictures rooted in Nature.
Our recent 
<a href="/ongoing/When/200x/2008/06/11/Keats-Island">acquisition of a piece of
Keats Island</a>,
should make this easier.  Welcome to
<a href="/ongoing/What/The%20World/Cottage%20Life/">Cottage Life</a>.
Any piece of Pacific Northwest waterfront is going to include a lot of logs.</p>
<p>A few trees naturally fall into the ocean when they die, but most of the
logs that drift up on our beach represent little errors and omissions in the
logging industry.  Time was, you could make a living scooping these up
and selling them back to the foresters; there was even
<a href="http://en.wikipedia.org/wiki/The_Beachcombers">a TV series about
it</a>.</p>
<img src="PS081037.png" alt="Log on the northern tip of Keats Island, BC" />
<div class="caption"><p>I believe that the rock holding the log up represents
the extreme northernmost point of Keats Island.</p></div>
<p>Here’s a close-up of another; they become more visually interesting as they
spend time alternating between salt water and rocky beaches.  I was walking
along this one and was struck by the extreme whiteness of the exposed wood.
I wonder how long it took?</p>
<img src="PS081035.png" alt="Drift-log, weathered white" />
<p>Photo-geek note: we were on the island for five hours Saturday and I never
felt even the slightest temptation to take the
<a href="/ongoing/When/200x/2007/05/24/Pentax-SMC-DA-21mm">wide-angle</a>
prime lens off the camera.</p>
</div></content></entry>

<entry xml:base='When/200x/2008/06/15/'>
 <title>Deletionist Morons</title>
 <link href='Deletionist-Morons' />
 <link rel='replies'        thr:count='23'        type='application/xhtml+xml'        href='Deletionist-Morons#comments' />
 <id>http://www.tbray.org/ongoing/When/200x/2008/06/15/Deletionist-Morons</id>
 <published>2008-06-15T02:00:00-07:00</published>
 <updated>2008-06-15T14:34:36-07:00</updated>
 <category scheme='http://www.tbray.org/ongoing/What/' term='Technology/Publishing/Reference' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Technology' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Publishing' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Reference' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='The World/Life Online' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='The World' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Life Online' />
 <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>For a nice safe NPOV (&#x201c;Neutral Point of View&#x201d;) discussion of the issues, see <a href='http://en.wikipedia.org/wiki/Deletionism'>Deletionism and inclusionism in Wikipedia</a>.  My experience, which isn&#x2019;t NPOV at all, is that Deletionists are knuckle-dragging droolers, walking vacant spaces, and as a side-effect generally, well, what&#x2019;s the word I&#x2019;m looking for?  &#x201c;Wrong.&#x201d;</div></summary>
<content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
<p>For a nice safe NPOV (“Neutral Point of View”) discussion of the issues,
see
<a href="http://en.wikipedia.org/wiki/Deletionism">Deletionism and
inclusionism in Wikipedia</a>.  My experience, which isn’t NPOV at all, is
that Deletionists are knuckle-dragging droolers, walking vacant spaces, and as
a side-effect generally, well, what’s the word I’m looking for?  “Wrong.”</p>
<p>What got me involved was word that the Deletionist undead were shambling
in the direction of
<a href="http://en.wikipedia.org/wiki/Why_the_lucky_stiff">_why’s entry</a>.
Oh, and by the way, apparently it’s somehow
<a href="http://en.wikipedia.org/wiki/Wikipedia:Canvassing">uncool</a> that I
entered
<a href="http://en.wikipedia.org/wiki/Wikipedia:Articles_for_deletion/Why_the_lucky_stiff_%282nd_nomination%29">the
debate</a> because I heard about it somewhere.</p>
<p>This one is obvious;
<a href="http://whytheluckystiff.net/">_why</a> is one of the handful of
people who constitute the public face of Ruby.  Some of his published code
snippets make shivers run up and down my spine.   Several of his
libraries—most notably, I suppose,
<a href="http://code.whytheluckystiff.net/hpricot/">Hpricot</a>—are very
widely used.  He’s written a
<a href="http://poignantguide.net/ruby/">popular online book</a>.
I’ve never met him but would very much like to.</p>
<p>Yes, he’s eccentric.  Yes, he conceals his real name. Yes, he
would almost certainly be happier if the entry were removed.  So what?
Wikipedia without that entry would be
less accurate, less complete, and less useful.</p>
<p>In this particular case, the arguments from the deletionists are
jargon-laden (hint: <em>real</em> experts use language that the
people they’re talking to can understand), and either stupid or vacuous.
Which is entirely consistent with my experience.</p>
<p>Are the deletionists simply, as it seems, reveling in their own
inadequacies?  This came up on Twitter last night and Jeff Atwood
<a href="http://twitter.com/codinghorror/statuses/835112269">put it well</a>:
“The fatal flaw of deletionism is the mindset of deciding what someone else
<em>should</em> find interesting.”  Jeepers, what kind of impoverished soul
does it take to delight in removing accurate and potentially-useful
information from the permanent record based on the subjective and silly notion
of “Notability”?</p>
<p>A little thought-experiment is in order: What harm would ensue were
Wikipedia to contain an accurate if slightly boring entry on someone who was
just an ordinary person and entirely fame-free?  Well, Wikipedia’s
“encyclopedia-ness” might be impaired... but I thought the purpose of
Wikipedia was to serve the Net’s users, not worry about how closely it adheres
to the traditional frameworks of the reference publishing industry?</p>
<p>I suggest the deletionist wankers go and cluster around an alternate online
reference tome which has articles only about God, Immanuel Kant, and Britney
Spears.  Notability is not in question, so they should be happy.</p>
</div></content></entry>

<entry xml:base='When/200x/2008/06/13/'>
 <title>Not Much</title>
 <link href='Not-Much' />
 <link rel='replies'        thr:count='1'        type='application/xhtml+xml'        href='Not-Much#comments' />
 <id>http://www.tbray.org/ongoing/When/200x/2008/06/13/Not-Much</id>
 <published>2008-06-13T02:00:00-07:00</published>
 <updated>2008-06-13T00:32:18-07:00</updated>
 <category scheme='http://www.tbray.org/ongoing/What/' term='Arts/Photos' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Arts' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Photos' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='The World/Places/Vancouver' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='The World' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Places' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Vancouver' />
 <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>Two photos of not much in particular, but with explanations.</div></summary>
<content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
<p>Two photos of not much in particular, but with explanations.</p>
<p>Explanation:
<a href="http://www.laurenwood.org/anyway/2008/06/09/girls-and-trucks/">Girls
and Trucks</a>.</p>
<img src="PS080961.png" alt="Stroller full of toy cars and trucks" />
<p>This is another part of Main Street, which is partly explained in the first
paragraph of
<a href="/ongoing/When/200x/2008/06/11/On-Main">Main Art</a>.</p>
<img src="R0010529.png" alt="Exposed building side on Main Street, Vancouver" />
<p>I tried this last one in black and white, and it looked sort of stark and
strong and lovely, but then I turned the colour back on and liked it better.
I guess I’ll never be a Real Photographer.</p>
</div></content></entry>

<entry xml:base='When/200x/2008/06/11/'>
 <title>Main Art</title>
 <link href='On-Main' />
 <link rel='replies'        thr:count='5'        type='application/xhtml+xml'        href='On-Main#comments' />
 <id>http://www.tbray.org/ongoing/When/200x/2008/06/11/On-Main</id>
 <published>2008-06-11T02:00:00-07:00</published>
 <updated>2008-06-11T17:19:10-07:00</updated>
 <category scheme='http://www.tbray.org/ongoing/What/' term='Arts/Photos' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Arts' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Photos' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Arts/Visual' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Visual' />
 <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>Our house is near, and my office on, <a href='http://en.wikipedia.org/wiki/Main_Street_%28Vancouver%29'>Main Street</a>, which despite its name is not, nor has it ever been, the main street of anything.  These days &#x201c;The Main&#x201d; is starting to be hip and fashionable, but the process is hampered by the fact that the buildings are, on average, old, and mostly weren&#x2019;t very good when they were built.  So it was kind of nice when some street art popped up on one that I walk by every day.</div></summary>
<content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
<p>Our house is near, and my office on,
<a href="http://en.wikipedia.org/wiki/Main_Street_%28Vancouver%29">Main
Street</a>, which despite its name is not, nor has it ever been, the main
street of anything.  These days “The Main” is
starting to be hip and fashionable, but the process is hampered
by the fact that the buildings are, on average, old, and mostly weren’t very
good when they were built.  So it was kind of nice when some street art popped
up on one that I walk by every day.</p>
<img src="R0010514.png" alt="Street art on Vancouver’s Main Street" />
<img src="R0010515.png" alt="Street art on Vancouver’s Main Street" />
<p>It’s nice that somebody goes to the effort to do this when the results are
so ephemeral.  Whoever you are, thank you.</p>
</div></content></entry>

<entry xml:base='When/200x/2008/06/11/'>
 <title>Cottagers!</title>
 <link href='Keats-Island' />
 <link rel='replies'        thr:count='14'        type='application/xhtml+xml'        href='Keats-Island#comments' />
 <id>http://www.tbray.org/ongoing/When/200x/2008/06/11/Keats-Island</id>
 <published>2008-06-11T02:00:00-07:00</published>
 <updated>2008-06-11T00:39:53-07:00</updated>
 <category scheme='http://www.tbray.org/ongoing/What/' term='Arts/Photos' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Arts' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Photos' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='The World/Places/Canada/Howe Sound' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='The World' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Places' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Canada' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Howe Sound' />
 <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>Now we&#x2019;re real Canadians. As of June 11th, Lauren and I own a cottage on Keats Island (<a href='http://en.wikipedia.org/wiki/Keats_Island%2C_British_Columbia'>Wikipedia</a>, <a href='http://maps.google.com/?ll=49.403154,-123.461266&amp;spn=0.120418,0.221443&amp;z=12'>map</a>, <a href='http://www.keatsisland.net/'>keatsisland.net</a>). The consequences include a sudden interest in remote-area Internet options.</div></summary>
<content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
<p>Now we’re real Canadians.
As of June 11th, Lauren and I own a cottage on
Keats Island (<a href="http://en.wikipedia.org/wiki/Keats_Island%2C_British_Columbia">Wikipedia</a>,
<a href="http://maps.google.com/?ll=49.403154,-123.461266&amp;spn=0.120418,0.221443&amp;z=12">map</a>,
<a href="http://www.keatsisland.net/">keatsisland.net</a>).
The consequences include a sudden interest in remote-area
Internet options.</p>
<p>For context on the neighborhood, Canadian cottage culture, and pretty pix,
check out <a href="/ongoing/When/200x/2008/01/22/Howe-Sound">Howe Sound
day</a>, which documents a trip we took mostly to look at the property.
That was almost six months ago; time moves slower in cottage country.
The two pictures in that piece identified as being from the north shore of
Keats are taken from the cottage.  Here’s another.</p>
<img src="IMGP7549.png" alt="View from the north shore of Keats Island" />
<h2 id='p-1'>Why?</h2>
<p>When we looked at the place we liked the view, we liked the general setup,
we liked the accessibility from Vancouver, the price seemed OK, and there was
nothing obviously wrong.</p>
<p>While we were over there some of the party had a nap
and I went for a walk in the woods with our son, now eight.</p>
<p>You have to understand that Keats is not a very big island, that the
cottages are lined up along the oceanfront and that behind them the ground
rises steeply into really rough bush.  There were some rough paths through the
bush behind the cottages so I said to the boy “let’s check ’em out.”  We got
maybe a hundred yards down the trail and he was saying “Dad, should we be
here?  Is it safe?  Will we get lost?  I think we should go back.”  I realized
that we were raising a 100% city boy who had probably never been in the woods,
out of sight of human habitation, in his life.  Suddenly the purchase seemed
more attractive.</p>
<h2 id='p-2'>Details</h2>
<p>It’s pretty near the northernmost point of the island.  It has an
address—several of them in fact—but the streets named are purely hypothetical
entries on some decades-old plan and were never built.  If you zoom in close
enough in Google maps you can actually see the place.</p>
<img src="IMGP7517.png" alt="Cottage on Keats Island" />
<p>It’s got electricity and phone, and a very decent well shared with the
other cottagers on that bit of shoreline.  It has 150 feet of Pacific-ocean
waterfront with a “foreshore lease” and
a floating dock in the summer months, which is good because you can’t really
drive to it.  
The house is probably 75 vertical feet above the water on a rocky cliff, so
erosion worry is minimized and the view is good.
There’s a weekend ferry that will drop you off at your own
dock.  There are two bedrooms and reasonably modern appliances.  Plumbing is a
problem.</p>
<h2 id='p-3'>Internet!?!?</h2>
<p>Well, there’d be dial-up access if that were any use.  In the summer, I
look forward to the occasional weekend completely off the grid, but that’s not
very realistic if we wanted to, now and then, spend a week or more.
Suffice it to say that the telco is not interested in extending DSL facilities
to anywhere this remote.</p>
<p>Hmm... there are two companies competing to offer satellite Internet, but
the data rates are pretty ordinary and it’s hundreds and hundreds of dollars to
get installed and set up.  Also, we’re at the north end of the island and
there’s a small mountain in the middle, so I bet we can’t see the
satellite.</p>
<p>We have direct line-of-sight to the “Hope Point Repeater” of the
<a href="http://www.gambierrip.ca/">Gambier Radio Internet Project</a> and its
principal responds to email, so that might work.</p>
<p>We also have line-of-sight to most of
<a href="http://en.wikipedia.org/wiki/Gibsons">Gibsons</a> which means that if
we could find someone there with broadband and an open mind, we could set up a
long-distance WiFi repeater.  Does anyone reading this live in Gibsons?</p>
<h2 id='p-4'>Why Again</h2>
<p>We tell ourselves that it’s a decent investment in times of financial
turmoil, and that it’s for the kids, and those things are mostly true, but
having a place where you can get up early and walk to say good morning to the
ocean before you say anything to anyone else, that’s why really.</p>
</div></content></entry>

<entry xml:base='When/200x/2008/06/10/'>
 <title>RX and 1.9 and Pain</title>
 <link href='RX-Work' />
 <link rel='replies'        thr:count='3'        type='application/xhtml+xml'        href='RX-Work#comments' />
 <id>http://www.tbray.org/ongoing/When/200x/2008/06/10/RX-Work</id>
 <published>2008-06-10T02:00:00-07:00</published>
 <updated>2008-06-10T23:29:20-07:00</updated>
 <category scheme='http://www.tbray.org/ongoing/What/' term='Technology/XML' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Technology' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='XML' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Technology/Ruby' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Ruby' />
 <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>This fragment is mostly a note to myself and placeholder and might prove useful to someone slashing through the XML undergrowth with bleeding-edge Ruby. Briefly: I revived my &#x201c;RX&#x201d; Ruby tokenizer (see <a href='/ongoing/When/200x/2006/11/09/Optimizing-Ruby'>here</a>, <a href='/ongoing/When/200x/2006/11/15/RS-Redux'>here</a>, and <a href='/ongoing/When/200x/2006/11/23/RX-plus-YARV'>here</a>) to contribute to Antonio Cangiano&#x2019;s <a href='http://antoniocangiano.com/2008/06/01/help-me-create-the-ruby-benchmark-suite/'>proposed Ruby benchmark suite</a>, which I think is a Really Good Idea.  I had a bit of pain getting the code to run on  both Ruby 1.8 and 1.9, and then when I tried sanity-checking the output by comparing it to REXML on 1.9, REXML blew chunks.  There are, apparently, <em>issues</em> about REXML and 1.9. Read on for details in the unlikely event that you care about any of this.</div></summary>
<content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
<p>This fragment is mostly a note to myself and placeholder and might prove
useful to someone slashing through the XML undergrowth with bleeding-edge
Ruby.
Briefly: I revived my “RX” Ruby tokenizer (see
<a href="/ongoing/When/200x/2006/11/09/Optimizing-Ruby">here</a>,
<a href="/ongoing/When/200x/2006/11/15/RS-Redux">here</a>, and
<a href="/ongoing/When/200x/2006/11/23/RX-plus-YARV">here</a>) to contribute
to Antonio Cangiano’s
<a href="http://antoniocangiano.com/2008/06/01/help-me-create-the-ruby-benchmark-suite/">proposed
Ruby benchmark suite</a>, which I think is a Really Good Idea.  I had a bit of pain getting the code to run on 
both Ruby 1.8 and 1.9, and then when I tried sanity-checking the output by
comparing it to REXML on 1.9, REXML blew chunks.  There are, apparently,
<em>issues</em> about REXML and 1.9. Read on for details in the
unlikely event that you care about any of this.</p>
<h2 id='p-1'>Benchmarking</h2>
<p>There’s this problem in that there are a lot of plausible-looking
Ruby implementations now
(MRI, YARV, JRuby, Rubinius, IronRuby, MagLev) and it would be nice to compare
performance.  I was talking to some of the implementers about this and someone
(Charles Nutter I think) said “Problem is, there’s this huge gap between
running <code>fib()</code> and running Rails.”
So, for example, how do we find out how fast MagLev will run Rails,
without going through all the pain of making MagLev run Rails?</p>
<p>Antonio Cangiano sensibly proposed
<a href="http://antoniocangiano.com/2008/06/01/help-me-create-the-ruby-benchmark-suite/">Let’s create a Ruby Benchmark Suite</a>;
when Avi Bryant told me he’d tried my RX code on MagLev, it occurred to me
that it might be an interesting benchmark.</p>
<blockquote><p>RX refresher: It’s a pure automaton-based XML tokenizer whose
performance is <em>totally</em> dependent on the efficiency of dereferencing
integer arrays, and it turns out that mainstream Ruby really sucks at
this.</p>
<p>To make it a little more competitive with REXML, the de-facto standard Ruby
parser, I had kludged it all over the place with regex preprocessing to cut
down on the array traffic.</p></blockquote>
<p>So I asked Antonio whether, if I de-optimized RX to make it a pure array
benchmark, would it be interesting for his suite, and he said yes, so I
did.</p>
<h2 id='p-2'>1.8.6 vs. 1.9</h2>
<p>Perhaps the single most visible difference between today’s Ruby and
tomorrow’s is in the low-level string-handling API.  Well, an XML parser
<em>lives</em> entirely right there, so boy did I ever learn all about it.
I had previously converted RX to run on 2006-vintage YARV, but I wanted one
version of the code that would run in both 1.8.6 and 1.9.  Sigh.</p>
<p>Here’s one of the detail issues, to give a feeling for the problems.
Suppose you know that your input stream is in UTF-8 and you’ve read a
buffer-full of data and you want to turn it into Unicode integer characters
for the parser.  The problem is that the buffer might end in the middle of a
multi-byte UTF-8 character.  Easy enough, a glance at the last byte will
diagnose that.  The problem is, how do you pull out the unsigned-integer value
of the last byte of a buffer, without processing through the whole
(potentially large) buffer, with code that runs in both Rubies?</p>
<p>I poked around on IRC and
<a href="http://segment7.net/">Eric Hodel</a> managed to improve on
my original suggestion.  Read it and weep:</p>
<pre><code>  def byte_at(s, i)
    s[i, 1].unpack('C')[0]
  end</code></pre>
<h2 id='p-3'>REXML Ouch</h2>
<p>RX has a primitive unit-test suite; what I do to sanity-check it at a high
level is feed a
nontrivial XML doc to it and REXML and check that they find the same number of
elements, PIs, paragraphs, <code>img</code> elements with a <code>src=</code>
attribute whose value ends in <code>.jpg</code>, and occurrences of the word
“the” in running text.</p>
<p>Well, when I finally got it running in Ruby 1.9, and started the
sanity check, REXML blew up on my document, 2.8 Meg of 
the input to this blog.</p>
<p>With a bit of poking around, I ascertained that:</p>
<ul>
<li><p>REXML blew up differently depending whether I used its stream or DOM
mode.</p></li>
<li><p>In the stream mode, it apparently fell over while trying to handle an
instance of <code>&amp;#xbd;</code>, but I couldn’t replicate the failure with
a small file containing that.</p></li>
<li><p>In the DOM mode, it incorrectly reported an error on a CDATA section
containing an XML declaration and DOCTYPE, but I couldn’t replicate the
failure with a small file containing that.</p></li>
<li><p>I asked Sam Ruby whether I should be surprised, and a glance at his
<a href="http://www.intertwingly.net/blog/2008/01/31/Ruby-CI-Efforts">continuous-integration
setup for 1.9</a> reveals that I shouldn’t, there are lots of tests
failing.</p></li>
<li><p>There is quite a bit of disgruntlement about XML and Ruby right at this
point in time; see
<a href="http://enfranchisedmind.com/blog/2008/05/27/the-status-of-rubys-libxml/">The Status of Ruby’s libxml</a>
and
<a href="http://enfranchisedmind.com/blog/2008/03/24/rexml-dynamic-typing-lose/">My Frustrations with REXML: Ruby’s Standard Library for Reading/Writing XML; or, Ruby’s Problem Is Its Type System, and Don’t Try to Tell Me Otherwise</a>
and
<a href="http://www.rubyflow.com/items/388">Does Ruby's support for XML suck? I need your input</a>.</p></li>
<li><p>The issue is under discussion on the ruby-core mailing list.</p></li>
</ul>
<p>Well, there you go.  By the way, in Ruby 1.9’s favor, it runs the
(simplified de-optimized) RX about three times as fast as 1.8.6.
Any other implementors want a whack at it?</p>
</div></content></entry>

<entry xml:base='When/200x/2008/06/08/'>
 <title>Flamenco Sketches</title>
 <link href='Flamenco-Sketches' />
 <link rel='replies'        thr:count='2'        type='application/xhtml+xml'        href='Flamenco-Sketches#comments' />
 <id>http://www.tbray.org/ongoing/When/200x/2008/06/08/Flamenco-Sketches</id>
 <published>2008-06-08T02:00:00-07:00</published>
 <updated>2008-06-08T23:13:33-07:00</updated>
 <category scheme='http://www.tbray.org/ongoing/What/' term='Arts/Music/Performance' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Arts' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Music' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Performance' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Arts/Photos' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Photos' />
 <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>Photographic sketches, I mean.   Earlier this month, <a href='http://www.xmlgrrl.com/blog/welcome/'>Eve</a> and Eli were up from Seattle to  visit and after dinner, we all dropped by the <a href='http://www.kinocafe.ca/'>Kino Caf&#xe9;</a> to take in the flamenco. It was passionate and sexy and fun.</div></summary>
<content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
<p>Photographic sketches, I mean.  
Earlier this month,
<a href="http://www.xmlgrrl.com/blog/welcome/">Eve</a> and Eli were up from
Seattle to 
visit and after dinner, we all dropped by the
<a href="http://www.kinocafe.ca/">Kino Café</a> to take in the flamenco.
It was passionate and sexy and fun.</p>
<p>There was almost no stage lighting, and what there was in vivid reds and yellows; I pushed the
<a href="/ongoing/When/200x/2008/04/13/K20D">Pentax</a>/<a href="/ongoing/When/200x/2007/11/15/Sigma-30mm-F1-4">Sigma</a>
combo to the max, but it was tough.</p>
<p>There were four performers.  The woman on the left was the flashier dancer,
the white-haired fellow was a fine singer and still had a couple of moves
left, and the guitar sounded as big as an orchestra.</p>
<img src="PS080894.png" alt="Flamenco ensemble at Vancouver’s Kino Café" />
<img src="PS080895.png" alt="Flamenco ensemble at Vancouver’s Kino Café" />
<p>But it was the other woman, something about her face, I just couldn’t take
my eyes off it, beautiful yes, but so alive and engaged and in the moment.</p>
<p>The black-and white was an irritated reaction at my inability to
colour-correct the seriously-unexposed picture, but then I started to like
it.
There are a couple in colour, one of the gentleman performer, and one of the
dance solo.  Not good pictures as such, but quite suggestive of what being
there looked like.</p>
<img src="PS080910.png" alt="Flamenco ensemble at Vancouver’s Kino Café" />
<img src="PS080922.png" alt="Flamenco ensemble at Vancouver’s Kino Café" />
<p>The Kino ain’t fancy at all but it’s nice and friendly and the food and
drink are just fine.</p>
<p>Oh, and <cite>Flamenco Sketches</cite> is the title of a really lovely
tune, in a Spanish feel, on Miles Davis’ epochal
<a href="http://en.wikipedia.org/wiki/Kind_of_Blue">Kind of Blue</a>.</p>
</div></content></entry>

<entry xml:base='When/200x/2008/06/08/'>
 <title>WF2: Early Results</title>
 <link href='WF-Early-Results' />
 <link rel='replies'        thr:count='1'        type='application/xhtml+xml'        href='WF-Early-Results#comments' />
 <id>http://www.tbray.org/ongoing/When/200x/2008/06/08/WF-Early-Results</id>
 <published>2008-06-08T02:00:00-07:00</published>
 <updated>2008-06-08T22:16:29-07:00</updated>
 <category scheme='http://www.tbray.org/ongoing/What/' term='Technology/Concurrency' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Technology' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Concurrency' />
<content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
<p>[This is part of the
<a href="/ongoing/When/200x/2008/05/01/Wide-Finder-2">Wide Finder 2</a>
series.]
The first serious
<a href="http://wikis.sun.com/display/WideFinder/Results">results are in</a>,
and they’re eye-opening.
The naive Ruby approach, remember, burned some 25 hours.  There are now four
other results posted, with elapsed times of 8, 9, 15, and 17 <em>minutes</em>.
The write-ups are already full of surprises, and I’m expecting more.</p>
</div></content></entry>

<entry xml:base='When/200x/2008/05/01/'>
 <title>Wide Finder 2</title>
 <link href='Wide-Finder-2' />
 <link rel='replies'        thr:count='18'        type='application/xhtml+xml'        href='Wide-Finder-2#comments' />
 <id>http://www.tbray.org/ongoing/When/200x/2008/05/01/Wide-Finder-2</id>
 <published>2008-05-01T02:00:00-07:00</published>
 <updated>2008-06-08T22:15:59-07:00</updated>
 <category scheme='http://www.tbray.org/ongoing/What/' term='Technology/Concurrency' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Technology' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Concurrency' />
 <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>Last fall, I ran the <a href='/ongoing/When/200x/2007/09/20/Wide-Finder'>Wide Finder Project</a>. The results were interesting, but incomplete; it was a real shoestring operation.  I think this line of work is interesting, so I&#x2019;m restarting it.  I&#x2019;ve got a new computer and a new dataset, and anyone who&#x2019;s interested can play.</div></summary>
<content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
<p>Last fall, I ran the
<a href="/ongoing/When/200x/2007/09/20/Wide-Finder">Wide Finder Project</a>.
The results were interesting, but incomplete; it was a real shoestring
operation.  I think this line of work is
interesting, so I’m restarting it.  I’ve got a new computer and a new dataset,
and anyone who’s interested can play.</p>
<h2 id='p-8'>The Story Thus Far</h2>
<p>I’ll use this entry as a table-of-contents for the series as it grows.</p>
<ul>
<li><p><a href="/ongoing/When/200x/2008/05/12/WF-Benchmark">The
Benchmark</a>.</p></li>
<li><p><a href="/ongoing/When/200x/2008/05/22/WF-Benchmark-Strawman">Benchmark
Strawman</a>.</p></li>
<li><p><a href="/ongoing/When/200x/2008/05/31/WF-First-Results">First Pathetic
Results</a>.</p></li>
<li><p><a href="/ongoing/When/200x/2008/06/02/WF-Others">People At
Work</a>.</p></li>
<li><p><a href="/ongoing/When/200x/2008/06/05/WF-Start-Me-Up">Start Your
Engines!</a></p></li>
<li><p><a href="/ongoing/When/200x/2008/06/08/WF-Early-Results">Early Results</a>.</p></li>
</ul>
<h2 id='p-4'>The Problem</h2>
<p>The problem is that lots of simple basic data-processing operations, in my
case a simple Ruby script, run like crap on modern many-core processors.
Since the whole world is heading in the slower/many-core direction, this is an
unsatisfactory situation.</p>
<p>If you look at the results from last time, it’s obvious that there are
solutions, but the ones we’ve seen so far impose an awful complexity cost on
the programmer.  The holy grail would be something that maximizes ratio of
performance increase per core over programmer effort.  My view:
Anything that requires more than twice as much source code to take advantage
of many-core is highly suspect.</p>
<h2 id='p-1'>Last Time &amp; This Time</h2>
<p>There were a few problems last time.  First, the disk wasn’t big enough
and the sample data was too small (much smaller than the computer’s memory).
Second, I could never get big Java programs to run properly on that system,
something locked up and went weird.
Finally, when I had trouble compiling other people’s code, I eventually ran
out of patience and gave up.  One consequence is that no C or C++ candidates
ever ran successfully.</p>
<p>This time, we have sample data that’s larger than main memory and we have
our own computer, and I’ll be willing to give anyone who’s seriously
interested their own account to get on and fine-tune their own code.</p>
<h2 id='p-2'>The Set-Up</h2>
<p>This time, the computer is a
<a href="http://www.sun.com/servers/coolthreads/t2000/index.xml">T2000</a>,
with 8 cores and 32 threads.  It’s actually slower (well, fewer cores) than the
semi-pre-production T5120 I was working with last time, but it’s got over 250G
of pretty fast disks, which I’ve built a ZFS pool and one filesystem on.</p>
<p>I’ve also staged all the <span class='o'>ongoing</span> logfiles from
February 2003 to April 2008 there, 45G of data in 218 million lines.</p>
<p>It’s Internet-facing, with ssh access and port 80 open (not that I’m
running a Web server yet).</p>
<h2 id='p-3'>Want to Join In?</h2>
<p>I’ve set up a
<a href="http://wikis.sun.com/display/WideFinder/">WideFinder Project
Wiki</a>.  The details of how to get started are there.
For now, anyone with a wikis.sun.com account can write to it, which I’m
hoping will be an adequate vandalism filter.</p>
<h2 id='p-5'>The First Step</h2>
<p>Before we start coding, we need to agree on
<a href="http://wikis.sun.com/display/WideFinder/The+Benchmark">the
Benchmark</a>; the 13-line Ruby program was an instructive target for Wide
Finder 1, but several people pointed out that this could be done with an
<code>awk</code>/<code>sort</code> one-liner, so something a little more
ambitious might be appropriate.  I’ve made a couple of initial suggestions on
the wiki.</p>
</div></content></entry>

<entry xml:base='When/200x/2008/06/05/'>
 <title>WF2: Start Your Engines!</title>
 <link href='WF-Start-Me-Up' />
 <link rel='replies'        thr:count='8'        type='application/xhtml+xml'        href='WF-Start-Me-Up#comments' />
 <id>http://www.tbray.org/ongoing/When/200x/2008/06/05/WF-Start-Me-Up</id>
 <published>2008-06-05T02:00:00-07:00</published>
 <updated>2008-06-06T00:43:53-07:00</updated>
 <category scheme='http://www.tbray.org/ongoing/What/' term='Technology/Concurrency' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Technology' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Concurrency' />
 <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>[This is part of the <a href='/ongoing/When/200x/2008/05/01/Wide-Finder-2'>Wide Finder 2</a> series.]  I have now done the first &#x201c;official&#x201d; run of the naive Ruby implementation of the benchmark.  There is some discussion of the code <a href='/ongoing/When/200x/2008/05/31/WF-First-Results'>here</a>.  The benchmark is described, and the naive Ruby code provided, <a href='http://wikis.sun.com/display/WideFinder/The+Benchmark'>here</a>. I&#x2019;ve started a results page <a href='http://wikis.sun.com/display/WideFinder/Results'>here</a>. There are already <s>ten</s> eleven other people now with accounts on the Wide Finder machine, and I know there&#x2019;ve been results that are hugely better than this first cut. Read on for a couple of notes on this first run.</div></summary>
<content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
<p>[This is part of the
<a href="/ongoing/When/200x/2008/05/01/Wide-Finder-2">Wide Finder 2</a>
series.] 
I have now done the first “official” run of the naive Ruby implementation
of the benchmark.  There is some discussion of the code
<a href="/ongoing/When/200x/2008/05/31/WF-First-Results">here</a>.  The
benchmark is described, and the naive Ruby code provided,
<a href="http://wikis.sun.com/display/WideFinder/The+Benchmark">here</a>.
I’ve started a results page
<a href="http://wikis.sun.com/display/WideFinder/Results">here</a>.
There are already <s>ten</s> eleven other people now with accounts on the Wide Finder
machine, and I know there’ve been results that are hugely better than this
first cut.
Read on for a couple of notes on this first run.</p>
<p>The combination of using the SPARC-optimized Ruby and eliminating the huge
sort shaved over four hours off the implementation time, but the results are
still horrible: 25:24:41 elapsed time, with zero use of parallelism.
The only thing that’s nice is the size: 78 lines of Ruby.</p>
<p>Can you do better on the time without exploding the code size?</p>
<p>An amusing note on the code.  I needed a method to select the ten highest
values (and corresponding keys) out of the hash table without sorting all of
them.  The code isn’t rocket science, here’s the
skeleton:</p>
<pre><code>class Hash
  def top(howmany)
    ...
  end
end
# ... later on
@clients = {}
...
@clients[client] += 1
...
top_clients = @clients.top(10)</code></pre>
<p>I was showing it to a non-Rubyist and he said “WTF is that <code>class Hash</code>
    stuff?!”  I explained and added, “Hmm, I guess I could have just said 
    <code>def top(hash, howmany)</code>”.
    My questioner rolled his eyes.  He had a point I think; Ruby makes you do
    some odd things.</p>
</div></content></entry>

<entry xml:base='When/200x/2008/06/05/'>
 <title>Everything On-Line?</title>
 <link href='New-Yorker' />
 <link rel='replies'        thr:count='7'        type='application/xhtml+xml'        href='New-Yorker#comments' />
 <id>http://www.tbray.org/ongoing/When/200x/2008/06/05/New-Yorker</id>
 <published>2008-06-05T02:00:00-07:00</published>
 <updated>2008-06-05T22:05:15-07:00</updated>
 <category scheme='http://www.tbray.org/ongoing/What/' term='Business/Publishing' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Business' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Publishing' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='The World/Life Online' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='The World' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Life Online' />
 <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>Recently I read  <a href='http://www.newyorker.com/reporting/2008/06/02/080602fa_fact_wright'>The Rebellion Within</a> by Lawrence Wright, a long, erudite, immensely informative <cite>New Yorker</cite> piece about the internal dynamics of Al-Qaeda and the Muslim Brotherhood and Islamic Jihad: Who <em>are</em> these people, anyhow, where did they come from, and where are they going? I entirely recommend it. There&#x2019;s a problem, though: I read it on-line.</div></summary>
<content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
<p>Recently I read 
<a href="http://www.newyorker.com/reporting/2008/06/02/080602fa_fact_wright">The Rebellion Within</a>
by Lawrence Wright, a long, erudite, immensely informative <cite>New
Yorker</cite> piece about the
internal dynamics of Al-Qaeda and the Muslim Brotherhood and Islamic Jihad:
Who <em>are</em> these people, anyhow, where did they come from, and where are
they going?
I entirely recommend it.
There’s a problem, though: I read it on-line.</p>
<p>A high proportion of my reading time these days, both business and
pleasure, is spent reading the Internet.  But we still subscribe to <cite>The
Economist</cite> and, whenever I’m about to get on a plane, I try to pick up a
copy of the <cite>New Yorker</cite>; its articles are mostly very good, and
usually there are one or two which are long and meaty; just the thing for an
airplane ride.</p>
<p>The problem was, on a recent trip, that I glanced at the cover of the
latest, bought it there at the airport, and discovered only
after I was airborne that the big meaty piece was that radical-Islamist
story.</p>
<p>Lacking alternatives, I read most of it again anyhow once my laptop battery
was juiced out.  The experience, on paper, was immensely better.
This is not to diss the <cite>New Yorker’s</cite> online presentation, 
as good as any there is; the column width is about perfect, and the
cartoons are inlined artfully in a way that doesn’t impede the flow of
reading.</p>
<p>But for now, paper’s just way better for this sort of long-form
piece.  Maybe that’ll change.  I’m not sure what I’m actually going to
<em>do</em> about this; I’ll hardly pass up a juicy link that I have time to
follow just because it’s also on sale in print.</p>
<p>It’s just that there’s part of me that wishes that the online and print worlds
were perhaps a bit more cleanly separated.</p>
</div></content></entry>

<entry xml:base='When/200x/2008/06/04/'>
 <title>San Fran Shadows</title>
 <link href='San-Fran-Shadows' />
 <link rel='replies'        thr:count='2'        type='application/xhtml+xml'        href='San-Fran-Shadows#comments' />
 <id>http://www.tbray.org/ongoing/When/200x/2008/06/04/San-Fran-Shadows</id>
 <published>2008-06-04T02:00:00-07:00</published>
 <updated>2008-06-04T22:23:35-07:00</updated>
 <category scheme='http://www.tbray.org/ongoing/What/' term='The World/Places/San Francisco' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='The World' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Places' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='San Francisco' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Arts/Photos' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Arts' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Photos' />
 <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>Last week I took a brief trip to San Francisco, and managed to escape for a walk.  Lots of buildings had interesting shadows on them.</div></summary>
<content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
<p>Last week I took a brief trip to San Francisco, and managed to escape for a
walk.  Lots of buildings had interesting shadows on them.</p>
<img src="PS080881.png" alt="Shadows on a San Francisco afternoon" />
<img src="PS080886.png" alt="Shadows on a San Francisco afternoon" />
<img src="PS080887.png" alt="Shadows on a San Francisco afternoon" />
<p>The old parts of San Francisco seem to age with grace, by and large.</p>
</div></content></entry>

<entry xml:base='When/200x/2008/06/03/'>
 <title>Not an OS</title>
 <link href='Not-an-OS' />
 <link rel='replies'        thr:count='24'        type='application/xhtml+xml'        href='Not-an-OS#comments' />
 <id>http://www.tbray.org/ongoing/When/200x/2008/06/03/Not-an-OS</id>
 <published>2008-06-03T02:00:00-07:00</published>
 <updated>2008-06-03T21:36:33-07:00</updated>
 <category scheme='http://www.tbray.org/ongoing/What/' term='The World/Life Online' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='The World' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Life Online' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Business/Internet' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Business' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Internet' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Technology/Internet' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Technology' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Technology/Web' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Web' />
 <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>Last Thursday I <a href='http://twitter.com/timbray/statuses/823088211'>tweeted</a>: &#x201c;I strive to maintain an open mind when nontechnical people talk about the &#x2018;Internet OS&#x2019; or &#x2018;Web OS&#x2019;. Sometimes it&#x27;s tough.&#x201d; I got some grumbles by email and I think the subject is worth more discussion.  Let me be more specific: Neither the Internet nor the Web is much like an OS.  And even if it were, that&#x2019;d be the wrong way to think about what&#x2019;s going on right now.</div></summary>
<content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
<p>Last Thursday I
<a href="http://twitter.com/timbray/statuses/823088211">tweeted</a>: “I strive
to maintain an open mind when nontechnical people talk about the ‘Internet OS’
or ‘Web OS’. Sometimes it's tough.” I got some grumbles by email and I think
the subject is worth more discussion.  Let me be more specific: Neither
the Internet nor the Web is much like an OS.  And even if it were, that’d be
the wrong way to think about what’s going on right now.</p>
<p>I’ve had this argument before. In March of 2007, Mike Arrington and I
shared a stage at a startup event on the Sun campus, and talked about “Web
2.0”.  Mike talked about a Web Operating System, I talked about people and
information and business.  Dan Farber
<a href="http://blogs.zdnet.com/BTL/?p=4686">reported ably</a>.
I don’t think either of us convinced each other.</p>
<h2 id='p-1'>I: It’s About People Not Technology</h2>
<p>The “Web OS” meme is harmful because it’s about technology.
But the Internet’s killer app is people, has always been, will always be.
Every single step forward has involved finding new routes and
patterns and tools for people to use
interacting with other people.  No exceptions.</p>
<p>At the level of experience, Web 2.0 is about voices being heard.  It used
to be that there was a sanctified high priesthood that was licensed to
publish: Journalists, novelists, and academics.  Everyone else was an
outsider, relegated to Letters-to-the-Editor or Speakers’ corner.</p>
<p>Nothing can possibly be more important than the experience of tens of
millions of people, formerly outsiders, given a voice and an audience and a
chance to join the global conversation.</p>
<p>This has been <em>technically</em> possible since there was an Internet.
The crucial change was when Dave Winer and a few others proved that personal
micro-publishing was fulfilling and self-supporting, by doing it.</p>
<p>Granted, a majority of people don’t publish—but if the world is even
remotely like the population here at Sun, the knowledge that you’re empowered
to do so is an attitude-changer.</p>
<p>Also granted, a majority of people who do publish don’t find big
audiences.  But that doesn’t matter; as Mena Trott was among the first
to point out, “Publishing to fifteen people is perfectly OK if they’re the
right fifteen people”.</p>
<h2 id='p-1'>II: It’s About Information Not Technology</h2>
<p>Or to use another label, the Long Tail.  We’re in a world where we expect a
significant amount of the information and inspiration and creativity and
criticism and collaboration and stories and pictures and music and movies to
come from the many at the edge, not just the few at the center.
Yes, there will always be a loud-voiced few at the center, but they’re no longer
alone.</p>
<p>The traffic patterns have changed forever and they’re not changing back.
Language and its flows are arguably one of the defining characteristics of
<i>Homo sapiens</i>.  The impact of all this information redirection on who we
are and what we do is central.  To focus on the technology is to miss the
important point.</p>
<h2 id='p-1'>III: It’s About Business Not Technology</h2>
<p>Lots of modern business is all about pumping information.  The classic
example would be finance; banks are giant information pumps with cash
machines at the edges.</p>
<p>Organizations (business, governments, clubs, political parties, religions)
who figure out how to surf the new information flow will succeed and prosper;
those who push back will be swept away.</p>
<p>And it won’t have anything to do with whether anything’s like an OS or
not.</p>
<h2 id='p-2'>IV: Nobody Uses the OS Anyhow</h2>
<p>Suppose the Net or Web were OS-like.  So what?  Nobody programs to one
of those any more.
I bet if I asked a survey of 100 high-level professional developers
what was the last time they actually coded a Unix or Linux or Win32 system
call, I’d get a blank stare.</p>
<p>Everybody I know is, as a matter of principle, working in a higher-level
programming environment that goes to great lengths to abstract away the OS:
Java, Ruby, Apache-project C with APR, you name it.</p>
<h2 id='p-3'>V: It’s Platforms That Matter</h2>
<p>When it comes to technology, what really matters is the platform you use to
build with.  Looking at your site from the outside, it’s not obvious to a
non-expert (and perhaps not to an expert either) whether you built it with PHP
or Rails or Django or JSF or ASP.NET.  </p>
<p>But the choice of platform that you build
with is incredibly important; in fact, most of the interesting new software
innovations in the recent years have been in platform technology that let you
build something good in less time with less pain that’s more maintainable.</p>
<p>The experience of building something with Rails is wildly different from
that of a Java EE wrangler, which is wildly different still from that of
someone in Microsoft-land.  A common “Web OS”?  Don’t see one.</p>
<p>In another sense, it’s reasonable to consider the Web as a platform; as
Dave Winer memorably said “The platform that doesn’t have a vendor.”
From the business and end-user and administrator point-of-view, this kind of
works; but not from the seats where the people who build the
apps sit.</p>
<p>In still another sense, it’s sane to refer to the browser as a platform;
it’s certainly where a lot of code gets built.  But it’s no more an OS than
Gtk or WPF or Aqua is.  It’s closest to the user but it’s a small piece of the
big system.</p>
<p>The closest you’ll ever get to the essence of the Web-itself-as-platform is
in working closely with HTTP and URIs, for example in implementing the Atompub
protocol.  But most developers working with Atompub will just use a handy library that fits into their
Ruby or Java or C# ambiance, hardly even noticing.</p>
<h2 id='p-4'>VI: And Anyhow, It’s Not Like an OS</h2>
<p>The OS is the software that sits between you and the hardware.  In
practice, it offers a set of brutally stupid and complex services for managing
storage and networking and the lowest level of user interaction.
It’s difficult and unpleasant to use.</p>
<p>I’ve used several and even contributed in a small way to one or two.
Neither the Internet nor the Web are anything like one in any important way.
Thank goodness.</p>
</div></content></entry>

<entry xml:base='When/200x/2008/06/02/'>
 <title>WF2: People At Work</title>
 <link href='WF-Others' />
 <link rel='replies'        thr:count='3'        type='application/xhtml+xml'        href='WF-Others#comments' />
 <id>http://www.tbray.org/ongoing/When/200x/2008/06/02/WF-Others</id>
 <published>2008-06-02T02:00:00-07:00</published>
 <updated>2008-06-03T08:16:51-07:00</updated>
 <category scheme='http://www.tbray.org/ongoing/What/' term='Technology/Concurrency' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Technology' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Concurrency' />
 <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>[This is part of the <a href='/ongoing/When/200x/2008/05/01/Wide-Finder-2'>Wide Finder 2</a> series.]  I&#x2019;m happy to report that I&#x2019;ve given out a bunch of accounts on the <a href='http://wikis.sun.com/display/WideFinder/Infrastructure'>Wide Finder 2 machine</a>. I&#x2019;ll aggregate links to others&#x2019; work in this entry.</div></summary>
<content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
<p>[This is part of the
<a href="/ongoing/When/200x/2008/05/01/Wide-Finder-2">Wide Finder 2</a>
series.] 
I’m happy to report that I’ve given out a bunch of accounts on the
<a href="http://wikis.sun.com/display/WideFinder/Infrastructure">Wide Finder
2 machine</a>.
I’ll aggregate links to others’ work in this entry.</p>
<h2 id='p-1'>2008/06/02</h2>
<p>Ray Waldin has a bunch of posts:
<a href="http://blog.waldin.net/2008/05/another-widefinder-in-scala_15.html">WideFinder in Scala</a>,
<a href="http://blog.waldin.net/2008/05/widerfinder.html">WiderFinder</a>,
<a href="http://blog.waldin.net/2008/05/widefinder2-benchmark-in-scala.html">WideFinder 2 Strawman implemented in Scala</a>,
<a href="http://blog.waldin.net/2008/06/multicore-widefinding.html">Multicore
WideFinding</a>, and
<a href="http://blog.waldin.net/2008/06/multicore-sorter.html">Multicore
Sorter</a>.</p>
<p>Alex Morega has
<a href="http://grep.ro/blog/2008/05/wide_finder">Wide Finder</a>,
<a href="http://grep.ro/blog/2008/05/wide_finder_going_parallel">Wide Finder:
Going Parallel</a>, and
<a href="http://grep.ro/blog/2008/05/wide_finder_many_cores">Wide Finder: Many Cores</a>.</p>
<h2 id='p-2'>Did I Miss You?</h2>
<p>If you’re working on this let me know and I’ll keep adding links.</p>
</div></content></entry>

<entry xml:base='When/200x/2008/06/02/'>
 <title>Other Diddleys</title>
 <link href='Other-Diddleys' />
 <link rel='replies'        thr:count='7'        type='application/xhtml+xml'        href='Other-Diddleys#comments' />
 <id>http://www.tbray.org/ongoing/When/200x/2008/06/02/Other-Diddleys</id>
 <published>2008-06-02T02:00:00-07:00</published>
 <updated>2008-06-02T23:08:08-07:00</updated>
 <category scheme='http://www.tbray.org/ongoing/What/' term='Arts/Music' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Arts' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Music' />
 <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>Gosh, <a href='http://en.wikipedia.org/wiki/Bo_Diddley'>Bo Diddley</a>&#x2019;s gone.  Which instantly reaffirmed one Internet lesson: if you want to boost the popularity of your YouTube videos, die.  My two favorites (via Twitter today): <a href='http://youtube.com/watch?v=YVRtQUTd7Gk'>Mona, with Tom Petty</a> (listen to Bo&#x2019;s guitar) and then this <a href='http://www.youtube.com/watch?v=zBAJXyF1HVc'>ancient B&#x26;W TV shoot</a> with a young Bo and lots of screaming Sixties girls. But man, I love that rhythm, and lots of other people have played it well.</div></summary>
<content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
<p>Gosh,
<a href="http://en.wikipedia.org/wiki/Bo_Diddley">Bo Diddley</a>’s gone.  Which
instantly reaffirmed one Internet lesson: if you want to boost the popularity
of your YouTube videos, die.  My two favorites (via Twitter today):
<a href="http://youtube.com/watch?v=YVRtQUTd7Gk">Mona, with Tom Petty</a>
(listen to Bo’s guitar) and then this
<a href="http://www.youtube.com/watch?v=zBAJXyF1HVc">ancient B&amp;W TV
shoot</a> with a young Bo and lots of screaming Sixties girls.
But man, I love that rhythm, and lots of other people have played it well.</p>
<p>I’ve always smiled at
<a href="http://en.wikipedia.org/wiki/George_Thorogood">George Thorogood’s</a>
take on Bo’s
<a href="http://en.wikipedia.org/wiki/Who_Do_You_Love">Who Do You Love?</a>,
but the YouTube pickings are kind of slim;
<a href="http://youtube.com/watch?v=PYmMhnM-y4Q">this</a> isn’t bad though it
falls short of the version on 1978’s <cite>Move It On Over</cite>.  But I
personally think that
<a href="http://en.wikipedia.org/wiki/Ronnie_Hawkins">Ronnie Hawkins</a>
<em>owns</em> that song, and have always loved the
<a href="http://youtube.com/watch?v=dn0SngXfzKk">Last Waltz performance</a>;
for my money, one of Robbie Robertson’s best guitar outings ever.</p>
<p>And then there’s The Clash; around the time of
<a href="http://en.wikipedia.org/wiki/London_Calling">London Calling</a> they
may or may not have been the Best Rock Band in the World, but to me at least,
they were The Only Band That Mattered.</p>
<p>And on <cite>London Calling</cite> there were <em>two</em> bo-diddleys
right after 
each other: <cite>Hateful</cite> and <cite>Rudie Can’t Fail</cite>.  There’s a
lot of Clash on YouTube, and watching some now I’m reminded of how
unbelievably great they were live.  But I can’t find either of those tunes.
(Well, there’s a
<a href="http://www.youtube.com/watch?v=QsZUBpNLGAU">very decent
<cite>Rudie</cite></a> from Joe Strummer and the
Mescaleros).  On the totally-unlikely off-chance that you
like rock but don’t have <cite>London Calling</cite>, drop everything and buy
it now.</p>
<p>Thanks for that rhythm, Bo, and those tunes built around it.
There’ll be someone playing a bo-diddley in a bar somewhere as long as <i>Homo
sapiens</i> draws breath.</p>
</div></content></entry>

<entry xml:base='When/200x/2008/06/02/'>
 <title>Enterprisey Goodness</title>
 <link href='JBI' />
 <link rel='replies'        thr:count='6'        type='application/xhtml+xml'        href='JBI#comments' />
 <id>http://www.tbray.org/ongoing/When/200x/2008/06/02/JBI</id>
 <published>2008-06-02T02:00:00-07:00</published>
 <updated>2008-06-02T12:15:57-07:00</updated>
 <category scheme='http://www.tbray.org/ongoing/What/' term='Technology/Java' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Technology' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Java' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Technology/Web' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Web' />
 <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>I tend to liking simple things, and to suspicion of big &#x201c;enterprisey&#x201d; software frameworks.  I am dimly aware that up in the clouds there are platforms built on platforms built on platforms built on Java, towering edifices where acronyms like &#x201c;JBI&#x201d; and &#x201c;ESB&#x201d; and &#x201c;SCA&#x201d; live.  Except for, I could never figure out what they actually, you know, <em>did</em>.  Let&#x2019;s be honest; the complexity and the high-level arm-waving about &#x201c;Integration&#x201d; scared me away and I never really tried.  Well, I&#x2019;ve stumbled into a closer look and am beginning to think there&#x2019;s some there there.</div></summary>
<content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
<p>I tend to liking simple things, and to suspicion of big “enterprisey”
software frameworks.  I am dimly aware that up in the clouds there are
platforms built on platforms built on platforms built on Java, towering
edifices where acronyms like “JBI” and “ESB” and “SCA” live.  Except for, I
could never figure out what they actually, you know, <em>did</em>.  Let’s be honest;
the complexity and the high-level arm-waving about
“Integration” scared me away and I never really tried.  Well, I’ve stumbled
into a closer look and am beginning to think there’s some there there.</p>
<p>I’ve been talking to
<a href="http://blogs.sun.com/andi/">Andi Egloff</a>, who lives up there 
among the floating acronyms in these enterprisey clouds.  I asked “Well, what
does this software actually <em>do</em>?”  After some talk he said “Let me show
you what we’re working on.”  Showing is so much better than telling.</p>
<p>They’re calling their work-in-progress “Fuji”.
<a href="http://blogs.sun.com/andi/entry/bringing_together_jbi_osgi_and">Here’s
a screencast</a> where they hook together an RSS feed, an XMPP
stream, and a log-file, with an interposing a Ruby filter, using Fuji and a
bit of DSL voodoo.</p>
<p>They’re also thinking of a visual interface;
<a href="http://blogs.sun.com/andi/entry/fuji_gui_sneak_peek_fingers">here’s
the same logic</a>, only with little boxes and arrows instead of DSLs.
Personally I prefer the DSL.</p>
<p>It’s all
<a href="http://blogs.sun.com/andi/entry/why_is_osgi_on_everyone">based on
OSGI</a>, hmmm.</p>
<p>Now, in a world that already has
<a href="http://pipes.yahoo.com/pipes/">Yahoo Pipes</a> and
<a href="/ongoing/When/200x/2008/04/30/PDML-Twitter-Mashup">simple Ruby
POP-to-Twitter mashups</a>, one wonders if you need a big honking Java
howitzer to squish this particular ant.</p>
<p>So I asked Andi that, and he said “Yes, but then with JBI you can also talk
to ESBs and other traditional enterprise integration points”.  Which
I’m not sure that YPipes or little Ruby scripts are built for.  I asked him to
show me that and he said they’re going to.  I’m interested; stay tuned.</p>
</div></content></entry>

<entry xml:base='When/200x/2008/05/31/'>
 <title>WF2: First Pathetic Results</title>
 <link href='WF-First-Results' />
 <link rel='replies'        thr:count='3'        type='application/xhtml+xml'        href='WF-First-Results#comments' />
 <id>http://www.tbray.org/ongoing/When/200x/2008/05/31/WF-First-Results</id>
 <published>2008-05-31T02:00:00-07:00</published>
 <updated>2008-05-31T14:24:46-07:00</updated>
 <category scheme='http://www.tbray.org/ongoing/What/' term='Technology/Concurrency' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Technology' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Concurrency' />
 <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>[This is part of the <a href='/ongoing/When/200x/2008/05/01/Wide-Finder-2'>Wide Finder 2</a> series.]  I made a couple of little changes to the <a href='/ongoing/When/200x/2008/05/22/WF-Benchmark-Strawman'>Strawman Benchmark</a> and let &#x2019;er rip on the big 45Gig data set.  The results were miserable, but instructive.</div></summary>
<content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
<p>[This is part of the
<a href="/ongoing/When/200x/2008/05/01/Wide-Finder-2">Wide Finder 2</a>
series.]  I made a couple of little changes to the
<a href="/ongoing/When/200x/2008/05/22/WF-Benchmark-Strawman">Strawman
Benchmark</a> and let ’er rip on the big 45Gig data set.  The results were
miserable, but instructive.</p>
<h2 id='p-1'>Just How Miserable?</h2>
<p>29:31:30 elapsed, 29:30:52 CPU, i.e. it maxed one of the T2000’s 32 CPUs.
That’s one <em>day</em> plus five hours and change.  Ouch!</p>
<h2 id='p-2'>Small lessons</h2>
<p>First of all, it was just using Ruby-by-default-out-of-the-box.
As
<a href="http://www.tbray.org/ongoing/When/200x/2008/05/22/WF-Benchmark-Strawman#c1211521663.324677">Haik
pointed out</a>, there’s a SPARC-optimized version available from Sun and I’ll
install that.</p>
<p>Second, the code computes the various top-10 lists (hits, bytes, clients)
by storing the numbers in a hash and running <code>Enumerable#sort_by</code>.
It says right in the docs for that function that it’s inefficient.  Still, it
wasn’t too bad for sorting hashes keyed by <span class='o'>ongoing</span>
resources, because there are only a few thousand of those.  
But when it sorted the hash keyed by the hostnames that had fetched resources,
well... it wasn’t pretty.  The <code>sort_by</code> call took
hours.</p>
<p>It was made worse by a programming error on my part; several people pointed
out that one couldn’t diff the program output because if several of the top
entries had the same numeric value, they could show up in arbitrary order.  I
simply changed the code to sort on the value, then the key.  Of course, I
stupidly didn’t take out the old sort, so it ended up sorting twice.</p>
<p>Anyhow, I’ve changed the code to do a single <code>O(N)</code> scan
through the big hashes, rather than sort them.</p>
<h2 id='p-3'>Big Lessons</h2>
<p>The naive Ruby code is making terrible use of the machine.  Over the course
of the run, it uses, on average, 3.2% of the available CPU resources, and 3.8%
of the available memory.</p>
<p>If you look at the
<a href="http://wikis.sun.com/display/WideFinder/Infrastructure">Bonnie
results</a>, this sucker can do simple block I/O at about 150M/second at a
cost of about 75% of one CPU.  So you ought to be able to plow through the
45G dataset in under five minutes, leaving 31 CPUs to do the actual work, even
without fancy <code>mmap()</code> tricks.  I bet somebody will write a WF2
implementation that runs in about five minutes as opposed to 29 hours.</p>
<h2 id='p-4'>Next Steps</h2>
<p>I’m going to re-run the cleaned-up Ruby code with the SPARC-optimized MRI
and propose that as the baseline benchmark for WF2 implementations to beat.
Then the fun should start.</p>
</div></content></entry>

<entry xml:base='When/200x/2008/05/30/'>
 <title>Family Moment</title>
 <link href='Discovery' />
 <link rel='replies'        thr:count='2'        type='application/xhtml+xml'        href='Discovery#comments' />
 <id>http://www.tbray.org/ongoing/When/200x/2008/05/30/Discovery</id>
 <published>2008-05-30T02:00:00-07:00</published>
 <updated>2008-05-30T23:43:51-07:00</updated>
 <category scheme='http://www.tbray.org/ongoing/What/' term='The World/Family' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='The World' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Family' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='The World/Humor' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Humor' />
 <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>The back porch door was open and our adorable little almost-two-year-old, all golden curls and pink dimples, was wandering in and out.  One time as she was coming in, I noticed Marlowe the cat was sort of hovering around her; then the air was full of female shrieks: &#x201c;She&#x2019;s got a <em>dead rat</em>!&#x201d;  And so she did, holding it up all eager to please, while Marlowe looked confused and irritated.  A fair-sized one too, with a good five inches of dangling tail. A few seconds later, she was just as confused and irritated as Marlowe, for the same reason, and the corpse was headed for disposal.</div></summary>
<content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
<p>The back porch door was open and our adorable little almost-two-year-old,
all golden curls and pink dimples, was wandering in and out.  One time as she
was coming in, I noticed Marlowe the cat was sort of hovering around her; then
the air was full of female shrieks: “She’s got a <em>dead rat</em>!”  And so
she did, holding it up all eager to please, while Marlowe looked confused and
irritated.  A fair-sized one too, with a good five inches of dangling tail.
A few seconds later, she was just as confused and irritated as Marlowe,
for the same
reason, and the corpse was headed for disposal.</p>
<p>(Well, yes, we have two healthy cats that go outside, and this is a
waterfront city thus will always have rats, and our cats are well-fed so they
bring their prizes home to the back porch to show off.)</p>
</div></content></entry>

<entry xml:base='When/200x/2008/05/12/'>
 <title>WF2: The Benchmark</title>
 <link href='WF-Benchmark' />
 <link rel='replies'        thr:count='5'        type='application/xhtml+xml'        href='WF-Benchmark#comments' />
 <id>http://www.tbray.org/ongoing/When/200x/2008/05/12/WF-Benchmark</id>
 <published>2008-05-12T02:00:00-07:00</published>
 <updated>2008-05-30T23:19:43-07:00</updated>
 <category scheme='http://www.tbray.org/ongoing/What/' term='Technology/Concurrency' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Technology' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Concurrency' />
 <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>[This is part of the <a href='/ongoing/When/200x/2008/05/01/Wide-Finder-2'>Wide Finder 2</a> series.] A bunch of people have requested the sample data.  Meanwhile, over at <a href='http://wikis.sun.com/display/WideFinder/The+Benchmark'>the wiki</a>, there&#x2019;s a decent discussion going on of what benchmark we should run.</div></summary>
<content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
<p>[This is part of the
<a href="/ongoing/When/200x/2008/05/01/Wide-Finder-2">Wide Finder 2</a>
series.]
A bunch of people have requested the sample
data.  Meanwhile, over at
<a href="http://wikis.sun.com/display/WideFinder/The+Benchmark">the wiki</a>,
there’s a decent discussion going on of what benchmark we should run.</p>
<p>I
particularly liked the comments from
<a href="http://wikis.sun.com/display/WideFinder/The+Benchmark?focusedCommentId=25887354#comment-25887354">MenTaLguY</a>,
<a href="http://wikis.sun.com/display/WideFinder/The+Benchmark?focusedCommentId=25887368#comment-25887368">Preston
Bannister</a>, and
<a href="http://wikis.sun.com/display/WideFinder/The+Benchmark?focusedCommentId=25887443#comment-25887443">Erik
Engbrecht</a>.
(Unfortunately, given the test data we have, I don’t see us being able to follow Erik’s
“non-ASCII” suggestion).</p>
<p>Of the suggestions on offer at the
<a href="http://wikis.sun.com/display/WideFinder/The+Benchmark">benchmark
page</a>, I prefer the last couple.   Session statistics are a little
trickier, and I suspect a bit more resistant to a brute-force Map/Reduce
approach.  And the “normal HTML report” idea is very much in the spirit of
Wide Finder 1, only with a bit more computation involved, perhaps enough to
keep it from being a pure parallel-I/O benchmark.</p>
<p>Your thoughts?  I suppose I’m signed up to build a reference implementation
for verifying output.</p>
</div></content></entry>

<entry xml:base='When/200x/2008/05/22/'>
 <title>WF2: Benchmark Strawman</title>
 <link href='WF-Benchmark-Strawman' />
 <link rel='replies'        thr:count='15'        type='application/xhtml+xml'        href='WF-Benchmark-Strawman#comments' />
 <id>http://www.tbray.org/ongoing/When/200x/2008/05/22/WF-Benchmark-Strawman</id>
 <published>2008-05-22T02:00:00-07:00</published>
 <updated>2008-05-30T23:19:35-07:00</updated>
 <category scheme='http://www.tbray.org/ongoing/What/' term='Technology/Concurrency' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Technology' />
 <category scheme='http://www.tbray.org/ongoing/What/' term='Concurrency' />
<content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
<p>[This is part of the
<a href="/ongoing/When/200x/2008/05/01/Wide-Finder-2">Wide Finder 2</a>
series.]  I’ve just updated the
<a href="http://wikis.sun.com/display/WideFinder/The+Benchmark">Wide Finder
wiki</a> with a straw-man benchmark (see
“Strawman”), with sample Ruby code and output.
Argh... it takes Ruby over 23
seconds to process just 100K lines.  I hear talk of a Solaris/SPARC optimized
version, gotta track that down.  Comments please on the benchmark, then we can
all start bashing our heads against the big file.</p>
</div></content></entry>

</feed>
