servguiweb - Servidor web cientifico multi-motor
=================================================
Version : 0008
Autor   : Diego Saravia Alia <dsa@unsa.edu.ar>
          Universidad Nacional de Salta
Licencia: GNU Affero General Public License v3 (AGPL-3.0)


DESCRIPCION
-----------
Sistema de formularios web para calculo cientifico.
El usuario completa un formulario en el navegador, Python
recibe los datos y un motor de calculo (Scilab, Octave, Python,
Perl, JavaScript/Node, C, Bash o PowerShell) genera los
resultados.

Arquitectura:
  formulario.html  <- el usuario edita libremente
  servidor.py      <- HTTP puro, no sabe que calcula el motor
  calcular.XXX     <- calculo + graficas + HTML de resultados

El servidor es independiente del lenguaje del motor: el archivo
de parametros es texto plano (datos, no codigo) y las rutas se
pasan por variables de entorno.


REQUISITOS
----------
  sudo apt install python3          # el servidor, obligatorio
  sudo apt install scilab gnuplot   # para los ejemplos incluidos
  # octave-cli, perl, nodejs, pwsh, gcc: solo si se usan esos motores


EJEMPLOS INCLUIDOS
------------------
  proyectil/    simulacion numerica (Euler/RK4/ODE), trayectoria
  estadistica/  media, mediana, desvio, IC, histograma, acumulada
  (ambos con motor Scilab; se pueden reescribir en otro lenguaje
  sin tocar servidor.py ni el formulario)


USO RAPIDO
----------
  cp -r /usr/local/share/servguiweb/proyectil/ ~/mi_app/
  cp    /usr/local/share/servguiweb/servidor.py ~/mi_app/
  cd ~/mi_app/
  python3 servidor.py
  # abrir http://localhost:8080

O con el lanzador:
  servguiweb proyectil
  servguiweb estadistica
  servguiweb /ruta/a/mi/app

Elegir otro motor (si existe el calcular.XXX correspondiente):
  MOTOR=octave servguiweb /ruta/a/mi/app
El formulario tambien puede enviar un campo  motor=python  y
tiene prioridad sobre la variable de entorno.


MOTORES DISPONIBLES
-------------------
  scilab      calcular.sce   scilab-cli
  octave      calcular.m     octave-cli
  python      calcular.py    python3
  perl        calcular.pl    perl
  javascript  calcular.js    node
  c           calcular       (ejecutable compilado)
  bash        calcular.sh    bash
  powershell  calcular.ps1   pwsh


NUEVA APLICACION
----------------
1. formulario.html:
   - <form method=POST action=/>
   - <!-- RESULTADOS --> donde iran los resultados
   - <input type=hidden name=X value=off> antes de cada checkbox
   - opcional: <select name=motor> para elegir el motor

2. calcular.XXX (en cualquier lenguaje):
   - leer PARAM_FILE (variable de entorno): una linea  clave=valor
     por campo del formulario; los checkbox valen on/off
   - calcular y escribir RESULT_FILE (variable de entorno) con el
     fragmento HTML de resultados (las imagenes se incrustan en
     base64)
   - terminar con codigo de salida 0; cualquier salida por stdout
     queda en /tmp/error_motor.txt


ARCHIVOS /tmp/ DE COMUNICACION
-------------------------------
  params.txt       el servidor escribe, el motor lee  (clave=valor)
  resultado.html   el motor escribe, el servidor lee
  error_motor.txt  log completo del motor


TESTS
-----
La suite de tests del servidor (unitarios, integracion HTTP por
motor, caminos de error y ejemplos del paquete) se corre con:

  bash servguiweb/tests/run_tests.sh

Ver servguiweb/tests/README.txt para el detalle.


FUENTES
-------
  /usr/local/share/servguiweb/doc/servguiweb_0008.tar.gz
  /usr/local/share/servguiweb/doc/documentacion.pdf
