I specifically moved from ledger to beancount because:
- Strictly defined directives, currencies and accounts
- Python, and ability to easily extend with python
- Currency restrictions and currency related stuff
- Fava
Another bonus was that it's simple to install with just pip.
I would prefer not needing to spin up a docker container and hassle withmaking it communicate over my network with other apps/plugins that might useit's API. It's an incredible barrier to entry for the non-developer. They already have toknow how to use pypi and potentially struggle with the python path. Making themuse docker now would be a bad move imo.
Hopefully this will be distributed as a binary, and simple way to "install" plugins.
Disclosure: I've converted a couple of people from using webapps or spreadsheets touse ledger. They love ledger despite some of the nuance. I've been trying to move themover to beancount, but having a bit harder time because of the python dependency.Fava and being able to run it locally has been a great driver to have people at least considerinstalling python and giving beancount a test run.
I do hope with this update that distributing/installing beancount wouldn't get more complicated.We already had to deal with that in the frontend javascript world :D
--
You received this message because you are subscribed to the Google Groups "Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email to beancount+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/beancount/986ed772-bf70-4d29-89b9-109fc2d3dc28o%40googlegroups.com.
On Sat, 4 Jul 2020 at 06:34, Martin Blais <bl...@furius.ca> wrote:
> Hi,
> Today I'm starting development on Beancount v3.
>
> This is going to be a pretty big change and will take a while.
> I've laid down the details in this document:
> https://docs.google.com/document/d/1qPdNXaz5zuDQ8M9uoZFyyFis7hA0G55BEfhWhrVBsfc/
I have a question about the currency accounts section.
For this example:
2020-06-02 * "Bought document camera"
Expenses:Work:Conference 59.98 EUR @ USD
Liabilities:CreditCard -87.54 USD
Equity:CurrencyAccounts:EUR -59.98 EUR
Equity:CurrencyAccounts:USD 97.54 USD
is the idea that I just enter the first three lines in my .beancount
file, and the last two postings will be implicitly added?
If so, that
matches closely with what I already do, which is great.
I do not separate my trading accounts by currency, so I have been able
to get away with just writing something like this:
2020-06-02 * "Bought document camera"
Expenses:Work:Conference 59.98 EUR
Liabilities:CreditCard -87.54 USD
Equity:Trade
and let Beancount fill in the Equity:Trade amounts. This is not too
painful to do manually.
James
--
You received this message because you are subscribed to the Google Groups "Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email to beancount+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/beancount/CAHpmPOBoaMgQDT2mQMxd5ZQzSiO6DLHvPBcRJu20NUZAphO5cw%40mail.gmail.com.
>
> There's a downside to the method you're using: there's no price and mistakes will go unchecked.
> It would be more robust to use @, let Beancount do its thing, and to write a plugin to strip the price and insert the postings.
Yes, plugin support would be good. I think a simple plugin that sees
Expenses:Work:Conference 60.00 EUR @ 2 USD
and transforms that into
Expenses:Work:Conference 60.00 EUR
Equity:Trade -60.00 EUR
Equity:Trade 120.00 USD
would match my use case pretty well. I'm not sure if that's exactly
what the existing trading accounts plugin you linked to does. If it's
not, it's simple enough I might just write it.
James
--
You received this message because you are subscribed to the Google Groups "Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email to beancount+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/beancount/CAHpmPOA8%3D_R%3DZQubFZLotdTPHWhwCEe_CD75REvWC%3Dv%2BHx1KDg%40mail.gmail.com.
Hi,Today I'm starting development on Beancount v3.
* Martin Blais <bl...@furius.ca> [2020-07-04 02:34]:
> This is going to be a pretty big change and will take a while.
> I've laid down the details in this document:
> https://docs.google.com/document/d/1qPdNXaz5zuDQ8M9uoZFyyFis7hA0G55BEfhWhrVBsfc/
This sounds all very exciting. Thanks for writing down your ideas and
for working on this.
Some comments:
> beancount/ingest/importers: someone could revive a repository of
> importer implementations, like what LedgerHub once aimed to become"
I'd really like to see this. There are a number of importers on
GitHub but it would be nice to have one repository with high-quality
importers for beancount.
I'm not stepping up to maintain it, but I'm interested in
contributing.
> The conversion to Ledger and HLedger from Beancount now seems
> largely useless, I'm not sure anyone's using those. I'll probably
> move these to another repo, where they would eventually rot, or if
> someone cares, adopt them and maintain or evolve them.
I'm interested in maintaining the beancount to ledger conversion
scripts.
--
Martin Michlmayr
https://www.cyrius.com/
--
You received this message because you are subscribed to the Google Groups "Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email to beancount+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/beancount/20200704072707.GA30028%40jirafa.cyrius.com.
Hi,What is the scope of expected breaking changes and how difficult will it be to migrate? I use beancount a lot and particularly interested in API changes in core, prices, ingest, loader and query subpackages.
Will beancount v3 be available on PyPI? It's not clear from the docs.
On Saturday, July 4, 2020 at 9:34:50 AM UTC+3, Martin Blais wrote:Hi,Today I'm starting development on Beancount v3.This is going to be a pretty big change and will take a while.I've laid down the details in this document:This file describes the new set of dependencies for it:And there is a dedicated installation file for the in-development version:The short version is that v3's core is going to be ported to C++ using a Bazel build, and the codebase will be sectioned between core and the rest.I just merged the new build definition in master.The current head will be branched as "v2" and maintained stable.It will build with both setup.py and Bazel.Backward compatible fixes to it will be done there and merged into v3.v3 development will occur on branch "master" and breaking changes will occur there.Comments appreciated (on the docs, or here if you prefer),
--
You received this message because you are subscribed to the Google Groups "Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email to beancount+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/beancount/3c333f25-0afa-4471-892e-4cb8aa368c6eo%40googlegroups.com.
--
You received this message because you are subscribed to the Google Groups "Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email to beancount+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/beancount/7eaed98c-78d2-44a2-b944-5c0603b87ef5o%40googlegroups.com.
On Sat, Jul 04, 2020 at 02:34:35AM -0400, Martin Blais wrote:
> Today I'm starting development on Beancount v3.
>
> This is going to be a pretty big change and will take a while.
> I've laid down the details in this document:
> https://docs.google.com/document/d/1qPdNXaz5zuDQ8M9uoZFyyFis7hA0G55BEfhWhrVBsfc/
This is very exciting. And, as usual, your design documents are very
interesting and insightful to read. I took some time to read through all
of them and I'm sharing some thoughts of mine about them below.
==================================
Directives
----------
Having as output of beancount core two streams of clearly separated
incomplete/syntactic v. complete/semantic directives sounds like a great
approach. In terms of terminology, you might use the "raw v. cooked"
terminology (which I've picked up from proof assistants years ago, but
which I find fitting here; YMMV). It's not yet clear to me if both
streams will be accessible to plugins (I think they should). And, if
they are, how will they be interleaved: a single stream with both raw
and cooked transactions? Two separate streams?
Parser
------
You mention you're gonna keep using flex/bison, which is for sure well
known technology. However, the expressivity of bison grammars make it
kinda hard to hack on existing parsers, raising the barrier for
contributors. Have you considered switching to PEG parsing?
Unrelated (but still on parsing), I don't understand your point about
getting rid of the cache. Sure, we all hope it will no longer needed for
interactive use, but it would still be useful for people building small
services on top of relatively static Beancount ledgers; including Fava.
Also, as the output of Beancount core is gonna be streams of protobufs,
those will be trivial to serialize, and also cross language, why not
imagine a cache of protobufs serialized on disks?
The rework of includes sounds great. We have discussed it on the list in
the past, so I guess it's your goal, but as it's not explicitly stated
in the design doc let me repeat it here. I think the goal should be
"include invariance", i.e., one should always be able to take an
existing Beancount ledger in a single file and break it down in an
arbitrary amount of smaller ledger files that include each other,
without any semantic change. (The stated goal in your doc of being able
to declare plugins elsewhere than in the main file will derive from
this, but this principle is more general.)
The main feature I lack to have feature parity with Ledger-CLI is the
ability to add tags to individual transaction legs. I'm assuming this
will go hand-in-hand with relaxing the distinction between metadata/
tags/ links (by making them syntactic sugar for metadata, I'm guessing),
which is great, thanks!
Ulque
-----
This sounds like an exciting project.
In addition to support for balance columns and totals, there are a bunch
of other features that would be very welcome, like the ability to filter
out 0 columns, or to add derived columns (e.g., differences between
columns, to compute P&L in investments). I don't know how much you plan
to build on top of Pandas (which will trivially offer many of these),
but it is absolutely brilliant to see the analogy between the two
worlds.
Something I'm surprising to haven't see mentioned on this is your vision
(which we discussed a while ago on list) that the hierarchical nature of
the account hierarchy is kinda arbitrary and gets in the way (e.g., one
often wants to pivot around from "Expenses:Home:Repair +
Expenses:Car:Repair" to "Expenses:Repair:Home + Expenses:Repair:Car" as
there is no right or wrong hierarchy there). Is this idea of being able
to pivot around the account hierarchy, considering each component a
facet of sort, part of your plans for Ulque, or is it out of scope?
Code quality
------------
Typing: outside of Google I've the feeling that the state-of-the-art
static type checker is Mypy. I've myself migrated a substantial codebase
to it and it's a vibrant environment (with a lot of involvement from
Guido himself) and active development that goes hand in hand with the
refinement of the type system (via periodic PEPs). I'd be weary of going
pytype instead of Mypy, even though I realized that the type annotations
are (supposed to be) compatible.
How about automated code formatting via Black?
(https://github.com/psf/black) I've recently switched to it a
substantial code base and I find it pretty life changing. It would also
help contributors I think, which is one of your worthwhile meta-goals
for v3.
Strict payee
------------
YAY, everything that makes possible to have even more automated sanity
checks is a welcome addition. I wonder if a relaxed policy where any
new payee is OK on first use even if undeclared, unless it's "near" (as
string distance) to a previous one would work well as a default policy.
But that's probably a matter for a plugin anyway...
Unsigned debit and credit
-------------------------
This is a very concrete need, which I routinely struggle with when
showing accounting reports extracted from Beancount (or Fava) to other
family members. But I'm surprised you mention it as a potential feature
for Beancount itself. Wouldn't it belong to front-ends, like Fava (or
maybe Ulque in the future), instead? In the view of "Beancount as an
accounting calculator", which I've always adhered too, that seems to
belong elsewhere.
be created and maintained separately of core. j
==================================
> The short version is that v3's core is going to be ported to C++ using a
> Bazel build, and the codebase will be sectioned between core and the rest.
> I just merged the new build definition in master.
Bazel is indeed a great build system, but you should know that, at least
for now, it is not in Debian/Ubuntu yet. So for the time being it will
be impossible to ship Beancount v3 on those distros (and any other
Debian-based distro) until Bazel itself is part of Debian. Work is
ongoing (see: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=782654
), but I'm unable to guess when it will actually happen.
Cheers
--
Stefano Zacchiroli . za...@upsilon.cc . upsilon.cc/zack . . o . . . o . o
Computer Science Professor . CTO Software Heritage . . . . . o . . . o o
Former Debian Project Leader & OSI Board Director . . . o o o . . . o .
« the first rule of tautology club is the first rule of tautology club »
--
You received this message because you are subscribed to the Google Groups "Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email to beancount+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/beancount/20200706090020.xr73ygh3ivlme433%40upsilon.cc.
On Sat, Jul 04, 2020 at 03:09:34AM -0700, Andre Engelbrecht wrote:
> *Disclosure*: I've converted a couple of people from using webapps or
> spreadsheets to use ledger. They love ledger despite some of the
> nuance. I've been trying to move them over to beancount, but having a
> bit harder time because of the python dependency. Fava and being able
> to run it locally has been a great driver to have people at least
> consider installing python and giving beancount a test run.
Same for me. I've converted some people to Beancount thanks to the fact
that "pip install beancount" was simple enough (although indeed still a
barrier for non-dev people) for them to install. Bazel will be a much
higher barrier for people to install/use Beancount. I totally understand
switching to it from a dev point of view, but it would be great to
maintain the ability to install via pip.
I've used pypi to ship weird python code depending on a huge java
bundle, and I know it works well. If there is a way to ship (and then
select) static binaries for the non-Python parts for multiple
architectures (the most popular ones) via pip, I think it'd be totally
worth it in terms of user base.
Cheers
--
Stefano Zacchiroli . za...@upsilon.cc . upsilon.cc/zack . . o . . . o . o
Computer Science Professor . CTO Software Heritage . . . . . o . . . o o
Former Debian Project Leader & OSI Board Director . . . o o o . . . o .
« the first rule of tautology club is the first rule of tautology club »
--
You received this message because you are subscribed to the Google Groups "Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email to beancount+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/beancount/20200706115807.atdlpr3oai3guake%40upsilon.cc.
I'm not sure I'll have much to contribute, given my very sporadic track
record of contributing to Beancount, but I'll be happy to try if any of
these happens.
Cheers
--
Stefano Zacchiroli . za...@upsilon.cc . upsilon.cc/zack . . o . . . o . o
Computer Science Professor . CTO Software Heritage . . . . . o . . . o o
Former Debian Project Leader & OSI Board Director . . . o o o . . . o .
« the first rule of tautology club is the first rule of tautology club »
--
You received this message because you are subscribed to the Google Groups "Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email to beancount+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/beancount/20200706141338.lzseanftqwslrf75%40upsilon.cc.
On 06/07/2020 03:00, Stefano Zacchiroli wrote:
> You mention you're gonna keep using flex/bison, which is for sure well
> known technology. However, the expressivity of bison grammars make it
> kinda hard to hack on existing parsers, raising the barrier for
> contributors. Have you considered switching to PEG parsing?
I toyed with the idea of writing a PEG parser for Beancount syntax, but
I haven't found a nice PEG parser generator. The Beancount syntax is
also fairly regular, thus the Bison grammar is actually not that bad to
read. Also, there is the desire to keep the v2 and v3 parser definitions
as close as possible.
> The rework of includes sounds great. We have discussed it on the list in
> the past, so I guess it's your goal, but as it's not explicitly stated
> in the design doc let me repeat it here. I think the goal should be
> "include invariance", i.e., one should always be able to take an
> existing Beancount ledger in a single file and break it down in an
> arbitrary amount of smaller ledger files that include each other,
> without any semantic change. (The stated goal in your doc of being able
> to declare plugins elsewhere than in the main file will derive from
> this, but this principle is more general.)
I have done some work on the parser and I would like to lift the current
limits on included also for v2. Once the parser rework lands, it should
fairly be straightforward.
> The main feature I lack to have feature parity with Ledger-CLI is the
> ability to add tags to individual transaction legs. I'm assuming this
> will go hand-in-hand with relaxing the distinction between metadata/
> tags/ links (by making them syntactic sugar for metadata, I'm guessing),
> which is great, thanks!
This is on the to do list.
> In
> particular, I'd like to know if the raw/syntactic directives you imagine
> coming out of the new Beancount core would be close enough to the book
> concrete syntax to allow manipulation such as meddling with spacing
> Provided that, and a good pretty printer for concrete syntax, a
> "bean-sed" project with a dedicated manipulation language can probably
> be created and maintained separately of core.
I am far from being a parsing expert, but I think having the parser emit
a syntax tree suitable to reconstruct the input file without
modifications is going to be very complex: the scanner would need to
emit many more tokens for input that is now simply ignored (ie trailing
whitespace) and the grammar would need to handle those, making it more
complex. The representation of the parsing results would also be more
complex. A lot of work to support a single tool.
I think that a tool like the one you describe should use the syntax tree
and the actual file content in combination to rewrite the input file:
the syntax tree allows to identify which elements need to be modified
and from these the position in the input files where text changes need
to happen. Sounds complex, but I believe less complex than augmenting
the parser.
> Bazel is indeed a great build system, but you should know that, at least
> for now, it is not in Debian/Ubuntu yet. So for the time being it will
> be impossible to ship Beancount v3 on those distros (and any other
> Debian-based distro) until Bazel itself is part of Debian. Work i> ongoing (see: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=782654
> ), but I'm unable to guess when it will actually happen.
I had a similar reaction to Bazel. My secret plan is to maintain a
parallel build system based on Meson. I did a quick reality check and it
seems that all prerequisites can be build with Meson. I think Meson is
more non-developer and distribution friendly than Bazel.
Cheers,
Dan
--
You received this message because you are subscribed to the Google Groups "Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email to beancount+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/beancount/e95f9907-5c8e-960e-cf00-ad7a31cc58b4%40grinta.net.
Sounds very exiting!For me the fact, that considerations are given to welcome a broader community collaboration is a very positive sign, as I think it gives people more confidence in the future sustainability of the product.
Practical question about beancount query:You write that you envisage that most of the future users of it will be outside of beancount.I thought the the reason beancount query was created is because it was difficult to construct SQL query for beancount data.
So, my question is: what will the future beancount query tool offer for users outside of beancount, what they do not get now in Pandas of SQL?
On Saturday, July 4, 2020 at 8:34:50 AM UTC+2, Martin Blais wrote:Hi,Today I'm starting development on Beancount v3.This is going to be a pretty big change and will take a while.I've laid down the details in this document:This file describes the new set of dependencies for it:And there is a dedicated installation file for the in-development version:The short version is that v3's core is going to be ported to C++ using a Bazel build, and the codebase will be sectioned between core and the rest.I just merged the new build definition in master.The current head will be branched as "v2" and maintained stable.It will build with both setup.py and Bazel.Backward compatible fixes to it will be done there and merged into v3.v3 development will occur on branch "master" and breaking changes will occur there.Comments appreciated (on the docs, or here if you prefer),
--
You received this message because you are subscribed to the Google Groups "Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email to beancount+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/beancount/0d40115b-021c-4b5a-9172-641408c83644o%40googlegroups.com.
After reading through the v3 design document, once thing that wasn't clear to me is whether it will be possible to access just the parser without running booking from the exposed API.Today, I have a workflow which:1) Reads in my existing beancount files (I have many, ~ one per account) using loader.load_file() and (the unexposed) loader._parse_recursive(), the results of this gets categorized and preserved in memory2) Parse data from PDF/OFX files which get converted into beancount objects3) Run booking and validation on the new items to ensure they are complete and error-free (but don't rewrite them)4) Categorize these new items and append to the categorization found in (1)5) Write out new beancount files retaining order/file information for the items from (1), replacing the files from (1) (after backing them up of course)The key here is that I never run booking on the data that gets written out, because booking a transaction will create bean elements for the inferred transactions, and I don't want those saved in the bean-file. Additionally booking will convert CostSpec objects to Cost objects (filling in the inferred info), and again, I don't want that stored in my resultant beancount files. The automation will update the beancount files, but the goal is to write unmodified entries exactly as they are read such that they are still easily manageable by human eyes, and preserve any manually-added goodness.I realize that automating the generation of beancount files is not a design-point of beancount, but I've found that it is very amenable to reversing the parser process, resulting in a very effective way to enter data into beancount.
By implementing the parser and booking both in C++, will it still be possible to run the parser, modify the results, and then (optionally) run the booking and validate functions all from the python layer?
--
You received this message because you are subscribed to the Google Groups "Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email to beancount+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/beancount/7eaed98c-78d2-44a2-b944-5c0603b87ef5o%40googlegroups.com.
Thanks for your feedback Martin.
On Tue, Jul 14, 2020 at 01:33:34AM -0400, Martin Blais wrote:
> Yes, that should be the goal, though I have in mind a perhaps more
> restricted version where, like today, the options have to be set in the
> top-level file; the only difference is that it'll barf when you try to set
> options in included files (which it always should have, this is essentially
> a bug fix).
But why? What's the added value of restricting options to only be in the
master file? I'm having other family members read the textual version of
our books and they can make sense of the double-accounting part, but the
beancount-specific options don't make sense for them, so I'd really like
to hide them away with a simple oneliner include at the beginning of the
books.
FWIW I do something similar with other textual document system (e.g.,
LaTeX), and I find that hiding low-level details in a single "you
shouldn't care about this stuff" file has a lot of value.
> > The main feature I lack to have feature parity with Ledger-CLI is
> > the ability to add tags to individual transaction legs. I'm assuming
> > this will go hand-in-hand with relaxing the distinction between
> > metadata/ tags/ links (by making them syntactic sugar for metadata,
> > I'm guessing), which is great, thanks!
>
> You mean you'd like to have the ability to add #.... at the end of a
> posting line? That should be easy to add, but I'd have to change the
> schema. Can you motivate it? When / how / why do you need to tag
> individual postings whereby tagging the transaction isn't enough?
> That would be added in v2.
(This is https://github.com/beancount/beancount/issues/144 and we should
probably have the discussion there, but just in case: )
A classic example for me is:
2020-07-08 * "foobar bookshop" "books + card game"
Expenses:Books 32.90 EUR ; book A, B, and C
Expenses:Games 15.00 EUR ; card game for kid #hulk
Assets:Checking -47.90 EUR
where I want to tag one of the lag has pertaining to my kid (no, he is
not actually called Hulk), but not the rest of the transaction.
(Yes, I can refactor this using two transactions, but it's annoying.)
Cheers
--
Stefano Zacchiroli . za...@upsilon.cc . upsilon.cc/zack . . o . . . o . o
Computer Science Professor . CTO Software Heritage . . . . . o . . . o o
Former Debian Project Leader & OSI Board Director . . . o o o . . . o .
« the first rule of tautology club is the first rule of tautology club »
--
You received this message because you are subscribed to the Google Groups "Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email to beancount+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/beancount/20200714125021.ttl7dnzl4jdho2ao%40upsilon.cc.
Are you also planning to define beancount "API" more clearly and safely?
We touched upon the subject in this discussion: https://groups.google.com/g/beancount/c/UatQey1X0OY/m/0FGCrY5fAwAJWould it not be logical, that by using defined API (I think you called it "a contract") user is not able to "break" something, the API would simply not allow this to happen?
I know this may be a naive question (as I am not professional), but why doesn't beancount use object-oriented approach? So you have an object, representing all transactions, and user can manipulate them (add / delete) through methods, but implementation of the class does not allow unsafe changes / operations?
On Saturday, July 4, 2020 at 8:34:50 AM UTC+2 bl...@furius.ca wrote:Hi,Today I'm starting development on Beancount v3.This is going to be a pretty big change and will take a while.I've laid down the details in this document:This file describes the new set of dependencies for it:And there is a dedicated installation file for the in-development version:The short version is that v3's core is going to be ported to C++ using a Bazel build, and the codebase will be sectioned between core and the rest.I just merged the new build definition in master.The current head will be branched as "v2" and maintained stable.It will build with both setup.py and Bazel.Backward compatible fixes to it will be done there and merged into v3.v3 development will occur on branch "master" and breaking changes will occur there.Comments appreciated (on the docs, or here if you prefer),
--
You received this message because you are subscribed to the Google Groups "Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email to beancount+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/beancount/7cbcaa0d-7556-4c26-a41c-c4f325d1ab93n%40googlegroups.com.
On Thu, Aug 6, 2020 at 4:24 PM Chary Chary <char...@gmail.com> wrote:Are you also planning to define beancount "API" more clearly and safely?Roughly speaking the same data model and similar access to data structures, special containers, and functions, via Python.We touched upon the subject in this discussion: https://groups.google.com/g/beancount/c/UatQey1X0OY/m/0FGCrY5fAwAJWould it not be logical, that by using defined API (I think you called it "a contract") user is not able to "break" something, the API would simply not allow this to happen?This is a new major revision, I do want the freedom to evolve things and make them better, at least a bit.It won't be perfectly the same as before, but it'll be very close, at least conceptually.I know this may be a naive question (as I am not professional), but why doesn't beancount use object-oriented approach? So you have an object, representing all transactions, and user can manipulate them (add / delete) through methods, but implementation of the class does not allow unsafe changes / operations?That's a much longer discussion to have an out of scope for this forum,
--
You received this message because you are subscribed to the Google Groups "Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email to beancount+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/beancount/c4d71811-5c4b-4b57-83a9-6748b1624b5cn%40googlegroups.com.
Martin,I know this is a bit of a deviation from the topic, but did you consider porting the core to Golang, instead of C++?I am actually sure you did, but just interesting to hear why you didn't go this way
On Friday, August 14, 2020 at 1:54:49 PM UTC+2 Chary Chary wrote:2 separate clones I assume will be in 2 separate directories. Where in this case do you point PATH and PYTHONPATH?
--
You received this message because you are subscribed to the Google Groups "Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email to beancount+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/beancount/f7372574-d184-49e9-bf68-364c1cad8b12n%40googlegroups.com.
Hi I've been looking for a replacement for Bankivity and stumbled upon this project, and have been starting to use it to trial it out, and have been reading the plans for V3, and the use of C++. I agree with your decision not to use Go, and I found it somewhat similar, and in the end the pedantic error handling in Go drove me away.I read some of your comments on C++, and I support the decision to use it. You said that you want to use a basic level of the language for portability reasons. I am sure that most of the popular compilers for C++ (gcc, clang, MSC) on most platforms fully support C++11, and even now C++17 is mostly implemented and the STL to C++17. I am not sure whether portability is a reason to hold you back to a basic level of the language. Strong typing and speed is a positive over Python.
Keep up the good work,
AlexOn Saturday, 4 July 2020 at 7:34:50 am UTC+1 bl...@furius.ca wrote:Hi,Today I'm starting development on Beancount v3.This is going to be a pretty big change and will take a while.I've laid down the details in this document:This file describes the new set of dependencies for it:And there is a dedicated installation file for the in-development version:The short version is that v3's core is going to be ported to C++ using a Bazel build, and the codebase will be sectioned between core and the rest.I just merged the new build definition in master.The current head will be branched as "v2" and maintained stable.It will build with both setup.py and Bazel.Backward compatible fixes to it will be done there and merged into v3.v3 development will occur on branch "master" and breaking changes will occur there.Comments appreciated (on the docs, or here if you prefer),
--
You received this message because you are subscribed to the Google Groups "Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email to beancount+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/beancount/b6c23a73-d543-424b-80cb-61728ff87dd4n%40googlegroups.com.
After reading through the v3 design document, once thing that wasn't clear to me is whether it will be possible to access just the parser without running booking from the exposed API.Today, I have a workflow which:1) Reads in my existing beancount files (I have many, ~ one per account) using loader.load_file() and (the unexposed) loader._parse_recursive(), the results of this gets categorized and preserved in memory2) Parse data from PDF/OFX files which get converted into beancount objects3) Run booking and validation on the new items to ensure they are complete and error-free (but don't rewrite them)4) Categorize these new items and append to the categorization found in (1)5) Write out new beancount files retaining order/file information for the items from (1), replacing the files from (1) (after backing them up of course)The key here is that I never run booking on the data that gets written out, because booking a transaction will create bean elements for the inferred transactions, and I don't want those saved in the bean-file. Additionally booking will convert CostSpec objects to Cost objects (filling in the inferred info), and again, I don't want that stored in my resultant beancount files. The automation will update the beancount files, but the goal is to write unmodified entries exactly as they are read such that they are still easily manageable by human eyes, and preserve any manually-added goodness.I realize that automating the generation of beancount files is not a design-point of beancount, but I've found that it is very amenable to reversing the parser process, resulting in a very effective way to enter data into beancount.
By implementing the parser and booking both in C++, will it still be possible to run the parser, modify the results, and then (optionally) run the booking and validate functions all from the python layer?