h-REA / hREA

A ValueFlows / REA economic network coordination system implemented on Holochain and with supplied Javascript GraphQL libraries
https://docs.hrea.io
Other
142 stars 15 forks source link

Publishing lib crates independantly to crates.io #391

Open mattyg opened 1 year ago

mattyg commented 1 year ago

I'd really love to reuse some of the lib crates you've built in other projects. Any chance you could publish them independently?

The most useful to me in the short term are hdk_semantic_indexes and hdk_time_indexing. Thanks I love what you're doing.

pospi commented 1 year ago

Thanks! In the meantime you should be able to reference the packages straight from git?

hdk_time_indexing = {git = "https://github.com/h-REA/hREA", tag = "happ-0.1.2-beta", package = "hdk_time_indexing"}

mattyg commented 1 year ago

Thanks! In the meantime you should be able to reference the packages straight from git?

hdk_time_indexing = {git = "https://github.com/h-REA/hREA", tag = "happ-0.1.2-beta", package = "hdk_time_indexing"}

nice! I didn't know I could do that.

Connoropolous commented 1 year ago

Just out of curiosity, what are you hoping to use them on/for @mattyg ? :)

mattyg commented 1 year ago

Just out of curiosity, what are you hoping to use them on/for @mattyg ? :)

Well I've been playing with the holochain-open-dev time index for querying feeds in clutter and herddit -- it looks like this version is bit cleaner implementation and more actively maintained so probably makes sense switch to it. I expect there will be a need for time indexes in most apps.

The semantic index just looks like a way more robust, production-grade architecture that abstracts any kind of data relationships, so I'd like to try using it over just manually creating some links for a specific use-case.

Idk my impression is hREA is the most complicated, flexible and high quality package in the holochain ecosystem and has implemented a lot of novel patterns that I'll need to be get my head to use in future applications. So part of the answer is "I don't know what I need it for but I'm pretty sure I need it" :laughing:

pospi commented 1 year ago

Thanks for saying so @mattyg <3 It's encouraging to know that people are following along and finding these libraries to be useful. At some point once the core API is stabilised we need to do a maintenance pass and extract some of the common modules to separate repos in the holochain-open-dev org so that they can be maintained separately.

Time indexing

All inspiration goes to @jdeepee for the original library which heavily inspired the design of hdk_time_indexing. Somewhat amusingly I initially experimented with a more storage-efficient architecture where each node in the tree was just the raw bytes of the DateTime but ran into trouble correctly differentiating nodes and ended up back at a string-based storage method as per his original designs. (And since Path node content is no longer stored to the DHT, also kindof a moot point anyway.)

For this library the outstanding feature to complete prior to release is #85 which involves a complex tree traversal algorithm for paginating forwards and backwards in an ordered time tree.

Semantic indexes

hdk_semantic_indexes(_zome_derive) is really just a set of zome API conventions for pluggable indexing behaviour but it has been encouraging how little improvement has been required on that since its initial inception. About the only noteworthy necessary addition has been string-based indexing as used in the Valueflows Agent.agentType index. That feature feels a bit like it's been shoe-horned into an existing pattern and could use a code review; but other than that I'm pretty happy with this library and the API is unlikely to change significantly (though I do hope that the configuration format will change).

UUID types

Also want to mention hdk_uuid_types because I think this problem is oft-overlooked in Holochain application design; i.e. how do we have complex many:many relationships between Cells and how can hApps load multiple contextually-bound interfaces to different overlapping networks? The semantic indexing library depends on this lib, so does the...

CRUD

I'm pretty happy with hdk_records as an alternative to hdk_crud though I find myself about to integrate @Connoropolous' signaling logic into the outer parts and would want to finish that before considering it feature-complete.

Also it's not such a great name now since the terminology changes so some renaming of this library is likely in future.

mattyg commented 1 year ago

This is really really helpful context thank you! I'll have to dig into these further but will definitely reach out if I have more questions. Thanks again

mattyg commented 1 year ago

Hey @pospi can you clarify the current status of pagination in hdk_time_indexing? I know you said its not implemented fully and I see here that it's use is commented out in hdk_semantic_indexes (https://github.com/h-REA/hREA/blob/c5487c906692f4c33b74ff05f8cd97f9f97a33c4/lib/hdk_semantic_indexes/zome/src/lib.rs#L145), but it looks like a bunch of the logic is already implemented? Just trying to figure out if I can use it as is, or need to implement some more functionality. thanks!