Apps Messaging - Semantics of a Message

Mike Fitzpatrick mjfitzpatrick at gmail.com
Fri Apr 6 22:37:12 PDT 2007


Hi Al,

> A good start here, and I'll reply to the rest of your message later,
> but to kick off the discussion I'd like to take issue with the way
> you've conceptualised what the messages we're going to pass actually
> mean...

This is why I started by saying the list would 'suffer the same debate..."
Any list was gonna be a target so I just tried to cover the different things
we (I specifically) might do with the system.   Conceptually I wanted to
preserve the idea of a NOTIFY, REPLY and REQUEST "type" of message
and recognized the REQUEST would be the most controversial.
       I agree these should be the most common, and high level, kinds of
messages.  However, what I had in mind is that an app that connects and
claims to support a specific message could use this to advertise a specific
capability (consider for example an app that queries for these capabilities
and can dynamically build a menu of options).  There is also a logical diff-
erence between e.g. what image.histogram and table.histogram might
require or produce, a simpler 'histogram' message is more general but also
too general.

> >       event.*                         UI event messages
> >               :
>
> I really fundamentally disagree that we should be dealing with UI
> level messages, conceptually you're thinking us into a box here. I
> think the messages should deal with higher level concepts, i.e. "Here
> is an image, do what you want with it" level rather than, "The user
> pushed button A" level.

This was probably an extreme thing to put on the list, and should probably
be one of the "unregulated" messages if at all.  What I had in mind was an
IRAF use-case where a task like IMEXAMINE can do many different things
depending on the keystroke typed at a given position (also the reason for
the 'exec.task' thing).  So, after displaying an image and exec'ing the task,
a series of keypress events could be used to create contour plots, radial
profiles, etc.


>
> >     Request (response required)
> >       set/get                         Set/Get property messages
> >           info
> >           param
> >           property
> >           capability
> >           appName
> >           result
> >           filename
>
> Erm, this opens a whole can of worms. I must admit for the internal
> message system for eSTAR I have gone down this route as eSTAR
> epitomises a case where a bundle of ((very) stateful webservices is
> needful. However PLASTIC gets away without carrying state around at
> all (or at least you can design your app not to care). Can you give
> me a use case where we need to ship state around in this manner?

get.info      get the iconURL for an app a la PLASTIC
set.param  tell a task what the default SIAP search size is
set.property   set a 'timeout' property for delivery of msgs to an app
get.capabilty   request a list of supported mtypes from an app
get.appName    obvious
get.filename    get the filename associated with a msg 'refID'

Note there are parallels to some of what the PLASTIC API does.


> >       load/save                       File operations
> >           :
> Not sure how you envisage this working. One application tells another
> to save something? That very much depends if both can see the thing
> the first is talking about, which isn't necessarily a given.

One app tells another to select a set of rows based on some expression
or an explicit list.  Then, tell the app to save that subset to a new file.  Or,
load two tables, crossmatch and save the result.  How/whether a 'save'
message could be implemented is up to the app, but I can see wanting
to do it.


>
> >       plot.*                          Vector Graphics capabilities
> >           table
> >           rows
> >       display.*                       Image Display capabilities
> >           image
> >           URL
> >       select.*                        Table selection capabilities
> >           rows
> >       highlight.*                     Object highlighting capabilities
> >           position
> >           rows
>
> I'd actually like to go with a much looser conceptual design, so
> "Here is an image" and "Here is a table" and "here is a position"
> rather than "Display an image", "Plot a table" and "Highlight a
> position". That way we're really far more flexible, the application
> receiving the message can decide what its best designed to do with
> the data rather than being instructed to do a specific thing.

There is nothing in these that prevents an app from doing whatever
it likes in response to the message, but like I said the specificity
has the advantage of advertising something that both a machine
can parse easily, and a human developer can interpret as probably
doing what is wanted.  An app can simply register a "display.*"
capability without saying specifically what kinds of display it will
do, VOPlot could register with "plot.*" and then maybe it's just a
crapshoot for the sending app whether the user gets something
reasonable.

> .....For instance under the above are
> we going to send a message to "display.image" and
> "highlight.position" to one visualisation application, and then a
> different set of messages to another subtly different application
> that doesn't even have a UI perhaps, but would be interested in
> getting an image with an (user defined as interesting) position
> attached.

That's up to the sender.  One could send display.image to a
specific image display task, but send the 'highlight.position'
to the Any recipient in which case the display task and the
UI-less subtle app can do whatever they do.

This discussion of the specific messages is good and necessary
but perhaps a separate thread.  For the moment I'd like to focus
on whether the idea of a UCD-like 'mtype' is worth pursuing or needs
more development.  Once we agree on that we can fight over the
vocabulary.


-Mike



More information about the apps mailing list