SeaPIG Library
On this page you can list Python- or computer-related books you're willing to lend or those you'd like to borrow. You'll have to arrange with the lender to transfer the books at a monthly meeting or other location. Below that is a proposal for a web application to keep track of this.
Low-tech library
I have
Name, email, titles
I'm looking for
Name, email, titles
Library webapp proposal
Goals
Various SeaPIG members have recent computer-related books they don't need right away and are willing to share, and other members who'd like to borrow books to learn something. Because SeaPIG does not have a permanent location at present, there is no place to put a community bookshelf. So the alternative is a program that keeps track of who owns which book and who is currently borrowing it, and the parties will make their own arrangements to transfer the books.
Some members are interested in writing App Engine/Pylons apps, so this is one possible technology. The SeaPIG server is also available for experimentation or hosting. We could make a backend-neutral Pylons app with a flexible model.
A multi-group feature is added, in case other Python user groups or other groups we allow want to use the infrastructure.
Data structure
Under construction
Group
id (short string such as "seapig", "porpig", "nzpig")
name
comment
Note: only group leaders should be able to modify this. Have group admins or just a central pool of site admins?
User
id
group (Foreign key to Group.)
name
email
phone
comments
username (unique. combine with id?)
password (private)
Note: all fields are publicly visible except those marked private. We could do something to make the email and phone less prominent if requested.
Note: if using App Engine, could leverage its user accounts and eliminate some of these fields. However, some users may object to creating Google accounts, and Google's privacy policy may prevent us from sharing user information with others.
Item
An item somebody is willing to lend.
id
type (Just "book" for now)
title
author
subject (Use arbitrary tags here?)
comment
available (Boolean. False if you don't want to lend it at present; it will be hidden from the available list.)
owner (Foreign key to User; thus indirectly to Group)
borrower (Foreign key to User. Null if in owner's posession)
due_date (Individual arrangement between lender and borrower)
Wishlist
An item somebody wishes but is not available.
id
requestor (Foreign key to User.)
comment (title, etc)
date (Date record was created.)
Use cases
Anonymous visitor browses available items and wishlist. (Hide email/phone? Show "checked out" if in use.) If multi-group application, visitor must view each group separately.
A user registers or updates his details.
An owner lists the items he has available. There may be a lot of them, so streamline the process.
A borrower checks out an item or returns it. Need some kind of checkout screen that adjusts the borrower and due_date fields. Note that either the owner or borrower can update this; they may forget to if the item is transferred offline; and the program has no way of knowing whether it "really" happened. Should only the owner be able to update checkout status? What if the owner is out of commission but somebody else knows where the item is?
A requestor adds a wishlist item, modifies it, or deletes it.
Aggregate statistics. Total number of available items per type, transactions per month, etc. This is an optional extra, but maybe we can build the counters into the data structure.
Developer comments
If you have any ideas how this application could be improved, put them here.
* Suggest that there be a way to insert a collection of books via ISBN number. The required book information can be gathered using the Amazon AWS service (REST).