Hi Harshad, Notes below.
On Fri, May 31, 2013, at 12:32, Harshad RJ wrote: > Hi all, > > Have a little project to announce: Abandon > <https://github.com/hrj/abandon> > > *What is it?* A cross platform, double-entry accounting system with a > syntax similar to ledger's. Comes with two interfaces: a command line > mode and an interactive GUI for reports. > > *Why? *I am quite happy with ledger, and when I first came across it I > immediately switched to using it for my own accounts. However, when I > had to show the reports to my accountants and auditors, they weren't > all that gung-ho. > > They needed an interactive system in which they could, for example, > select an account (with keyboard / mouse) and view only its details, > and then change the grouping or sorting order, etc. They are not tech- > savy enough to fiddle with command line parameters (although they are > smart in other ways). > > The beancount <https://github.com/jwiegley/beancount> project seems > suited for this. However, I thought the complexity of running a web > server would I've been working with my accountant through beancount for years. I agree with you about the complexity of running a web server. So I don't do that: I just run a "wget" on the output and zip that into an archive that I email him. I hope this doesn't come as a "whydidn'tIthinkofthat" moment. He unzips the file on his Mac and is able to browse through all the HTML reports, balance sheet, income statement, "registers" and what not--it's all been sucked into static files. We've been doing this for several years now; the only thing I wish it did is invert the negative amounts for Income, Equity and Liabilities (the new version will do that, more below) so I would not have had to explain this to him (he gets it, but I think it's better for reporting to be able to just go back to the credits/debits world, only at final display time). There's even a switch to make the web server not serve the "source" in order to avoid disclosing some personal notes and account numbers and what-not (my personal input file is rich with details), I turn that on before I suck in the HTML files. > be too much for tech-non-savy folks. Also, for development, it is > easier I think to develop a desktop application than a web server. I beg to differ, but I think it's awesome that you built something the way you like it :-) Web apps are so convenient for reporting: you can refer to specific pages via unique URLs, cut-and-paste everywhere, and share them on the network, and rendering looks better than more GUI desktop libraries at this point. > I could have extended the ledger code base itself, but I am not very > comfortable developing an application in C++ (though I am familiar > with it and used it previously). I have developed Abandon in Scala > instead. That's awesome. > So, that's the story behind Abandon. I have spent only 4 weeks on it; > hence it has the barest minimum of features (though sufficient for my > use). Many * many* features are missing as of now, the most glaring of > which is currency support. The reason I am sharing this is that > somebody might have a similar use-case as mine and could benefit from > it. And oh, I would benefit too from any criticisms and ideas :) After many years using beancount for "real world" finances (my own personal financial life, joint accounts with my wife, and my company's finances), I've had a few insights recently about how to track positions for capital gains reporting correctly (had never been fully carried out in beancount, I have a great little set of data structures now) and what I think are a few great ideas for rebuilding the now rather crufty internals of beancount, and dealing with currency conversions (not a trivial problem in a system that is not "homed" to any "currency"). So I'm smack-in-the-middle of a FROM-SCRATCH REWRITE of it. I haven't slept much in the last few weeks... every free hour is spent on this, I'm totally obsessed with this rewrite. I hadn't touch beancount for years, and all of a sudden all the ideas are hitting me. The new internal data structures will be simplified A LOT. One of my goals on this rewrite is to take 5+ years experience using beancount and strip away all the features that aren't useful. The result is a much simplified and immutable data structure (a simple list of entries, each of which may take one of 5-6 simple "struct" data types). One issue with beancount is that the internals were mutable and ugly, and at some point I stopped extending it. Now with this really simple new parser output, the simplicity of what you get from it really entices me to go all the way and add a lot of reports, e.g. currency exposure for positions, and some new features (e.g. automatic filing of scanned documents and making them available through the interface, "goals" a.k.a budgeting, and a bunch of new ideas). In addition, by simplifying the syntax, I redesigned the input grammar a little bit in order to be able to use a parser generator. I have a C flex/bison parser which feeds a Python3 builder (most of the code is python3), and a somewhat experimental parser written in Google's "go" language. It should be easy for me to evolve the grammar faster with this, and I've been looking to do that for a while :-) The new syntax is still pretty close to Ledger's, but will be incompatible unfortunately. You can have a look at my new syntax on the cheatsheet here: https://hg.furius.ca/public/beancount/raw-file/tip/doc/cheatsheet.org However, my focus is on maintaining simplicity. Whereas Ledger is a fantastic breeding ground for new ideas and explorations--and was originally the source of what inspired me to write this in the first place, kudos to John--I want my new version of this to - really narrow down to the very bare essentials, it should be simple, - provide a parser for the language that outputs a very simple data structure so that other people can use it to build new kinds of reports and importing tools, text-based or otherwise; this is crucial, the output data structure is minimal, - write a killer web front-end for it with more reports and views, with ideally little or even no command-line options of any kind. You just run it, and everything else should be some clicks away. At this point I've got opening balance sheet, balance sheet, income statement, statement of positions and currency exposure, list of "conversions", and other new stuff. - make importing easier, i.e., automatically filing imported inputs and PDF statements into a mirrorred hierarchy of files (same as for accounts) and then for the web front-end to link to each account's documents, as well as providing a library that given a set of partial transactions can try to automatically categorize them. I then want to spend some time on EDUCATION, i.e., doing presentations to explain to people how spending an hour every two weeks updating a single text file can result in all of those reports, and providing example transactions for all the usual kinds of operation that occurs in one's financial life. They should be able to look things up by example in the documentation. I'm always surprised at how few people--even smart people, I work with a lot of really smart people!-- don't know anything about this "method of counting." The double-entry method should be taught in high-school IMO! It's just a clever method for counting, with a really simple data structure. I want to do a workshop/presentation to get people started, but before that, I want to have a really stripped- down rewrite ready to go and tested really solid. I'm about a month away. I've also defined a small set of primitives which filter those lists of entries and return modified lists in order to perform the common operations required for reporting. The result is a nearly purely functional set of surprisingly simple operations for "transferring" (from income to equity/net-income), "summarizing" (for opening- balances), "padding" (automatic balance adjustments), inserting unrealized capital gains into subaccounts, and realizing this simple list into a tree of accounts for reporting. I'm about 70% done. The web UI already works better than "old beancount." It's not really published anywhere yet, but if you feel courageous, you're welcome to clone my repo, switch to branch "parser" and look at bin/bean2-* lib/python/beancount2/* Also, check out the TODO file at the root. It's a bit of a mess right now, I'm in creative mode, but I'll be cleaning up all the wood chips really neatly after I'm done building the furniture, if you see what I mean. This is meant to be a full replacement of beancount, cleaner and better in every way. If you're in the mood to collaborate, one obvious candidate is to use a common input syntax. If you'd like to do that, you should be able to use lib/python/beancount2/parser/lexer.l lib/python/beancount2/parser/grammar.y I've been wanting to write an ANTLR version of the parser, but have been reserving this for after everything else is done. If you'd like to do that, you could use it from your Scala app via Java interop and we could both use each other's input files, possibly cross-check each other's reports. I would actually use that myself, using it from Clojure (my own pet favourite in the JVM ecosystem). -- Martin > cheers, > -- > *Harshad RJ* <http://lavadip.com> > > -- > > --- > You received this message because you are subscribed to the Google Groups > "Ledger" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/groups/opt_out. > > -- --- You received this message because you are subscribed to the Google Groups "Ledger" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/groups/opt_out.
