Webioman was originally intended to be a web I/O manager for programs running on a web-server machine. Actually it became a key experiment in a new “casual” programming initiative that I downplayed in the prior description: “I am building a web portal to run old Fortran programs on the web-server enabling them to interact through websites built with Mason under Apache/ModPerl”. After thinking about it, I realized why nobody answered my posting. So I decided to take off the wraps.
The real purpose of the Webioman experiment is to pave the way for resurrection of a vital technology representing over 170 man years of development, and to start a new-wave initiative of “metaphoric programming” to rejuvenate R&D application development and hence new demand for computers. I have written a new book to promote this initiative, entitled Catch++, Software Overspecialization and the Metaphoric Programming Agenda. An early draft of it is available, as well as a FAQ pertaining to the initiative, which I have been planning for many years.
The old Fortran programs are actually generated demo programs for the book, from the seventh generation of a class of metaphoric 4GLs for a higher-mathematical paradigm of systems optimization modeling, known as “meta-calculus” (AKA synthetic calculus). The first meta calculus optimization languages pioneered the use of AD arithmetic in the Apollo rocket engineering program more than two decades before this pivotal method became popular in academic math.
The fifth and sixth generation languages of this paradigm where called PROSE and TSPROSE. They were the original “extreme programming” languages, and have never been equaled for sophisticated application development simplicity and speed. They were marketed for eight years in the mainframe time-sharing era of the 1970s, with unprecedented success in rapid prototyping of very sophisticated scientific applications. They were mostly used by physics and engineering end-users who were “casual” programmers, not software engineers, but who had to respond to tight deadlines that software engineers could not meet with algorithmic languages.
These languages died out in the 1980’s because AD arithmetic was impractical to port to segmented memory hardware, so they had no marketing platforms during the decade while PC’s were “growing up”. But they represent a new trend of metaphoric programming (e.g. spreadsheets) that “super simplify” application development.
Meta-calculus, in particular, super-simplifies higher math because it is “holonic” (like Ken Wilber’s philosophy). It automatically constructs nested holonic search algorithms for AD-arithmetic-based solution searching as a result of subroutine-like nesting of problem-statement holons (model/solver pairs). Such holonic algorithms would be intractably complex for software engineers to develop in algorithmic languages for the same problems that the meta-calculus language users could easily solve and would not even be aware of all of the complexity under the hood. This is why DATAMATION said in the mid 1970’s that users threw practically unsolvable problems at PROSE that were solved in a matter of hours.
PROSE and TSPROSE were interpretive VM languages like Perl later, so you can imagine the dissing they got from Fortran software engineers of that era, who also dissed Basic as too slow. Yet the Fortran SE’s couldn’t justify their own salaries when forced to compete with TSPROSE. So the reason such languages didn’t survive was not because of economics. It simply was not a level playing field back then.
In 1989, we developed a TSPROSE successor, as a native-code compiler version, called Fortran Calculus (MC7). It was developed for DuPont, to use in converting PROSE software in the design of advanced X-ray systems. As a prototype of the new compiler-form of meta calculus, MC7 was not yet market ready, and was to be superceded by MC8, which was partially developed in 1993, but was shelved for lack of funding.
After many unsuccessful attempts to raise funding, I am now able to devote myself to this effort full time. There are still ex-PROSE users out there, but I am the only developer now. I recently ported the MC7 system to Linux from DOS, and I am ready to lead the new development effort. Webioman is the initial project of several that I plan to initiate. The umbrella project will be called WebLinux, which aims to develop a metaphoric extension to Linux for casual web-application development. Key subprojects are Masonik, which will develop the new Mason-IPC::Run based scripting environment, and Metaphorio, which will develop the metaphoric languages I/O system. See these project descriptions and the White Paper links, to get the whole picture.
I wrote the initial Mason component employing IPC::Open3 and IO::Select to control STDIN, STDOUT (unbuffered) and STDERR, patterned after Perl Cookbook recipe 16.9. I am not an IPC expert, so I took this on as an empirical research programming task. I soon realized that it was not practical to debug this script in the ModPerl-Mason context. So I converted the Webio.mas file to a Perl test script. I soon realized that the Cookbook recipe was totally inadequate. I began evolving the script and the Fortran/C code of the meta-calculus demo program, an interactive pilot ejection simulation program “ejectsim” that shoots trajectories by communicating with the user for input parameters for each trajectory. I was able to get ejectsim running with Open3 by having both the parent and the child send USR1 and USR2 signals to each other. But it was not totally reliable. Sometimes it would block the output from the child, and I was not able to figure out why.
I decided to look for another approach to the problem, and learned about the new IPC::Run API module, developed by Barrie Slaymaker and maintained by Richard Soderberg. I was elated. It seemed to be just what the doctor ordered for my depression. In fact, it only took me one day to get a modified Webio script working for ejectsim.
The next step is to interface with the web using Mason. My initial concept of how this would work was naďve, because a single process wrapper is not feasible with the web-request/response cycle, as pointed out to me by Chris Hutchinson. A Client-pull or server-push dynamic document scheme is necessary. Consequently I am now working on a client-pull refresh scheme using a Postgresql DB instead of signals to interact with the meta calculus demo program.
In this new design, a Mason menu component will launch Webio.html, with user and MC-program name (initially ejectsim) as arguments. Webio.html will create a unique run-ID and will fork-exec Webio.pl, which will use IPC::Run to run the MC program as a grandchild of Webio.html. Next, Webio.html will refresh with a different document (via meta http-equiv or maybe Apache internal-redirect), WebioMon.html, which will become a persistent step-parent by refreshing itself, while monitoring and interpreting the Pg DB content relayed via the Webio.pl stepchild from the MC-program grandchild.
Joseph ‘Bear’ Thames (beartham)
bear@metacalculus.net