{"id":304,"date":"2009-04-27T21:24:36","date_gmt":"2009-04-28T02:24:36","guid":{"rendered":"http:\/\/dilettantes.code4lib.org\/?p=304"},"modified":"2009-04-27T21:24:36","modified_gmt":"2009-04-28T02:24:36","slug":"commoditizing-the-stack","status":"publish","type":"post","link":"https:\/\/rossfsinger.me\/blog\/2009\/04\/commoditizing-the-stack\/","title":{"rendered":"Commoditizing the Stack"},"content":{"rendered":"<p>I had the opportunity to attend and present at the excellent <a href=\"http:\/\/indico.ulib.sk\/MaKaC\/conferenceDisplay.py?confId=5\" target=\"_blank\">ELAG conference<\/a> last week in <a href=\"http:\/\/en.wikipedia.org\/wiki\/Bratislava\" target=\"_blank\">Bratislava, Slovakia<\/a>.\u00c2\u00a0 The event was advertised as being somewhat of a European <a href=\"http:\/\/code4lib.org\/conference\" target=\"_blank\">Code4Lib<\/a>, but in reality, the format seemed to me to be more in line with <a href=\"http:\/\/access2008.blog.lib.mcmaster.ca\/\" target=\"_blank\">Access<\/a>, which in my mind is a plus.<\/p>\n<p>Being the ugly American that I am, I made a series of provocative statements both in my presentation and in the <a href=\"http:\/\/search.twitter.com\/search?q=%23elag09\" target=\"_blank\">Twitter &#8220;back channel&#8221;<\/a> (or whatever they call hash tagging an event) about vendors, library standards, and a seeming disdain for both.\u00c2\u00a0 I feel like I should probably clarify my position here a bit, since Twitter is a terrible medium for in-depth communication and I didn&#8217;t go into much detail in my presentation (outside of saying vendor development teams were populated by scalliwags and ne&#8217;er-do-wells from previous gigs in finance, communications and publishing).<\/p>\n<p>Here was my point I was angling towards in my presentation:\u00c2\u00a0 your Z39.50 implementation is never going to get any better than it was in 2001.\u00c2\u00a0 Outside of critical bug fixes, I would wager the Z39.50 implementation has not even been <em>touched<\/em> since it was introduced, never mind improved.\u00c2\u00a0 The reason for this is my above &#8220;joke&#8221; about the development teams being staffed by people that do not have a library background.\u00c2\u00a0 They are literally just ignoring the Z-server and praying that nothing breaks in unit and regression testing.\u00c2\u00a0 There are only a handful of people that understand how Z39.50 works and they are all employed by IndexData.\u00c2\u00a0 For everybody else, it&#8217;s just voodoo that was there when they got here, but is a requirement for each patch and release.<\/p>\n<p>Thing is, even as hardware gets faster, and ILSes (theoretically) get more sophisticated, the Z-server just gets worse.\u00c2\u00a0 You would think that if this is the most common and consistent mechanism to get data out of ILSes that we would have seen some improvement in implementations as the need for better interoperability increases, but this is just not a reality that I have witnessed.\u00c2\u00a0 With the last two ILSes that I primarily worked with (Voyager and Unicorn) I would <strong>routinely<\/strong>, accidentally, <em>completely bring down<\/em> due to trying to use the Z39.50 server as a data source in applications.\u00c2\u00a0 For the <a href=\"http:\/\/umlaut.rubyforge.org\/\" target=\"_blank\">Umlaut<\/a>, I had to export the Voyager bib database into an external <a href=\"http:\/\/www.indexdata.dk\/zebra\/\" target=\"_blank\">Zebra<\/a> index to prevent the ILS from crashing <em>multiple times a day<\/em> just to look up incoming OpenURL requests.\u00c2\u00a0 Let me note that a <strong><em>vast<\/em><\/strong><em><strong> <\/strong><\/em>majority of these lookups were just ISSN or ISBN.\u00c2\u00a0 Unsurprisingly, the Zebra index held up with no problems.\u00c2\u00a0 <a href=\"http:\/\/search.library.gatech.edu\/srw\/GT\/GIT\" target=\"_blank\">It&#8217;s still working, in fact<\/a>.<\/p>\n<p>Talis uses Zebra for <a href=\"http:\/\/www.talis.com\/alto\/\" target=\"_blank\">Alto<\/a>.\u00c2\u00a0 It&#8217;s probably the main reason we can check off &#8220;SRU Support&#8221; in an RFP when practically nobody else can.\u00c2\u00a0 But, again, this means the Z\/SRU-server is sort of &#8220;outside&#8221; the development plan, delegated to IndexData.\u00c2\u00a0 Our SRU servers technically aren&#8217;t even conformant to <a href=\"http:\/\/www.loc.gov\/standards\/sru\/specs\/base-profile.html\" target=\"_blank\">the spec<\/a>, since <a href=\"http:\/\/ustie1.lib.sussex.ac.uk:2121\/prod_talis?operation=explain&amp;version=1.1\" target=\"_blank\">we don&#8217;t serve explain documents<\/a>.\u00c2\u00a0 I&#8217;m not sure anybody at Talis even was aware of this until I pointed it out last year.<\/p>\n<p>All of this is <em>not<\/em> intended to demonize vendors (really!) or bite the hand that feeds me.\u00c2\u00a0 It&#8217;s also not intended to denigrate library standards.\u00c2\u00a0 I&#8217;m merely trying to be pragmatic and, more importantly, I&#8217;m hoping we can make library development a less frustrating and backwards exercise for all parties (even the cads and scalliwags).<\/p>\n<p>My point is that initiatives like the <a href=\"http:\/\/diglib.org\/architectures\/ilsdi\/\" target=\"_blank\">DLF ILS-DI<\/a>, on paper, make a lot of sense.\u00c2\u00a0 I completely understand why they chose to implement their model using a handful of library standards (OAI-PMH, SRU).\u00c2\u00a0 The standards are there, why not use them?\u00c2\u00a0 The problem is in the reality of the situation.\u00c2\u00a0 If the specification &#8220;requires&#8221; SRU for search, how many vendors do you think will just slap <a href=\"http:\/\/www.indexdata.dk\/yazproxy\/\" target=\"_blank\">Yaz Proxy<\/a> in front of their existing (shaky, flaky) Z39.50 server and call it a day?\u00c2\u00a0 The OAI-PMH provider should be pretty trivial, but I would not expect any company to provide anything innovative with regards to sets or different metadata formats.<\/p>\n<p>As long as libraries are not going to be writing the software they use themselves, they need to reconcile the fact that suppliers of their software is more than likely not going to be written by librarians or library technologists.\u00c2\u00a0 If this is the case, what&#8217;s the better alternative?\u00c2\u00a0 Clinging to half-assed implementations of our incredibly niche standards?\u00c2\u00a0 Or figuring out what technologies are developing <em>outside<\/em> of the library realm that could be used to deliver our data and services?\u00c2\u00a0 Is there really, honestly, no way we could figure out how to use <a href=\"http:\/\/www.opensearch.org\/Home\" target=\"_blank\">OpenSearch<\/a> to do the things we expect SRU to do?<\/p>\n<p>I realize I have an axe to grind here, but this isn&#8217;t really about Jangle.<\/p>\n<p>I have seen OpenURL bandied about as a &#8220;solution&#8221; to problems outside of its current primary use of &#8220;retrieving context based services from scholarly citations&#8221; (I know this is not what OpenURL&#8217;s sole use case is, but it&#8217;s all it&#8217;s being used for.\u00c2\u00a0 Period).\u00c2\u00a0 The most recent example of this was in a <a href=\"http:\/\/indico.ulib.sk\/MaKaC\/internalPage.py?pageId=9&amp;confId=5\" target=\"_blank\">workshop (that I didn&#8217;t participate in) at ELAG<\/a> about how libraries could share social data, such as tagging, reviews, etc. in order to create the economies of scale needed to make these concepts work satisfactorily.\u00c2\u00a0 Since they needed a way to &#8220;identify&#8221; things in their collection (books, journals, articles, maps, etc.) somebody had the (understandable, re: DLF) idea to use OpenURL as the identifier mechanism.<\/p>\n<p>I realize that I have been accused of being &#8220;allergic&#8221; to OpenURL, but in general, my advice is that if you have a problem and you think OpenURL is the answer to said problem there&#8217;s actually probably a simpler and better answer to this if you approach it from outside of a library POV.<\/p>\n<p>The drawbacks of Z39.88 for this scenario are numerous, but I didn&#8217;t go into details with my criticisms in Twitter.\u00c2\u00a0 Here are a few reasons why I would recommend away from OpenURL for this (and they are not exclusive to this potential application):<\/p>\n<ol>\n<li>OpenURL context objects are <em>not<\/em> identifiers.\u00c2\u00a0 They are a means to describe a resource, not identify it.\u00c2\u00a0 A context object may <em>contain<\/em> an identifier in its description.\u00c2\u00a0 Use that, scrap the rest of it.<\/li>\n<li>Because a context object is a description and not an identifier, it would have to be parsed to try to figure out what exactly it is describing.\u00c2\u00a0 This is incredibly expensive, error prone and more sophisticated than necessary.<\/li>\n<li>It was not entirely clear how the context objects would be used in this scenario.\u00c2\u00a0 Would they just be embedded in, say, an XML document as a clue as to what is being tagged or reviewed?\u00c2\u00a0 Or would the consuming service actually be an OpenURL resolver that took these context objects and returned some sort of response?\u00c2\u00a0 If it&#8217;s the former, what would the base URI be?\u00c2\u00a0 If it&#8217;s the latter&#8230; well, there&#8217;s a lot there, but let&#8217;s start simple, what sort of response would it return?<\/li>\n<li>There is no current infrastructure defined in OpenURL for these sorts of requests.\u00c2\u00a0 While there are metadata formats that could handle journals, articles, books, etc., it seems as though this would just scratch the surface of what would need context objects (music, maps, archival collections, films, etc.).\u00c2\u00a0 There are no &#8216;service types&#8217; defined for this kind of usage (tags, reviews, etc.). The process for adding metadata formats or community profiles is not nimble, which would make it prohibitively difficult to add new functionality when the need arises.<\/li>\n<li>Such an initiative would <em>have<\/em> to expect to interoperate with non-library sources.\u00c2\u00a0 Libraries, even banding together, are not going to have the scale or attraction of LibraryThing, Freebase, IMDB, Amazon, etc.\u00c2\u00a0 It is not unreasonable to say that an expectation that <em>any<\/em> of these services would really adopt OpenURL to share data is naive and a waste of time and energy.<\/li>\n<li>There&#8217;s already a way to share this data, called <a href=\"http:\/\/sioc-project.org\/\" target=\"_blank\">SIOC<\/a>.\u00c2\u00a0 What we should be working towards, rather than pursuing OpenURL, is designing a URI structure for these sorts of resources in a service like this.\u00c2\u00a0 Hell, I could even be talked into <a href=\"http:\/\/info-uri.info\/registry\/docs\/misc\/faq.html\" target=\"_blank\">info URIs<\/a> over OpenURLs for this.<\/li>\n<\/ol>\n<p>We could further isolate ourselves by insisting on using our standards.\u00c2\u00a0 Navel gaze, keep the data consistent and standard.\u00c2\u00a0 To me, however, it makes more sense to figure out how to bridge this gap.\u00c2\u00a0 After all, the real prize here is to be able to augment our highly structured metadata with the messy, unstructured web.\u00c2\u00a0 A web that isn&#8217;t going to fiddle around with OpenURL.\u00c2\u00a0 Or Z39.50.\u00c2\u00a0 Or NCIP.\u00c2\u00a0 I have a feeling the same is ultimately true with our vendors.<\/p>\n<p>There comes a point that we have to ask if our relentless commitment to library-specific standards (in cases when there are viable alternatives) is actually causing more harm than help.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I had the opportunity to attend and present at the excellent ELAG conference last week in Bratislava, Slovakia.\u00c2\u00a0 The event was advertised as being somewhat of a European Code4Lib, but in reality, the format seemed to me to be more in line with Access, which in my mind is a plus. Being the ugly American [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":["post-304","post","type-post","status-publish","format-standard","hentry","category-philosophizing"],"_links":{"self":[{"href":"https:\/\/rossfsinger.me\/blog\/wp-json\/wp\/v2\/posts\/304","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rossfsinger.me\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rossfsinger.me\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rossfsinger.me\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rossfsinger.me\/blog\/wp-json\/wp\/v2\/comments?post=304"}],"version-history":[{"count":2,"href":"https:\/\/rossfsinger.me\/blog\/wp-json\/wp\/v2\/posts\/304\/revisions"}],"predecessor-version":[{"id":306,"href":"https:\/\/rossfsinger.me\/blog\/wp-json\/wp\/v2\/posts\/304\/revisions\/306"}],"wp:attachment":[{"href":"https:\/\/rossfsinger.me\/blog\/wp-json\/wp\/v2\/media?parent=304"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rossfsinger.me\/blog\/wp-json\/wp\/v2\/categories?post=304"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rossfsinger.me\/blog\/wp-json\/wp\/v2\/tags?post=304"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}