Hello everyone,
I'm working on a server-client architecture for Apertium for this year's GSoC proposal;
currently, I've implemented a XML-RPC server (using thread pooling to manage multiple connections, a simple authentication module to authenticate users (useful, for example, if you want to implement per-user quotas), signal handling to clean up everything for example if SIGINT is received, exceptions to manage failures, accept SSL connections, an XML configuration file and some other things) using C++, and some sample clients in Python, Ruby, Java and Perl (so it's easier to integrate translation capabilities in systems like X-Chat or irssi, i.e. allowing scripting capabilities);

here is an example of how to interface with the server using Python:

pasquale@chomsky:~/gsoc$ python
Python 2.5.4 (r254:67916, Feb 17 2009, 20:16:45)
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import xmlrpclib
>>> proxy = xmlrpclib.ServerProxy("http://localhost:8080/ApertiumServer")
>>> print "Available languages: %s" %proxy.listLanguagePairs()
Available languages: ['es-fr', 'es-en', 'en-ca', 'oc-es', 'fr-es',
'oc_aran-ca', 'ca-fr', 'ca-es', 'ca-eo', 'eco-es-ca', 'eco-es-fr', 'pt-ca',
'pt-gl', 'ca-es-multi', 'es-pt_BR', 'ro-es', 'eco-ca-es', 'es-ca-multi',
'gl-es', 'es-gl', 'es-pt', 'en-es', 'fr-ca', 'oc_aran-es', 'pt-es',
'ca-eo-translit', 'eco-fr-es', 'es-eo', 'oc-ca', 'es-eo-translit', 'es-oc',
'es-ca', 'ca-en', 'gl-pt', 'ca-pt', 'es-oc_aran', 'ca-oc', 'ca-oc_aran']

and here's the code: https://apertium.svn.sourceforge.net/svnroot/apertium/branches/gsoc2009/deadbeef/

the "listLanguagePairs()" method is currently implemented here:

the next important step in implementing a fully functional Apertium Server will consist in interfacing lttoolbox and apertium with the server code; the best thing to accomplish this IMHO could be turning apertium and lttoolbox into shared libraries (for example /usr/lib/lttoolbox-3.1.0.so) so their functionalities can be accessed easily from external programs (for example, Java programs using JNI etc.) but I'd really like to get some feedback from you about this;
I hope you like the code and everything!

Thanks a lot in advance for any feedback.
Best regards,

Pasquale Minervini