GIT repositories

Index page of all the GIT repositories that are clonable form this server via HTTPS. Übersichtsseite aller GIT-Repositories, die von diesem Server aus über git clone (HTTPS) erreichbar sind.

Services

A bunch of service scripts to convert, analyse and generate data. Ein paar Services zum Konvertieren, Analysieren und Generieren von Daten.

GNU octave web interface

A web interface for GNU Octave, which allows to run scientific calculations from netbooks, tables or smartphones. The interface provides a web form generator for Octave script parameters with pre-validation, automatic script list generation, as well presenting of output text, figures and files in a output HTML page. Ein Webinterface für GNU-Octave, mit dem wissenschaftliche Berechnungen von Netbooks, Tablets oder Smartphones aus durchgeführt werden können. Die Schnittstelle beinhaltet einen Formulargenerator für Octave-Scriptparameter, mit Einheiten und Einfabevalidierung. Textausgabe, Abbildungen und generierte Dateien werden abgefangen und in einer HTML-Seite dem Nutzer als Ergebnis zur Verfügung gestellt.

Octave Web-Interface

Octave web interface

This Octave Web Interface is a browser based UI for the open source Matlab clone GNU Octave (in combination with GNU plot).

In short, it provides

  • configurable web input forms and input validation,
  • running octave as a shell process
  • output text capturing and displaying in the browser
  • displaying figures as images in the browser
  • displaying saved files downloadable in the browser
  • Script management, optional open or hidden script script source
  • API JSON style results dependent on the HTTP "Accept" request header.

Dieses Octave Webinterface ist eine Browserschnittstelle für den Open-Source Matlab-Clone GNU Octave (in Kombination mit GNU plot ).

In aller Kürze formuliert bietet die Schnittstelle:

  • Konfigurierbare Web-Eingabemasken und Validieren der Eingabe
  • Ausführen von Octave als Shell-Prozess
  • Anzeige der Textausgabe im Browser
  • Anzeige der Bilder/Diagramme (figures) im Browser
  • Anzeige gespeicherter Dateien als Download
  • Skript-Management, optional mit öffentlichem Quelltext
  • API JSON Ergebnisse wenn als HTTP "Accept" Request-Header JSON angegeben wird.

Octave web interface example screenshot

Motivation

Scientists often use math software for their calculations, such as Matlab, Mathematica, SciLab and Octave, because these packages are optimized for handling and visualization of huge amounts of data. There are already very good solutions to make these functionality web-accessible to any user (e.g. Wolfram Alpha). Server based solutions have some advantages:

  • There is no need for clients with high computational performance. Calculations can be performed using a net-book or iPhone.
  • The platform and math package installation is well known and not dependent on the client installation
  • Data can be visualized in a elaborated way using HTML/CSS

The reason to start this project was the situation that a lot of tiny calculation algorithms were implemented and used by different students in our group, although there was a "common use case" for the calculations. The most students had no experience with programming languages or web applications, but were very familiar with Matlab. What we needed was a system which accepts scientific source code and provides an easy way to configure the input and output modules of the web interface. The major aspect that lead to utilizing Octave was the fact that Octave is licensed under the GPL and can be run as shell process. Furthermore, the use of GNU Plot allows to save figures without displaying them in the UI. Compromizes had to be made according to the performance (Octave has no JIT compiling) and minor deviations from the known Matlab Syntax.

Motivation

Für wissenschaftliche Berechnungen werden oftmals Mathematikpakete wie Matlab, Mathematica, SciLab und Octave verwendet, weil diese auf das Verarbeiten und die Darstellung großer Datenmengen optimiert sind. Es gibt bereits gute Ansätze, diese Funktionalität für Endanwender (bzw. Nutzer, die einen Algorithmus nicht selbst implementiert haben) auf einfache Weise erreichbar zu machen (Beispiel: Wolfram Alpha).

Eine Server-basierte Lösung hat markante Vorteile:

  • Es müssen keine großen Performance-Ansprüche an den Client gestellt werden. Berechnungen können sowohl mit einem iPhone alsauch mit einem Netbook durchgeführt werden.
  • Betriebssystem und Softwarepakete sind bekannt und unabhängig von lokalen Installationen
  • Daten können auf verständliche Weise graphisch dargestellt werden

Anlass für dieses Projekt war der Zustand, dass vor allem kleinere Berechnungsalgorithmen in unserer Arbeitsgruppe unabhängig von verschiedenen Personen implementiert und verwendet wurden, obgleich sie von allgemeinem Nutzen waren. Die meisten Studenten hatten dabei keine Erfahrung mit allgemeinen Programmiersprachen und Web-Anwendungen, jedoch gute Kenntnisse in Matlab. "Hier musste eine akzeptable Lösung her". Die Entscheidung für Octave fiel in erster Linie aufgrund der Lizenz, der direkten Ausführbarkeit als Shellprozess und der Anbindung von GNU plot, welches Plots ohne Bildschirmdarstellung im Speicher verwalten und als Datei speichern kann. Kompromisse mussten im Bezug auf Performance (kein JIT compiling) und einer von Matlab leicht abweichenden Syntax gemacht werden.

Usage

When the web interface is set up as described below, the user can access all scripts as HTML page representations. The start page shows a list of all accesible scripts, including the descriptions. By selecting a script in the list the user is resirected to the corresponding parameter input forms.

Verwendung

Ist die Webschnittstelle wie in den Folgeabschnitten beschrieben installiert, so kann der Nutzer alle öffentlichen Skripte im Browser erreichen. Dabei zeigt die Startseite des Webinterfaces eine Liste der verfügbaren Programme, mit Beschreibungen. Jeder Listeneintrag ist ein link auf die einzelnen HTML Representationen der Programme, welche die Einfgabemasken und die berechneten Ergebnisse darstellen.

Sctipt list

Write own scripts

The programming language of Octave is pretty much the same as in Matlab. I suppose that you are familiar with this. Detailed documentation about Octave can be found at the Octave Homepage.

When you write your Octave script, then all you want is getting input, doing stuff with it and generating output. In most cases (if no figure based GUI is used) the input of a Matlab/Octave script is done by assigning some variables and defining file names to load in the head of the script. These kind of script can be very easily "imported" into web interface. This is how it works:

  1. Implement and debug an Octave script the way you always do it, define all your script parameters in the head of your script e.g. weight=10; for a variable weight you would need etc. Take care as well that required include files or data data files are in the same directory as your script or in a subdirectory.

  2. Create a subdirectory in the folder sources of the web interface; the folder name should be compliant to the text you can enter in an URI, ideally alphanumeric with optional dashes. Copy your script including the required resources into this directory. Rename your main octave script main.m. This is important because the web interface will try to invoke this.

  3. Replace all your initialisation values or text input (e.g. where you say weight=10;) with sensible field names of a structure called parameters, e.g. weight = parameters.weight;.

  4. Now we need to specify these parameters. This structure is generated automatically from a config file named config.json that you now create in your script folder.There you define what the user can enter in a web form, where each parameter has a variable name, a human readable caption, an optional description, optionally a unit, and validation ranges. The validation depends on the data type, means that numbers can have min/max values, for files there are size limits, etc. You can specify default values and form presets. The example config in the repository shows you how to define this.

  5. Now browse to your Octave server root. The HTML page should display the name of the script in the list. If you click at it, the input form will appear. Enter your data and press "Compute". There you go.

  6. If the you script is listed red in and not clickable, then you have an error in your config and should take a look at the trouble shooting section below (it's very often a missing colon).

Eigene Skripte schreiben

Die Programmiersprache von Octave ist der von Matlab sehr ähnlich. Die detaillierte Dokumentation befindet sich unter anderem auf der Octave Homepage.

Programmieren in Matlab bzw. Octave bedeutet meistens, dass ein linearer Ablauf von Eingabe, Verarbeitung und Ausgabe erstellt wird. Dabei wird die Eingabe entweder als Texteingabe oder (ebenfalls oft) direkt als Variablendeklaration im Kopf des Programms realisiert. Das Octave Web Interface kann für den letzeren Fall in ein bestehendes und getestetes Octave-Programm an dieser Stelle eingebunden werden, indem die Variablen statt auf konstante Werte auf Argumente gesetzt werden, die die Webschnittstelle als globale struct-Variable parameters übergibt. Damit ergibt sich folgender Ablauf, um ein Sktipt online verfügbar zu machen:

  1. Implementiere und debugge ein Skript wie üblich, wobei alle Eingabeparameter und Dateipfade im Kopf des Skripts definiert werden sollten (z.B. weight=10;). Auch sollten alle benötigten Bibliotheksdateien im selben Verzeichnis oder in Unterordnern angelegt werden.

  2. Erstelle ein Verzeichnis im scripts - Ordner des Webinterfaces und kopiere alle erstellten Dateien in dieses Verzeichnis. Benenne die (Haupt-)Skriptdatei in main.m um.

  3. Ersetze die Initialwerte im Hautprogramm durch aussagekräftige Feldnamen der Struktur parameters, dazu gehören auch Dateinamen oder Initialisierungsmatrizen. D.h. weight=10; wird ersetzt durch z.B. weight = parameters.weight;.

  4. Durch Verwendung der parameters-Struktur wird dabei die Brücke zur Webeingabe geschlagen. Nun muss die Konfigurationsdatei config.json im Skriptordner erstellt werden, um diese Webeingabe zu steuern. Die Datei ist im maschinenlesbaren JSON-Textformat definiert. Eine beschriebene Beispielkonfiguration liegt mit im GIT Repository. Zu der Parameterdefinition gehört der Feldname (parameters struct), eine Bezeichnung und optional auch eine erweiterte Beschreibung, Defaultwert, Einheit, Grenzen (min/max), Defaultwert oder Formvorgabewert, etc. Validierungsangaben unterscheiden sich nach Datentyp, z.B. sind bei Dateien die maximale Uploadgröße interessant, bei Zahlen min/max, bei einer Matrix z.B. die Dimension.

  5. Nun wird im Browser das neue Script bereits in der Liste angezeigt. Durch Klicken auf den Eintrag wird die Eingabeform aufgerufen und mit dem Knopf "compute" die Berechnung angestoßen.

  6. Wenn das Skript rot in der Liste angezeigt wird (nicht anklickbar ist), so ist die Konfigutationsdatei fehlerhaft oder der Webserver darf die Quelldateien/Configdatei nicht lesen. In den meisten Fällen wurde dann ein Komma in der Config vergessen, oder die Textkodierung ist nicht UTF-8.

Example configuration

Beispiel-Konfiguration

{
    "title": "My BMI calculation script",
    "description" : "This is my script that calculates something for me. In this case ... BMI ...",
    "timeout" : 10000,
    "parameters" :
    {
        "name" :
        {
            "caption" : "Name",
            "description" : "Your name ( optional :-) )",
            "type"    : "string",
            "max"     : "100",
            "default" : ""
        },
        "weight":
        {
            "caption" : "Weight",
            "description" : "Enter your weight here",
            "type"    : "double",
            "unit"    : "Kg",
            "min"     : "30",
            "max"     : "200",
            "preset"  : "70"
        },
        "height":
        {
            "caption" : "Height",
            "description" : "Enter here how tall you are",
            "type"    : "double",
            "unit"    : "m",
            "min"     : "1.2",
            "max"     : "2.5",
            "preset"  : "1.80"
        }
    }
}

Example script

Beispiel-Skript

% Print the script arguments passed by the WebOctave interface:
parameters
 
% Calculate the BMI
BMI = parameters.weight / ( parameters.height^2 );
name = parameters.name;
 
% Text output
if strcmp(name,  '')
   disp(sprintf('Your BMI is %3.1f', BMI));
else
   disp(sprintf('The BMI of %s is %3.1f', name, BMI));
end
 
% Plot something
linestyles= {'x-k', 'o-k', 'd-k'};
k=0;
figure();
w = 40:10:100;
for h = 1.6:0.2:2.0
 BMI = w./(h.^2);
 plot(w, BMI, linestyles{++k});
 hold on;
end
grid on;
title('BMI over weight for different body height');
xlabel('weight / Kg');
ylabel('BMI');
legend('Height 1.6m', 'Height 1.8m', 'Height 2.0m');
legend('location', 'northwest');
legend('boxon');

Example output

The text output and figure if this example script is

Beispiel-Ausgabe

Die Textausgabe und Abbildung dieses Beispielskripts ist

parameters =
{
  WEB_WORKING_DIRECTORY = /tmp/web-octave/02on4jphbm0qoubd75unppr5d7
  WEB_PROGRAM_DIRECTORY = /var/www/octave/scripts/bmi-example
  name =
  weight =  70
  height =  1.8000
}
 
Your BMI is 21.6

Example script text output

Usage summary

Zusammenfassung der Nutzung

Input

As you can see in the source code of the script, all parameters are passed in the structure parameters. Uploaded files are passed as absolute paths, so that you can use the load() function to work with the contents. The different data types are presented to the end user in a comprehensible way:

Eingabe

Wie Du aus dem Quelltext schon erkannt hast, werden die Argumente in der Strukturvariablen parameters an das Skript durchgereicht. Hochgeladene Dateien werden als absoluter Pfad übergeben, so dass die Inhalte mit load() geladen werden können. Zuvor validiert die Webschnittstelle die Eingabe mit den Angaben aus der Konfiguration. Unterschiedliche Datentypen werden dem Nutzer verständlich dargestellt:

Data types variation example form

Plotting

All you have to to is to use the build-in plot functions. The Web Interface will organize the rest. I recommend to call the function figure() for multiple plots. This prevents that the current plot will be overwritten. The figure() function opens a new virtual plot window, which will be converted to an image later.

Save downloadable files

All saved files will be displayed as downloadable, provided that you do not save them in a directory different from the script execution directory (Note: this is a temporary directory, not the subdirectory in sources. Read on for further details).

Plotting

Zur graphischen Ausgabe werden einfach die normalen plot-Funktionen verwendet. Den Rest regelt die Webschnittselle. Ich rate, bei mehreren Plots die Funktion figure() aufzurufen, damit wird der aktuelle Plot nicht überschrieben, sondern ein virtuelles neues Graphikfenster geöffnet.

Downloadbare Dateien speichern

Alle Dateien, die mit Octave gespeichert werden, werden als downloadbar angezeigt, vorausgesetzt sie werden im selben Verzeichnis gespeichert, in dem das Skript ausgeführt wird (Vorsicht, dies ist ein temporäres Verzeichnis, nicht das Skript-Verzeichnis in sources. Weitere Informationen sind weiter unten im Text angegeben).

How the interface software works

To manage more than one user that could use the web application at the same time, the web UI frame generates temporary (session based) working directories in the tmp folder. Here are some details about the files generated and used:

  • When the script list is requested (by specifying no script in the URL at all), then all script folders are browsed for the config file, the config is loaded and displayed. Every list entry links to a script in the form "/octave-root/*script name*/"

  • When a script form is requested ("/octave-root/*script name*/"), then the script config of this script is read and the input form returned.

  • When the compute button is pressed, then the following sequence will be performed:

    • The script parameters will be validated

    • The temporary working directory is prepared if it does not exists it will be created, if it exists it will be cleared.

    • The main.m is copied to the temporary directory. A temporary start script is generated, which contains the declaration of the parameters and an additional code to convert the plotted figured to images.

    • The current working directory is changed to the temporary directory (using chdir). The intermediate script contains octave commands that make the source directory to an auto-include directory.

    • The main.m script is executed using Octave, the STDOUT and STDERR fetched.

    • The text output is saved in a file, a script information file is written, Conversions to the PHP UI are made.

Wie die Webschnittstelle funktioniert

Um mehrere Nutzer, die eventuell gleichzeitig auf die Web-Applikation zugreifen, zu verwalten, generiert die Webschnittstelle ein Session-basiertes temporäres Verzeichnis im Ordner tmp. Hier sind die Details über Dateien und Abläufe:

  • Wenn die Skriptliste angefordert wird (d.h. keine Eingabe über GET oder POST), so werden alle Konfigurationsdateien gelesen und auf Basis dieser Daten eine Liste dargestellt. Alle Einträge linken auf Skripte in Form "/octave-root/*script name*/"

  • Wenn eine Skript-Eingabemaske angefordert wird ("/octave-root/*script name*/"), dann wird die Konfigurationsdate dieses Skripts geladen und die Eingabemaske zurückgegeben.

  • Wenn der "Compute"-Button gedrückt wird, so wird folgende Sequenz angestoßen:

    • Die Skriptargumente werden validiert

    • Ein temporäres Session-Verzeichnis wird generiert, wenn es nicht existiert bzw. geleert falls es existiert.

    • Die Datei main.m wird in das temporäre Verzeichnis kopiert, und ein Startskript wird erstellt, welches die Deklarationen der Argumente und weiteren Code zum Konvertieren der Plots enthält.

    • Das Arbeitsverzeichnis wird in das temporäre Verzeichnis gewechselt (mit chdir).

    • Das Skript wird mit Octave ausgeführt und die Ausgabe (STDOUT, STDERR) abgefangen.

    • Die Textausgabe wird in einer Ausgabedatei gespeichert, eine Skript-Informationsdatei wird generiert, und Konversationen für die PHP Oberfläche werden getätigt.

Installation and requirements

To get this Octave web interface running, you need "ususual suspects":

  • A Unix compliant operating system (Linux/BSD/MacOS,...)
  • A Apache2 web server, PHP5.3 or higher
  • GNU octave
  • GNU plot
  • The Octave Web Interface

Voraussetzungen und Installation

Um dieses Octave Webinterface zum Laufen zu bringen benötigt man die "üblich verdächtigen" Programme:

  • Ein Unix-kompatibles System (Linux/BSD/MacOS,...)
  • Einen Apache2 Server mit PHP Version ≥ 5.3
  • GNU octave
  • GNU plot
  • Das Octave Webinterface

Debian/Ubuntu

As virtual machines are nowdays a minor problem and the service is intended to be server, this quick installation guide refers to a Debian or Ubuntu platform. The folloging setup script should be checked and edited before running it with sudo (no warranties here :-))

Debian/Ubuntu

Da die Installation virtueller Maschinen heute keine großen Probleme mehr darstellen und die Anwendung eine serverbasierte Lösung ist, sei an dieser Stelle eine kleine Installationsanleitung für Debian bzw. Ubuntu gegeben. Das folgende Setupskript sollte vor der Ausführung mit sudo nochmals geprüft und editiert werden (Keine Gewährleistungen von mir :-)).

Setup

#
# Inspect this script text before running it with root rights (sudo)
#
 
#-------------------------------------------------------------------------------
# Octave / gnuplot
#-------------------------------------------------------------------------------
 
# Basics (REQUIRED)
apt-get install -y gnuplot octave3.2 octave-plot
 
# Octave documentation (UNCOMMENT IF YOU WANT THIS)
# apt-get install octave3.2-doc
 
# Octave libraries "big pack" (UNCOMMENT IF YOU WANT THIS)
# apt-get install octave-strings octave-general octave-time octave-statistics\
#  octave-struct octave-image octave-linear-algebra octave-mapping octave-vrml\
#  octave-tsa octave-symbolic octave-signal octave-fixed octave-audio octave-communications\
#  octave-control octave-data-smoothing octave-io octave-nan octave-miscellaneous\
#  octave-nurbs octave-ocs octave-octcdf octave-octgpr octave-optim octave-optiminterp\
#  octave-specfun  octave-splines
 
#-------------------------------------------------------------------------------
# Apache2, PHP
#-------------------------------------------------------------------------------
 
# Basics (REQUIRED)
apt-get install -y php5 apache2 libapache2-mod-php5
 
# Additional recommenced modules:
apt-get install -y php5-curl php5-cli
apt-get install -y apache2-utils php5-gd php5-imagick
 
# Enable required apache2 modules, disable request timeout module
a2enmod headers
a2enmod rewrite
a2dismod reqtimeout
service apache2 restart
 
#-------------------------------------------------------------------------------
# Web interface
#-------------------------------------------------------------------------------
 
# GIT is required
apt-get -y install git
 
# Octave web interface
cd /var/www/
git clone http://www.atwillys.de/git/weboctave.git octave
 
# SwLib (a required PHP library - home made by myself :-) )
cd /var/www/octave/include
git clone http://www.atwillys.de/git/swlib-php.git swlib
 
#-------------------------------------------------------------------------------
# EOF
#-------------------------------------------------------------------------------

Apache2 config file

You might need to adapt your apache config file (/etc/apache2/sites/default), on my test installation server (Ubuntu 12.04 LTS) it reads:

Apache2 Konfigurationsdatei

Möglicherweise muss die Apache Konfiuration (/etc/apache2/sites/default) angepasst werden. Auf meinem kleinen Testserver steht darin:

#
# /etc/apache2/sites-available/default
#
<VirtualHost *:80>
  ServerAdmin webmaster@localhost
  DocumentRoot /var/www
 
  <Directory />
    Options FollowSymLinks
    AllowOverride None
  </Directory>
 
  <Directory /var/www/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
  </Directory>
 
  # Possible values include: debug, info, notice, warn, error, crit,alert, emerg.
  LogLevel warn
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Security

Executing scripts based on a web platform can be a crucial point on a server, even if the write access of the apache2 is limited. When implementing scientific scripts we would like to focus on the matter we are working on, not how it can affect the IT system. To meet these security requirements there are several ways to block executed Octave scripts form reading or writing from/to location it should not have access to:

  • Ubuntu has an integrated package called AppArmor, which allows to limit read, write, execute and network accesses. The profiles are stored in /etc/apparmor.d/. On my server I implemented a short intermediate shell script called weboctave that invokes the octave binary. The weboctave script is copied to /usr/bin/, and an AppArmor profile restricts the access to the required file system locations.

  • MacOS X has the sandbox-exec command that can limit read and write operations (please see the sandbox documentation for more details.

  • Generally you can set the sticky bit on a wrapper octave (shell script) file, allowing you to execute it with the owner (a restricted system account you create).

Sicherheit

Skripte von einem einem Webserver aus aufzurufen kann in Hinsicht auf Datensicherheit ein kritischer Punkt sein, auch wenn der Apache Webserver bereits Einschränkungen unterligt, welche an die Octaveskripte weitervererbt werden. Beim Implementieren von Skripten, die etwas berechnen sollen, konzenteieren wir uns jedoch gerne auf den Gegenstand dieses Programms statt auf IT-Sicherheit. Um diesen Anforderungen gerecht zu werden gibt es Mittel und Wege um vom Webserver aus gestarteten Octaveprogrammen Zufriffsrechte auf Das Dateisystem und das Netzwerk gezielt zu entziehen:

  • Ubuntu beinhaltet ein Paket namens AppArmor, mir dem Lese-, Ausführungs-, Schreib- und Netzwerkzugriffe für bestimmte Applikationen kontrolliert werden können. Auf meinem Server habe ich hierfür ein Shellscript namens weboctave implementiert, welches die Octave-Anwendung mit durchgeschleiften Argumenten aufruft. Für weboctave beschränkt eine AppArmor-Config in /etc/apparmor.d/ die Zugriffe auf ausshließlich benötigten Stellen im System.

  • Unter MacOS X gibt es hierfür den Kommandozeilenbefehl sandbox-exec hierfür bitte die entsprechende Dokumentation anschauen.

  • Generell unter Linux kann für Dateien das Stickybit gesetzt werden, mit dem ein Programm mit Eigentümerrechten (also hier ein Nutzer mit eingeschränkten Rechten) ausgeführt werden kann.

Shell script

Shellsctipt

#!/bin/bash
# @file /usr/bin/web-octave
# This won't work if php sends SIGKILL
kill_child_processes() {
    isTopmost=$1
    curPid=$2
    childPids=`ps -o pid --no-headers --ppid ${curPid}`
    for childPid in $childPids
    do
        kill_child_processes 0 $childPid
    done
    if [ $isTopmost -eq 0 ]; then
        kill -9 $curPid 2> /dev/null
    fi
}
 
trap "kill_child_processes 1 $$; exit 0" INT
 
# Run command
/usr/bin/octave $1 $2 $3 $4 $5 $6 $7 $8 $9

AppArmor Profile

AppArmor Profildatei

# vim:syntax=apparmor
# @file /etc/apparmor.d/usr-bin-weboctave
#include <tunables/global>

/usr/bin/web-octave {
 #include <abstractions/base>
 #include <abstractions/user-tmp>
 #include <abstractions/user-manpages>
 /bin/* lmix,
 /usr/bin/web-octave lrmix,
 /usr/bin/octave* lmix,
 /usr/bin/gnuplot* lmix,
 /usr/lib/** mrixl,
 /usr/share/octave/** lmr,
 /usr/share/gnuplot/** lmr,
 /usr/local/share/octave/** lmr,
 /usr/share/man/** lmr,
 /usr/share/doc/** lmr,
 /usr/share/menu/** lmr,
 /usr/share/mime/** lmr,
 /etc/octave* r,
 /tmp/web-octave/** rw,
 /var/www/octave/** r,
}

Web interface config file

Webinterface Konfigurationsdatei

<?
// Edit the file /var/www/octave/include/config.php
// [...]
$WEBOCTAVE_OCTAVE_INTERFACE_CONFIG['octave_binary'] = '/usr/bin/web-octave';
// [...]
$WEBOCTAVE_OCTAVE_INTERFACE_CONFIG['cache_path'] = '/tmp/web-octave';
// [...]

FAQ && Trouble shooting

To checkout some (anonymised and shortened) answers to emails I received please see here

FAQ && Troubleshooting

Um (anonymisierte und auf die Essenz gekürzte) Antworten auf Emails, die ich im Bezug auf diese Sortware erhalten habe, einzusehen lies bitte hier.