Friday, October 31, 2008

Getting one of the Zens of Lisp

It's odd, I've always admired, and been scared of, lisp. It's one of those languages that everyone always talks about emotionally. There are the zealots, preaching macros and homoiconic data / code representation, and there are the rest who pick on it's parenthetically obtuse nature.

I think I am starting to understand why Lisp's macro system is such a big thing. The amusing thing is that I'm not using Lisp to do it - I'm using a code generator to write a code generator from a hand designed data language that looks suspiciously like JSON. But it's a tad more prescriptive than JSON. Honest.

I'm finally getting the religion on capturing requirements in computable format. Clients always change one of two things - the original spec, or how they want the whole product to look. The first requires only that the requirements be updated, while the later requires that the generator be updated. In neither case is a bulk change to the whole code base required.

Finally, the project implementation can be correctly factored. I like it, a lot.

Wednesday, October 29, 2008

Constraints

The current webapp designs use a layered model, like all things in computer science. Each layer has it's primary concerns, the database layer is concerned with persistance, the client layer with presentation, the middle layer with everything else. The problem with this design is that abstractions leak, and constraints of each layer are visible in other layers.

My belief is that the correct way to engineer a webapp is to acknowledge the constraints of each part. The disks can deal with about 100 seeks per second per spindle, give or take. The channel between the web browser and the web app is high latency. And the most important is that any webapp design that requires disk seeks on either queries or updates is inherently DOSable.

This leads me towards a asynchronously updating network design, wherein browsers notify the webapp of changes, the webapp responds with changes it has seen, and the webapp streams updated state to disk. Think of a spider with it's eight legs spread on different strands, listening to it's web. The trick is going to be generating consistent code across the various nodes, the html, the javascript, the concurrent server code, the reporting code.
A new place to rant and ramble, a new face to see the world with, a new time to create new realities. As they say, growth is change, and change involves letting things go. 

And with this, I start anew.