Engage restructing proposal

Antranig Basman Antranig.Basman at colorado.edu
Wed Oct 14 19:07:36 UTC 2009

Hi there - Colin and I have had a further chat about naming which I will 
The current proposal looks pretty good, so long as we do it in the 
spirit that the layout is still fairly "provisional" - the Kettle 
framework itself is still evolving rapidly together with our 
understanding of how to organise client-server cooperation. That said, 
we want to do something now that gets as as close as possible to a 
reasonable layout that will minimise work later.

It's worth reiterating Colin's point that there is nothing in 
"engage-client" that could not physically run on the server, assuming an 
env.js implementation of sufficient quality - even though that is not 
actually the approach we are intending to recommend (for DOM-twiddling 
code). All the same, this implies that the role of "engage-client" is 
not quite morally that of a "client" but really is that part of engage 
which is not dependent on a particular server-side implementation (which 
in our case will be kettle). So we propose renaming "engage-client" to 
something like "engage-core" to minimise the cognitive dissonance when 
we make reference to its code from the server-side.

Correspondingly, a proposal for "engage-server" is to name it to 
"engage-kettle" to emphasise the fact that this is just *one* solution 
for a suitable server-side to interact with the Kettle "client-side" 
artefacts. Just as with the Infusion/Kettle split, we want to continue 
to emphasise that whilst Fluid is now starting to provide server-side 
infrastructure, we are not prescriptive about this and are committed to 
maintaining a "pay-as-you-go" system with client-side definitions 
prepared to work with any suitable server-side.


Colin Clark wrote:
> Hi Antranig,
> On 9-Oct-09, at 9:24 PM, Antranig Basman wrote:
>> i) I assume that engage-client is also nested inside src/webapp as 
>> well...
>> otherwise I guess we would not easily be able to composite it inside
>> Maven.
> We certainly can build engage-client with Maven, but at the moment we 
> don't, simply for expediency. Except for Kettle itself, I have to wonder 
> about the value of building with Maven, since it can't do everything we 
> require during the build phase by itself. We can certainly look at Maven 
> plugins for handling minification, concatenation, and other requisite JS 
> packaging, but in the end, we'll probably also need Ant in the mix.
>> ii) I object to the somewhat arbitrary distinction between "components"
>> and "services" which obscures the generally harmonious bent to the 
>> framework :P
>> I guess there will in time be more to what I hope we will not call a 
>> "service" than a single .js file, since these will have their own 
>> configuration/manifest supplied in some JSON structure.
> I think at the moment, there is a sensible distinction between 
> components and so-called "services": services depend on server-specific 
> APIs provided by Kettle. This is, fortunately, pretty minimal and I 
> expect it always will be. Beyond the files that initialize and manage 
> the services on the server, I think we've got an interesting and 
> exciting situation where almost all of our code is free to run either on 
> the client or the server.
> I don't particularly like the name services either, but I was at a loss 
> for something else. After 0.1, we're going to have to do a Kettle-wide 
> terminology blitz.
>> iii) whilst "mapping" doesn't actually contain any mapping, it does 
>> contain a lot of useful JSON to XML benchmarking - I am guessing by 
>> "remove from SVN altogether" you just mean "do not promote from 
>> incubator along with the rest of Engage"?
> Yes, exactly. Mapping needs to stay in the incubator but not move to 
> core with the rest of Kettle and Engage. For 0.3, we're planning to 
> evolve this code into a full-fledged import service with a UI that 
> museums can use to easily bring their data into Engage.
>> iv) concerned about having engage client-specific framework, I've 
>> looked over it a bit, but don't see anything particular about most of 
>> it that insists it lives on the client, although it does touch some 
>> tags. But this does touch a quite interesting issue that we should 
>> ponder, even if we don't do anything about it -
> I guess the key thing to note is that engage-client isn't necessarily 
> client-specific. It just isn't server-specific. If we were to describe 
> it by what it is not, we'd call it "engage-non-server," or something 
> equally funny.
> There's essentially nothing in the engage-client/framework directory 
> that is client-side specific, and indeed it actually does run on the 
> server at the moment, though it can quite freely be moved to the client 
> side. I'm still not sure the code that is in there comprises a 
> "framework" yet, but I think Justin and Yura chose this name to convey 
> the fact that it contains code that is used by a number of services 
> and/or components in the system. Fair enough.
>> Right now - all of the code we have on the server, has visibility of 
>> all of the code we write on the client - even that large part of it 
>> relating to DOM manipulation, DOM events, etc. that is useless. Whilst 
>> in some sense this is not correct, I guess we justify this by noting 
>> that the costs of loading superfluous code on the server (once per 
>> server startup) are much lower than loading it on the client (once per 
>> page serve). All the same, it is not great, and we should give at 
>> least some thought to the concept of a "core framework" which consists 
>> just of those definitions which make sense both on the client and the 
>> server. In terms of infusion, this is not too hard, since it consists 
>> largely of Fluid.js and the Renderer, plus or minus a few bits and 
>> pieces. So, I think we should make efforts to ensure that as we "go 
>> forward", engage code is designed with this in mind too - that is, 
>> parts of the code which are "model-directed" and interact with markup 
>> only through the renderer, and parts of code which get involved with 
>> grubby details of DOM manipulation.
> Given the browser-compatibility environment that Env.js provides us, I 
> think it's quite sensible that we can have a full suite of Infusion 
> tools available to use within Kettle. Looking down the road a ways, I'd 
> like to see us offer a super-simple client-side mode where developers 
> can produce very simple services and data feed using pretty much only 
> the techniques they're already familiar with on the client.
> That said, I don't think we'll take advantage of this approach ourselves 
> for Engage, since we're interested in writing more sophisticated and 
> performant code on the server.
> All that said, I completely agree with the idea of further modularizing 
> Infusion. As we move to deployment on mobile devices, the only really 
> sensible solution is to ensure that our code is very carefully 
> modularized so we can create custom device-specific builds that contain 
> only the essentials for the particular context. We started down this 
> path before Infusion 1.0, and the new Infusion Builder helps us a lot. 
> Let's consider continuing to break out the core framework into smaller 
> and more self-contained packages.
> Great discussion!
> Colin
> ---
> Colin Clark
> Technical Lead, Fluid Project
> http://fluidproject.org

More information about the fluid-work mailing list