yppdb : Your Personal Paper Database

_yppdb : Your Personal Paper Database_

By Jay McCarthy (jay dot mccarthy at gmail dot com)

Keywords: _misc_


I collect records of papers that I have read and want to
read. Initially, I saved copies on folders on my disk, but this ended
up being a pain. Then I stored then in bookmarks, but again, it was a
pain. Then I stored links on a wiki page and used headers for
categorization. This was better, but not so good. So, I wrote a little
web-server application to store my references.

After creating it, I learned about and I adapted a few
parts of the interface to be similar (i.e. the search box on the upper
left and the "Post to YPPDB" bookmarklet.) But, I think my application
is better for me due to it being private. This is good for maintaining
secrecy and for having my records always available. However, CiteULike
does have some great features that I'd like to steal.

Please visit for screenshots.


This file contains the module-based servlet base. Require it like this:

> (require (planet "" ("jaymccarthy" "yppdb.plt" 2)))

It provides the follow definitions:

> interface-version

A symbol denoting the interface of the web-server that this works with.

> timeout

A number denoting the timeout for continuation URLs.

>  instance-expiration-handler

A handler for expirations

> (generate-start path-to-db) : string -> (request -> x-expr)

This procedure takes a filesystem path that is the desired location of
a YPPDB database file. It returns a 'start' procedure that consumes
requests and provides an interface to the underlying database.

The underlying system should automatically initialize the database
file if it does not exist, as well as detect how your web-server is
configured to automatically provide certain features.


The following module-based servlet represents an installation of YPPDB:

(module yppdb mzscheme
  (require (prefix yppdb: (planet "" ("jaymccarthy" "yppdb.plt" 2))))
 (provide interface-version timeout start
  (define interface-version yppdb:interface-version)
  (define timeout yppdb:timeout)
  (define instance-expiration-handler yppdb:instance-expiration-handler)
  (define start (yppdb:generate-start (build-path "/Users" "jay" "Development" "plt" "db" "yppdb.db"))))

Notes and Limitations

Some possible extensions for the future:
     * Automatic meta-data population like CiteULike
     * < Your suggestion here >


v2.0 :: June 21st, 2006
     * Second revision

v1.0 :: April 8th, 2005
     * Initial revision