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?