Now that I have extensive experience and knowledge of .NET, I am re-designing this library to include several modifications and improvements. The definite modifications will be (in no particular order):
- Better cross-platform compatibility: .NET 1.1 and 2.0 as well as MONO support.
- A significant change in the architecture of the library (more modular to make it easier for developers to extend and add functionality).
- Better (i.e. more efficient and standards-compliant) AIML support.
- A simpler and more logical API.
I also aim (but no promises) to include the following features (in order of priority):
- A means of saving the bot's "brain" as a binary file. Loading a binary file into memory will be significantly faster than having to re-load and process the AIML every time the software starts up.
- The option to run the library with at least two different types of backend:
- The regular in-memory "brain" built from the AIML or binary file described above.
- A relational database (initially SQL Server2000/2005, MySql and PostgreSQL) and associated code to import and process the AIML into a relational structure.
- The implementation of some non-AIML compliant learning algorithms so the bot's vocabulary and scope for conversation grows.
- User profiling for better awareness of conversational context.
- Some simple code snippets and examples for developers to get started.
In addition to the work on Program#, I have been in touch with the developers of a Ruby version of the standard AIML bot (ProgramR).
By their own admission, the project is very much "alpha" code. I am going to spend time contributing to this project as both a bug fixer and implementer of new features.
My reasons for doing this are to:
- Deepen my understanding of the capabilities and stylistic conventions of the Ruby programming language.
- Advance ProgramR to the same level of maturity as Program#.
- Help bring into existence something insanely useful.
- Create a platform upon which new chat-bot techniques can be easily tried and tested.
Ultimately, both Program# and ProgramR will implement only the minimum of required features in the simplest, easiest and most helpful way possible and become solid foundations upon which bespoke systems can be built.