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. Simple enough? 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 (the web server otherwise has some links into a web-served source rendering). > 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 really convenient for reporting IMO: 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've been rather obsessed with this rewrite. I hadn't touched beancount for years, and all of a sudden all these new ideas are coming to me. The new internal data structures are 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 6 or 7 simple "struct" data types). One issue with old beancount is that the internals were mutable and ugly, and at some point I stopped extending it (it smelled). 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). Basically, I want the parser output to be so simple and reusable that anyone can write tools against it. The main version is written in Python3. 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 that uses go's built-in port of yacc--it's old-school. There's no C++, only C (nothing against C++--I do a lot at work-- but this will work everywhere and should be a breeze to install). It should be easy for me to improve my grammar faster with this parser, 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 it 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 the most important project that inspired me to write this in the first place, kudos to John for many of the most important simplications--I want my new version of this to focus on these aspects: - really narrow down to the very bare essentials, it should be as simple as it possibly can. This means some features will go away. (I've been able to solve my bookkeeping problems without most of the exotic stuff.) - 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 and easy to understand, - 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. Simple. 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, and I've generalized some of the concepts I had introduced in beancount (e.g. "events" which allow you to track days). Oh, and auto-reload, and the server should support all possible "views" (all transactions, by-year, by-tag, by-payee, and by-"event period". - add a lot of support for positions and risk, currency exposure, and other investment-related tasks (I sold my home and so I have to do more of this now, and finally figured out how to deal with lots and cost correctly, something that I had never really done very well with beancount previously--now I've got it all figured out), - make importing easier, i.e., automatically filing imported inputs and PDF statements into a mirrored hierarchy of files (same hierarchy as for accounts with a simple convention to automatically create entries that show up in the "registers" with links to the document PDFs), 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. The base system will do all that, and more. I think there can be a lot of cool ideas around importing (e.g. converting PDF files into text/xml and comparing that with the contents of the ledger to guess on an account they should be associated with). 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 concept. I want to do a workshop or 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 or two 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 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. This is the core of it. Everything else is just fluff to display the data under different projections and subsets. I'm about 70% done. The web UI already works better than "old beancount." I'm going to share some output soon. It's not really published anywhere yet--I tend to just code my projects and then use them myself, though they're all on my own public code repository, I don't spend a lot of time to "sell" what I do--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 mess right now, I'm in creative mode and spitting ideas there faster than I can organize them, 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. It already works better than beancount. If you're in the mood to collaborate, one obvious candidate is to reuse the simplified input syntax. If you feel like doing that, you should be able to use lib/python/beancount2/parser/lexer.l (lexer) lib/python/beancount2/parser/grammar.y (grammar) I've been wanting to write an ANTLR version of the parser, but have been reserving this for after everything else is done. You could use that from your Scala app via Java interop and we could possibly use each other's input files, possibly cross-check each other's reports. I would actually use this parser from Clojure myself (my own pet favourite in the JVM ecosystem). This is just an idea. I'll likely do that soon after the dust settles. Another crazy coding weekend ahead... -- Martin On Friday, May 31, 2013 12:32:45 PM UTC-4, 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 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 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. > > 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 :) > > 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.
