Requirements for das2 Streams

1. self describing
  1. the stream must contain all information needed to be "useful."
  2. dataset interface in das2 defines useful.
2. extensible 
  1. metadata, annotating data ( e.g. via xml headers )
  2. introduction of new data types ( yscan, multiy, ... )
3. mode changes, table geometry
4. multiple data "planes"
  1. define planes as datasets that share tags
  2. e.g. Peaks and Averages
5. supports data compression
  1. compression type documented
  2. internal typeness preserved
6. allow for progress indication during transport
  1. total size attribute
  2. indication of parametric tag location 
    ( the tableBuilder knows the start,end parameters, plus the last paremeter
      read from the stream, therefore progress can be indicated. )
7. streamable so that there needn't be any server side storage
8. chainable operators can be built without difficulty
  1. reduction, fft, peaksAndAverages
9. non-streaming operators
  1. append
10. parallelizable
  1. divide request into set of subtasks that can be easily combined (e.g. via append)
  2. redirect to workers
11. easily appendable
  1. caching becomes trivial when a cache of streams can be collected and easily
    appended to satisfy the request
  2. support for parallelizable
12. das1 streams can be wrapped to make das2 streams
13. easily identified (e.g. "das2" is first four bytes)
14. non-monotonic tags
15. indication of failure modes, heartbeats


Existing das2Stream lacks support for:
  2.2, 3, 6.2, 10

I'm providing a glossary in case I'm misusing words, and so we share a common
core vocabulary when talking about these things.  

   reduction: reduction of a dataset statistically, such as bin averaging
   compaction: lossless compression of a data set for transmission or storage, such as gzip
   planes: datasets that share tags
   tags: data that indicates the context of science data, such as a timetag.  
     For efficiency, tags are generally required to be monotonically increasing.  
   worker: server that satisfies requests of a master server
   scalability: ability to handle exponentially increasing demands.
   metadata: data about data
   annotating data: data useful for documentation but not required for normal operations
   extensibility: ability to expand functionality 
   streamable: not requiring temporary local storage of data.  
