Project

General

Profile

Actions

Bookmark Library

I have a whole ton of bookmarks that I've collected over the years. I have always wanted to build a system to keep track of them and help me search them. For some reason it has taken me a long time to get started on this project.

The idea is to develop a separate library (i.e. model) and then use it with several GUI's. I will probably create a web-based GUI first.

Requirements

These are semi formal requirements

  • be written in Python3 and use sqlite for the back end
  • auto suggest a title for a bookmark based on the contents of the page's title tag
  • store a (short) user defined description of each bookmark
  • record the number of times a bookmark link has been clicked
  • record the date of the last time a bookmark link was clicked
  • check if a bookmark link is still reachable
  • record the last date a bookmark link was reachable
  • auto suggest possible tags using a term frequency from page content
  • support search scoring
  • support tag hierarchies
  • text based front end
  • import tool

Schema

bookmarks
  • This table will hold the main content, one row per bookmark.
Column Type Description
id integer (primary key) unique identifier for each bookmark
url text the URL for the bookmark
title text the title for the bookmark
description text a short description of the bookmark if the title isn't enough
times_visited integer number of times the bookmark link has been clicked
last_visited date datetime of the last time the bookmark link was clicked
last_reachable date datetime of the last time the bookmark link was verified to be reachable
date_added date date the bookmark was added
deleted boolean bookmark was deleted
tags
  • This table will hold a collection of tags that are used to categorize and describe each bookmark.
Column Type Description
id integer (primary key) unique identifier for each tag
value text the tag text itself
category_tags
  • This table will hold the association of bookmarks and tags where the tags categorize the bookmark.
Column Type Description
tag_id integer (foreign key) id of the tag
bookmark_id integer (foreign key) id of the bookmark
description_tags
  • This table will hold the association of bookmarks and tags where the tags describe the bookmark.
Column Type Description
tag_id integer (foreign key) id of the tag
bookmark_id integer (foreign key) id of the bookmark

Setting Up the Web GUI

  1. Install apache and mod_wsgi. Also install genshi and setuptools for Python3 if not already installed:
    $ sudo aptitude install apache2 libapache2-mod-wsgi-py3 python3-genshi python3-setuptools 
    
  2. Install bmklib
    $ cd /home/dsorber/Documents/phalanx-repo/software/bookmark_library
    $ sudo python3 setup.py install
    
  3. Run the web interface install script to install the web interface:
    $ cd bmklib/web
    $ sudo ./install.sh
    

TODO

  • all bookmarks page
    • pagination
  • all tags page
  • display bookmark info page
    • add new bookmark
  • search

Development Log

I decided that I really need a development log because I don't work on this project very often. I'll want to keep track of my thoughts and whatnot so that I can pick back up where I left off next time I get the urge to work on this.

  • July 5, 2015
    • After trying for several hours to get the bmklib web interface up and running on my laptop I finally discovered that you no longer need to install Genshi from trunk (and, in fact, the trunk version appears to be broken...). Instead you can install the `python3-genshi` package from the Ubuntu repo which includes Genshi version 0.7.3 and appears to work well with Python3.
    • I wrote a "web interface install script" to make installation of all the various pieces a bit easier. I also added a premade apache configuration to the repo for ease of install next time.
  • April 4, 2015
  • '''December 6, 2014'''
    • IDEA: add master try except block in .wsgi file to catch and display errors via the web interface

References

----
Back home

Updated by over 4 years ago · 1 revisions