``Why Unix commands, CGI and the Shell ?``. This is probably the first question one would ask. The short answer might be: ``because I like them''.
A lengthier explanation is that I like simple and effective things; it may sound old-fashioned to talk about CGI and shell scripts in these days of Java, C# and SOAP, but in spite of all the hype that has developed around those novelties, I have so far yet to see something that they do, that cannot be done with a simpler, cheaper and more traditional approach like the classical shell+utilities UNIX cornerstone. The shell and its countless utilities are very effective, readily available and well-understood tools, and because of they widespread usage they are usually more robust and properly debugged than newer environments. But probably the most important benefit is that you can re-use your system-administration knowledge to build fairly complex Web applications, without having to learn "the new hot programming language of the day". After all, this general approach is typical of the UNIX programming environment: getting the most from existing components by making them work together, leveraging on what others have built and thus maximizing productivity. Finally, many useful applications either still lack, or will never provide, the possibility to be accessed over the Web, either through a human-targeted HTML interface or as an application-oriented web service. With a bit of
shell glue, this can be overcome, and a stand-alone system can thus become part of a larger, Web-based distributed application. It is like providing the original appliance with a
Web socket, where others can tap into through the usual and well-understood CGI Application Programming Interface.
Many times, in the past, I have found myself scripting for the Web with the shell and its utilities. Unfortunately, every time I also had to write ad-hoc code around my scripts, to deal with reading, decoding and validating CGI input, providing answers in the form of HTML pages, error-checking and reporting, logging, and the countless other ancillary services that every Web programmer knows well about. CSA was built out of the frustration from having to re-write most of those parts upon any new application that I had to design. Neither I wanted to resort to other "big tools" for Web development, that disregard the shell and that are not built with The UNIX Philosophy in mind.