dblbook
文件大小: unknow
源码售价: 5 个金币 积分规则     积分充值
资源说明:Double-Booked: a Chrome app for double-entry accounting.
# Double-Booked: A reactive web app for double-entry accounting

This is an app for double-entry accounting, in the tradition
of [GnuCash](http://www.gnucash.org/) and
[Ledger](http://www.ledger-cli.org/).  It is designed in a
reactive style, with the goal of having a highly responsive
UI where updates propagate immediately and you don't
"generate a report", you just view it (with instant
results).

It is designed to run in a web browser, client side, using
indexedDB as its data store (though with the ability to sync
to a centralized server).

I have lots of big ideas for how I want to improve on
existing accounting apps.  But as a backend guy, I am
primarily focused right now on creating a data storage layer
that has all the features I want.  I want to make sure the
data model is rich and powerful (hierarchical accounts,
multiple currencies, stocks/bonds with lot/basis info,
balance assertions), but also highly efficient.  Propagating
updates efficiently in an accounting ledger is a hard
problem that I discuss at length in
[DBDesign.md](DBDesign.md).

Basically I'm trying to create the "git" of double-entry
accounting.  Git's primary contribution is its efficient
data model and storage format.  It is the basis on which the
entire ecosystem is built.

# Build / Run / Test

You need [Node.js](https://nodejs.org/).

Install these tools if you don't have them globally
installed already:

    $ npm install -g bower
    $ npm install -g gulp

Then install our dependencies into the local tree (it reads
the list of packages to install from `bower.json` and
`package.json`):

    $ bower install
    $ npm install

Now build/transpile all the source and create a
fully-populated output directory in `build/`:

    $ gulp

Now you can run the app by visiting `build/index.html`
(not much to see right now though).

To run the tests visit `tests/test.html`.  I have verified
they work in both Chrome 43 and Firefox 39.

# Overall Design / Technologies

The data storage layer is in [model](model) and written in
ES6.  It only depends on:

* a red-black tree, since JavaScript doesn't natively
  provide a sorted map.
* indexedDB, for storing the data locally

Because of the second dependency, it requires a web browser
(there doesn't appear to be a robust implementation of
indexedDB for Node.js).

The storage layer is by far the most interesting and mature
part of the project so far.  Between the [design
doc](DBDesign.md) and the source comments, it should be
pretty usable.  It is also tested reasonably well by the
tests in `tests`.

The (very minimal) UI is built on
[React](http://facebook.github.io/react/) and
[ReactRouter](https://github.com/rackt/react-router).  It
uses some minimal UI framework in the form of
[Pure](http://purecss.io/) and
[FontAwesome](http://fortawesome.github.io/Font-Awesome/).

Since the app is designed to be capable of working
completely offline, it is intended to be usable as a Chrome
App or with ServiceWorker.  I'm keeping my options open on
this point.

My hope is to implement syncing with a server using a flat
file on Google Drive or DropBox.  So you'd have a local
database in indexedDB, but you could push your commit log to
Google Drive and pull commits from it.  A key idea here is
that it should sync to storage owned and controlled by the
user, not servers that I operate.

本源码包内暂不包含可直接显示的源代码文件,请下载源码包。