The Ecology and Biodiversity of Libraries
Chris Mueller
Software Libraries Workshop
Dagstuhl, Germany
March 9, 2005
March 9, 2005 Chris Mueller Software Libraries Workshop, Dagstuhl Germany 2
Ecosystems
(http://www.antelmann.com/holger/images/neworleans/jungle.jpg)
(http://www.lanl.gov/news/photos/computing.shtml)
Biologists gain knowledge by observing nature…
Can we observe libraries in the wild?
March 9, 2005 Chris Mueller Software Libraries Workshop, Dagstuhl Germany 3
An Expedition into the Strange World of Libraries…
March 9, 2005 Chris Mueller Software Libraries Workshop, Dagstuhl Germany 4
Network Library
#include "winsock2.h"
void socket_connect(const char* host, const int port) { WSADATA wsaData;
int iResult = WSAStartup( MAKEWORD(2,2), &wsaData ); if ( iResult != NO_ERROR ) // ignore;
sockaddr_in clientService; clientService.sin_family = AF_INET; clientService.sin_addr.s_addr = inet_addr( host ); clientService.sin_port = htons( port );
if ( connect( m_socket, (SOCKADDR*) &clientService, sizeof(clientService) ) == SOCKET_ERROR) { WSACleanup(); return; } // ...}
TypeLanguage neutral, platform neutral protocol library
UsageCommunicated between applications
ComponentsSystem libraries, Vendor libraries
UsersSoftware developers
TCP/IP
March 9, 2005 Chris Mueller Software Libraries Workshop, Dagstuhl Germany 5
Plugin Library
# From httpd.confLoadModule rewrite_module libexec/httpd/mod_rewrite.so
TypeApplication specific plugin library
UsageExtend Apache's feature set
ComponentsSystem libraries
LanguageC
UsersSoftware developers, Webmasters
Apache Modules
/* C Interface *//* the main config structure */module AP_MODULE_DECLARE_DATA rewrite_module = { STANDARD20_MODULE_STUFF, config_perdir_create, /* create per-dir config structures */ config_perdir_merge, /* merge per-dir config structures */ config_server_create, /* create per-server config structures */ config_server_merge, /* merge per-server config structures */ command_table, /* table of config commands */ register_hooks /* register hooks */};
March 9, 2005 Chris Mueller Software Libraries Workshop, Dagstuhl Germany 6
Language Platform
import java.util.Date;
class HelloWorld { public static void main(String args[]) { Date now = new Date(); System.out.println(now + "Hello world!"); }}
--> Sat Mar 05 12:54:25 EST 2005: Hello world!
TypePlatform, library and runtime specifications, library collection
UsageApplication development
ComponentsSystem libraries
LanguageJava, C
UsersSoftware developers
J2SE
March 9, 2005 Chris Mueller Software Libraries Workshop, Dagstuhl Germany 7
Specifications
TypeDomain specific library specification
UsageEnterprise application development, service and protocol abstraction
ComponentsJ2SE, system libraries, vendor libraries
LanguageJava
UsersSoftware developers
J2EE
TypePlatform specific protocol abstraction
UsageDirectory lookup
ComponentsJ2SE, J2EE, system libraries, vendor libraries
UsersSoftware developers
JNDI
import javax.naming.Context;import javax.naming.InitialContext;import javax.naming.NamingException;import java.util.Hashtable;
class Lookup { Object Lookup(String name) { // Identify service provider to use Hashtable env = new Hashtable(11); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory"); Object result = null; try { Context ctx = new InitialContext(env); Object obj = ctx.lookup(name); ctx.close(); } catch (NamingException e) { } return result; }} (http://java.sun.com/products/jndi/tutorial/getStarted/examples/naming.html)
March 9, 2005 Chris Mueller Software Libraries Workshop, Dagstuhl Germany 8
Script Library
#!/bin/bash# Add the count of new log entries to the log stats file
if [ -z "$1" ]; then echo usage: $0 log-file log-stats-file exitfi
if [ -z "$2" ]; then echo usage: $0 log-file log-stats-file exitfi
echo `date` `wc -l $1` >> $2
% log-counter library-examples.txt log.dat% cat log.datSat Mar 5 13:05:51 EST 2005 379 library-examples.txtSat Mar 5 13:06:23 EST 2005 392 library-examples.txt
TypeSystem commands
UsageSystem administration, monitoring, reporting
ComponentsSystem commands, language libraries
LanguageBash, csh, Perl, Python, etc…
UsersSysadmins, software developers
Log Monitor
March 9, 2005 Chris Mueller Software Libraries Workshop, Dagstuhl Germany 9
Data Access Libraries
package com.mail.ejb.eventlog;import java.util.*;import javax.ejb.*;import javax.naming.*;import java.rmi.RemoteException;
// Table Abstractionpublic abstract class UserLogBean implements EntityBean { // Access methods for relationship fields public abstract Collection getReadEvents(); public abstract void setReadEvents(Collection events);
// Business methods public void addReadEvent(int eventId) { try { Collection events = getReadEvents(); events.add(eventId); } catch (Exception ex) { throw new EJBException(ex.getMessage()); } } // ... }
// Query Abstractionpublic class EventLogControllerBean implements SessionBean { private LocalLogHome logHome
public void logUserReadMail(String userId, String messageId) { LocalUserLog log = logHome.findByPrimaryKey(userId); log.addMailReadEvent(messageId); }}
TypeOO relational database abstraction
UsageAccess database tables
ComponentsJ2SE, J2EE
LanguageJava, SQL
UsersSoftware developers, UI designers
Enterprise JavaBeans
TypeData source library and abstaction layer
UsageAbstract vendor protocols and data sources
ComponentsVendor libraries, language libraries
LanguageJava, SQL
UsersSoftware developers, DBAs, DB developers
ODBC
March 9, 2005 Chris Mueller Software Libraries Workshop, Dagstuhl Germany 10
Database Libraries
-- Function that counts a users mail messagescreate or replace function count_messages ( user integer )return integer asbegin return select count(*) into temp_count from message where user_id = user;end;
TypeProcedural database access
UsageCreate SQL functions, database triggers
ComponentsSQL, DB libraries
LanguagePL/SQL, Java, C/C++, Perl
UsersDBAs, DB developers
Stored Procedures
TypeDatabase extension libraries
UsageExtend database operations
ComponentsDB libraries, language libraries
LanguageC/C++, Java
UsersSoftware developers, DB developers
Database Cartridges/Packages-- Apply multidimensional scaling on to the data-- and return the result in a new temporary tableselect MDS(user, time, event, duration) from mail_events;
----------------|Row | X | Y |----------------| 1 | .4 | .5 || 2 | .2 | .9 |…
/* Possible C signature */db_table* MDS(db_table *queryResult, db_query_info *info) { ... }
March 9, 2005 Chris Mueller Software Libraries Workshop, Dagstuhl Germany 11
Application Frameworks and Business Libraries
package com.mail.applogic;
import javax.servlet.*;import javax.servlet.http.*;import com.mail.businesslogic.*;
// Process user mail requestsclass MailServlet extends HttpServlet { private String user; private String message; private int messageId; // ...
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.user = request.getParameter("user"); String event = request.getParameter("event");
if(event.equals("showMessage")) { this.messageId = request.getParameter("messageId"); this.handleShowMessage(); } // ... }
void handleShowMessage() { Mailbox mb = Mailbox(this.user); this.message = mb.GetMessage(this.messageId); }}
TypeApplication framework
UsageApplication logic for Web applications
ComponentsJ2SE, J2EE, business libraries
LanguageJava
UsersSoftware developers
Servlet API
TypeDomain library
UsageAbstract mail data types and operations
ComponentsJ2SE, j2EE, business libraries
LanguageC/C++, Java
UsersSoftware developers, DB developers
Mail Library
March 9, 2005 Chris Mueller Software Libraries Workshop, Dagstuhl Germany 12
Tag Libraries
<@ taglib prefix="mailapp” uri="http://www.mail.com/tags/mail"><app-data> <mailapp:message_from/> <mailapp:message_subject/> <mailapp:message_content lines="2"/></app>
<app-data> <mail:from>[email protected]</mail:from> <mail:subject>Libraries</mail:subject> <mail:content> Libraries are so cool! I can't wait to go to Germany and talk about ... </mail:content></app-data>
TypeUser interface, data access
UsageData layout, presentation
ComponentsJ2EE, business libraries
LanguageXML, Java (JSP)
UsersUI designers, software developers
Mail Tag Library
March 9, 2005 Chris Mueller Software Libraries Workshop, Dagstuhl Germany 13
Style Libraries
TypeData structure manipulation
UsageTransform data to other formats
ComponentsLanguage libraries
Transformation Libraries
LanguageXSLT, Perl, Python, Bash, csh
UsersUI designers, software developers, “branders”, translators
Device Transform (mail-to-html.xsl)
<html> <brand-header/> <b>From:</b> [email protected] </br> <b>Subject:</b> Libraries </br> <p i18n="no"> Libraries are so cool! I can't wait to go to Germany ... <p> <brand-footer/></html>
Brand Transform (osl-brand.xsl)
<html> <head><title>OSL Mail</title></head> <body> <b>From:</b> [email protected] </br> <b>Subject:</b> Libraries </br> <p i18n="no"> Libraries are so cool! I can't wait to go to Germany ... <p> <font size="-10"> You will obey Andy </font> </body></html>
I18N Transform (translate.pl)
<html> <head><title>OSL Post</title></head> <body> <b>Von:</b> [email protected] </br> <b>Thema:</b> Libraries </br> <p> Libraries are so cool! I can't wait to go to Germany ... <p> <font size="-10"> Sie befolgen Andy </font> </body></html>
March 9, 2005 Chris Mueller Software Libraries Workshop, Dagstuhl Germany 14
Component Libraries
# COM in Python:
from win32com.client import Dispatch
xl = Dispatch("Excel.Application")xl.Visible = 1xl.Workbooks.Add()xl.ActiveSheet.Cells(1,1).Value = ’Libraries rule!'xl.ActiveSheet.Cells(2,1).Value = ’Dagstuhl rules!'xl.ActiveWorkbook.Close(SaveChanges=0)xl.Quit()
TypeLanguage neutral software components, platform
UsageExpose language-specific libraries to other languages and applications
ComponentsLanguage libraries
LanguageAll
UsersEveryone
COM
March 9, 2005 Chris Mueller Software Libraries Workshop, Dagstuhl Germany 15
Quick Observations
Types of Libraries Protocol libraries Plugin libraries Platforms Frameworks Specifications System commands Database libraries Style libraries Component libraries
Users of Libraries Software developers DB developers System administrators UI designers DBAs End users
Ways to Access Libraries Programming languages Shells Menus Config files
March 9, 2005 Chris Mueller Software Libraries Workshop, Dagstuhl Germany 16
Library Research
Libraries are plentiful Libraries can be observed in their natural habitat Every library user has a story
Library research should follow the traditional sciences and have a strong empirical component.