Your SlideShare is downloading. ×
0
Awash in a sea of connections: making Evergreen talk <ul><li>Galen Charlton, Equinox Software </li></ul><ul><li>28 April 2...
This and that <ul><li>A little planning, a little technical </li></ul><ul><li>Linking with online services </li></ul><ul><...
Planning <ul><li>Priorities </li></ul><ul><li>Testing </li></ul>
... and technical <ul><li>OpenSRF: the Swiss army chainsaw of talking to Evergreen </li></ul><ul><li>... this is not about...
Linking with online services <ul><li>Book jackets </li></ul><ul><li>“Enhanced content” </li></ul><ul><li>Whither an ISBN/O...
Ye olde legacy protocols <ul><li>SIP2 </li></ul><ul><li>Z39.50 </li></ul><ul><li>SRU/W </li></ul><ul><li>unAPI </li></ul>
Pulling data in <ul><li>Bibliographic data </li></ul><ul><li>Patron data </li></ul>
Pushing data out <ul><li>Discovery interfaces </li></ul><ul><li>A data feed is just another name for a report </li></ul>
Specific examples <ul><li>Book jackets </li></ul><ul><li>SIP2 </li></ul>
Book jackets <ul><li>Out of the box </li></ul><ul><ul><li>OpenLibrary, Syndetics, ContentCafe,  Amazon </li></ul></ul><ul>...
Book jackets out of the  – opensrf.xml <ul><li><added_content> </li></ul><ul><li><!-- load the OpenLibrary added content m...
JAAS <ul><li>http://<evergreen>/opac/extras/ac/jacket/medium/9780590353403 </li></ul><ul><li>From ISBN (or soon, thanks to...
JAAS is not just jackets <ul><li>Let’s look at that URL again: </li></ul><ul><li>http://<evergreen>/opac/extras/ac/jacket/...
Added content handlers <ul><li>Open-ILS/src/perlmods/lib/OpenILS/WWW/AddedContent/OpenLibrary.pm </li></ul><ul><li>sub  ja...
Adding added content handlers <ul><li>Figure out how to fetch the content – usually some kind of web service </li></ul><ul...
New jacket source <ul><li>Should supply jacket_small(), jacket_medium(), and jacket_large() </li></ul>
Another approach <ul><li>Instead of using the enhanced content handler, supply a <div> and use JavaScript provided by the ...
Example: ChiliFresh <ul><li>eg_vhost.conf: </li></ul><ul><li># Specify a ChiliFresh account to integrate their services wi...
Example: ChiliFresh <ul><li>Open-ILS/web/opac/skin/default/xml/rdetail/rdetail_extras.xml: </li></ul><ul><li><!-- ChiliFre...
Example: ChiliFresh <ul><li>Open-ILS/web/opac/skin/default/js/rdetail.js: </li></ul><ul><li>// ChiliFresh </li></ul><ul><l...
Data quality is key <ul><li>Records must have accurate identifiers </li></ul><ul><li>Of course, quality of enhanced conten...
SIP2 <ul><li>Self-checkout, patron authentication (e.g., ezProxy), PC management </li></ul><ul><li>Old-school standard: fa...
SIP2 setup <ul><li>How many devices and services? </li></ul><ul><li>Raw vs. Telnet (but either way, secure it!) </li></ul>
oils_sip.xml <ul><li><listeners> </li></ul><ul><li><service </li></ul><ul><li>port=&quot;8023/tcp&quot; </li></ul><ul><li>...
oils_sip.xml <ul><li><institutions> </li></ul><ul><li><institution id=&quot;gapines&quot; implementation=&quot; OpenILS::S...
oils_sip.xml <ul><li><accounts> </li></ul><ul><li><login id=&quot;scclient&quot; password=&quot;clientpwd&quot; institutio...
SIP2 flow <ul><li>SIP request to OpenNCIP </li></ul><ul><li>OpenNCIP parses request, then passes off to Evergreen’s OpenNC...
General points <ul><li>You don’t have to teach OpenSRF just to get data out of Evergreen ... you can build services on top...
Thanks! <ul><li>Galen Charlton </li></ul><ul><li>VP for Data Services, Equinox </li></ul><ul><li>[email_address] </li></ul>
Upcoming SlideShare
Loading in...5
×

Awash in a sea of connections

1,483

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,483
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Awash in a sea of connections"

  1. 1. Awash in a sea of connections: making Evergreen talk <ul><li>Galen Charlton, Equinox Software </li></ul><ul><li>28 April 2011 </li></ul>
  2. 2. This and that <ul><li>A little planning, a little technical </li></ul><ul><li>Linking with online services </li></ul><ul><li>Ye olde legacy protocols </li></ul><ul><li>Pulling data in </li></ul><ul><li>Pulling data out </li></ul>
  3. 3. Planning <ul><li>Priorities </li></ul><ul><li>Testing </li></ul>
  4. 4. ... and technical <ul><li>OpenSRF: the Swiss army chainsaw of talking to Evergreen </li></ul><ul><li>... this is not about OpenSRF </li></ul><ul><li>... in fact, pretend that OpenSRF doesn’t exist – alas, most systems are uncouth and don’t speak it </li></ul>
  5. 5. Linking with online services <ul><li>Book jackets </li></ul><ul><li>“Enhanced content” </li></ul><ul><li>Whither an ISBN/OCLC #/UPC goes, linky goodness follows </li></ul>
  6. 6. Ye olde legacy protocols <ul><li>SIP2 </li></ul><ul><li>Z39.50 </li></ul><ul><li>SRU/W </li></ul><ul><li>unAPI </li></ul>
  7. 7. Pulling data in <ul><li>Bibliographic data </li></ul><ul><li>Patron data </li></ul>
  8. 8. Pushing data out <ul><li>Discovery interfaces </li></ul><ul><li>A data feed is just another name for a report </li></ul>
  9. 9. Specific examples <ul><li>Book jackets </li></ul><ul><li>SIP2 </li></ul>
  10. 10. Book jackets <ul><li>Out of the box </li></ul><ul><ul><li>OpenLibrary, Syndetics, ContentCafe, Amazon </li></ul></ul><ul><li>Adding another </li></ul>
  11. 11. Book jackets out of the – opensrf.xml <ul><li><added_content> </li></ul><ul><li><!-- load the OpenLibrary added content module --> </li></ul><ul><ul><ul><ul><li><module> OpenILS::WWW::AddedContent::OpenLibrary </module> </li></ul></ul></ul></ul><ul><li><!-- </li></ul><ul><li>Max number of seconds to wait for an added content request </li></ul><ul><ul><ul><ul><li>to return data. Data not returned within the timeout is considered a failure </li></ul></ul></ul></ul><ul><li>--> </li></ul><ul><li><timeout>1</timeout> </li></ul>
  12. 12. JAAS <ul><li>http://<evergreen>/opac/extras/ac/jacket/medium/9780590353403 </li></ul><ul><li>From ISBN (or soon, thanks to Jeff Godin, bib ID) to cover image </li></ul><ul><li>“JAAS” gives us caching, and will let us do fancier tricks </li></ul>
  13. 13. JAAS is not just jackets <ul><li>Let’s look at that URL again: </li></ul><ul><li>http://<evergreen>/opac/extras/ac/jacket/medium/9780590353403 is really </li></ul><ul><li>http://<evergreen>/opac/extras/ac/ type / format / identifier </li></ul>
  14. 14. Added content handlers <ul><li>Open-ILS/src/perlmods/lib/OpenILS/WWW/AddedContent/OpenLibrary.pm </li></ul><ul><li>sub jacket_small { </li></ul><ul><li>my( $self, $key ) = @_; </li></ul><ul><li>return $self->send_img( </li></ul><ul><li>$self->fetch_cover_response('-S.jpg', $key)); </li></ul><ul><li>} </li></ul><ul><li>... </li></ul><ul><li>sub ebooks_html { </li></ul><ul><li>my( $self, $key ) = @_; </li></ul><ul><li>my $book_data_json = $self->fetch_data_response($key)->content(); </li></ul><ul><li>$logger->debug(&quot;$key: &quot; . $book_data_json); </li></ul>
  15. 15. Adding added content handlers <ul><li>Figure out how to fetch the content – usually some kind of web service </li></ul><ul><li>OpenILS::WWW::AddedContent::Foo with following methods </li></ul><ul><ul><li>new($config) </li></ul></ul><ul><ul><li>type_format ($key) </li></ul></ul>
  16. 16. New jacket source <ul><li>Should supply jacket_small(), jacket_medium(), and jacket_large() </li></ul>
  17. 17. Another approach <ul><li>Instead of using the enhanced content handler, supply a <div> and use JavaScript provided by the content source </li></ul><ul><li>Examples: LibraryThing, Syndetics Plus, ChiliFresh </li></ul>
  18. 18. Example: ChiliFresh <ul><li>eg_vhost.conf: </li></ul><ul><li># Specify a ChiliFresh account to integrate their services with the OPAC </li></ul><ul><li>#SetEnv OILS_CHILIFRESH_ACCOUNT </li></ul><ul><li>#SetEnv OILS_CHILIFRESH_PROFILE </li></ul><ul><li>#SetEnv OILS_CHILIFRESH_URL http://chilifresh.com/on-site/js/evergreen.js </li></ul>
  19. 19. Example: ChiliFresh <ul><li>Open-ILS/web/opac/skin/default/xml/rdetail/rdetail_extras.xml: </li></ul><ul><li><!-- ChiliFresh setup --> </li></ul><ul><li><script language='javascript' type='text/javascript'> </li></ul><ul><li>var chilifresh = '<!--#echo var=&quot;OILS_CHILIFRESH_ACCOUNT&quot;-->'; </li></ul><ul><li>if (chilifresh == '(none)') { chilifresh = false; } </li></ul><ul><li></script> </li></ul><ul><li><!--if expr=&quot;${OILS_CHILIFRESH_ACCOUNT} && ${OILS_CHILIFRESH_ACCOUNT}!='(none)'&quot;--> </li></ul><ul><li><input type=&quot;hidden&quot; id=&quot;chilifresh_account&quot; name=&quot;chilifresh_account&quot; </li></ul><ul><li>value=&quot;<!--#echo var='OILS_CHILIFRESH_ACCOUNT'-->&quot; /> </li></ul><ul><li><input type=&quot;hidden&quot; id=&quot;chilifresh_profile&quot; name=&quot;chilifresh_profile&quot; </li></ul><ul><li>value=&quot;<!--#echo var='OILS_CHILIFRESH_PROFILE'-->&quot; /> </li></ul><ul><li><input type=&quot;hidden&quot; id=&quot;chilifresh_version&quot; name=&quot;chilifresh_version&quot; </li></ul><ul><ul><ul><ul><li>value=&quot;onsite_v1&quot; /> </li></ul></ul></ul></ul><ul><li><input type=&quot;hidden&quot; id=&quot;chilifresh_type&quot; name=&quot;chilifresh_type&quot; value=&quot;search&quot; /> </li></ul><ul><li><script language=&quot;javascript&quot; type=&quot;text/javascript&quot; </li></ul><ul><ul><ul><li>src=&quot;<!--#echo var='OILS_CHILIFRESH_URL'-->&quot;></script> </li></ul></ul></ul><ul><li><!--endif--> </li></ul>
  20. 20. Example: ChiliFresh <ul><li>Open-ILS/web/opac/skin/default/js/rdetail.js: </li></ul><ul><li>// ChiliFresh </li></ul><ul><li>if (chilifresh && chilifresh != '(none)' && currentISBN) { </li></ul><ul><li>$('chilifreshReviewLink').setAttribute('id','isbn_'+currentISBN); </li></ul><ul><li>$('chilifreshReviewResult').setAttribute('id','chili_review_'+currentISBN); </li></ul><ul><li>unHideMe($('rdetail_reviews_link')); </li></ul><ul><li>unHideMe($('rdetail_chilifresh_reviews')); </li></ul><ul><li>try { </li></ul><ul><li>chili_init(); </li></ul><ul><li>} catch(E) { </li></ul><ul><li>console.log(E + 'n'); </li></ul><ul><li>hideMe($('rdetail_reviews_link')); </li></ul><ul><li>hideMe($('rdetail_chilifresh_reviews')); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  21. 21. Data quality is key <ul><li>Records must have accurate identifiers </li></ul><ul><li>Of course, quality of enhanced content is key </li></ul><ul><ul><li>OpenLibrary allows for sharing and improving its cover images and metadata </li></ul></ul>
  22. 22. SIP2 <ul><li>Self-checkout, patron authentication (e.g., ezProxy), PC management </li></ul><ul><li>Old-school standard: fast, not verbose </li></ul><ul><li>But also: can easily be set up insecurely </li></ul>
  23. 23. SIP2 setup <ul><li>How many devices and services? </li></ul><ul><li>Raw vs. Telnet (but either way, secure it!) </li></ul>
  24. 24. oils_sip.xml <ul><li><listeners> </li></ul><ul><li><service </li></ul><ul><li>port=&quot;8023/tcp&quot; </li></ul><ul><li>transport=&quot;telnet&quot; </li></ul><ul><li>protocol=&quot;SIP/1.00&quot; </li></ul><ul><li>timeout=&quot;60&quot; /> </li></ul><ul><li><service </li></ul><ul><li>port=&quot;127.0.0.1:6001/tcp&quot; </li></ul><ul><li>transport=&quot;RAW&quot; </li></ul><ul><li>protocol=&quot;SIP/2.00&quot; </li></ul><ul><li>timeout=&quot;60&quot; /> </li></ul><ul><li></listeners> </li></ul>
  25. 25. oils_sip.xml <ul><li><institutions> </li></ul><ul><li><institution id=&quot;gapines&quot; implementation=&quot; OpenILS::SIP &quot;> </li></ul><ul><li><!-- This defines what actions we want to allow </li></ul><ul><li>remote clients (self-check machines) to perform --> </li></ul><ul><li><policy </li></ul><ul><li>checkin=&quot;true&quot; </li></ul><ul><li>checkout=&quot;true&quot; </li></ul><ul><li>renewal=&quot;true&quot; </li></ul><ul><li>status_update=&quot;false&quot; </li></ul><ul><li>offline=&quot;false&quot; </li></ul><ul><li>timeout=&quot;600&quot; </li></ul><ul><li>retries=&quot;3&quot;/> </li></ul>
  26. 26. oils_sip.xml <ul><li><accounts> </li></ul><ul><li><login id=&quot;scclient&quot; password=&quot;clientpwd&quot; institution=&quot;gapines&quot;/> </li></ul><ul><li></accounts> </li></ul>
  27. 27. SIP2 flow <ul><li>SIP request to OpenNCIP </li></ul><ul><li>OpenNCIP parses request, then passes off to Evergreen’s OpenNCIP driver module </li></ul><ul><li>The driver makes the appropriate OpenSRF requests, then it’s back up the stack </li></ul>
  28. 28. General points <ul><li>You don’t have to teach OpenSRF just to get data out of Evergreen ... you can build services on top of OpenSRF </li></ul><ul><li>The better your data, the better you can make connections </li></ul>
  29. 29. Thanks! <ul><li>Galen Charlton </li></ul><ul><li>VP for Data Services, Equinox </li></ul><ul><li>[email_address] </li></ul>
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×