The rant of which I spake

I'll ignore the "Lookatallthebugsin2005" threads for now, I'm still too close to the mothership to comment (although assorted people in the ship may know what I think of that IDE) and instead talk about architecture.

With my release, I've gotten back to thinking of application architectures, and I keep scratching my head. I see people building magnificent castles in the sky (URL ws-omitted to avoid some of the guilty), and I keep thinking of the "architecture" we're all using. Yes, you. Yes, now. Unless you're discovered some new technology that you should share with the world, you're reading this on a computer that has leveraged HTTP, IP and DNS (among others) to get to this screen o' worthless pixels. What do those three (more, if you include my other examples: SMTP, NNTP and IRC) have in common? They're all braindead simple bitflips we've been using forever (rolls eyes).

While some of the concepts of those simple protocols have bubbled up (SOAP as one example), it seems to me that there are messages hidden within these beasts that we could reuse. DNS is (I think) the archtypical example of a hierarchical, shared database. No one machine has all of the data, only the important info - who to ask if it doesn't know. Think about it, this is how humans act with a lot of items as well. I know a little of stuff, but when I hit something I don't know, I hit Google, or World Wide Words, or I ask someone, or forbid, I read a book. They in turn ask others for their information until you reach the source of the data. Smart folk in such a chain then hold on to that info for a while, just in case someone else asks them in the future. Why not use this in an application? Data has a source and a TTL. The #1 database in the world are all those Excel files with "tables" on them. Imagine an uber Sharepoint/desktop search app that you could plug clients into. Then, if I did a search for "Atom" or "RFID tinfoil hat", the query would first ask my computer, then the local set of computers, and finally the world. At each level, the search engine would "learn" which were the best sources for these information and float them. OK, perhaps search is a bad example, as Google and MSN have this covered. Still, I think the hierarchical database + timed caching is an option for many apps that we don't consider.

What of the others? HTTP, SMTP, POP3 and others have "terminal interfaces". I used to amuse myself my telnetting into port 25 on mail servers and sending people mail. My bad habits aside, what about scripting FTP sessions? This is the true power of these interfaces: they are eminently scriptable, and even extensible (HTTP headers as an example). Obviously for the security conscious, some form of encryption is necessary, but what about an API that enabled me to connect, send a number of requests and then perform the batch, receiving the result?

OK, back to work, but at least think about code you use today, the stuff that's been through battle test after battle test and that works, and what you can learn from it. Call them API patterns if it makes you feel more extreme. Me, I'm going back to my cupboard now.

Print | posted on Thursday, November 24, 2005 5:55 AM
Comments have been closed on this topic.