June 28, 2005
I keep thinking of this imaginary guy. He's rushing, rushing very fast to get to a place. He's taking boats and airplanes and trains. Finally he's almost there, and he's rushing in a beat-up car and he's driving really fast and he see what he's rushing for, it's a big battle with hundreds of people fighting. It's like in the movies, with smoke and bombs and bullets whizzing by. Without slowing down he's drives right into the battle, right into the very middle. He slams on the brakes as he hits some battle debris. The car stops and without hesitating he jumps out. Just as he does, a bullet strikes him right through the chest, and he's falls over with a groan and dies. And no one in the battle even notices the guy.
In the comments, Jeff Atwood completely nailed the inspiration for the imaginary guy: Battlefield 2. I can't believe you guessed it! Ironically I downloaded it based on the recommendation on your blog.
Thinking about the imaginary guy always made me laugh (it's kind of Monty Python-esque), but after I wrote it I realized the story could be interpreted differently if I didn't mention it was supposed to be humorous.
BTW, Battlefield 2 is a scourge on humanity, and my productivity more specifically.
June 17, 2005
Lately Firefox has been very crashy for me. In fact, it just crashed while I was writing a blog post about Couch and the optimizations of the view indexing portions of it. It was great post, I think I came up with a breakthough that will earn me millions and end all human suffering, I really can't say for certain. And now its gone, because Firefox crashed on me. dammit :(
Why so crashy? Buggy Extensions? Extensions are a big reason I use Firefox, but whatever the reason I'm kind of disappointed right now.
Just crashed again doing a refresh on a Yahoo page (BTW I'm running Firefox 1.0.4). I think it's the Flashblock extension that's crashing, I checked it's bug page and there are other reports of crashes on Yahoo pages, and those are pretty heavy with Flash ads. No wait, I just realized I've disabled that a couple of days ago and its still crashing. Alrighty then. I'm going to try uninstalling my own self written extension and see if things clear up, there's a good chance it might.
We've all heard of urban legends, those plausible sounding but false stories that circulate so widely on email and news groups, such as the old lady who microwaved her cat or the Nieman-Marcus $250 cookie recipe. There are several web sites devoted to researching and exposing these fake stories. The same sort of thing happens in the world of food and cooking, although on a much smaller scale. This page is my answer.
June 16, 2005
Update: Joel vs. Scoble
And Joel just comes off like an egomaniac in some of his writings. He needs to check himself, he seems convinced he's an über developer, brilliant marketer and visionary. He's definitely a fantastic writer and exploits that to market to geeks, but the guy needs a reality check: his one successful product is bug tracking software, which places him in a long line of guys who've gotten wealthy with a niche product (hey, I wish I was in that line too!). And his swipes at the long development cycles for Windows and SQL Server are sour grapes. I've worked on the guts of a huge, mature, wildy successful software product, it ain't easy moving forward when you've got an installed base of tens of millions of users. I'm honestly amazed at how well MS has done up to this point with Windows, which I'd guess must be over half a billion users and millions of applications built for it.
Don't get me wrong, I think Joel's a very smart guy, but he's no Gates. Slamming the worlds most successful technology company with comparisons about hardware and furniture just makes him look foolish.
I just realized I'm being pretty harsh on Joel. I must apologize.
Building a profitable shrink-wrap software company is a pretty amazing feat and Joel deserves a lot of credit for that. His company isn't some overfunded VC flameout, it's the real deal with satisfied, paying customers. What more could you want? Building a profitable company is a lot harder than it looks and he gives some amazingly lucid advice about software development and the business as a whole. So sorry being so harsh Joel, you didn't deserve it.
June 13, 2005
CouchDb is coming along quite nicely. It is now a replicate-able store, it features atomic updates and is crash only in design. But it's still very much in its infancy and no where near production ready.
CouchDb has a 64 bit file size limit, but currently opening a db means loading a small amount of metadata for all notes into memory, which means it really doesn't scale very impressively for the total number of notes. But that problem will be handled later, and I think it will be possible to make it scale to millions of notes with tweaks to the current architecture. Currently it handles thousands quite easily.
The next big work item is the indexing facility. I'm probably going to use a B+ tree design for the on-disk stuff but I'm still doing research. This is difficult stuff and integral for overall speed and scalability. There are trade-offs for every design, and I really need to think about how CouchDb will be used most.
Also, I'm not sure how to let the user specify the selection criteria and how the values get computed in the indexes. In Lotus Notes, users (developers really) write Formula Language expressions for each column and selection formula, which is an effective and proven way to go about it. But the thing is, I don't have a formula engine to drop into CouchDb, and I really don't feel like writing one. I've already done it for Notes, and it's a lot of work.
So one thing I'm considering a popular scripting language like Python or Ruby, but really general purpose languages might be a bit much. If the language is full featured and imperative, how do restrict what happens while computing column values? One thing that is vital when computing the values is that they be based only on the data and metadata of the note, or in geek terms the code must be referentially transparent with the note as the sole input. This way you get consistent results and the tables can be built incrementally, just like Lotus Notes.
XQuery is also an option (also used in Berkley DB XML and other XML DBs) but that brings other issues into play, such as do I really want this to be an XML database? What about all the complexity that might bring into it for the developer who's using CouchDb? I prefer the relative simplicity of the name-value pair that's used in Lotus Notes and I think that's an ideal way to go about it. However, XQuery is a standard and there's more likely to be a drop-in engine I can use. And really, XQuery is designed for just such things, but I don't like it because I want things as simple as possible.
Anyway, the query language/engine portion is something that actually can be pluggable, so I don't have to make that decision soon anyway. So I'm going to move ahead with the core indexing stuff and write the table selection and column code in C++ for testing purposes.
One of these days I'm going to create a proper document that really explains CouchDb in a more comprehensive and understandable fashion. But that won't happen until I actually get the whole architecture nailed down. Hopefully that will be soon.
As always, feedback is much appreciated. (oops, ironically comments were off, fixed now)
A partially written entry about my CouchDb project has escaped into the wild. If you are using an RSS aggregator, you might see it. If not, don't worry, the completed entry is coming soon.
Think your house is cluttered?
Think again. Crazy eBay mom
June 8, 2005
Vader on Wheel of Fortune
June 7, 2005
The American Taliban
"When science and the Bible differ, science has obviously misinterpreted its data."
Lots more hilarity here. I included this one because the guy reminds me of the dad in Teen Wolf. Remember that scene?