Design document for a group managed bibliography could be done in django / python or rails / ruby to incorporate other previous work, such as an RSS reader, ACLs, etc. also, ruby and python can perform identical tasks in half the code of something like php or java. items with two dashs -- or three --- imply things that are not immediately important, but would be nice features in the future ----------------------------------------------------------------- Database tables ----------------------------------------------------------------- relationships between tables: publications have a single journal publications can have many authors publications can have many keywords journals can have many publications authors can have many publications keywords can have many publications Note: some fields will be optional Pub: id added_by (user_id of user who added this publication) bib_id (filename will be bib_id.pdf or maybe .ps) type (eg, book, article, inproceedings, etc) title journal_id volume number month year pages editor institution organization school howpublished URL . . abstract comments Author: id first_name von last_name jr Journal: id title (eg, booktitles, journal titles, proceedings titles) Keyword: id keyword pub_author: pub_id author_id pub_keyword: pub_id keyword_id User: username some preferences ----------------------------------------------------------------- Page descriptions: ----------------------------------------------------------------- login page: - simple page with username and password textboxes - either supports its own username and password (may need to include email address then) or does kerberos authentication on cs or acpub ids - also support adding new users, or only allow admins to add new users detail page: - provides a view of a selected document - allows it to be edited if the user has permission (this would take the form of a save changes or modify publication button at the bottom of the page) - allow people to delete document or add / modify comments if they have permission - fields displayed are specific to the type of publication (i.e. the required fields) and any other used database columns - make all other fields be minimized - always include the abstract, comments, and keywords fields - perhaps specify who added the paper and who has edited the comments field (future: maybe keep a short history of edits) - should allow user to change the type of document (e.g., article, book, etc) and thus update the available / required fields in some ajaxy way - identify whether the citation is 'complete' if it has all the required fields (perhaps make a button someone can click on to verify whether a publication is valid or complete) - if the bib_id is changed by user, rename the pdf file with it --- eventually, allow the user to click verify or update button to bring them to the verify page verify page: - to be implemented much later - provides a two pane view, on the left is the standard detail page view and on the right is the same view, but using information pulled from searches online - searches several places, like google, citeseer, medline, acm, ieee, etc (this would just require writing several parsers) - allow ajax style information updates (like a percent done, or which site is currently being searched). - if conflicting information from sites is found, make the sets of info available via tabs at the top of the pane browse page: - most likely to have come here after a search - publications are sorted according to some metric: (default is author) - links available for each publication: the pdf, a modify link, and a url to the document (if it was provided when the document was added) - include a link that displays the abstract via css and javascript (visiblity: hidden / visible) - include a link that displays the comments via css and javascript (visiblity: hidden / visible). somewhere list the people that have added to those comments. home page: - user is taken here after they log in - has a link to search or advanced search (maybe include ajaxy transitions between them) - has a link to preferences page - has a link to add_pub page -- maybe allow user to 'subscribe' to certain keywords and thus be notified when new publications are added with those words -- maybe include a list of recent additions or recently added comments --- maybe include an rss reader for a set of common publication sites (but allow the user to specify their own site too) - allow for any number of configurable filters (via regexps) to only show particular topics of interest - allow one button to be clicked to display the abstract (this may require writing parsers since the abstract may not be attainable from just the rss feed) - clicking the title takes the user to the actual site - allow one button to be clicked which brings the user to the add_pub page with the appropriate fields filled in preferences page: - default sort order - maximum number of items to display per page -- perhaps some list of tags or keywords to 'subscribe' to --- future: a list of filters for the rss reader add_pub page: - allow user to specify a new publication type and then get the form with the appropriate required fields - allow user to paste into a textfield a new publication or several publications in bibtex format - allow a user to upload a .bib file - provide a link for a pdf file (or a url link, after which the file would be downloaded locally) --- find an api which allows for pulling information directly from the pdf file - load into a temporary database maybe to prevent aliasing with others currently browsing the database - do some sort of checking to see if added publication(s) overlap with any publications currently in the database - notify if publications overlap current items in the database, or if there are missing fields that are required (but allow them to post anyway if some fields are missing) - allow for automatic generation of the identifier (bib_id), and rename the pdf file if the identifier changes -- this includes figuring out how to resolve conflicts (like johnson01a and johnson01b) and potentially renaming older bib_ids and pdf files too --- include the automatic identification of keywords by looking at which current keywords occur in the abstract and maybe what words are common in the abstract ----------------------------------------------------------------- General questions: ----------------------------------------------------------------- - what other plugins (from rails of django) might be useful? - some ACL options: maybe have superadmin, group admins, and users in each group - access levels: everyone can add or modify, but takes a group admin to delete (user can send a delete request) - how to do search? maybe django / rails supports some method already? should support an advanced search too - file naming convention for pdf files? last name of first author then year is common (johnson01) but so is an acronym of each author's last name and then year (JMF01). - how to export bib files? part of the browse page? similar to a shopping cart for a session, or allow a user to store several sets of named bibliographies? - eventually support exporting to other bibliography formats - maybe include some user_detail page that has information about which publications or comments people added - should passwords be new for this database (and thus stored in the database) or should we just use the username and password from cs or acpud and just do kerberos authentication? - new users allowed, or admins create users? --- far far future: - would be awesome to add some calendaring / scheduling application - user could add their own calendar files (or allow people to upload / give a link to calendar files) - times marked as private would not display the actual task, but just that the time is busy (maybe allow for a real description and a private description, where the owner gets the full description in his view, but everyone else gets the private description - also have a list of maintained calendars of common events that users could add to their calendar --- would be even better to make events unique and people just specify whether they are going to events or not. their 'calendar file' would just include ids which index into a database of events (could be difficult to resolve private / public events being the same, but these are enough ideas to make an entirely new application)