September 29, 2006

A random thought

Let's say someone gave a computer scientist a copy of Microsoft Word and asked them to figure out how the grammar correction feature was implemented.

Then two years later he comes back and says that while he hasn't exactly figured out how the feature is implemented, he did figure out something much better. He created with a new programming language, complete with a mathematical proof of Turing-completeness, and it can be used to compute anything that's computable. The grammar feature in Word is simply the result of computation, therefore his new language is capable of implementing the same feature. The rest is just details.

When I hear about string theory research, it sounds like instead of a model of the universe, they've come up with a meta-model that encompasses all possible universes. Which is cool except it doesn't help you in this universe. It's like the researchers have created a new programming language, but have told us nothing interesting about the big program we are already living in.


September 28, 2006

Things I Know

This is list of things I need to need to remember and am likely to forget.

  1. I am forgetful. Perhaps no more than normal, but I forget dates and facts and movie dialogue. I'll forget how I felt about something once, or what it was really like to be somewhere, or why something was successful. And I won't know I forgot it, I won't know I misremember it.
  2. There is no destiny, no fate, no guarantees.
  3. I need rest and time to be with my family.
  4. I need exercise daily. It builds strength and gives me energy and focus.
  5. I am the same. Every feeling, desire, thought or outlook I have is shared by more people than I can possibly know. I am not unusual or alone.
  6. I am different. The combination of my parts is, if not unique, at least rare, as is the sum of my experiences. Most people, at any given time, aren't thinking like I think, aren't feeling what I feel, aren't understanding what I understand. And vice-versa. Failure to recognize this leads to communication problems.
  7. Practice is learning. Practice is learning. Practice is learning. See #1.
  8. I am resilient. Fear injures me far more than failure.
  9. I need periods of quiet restful thought every day, a time to think.
  10. People who really understand me are rare. Care for those relationships and maintain them.
  11. I make mistakes and I am often blind to them.
  12. I am lucky. I am very very lucky.


September 27, 2006

Levitz - CouchDb GUI client

Dan Sickles has created the Levitz utility client for CouchDb. It allows you to create and browse Couch databases and documents.

Here's a screen cap I took:


It's young but already quite useful for peeking into Couch databases. I've got bunch of feature requests I'm going to add to the CouchDb forum.


September 25, 2006

Out of the loop

for (int i = 0; i < ARRAY_SIZE; i++)
  // do something to an array...

You should be ashamed of yourself. That code is a crime against modern C++. Come out with something like that down the ACCU, you could find yourself sentenced to six months mentoring Linus Torvalds through his Visual Basic breakdown.

Out of the (C++) loop - The Register

That article is one of the best descriptions of troubles with the STL I've read. When I use the STL, things seems far more complicated then they should be, the code becomes more verbose and I feel like the actual meaning and intents are obscured, which is ironic because it's suppose to have the opposite effect.

Look at how much typing you have to do just to declare an simple iterator:

std::map<std::string, FoobarClass>::const_iterator itor;

And how exactly is this supposed to be better?

But when I don't use the STL, I feel like I'm doing something wrong somehow because I'm not enjoying benefits of meta programming and templates. Clearly there is something wrong with me.

The way I've heard it, using the STL is supposed to save you all sorts of time while making your code rock solid, whitening your teeth and improving how your odor is perceived by the opposite sex. But all I get is a smug satisfaction that I was at least smart enough to get it to compile and run, and that only lasts about ten minutes. Then the next time I see the code I'm horrified how ugly it looks and I curse myself for picking the STL in the first place.

If only I were somehow smart enough to enjoy all it's great benefits, but apparently I am too dim to find it productive beyond simple containers.


September 23, 2006

LotusScript and CouchDb

For the Domino guys out there, Alan Bell has put on the documentation wiki a nice little LotusScript library for use with CouchDb. Get it here: Getting Started with LotusScript


September 21, 2006

Contribute to CouchDb and show off your AJAX skills

Want to contribute to CouchDb? CouchDb needs a generic GUI utility application that ships with the server, something like Ned's NotesPeek utility for Notes.

I'm thinking a lightweight client that lets you see lists of databases on a server, browse all documents in a database, open and edit documents, and view and page through the computed tables.

As I see it, the client would be ideally written as a AJAX browser application and served up by CouchDb server as a built-in admin/dev tool. Enough CouchDb features are in place that it should be relatively straightforward, but with the current paucity of documentation you'll likely need a bit of help and guidance from me, which I will happily give.

Of course, it's not mandatory it be written as a browser based client, it can be done as a fat client written in VB for instance. (It just that such a client can't be instantly served up by the server.)

This is something that would be *very* useful and I want to ship it with the next version of CouchDb in a couple of weeks. If you are interested contact me.

MSN and Yahoo IM:
AIM: damienkatz


September 20, 2006

CouchDb 0.3.0 released

CouchDb 0.3.0 is now available for download here (Windows only):

GPL licensed source here:

Updated Apache/PHP CouchDb simple discussion demo files:

This version adds complete UTF8 support with locale specific collation. Thank you IBM.

A bunch of new fabric functions: uppercase, lowercase, left, right, leftback, rightback, split/explode, join/implode, length, count, list_trim, trim, full_trim, matches, iserror, number, docfields, getfield. (I need to document them still, for those that can't wait there are functional tests for them all in the source.)

New table GET URL arguments to make "paging" of large tables possible. More info is in the readme.txt.

Also, a lot of the XML tags have been changed, so any code that worked with Alpha2 will need to be updated. The changes are documented in the readme.txt.


September 15, 2006

Ruby on Recliners

Pete Lyons announces the first public release of his CouchDb-Ruby library.

This example from the wiki creates and saves a new document:

doc ='my_doc_id')
doc.category = 'Person' = 'Pete'
doc.dogs = ['TC', 'Ginger', 'Cori']

The rest of the example code is similarly simple and compact. The full introduction here. This is way cool.


September 14, 2006

Fabric now has UTF8 support

I've spent the past couple of days integrating IBM's ICU library into CouchDb, so now Fabric has proper UTF8 and internationalization support. This is a big deal just for the string handling, but as huge bonus the ICU library also gives collation support, Perl compatible regular expressions and mad complete date-time handling and parsing, all of which I plan to integrate. Plus it's cross platform, so I only have to do it once.

And they're just giving it away. IBM I take back all the bad things I said about you. You're good people.


September 13, 2006

Has Joel Spolsky Jumped the Shark?

Jeff Atwood questions Joel Spolsky's sanity in his post Has Joel Spolsky Jumped the Shark?

Jeff writes in his comments:

When was the last time you encountered a problem and thought to yourself, "Mmm. What I really need here is MY VERY OWN PROGRAMMING LANGUAGE."

Heh. As a guy who has created his very own programming language, I also can't help but think Joel's decision is somewhat, ummm, odd.

The language I've created is a small domain specific language, designed for a narrow set of tasks and designed to do them well (querying and manipulating data in a document database). That's a good reason to create a DSL, to solve a problem more simply, cleanly and/or flexibly than other solutions.

Joel says:

Wasabi is a private, in-house language written by one of our best developers that is optimized specifically for developing FogBugz.

And so it appears Joel has perhaps made a DSL. A DSL that is optimized for building web based bug tracking software. That of course is an insane reason to build a DSL. A full featured bug tracking systems is far too complex and diverse to be expressed in some simple "bug tracking web app" language. It needs to be developed primarily in a general purpose program language. Maybe 2 or 3 such languages.

So of course Wasabi isn't a DSL, according to Joel it's super-set of VBScript which obviously makes it a general purpose language. A proprietary, VBScript derivative general purpose programming language. And why did they create the new derivative language? To get lambas and closures?

Creating a new general purpose language is a bad idea unless you want to maintain a programming language and keep it current with libraries and interop and whatnots. Doing that takes lots of work, work you wouldn't have to do if you picked a language maintained by someone else. Which is fine if you are in the programming language business, but it seems odd if you are in the web based bug tracking business.

FogCreek has got the best marketing money can't buy and I'm sure they do quite well. The duplicated effort of maintaining another general purpose programming language might be inconsequential given revenue. But all I can say is the Wasabi looks more like a geek status symbol than a sound business or technical decision.

In 2 years from now when Schnurb Resource Interfaces takes off, are they going to get Schnurb libraries and Schnurb toolkits for free? Or are they going to have to write and debug it all themselves? Oops a few years later Schnurb turned out to be fad, and now its Flabin Driven Networking. I hope they didn't spend too much time trying to shoehorn Schnurb technology into their private proprietary language, but too late to care because customers are clamoring for Flabin data interfaces.

The way Joel tries to make it seem like some brilliant technical and business maneuver is tiresome. It was a decision and it had consequences (positive and negative) that they have made work, that's all. Technical decisions like that end up having so little influence over final success (e.g. team quality is 1000% more important), and Joel is a one man marketing machine and he'll probably sell a zillion copies of FogBugz regardless. And when you are making lots of money, every decision starts to seems like brilliance.


September 12, 2006

Summer 2006 Family Pics

Tabblo: Summer 2006




Summer is over



... See my Tabblo>


September 11, 2006

CouchDb and Ruby

As most of you who read this know, Damien's CouchDb project has gone Alpha. What you might not know, however, is that I've been working on side project to build a Ruby based API for working with Couch's flexible document store.

Pete announces his CouchDb-Ruby project

Pete's also a created a Getting Started with Ruby on the documentation wiki. Great stuff!


Enough with the Test Driven Development

I get up in the morning and have a nice big bowl of oat bran. I go to the bathroom for three and a half hours. I have another bowl of oat bran. I go back in the bathroom for six more hours. All I do is eat and shit, I'm gonna live forever! My colon is the strongest muscle in my body right now. I could pass Elvis through my colon right now.

Denis Leary

This is what it sounds like to me hearing the ravings of TDD fanatics.


September 7, 2006

CouchDb Documentation Wiki and Forum

I've added a bunch of new stuff to the CouchDb Documentation Wiki, and I've also been getting contributions from other folks as well (Lots of good stuff added by Alan Bell).

It uses the MediaWiki software. After trying out several different services, each of which seemed to have its own unique text markup format and other things that weren't quite right, I decided to go with something non-proprietary and familiar. MediaWiki is the same software the Wikipedia uses, and it makes the documentation look awesome. The same exact stuff simply looks much better on than every other wiki I tried. Maybe it's just because I've become accustomed to the Wikipedia style, whatever the reason, I'm very pleased.

It's cheap too. You can get a MediaWiki capable LAMP provider for $5/month and have the full power of the software that also runs the Wikipedia. The install was pretty simple, almost no hiccups (but not for newbies). So yeah, I highly recommend it.

And for the couch-potatoes out there, the CouchDb discussion forum is now live and has an RSS feed (Thanks William). For now it is the best place to post questions, suggestions, bugs, criticisms, etc.


Amazon overpacking madness

Tabblo: Amazon Overpack

I ordered 4 Lego Duplo base plates from Amazon for my daughter. I placed a single order for them all.


These base plates are 15' square, about a quarter inch thick, and weigh no more than a few ounces.

... See my Tabblo>


September 6, 2006

Nice writeup

Harry Fuecks writes about CouchDb:

Working out the last modification time (caching), replication / mirroring, administration and a whole host of other stuff gets much easier to manage, vs. a relational database where what constitutes a complete "document" may be spread across multiple tables. Of course the downside is stuff like searching, sorting and relations gets harder—enter CouchDb where (if I've understood right) you can "compile" tables from the contents of your raw documents using it's fabric formula language. Assuming the processing done to create the tables is reproducible, replicating databases across systems would then "only" be a matter of copying the raw documents.

Bullseye. Harry nails it.

SitePoint Blogs - CouchDb: document oriented persistence


September 3, 2006

CouchDb to do list:

1. Get the documentation into *much* better shape.
2. Start the ball rolling on funding. Know any investors interested in changing the world?
3. Create more examples.
4. Replication engine.
5. Create offline demos.
6. Wow investors.
7. Finalize important api interfaces.
8. Start hammering hard on reliability and regression tests.
9. Begin performance work.
10. Live compaction.
11. Unicode(uft8) support
12. Start beta testing and promotion.
13. Attachment support.
13. Fabric - beefed up text processing features and integrated regexp syntax.
14. Fabric - richer syntax for computed table creation (e.g. specify multiple column indexes)
15. Computed tables - more query options
16. Score funding.
17. Turn this mutha out.

(not listed: 100's of small tedious tasks)


September 1, 2006

CouchDb 0.2.1

I just posted an update to Alpha 2 that fixes an annoying XML processing bug when posting documents. Thanks to Pete Lyons for helping me debug it.

Updated windows executable here:
Updated source here:

Update Again: 0.2.2

Here's another update with more bug fixes and more thanks to Pete Lyons for finding bugs.

Problem with the "SELECT *" Fabric syntax.
Problem with Fabric Formulas that specify no return columns.
Problem with computed tables and identical keys.
Problem deleting a database that hasn't been opened yet.

Updated windows executable here:
Updated source here:


Infogami, you lost me - UPDATE

I've now moved the main project site away from the project wiki and to its own domain. (Actually William Beh did all the work, thanks William). However, I still want a wiki for the documentation. I was going to use the same Infogami hosted one, but it has a few shortcoming:

1. I can't get an RSS feed alerting me of changes/postings.
2. See #1.

This is a big deal. I need at one place to see the activity on the site, not to hunting around randomly. A RSS feed is ideal, but a recent history web page would be good enough too. But they don't even have that. There are some "special pages" in the site preferences: "index", "recent" and "stats". But each one give an error when I go there. Why? I don't know.

So I decided to RTFM, Infogami Help:, and it too is a Wiki. And apparently, it's in a constant state of defacement. Here is the edit history, it's gotten well over an hundred edits in the past 24hrs. All the edits I saw are just a bunch of links to Viagra and poker sites, probably placed by a spam bot. I'm sure somewhere in the edit history is the legitimate documentation home page, but I'm not going to waste a bunch of time fiddling with that. I've got real work to do, such as writing a bunch of documentation of my own.

So I'm going to abandon Infogami and use another Wiki host that's a little more full featured and has, ya know, documentation. Anyone got any recommendations? A pay-only host is fine, so long it's reasonably cheap.


After much unhappiness with every hosted solution I tried (JotSpot, PbWiki, SocialText and of course Infogami), I settled on using MediaWiki (the same software used for Wikipedia).

Coming soon here: