Apps Messaging - Semantics of a Message

Alasdair Allan aa at astro.ex.ac.uk
Fri Apr 6 04:17:39 PDT 2007


Mike,

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...

Mike Fitzpatrick wrote:
> Notify (no response required)
> 	app.*				Application status msgs
> 	    connected
> 	    disconnected
> 	    error
> 	status.*			Reply status messages
> 	    reply
> 	    delivery
> 	    progress
> 		:

Yup, I can see these all being needed.

> 	event.*				UI event messages
> 	    keypress
> 	    mouseButtonDown
> 	    mouseButtonUp
> 		:

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.

>     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?

> 	load/save			File operations
> 	    image
> 	    table
> 	    URL

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.

> 	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. We're  
going to need far fewer messages that way, and it means that the  
application messaging system can support novel and interesting  
applications without having to add half a dozen more messages every  
time you want to do something new. 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. A data mining application perhaps, so "analyse.image" and  
"datamine.position"? Instead of sending 4 messages at that point, we  
could just send 2, "handle.image" and "handle.position".

> 	exec.*				Remote task execution capabilities
> 	    task

Again, not sure how that's going to work (safely). Use cases?

Al.




More information about the apps mailing list