Awesome
<!-- [![David](https://img.shields.io/david/michahell/pinbored-nwjs.svg)]() --> <!-- [![GitHub issues](https://img.shields.io/github/issues/michahell/pinbored-nwjs.svg)]() --> <!-- [![GitHub release](https://img.shields.io/github/release/michahell/pinbored-nwjs.svg)]() --> <!-- [![Stories in Ready](https://badge.waffle.io/michahell/pinbored-nwjs.png?label=In%20Progress&title=In%20Progress)](https://waffle.io/michahell/pinbored-nwjs) -->Pinbored is a 'native' Pinboard client application built with nwjs and AngularJS. Currently only OSX binaries are offered, but that is only because I use OSX myself and have not yet started building on other OSes. See the abandoned AS3 client version for more info on the history of this project.
features / functionality
SUPPORTED
-
Bookmarks
- currently: update, delete, browse, (full-text) search, stale checking.
- planned: create.
-
Tags
- currently: update, delete, browse, fold.
- planned: create, search, fake tag hierarchy.
-
Search
- currently: full-text, tagname, switch between OR/AND search.
- planned: fake tag hierarchy.
-
Batch editing
- currently: selection add tag, selection fold all tags, selection remove all tags, selection stale checking, delete selection.
- planned: selection delete all tags, make selection public/private, share selection.
NOT YET SUPPORTED
-
Note(s)
- currently: NONE.
- planned: create, update, delete, search.
-
Full collection stale checking
- currently: NONE.
- planned: stale check your whole bookmark collection!
Fake tag hierarchy explanation
In most (bookmarking) applications, a collection of items is either a flat list or a hierarchical structure (usually a tree, like in your operating systems file browser). However, we can stick to a naming convention for naming tags such that we are able to parse that structure and construct a hierarchy from it. Say we would like the following hierarchy:
- programming (main tag)
- tooling
- talks
We could then name our tags like so: programming, programming.tooling and programming.talks. Similarly we could use /, >, -, _ or some other hierarchy denotation symbol.
Why
Why use a separate bookmark service to manage bookmarks? I have < insert browser > for that?
- Access bookmarks across multiple browsers.
- Independant of browser crashes, sudden loss of all bookmarks, malware.
- Being sure that no google, mozilla or microsoft are using your bookmarks for whatever.
There are several apps that already do this but they are either commercial software or did not have the simple features that i want them to have.
For bookmark creation consider using:
- Shiori: http://aki-null.net/shiori/ or just:
brew cask install shiori
- browser dependant plugins or widgets.
I WILL add bookmark creation functionality in a later version, however this was never the intention of this app. The app is aimed at managing one's bookmarks, for example after a switch from < insert browser > to Pinboard with some 1000 unmanageable bookmarks. There appear to be users with 40.000 bookmarks. Yes. 40K bookmarks. I wish to create something to allow for managing such a huge amount of bookmarks, even though that is not my own usecase.
Screenshots
Can be seen on the project page.
Download
Downloads are available on the project page or from the GH releases page.
Building + running from source
requirements
-
Global npm installs of:
-
NWJS:
- OSX users:
brew cask install nwjs
. or install manually. optionally add an alias to your .bashrc, .bash_profile or .aliases file:# alias to nw alias nw="/Applications/nwjs.app/Contents/MacOS/nwjs"
- Windows users: install manually. I've found that it is easiest to put the extracted nwjs folder next to the pinbored dir, and running nwjs from there like so:
./nw ../pinbored-nwjs/App
.- Linux users: install manually as well. Optionally add an alias like is done here.
-
Some patience! ( the
npm install
command in the steps below can take quite a while to finish. Among others this is due to the NWJS module being downloaded by karma-nodewebkit-launcher which needs it to be able to test using node webkit ).
steps
- clone or fork project.
- run
npm install
in the project root (installs development environment dependancies) - run
npm install
in /App (installs app dependancies) - run
bower install
in / (installs app bower dependancies) - run either:
-
grunt update
- Windows / Linux users: if you get missing package errors, you should probably manually install the following npm packages:
npm install grunt npm install grunt-purifycss npm install grunt-contrib-cssmin npm install grunt-preprocess npm install grunt-contrib-uglify npm install grunt-contrib-copy npm install grunt-htmlclean npm install grunt-karma npm install grunt-open npm install grunt-nw-builder
and then:
nw App
for running the debug version in nwjs.- Windows users:
./nw ../pinbored-nwjs/App
if your extracted nwjs folder lives next to the project folder. -
or:
grunt build
and then either:nw App_release
. This is the pinbored-nwjs source css/js uglified + compacted files in the App_release dir. This is the version that gets packaged into a native application when a version is released. Do note that if you change the source code, and refresh inside node-nwjs, it does not reflect changes as opposed to running the debug version. you need to re-rungrunt build
each time!grunt release-osx
or [grunt release-win
,grunt release-lin
]. This will output binaries (both 32 bits and 64 bits by default) for the platform you are on in App/Release.
-
note: Windows and Linux binaries will be built every new release from now on !
warnings & errors
Depending on your OS and node version, you may see some of the following npm warnings.
Ignore these warnings. They are all required npm submodule dependancies.
npm WARN engine xmlbuilder@2.2.1: wanted: {"node":"0.8.x || 0.10.x"} (current: {"node":"4.0.0","npm":"3.3.3"})
npm WARN engine xmlbuilder@2.4.4: wanted: {"node":"0.8.x || 0.10.x || 0.11.x"} (current: {"node":"4.0.0","npm":"3.3.3"})
- node-gyp rebuild errors for certain npm modules.
I've seen the following extra warning on Windows 8.1, git bash, nodejs v4.0.0:
npm WARN peerDependencies The peer dependency jasmine-core@* included from karma-jasmine will no
npm WARN peerDependencies longer be automatically installed to fulfill the peerDependency
npm WARN peerDependencies in npm 3+. Your application will need to depend on it explicitly.
Also these errors.
Ignore the following specific errors.
Loading "grunt-karma.js" tasks...ERROR
>> Error: Cannot find module './lib'
Caveats and quirks
- OSX
On OSXulimit -S -n 4096
no longer neccesary due to the grunt-bowercopy task.
- Windows
- Need to manually install missing npm dependancies, see above.
- Linux
On Ubuntu Linux, which I used to test & build for linux, there can be some hassle getting the 'node' command to work: see: https://stackoverflow.com/questions/18130164/nodejs-vs-node-on-ubuntu-12-04/18130296#18130296removing the core node package using apt-get worked for me to get node and npm working together fine.Also, on Ubuntu version 14.x.x and up there is a libudev.so.0 issue but following the guide and thus installing NWJS outside of npm works flawlessly.And finally, for some reason, the grunt-bowercopy task needs npm module 'esprima' on Ubuntu. Since on OSX that module is not needed, just installing it suffices:$ npm install esprima
.
Disclaimer
Additional to the WTFPL license it is important that you know and understand the following:
*all requests performed by the application to the Pinboard API are sequences of consecutive, single operation REST requests and are not transactions with rollback history like in SQL transactions. They are 'destructive operations' by nature (that means no undo). Future versions might support custom undo history and functionality.
Roadmap
all milestones and issues:
milestones list:
name generator used for milestone names: Project Name Generator