mn8 cgi’s and design

Somehow I remembered today about the old cgi days and how arguments where
passed to cgi’s as environment variables. Now I already knew how to make under
bash an mn8 script to be executable, as simple as having an #!/usr/bin/env
mn8
as the first line of the script and making the script executable. BTW
another very simple trick which improves life a great deal is to make a simple
symbolic link from your mn8.sh somewhere in your path like:ln -s
/dev/spacemapper/mn8/mn8.sh /usr/local/bin/mn8
that way from anywhere you
can say mn8 xxxx and voila mn8 works as any executable.

So, back to our track, this week I was playing with Vanilla and noticed that
Vanila is in fact written in Rebol. That gave me the idea that if I can write
bash cgi’s and rebol cgi’s why wouldn’t I be able to write mn8 cgi’s. Quickly I
made a small script, throw-ed it into my cgi-bin directory and pointed my browser
to it. Worked, the first time! Isn’t life wonderfull ?

Cool I could write mn8 cgi’s and use any kind of GET posts. But what
about the POST posts? In the case of GET name/value pairs are sent as url
parameters, but in the case of a POST method the name/value pairs are sent
through the default input stream. But I remembered that in order to make pipes
work with mn8 I check the default input stream at start-up and if I find
something on it I give it as parameter to the script

Exactly! That meant that I can use POST and I will have the parameters in
the argument of the main method. Quickly another script and test. Yep it worked
like magic.

The morale of the story? Good design and model always pays off 😉

There is only one small issue. Every time a script is invoked the Java
machine is started from scratch which is very slow. How could I keep an instance
of an Java VM in memory and convince Apache to use that one to run my
scripts?

BTW, Here it is the test script:

#!/usr/bin/env mn8
$pathInfo from "env:/system/properties/PATH_INFO"
$scriptName from "env:/system/properties/SCRIPT_NAME"
$queryString from "env:/system/properties/QUERY_STRING"
$remoteHost from "env:/system/properties/REMOTE_HOST"
$osName from "env:/system/properties/os.name"
$javaHome from "env:/system/properties/JAVA_HOME"

print "Content-type: text/html\n"
print "<html><title>mn8 CGI Script</title><body bgcolor="#fefefe">"

if $pathInfo != "" then [
print "<form action='" + $scriptName + "' method='post'>"
print "<textarea name='text' cols='65' rows='15'></textarea><br>"
print "<input type='submit' name='submit' value='submit'>"
print "</form>"
] else [
print "<b>Os Name</b>: " + $osName + "<br>"
print "<b>Java Home</b>: " + $javaHome + "<br>"
print "<b>Path Info</b>: " + $pathInfo + "<br>"
print "<b>Script Name</b>: " + $scriptName + "<br>"
print "<b>Query String</b>: " + $queryString + "<br>"
print "<b>numarul de argumete</b>:" + $args@length + "</br>"
if $args@length > 0 then [
each $i in $args do [
print "<p>" + $i + "</p>"
]
]
]
print "</body></html>"