One thing can lead to another, and it usually does. My last aside questioned David Weinberger’s quote in American Libraries that humans are hard-wired to externalize knowledge (e.g. writing), and suggested that it must have a social basis instead. I wanted to learn more and began reading Being there: putting rain, body, and world together again by Andy Clark, the book Weinberger references.
I’m about halfway through, and Clark does seem to be leading up to a link between intelligence and external knowledge, and in particular that our intelligence comes from the interaction between our brains, bodies, and our environment, but the first half of the book is stimulation enough.
The first models of artificial intelligence were based on the idea of the brain as a central logical controller. These systems were limited because they could only be intelligent about the information stored in the “brain”. A chess program is useless for small talk.
Clark writes about a present shift in the field of robotics (Being There was published in 1996), where robotocists began to design machines without central controlling systems, and instead programmed their individual moving parts to work independently and communicate with one another. These were sometimes called “mobots” for “mobile robots”.
For example, an insect robot could be programmed to walk by giving each leg a few simple rules, such as, “if the leg opposite of you goes back, swing forward”. If you’re reminded of the documentary Fast, Cheap and Out of Control, good job - Rodney Brooks, the roboticist featured in that film is referenced heavily in this book.
This, also, is often how insects work together - each one gets the same job. When ants find food, they leave a strong trail so that other ants can follow it. The next ant that finds food in the same place builds up the trail, and eventually, all of the ants in Oregon know where your cat food dish is.
So. Libraries. How would we apply this idea? What do we do centrally that might work better if we each followed a few simple rules?
In the summer of 1995, I got my first job in a library, at the university library in the interlibrary loan office. I loved it, and it lead me into librarianship. I loved the reciprocity and I loved the processes and all the wacky rules and procedures.
For example, if someone requested a book, first we checked the three-college catalog, then we checked our filing cabinet to see if we had requested the same book in the past two years. We didn’t want to ask the same library for the same book twice in a two-year period, and keeping the requests let us track who we had requested from. In the spirit of reciprocity, we didn’t want to lean too hard on any other single library, and especially not one belonging to an institution more ivied than we were, or for that matter a public library anyone had heard of - those public libraries are just too busy. The next January, it was going to be my job to go through the drawer to remove and destroy the older-than-two-years records.
We filed away all of our article requests as well, and these took up the rest of the cabinet. Attached were not just the institutions we requested them from, but their holdings for the title as well. Nothing was worse than getting a request for an article in a volume of a periodical you didn’t own. It wastes everyone’s time. Besides, when a professor in the psychology department is angling for tenure and wants several articles from the same publication, it helps to spread the work around.
What made both of these tasks possible was the fact that my time, at $7.50 an hour, was less valuable than the interlibrary loan librarian’s, or his assistant, who spent hours at a DOS terminal connected to Dublin, Ohio on a dedicated line: the central brain.
But all this is just an excuse to talk about my first library job, I don’t actually want to reinvent interlibrary loan, though I think any system can always be improved. Besides, ILL has been reinvented enough; Docster is still my favorite.
Instead, lets consider collaborative virtual reference.
Today, there are few models for libraries to share virtual reference questions with each other. OCLC’s 24/7 Cooperative has everyone get in the pool together, then each library answers whatever questions they find in the sludge. Oregon’s statewide collaborative works much the same way, except we’ve got it set up so individual libraries can have their own pool that overflow into the big one when no one is paying attention. It’s just like Terwilliger Hot Springs.
We also collaborate with our sister service in Ohio, though instead of sharing a pool, we each have our own (like Bagby Hot Springs!), and the front end of our software asks a couple of questions in making a decision about where to send each patron: Is an Oregon librarian online? What day and hour is it?
I am still a huge fan of the 24/7 Cooperative, and cooperative reference in general, but the main problems are that librarians are assigned shifts on the virtual desk where nothing happens and that smaller libraries often end up picking up the slack for the larger statewide systems.
Could we avoid these problems if, instead of a central controller routing patrons, we had each library operate independently?
An example that comes to mind is Aardvark, a question and answer service which routes questions to experts, based on the subject and other parameters set by the experts (a ‘brain’). If an expert can’t or doesn’t want to answer a question, they can pass, making decisions independent of the central controller.
As a librarian, Aardvark befuddles me. I can answer questions about anything, ok? My two areas of expertise are regular expressions and /.*/. As far as Aardvark is concerned, they can’t believe anyone could be so arrogant. For mostly other reasons, I don’t answer questions through Aardvark, but I know someone who does sometimes.
So what would it look like if libraries answered virtual reference questions for each other, but without a central controller, not even in Aardvark’s style?
First of all, it could work independent of software. Virtual reference starts with HTML forms, and I could easily redirect my HTML form to any other virtual reference service.
So patrons submit questions using HTML forms and a controller program - can I call it a mini-brain? - makes a decision: do I answer this question, or do I refer it to another mini-brain? If it answers, a chat is initiated. If not, the next mini-brain makes the same decision.
Now, a couple of things here: a mini-brain has to know how to talk to other mini-brains, and it has to have some information to make its decisions: Are you there? How long is the wait? How long is the wait upstream? It also has to store this information for when another mini-brain asks it the same questions.
Different mini-brains - okay, I better just call them nodes - could be programmed with different logic, but basically, it will forward the question to the node with the shortest wait (or shortest upstream wait). If a node is not available, it can still forward questions to the next one.
Z E
| |
B - A - C - D
So, node A gets a question, but is busy. It asks nodes B and C for help. Node C has a shorter wait time, so the question goes there. Node C checks in with nodes D and E and decides to answer the question. All this happens in microseconds and the patron doesn’t know, or care, what is going on.
There’s a problem though, if one controller-mini-brain-node initiates a disproportionate number of questions, then it’s neighbors will see heavy traffic too.
One solution might be just to do nothing. As the questions come in, the availability and wait time locally will change, and questions will be routed elsewhere.
Another solution is the dosey-doe. The dosey-doe rule says, “after forwarding a question to a node, change places with it”. After node A sends it’s question to node C, node A would be connected to nodes C, D and E. Node C would be connected to nodes A, B and Z.
Square dance aficionados will note that that this is not what ‘dosey doe’ means, and contra dancers will insist on spelling it differently as well, but here’s the diagram after the switch:
Z E
| |
B - C - A - D
If a new question came to node A right away, it would be unlikely that node C was available or less busy.
In this way, libraries could provide collaborative virtual reference independent of software, with no need for scheduling, and be able to distribute traffic equitably without a central, controlling system.



Interesting idea. You’d need to figure out how many nodes you’d need to manage the amount of traffic. As traffic increased, would there be a call for nodes to join in? Would each node be subject specialist or a generalist?
And what’s /.*/.?
“regular expressions”, for nerds, means a formal language for matching patterns in text. i mostly know regular expressions for the programming language perl, though other languages and applications use them too, microsoft word, for example, if you find-and-replace and click ‘match patterns’.
in perl, a regular expression begins and ends with the same character, though conventionally, it is a slash, /.
/.*/, then, means a regular expression matching .*, where . means ‘any character’ and * means ‘any number of times’.
so /.*/ means ‘anything’ or ‘everything’, in the language of regular expressions.
iii allows the use of regular expressions in some of the behind-the-scenes tools, but generally, library searching uses some other kind of wildcard character - * or ? to mean “anything” or “truncate”.
in a database, you might use dog* to match ‘dog’, ‘dogs’ or ‘doggerel’ in a database, the regular expression /dog*/ would match dog, dogg, doggg, dogggg, and on and on to infinite g’s. infinite g’s: it’s like science fiction gangsta rap. to match ‘dog’ or ‘dogs’, you would use /dogs?/, where the ? indicates “0 or 1 time”, and applies to the character immediately before, so ‘dog’, with or without an s on the end, but not ‘doggonnit’.
see? nerd.
i’m not really an expert in this, but i know enough to get into trouble, and to crack jokes about it. the main problem, for people like me, is that because i know how to use this tool, i use it even when a simpler tool would work more efficiently. this is okay for hacking, but can be dangerous for Real Programming.
i think if traffic increased, new questions would go around around until they got answered. patrons who waited too long would disconnect. could we make it grow on it’s own? i dunno. that part needs people to participate.
you could program a mini-brain to take into consideration whatever you want it to. it could consider subject expertise, why not? but i hope it wouldn’t. nothing to me indicates that patrons come to collaborative virtual reference services looking for subject expertise. i can’t recall ever seeing a patron complain that their librarian wasn’t expert in the right subject, or praise a librarian’s skills in a particular area. but hey, who wants to help write an article? i have six years of surveys we could study.
not to say that subject expertise isn’t valuable, just that you can’t expect patrons to negotiate it. if you want to tell people that you can improve their lives by answering any question, you can’t say, ‘um well, really, i only want you to ask questions that i am an expert at answering’.
but librarians like the power and authority that subject expertise gives us, so we are drawn to create systems with some kind of subject-related central controller.
see for example the library of congress’ ‘ask a librarian’ page. http://www.loc.gov/rr/askalib/
this goes for physical arrangements also - can you think of any reason why a building should have fifteen service points that patrons should have to choose from when they ask their question? no, the logic there should be to make help available in every corner of the space, regardless of the subject of the query. and the same it should be online.