Introduction to Groundwork
The motivation for Groundwork stems from the following
observations:
- A lot of non-technical people think of the web as a bunch of static documents
with intelligence attached from behind using some sort of strong magic. These
same people have seen tools like
FrontPage and
Dreamweaver
and assume that
changing the look, feel and layout of a web-based application is probably
as easy as applying one of those tools to it.
- Some IT managers would like to leave both the design and maintenance of
the skin of a web-based application to the marketing department.
Some marketing departments would like to have that kind of control, provided
that their people don't have to do any programming.
- Web-based applications are frequently implemented by designing a skin
with an HTML editor, then somehow adding intelligence to it. When a
different skin, multiple skins, or signifigantly different
intelligence is required, maintenance issues arise.
- Embedded scripting can confound both GUI HTML editors and the person
trying to use one to change the way the page looks. In effect, GUI HTML
editors are often useless after the preliminary skin design of a web-based
application.
- Scripting technologies give way to compiled technologies when performance
becomes critical. For example: an entire applications is written
as a collection of COM objects embedded in HTML with a peppering of
VBScript. In this scenario, the the application was first written
entirely in VBScript and had to be overhauled as traffic to the site
increased.
- Frequently, just as a web-based application is nearing completion, a newly
desired, seemingly trivial feature (such as an unusual date-format conversion)
makes it's way into the design document.
This feature is often either difficult or impossible to implement using the
high-level development tools adequate for the rest of the project, or would
cause the application to perform poorly if it were implemented in such a way.
It therefore requires the developer to dump down to a lower level and sometimes
renders the high-level development environment useless for maintaining that
part of the application from then on.
- Using C++ compatible, object oriented programming to implement the
intelligence of a web-based application ensures that almost anything that can
be done with a computer can be done in the application. Should it become
necessary, even the infamous "bit-twiddling" is possible.
- Using C++ to design the skin of a web-based application is painful
at best and requires both a programmer and recompilation time to modify.
- So far, Java is too heavyweight, buggy and too poorly supported to base
an entire web-based application on; if that application is to be delivered to
the general public.
- Client side plugin technologies are really inextensible.
- People can't stand having to download or install plugins.
- Most web application servers are still too proprietary and inextensible
to be used for all but the most narrowly defined web-based applications.
Given these observations, one conclusion is that an library for developing
high-performance, extensible, open standards compatible web-based applications
capable of supporting multiple skins which can be maintained by a
non-programmer is in order. To that end the groundwork project was
started. Currently groundwork provides the following functionality.
- A C++ class library for writing small, high performance CGI's.
- A CGI class capable of handling multipart form submissions.
- Classes for handling HTML, HTTP, MIME, IP based security, logging, and load balancing.
- Functionality for maintaining separation between the skin(s) of an application and the intelligence of that application.
- A standardized directory structure for groundwork based applications consisting of site, package, app and skin levels.
- A paths class for accessing this directory structure.
- A page class for handling events in skin pages.
- An skin class for handling skin-specific configuration options.
- Compatibility other with C/C++ compatible technologies including database access technologies.
Groundwork provides a strong foundation for building web-based
applications, but there is always room for improvement. Below are some planned
enhancements to groundwork.
- Persistant CGI capabilities.
- Server API compatibility.
- Ports for non-unix based platforms.
- Improvements to the code for increased speed and lower memory consumption.
If you would like to contribute to this project, please contact dmuse@firstworks.com.