Interactive mathematics on the Internet

3. Interfaces with background programs

In principle, any program allowing batch mode execution can be interfaced by Wims. The main restriction is that softwares with restrictive licenses should not be made freely accessible by all. Modules which must call restrictive softwares should put access restrictions on them. Partly due to the distribution policy of Wims, we do not have interfaces to such restrictive softwares yet, although many of them are easily interfaceab le.

Wims calls interfaces to other programs by a command exec. This command accepts also parameters which will be sent to the interface as standard input to the program. The standard output of the interface is put into the return value of exec. Apart from this standard communication channel, variables can also be used to communicate with background programs in both ways. On the one hand, all Wims variables are visible by child programs as environmen t variables. On the other hand, child programs can define variables for Wims by writing their definition in a special file named exec.var in the session directory.

For security reasons, only interfaced programs can be called by Wims. The following interfaces are currently available.

  1. PARI/GP. This is an excellent arbitrary-precision package for computations not involving transcendental functions.
    The header of PARI/GP output is automatically stripped off by the interface. For the rest, each line of the output corresponds to a line in the calling parameter.
    Often it is desired to put preliminary definitions or computations to PARI/GP before output is required. If the preliminary material is so long as to create difficulty or reliability to the computation of the output line numbers, this preliminary material can be put into a variable pari_header. The content of this variable will be executed by PARI/GP when it is called, but its output is stripped off.
  2. MuPAD. This is a symbolic algebra package whose copyright holder allows this kind of use on the Internet (interfaces not giving direct access to the full power of the software).
    The functioning of the interface is similar to that of PARI/GP.
    This program is relatively slow to load. Whenever possible, we prefer PARI/GP which is much faster.
  3. Octave. An preliminary interface for this numerical package exists, but no module uses it yet.
  4. Gnuplot. This popular plotting program is accessible by Wims modules only through the command insplot.
    Several incompatibilities concerning mathematical expressions are fixed by the interface: for exponentials, `^' is translated to `**'. For divisions, integer fractions like `1/2' are translated to `1/2.0' (otherwise Gnuplot applies integer division on 1/2 and gives out 0).
    The interface includes adaptation making it possible to plot animated sequences, by adding a few extra parameters. This is done by asking Gnuplot to plot images of the animation one by one, then using convert to put these images together into an animated gif file. Performance is reasonably good, as animations with acceptable quality can be generated within a few seconds.
    This program is included in standard Linux distributions. But the Wims interface assumes that it is recompiled with gif support enabled.
  5. Povray, a popular ray tracing package.
    Wims does not have a command like insray. So Povray should be called via the command exec. On successful execution, the interface returns the complete html syntax for addressing the resulting image file.
    Povray has native support for animation, but rendering is usually too slow to permit efficient animation within the execution time limit allowed to the program, unless the system is installed on a super-fast hardware.
    The application Polyray makes use of this package. As it seems that there is no danger allowing direct user-supplied source for Povray, Polyray has included a text field which allows the user to do so.
  6. TeX.
    The interface to TeX is exclusively accessible via the command instex, whose principle of functioning is described in subsection 2.2.
  7. PostgreSQL. This is the standard SQL engine used by Wims to manage its databases: applications on the site, virtual classes, user registrations. It is accessed by a special command sql which is only available for privileged modules.
  8. COQ. This is a proof assistant package built upon CAML.
    The program is designed for interactive use. At each proof step, a status is printed including new goals to prove as well as hypotheses for the principal goal.
    A Wims module using this package should support step by step operations. It should store the whole command history in a variable, and at each step, the last command is appended to the command history, then the latter is fed to the interface for Coq.
    The interface captures the last status printed by Coq, and splits this status into two return data, one for the goals remaining to be proven, and the other for the hypotheses for the principal goal.
  9. Imps. Interface for this mathematical proof system is still under development.

One of the problems which occurs when several programs are called in a single process is that each program has its particular syntax for mathematical expressions. For example, Gnuplot uses x**3 to denote x3, which is not recognized neither by PARI/GP nor by MuPAD. In order to make the mathematical expressions directly chainable from program to program, in the respective filters, routines have been inserted which translates syntaxes used unambiguously by other programs into the syntax proper to the interfaced program. Similarly, function names or constant names which are commonly used but not recognized by the interfaced programs are defined in the interfaces (such as sh, ch, sec, tg).