LibX 2.0 - an Open Source, Community Platform for Delivering Library Services Code4Lib 2009 Preconference Godmar Back and Mike Doyle Virginia Tech.

Slides:



Advertisements
Similar presentations
The Marketing and Instruction of New Tools for Libraries: LibX a Case Study Kyrille Goldbeck College Librarian for Natural Resources LOEX MAY 2007 Uncharted.
Advertisements

Enhancing Access to Library Collections Kyrille Goldbeck College Librarian for Natural Resources NRIC 2007.
LibX – Putting Millennium and WebBridge in Firefox Annette Bailey Newman Library, Virginia Tech May 21, 2006.
1 LibX – Connecting Users and Libraries Annette Bailey LITA National Forum October 2007.
LibX an Open Source, Community Platform for Delivering Library Services Code4Lib 2009 Godmar Back University Libraries and Dep. Of Computer Science.
Legal Meetings: Extended Instructions on Movica and Screencast.
WEB DESIGN TABLES, PAGE LAYOUT AND FORMS. Page Layout Page Layout is an important part of web design Why do you think your page layout is important?
Business Development Suit Presented by Thomas Mathews.
The jQuery library. What is jQuery ? A javascript lightweight library Is very easy to use Is powerful Is cross-browser compatible Downloadable from jQuery.com,
JQuery A Javascript Library Hard things made eas(ier) Norman White.
IBM WebSphere Portal © 2008 IBM Corporation 1 Deliver an Irresistible User Experience  Provides an interactive user experience  No programming needed,
DEV392: Extending SharePoint Products And Technologies Through Web Parts And ASP.NET Clint Covington, Program Manager Data And Developer Services - Office.
The KB on its way to Web 2.0 Lower the barrier for users to remix the output of services. Theo van Veen, ELAG 2006, April 26.
CIS101 Introduction to Computing Week 05. Agenda Your questions CIS101 Survey Introduction to the Internet & HTML Online HTML Resources Using the HTML.
High Performance Faceted Interfaces Using S2S Eric Rozell, Tetherless World Constellation.
Chapter 1 Getting Started With Dreamweaver. Explore the Dreamweaver Workspace The Dreamweaver workspace is where you can find all the tools to create.
1 of 7 This document is for informational purposes only. MICROSOFT MAKES NO WARRANTIES, EXPRESS OR IMPLIED, IN THIS DOCUMENT. © 2007 Microsoft Corporation.
1 Using jQuery JavaScript & jQuery the missing manual (Second Edition)
Web Services & Widgets Godmar Back. Mash-Ups Applications that combine information from different sources in one web page Different architectural choices.
Paul Trani Adobe Certified Instructor/Expert Resources:
Presented by…. Group 2 1. Programming language 2Introduction.
Chapter 11 Adding Media and Interactivity. Flash is a software program that allows you to create low-bandwidth, high-quality animations and interactive.
JQuery CS 268. What is jQuery? From their web site:
CIT 256 Organizing Large Websites: Divs, DW Templates Dr. Beryl Hoffman.
PhpXperts What is jQuery Javascript Library Fast and concise Simplifies the interaction between HTML and JavaScript.
Architecture Of ASP.NET. What is ASP?  Server-side scripting technology.  Files containing HTML and scripting code.  Access via HTTP requests.  Scripting.
A Scalable Application Architecture for composing News Portals on the Internet Serpil TOK, Zeki BAYRAM. Eastern MediterraneanUniversity Famagusta Famagusta.
JavaScript & jQuery the missing manual Chapter 11
Joel Bapaga on Web Design Strategies Technologies Commercial Value.
Aurora: A Conceptual Model for Web-content Adaptation to Support the Universal Accessibility of Web-based Services Anita W. Huang, Neel Sundaresan Presented.
Classroom User Training June 29, 2005 Presented by:
Yahoo! User Interface (YUI) Library Natly Mekdara.
Copyright © Allyn & Bacon 2008 POWER PRACTICE Chapter 7 The Internet and the World Wide Web START This multimedia product and its contents are protected.
XP New Perspectives on XML, 2 nd Edition Tutorial 10 1 WORKING WITH THE DOCUMENT OBJECT MODEL TUTORIAL 10.
Introducing Dreamweaver MX 2004
Tutorial 1 Getting Started with Adobe Dreamweaver CS3
Advanced Level Course. Site Extras Site Extras consist of four categories: Stationeries Site Trash Designs Components.
CNIT 133 Interactive Web Pags – JavaScript and AJAX JavaScript Environment.
GCMD/IDN STATUS AND PLANS Stephen Wharton CWIC Meeting February19, 2015.
Tutorial 121 Creating a New Web Forms Page You will find that creating Web Forms is similar to creating traditional Windows applications in Visual Basic.
Tutorial 7 Creating Forms. Objectives Session 7.1 – Create an HTML form – Insert fields for text – Add labels for form elements – Create radio buttons.
Domain 3 Understanding the Adobe Dreamweaver CS5 Interface.
INTRODUCTION TO HTML5 Using jQuery with HTML5. Introducing jQuery  Although it is not a part of any W3C or WHATWG specification, jQuery performs an important.
FILES AND ASSETS PANELS
1 Geospatial and Business Intelligence Jean-Sébastien Turcotte Executive VP San Francisco - April 2007 Streamlining web mapping applications.
Session: 1. © Aptech Ltd. 2Introduction to the Web / Session 1  Explain the evolution of HTML  Explain the page structure used by HTML  List the drawbacks.
Use CSS to Implement a Reusable Design Selecting a Dreamweaver CSS Starter Layout is the easiest way to create a page with a CSS layout You can access.
JQuery Introduction © Copyright 2014, Fred McClurg All Rights Reserved.
Internet & World Wide Web How to Program, 5/e. © by Pearson Education, Inc. All Rights Reserved.2 Revised by Dr. T. Tran for CSI3140.
Evaluating & Maintaining a Site Domain 6. Conduct Technical Tests Dreamweaver provides many tools to assist in finalizing and testing your website for.
Chapter 1 Getting Started With Dreamweaver. Exploring the Dreamweaver Workspace The Dreamweaver workspace is where you can find all the tools to create.
Reading Flash. Training target: Read the following reading materials and use the reading skills mentioned in the passages above. You may also choose some.
Plug-in Architectures Presented by Truc Nguyen. What’s a plug-in? “a type of program that tightly integrates with a larger application to add a special.
Chapter 5 Introduction To Form Builder. Lesson A Objectives  Display Forms Builder forms in a Web browser  Use a data block form to view, insert, update,
Intro to jQuery. What is jQuery? A JavaScript library Lightweight (about 31KB for the minified version) Simplifies HTML document traversing (DOM), event.
Unit 13 –JQuery Basics Instructor: Brent Presley.
Website Design, Development and Maintenance ONLY TAKE DOWN NOTES ON INDICATED SLIDES.
 An essential supporting structure of any thing  A Software Framework  Has layered structure ▪ What kind of functions and how they interrelate  Has.
introductionwhyexamples What is a Web site? A web site is: a presentation tool; a way to communicate; a learning tool; a teaching tool; a marketing important.
Portal Construction 301. Where We Are In Portal Construction 101and 201 we created a Group Profile in the local system and uploaded to our Web Reservation.
1 Using jQuery JavaScript & jQuery the missing manual (Second Edition)
Tutorial 1 Getting Started with Adobe Dreamweaver CS5.
Indispensable tools for research at its best RefWorks 2.0 fundamental Alan Tang
CARA 3.10 Major New Features
Google Web Toolkit Tutorial
Chrome Developer Tools
SEEM4570 Tutorial 5: jQuery + jQuery Mobile
University Libraries and Dep. Of Computer Science Virginia Tech
TN19-TCI: Integration and API management using TIBCO Cloud™ Integration
Presentation transcript:

LibX an Open Source, Community Platform for Delivering Library Services Code4Lib 2009 Preconference Godmar Back and Mike Doyle Virginia Tech

Ground Rules Lets make this interactive and informal You need: – Internet access – Firefox 3 Empty profile + 4 development extensions – A SCP client – WinSCP on Windows will work 2/9/2014Code4Lib 20092

Outline Background – LibX and LibX Edition Builder Talk about LibX 2.0 – Model, terminology, and rationale Lets study 3 examples Build your own example Discussion 2/9/2014Code4Lib 20093

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/9/20144Code4Lib 2009

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/9/20145Code4Lib 2009

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 2/9/2014Code4Lib 20096

The LibX Edition Builder 2/9/20147Code4Lib 2009

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

World Wide Web Library Resources and Web Services Library Resources and Web Services LibX 2.0 LibX 2.0 plugin: executes Libapps, merging library information into pages. Users: decide to which library services to subscribe, see expanded view of the web Librarians: create or adapt Libapps from reusable, shareable modules 2/9/20149Code4Lib 2009 But who will create those modules?

Edition Builder Survey: Programming Skills 2/9/201410Code4Lib 2009

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/9/2014Code4Lib

Modules Modules are represented via a URL and published via AtomPub Modules can include JavaScript libraries (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 a tuple space abstraction 2/9/2014Code4Lib

LibX Tuple Spaces tuple = TAKE(template) If a tuple matching template exists in the tuple space, remove it and return it If no tuple exists, wait until a matching tuple is written, remove it and return it WRITE (tuple) Write a tuple into the space If a TAKE is pending with a matching template, complete the TAKE 2/9/2014Code4Lib Tuples and Templates are JavaScript objects in JSON notation. Tuple example: { isbn: } Template example: { isbn : libx.space.WILDCARD } // any

Tuple Space (isbn: X, location:, …) ISBN Scraper xISBN Service Tooltip Display Presearch Service OCLC xISBN yazproxy Z39.50 Gateway ILS-DI/libxess jangle ILS snapshot (,,) LibApp Example LibApp Modules 2/9/201414Code4Lib 2009

2/9/2014Code4Lib Tuple Space ISBN Scraper Display ResultISBN Lookup { isbn: } { isbn: *} { display: * } { display: ISBN is on the shelf } Jangle

Rationale for Tuple Spaces Software Engineering Low coupling between modules Independent composition Simplicity Suitable for metaprogramming by end users Asynchrony Execution order independence – User actions happen asynchronously – Information arrives asynchronously 2/9/2014Code4Lib

Initial Setup 1 Package: libxcore 1 LibApp in this package: google 2 Modules in this libapp: getgooglekeyword and searchkeyword 2/9/2014Code4Lib

LIBAPP EXAMPLE: GOOGLE CUE 2/9/2014Code4Lib

Step 1: Find Searchterms & Position Description: Extract Keyword from Google Include: /google(\.[a-z]+)?\.[a-z]+\/search.*q=/i Require: jquery /* Find a suitable location to include a cue */ var nArray = $("div div[id='prs'] b"); if (nArray.length == 0) nArray = $("tr td span[id='sd']"); // old, before Aug 2008 var n = nArray[0]; // Extract search terms var searchterms = unsafeWindow.document.gs.q.value; // LibX FF libx.space.write({ keyword: searchterms, position: n.parentNode.lastChild }); Description: Extract Keyword from Google Include: /google(\.[a-z]+)?\.[a-z]+\/search.*q=/i Require: jquery /* Find a suitable location to include a cue */ var nArray = $("div div[id='prs'] b"); if (nArray.length == 0) nArray = $("tr td span[id='sd']"); // old, before Aug 2008 var n = nArray[0]; // Extract search terms var searchterms = unsafeWindow.document.gs.q.value; // LibX FF libx.space.write({ keyword: searchterms, position: n.parentNode.lastChild }); 2/9/2014Code4Lib

INTERLUDE: JQUERY 2/9/2014Code4Lib

Step 2: Place A Cue Description: Link by Keyword Include: /.*/ Guarded-By: { keyword: libx.space.WILDCARD } Require: legacy-cues // Create an old-style LibX cue with a keyword search on the // primary catalog, insert it before tuple.position and animate it var cue = new libx.cues.CatalogCue('Y', tuple.keyword); cue.insertBefore(tuple.position); cue.animate(); Description: Link by Keyword Include: /.*/ Guarded-By: { keyword: libx.space.WILDCARD } Require: legacy-cues // Create an old-style LibX cue with a keyword search on the // primary catalog, insert it before tuple.position and animate it var cue = new libx.cues.CatalogCue('Y', tuple.keyword); cue.insertBefore(tuple.position); cue.animate(); 2/9/2014Code4Lib

Transitioning from LibX 1.0 to 2.0 Complete redesign of LibX client code 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/9/2014Code4Lib

LibX 2.0 API Uses namespaces: – libx.utils.*, libx.services.*, libx.libapps.*, … Uses OO classes – var R = libx.core.Class.create( (optional: BaseClass), { prototype } ) – var r = new R(); Uses inversion of control throughout – JavaScript is single-threaded, thus – anything that cant be completed immediately must be expressed as a callback Hides browser-specifics 2/9/2014Code4Lib

Caching in LibX 2.0 Object cache (persistent): – Goal: allow disconnected operation – Used for packages, libapps, modules, and scripts – Automatic expiration and update – Stores file in profile folder – SHA1 encoded filenames Memory cache (transient): – Goal: reduce load on external services, speed up response for repeated requests – Used for metadata services (xISBN, CrossRef, etc.) 2/9/2014Code4Lib

Bootstrapping LibX and Caching LibX 2.0 has a small core: – Downloaded from libx.org/editionbuilder Bootstrapped code: – Downloaded on startup global – once per browser process per-window – once per browser window – Code contained in modules Downloaded when module is run Code is cached and subject to automatic updates – In deployment: things will just work – updates will be picked up by clients after a short time period – During development: developer must force the update, see next slide 2/9/2014Code4Lib

Development vs. Caching If you change a module – Purge the feed containing the module, simply reload the page on which module runs If you change a package or libapp – Purge the feed, restart the entire browser If you change bootstrapped global code – Purge the file containing the code, restart the browser If you change bootstrapped per-window code – Purge the file containing the code, open new window If you change the core – Rebuild, reinstall If in doubt: Purge All, restart. 2/9/2014Code4Lib Less advanced More advanced LibX 2.0 LibApp API LibX 2.0 Core API

LIBAPP EXAMPLE: ALERT ACM PORTAL USERS 2/9/2014Code4Lib

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. libx.space.write ( { needsuserbutton: $('input[src=" image: libx.edition.options.icon, text: "Click for a short tutorial", action: function () { // When user clicks, offer to show a YouTube clip libx.space.write ( { youtube: "ehksdsfEcQ5YnQ"} ); } } ); 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. libx.space.write ( { needsuserbutton: $('input[src=" image: libx.edition.options.icon, text: "Click for a short tutorial", action: function () { // When user clicks, offer to show a YouTube clip libx.space.write ( { youtube: "ehksdsfEcQ5YnQ"} ); } } ); 2/9/2014Code4Lib

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 = $(" "); a.append(' '); a.attr( 'title', tuple.text || ""); // Insert link after element where a 'user button' is wanted $(tuple.needsuserbutton).after(a); // Associate onclick handler and animate $(a).click(tuple.action).fadeOut("slow").fadeIn("slow"); 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 = $(" "); a.append(' '); a.attr( 'title', tuple.text || ""); // Insert link after element where a 'user button' is wanted $(tuple.needsuserbutton).after(a); // Associate onclick handler and animate $(a).click(tuple.action).fadeOut("slow").fadeIn("slow"); 2/9/2014Code4Lib

Step 3: Create Youtube Clip Description: Create a notification to play a YouTube video, based on Video ID Include: /.*/ Guarded-By: { youtube: libx.space.WILDCARD } // Create HTML based on tuple.youtube libx.space.write ( { notify : ' ', options: { width: '450px' } } ); Description: Create a notification to play a YouTube video, based on Video ID Include: /.*/ Guarded-By: { youtube: libx.space.WILDCARD } // Create HTML based on tuple.youtube libx.space.write ( { notify : ' ', options: { width: '450px' } } ); 2/9/2014Code4Lib

Step 4: Display HTML Notification Description: Display HTML notifications via an embedded panel using jGrowl Include: /.*/ Guarded-By: { notify: libx.space.WILDCARD } Require: jquery Require: jgrowl Require: jgrowl.css // Set sticky:true unless provided in tuple.options var jGrowlOptions = $.extend({}, {sticky:true}, tuple.options); // Display notification $.jGrowl( tuple.notify, jGrowlOptions ); Description: Display HTML notifications via an embedded panel using jGrowl Include: /.*/ Guarded-By: { notify: libx.space.WILDCARD } Require: jquery Require: jgrowl Require: jgrowl.css // Set sticky:true unless provided in tuple.options var jGrowlOptions = $.extend({}, {sticky:true}, tuple.options); // Display notification $.jGrowl( tuple.notify, jGrowlOptions ); 2/9/2014Code4Lib

LIBAPP EXAMPLE: COINS, THE LIBX 2.0 WAY 2/9/2014Code4Lib

COinS, the LibX 2.0 way Include: /.*/ Description: Find COinS Require: jquery $(".Z3988").each(function () { libx.space.write({ coins: this, contextobj: this.getAttribute('title') }); Include: /.*/ Description: Find COinS Require: jquery $(".Z3988").each(function () { libx.space.write({ coins: this, contextobj: this.getAttribute('title') }); 2/9/2014Code4Lib

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.insertBefore(tuple.coins); Include: /.*/ Description: Link COinS Guarded-By: { coins: libx.space.WILDCARD } Require: legacy-cues var cue = new libx.cues.StandardCoins(tuple.contextobj); cue.insertBefore(tuple.coins); 2/9/2014Code4Lib

Add Link/360 direct link var link360 = libx.services.link360.getLink360(libx.edition); if (link360) link360.getMetadata({ query: tuple.contextobj, type: 'article', hasFullText: function (xmlDoc, url, databaseName) { cue.setAttribute('href', url); cue.setAttribute('title', "Users of " + libx.edition.links.primary.label + " click here for full text via " + databaseName); cue.setImageAttribute('src', ' cue.animate(); }, }); var link360 = libx.services.link360.getLink360(libx.edition); if (link360) link360.getMetadata({ query: tuple.contextobj, type: 'article', hasFullText: function (xmlDoc, url, databaseName) { cue.setAttribute('href', url); cue.setAttribute('title', "Users of " + libx.edition.links.primary.label + " click here for full text via " + databaseName); cue.setImageAttribute('src', ' cue.animate(); }, }); 2/9/2014Code4Lib

LIBAPP EXAMPLE: AUTOLINKING 2/9/2014Code4Lib

Text Structure of HTML 2/9/2014Code4Lib

Autolinking Must traverse DOM tree For each text node, decide: – Does it match a transformation pattern? – If so, transform it – possibly breaking it up 2/9/2014Code4Lib

Autolinking, contd Traversal is expensive (pages can contains 10s of thousands of nodes) – Cant do it all at once lest browser becomes unresponsive, instead split in chunks Must combine multiple transformations in one traversal Implemented in libx.libapp.TextTransformer Module: RegExpTextTransformer: 2/9/2014Code4Lib

Finding ISBNs in a page Description: Find ISBNs on Page Include: /.*/ RegExpTextTransformer: /((97[89])?((-)?\d(-)?){9}[\dx])(?!\d)/ig /* precond: * match: contains matched element; textNode: contains matched textnode */ var replacementNode = textNode.ownerDocument.createTextNode(match[0]); /* returns [ node, function ] * 'replacementNode' will be inserted into the DOM at the place of the matched text. Then function is called */ return [ replacementNode, function () { libx.space.write({ autolinkisbn: isbn, position: replacementNode }); } ]; Description: Find ISBNs on Page Include: /.*/ RegExpTextTransformer: /((97[89])?((-)?\d(-)?){9}[\dx])(?!\d)/ig /* precond: * match: contains matched element; textNode: contains matched textnode */ var replacementNode = textNode.ownerDocument.createTextNode(match[0]); /* returns [ node, function ] * 'replacementNode' will be inserted into the DOM at the place of the matched text. Then function is called */ return [ replacementNode, function () { libx.space.write({ autolinkisbn: isbn, position: replacementNode }); } ]; 2/9/2014Code4Lib findisbnintext.mod

Linking ISBNs Description: Create AutoLinks Around ISBNs Include: /.*/ Guarded-By: { autolinkisbn: libx.space.WILDCARD } Require: legacy-cues /* Search primary catalog for ISBN/xISBN */ var cat = libx.edition.catalogs.primary; var url = cat.makeSearch('i', tuple.autolinkisbn); var cue = new libx.cues.Autolink(tuple.position, url, libx.locale.getProperty("isbnsearch.label", cat.name, tuple.autolinkisbn)); libx.cues.addISBNMetadataTooltip(cue.link, cat.name, tuple.autolinkisbn); Description: Create AutoLinks Around ISBNs Include: /.*/ Guarded-By: { autolinkisbn: libx.space.WILDCARD } Require: legacy-cues /* Search primary catalog for ISBN/xISBN */ var cat = libx.edition.catalogs.primary; var url = cat.makeSearch('i', tuple.autolinkisbn); var cue = new libx.cues.Autolink(tuple.position, url, libx.locale.getProperty("isbnsearch.label", cat.name, tuple.autolinkisbn)); libx.cues.addISBNMetadataTooltip(cue.link, cat.name, tuple.autolinkisbn); 2/9/2014Code4Lib

LIBAPP EXAMPLE: MIX SERVICES 2/9/2014Code4Lib

Mix Services See googleintoaddison.app searchgooglebooks.mod Demonstrates use of LibXs memory cache and Google search API 2/9/2014Code4Lib

Challenges in LibX 2.0 Scalable Development Model – Maximize reusability – Leverage full spectrum of talents in the community Scalable Architecture User interface design Sustainability 2/9/2014Code4Lib

LibX 2.0 – Roles 2/9/201445Code4Lib 2009

LibX 2.0 Adapters Web-savvy librarians – Not programmers Edition Builder will become a repository to manage LibX modules and libapps – Adapters can add, combine, share, adapt, customize libapps – Based on descriptions and metadata Create localized services for their users Provide feedback to developers 2/9/201446Code4Lib 2009

LibX 2.0 Users Subscribe to services recommended by their edition maintainers using local settings – Stay connected to their libraries Decide which services they like – Fine-grained control and preferences Marketing – Will help adapters by providing marketing kit – Users must see benefits 2/9/201447Code4Lib 2009

LibX 2.0 Metadata and Repository Based on tuple space model, create metadata descriptions for modules Create a repository of modules, libapps, and packages Integrate into Edition Builder – Include consistency checking This will be done during the next 2-3 years. 2/9/2014Code4Lib

Call for Developers Launched Developer Website – Launched mailing list – Transition path: update from LibX 1.5 Agile roll-out 2/9/2014Code4Lib

LibX Team Annette Bailey Godmar Back Kyrille Goldbeck Mike Doyle Arif Khokar Travis Webb Alumni – Nathan Baker – Tilottama Gaat – Tobias Wieschnowsky 2/9/2014Code4Lib