LibDev Archived
LibDev launched in June 2005 with the following invitation:
LibDev is a site for those interested in libraries and networked information. Want to find a way to apply tags or social bookmarking to library content? Interested in how Wikipedia can serve libraries? Want to find a better way to do patron loads or talk about what identity management means to libraries? Looking for single sign-on solutions so patrons can move seamlessly from the campus portal to your OPAC without re-authenticating? Do you know your library is sitting on a goldmine of valuable data that you can’t use because there are too many systems and vendors who can’t or won’t talk to eachother?
Ryan Eby, David Walker and I posted 32 stories in the year or so it was going, and if you look around you’ll find a few that are still relevant and valuable now. Rather than lose that content to web vandals and spammers who whose efforts at defacing the old site were growing as our own interest in maintaining it was waning, I’ve moved it here.
People who looked at this item also looked at…
Related items
Hacking About In III’s Web OPAC
Ryan Eby credits John Blyberg for figuring it out, but the details are here: Passing Bib Numbers from the III OPAC.
People who looked at this item also looked at…
Related items
A small update
While we’ve let libdev waste away, we haven’t stopped posting elsewhere. Here are some posts on our personal blog that may be of interest to libdev readers.
On ebyblog
- Podcasting and the LMS – Podcast2JS
- Searching OpenWorldCat
- III OPAC Hold Request URLs
- OpenSearch, IE7 and the OPAC
On MaisonBisson.com
- WPopac: An OPAC 2.0 Testbed
- About My code4lib Presentation
- Standards Cage Match
- Lessons From The Microformat World
People who looked at this item also looked at…
Related items
How to create a Firefox Search Plugin – OpenWorldCat
Taking a break from talk of bigger ideas, here’s a simple thing you can do to add value and make it easier to search your offerings. I’m one of those people that prefer not to install a whole toolbar though I may be prone to install a search plugin or extension. I try to keep my UI free of too much clutter. I created one for my library back in May since it was so easy and since there has been a recent interest in it I thought I’d share how easy it is. If you can code a form in html or actually read form code off a page then you can create a plugin. For this example I will create one for OpenWorldCat through Google since I currently find it a pain in the ass to search it otherwise.
First lets take a look at the code you can use in a webpage to search OpenWorldCat via Google:
<form action="http://www.google.com/search" name="f">
<input maxlength="256" size="40" name="q" value="" />
<input type="hidden" name="ie" value="UTF-8" />
<input type="hidden" name="oe" value="UTF-8" />
<input type="hidden" name="hl" value="en\" />
<input type="hidden" name="domains" value="worldcatlibraries.org">
<input type="hidden" name="sitesearch" value="worldcatlibraries.org" />
<input type="submit" value="Search Google" name="btnG" />
</form>
I took most of this code I believe from Google and the OCLC demo. Now that we know what form inputs are used, we can start to create the source file for Firefox. In this example I am going to name it worldcat.src though you can name it as you wish. Here’s what the final source will look like. I’ll talk about the various parts afterwards:
# Mozilla+ search plugin for Google Open Worldcat Keyword Search (http://oclc.org)
# Author: Ryan Eby spam@spam.org
# Created: 28 December 2005
# Last Modified: 28 December 2005
#
# Country: US
# Language: en
# Category: 5 (Reference)
#
# Known issues: None.
#
<search
version="7.1"
name="OpenWorldCat - Google"
description="Search OpenWorldCat via Google"
action="http://www.google.com/search"
searchForm="http://www.google.com/search"
method="GET" >
<input name="q" user>
<input name="ie" value="UTF-8" />
<input name="oe" value="UTF-8" />
<input name="hl" value="en" />
<input name="domains" value="worldcatlibraries.org">
<input name="sitesearch" value="worldcatlibraries.org" />
<interpret
# Dummy section added to prevent spurious links parsing
browserResultType="result"
resultListStart="</body>"
resultListEnd="</html>"
>
</search>
<BROWSER
update="http://url/to/worldcat.src"
updateIcon="http://url/to/worldcat.png"
updateCheckDays="10"
>
Header Information
The first thing you will notice is the header information. This should include information on who wrote it, when it was created, when it was last modified, etc. This information is actually more for developer use than anything and helps others if they decide to modify it.
Search Information
This is where we include information on how we are going to search. First we specify the version of Netscape that the plugin is tested against. The documentation suggests 7.1. We then choose a name and description. We then set-up the actual form. As you can see I used the same action that the original form has. I used the same thing for searchForm as that will still take you to a Google search box at least. The rest of the inputs are the same as our form except that I removed the “type=hidden”. You’ll also note that the name=q input has user added to the end. This is what tells Mozilla that this is the input that the user will be entering.
Interpret
You can do some advanced things with the result set that comes back. In this case I just want the normal results page and I found the above works well. I’m not certain where I found it anymore. You can find out more about the interpret options on the mycroft documentation site for it.
Browser
As you can probably tell this is the area where you specify where your src file and your graphic are located. It also specifies how often it should check for an update. Depending on how often you are tweaking the code you may wish to change this value.
How to Offer It
Now that you have a src file you probably want to offer it for installation. You may also want to provide an image. It should be named the same as the source file, be 16×16 pixels and be either jpg, gif or png. You will want to upload both of these files to a directory on a webserver. You then include the following code in an html page, replacing the URLs with the correct paths to your files.
<script
type="text/javascript">
<!--
function errorMsg()
{
alert("Netscape 6 or Mozilla is needed to install a sherlock plugin");
}
function addEngine(name,ext,cat,type)
{
if1
{
//cat="Web";
//cat=prompt('In what category should this engine be installed?','Web')
window.sidebar.addSearchEngine(
"http://localhost.localdomain/plugins directory/"+name+".src",
"http://localhost.localdomain/plugins directory/"+name+"."+ext, name, cat );
}
else
{
errorMsg();
}
}
//-->
</script>
The code above will allow you to link to as many plugins as you want. You do so by adding the following to your html:
<a href="javascript:addEngine('worldcat','png','Reference',0)">OpenWorldCat Plugin</a>
As you can probably tell the information you pass in the addEngine area is the name you used for your files, the extension you used on your image and the category of the plugin. In this case I chose Reference. More information on installation can be found at the mycroft site.
In the end you should end up with something like this. Of course the page I created is bare. Give it a whirl and comment if you have problems.
People who looked at this item also looked at…
Related items
- typeof window.sidebar == "object") && (typeof
window.sidebar.addSearchEngine == "function" [↩]
Personalized Search
In reading The Search one of the topics that comes up is the goal of the perfect search. In order to achieve the perfect search it’s believed you need to have personalized search so that searches can be put into context and the likely search “intent” of the searcher. A person that searches for coffee a lot and a person who searches are mostly computer related may have a different intent of “java”. Right now the searcher is required to add more context to the item if they want good results but the goal is too move most of this to the backend.
Since I use Google a lot I went ahead and turned on their personlized search. While this is just the beginning, and doesn’t do the above, the interface is quite interesting and may give some ideas of what could be done in the OPAC. I’m not a huge fan of the whole saved records set-up, email, etc that some OPACs and online databases have but at least it’s something. I don’t remember when I turned on the search in google but it appears to have been sometime in December.
Personalized Search: Trends
As you can see above, Google breaks down my searches by date, time and frequency. You can click on the dates as well and see the top searches for that month, day or hour. While this looks like it would be more cool factor than useful I’ve already found it worthwhile. I had a search the other day where I went through many pages of results as I just couldn’t find the right keyword. I eventually found a page that was worthwhile though I forgot to bookmark it. No problem as Google now tells me which results I clicked on.
Personal Search: Bookmarks
If the trends didn’t catch your fancy, you may be interested in the bookmark feature. When you click on searches you can see your history and then “star” things you want to save. You can then also apply labels to it. For those with Gmail your already familiar with this interface. I can only presume that bookmarks will be integrated with gmail sometime in the future.
An interesting note: It tells me what my failed searches were. An interesting tidbit of data and something I may use in the future to help me refine searches.
Uses of the Data for OPACs
Setting aside the many privacy issues, what can this data be useful for if similar things were done in an OPAC environment. The first thing I can think of is suggestions. When you know what searches work and which ones fail then building smart suggestions for users becomes much more useful. Right now I’ve seen various implementations of suggested searches which are based on such things as whether there are results, etc. This is good in it’s own right as it prevents suggestions that don’t return anything, but it would be even better when you can bump up suggestions that have a high success ratio. This would be easier to create, presuming your library has holds, etc. If it doesn’t then it may be difficult to track “success” other than a specific item was viewed.
Another possibility is a smart citation list. The ability to keep and tag citations as well as the searches that got them adds another powerful layer to research. Some of this is already possible using external services but as most OPACs have some sort of “mark record” functionality it would be nice to have a more versatile system. Again, a nice API would be helpful here so that this information can be moved in and out of the system. The ability to organize research by project, go back to “good” searches if not enough information ended up being available and seeing what searches came up empty would all be helpful in this process.
There are probably a hundred other things that could be done on the server side that the patron never sees but these are just a few that can help on the public face of things. If you don’t mind your searches being logged to your account then I recommend giving it a whirl.
People who looked at this item also looked at…
Related items
LiveSearch and Clustered Displays
I’ve written on my blog multiple times about “LiveSearch” or dynamically loaded results. While heavy on the server it does give an interesting feedback mechanism as you can instantly refine your search and possibly find things that may have been lost otherwise or have just taken too much time to get to.
Thom Hickey has recently created some mockups of LiveSearch with OCLC records including subject headings, etc. Here’s the two so far:
What you should be able to see is an index to all the records that a large public library holds in WorldCat. We’ve extracted all the 5-word phrases from authors, titles, statement of responsibilty, and subject fields. It’s a bit of trick to get the right phrase from the right manifestation from the right work to display. We get the speed by loading all the information into memory in several flat files, and generating the screens from those.
As cool as those are (I really like the clean results) what actually caught my attention in the post was a screenshot of a clustered livesearch.
Casey recently posted here regarding clustered results and I think we may see much more of it in the future. With the increasing amount of information there is going to have to be more ways of drilling down and refining the content. And I’m not just talking the generic OPAC advanced search but more informative things such as what subjects are included, editions, popularity, relationships, etc. Limiting it to books or articles is nice but having hints and clues such as keywords and subjects adds the touch some people need to really make things relevant.
As I’ve written here before though, you have to be careful not to make things overly complicated. The results screen should probably avoid looking like a space shuttle cockpit. What do you think should be included in a results screen?
Technorati Tags: libraries, library2.0, navigation, OPAC, search, users
People who looked at this item also looked at…
Related items
Getting Alternate ISBNs
I’ve added the following function to the version of the XMLOPAC class I use internally so that I can get alternate ISBNs using OCLC’s xISBN service.
public function get_altisbn($isbn) {
$xmlopacurl = 'http://labs.oclc.org/xisbn/' . $isbn;
$xml = self::prep_xml($xmlopacurl);
$result = array();
foreach ($xml->xpath('/idlist/isbn') as $temp) {
$result[] = (string) $temp;
}
// the first element of the array is always the same as
// the query ISBN, array_shift deletes it from the array
array_shift($result);
return($result);
}
I then call it from within the get_opac_data()
function like this:
$result[altisbn] = self::get_altisbn($result[isbn]);
The result, of course, is an array of ISBNs that serves all sorts of meaningful purposes, like finding an ASIN when you don’t find a match for the cataloged ISBN.
Technorati Tags: isbn, library, libraries, oclc, php, web service, xml, xmlopac, xmlopac class
People who looked at this item also looked at…
Related items
Can you be trusted with Library 2.0?
If you haven’t been following along there has been an open discussion lately regarding ILS user rights and where OPACs are headed. In my recent post I wondered whether an open architecture might allow the faster paced changes that are needed in a technology and information-centric world. Since then Talis has responded again regarding John Blyberg’s response. I’m certain he will post with a better response since he has more first hand experience but I thought I’d address a few things.
First, I’ve read Talis’ whitepaper on Library 2.0 and have to say it has a lot of great ideas and states exactly what it should. In fact is says pretty much everything I would like to but in a much easier to sell to executive type language. For example:
Rather than being hidden in catalogues with a single web interface, stored in proprietary databases only visible via a project’s web site, or accessible only to users of certain machines physically connected to particular networks, Library 2.0 resources should be more widely exposed. They should be available to the wider web, visible to search engines such as Google, and harvestable into new applications and services built by the library, and by third parties.
Some bits are a bit confusing though and I don’t think I fully understand what they are attempting to do. They’re recent responses to John Blyberg’s posts make me even more wary. For example:
Looking at the issue from John’s end of the telescope it sounds so obvious and simple. Imagine looking at it from as a support analyst’s point of view. From her end of the telescope she can see [in Talis’ case] potentially 100+ Johns hacking away on their systems every day – a thought to drive you straight toward the caffeine in the morning!
So the whitepaper seems to give the impression that libraries should be able to build their own services while it would be a support nightmare for them to have access to the ILS data. Further reading of both the whitepaper and the various posts make me think that their idea of the Library 2.0 is a information stream and possibly even central datastore. The image I get is WorldCat with an API. You purchase streams in and out and build your services off that. I think such a thing might work for some but many would find giving up that level of control over their data and offerings.
I also disagree with the support argument as I’ve pointed out in a recent post if the architecture is done right so that “hacking” isn’t required then support can actually become easier as others have found. I also think the OPAC created by the 100+ Johns would likely be much better than any vendor supplied solution. With the amount of resources and integration required by many these days, a single solution just doesn’t work. What happens when an academic library needs to integrate with software that only exists at that university? While it’s nice that Talis has plans to include things like RSS, IM and the like how easy will it be for the library to add things that aren’t “hot technologies”?
It is a revamping of the whole architecture to get those nice to haves, and make it easy to add so so much more.
It’s good to see the architecture is being thought about. However I get the impression that the “easy to add” will be for vendors and their “approved partners”. The whitepaper had quite a few references to third-party partners and providers but didn’t really list libraries as being one of them that much.
Any SELECT which causes a substantial slow down in the performance of your ILS is dangerous for the reputation of your Library. Are you sure that all the bespoke work you do against your database is scalable, (eg RSS feeds) when used by the majority of you customers.
While I agree that such things could cause performance problems, having things more open could help a library scale as they want. I also think the reputation of the library is harmed when they have to answer patrons with “we’re waiting for the vendor”. Our university mail system recently had quite a few hick-ups that caused some hate and it went on for what many believed to be too long. The status message? “Waiting for patch from vendor”. Granted some things require core updates but others shouldn’t.
The message I’m starting to get from these conversations is that librarians can’t be trusted with library 2.0. That things will be different this time, don’t worry about it. I’ll be interested to see how it all turns out and how some of the open source ILS systems handle similar questions. What role should libraries have in their OPAC?
Technorati Tags: ILS, libraries, library2.0, OPAC, Talis, users
People who looked at this item also looked at…
Related items
Extending Blyberg’s XMLOPAC Class
Update: John updated the class to 1.5 and included this function.
AADL’s John Blyberg is doing some great stuff with III’s XML Server, and his XMLOPAC PHP class is just what we need to start making use of the product (and cut through the bad XML it outputs). I’ve started re-writing the work I did previously, and I’m taking good advantage of the get_opac_data()
function in that class.
But, I also needed a way to execute a search against the OPAC and get only the matching bib numbers back, so I extended the class with a get_opac_bibns()
function to do just that.
Here it is:
public function get_opac_bibns($searchterms) { $xmlopacurl = 'http://' . $this->opacserver . '/xmlopac/' . $searchterms; $result[xmlurl] = $xmlopacurl; $xmlraw = utf8_encode(file_get_contents($xmlopacurl)); $xmlraw = preg_replace('%>[&\x80-\xFF](.*?)<\/%s', '>GarbageData</', $xmlraw); $xml = simplexml_load_string($xmlraw); foreach ($xml->xpath('//RecordId') as $bib) { $result[bibns][] = substr(((string) $bib->RecordKey), 1); } return($result); }
How to use it? Add this function to the current version of the XMLOPAC class and call it like this:
<?php require_once('xmlopac.php'); $opac_server = 'opac.site.edu'; $xmlopac = new xmlopac; $xmlopac->opacserver = $opac_server; $searchterms = 'Xthomas+jefferson/0/0/1/150?avsrank=D'; $result = $xmlopac->get_opac_bibns($searchterms); print_r($result); ?>
Why only the bib numbers? Because I’m using those bib numbers against a cache of catalog data I’ve built in MySQL. Why go through all that? Because problems are meant to be overcome. I’m using this in my prototype catalog search that clusters search results based on catalog metadata (demoed in my NEASIS&T presentation on OPAC hacks recently).
Technorati Tags: bib numbers, bibnumbers, extension, libraries, library, library catalog, opac data, php, php class, query, web service, web services, xml server
People who looked at this item also looked at…
Related items
Hiding Complexity in Library 2.0
One of the benefits of a more open architecture for the OPAC, as discussed earlier, is that it allows you to have as simple or as complex an interface as you need. If your patrons don’t need a specific feature then you can turn it off. It also allows those with other requirements (such as privacy) to tweak it to meet their guidelines. Some libraries may have no problem storing data for personalized searches while others may have a strict privacy guideline forbidding such things. In general extensibility allows you to be more flexible.
Right now, however, it is a bit difficult to do such a task. You can tweak templates but any large changes or integration often takes lots of hacks and is not very elegant. The usability of such a system could also decrease as you try to hack on this feature or that. This is important as more and more libraries begin to look into ways of making the OPAC easier to use and more importantly, information easier to find. A recent quote caught my eye and it may be useful to keep in mind when discussing features for you OPAC and how to implement them.
“Google has the functionality of a really complicated Swiss Army knife, but the home page is our way of approaching it closed. It’s simple, it’s elegant, you can slip it in your pocket, but it’s got the great doodad when you need it. A lot of our competitors are like a Swiss Army knife open–and that can be intimidating and occasionally harmful.” (via Column Two)
Since there are likely some google haters in the crowd here’s a better takeaway from the article:
In a 2002 poll, the Consumer Electronics Association discovered that 87% of people said ease of use is the most important thing when it comes to new technologies.
In the ramp up and discussion for “Library 2.0″ the feature list keeps getting longer and the ideas ever more complex. Can you keep you OPAC from becoming a confusing mess? Can you even implement these features if you wanted to? When someone visits your OPAC are they eased into what’s available or hit head on by the thousand options they have? Can they find a book without knowing boolean constructs?
All of these questions are important as people will demand these features but also demand that they not get in the way. Is there really a reason to have a button to show the MARC record front and center? Can you tell who the OPAC was designed for? With a good URL structure such things could be relegated to the background for advanced users. In Wordpress if you put a /feed/ at the end on any URL you will get the feed for the item be it author, category, item (comments) or site. With a good architecture an OPAC could do similar things with /marc/ showing the MARC record, /feed/ giving the RSS/Atom, /xml/ giving the MARC XML or other XML syntax, etc. This allows you to expose what you want (add links on the page) or just leave it there for those “in the know” (librarians that want MARC). This is another area where Wordpress gives a good example of how it can be done. And it’s extensible so if you wanted /dc/ to give you a Dublin-Core output of the page you could do so if you wanted. There’s already a Wordpress blog that’s COins-PMH compliant, how long would it take you to make your OPAC as well (server-side)?
Does your OPAC allow you the flexibility to integrate, add/remove features or otherwise change as patron demand changes? Shouldn’t it?
Technorati Tags: ILS, libraries, OPAC, library2.0, users, wordpress