SlideShare a Scribd company logo
1 of 29
Download to read offline
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

More Related Content

What's hot

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 MySQLRené Cannaò
 
CUBRID Developer's Course
CUBRID Developer's CourseCUBRID Developer's Course
CUBRID Developer's CourseCUBRID
 
OpenLDAP Replication Strategies
OpenLDAP Replication StrategiesOpenLDAP Replication Strategies
OpenLDAP Replication StrategiesGavin Henry
 
캐시 분산처리 인프라
캐시 분산처리 인프라캐시 분산처리 인프라
캐시 분산처리 인프라Park Chunduck
 
Introduction To Apache Mesos
Introduction To Apache MesosIntroduction To Apache Mesos
Introduction To Apache MesosJoe Stein
 
Memcached Code Camp 2009
Memcached Code Camp 2009Memcached Code Camp 2009
Memcached Code Camp 2009NorthScale
 
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 Pacemakerhastexo
 
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 - SlidesSeveralnines
 
HBaseConEast2016: Practical Kerberos with Apache HBase
HBaseConEast2016: Practical Kerberos with Apache HBaseHBaseConEast2016: Practical Kerberos with Apache HBase
HBaseConEast2016: Practical Kerberos with Apache HBaseMichael Stack
 
Distributed Stream Processing on Fluentd / #fluentd
Distributed Stream Processing on Fluentd / #fluentdDistributed Stream Processing on Fluentd / #fluentd
Distributed Stream Processing on Fluentd / #fluentdSATOSHI TAGOMORI
 
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!PGConf APAC
 
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, 2012Treasure Data, Inc.
 
Using HAProxy to Scale MySQL
Using HAProxy to Scale MySQLUsing HAProxy to Scale MySQL
Using HAProxy to Scale MySQLBill Sickles
 
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)Globus
 
Proxysql sharding
Proxysql shardingProxysql sharding
Proxysql shardingMarco Tusa
 
Proxysql ha plam_2016_2_keynote
Proxysql ha plam_2016_2_keynoteProxysql ha plam_2016_2_keynote
Proxysql ha plam_2016_2_keynoteMarco Tusa
 
Proxysql use case scenarios plam 2016
Proxysql use case scenarios    plam 2016Proxysql use case scenarios    plam 2016
Proxysql use case scenarios plam 2016Alkin Tezuysal
 

What's hot (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
 

Viewers also liked

Why libraries should embrace Linked Data
Why libraries should embrace Linked DataWhy libraries should embrace Linked Data
Why libraries should embrace Linked Dataeby
 
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 recommendationeby
 
CouchDB is sacrilege... mmm, delicious sacrilege
CouchDB is sacrilege... mmm, delicious sacrilegeCouchDB is sacrilege... mmm, delicious sacrilege
CouchDB is sacrilege... mmm, delicious sacrilegeeby
 
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 Jangleeby
 
Nichols & Co. Photography Brochure
Nichols & Co. Photography BrochureNichols & Co. Photography Brochure
Nichols & Co. Photography Brochureguest1b72b3
 
RESTafarian-ism at the NLA
RESTafarian-ism at the NLARESTafarian-ism at the NLA
RESTafarian-ism at the NLAeby
 
The Future of Vertical Search Engines
The Future of Vertical Search EnginesThe Future of Vertical Search Engines
The Future of Vertical Search EnginesTed Drake
 
BABOK Study Group - meeting 4
BABOK Study Group - meeting 4BABOK Study Group - meeting 4
BABOK Study Group - meeting 4Paweł Zubkiewicz
 

Viewers also liked (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
 

Similar to LibX 2.0

LibX2.0-Code4Lib-2009AsPresented
LibX2.0-Code4Lib-2009AsPresentedLibX2.0-Code4Lib-2009AsPresented
LibX2.0-Code4Lib-2009AsPresentedtutorialsruby
 
LibX2.0-Code4Lib-2009AsPresented
LibX2.0-Code4Lib-2009AsPresentedLibX2.0-Code4Lib-2009AsPresented
LibX2.0-Code4Lib-2009AsPresentedtutorialsruby
 
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 SzegedFabian Jakobs
 
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 CocoaPodsSigmapoint
 
Cohere: Towards Web 2.0 Argumentation
Cohere: Towards Web 2.0 ArgumentationCohere: Towards Web 2.0 Argumentation
Cohere: Towards Web 2.0 ArgumentationSimon Buckingham Shum
 
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-studypeter_ibuildings
 
Drupal 6 JavaScript and jQuery
Drupal 6 JavaScript and jQueryDrupal 6 JavaScript and jQuery
Drupal 6 JavaScript and jQueryMatt Butcher
 
Doctrine Php Object Relational Mapper
Doctrine Php Object Relational MapperDoctrine Php Object Relational Mapper
Doctrine Php Object Relational MapperJonathan Wage
 
MacRuby for Fun and Profit
MacRuby for Fun and ProfitMacRuby for Fun and Profit
MacRuby for Fun and ProfitJoshua Ballanco
 
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 stackdivyapisces
 
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
 
An introduction to Node.js
An introduction to Node.jsAn introduction to Node.js
An introduction to Node.jsKasey McCurdy
 
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...IncQuery Labs
 
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 Railselliando dias
 

Similar to 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
 

More from eby

Using a CSS Framework
Using a CSS FrameworkUsing a CSS Framework
Using a CSS Frameworkeby
 
XForms for Metadata creation
XForms for Metadata creationXForms for Metadata creation
XForms for Metadata creationeby
 
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?eby
 
ÖpënÜRL
ÖpënÜRLÖpënÜRL
ÖpënÜRLeby
 
Building Mountains Out of Molehills
Building Mountains Out of MolehillsBuilding Mountains Out of Molehills
Building Mountains Out of Molehillseby
 
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 Webeby
 
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 Flickreby
 
From Idea to Open Source
From Idea to Open SourceFrom Idea to Open Source
From Idea to Open Sourceeby
 
Obstacles to Agility
Obstacles to AgilityObstacles to Agility
Obstacles to Agilityeby
 
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 ...eby
 
Code4Lib 2007: Erik Hatcher Keynote
Code4Lib 2007: Erik Hatcher KeynoteCode4Lib 2007: Erik Hatcher Keynote
Code4Lib 2007: Erik Hatcher Keynoteeby
 
Library Data APIs Abound!
Library Data APIs Abound!Library Data APIs Abound!
Library Data APIs Abound!eby
 
Smart Subjects - Application Independent Subject Recommendations
Smart Subjects - Application Independent Subject RecommendationsSmart Subjects - Application Independent Subject Recommendations
Smart Subjects - Application Independent Subject Recommendationseby
 
On The Herding of Cats
On The Herding of CatsOn The Herding of Cats
On The Herding of Catseby
 
Code4Lib 2007: MyResearch Portal
Code4Lib 2007: MyResearch PortalCode4Lib 2007: MyResearch Portal
Code4Lib 2007: MyResearch Portaleby
 
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 timeeby
 
Evergreen - Future of the ILS
Evergreen - Future of the ILSEvergreen - Future of the ILS
Evergreen - Future of the ILSeby
 
Lucene Summit - Beth's Presentation
Lucene Summit - Beth's PresentationLucene Summit - Beth's Presentation
Lucene Summit - Beth's Presentationeby
 

More from 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
 

Recently uploaded

EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsRoshan Dwivedi
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 

Recently uploaded (20)

EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 

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