Git Product home page Git Product logo

bookie's Introduction

Bookie

Main Site

https://bmark.us

Public Bookie Instances

https://github.com/bookieio/Bookie/wiki/Bookie-instances

Docs

http://docs.bmark.us

Mailing List

https://groups.google.com/forum/?hl=en#!forum/bookie_bookmarks

Twitter

http://twitter.com/BookieBmarks

Build Server

http://build.bmark.us

Bookie will one day be a self-hosted bookmark web-service similar to Delicious.

Check out the main site for documentation on features, how to get started installing, and where we're heading from here.

You can check out the Trello board to see what stuff is in the works atm and what the status of your favorite pet feature is:

https://trello.com/board/bookie/4f18c1ac96c79ec27105f228

Quick Start

If you're on Ubuntu, you should be able to get started with:

$ git clone git://github.com/bookieio/Bookie.git
$ cd Bookie && make sysdeps && make install && make run
$ google-chrome (or other browser) http://127.0.0.1:6543

If you're on anything else, give our Vagrant image a try. If you don't have it already, you'll need to download and install Vagrant:

http://www.vagrantup.com/downloads.html

After that, you should be able to get started with:

$ git clone git://github.com/bookieio/Bookie.git
$ cd Bookie
$ vagrant up
$ vagrant ssh
% cd /vagrant
% make run
$ google-chrome (or other browser) http://127.0.0.1:4567

Note: If you run into problems during the make sysdeps && make install process, run make clean_all to reset the environment prior to re-running make sysdeps && make install.

If you're unable to complete the install process and need additional help please feel free to contact us in the #bookie IRC channel on Freenode, or the mailing lists.

Developing

If you wish to hack on Bookie with the rest of us please check out the HACKING.rst doc in this tree.

The Willie bot has a contrib module to post bookmarks from IRC. It is not yet part of the extras repository.

bookie's People

Contributors

adamlincoln avatar adamlincolnwsu avatar anarcat avatar anishshah avatar bookiebot avatar brondsem avatar brousch avatar craigmaloney avatar dyladan avatar f3rn4nd0-c354r avatar fitztrev avatar greggrossmeier avatar hubertchen avatar ilesinge avatar jcharaoui avatar jelmer avatar krondor avatar kshitijiiit avatar mitechie avatar preddy5 avatar puntonim avatar rakeshmahadasa avatar rishirajsinghjhelumi avatar sambuddhabasu avatar sanchitgangwar avatar saurabh95 avatar suryatech avatar waf avatar widox avatar yashmehrotra avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bookie's Issues

move db package install to the db_new_install step

Right now we work with all three dbs ootb: sqlite, mysql, postgresql. However, this means we need to the -dev header packages for both mysqlclient and psotgresql-server.

What we should be doing, is to move the db install step to the fab command that sets up the database server, db_new_install. It can then check the right db driver to install based on the current selected sqlalchemy.url setting in the .ini file.

If a user wants to change it, to go from sqlite to postgresql, etc we can deal with that then and supply some docs. This should make install easier/smoother.

Federation

Federation is a honkin' great idea. Let's do more of that.

Database is sqlite3 specific

Tried using bookie with postgresql, but unfortunately the migrations create a virtual table for fulltext searching, which doesn't have an equivalent in postgresql.

Add footer with links to bmark.us, etc

We should add a nice footer with some small text for things like version info, links to bookie's website, tickets maybe, and I'd move the import link down there since it's less frequently used.

importer doesn't handle spaces

Need to test and figure out how to handle bookmark tags with spaces. How do we allow it from the api, how do we handle on import, and how to handle pulling it correctly on searches.

add the readability on import into a fulltext table

Need to be able to grab the page content for readability storage (using the python readability parser) to store it. Also need the corresponding script to do it for all existing urls.

Should have some smarts, don't replace old content with blank content, etc.

First get it stored, just as a 'backup' and then we can look at how to expose it out to the user. Might see if the extension can grab the html and send it in post for new bookmarks to help avoid an extra request.

create local file cache of the dep packages

Get the packages locally and set them up behind nginx with indexes on, then setup the tests to call that vs out to pypi, should speed up hudson tests a bunch.

Need to make sure we lock the versions down on the requirements.txt and setup.py, use pip freeze to check/set those for packages missing the version numbers.

Really going to need an exporter

Especially since things like adding fulltext requires you to reimport your bookmarks. Need an exportor to send them out, and then we can reimport them after an app upgrade.

If we don't have that we need an upgrade script, end of the day we probably need both, but will want an exporter so users feel like they can escape anyway.

Will need to figure out how to write out the netscape/delicious format file.

Deleting bookmark throws dependency error

When deleting a bookmark, it throws the following error:

URL: http://127.0.0.1:6543/bmark/delete
File '/home/craig/.virtualenvs/bookie/lib/python2.6/site-packages/WebError-0.10.3-py2.6.egg/weberror/evalexception.py', line 431 in respond
app_iter = self.application(environ, detect_start_response)
File '/home/craig/.virtualenvs/bookie/lib/python2.6/site-packages/repoze.tm2-1.0b1-py2.6.egg/repoze/tm/init.py', line 44 in call
self.commit()
File '/home/craig/.virtualenvs/bookie/lib/python2.6/site-packages/repoze.tm2-1.0b1-py2.6.egg/repoze/tm/init.py', line 52 in commit
t.commit()
File '/home/craig/.virtualenvs/bookie/lib/python2.6/site-packages/transaction-1.1.1-py2.6.egg/transaction/_transaction.py', line 329 in commit
self._commitResources()
File '/home/craig/.virtualenvs/bookie/lib/python2.6/site-packages/transaction-1.1.1-py2.6.egg/transaction/_transaction.py', line 441 in _commitResources
rm.tpc_begin(self)
File '/home/craig/.virtualenvs/bookie/lib/python2.6/site-packages/zope.sqlalchemy-0.6.1-py2.6.egg/zope/sqlalchemy/datamanager.py', line 87 in tpc_begin
self.session.flush()
File '/home/craig/.virtualenvs/bookie/lib/python2.6/site-packages/SQLAlchemy-0.6.6-py2.6.egg/sqlalchemy/orm/session.py', line 1388 in flush
self._flush(objects)
File '/home/craig/.virtualenvs/bookie/lib/python2.6/site-packages/SQLAlchemy-0.6.6-py2.6.egg/sqlalchemy/orm/session.py', line 1469 in _flush
flush_context.execute()
File '/home/craig/.virtualenvs/bookie/lib/python2.6/site-packages/SQLAlchemy-0.6.6-py2.6.egg/sqlalchemy/orm/unitofwork.py', line 302 in execute
rec.execute(self)
File '/home/craig/.virtualenvs/bookie/lib/python2.6/site-packages/SQLAlchemy-0.6.6-py2.6.egg/sqlalchemy/orm/unitofwork.py', line 402 in execute
self.dependency_processor.process_deletes(uow, states)
File '/home/craig/.virtualenvs/bookie/lib/python2.6/site-packages/SQLAlchemy-0.6.6-py2.6.egg/sqlalchemy/orm/dependency.py', line 488 in process_deletes
uowcommit, False)
File '/home/craig/.virtualenvs/bookie/lib/python2.6/site-packages/SQLAlchemy-0.6.6-py2.6.egg/sqlalchemy/orm/dependency.py', line 532 in _synchronize
sync.clear(dest, self.mapper, self.prop.synchronize_pairs)
File '/home/craig/.virtualenvs/bookie/lib/python2.6/site-packages/SQLAlchemy-0.6.6-py2.6.egg/sqlalchemy/orm/sync.py', line 41 in clear
(r, mapperutil.state_str(dest))
AssertionError: Dependency rule tried to blank-out primary key column 'readable.hash_id' on instance '<Readable at 0x2bd3390>'

/export should be a page similar to /import with an "export now" button

... or similar. At least have /export be a page not just a function call that returns the html.

Why, because sometimes people just click on those import/export links at the bottom without actually wanting to do the action, just curious what it is.

Also, because theoretically the /export function could take a while with large databases.

Also, because it will give us a way to tell the browswer "this is a file the user wants to download, not display as a webpage" (maybe zip the html like diigo does to force that?). If it is displayed as a webpage, some users might not know what to do from there.

Proposed text:

Export Bookmarks

This will create an export/backup of all your bookmarks currently in Bookie. With this file, you can import your bookmarks into your browser or other web-based bookmarking services (such as Diigo, Delicious, or pinboard.in) or just save it for safe keeping (backups are always good!).

[EXPORT BUTTON]

create examples of hosting docs

Need to run through the various methods of hosting an install

  • paste server
  • paste with apache reverse proxy/nginx reverse proxy + supervisor?
  • nginx + uwsgi
  • apache + mod_wsgi

mobile design ideas

Track clicks and display more frequently used
Show most recently added
Add a checkbox for "mobile" and display those first

Make sure search is up top/easy to get to. Maybe hidden div wtih "Search" button in header

jenkins doesn't run qunit tests

We should be running and checking the qunit tests we have in the system. Currently we only have them for the JS used in the extensions code.

new error to catch during readable/existing.py

http://www.scribd.com/doc/30715288/The-Open-Graph-Protocol-Design-Decisions
Traceback (most recent call last):
File "scripts/readability/existing.py", line 70, in
read = ReadUrl.parse(hashed.url)
File "/home/rharding/src/bookie/Bookie/Bookie/bookie/lib/readable.py", line 142, in parse
read.set_content(Document(fh.read()).summary())
File "/usr/lib/python2.6/socket.py", line 329, in read
data = self._sock.recv(rbufsize)
File "/usr/lib/python2.6/httplib.py", line 518, in read
return self._read_chunked(amt)
File "/usr/lib/python2.6/httplib.py", line 561, in _read_chunked
raise IncompleteRead(''.join(value))
httplib.IncompleteRead: IncompleteRead(7365 bytes read)

Make the API Key field on /impot not a ****** input

(not sure what the right terminology is for password-like text entry forms)

Why? Because the API Key might be some weird combination of letters, numbers, and symbols set by a Bookie administrator and the user might be trying to type it in character by character.

Also, since it is not a password it shouldn't look like one. :)

create an error mapping with codes for badgetext in the chrome ext

When we catch an error, be it a failed code value of a 200 request, or an http error code, create a JS object that we use to set the badgeText to that error code. This should help debugging for things like "your api key doesn't match" to "you had invalid tags" or something.

complete refactor of Firefox extension

Needs to at least support

  • save new bookmark
  • update existing bookmark

Nice to haves

  • tag completion from existing tags
  • Cache content setting to support the readable parsing the chrome extension can do

look into using tags for commands to the system

!private
!email
!nocontent
!mobile

Are sample commands we might want to tell the system when we bookmark a url. The completion system should help complete !X tags and we should process some action for those on the server side when saving the urls.

add license file

Definitely need one of these, have to figure out best license and such.

readable branch: url parsing fails on url http://r2

This is a url bookmarked in our massive.xml test file. It fails since it's not a full domain name, but might be ligit for an internal domain, something hacked into /etc/hosts. So we need to skip parsing this vs the exception currently.

doc need libxslt1-dev and libxml2-dev required for decruft

Need to document that these two libs are required to install python package lxml.

This might be an advantage for readability since it's pure python, but it's slower and doesn't seem to be kept as up to date, so hate to use that ootb.

/import help text box should explain the API key

What it says now:

Use the Import Bookmarks tool to import your bookmarks from Delicious or Google Bookmarks.

You will need an html export file from either of these services.

What it could say:

Import your bookmarks from any of the supported services (listed below).

"Import File" is the html-version of your export from one of the supported services.

"API Key" is the secret key specific to this Bookie installation. If you don't know what this is, please contact your Bookie host provider.

  • If you are the host provider, this setting is in the .ini file associated with this installation (usually found in the Bookie/ directory).

Need to improve ease of setup

Debating back/forth on if this is a 0.1 thing or not

Setup an install management script that can use the migrate api to check for db, check version, handle upgrades, etc. Would also need to know/determine what .ini file we're using and determining how to set it up/tell it what .ini file to use.

Create view for 404 and other errors from readable parsing

So for example, running the existing.py through my bookmark collection gives me:

status_code | count
-------------+-------
200 | 1342
404 | 142
901 | 30
403 | 26
302 | 8
410 | 4
503 | 3
905 | 2
500 | 2
401 | 1
1 | 1

There should be a web view for me to see which of these urls were 404, determine if I want to remove/clean them, etc.

Just for the record:
1 = manually parsed from the chrome extension
900+ error codes are issues with urllib or decruft parsing.

Add a tag filter ui to the main site

Would like to have a nice autocomplete ui on the main page for filtering bookmarks by tags. Allow more than one like the delicious main page does.

Look at using the same thing as the google chrome extension when it gets completion for tags.

mysql build fails, see http://build.bmark.us/job/BookieMysql/3/console

OperationalError: (OperationalError) (1170, "BLOB/TEXT column 'url' used in key specification without a key length") '\nCREATE TABLE url_hash (\n\thash_id VARCHAR(22) NOT NULL, \n\turl TEXT, \n\tclicks INTEGER, \n\tPRIMARY KEY (hash_id), \n\tUNIQUE (url)\n)\n\n' ()

MySQL can't have a unique index on a TEXT() field. It needs a length limit. So have to either use varchar for the key, or perhaps to just drop the unique constraint for mysql use. Not sure yet.

jquery can't parse xml in /posts/get

I bookmarked this page: http://pockey.dao2.com/2011/04/bangalore-hackfest-day-4-5/

When I go to load it back up, it fails and I cannot delete. It appears that the xml response isn't parseable by jquery's

$(xml).find('posts')

The $(xml) comes back as null.

Test XML for building a test case

<?xml version="1.0" encoding="UTF-8"?> 
<posts user="none" dt="2011-04-02" tag="">
    <post href="http://pockey.dao2.com/2011/04/bangalore-hackfest-day-4-5"
        hash="---"
        description="Bangalore Hackfest – Day 4 & 5 » Inspiration is food for every soul!"
        extended=""
        tag="gnome" time="2011-04-02 14:10:52.783012"
        others="--"></post>
</posts>

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.