[alicebot-general] Internet communications engine.
mehri
foreverlinux at yahoo.com
Wed Oct 18 23:21:22 PDT 2006
Hi,
If you don't know what this email is about please catch up on the arch comm mailing list:
http://list.alicebot.org/pipermail/alicebot-archcomm/2006-October/thread.html
This discussion has been moved to this mailing list since it does not directly have to do with the arch comm and we want to open this discussion to a wider audience and include everyone's input.
----
Hey Noel, I think I got far ahead of myself in my enthusiasm this morning. I really don't want ICE (Internet Communications Engine http://www.zeroc.com/ice.html) to be a neutral specification mechansim. Rather it's just one of several technologies to allow network communications. As a matter of fact I really don't want any specific IDL (interface description language http://en.wikipedia.org/wiki/Interface_description_language) to do that. At the end of this email I'll explain what I think would be two important documents among us interpreter writers to actually write for each others benefit.
Let me explain first though what I am doing with RebeccaAIML right now in development (beta release due in a month or two) and perhaps that'll help others understand how I'm slowly but surely opening the architecture to allow other AIML technologies to use it which will ultimately enable me to integrate other AIML technologies (such as programd) as well as non AIML technologies ;-) with it (such as possibly other non AIML bot implementations).
I put the document discussing more of the network'ed ICE in RebeccaAIML here:
http://rebecca-aiml.sourceforge.net/talkAboutDesign1.htm
So, after reading that above document you should see that I'm moving more towards integration with other programming languages, other AIML interpreters either through RPC if they're servers or directly integrating them through interfaces. Making RebeccaAIML a kind of super SDK.
But those ideas could easily be pulled out into one integration super bot and discussed here.
What I would like to talk about creating documents to help developers would be:
* class interfaces for each programming language.
* IDL's for each RPC that's currently in use by AIML interpreters.
Yea it's a tall order but I said make it a double! :-) I think in all honesty if we were to hash these two out we could get integration of several open source AIML bots together ourselves. Which would mean that development of gui tools would work across the board with different interperters.
Interpreter new comers would be more than welcome. If they read the above documents and wanted to they could create adapters to their bots and they too would be able to use the various prewritten tools such as AIML test case drivers, admin tools etc...
Noel said:
--
In the purest sense, the interface to an AIML interpreter is
just some kind of String getResponse(String). But as all of us know who
work on real-world AIML interpreters that are intended for use in
multiple contexts, there are so many additional concerns that always
need to be handled that it makes sense to have some guidance from a spec
about these, too.
--
How about model the interfaces after Java Collection. For example, the top most interface you'd have to implement woul be just "String getResponse(String)". Another that inherits from that adds more operations but is more specific to a type of interperter. This would allow you to write tools where if that's all you need -- just the getResponse(String) it would work with most plugin'ed bots. A good example would be if I had written a lot of tools and suddenly wanted them to work w/ pandorabots and the language I wrote it in was C#. I just write XML-RPC specific to pandora bot to the C# interface and boom I'm done. Latter someone else writes one to Java and boom now all your other Java tools you wrote to work with different bots now works w/ XML-RPC and pandora.
----- Original Message ----
From: Noel Bush <noel at aitools.org>
I think it is great to define a standard interface to an AIML
interpreter. Of course, what you're considering expands the scope of
"AIML interpreter" somewhat, to include things like loading/reloading
AIML sets, setting/getting predicates externally, configuration, and so
forth. In the purest sense, the interface to an AIML interpreter is
just some kind of String getResponse(String). But as all of us know who
work on real-world AIML interpreters that are intended for use in
multiple contexts, there are so many additional concerns that always
need to be handled that it makes sense to have some guidance from a spec
about these, too.
It seems somewhat analogous to the aims of the DOM specification, where
you want to formally describe a set of common operations that are
performed with XML documents. In this case, you want to formally
describe a set of common operations that are performed with AIML
interpreters. A discussion about this may also draw attention to some
potentially interesting questions, such as the degree to which the
matching algorithm needs to be part of the AIML spec (i.e., is the trie
that is built by many AIML interpreters really the only way to
specify/implement the functional requirements of the matching
algorithm?). It might also be possible to offer some standardization
about handling multiple bots, removing categories, and more.
My question is, to what extent would ICE serve as a neutral
specification mechanism? Like AIML, it's under the GPL, which is great,
but what are its serious competitors? Does it have a chance of being
widely adopted, or is it likely to remain associated with this
particular company and cause open standards folks to shy away from it?
If I understand right from a quick glance at the docs, it looks like the
"Slice language" is essentially a C++ library, or something like that.
I suppose that would mean that there are a lot of tools around already
that can do interesting things with it, like produce other forms of
documentation. To what extent does a Slice/ICE specification need to be
supplemented with prose? Is it expressively limited or tortured in some
way by the basis in C++?
The AIML schema, for instance, while able to capture virtually
everything about the syntax of AIML, has no way of explaining how AIML
is to be processed, so it's necessary to keep a separate specification
that defines functionality. It might be sensible to remove all the
syntax specification from the AIML spec, and just include the schema,
leaving only what cannot be covered by the schema in the spec document
itself. But ideally, in the case of AIML as well as in the case of the
AIML interpreter interface description, you would like to see everything
in one form. An actual implementation is not such a great reference, as
it generally includes too many distractions not pertinent to the domain
(but here there's more and more along the lines of AOP/injection that
can help in uncluttering things). Basically you want as near as you can
get to an actual implementation without including anything that is
platform- or application- specific.
All could be a lot of fun to discuss.
Noel
More information about the alicebot-general
mailing list