* Redirect input of the remote side to a named pipe?

* gmsh.pl 
   -- preamble (like in remotetest)?
   -- tmp: use File::Spec
   -- host file (syntax like clusters)
   -- interpreter option to specify bash, perl, python, etc.
   -- option -e ?
   -- -x exclude option

* cleanfiles option: bug. Esta borrando los scripts antes de tiempo
   Añadir array de PIDs al estado del objeto GRID:::Machine. 
   En open, open2, open3 y cualesquiera cosas por el estilo hay
   que hacer 
                     push @{$self->{pid}}, $pid

   y luego en el DESTROY sincronizarse con esos procesos.
   Pero la cosa es compleja. ¿que pasa si esos procesos son matados o
   fallan? ¿Debemos hacer (waitpid(-1, POSIX::WNOHANG()) > 0)?

   Otra posibilidad es que la supresión de scripts generados se haga
   en el DESTROY bajo peticiones del maestro. Para cada PID en PROCESSPIDS
   se comprueba que el script existe y se manda a suprimir.

* factorizar e ir construyendo el módulo GRID::Farm
* bugs ?
  * copyandmake: directorios con el open, que pasa si se usan rutas. Estudiar
  
* Poner el maestro a trabajar: modificar GRID::Machine para que provea un modo "local"
de conexion virtual ssh

* Overload bool so that gives the result component idem + and others
* Write sig handlers for INT, HUP
* Document 
     - open (RIO handles) with input and output pipes
     - copyandmake

* GRID::Machine::IOHandle. Open returns file globs for processes while for 
    files we have a GRID::Machine::IOHandle object!

* A GRID::Machine object can't "use GRID::Machine". This is a limitation
     See examples/netsshtelnetgridm2.pl
    - Quizá la parte remota debería ser también un singleton?

* Optimize "scp", "sftp" open a single session and keep it open then use it to transfer files?

* sub x : public (install a synonym of the sub in the hash)

* Write a debugger. Write documentation about debugging

* evalfile: read file and eval

* if exists a file .grid_machine/machine the options will be read from that file?

* RIO: remote files are now an integer. It does not work with IO::select.
  It is more transparent if it is a "file" on the local side. It will be a process
  that runs in a pipe.
  REMEMBER TO CONTROL SIGPIPE

* Be sure to kill nc in the remote machine when hangs
* Write a loader or booter. 
  Check if the modules were already written on the remote side and the versions agree.
  In such case, don't load them again.
* auxiliary functions (split host, port, etc.)

* Rewrite qx
* May be an AUTOLOAD for Perl CORE functions?
    - I can check if the opertor exists using Module::CoreList on the full name
    of the function
    - prototype("CORE::length")

* Add to "sub include" the parsing of attributes as:
    - "context" (send the context scalar/list to the remote sub
    - "filter" Filter output
    - 
* log files (stdout, stderr) in a subdir?

* encapsulate the freeze-thaw method with the subroutine object (for example matrix multiplication with PDL)
* edebug. Remote debug
* Parameters for new:
    -- tar
    -- untar
    -- gzip
    -- gunzip
    -- etc.

* Define functions "greadline" that - when executed on the remote side - reads from the local 
side

* Define GRID::Machine::LIOHandle objects as files on the local side that are accesible from the remote side.
  I.e. s.t. like:

   my $r = $m->sub { tutu => q{
                       my $f = GRID::Machine::LIOHandle->new("titi.txt");
                       my $x = <$f>;
                       gprint $x;
                     }
                   }

* Tests

* Documentation

* Method "call" must specify the context: if scalar or list. Important for IO.

* When installing a sub fields "thaw" and "freeze". By default Data::Dumper and eval

* The "rsync" Method

* Deferred DECISION: 
                allow (or not) pass by reference in RPC?
  S.t. like a prototype
    politely=> 1, varref => "0, 3..5, 9.."

  meaning that variables 0,3,4,5, and from 9 to the end are passed by reference

* args{log}: Ahora se fuerza a que sea relativo al HOME. Si es absoluto que se hace?
  Crearlo si no existe?

* The host variable in "new" can be undef. Fix the bug

* Make code Operating System independent. is_operative rewrite

* Look how slow is package2.pl

