SlideShare une entreprise Scribd logo
1  sur  29
Télécharger pour lire hors ligne
LibX 2 0 an Open Source, 
        2.0 ‐ O       S
Community Platform for Delivering 
         y    f     f           g
        Library Services
                 Code4Lib 2009
                  Godmar Back

University Libraries and Dep. Of Computer Science
                    Virginia Tech
LibX 1.0
    Toolbar and right-click context menu
•
    Adaptive and user-configurable context menus
•
    OpenURL support
•
    Magic Button (Google Scholar support)
•
    Web Localization via Embedded Cues
•
    Autolinking
•
    Off-campus access via EZProxy or WAM
•
    Support for CiteULike
•
    Support for COinS
•
    Support for xISBN
•
    Show/Hide Hotkey
•

2/26/2009                  Code4Lib 2009           2
LibX 1.0
    Toolbar and right-click context menu
•
    Adaptive and user-configurable context menus
•
    OpenURL support
•
    Magic Button (Google Scholar support)
•
    Web Localization via Embedded Cues
•
    Autolinking
•
    Off-campus access via EZProxy or WAM
•
    Support for CiteULike
•
    Support for COinS
•
    Support for xISBN
•
    Show/Hide Hotkey
•

2/26/2009                  Code4Lib 2009           3
The LibX Edition Builder
              The LibX Edition Builder
• A configuration management tool for creating customized versions of
  LibX
      – Customized version of LibX = LibX edition
• Edition configuration includes descriptions of community-local
  resources:
      – OPACs, OpenURL, Proxy, Databases, Links, Branding, …
• Edition Builder is easy to use
      – Makes heavy use of OCLC registries
      – Uses sophisticated auto-detection techniques
      – Usable by librarians, not just programmers
• Anybody can create, share, and manage editions
• Over 550 edition as of now, new ones created at a pace of 20/month
      – Huge human investment
      – 10’s of thousands of end users

2/26/2009                          Code4Lib 2009                   4
Where to go from here?
            Where to go from here?
• A toolbar is great but
               great, but…
• Emerging technology trends
      – Service oriented architectures web services
        Service-oriented architectures,
        interfaces – soon even to ILS!
      – Data mash-ups; HTML widgets
                      p;           g
• Educational trends: librarians, educators, and
  users create
      – Online tutorials, subject guides, visualizations
      – Social OPACs: tagging, reviews, recommender services
                         gg g,         ,

2/26/2009                   Code4Lib 2009                  5
But who will
                                                    create those
                        World Wide Web
                        W ld Wid W b
                                                     modules?

     Library 
     Resources and
     Web Services
                                             LibX 2.0 plugin: executes
                                             Libapps, merging lib
                                             Lib            i library
                             LibX 2 0
                                  2.0
                                              information into pages.




                                                          Users:
                                                      decide to which
                                                    library services to
Librarians: create or
                                                       subscribe, see
adapt Libapps from
                                                  expanded view of the
reusable, shareable
                                                           web
      modules

2/26/2009                    Code4Lib 2009                               6
The LibApp
                  The LibApp Model
• How can the interaction of LibX with web content be
  modeled?
• Typical tasks involve
      – Examination of the page and extraction of information
      – Processing of information
      – Modification of the page
• A Module is a small piece of JavaScript code along with
  a metadata description of its input and/or output
• A Libapp is a group of modules
• A Package is a folder of libapps and packages

2/26/2009                     Code4Lib 2009                     7
Modules
• Modules a e named us g a U a d pub s ed
    odu es are a ed using URL and published
  via REST/AtomPub
• Modules can reference JavaScript libraries (e.g.,
                                p               g
  jQuery) and CSS stylesheets
      – Execute in a parallel environment to the client page
• Modules are trusted, with full access to LibX API,
  including edition configuration and user
  preferences
• Modules communicate with each other via tuple
  space
2/26/2009                    Code4Lib 2009                     8
LibX Tuple Spaces
tuple = TAKE(template)
      = TAKE(template)               WRITE (tuple)
                                     WRITE (tuple)
• If a tuple matching template       • Write a tuple into the space
  exists in the tuple space,         • If a TAKE is pending with a
  remove it and return it              matching template,
• If no tuple exists, wait until       complete the TAKE
  a matching tuple is written
                       written,
  remove it and return it

 Tuples and Templates are JavaScript objects in JSON notation.
 Tuple example: { isbn: “0743226720” }
 Template example: { isbn : * } // any tuple with ‘isbn’ field
     p         p                     yp

2/26/2009                    Code4Lib 2009                            9
Jangle



                                       ISBN Lookup                    Display Result
                                      { display:
                                         “ISBN 223.. is on the shelf”
                                    Guarded-By:                   Guarded-By:
            ISBN Scraper              }
             { isbn: 2234532134 }
                                         { isbn: *}                     { display: * }




     Tuple Space
2/26/2009                              Code4Lib 2009                                     10
Rationale for Tuple
            Rationale for Tuple Spaces
Software Engineering
Software Engineering                Handling Asynchrony
                                    Handling Asynchrony
• Low coupling between              • User actions happen
  modules                             asynchronously
• Independent composition           • Information arrives
                                      asynchronously from
• Simplicity
                                      external sources
• Suitable for meta-
                                    • Execution order
  programming
                                      independence
                                           p




2/26/2009                   Code4Lib 2009                   11
LIBAPP DEMO 1
   CREATE A PRESENCE FOR THE LIBRARY

2/26/2009         Code4Lib 2009        12
2/26/2009   Code4Lib 2009   13
2/26/2009   Code4Lib 2009   14
Step 1: Arrangement
                    Step 1: Arrangement
Description: Display a Help icon on the ACM page that plays a video when clicked.
Include: /portal.acm.org.*/
Require: jquery

// Place the current edition's icon into the ACM portal page, next to the
// current search button.
// current search button
libx.space.write ( {
   needsuserbutton: $('input[src=quot;http://portal.acm.org/images/search_small.jpgquot;]'),
   image: libx.edition.options.icon, 
   text: quot;Click for a short tutorialquot;,
   action: function () { 
      // When user clicks, offer to show a YouTube clip
      libx.space.write ( {
      lib           it ( { youtube: quot;ehkfEcQ5YnQquot;} )
                              t b quot; hkfE Q5Y Qquot;} );
    }
} );



 2/26/2009                               Code4Lib 2009                                 15
Step 2: Place UI Button
                 Step 2: Place UI Button
Description: Place a clickable image into a page
Include: /.*/
Guarded‐By: { needsuserbutton: libx.space.WILDCARD, action: libx.space.WILDCARD }
Require: jquery

// Create a link with an embedded image
var a = $(quot;<a href='javascript:void(0);'/>quot;);
a.append('<img border=quot;0quot; src=quot;' + tuple.image + 'quot;/>');
a.attr( 'title', tuple.text || quot;quot;);
a attr( 'title' tuple text || quot;quot;);

// Insert link after element where a 'user button' is wanted
$(tuple.needsuserbutton).after(a);

// Associate onclick handler and animate
$(a).click(tuple.action).fadeOut(quot;slowquot;).fadeIn(quot;slowquot;);


 2/26/2009                             Code4Lib 2009                            16
Step 3: Create Youtube
             Step 3: Create Youtube Clip
Description: Create a notification to play a YouTube video, based on Video ID
Include: /. /
Include: /.*/
Guarded‐By: { youtube: libx.space.WILDCARD }

// Create HTML based on tuple.youtube
// Create HTML based on tuple.youtube
libx.space.write ( {
   notify : '<object width=quot;425quot; height=quot;344quot;><param name=quot;moviequot; 
     value=quot;http://www.youtube.com/v/'+tuple.youtube+'&hl=en&fs=1quot;></param><par
                p         y                 py                          p   p
     am name=quot;allowFullScreenquot; value=quot;truequot;></param><param
     name=quot;allowscriptaccessquot; value=quot;alwaysquot;></param><embed 
     src=quot;http://www.youtube.com/v/'+tuple.youtube+'&hl=en&fs=1quot; 
     type= application/x‐shockwave‐flash allowscriptaccess=quot;alwaysquot;
     type=quot;application/x shockwave flashquot; allowscriptaccess= always  
     allowfullscreen=quot;truequot; width=quot;425quot; height=quot;344quot;></embed></object>',
   options: { width: '450px' }
} );

 2/26/2009                             Code4Lib 2009                            17
Step 4: Display HTML Notification
    Step 4: Display HTML Notification
Description: Display HTML notifications via an embedded panel using jGrowl
Include: /. /
Include: /.*/
Guarded‐By: { notify: libx.space.WILDCARD }
Require: jquery
Require: jgrowl
Require: jgrowl
Require: jgrowl.css

// Set sticky:true unless provided in tuple.options
// Set sticky:true unless provided in tuple.options
var jGrowlOptions = $.extend({}, {sticky:true}, tuple.options);

// Display notification
// Display notification
$.jGrowl( tuple.notify, jGrowlOptions );




 2/26/2009                                 Code4Lib 2009                     18
LIBAPP DEMO 2
          DEMO 2
   “GET FULL TEXT LINKS FOR COINS”

2/26/2009        Code4Lib 2009       19
2/26/2009   Code4Lib 2009   20
COinS, the LibX 2.0 way
             COinS, the LibX 2.0 way
                            <span class=quot;Z3988quot;
Include: /.*/               title=quot;ctx_ver=Z39.88-
Description: Find COinS
D     ii      Fi d COi S    2004&rft_val_fmt=info:ofi/fmt:kev:mtx:j
                            ournal&rft_id=info:pmid/16646082&rft.g
Require: jquery
                            enre article
                            enre=articlequot;>
$(“span.Z3988quot;).each(function () {
   libx.space.write({
         p          ({
      coins: this,
      contextobj: this.getAttribute('title')
   });
});


 2/26/2009                      Code4Lib 2009                   21
COinS, the LibX 2.0 way
             COinS, the LibX 2.0 way
Include: /.*/
Description: Link COinS
Guarded‐By: { coins: libx.space.WILDCARD }
Require: legacy‐cues

var cue new libx cues StandardCoins(tuple contextobj);
    cue = new libx.cues.StandardCoins(tuple.contextobj);
cue.insertBefore(tuple.coins);




 2/26/2009                  Code4Lib 2009                  22
2/26/2009   Code4Lib 2009   23
Add Link/360 direct link
               Add Link/360 direct link
var link360 = libx.services.link360.getLink360(libx.edition);
if (link360)
if (li k360)
  link360.getMetadata({
    query: tuple.contextobj,  
    type: 'article',
    hasFullText: function (xmlDoc, url, databaseName) {
     cue.setAttribute( href , url);
     cue.setAttribute('href', url);
     cue.setAttribute('title', quot;Users of quot; + libx.edition.links.primary.label
        + quot; click here for full text via quot; + databaseName);
     cue.setImageAttribute('src', 'http://www.lib.vt.edu/images/getvtext.gif');
            tI       Att ib t (' ' 'htt //         lib t d /i        / t t t if')
     cue.animate();
    },
  });
 2/26/2009                           Code4Lib 2009                              24
Transitioning from LibX 1.0 to 2.0
   Transitioning from LibX 1.0 to 2.0
• Complete redesign of LibX client code
       p            g
• Browser-independent, strictly object-oriented
  JavaScript code with proper namespacing and
  encapsulation
• Provide full documentation (via jsdoc, accessible
  in about:libx)
• Provide built-in interactive reflection of data
  structures
• Include unit tests (run via Rhino)
• Hot updatable

2/26/2009              Code4Lib 2009                  25
LibX 2.0  Roles 
            LibX 2.0 – Roles
                   LibX 2.0 Developers – make services
                     b           l         k
                   available and write modules and libapps

                           LibX 2.0 Adapters – combine
                                20
                           modules into libapps, reuse and
                           adapt libapps, bundles and share
                           libapps as packages

                         LibX 2.0 User Community - subscribes
                         to packages or libapps they like




2/26/2009        Code4Lib 2009                                26
LibX 2.0 Community Repository
            2.0 Community Repository
• Based on tuple space model, create metadata
               pp              ,
  descriptions for modules
• Create a repository of modules, libapps, and
  packages
• Editable like a Wiki
• Integrate repository into Edition Builder
      – Include consistency checking

• This will be done during the next 2 years (but
  libapps can already be created now)

2/26/2009                   Code4Lib 2009          27
Call for Developers
                Call for Developers
• Launched Developer Website
      – http://developers.libx.org
• Launched mailing list
      – libx-dev@googlegroups.com
• Transition path: update from LibX 1 5
                                    1.5
• Agile roll-out, no “releases”

• We invite you to try and play with it!

2/26/2009                  Code4Lib 2009   28
LibX Team
                       LibX Team
    Annette Baileyy
•
    Godmar Back
•
    Kyrille Goldbeck
•
    Mike Doyle
•
    Arif Khokar
•
    Travis Webb
•
    Alumni
•
      – N th Baker
        Nathan B k
      – Tilottama Gaat
      – Tobias Wieschnowsky
                          y

2/26/2009                 Code4Lib 2009   29

Contenu connexe

Tendances

Tendances (20)

ProxySQL - High Performance and HA Proxy for MySQL
ProxySQL - High Performance and HA Proxy for MySQLProxySQL - High Performance and HA Proxy for MySQL
ProxySQL - High Performance and HA Proxy for MySQL
 
CUBRID Developer's Course
CUBRID Developer's CourseCUBRID Developer's Course
CUBRID Developer's Course
 
OpenLDAP Replication Strategies
OpenLDAP Replication StrategiesOpenLDAP Replication Strategies
OpenLDAP Replication Strategies
 
Level DB - Quick Cheat Sheet
Level DB - Quick Cheat SheetLevel DB - Quick Cheat Sheet
Level DB - Quick Cheat Sheet
 
캐시 분산처리 인프라
캐시 분산처리 인프라캐시 분산처리 인프라
캐시 분산처리 인프라
 
Introduction To Apache Mesos
Introduction To Apache MesosIntroduction To Apache Mesos
Introduction To Apache Mesos
 
Memcached Code Camp 2009
Memcached Code Camp 2009Memcached Code Camp 2009
Memcached Code Camp 2009
 
MySQL High Availability Sprint: Launch the Pacemaker
MySQL High Availability Sprint: Launch the PacemakerMySQL High Availability Sprint: Launch the Pacemaker
MySQL High Availability Sprint: Launch the Pacemaker
 
MySQL Proxy
MySQL ProxyMySQL Proxy
MySQL Proxy
 
How To Set Up SQL Load Balancing with HAProxy - Slides
How To Set Up SQL Load Balancing with HAProxy - SlidesHow To Set Up SQL Load Balancing with HAProxy - Slides
How To Set Up SQL Load Balancing with HAProxy - Slides
 
HBaseConEast2016: Practical Kerberos with Apache HBase
HBaseConEast2016: Practical Kerberos with Apache HBaseHBaseConEast2016: Practical Kerberos with Apache HBase
HBaseConEast2016: Practical Kerberos with Apache HBase
 
Distributed Stream Processing on Fluentd / #fluentd
Distributed Stream Processing on Fluentd / #fluentdDistributed Stream Processing on Fluentd / #fluentd
Distributed Stream Processing on Fluentd / #fluentd
 
Why we love pgpool-II and why we hate it!
Why we love pgpool-II and why we hate it!Why we love pgpool-II and why we hate it!
Why we love pgpool-II and why we hate it!
 
Fluentd loves MongoDB, at MongoDB SV User Group, July 17, 2012
Fluentd loves MongoDB, at MongoDB SV User Group, July 17, 2012Fluentd loves MongoDB, at MongoDB SV User Group, July 17, 2012
Fluentd loves MongoDB, at MongoDB SV User Group, July 17, 2012
 
Using HAProxy to Scale MySQL
Using HAProxy to Scale MySQLUsing HAProxy to Scale MySQL
Using HAProxy to Scale MySQL
 
Globus for System Administrators (GlobusWorld Tour - Columbia University)
Globus for System Administrators (GlobusWorld Tour - Columbia University)Globus for System Administrators (GlobusWorld Tour - Columbia University)
Globus for System Administrators (GlobusWorld Tour - Columbia University)
 
Proxysql sharding
Proxysql shardingProxysql sharding
Proxysql sharding
 
Proxysql ha plam_2016_2_keynote
Proxysql ha plam_2016_2_keynoteProxysql ha plam_2016_2_keynote
Proxysql ha plam_2016_2_keynote
 
Memcached
MemcachedMemcached
Memcached
 
Proxysql use case scenarios plam 2016
Proxysql use case scenarios    plam 2016Proxysql use case scenarios    plam 2016
Proxysql use case scenarios plam 2016
 

En vedette

Nichols & Co. Photography Brochure
Nichols & Co. Photography BrochureNichols & Co. Photography Brochure
Nichols & Co. Photography Brochure
guest1b72b3
 

En vedette (10)

Why libraries should embrace Linked Data
Why libraries should embrace Linked DataWhy libraries should embrace Linked Data
Why libraries should embrace Linked Data
 
Discovery Interfaces
Discovery InterfacesDiscovery Interfaces
Discovery Interfaces
 
DLF ILS Discovery Interface Task Force API recommendation
DLF ILS Discovery Interface Task Force API recommendationDLF ILS Discovery Interface Task Force API recommendation
DLF ILS Discovery Interface Task Force API recommendation
 
CouchDB is sacrilege... mmm, delicious sacrilege
CouchDB is sacrilege... mmm, delicious sacrilegeCouchDB is sacrilege... mmm, delicious sacrilege
CouchDB is sacrilege... mmm, delicious sacrilege
 
Como evitar enfermarse
Como evitar enfermarseComo evitar enfermarse
Como evitar enfermarse
 
Like a can opener for your data silo: simple access through AtomPub and Jangle
Like a can opener for your data silo: simple access through AtomPub and JangleLike a can opener for your data silo: simple access through AtomPub and Jangle
Like a can opener for your data silo: simple access through AtomPub and Jangle
 
Nichols & Co. Photography Brochure
Nichols & Co. Photography BrochureNichols & Co. Photography Brochure
Nichols & Co. Photography Brochure
 
RESTafarian-ism at the NLA
RESTafarian-ism at the NLARESTafarian-ism at the NLA
RESTafarian-ism at the NLA
 
The Future of Vertical Search Engines
The Future of Vertical Search EnginesThe Future of Vertical Search Engines
The Future of Vertical Search Engines
 
BABOK Study Group - meeting 4
BABOK Study Group - meeting 4BABOK Study Group - meeting 4
BABOK Study Group - meeting 4
 

Similaire à LibX 2.0

LibX2.0-Code4Lib-2009AsPresented
LibX2.0-Code4Lib-2009AsPresentedLibX2.0-Code4Lib-2009AsPresented
LibX2.0-Code4Lib-2009AsPresented
tutorialsruby
 
LibX2.0-Code4Lib-2009AsPresented
LibX2.0-Code4Lib-2009AsPresentedLibX2.0-Code4Lib-2009AsPresented
LibX2.0-Code4Lib-2009AsPresented
tutorialsruby
 
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...
Nilesh Panchal
 
RubyStack: the easiest way to deploy Ruby on Rails
RubyStack: the easiest way to deploy Ruby on RailsRubyStack: the easiest way to deploy Ruby on Rails
RubyStack: the easiest way to deploy Ruby on Rails
elliando dias
 

Similaire à LibX 2.0 (20)

LibX2.0-Code4Lib-2009AsPresented
LibX2.0-Code4Lib-2009AsPresentedLibX2.0-Code4Lib-2009AsPresented
LibX2.0-Code4Lib-2009AsPresented
 
LibX2.0-Code4Lib-2009AsPresented
LibX2.0-Code4Lib-2009AsPresentedLibX2.0-Code4Lib-2009AsPresented
LibX2.0-Code4Lib-2009AsPresented
 
Ruby on Rails
Ruby on RailsRuby on Rails
Ruby on Rails
 
Lecture 8 - Qooxdoo - Rap Course At The University Of Szeged
Lecture 8 - Qooxdoo - Rap Course At The University Of SzegedLecture 8 - Qooxdoo - Rap Course At The University Of Szeged
Lecture 8 - Qooxdoo - Rap Course At The University Of Szeged
 
Building static libraries for iOS with CocoaPods
Building static libraries for iOS with CocoaPodsBuilding static libraries for iOS with CocoaPods
Building static libraries for iOS with CocoaPods
 
Mini-Training Owin Katana
Mini-Training Owin KatanaMini-Training Owin Katana
Mini-Training Owin Katana
 
Cohere: Towards Web 2.0 Argumentation
Cohere: Towards Web 2.0 ArgumentationCohere: Towards Web 2.0 Argumentation
Cohere: Towards Web 2.0 Argumentation
 
Surviving a Plane Crash, a NU.nl case-study
Surviving a Plane Crash, a NU.nl case-studySurviving a Plane Crash, a NU.nl case-study
Surviving a Plane Crash, a NU.nl case-study
 
Drupal 6 JavaScript and jQuery
Drupal 6 JavaScript and jQueryDrupal 6 JavaScript and jQuery
Drupal 6 JavaScript and jQuery
 
Doctrine Php Object Relational Mapper
Doctrine Php Object Relational MapperDoctrine Php Object Relational Mapper
Doctrine Php Object Relational Mapper
 
MacRuby for Fun and Profit
MacRuby for Fun and ProfitMacRuby for Fun and Profit
MacRuby for Fun and Profit
 
Docker Kubernetes Istio
Docker Kubernetes IstioDocker Kubernetes Istio
Docker Kubernetes Istio
 
Building an E-commerce website in MEAN stack
Building an E-commerce website in MEAN stackBuilding an E-commerce website in MEAN stack
Building an E-commerce website in MEAN stack
 
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...
Ruby on-rails-101-presentation-slides-for-a-five-day-introductory-course-1194...
 
An introduction to Node.js
An introduction to Node.jsAn introduction to Node.js
An introduction to Node.js
 
Javascript frameworks
Javascript frameworksJavascript frameworks
Javascript frameworks
 
Django in the Real World
Django in the Real WorldDjango in the Real World
Django in the Real World
 
Real World Technologies
Real World TechnologiesReal World Technologies
Real World Technologies
 
Lessons learned from building Eclipse-based add-ons for commercial modeling t...
Lessons learned from building Eclipse-based add-ons for commercial modeling t...Lessons learned from building Eclipse-based add-ons for commercial modeling t...
Lessons learned from building Eclipse-based add-ons for commercial modeling t...
 
RubyStack: the easiest way to deploy Ruby on Rails
RubyStack: the easiest way to deploy Ruby on RailsRubyStack: the easiest way to deploy Ruby on Rails
RubyStack: the easiest way to deploy Ruby on Rails
 

Plus de eby

Plus de eby (18)

Using a CSS Framework
Using a CSS FrameworkUsing a CSS Framework
Using a CSS Framework
 
XForms for Metadata creation
XForms for Metadata creationXForms for Metadata creation
XForms for Metadata creation
 
Karen Coyle Keynote - R&D: Can Resource Description become Rigorous Data?
Karen Coyle Keynote - R&D: Can Resource Description become Rigorous Data?Karen Coyle Keynote - R&D: Can Resource Description become Rigorous Data?
Karen Coyle Keynote - R&D: Can Resource Description become Rigorous Data?
 
ÖpënÜRL
ÖpënÜRLÖpënÜRL
ÖpënÜRL
 
Building Mountains Out of Molehills
Building Mountains Out of MolehillsBuilding Mountains Out of Molehills
Building Mountains Out of Molehills
 
Zotero and You, or Bibliography on the Semantic Web
Zotero and You, or Bibliography on the Semantic WebZotero and You, or Bibliography on the Semantic Web
Zotero and You, or Bibliography on the Semantic Web
 
Creating an Academic Image Collection with Flickr
Creating an Academic Image Collection with FlickrCreating an Academic Image Collection with Flickr
Creating an Academic Image Collection with Flickr
 
From Idea to Open Source
From Idea to Open SourceFrom Idea to Open Source
From Idea to Open Source
 
Obstacles to Agility
Obstacles to AgilityObstacles to Agility
Obstacles to Agility
 
The Intellectual Property Disclosure Process: Releasing Open Source Software ...
The Intellectual Property Disclosure Process: Releasing Open Source Software ...The Intellectual Property Disclosure Process: Releasing Open Source Software ...
The Intellectual Property Disclosure Process: Releasing Open Source Software ...
 
Code4Lib 2007: Erik Hatcher Keynote
Code4Lib 2007: Erik Hatcher KeynoteCode4Lib 2007: Erik Hatcher Keynote
Code4Lib 2007: Erik Hatcher Keynote
 
Library Data APIs Abound!
Library Data APIs Abound!Library Data APIs Abound!
Library Data APIs Abound!
 
Smart Subjects - Application Independent Subject Recommendations
Smart Subjects - Application Independent Subject RecommendationsSmart Subjects - Application Independent Subject Recommendations
Smart Subjects - Application Independent Subject Recommendations
 
On The Herding of Cats
On The Herding of CatsOn The Herding of Cats
On The Herding of Cats
 
Code4Lib 2007: MyResearch Portal
Code4Lib 2007: MyResearch PortalCode4Lib 2007: MyResearch Portal
Code4Lib 2007: MyResearch Portal
 
Code4Lib 2007: Hurry up please, it's time
Code4Lib 2007: Hurry up please, it's timeCode4Lib 2007: Hurry up please, it's time
Code4Lib 2007: Hurry up please, it's time
 
Evergreen - Future of the ILS
Evergreen - Future of the ILSEvergreen - Future of the ILS
Evergreen - Future of the ILS
 
Lucene Summit - Beth's Presentation
Lucene Summit - Beth's PresentationLucene Summit - Beth's Presentation
Lucene Summit - Beth's Presentation
 

Dernier

Dernier (20)

Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdfSimplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
 
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdfIntroduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
 
ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...
ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...
ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...
 
Your enemies use GenAI too - staying ahead of fraud with Neo4j
Your enemies use GenAI too - staying ahead of fraud with Neo4jYour enemies use GenAI too - staying ahead of fraud with Neo4j
Your enemies use GenAI too - staying ahead of fraud with Neo4j
 
WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024
 
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdfHow Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
 
Portal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russePortal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russe
 
Easier, Faster, and More Powerful – Notes Document Properties Reimagined
Easier, Faster, and More Powerful – Notes Document Properties ReimaginedEasier, Faster, and More Powerful – Notes Document Properties Reimagined
Easier, Faster, and More Powerful – Notes Document Properties Reimagined
 
How we scaled to 80K users by doing nothing!.pdf
How we scaled to 80K users by doing nothing!.pdfHow we scaled to 80K users by doing nothing!.pdf
How we scaled to 80K users by doing nothing!.pdf
 
Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...
Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...
Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...
 
BT & Neo4j _ How Knowledge Graphs help BT deliver Digital Transformation.pptx
BT & Neo4j _ How Knowledge Graphs help BT deliver Digital Transformation.pptxBT & Neo4j _ How Knowledge Graphs help BT deliver Digital Transformation.pptx
BT & Neo4j _ How Knowledge Graphs help BT deliver Digital Transformation.pptx
 
Continuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
Continuing Bonds Through AI: A Hermeneutic Reflection on ThanabotsContinuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
Continuing Bonds Through AI: A Hermeneutic Reflection on Thanabots
 
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
 
IESVE for Early Stage Design and Planning
IESVE for Early Stage Design and PlanningIESVE for Early Stage Design and Planning
IESVE for Early Stage Design and Planning
 
AI mind or machine power point presentation
AI mind or machine power point presentationAI mind or machine power point presentation
AI mind or machine power point presentation
 
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
 
TopCryptoSupers 12thReport OrionX May2024
TopCryptoSupers 12thReport OrionX May2024TopCryptoSupers 12thReport OrionX May2024
TopCryptoSupers 12thReport OrionX May2024
 
A Business-Centric Approach to Design System Strategy
A Business-Centric Approach to Design System StrategyA Business-Centric Approach to Design System Strategy
A Business-Centric Approach to Design System Strategy
 
Syngulon - Selection technology May 2024.pdf
Syngulon - Selection technology May 2024.pdfSyngulon - Selection technology May 2024.pdf
Syngulon - Selection technology May 2024.pdf
 
WSO2CONMay2024OpenSourceConferenceDebrief.pptx
WSO2CONMay2024OpenSourceConferenceDebrief.pptxWSO2CONMay2024OpenSourceConferenceDebrief.pptx
WSO2CONMay2024OpenSourceConferenceDebrief.pptx
 

LibX 2.0

  • 1. LibX 2 0 an Open Source,  2.0 ‐ O S Community Platform for Delivering  y f f g Library Services Code4Lib 2009 Godmar Back University Libraries and Dep. Of Computer Science Virginia Tech
  • 2. LibX 1.0 Toolbar and right-click context menu • Adaptive and user-configurable context menus • OpenURL support • Magic Button (Google Scholar support) • Web Localization via Embedded Cues • Autolinking • Off-campus access via EZProxy or WAM • Support for CiteULike • Support for COinS • Support for xISBN • Show/Hide Hotkey • 2/26/2009 Code4Lib 2009 2
  • 3. LibX 1.0 Toolbar and right-click context menu • Adaptive and user-configurable context menus • OpenURL support • Magic Button (Google Scholar support) • Web Localization via Embedded Cues • Autolinking • Off-campus access via EZProxy or WAM • Support for CiteULike • Support for COinS • Support for xISBN • Show/Hide Hotkey • 2/26/2009 Code4Lib 2009 3
  • 4. The LibX Edition Builder The LibX Edition Builder • A configuration management tool for creating customized versions of LibX – Customized version of LibX = LibX edition • Edition configuration includes descriptions of community-local resources: – OPACs, OpenURL, Proxy, Databases, Links, Branding, … • Edition Builder is easy to use – Makes heavy use of OCLC registries – Uses sophisticated auto-detection techniques – Usable by librarians, not just programmers • Anybody can create, share, and manage editions • Over 550 edition as of now, new ones created at a pace of 20/month – Huge human investment – 10’s of thousands of end users 2/26/2009 Code4Lib 2009 4
  • 5. Where to go from here? Where to go from here? • A toolbar is great but great, but… • Emerging technology trends – Service oriented architectures web services Service-oriented architectures, interfaces – soon even to ILS! – Data mash-ups; HTML widgets p; g • Educational trends: librarians, educators, and users create – Online tutorials, subject guides, visualizations – Social OPACs: tagging, reviews, recommender services gg g, , 2/26/2009 Code4Lib 2009 5
  • 6. But who will create those World Wide Web W ld Wid W b modules? Library  Resources and Web Services LibX 2.0 plugin: executes Libapps, merging lib Lib i library LibX 2 0 2.0 information into pages. Users: decide to which library services to Librarians: create or subscribe, see adapt Libapps from expanded view of the reusable, shareable web modules 2/26/2009 Code4Lib 2009 6
  • 7. The LibApp The LibApp Model • How can the interaction of LibX with web content be modeled? • Typical tasks involve – Examination of the page and extraction of information – Processing of information – Modification of the page • A Module is a small piece of JavaScript code along with a metadata description of its input and/or output • A Libapp is a group of modules • A Package is a folder of libapps and packages 2/26/2009 Code4Lib 2009 7
  • 8. Modules • Modules a e named us g a U a d pub s ed odu es are a ed using URL and published via REST/AtomPub • Modules can reference JavaScript libraries (e.g., p g jQuery) and CSS stylesheets – Execute in a parallel environment to the client page • Modules are trusted, with full access to LibX API, including edition configuration and user preferences • Modules communicate with each other via tuple space 2/26/2009 Code4Lib 2009 8
  • 9. LibX Tuple Spaces tuple = TAKE(template) = TAKE(template) WRITE (tuple) WRITE (tuple) • If a tuple matching template • Write a tuple into the space exists in the tuple space, • If a TAKE is pending with a remove it and return it matching template, • If no tuple exists, wait until complete the TAKE a matching tuple is written written, remove it and return it Tuples and Templates are JavaScript objects in JSON notation. Tuple example: { isbn: “0743226720” } Template example: { isbn : * } // any tuple with ‘isbn’ field p p yp 2/26/2009 Code4Lib 2009 9
  • 10. Jangle ISBN Lookup Display Result { display: “ISBN 223.. is on the shelf” Guarded-By: Guarded-By: ISBN Scraper } { isbn: 2234532134 } { isbn: *} { display: * } Tuple Space 2/26/2009 Code4Lib 2009 10
  • 11. Rationale for Tuple Rationale for Tuple Spaces Software Engineering Software Engineering Handling Asynchrony Handling Asynchrony • Low coupling between • User actions happen modules asynchronously • Independent composition • Information arrives asynchronously from • Simplicity external sources • Suitable for meta- • Execution order programming independence p 2/26/2009 Code4Lib 2009 11
  • 12. LIBAPP DEMO 1 CREATE A PRESENCE FOR THE LIBRARY 2/26/2009 Code4Lib 2009 12
  • 13. 2/26/2009 Code4Lib 2009 13
  • 14. 2/26/2009 Code4Lib 2009 14
  • 15. Step 1: Arrangement Step 1: Arrangement Description: Display a Help icon on the ACM page that plays a video when clicked. Include: /portal.acm.org.*/ Require: jquery // Place the current edition's icon into the ACM portal page, next to the // current search button. // current search button libx.space.write ( { needsuserbutton: $('input[src=quot;http://portal.acm.org/images/search_small.jpgquot;]'), image: libx.edition.options.icon,  text: quot;Click for a short tutorialquot;, action: function () {  // When user clicks, offer to show a YouTube clip libx.space.write ( { lib it ( { youtube: quot;ehkfEcQ5YnQquot;} ) t b quot; hkfE Q5Y Qquot;} ); } } ); 2/26/2009 Code4Lib 2009 15
  • 16. Step 2: Place UI Button Step 2: Place UI Button Description: Place a clickable image into a page Include: /.*/ Guarded‐By: { needsuserbutton: libx.space.WILDCARD, action: libx.space.WILDCARD } Require: jquery // Create a link with an embedded image var a = $(quot;<a href='javascript:void(0);'/>quot;); a.append('<img border=quot;0quot; src=quot;' + tuple.image + 'quot;/>'); a.attr( 'title', tuple.text || quot;quot;); a attr( 'title' tuple text || quot;quot;); // Insert link after element where a 'user button' is wanted $(tuple.needsuserbutton).after(a); // Associate onclick handler and animate $(a).click(tuple.action).fadeOut(quot;slowquot;).fadeIn(quot;slowquot;); 2/26/2009 Code4Lib 2009 16
  • 17. Step 3: Create Youtube Step 3: Create Youtube Clip Description: Create a notification to play a YouTube video, based on Video ID Include: /. / Include: /.*/ Guarded‐By: { youtube: libx.space.WILDCARD } // Create HTML based on tuple.youtube // Create HTML based on tuple.youtube libx.space.write ( { notify : '<object width=quot;425quot; height=quot;344quot;><param name=quot;moviequot;  value=quot;http://www.youtube.com/v/'+tuple.youtube+'&hl=en&fs=1quot;></param><par p y py p p am name=quot;allowFullScreenquot; value=quot;truequot;></param><param name=quot;allowscriptaccessquot; value=quot;alwaysquot;></param><embed  src=quot;http://www.youtube.com/v/'+tuple.youtube+'&hl=en&fs=1quot;  type= application/x‐shockwave‐flash allowscriptaccess=quot;alwaysquot; type=quot;application/x shockwave flashquot; allowscriptaccess= always   allowfullscreen=quot;truequot; width=quot;425quot; height=quot;344quot;></embed></object>', options: { width: '450px' } } ); 2/26/2009 Code4Lib 2009 17
  • 18. Step 4: Display HTML Notification Step 4: Display HTML Notification Description: Display HTML notifications via an embedded panel using jGrowl Include: /. / Include: /.*/ Guarded‐By: { notify: libx.space.WILDCARD } Require: jquery Require: jgrowl Require: jgrowl Require: jgrowl.css // Set sticky:true unless provided in tuple.options // Set sticky:true unless provided in tuple.options var jGrowlOptions = $.extend({}, {sticky:true}, tuple.options); // Display notification // Display notification $.jGrowl( tuple.notify, jGrowlOptions ); 2/26/2009 Code4Lib 2009 18
  • 19. LIBAPP DEMO 2 DEMO 2 “GET FULL TEXT LINKS FOR COINS” 2/26/2009 Code4Lib 2009 19
  • 20. 2/26/2009 Code4Lib 2009 20
  • 21. COinS, the LibX 2.0 way COinS, the LibX 2.0 way <span class=quot;Z3988quot; Include: /.*/ title=quot;ctx_ver=Z39.88- Description: Find COinS D ii Fi d COi S 2004&rft_val_fmt=info:ofi/fmt:kev:mtx:j ournal&rft_id=info:pmid/16646082&rft.g Require: jquery enre article enre=articlequot;> $(“span.Z3988quot;).each(function () { libx.space.write({ p ({ coins: this, contextobj: this.getAttribute('title') }); }); 2/26/2009 Code4Lib 2009 21
  • 22. COinS, the LibX 2.0 way COinS, the LibX 2.0 way Include: /.*/ Description: Link COinS Guarded‐By: { coins: libx.space.WILDCARD } Require: legacy‐cues var cue new libx cues StandardCoins(tuple contextobj); cue = new libx.cues.StandardCoins(tuple.contextobj); cue.insertBefore(tuple.coins); 2/26/2009 Code4Lib 2009 22
  • 23. 2/26/2009 Code4Lib 2009 23
  • 24. Add Link/360 direct link Add Link/360 direct link var link360 = libx.services.link360.getLink360(libx.edition); if (link360) if (li k360) link360.getMetadata({ query: tuple.contextobj,   type: 'article', hasFullText: function (xmlDoc, url, databaseName) { cue.setAttribute( href , url); cue.setAttribute('href', url); cue.setAttribute('title', quot;Users of quot; + libx.edition.links.primary.label + quot; click here for full text via quot; + databaseName); cue.setImageAttribute('src', 'http://www.lib.vt.edu/images/getvtext.gif'); tI Att ib t (' ' 'htt // lib t d /i / t t t if') cue.animate(); }, }); 2/26/2009 Code4Lib 2009 24
  • 25. Transitioning from LibX 1.0 to 2.0 Transitioning from LibX 1.0 to 2.0 • Complete redesign of LibX client code p g • Browser-independent, strictly object-oriented JavaScript code with proper namespacing and encapsulation • Provide full documentation (via jsdoc, accessible in about:libx) • Provide built-in interactive reflection of data structures • Include unit tests (run via Rhino) • Hot updatable 2/26/2009 Code4Lib 2009 25
  • 26. LibX 2.0  Roles  LibX 2.0 – Roles LibX 2.0 Developers – make services b l k available and write modules and libapps LibX 2.0 Adapters – combine 20 modules into libapps, reuse and adapt libapps, bundles and share libapps as packages LibX 2.0 User Community - subscribes to packages or libapps they like 2/26/2009 Code4Lib 2009 26
  • 27. LibX 2.0 Community Repository 2.0 Community Repository • Based on tuple space model, create metadata pp , descriptions for modules • Create a repository of modules, libapps, and packages • Editable like a Wiki • Integrate repository into Edition Builder – Include consistency checking • This will be done during the next 2 years (but libapps can already be created now) 2/26/2009 Code4Lib 2009 27
  • 28. Call for Developers Call for Developers • Launched Developer Website – http://developers.libx.org • Launched mailing list – libx-dev@googlegroups.com • Transition path: update from LibX 1 5 1.5 • Agile roll-out, no “releases” • We invite you to try and play with it! 2/26/2009 Code4Lib 2009 28
  • 29. LibX Team LibX Team Annette Baileyy • Godmar Back • Kyrille Goldbeck • Mike Doyle • Arif Khokar • Travis Webb • Alumni • – N th Baker Nathan B k – Tilottama Gaat – Tobias Wieschnowsky y 2/26/2009 Code4Lib 2009 29