Web Architecture
My first introduction to programming was C++ on DOS. That lasted about a day. Over time I looked into other languages, but nothing
really interested me until Java and finally HTML/JavaScript. I liked how visual this kind of programming was and was particularly interested
in some of the new features that JavaScript was bringing to the early browsers. One of my first attempts was a site where you could
assemble beads on an interactive canvas authored for Internet Explore 4.0. I finished back in 1999, and I still like to show people how interactive
Web sites could be, even prior to 2000.
Generally, I think Web architecture is made overly complex by underutilizing the processing abilities inherent in the browser. For me,
this all came to a head in late 2000, while I was contracting for an investment bank in New York. They were integrating some of their legacy
systems with a Web-based architecture that included WebLogic, TopLink, Sybase, and some mix of homegrown object-relational mapping
systems. To complicate their technical hurdles, regulations required that the system implement a convoluted security model.
After several months of work we came up with a Web site that was pretty typical at the time: click, refresh,
click, refresh, click...you get the picture. As bad as I thought the user experience was, the bankers were even more upset. They
had been accustomed to using legacy software that was fast and simple. They used controls like tables and trees and grids, not simplistic
buttons and textboxes. In the end, the site was slow, difficult to maintain, and a pain for users.
Aware of the impending meltdown I redesigned the security and login procedures for the site. We kept the business logic on the server, but
moved the interaction logic to the client. Instead of treating the browser like a dumb terminal, we started to leverage it
for logical processing. We had the distinct advantage of being inside the corporate firewall, so we standardized everything on
IE 5--which gave us XML and XMLHTTP. I still remember the meeting where we presented the changes. I was wearing a black turtleneck, because
this was Manhattan and, more importantly, the long hours (and big dinners) left only those wardrobe choices that "stretched". It was
a hit. And for me it was a defining moment in my own archtectural philosophy. We had stumbled upon a design pattern that was easier to develop,
easier to scale, and easier to use.
General Interface
By July 2001, I was sufficiently burned out on New York and left for San Francisco. I had heard there were no
jobs left in the Bay Area due to the dot-com collapse, and that was fine by me. I really was due for a break. But boredom set
in and within a few weeks I was on craigslist looking for work. And somehow I found it. A Web shop in the city had just
landed a contract with a bio-tech down in Mountain View named
Iconix Pharmaceuticals. They were doing amazing work, aggregating
the human genome, the FDA's known compounds database, and numerous in-house experiments. The data was expansive and rich, but the
user interface was...a lot like craigslist. And it was a non-starter for the scientists they were trying to sell it to. Within
three months we had delivered our first working version. It remains, to this day, the most interesting project I've worked on.
For various reasons, we decided that the only way to deliver the user interface on time
was to write a pure, client-side framework that had no server component. We would only integrate with the backend by sending
and receiving XML documents. Our technical integration boiled down to a document contract (Schema). It was all new to us back then,
so we didn't yet realize the pattern we had stumbled upon. Michael Peachey, the manager
on the project, used the term
data schematic, but we all know now that what we were talking about was
Web Services.
It's a much more loosely-coupled approach to Web architectures, and now that Ajax has gained sufficient momentum, it will
continue to feed an industry-wide shift.
Ultimately, the work with Iconix ended, and we found ourselves asking why this design pattern couldn't be applied to any number
of other industries. So we set out to make a product out of the project (doesn't everyone) and came up with
General Interface.
It's a client-side framework written entirely in JavaScript with support for XML and Web Services.
We even have a lightweight development environment created with the framework itself (which I used to create the
alternate craigslist interface).
In that I actually work on the General Interface product, I rarely have time to actually use it. Instead, I'm usually focused on
tracking down bugs or adding enhancements, so it was a welcome opportunity to set aside some time in the evening to actually use the product.
What I really liked about the process was that without any help from craigslist, I was able to create a parallel
interface that compliments (not replaces) their main Web site. In fact, deploying the application was no more complicated than finding
an affordable Web host (I use eapps for $9.99 a month) and uploading some files. I've gone through a couple of iterations reworking the layouts, but it's been
pretty easy, especially given some of the
testing tools that I have at my disposal.
Since General Interface is a purely client-side technology,
the only modification I made to the server was to set up a reverse proxy to handle cross-domain security.
If viewed from a theory of constraints, the pinch point is not my server memory and CPU, but the speed and capacity of the network itself. In fact, I
have an
alternate version of this application that uses
Yahoo! pipes to broker an RSS feed using JSON
in order to completely bypass my server altogether. In the mean time, if you're interested in viewing the applicaton source code (SVN) or downloading your own local copy, it's
hosted on googlecode.
Acknowledgments and Disclaimers.
First, all syndicated content belongs to
craigslist. I'm just improving how users browse the information. Beyond that I'd definitely
like to acknowledge
dojo and the dojo.storage widget that I use to persist user data. Using this control allowed me to implement
session storage (like favorite posts, blocked posts, settings, phone numbers, etc), without requiring a server component. This means
that whatever you choose to save will be persisted on the computer you are using--nowhere else. I also use google maps for the
mapping component and skype for integrated phone service.
As for browser support, General Interface runs on Internet Explorer and Firefox.
I would bet that Safari support is on the way, but various legal constraints forbid me from mentioning it as fact. If you
love some other browser and you somehow feel cheated, feel free to drop me a line and volunteer your services to write
the extensions for your particular browser.
All syndicated content ©craigslist.org (and where otherwise noted). Remaining content ©2007 Luke Birdeau