---------------------------------------- General update and dictionaries mai 01st, 2020 ----------------------------------------
It's been a while since I phlogged. Life has been busy, though I stayed
mostly at home. This weekend I finally made it to our cabin with my
family. Until last week, we were not allowed to visit our cabin because
its situated in another "fylke" (county) and due to covid-19
restrictions.
Anyhow, I completely ignored my previous phlog post about focussing, and
got carried away with implementing yet another RFC. This time wrote a
simple implementation of RFC2229: A Dictionary Server Protocol [1].
The standard from 1997 describes a TCP-based protocol for querying
dictionaries, like wordnet, The Devils Dictionary, the Jargon dictionary
and other freely available dicts.
Before the standard came along, the only available dictionary protocol
was the webster protocol, which is restricted to a single dictionary.
RFC2229 attempts to fix this and offers access to several dictionaries
including a number of strategies for finding words within an index.
Basically, there are two commands available: MATCH and DEFINE.
DEFINE is called with a database (that is, a dictionary) and a word to
define. If the word exists in the dictionary, a definition of the word
is returned.
This works of course only if the word exists in a dictionary. But how do
you look up words in the index? This is where the MATCH command comes
into play.
MATCH allows you to looks for words in an index with a certain strategy.
A strategy is the algorithm used to query the index. The simplest
strategy is "exact", which only matches the exact word. Another
strategy is "prefix", which returns a list of words starting with a
given prefix. Implementations are free to provide more strategies, like
soundex matching or levenshtein, thus providing some kind of spell
checking for words.
Besides these commands, the RFC describes commands for listing
dictionaries (SHOW DB), getting info about a certain database (SHOW
INFO), listing stragegies (SHOW STRAT) and some commands for information
about the server, like SHOW STATUS.
I wrote a quick implementation of a server using rust (surprise!)
available on github [2], currently hard-coded to two databases (Jargon
and Devils Dictionary). RFC2229 also allows for implementation specific
commands, prefix by "X". So I added a XRANDOM command that returns a
random word definition from the dictionary. Yay!
You can play with the server (or any server that implements RFC2229) by
telnet'ing to port 2628. Just enter HELP after connecting to show a list
over available commands. This is, btw, a nice feature of this protocol:
You can use telnet and explore the protocol using the integrated help
function.
One important feature missing, is to integrate the dictionary server
with gopher. It should be trivial to change the server to return
gophermaps instead of ascii definitions. Pull requests welcome!
[1] https://tools.ietf.org/html/rfc2229