yppdb : Your Personal Paper Database

_yppdb : Your Personal Paper Database_

By Jay McCarthy (jay at kenyamountain 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" 1)))

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.

> (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" 1))))
  (provide interface-version timeout start)
  (define interface-version yppdb:interface-version)
  (define timeout yppdb:timeout)
  (define start (yppdb:generate-start "/Users/jay/Development/plt/yppdb.db")))

Notes and Limitations

Some possible extensions for the future:
     * Automatic meta-data population like CiteULike
     * Filtering based on author/title/year masks, rather than just categories
     * Priority levels for sorting in addition to "Read?"
     * < Your suggestion here >


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