Misc ideas & comments
David Gadbois
gadbois@cyc.com
Fri, 27 Mar 1998 12:10:41 -0600
Date: Fri, 27 Mar 1998 09:37:18 -0600
From: David Tillman <dtillman@cannonexpress.com>
The symbol 'bob would be used to look up all extra info in a LDAP
type structure.
Comments? How did Lip machines store user info?
Genera uses a distributed namespace database. The namespaces
functions map between object classes (users, hosts, networks, sites,
printers, etc) and names to objects. There is a functional interface
as well as various GUI tools that let you view and edit the
information.
NET:FIND-OBJECT-NAMED is the major lookup function. It takes care of
checking the validity of the locally-stored information against what
the namespace server has and retrieving information from the server if
necessary.
>(net:find-object-named :user "Gadbois")
#<NET:USER GADBOIS 21012204147>
T
>(describe *)
#<NET:USER GADBOIS 21012204147>, an object of flavor NET:USER,
has instance variable values:
FLAVOR:PROPERTY-LIST:
(:USER-PROPERTY ((:INITIALS "DGG")
(:UNIX-HOME-DIRECTORY "WIGGUM:/wiggum0/home/gadbois/"))
:BIRTHDAY "July 30"
:MAIL-ADDRESS ("gadbois" #<FS:UNIX-HOST CATBERT 21012206116>)
:HOME-HOST #<FS:LISPM-HOST ALEXANDRIA 21012202317>
:HOME-PHONE "512 502 xxxx"
:HOME-ADDRESS ""
:WORK-PHONE "512 342 xxxx"
:WORK-ADDRESS ""
:PERSONAL-NAME "Gadbois, David"
:LISPM-NAME "Gadbois")
NETI:CLASS: :USER
NETI:NAMES: (#<NETI:NAME CYC|GADBOIS 21012204136>)
NETI:VALIDATION-TIMESTAMPS: [...]
SI:PERSONAL-NAME: "Gadbois, David"
SI:PERSONAL-NAME-FIRST-NAME-FIRST: "David Gadbois"
#<NET:USER GADBOIS 21012204147>
The particular implementation has a couple of shortcomings. One is
that there is no meta level. You have to know the base class names,
and the database has only a single level of class distinctions itself.
Another is that the distributed-database aspects of it were always
pretty shakey: It is a major pain to force consistency and make big
changes in the database. I recall the TI implementation was much
better in the latter respect.
If I were redoing this sort of thing from scratch, I'd come up with
some abstraction layer that could cover lispm namespaces, X.500, LDAP,
NDS, UNIX /etc files, Windows registries, SNMP MIBs, DNS, WINS, and
whatever Microsoft is doing with their distributed directory stuff
[1]. That way, it would be easy to plug into existing environments,
and you'd have an automatic application lever for sorting the current
directory services mess out.
--David Gadbois
[1] I've probably missed a dozen others. Aren't standards fun?