[Pipet Devel] Re: [Pipet Devel] Re: Ideas for network distributed objects
Jean-Marc Valin
jean-marc.valin at hermes.usherb.ca
Fri Mar 24 23:20:57 EST 2000
"J.W. Bizzaro" a écrit :
> > OK, I'll try to summerize the way XML is used in Overflow with an example:
> >
> > <?xml version="1.0"?>
> > <Document>
> >
> > A document is a file and can contain many networks (it's the equivalent of a .c)
>
> Then this is something like Loci's 'workspace' or 'workflow diagram', or
> Jarl's 'dataflow structure'.
Something I forgot to say about documents... if this document is in the
VFLOW_PATH, then the whole document can be used as a node in another document.
>
> > <Network type="subnet" name="MAIN">
> >
> > A network if the C equivalent of a function. Each document must contain a MAIN
> > network.
BTW, the network type can be three things: "subnet", "iterator" or
"threadedIterator". The "threadedIterator" is very experimental, so I will not
talk about it. A "subnet" is the C equivalent of a function, while the
"iterator" is the equivalent (not exact) of a loop. Actually an iterator is the
equivalent of a function that looks like
void foo(...)
{
while(condition)
{
do something
}
}
> >
> > <Node name="node1" type="Constant" x="-294.000000" y="101.000000">
> > <Parameter name="VALUE" type="subnet_param" value="IN"/>
> > </Node>
> >
> > This is a node definition. The name is arbitrary,
>
> The name is akin to Loci's identification number, which is really a URI to the
> XML representation of the node.
>
> > while the type corresponds to an Overflow node class.
>
> Great, this is just like Loci's locus types/classes.
>
Just to make sure everyone understand, the definition is the equivalent of a
function call, not a function prototype/implementation.
> > x and y are for the GUI.
>
> I think for VSH we should have the GUI store that information. If we are to
> have more than one interface available for VSH, x and y will not always be
> relevant. This is what we were going to do with Loci.
>
I didn't like that either. It was just simpler to have everything in one file
(since this is the only info that was GUI-dependent)
> > The parameters have to correspond to what the node expects.
>
> This is like a mime-type for link I/O? This is also something Loci was going
> to define.
I'm not sure what you're talking about...
>
> > <Node name="node5" type="MAIN_LOOP" x="-26.000000" y="108.000000">
> > <Parameter name="FRAME_SIZE" type="int" value="256"/>
> > </Node>
> > <Node name="node2" type="ExecStream" x="-165.000000" y="98.000000">
> > <Parameter name="COMMAND" type="string" value="cat"/>
> > </Node>
> > <Node name="node6" type="Constant" x="-162.000000" y="186.000000">
> > <Parameter name="VALUE" type="string" value="frames"/>
> > </Node>
>
> I'm not sure what you mean by value=256, cat, or frames.
>
Here's the C equivalent:
void foo(int aNumber);
main()
{
foo(256);
}
This would translate to:
<Node name="node1" type="foo">
<Parameter name="aNumber" type="int" value="256"/>
</Node>
Also about parameters... Here is a macro that appears on top of each file that
implements a node:
NODE_INFO(FIR,"Signal:DSP", "INPUT:FILTER", "OUTPUT",
"LENGTH:CONTINUOUS:NONCAUSAL")
Here, FIR is the name of the class (the node's "type"), "Signal:DSP" is just a
classification for the menus, "INPUT" and "FILTER" are the names of the inputs
and "OUTPUT" is the name of the output. This node accepts 3 parameters
(arguments): LENGTH, CONTINUOUS and NONCAUSAL.
When the node is loaded (its library is dynamically linked), a function puts
that info in a node "database", which the GUI uses to know what node are
available (and takes what arguments).
> > <Link from="node8" output="OUTPUT" to="node9" input="STREAM"/>
> >
> > Links define which node is connected to which. Input and output names need to be
> > defined since nodes can have more than one input/output.
>
> Excellent, just like Loci. Although Loci embedded <link> (what Loci calls
> <input> and <output> 'connectors') in with the node information. This is how
> Loci defines a node (loci == node, although 'locus' is singular):
>
> <loci type='document' >
> <widget>file_select</widget>
> <input xml:link='simple' href='baselocus.xml' >
> </input>
> <output xml:link='simple' href='workspace1/viewer1.xml' >
> </output>
> </loci>
We used to have links as a property of the nodes (before we switched to XML).
The reason we changed is that is that a Link in the GUI is an actual object, so
it was just simpler.
> (Brad, shouldn't we also have locus 'id=' in here?)
>
> In this example, when we say 'type=', we mean the same thing you do with
> 'type='. But our type 'document' is a node that stores data: a file. It's
> not where Loci sets up a network. What Overflow calls 'document', Loci calls
> 'workspace'.
>
> <widget> is the name of the interface component to be used. We're working on
> using more XML here, and the 'widget' representation in XML can be located
> anywhere on the Internet.
>
> <input> and <output> define the links (connectors) for this particular node.
> href points to the XML representation of the node it is connected to.
> xml:link is from an XML document linking tool that Brad has been using.
>
> Loci also gives the node an ID (not shown above) that is the location/URI of
> the node's XML representation. Here the GUI of Loci requests that a node
> called 'viewer1' gets linked to a node called 'document1':
>
> <connect>
> <input id='workspace1/viewer1.xml' >
> </input>
> <output id='workspace1/document1.xml' >
> </output>
> </connect>
>
> Other information related to a node (e.g., library URI and version number) can
> be kept between <loci> and </loci>
>
> > <NetOutput name="OUTPUT" node="node9" terminal="OUTPUT"/>
> >
> > NetOutput means which node (and which output of that node) will be used as the
> > output of the whole network. The same applies to NetInput and NetCondition.
>
> What is the actual output? The screen, a file? Or is this something the user
> defines?
The output is what getOutput() returns... you can do whatever you like with it.
batchflow (text mode tool) writes it to stdout, vflow (the GUI tool) writes it
in a subwindow. If you want to save it in a file, all you need to do is to have
the last node be a "Save" node. ...or the last node can be a soundcard output...
In most cases, the output of the MAIN network is a nil object.
>
> > </Network>
> > <Parameter name="IN" type="string" value="/data/ntt/french/*/*"/>
>
> In this case, the whole 'document' gets a 'parameter' tag?
>
> When I first came across Overflow (when you posted the announcement on
> gnotices), I noted to Brad how remarkably similar some of its features are to
> Loci's. This is particularly true for the XML representation of a network.
>
> This is something GMS (which uses no XML) needs to implement as well. And
> since Overflow and Loci are so similar, we should choose one definition. Can
> you comment on what you like or dislike about Loci's use of XML for network
> representation? Let's hammer this out right away.
I'm not that much a fan of XML... The only reason I used it was that it saved me
so much time (instead of writing a parser myself). So Anything that does the job
is OK for me.
Jean-Marc
--
Jean-Marc Valin
Universite de Sherbrooke - Genie Electrique
valj01 at gel.usherb.ca
More information about the Pipet-Devel
mailing list