I'm also interested in using grapevine in some experiments here. I'll try to implement it myself soon.
My current roadmap:
Product 1. “Google for nostr; PageRank for pubkeys.” Similar in some ways to nostr:npub1xdtducdnjerex88gkg2qk2atsdlqsyxqaag4h05jmcpyspqt30wscmntxy ‘s nostr.band’s keyword search. Maintains a centralized nostr cache that uses neo4j (a FOSS graph database) and calculates personalized PageRank scores, GrapeRank scores, and DoS scores.
Product 2. Personalized Grapevine WoT relay. Alternative to nostr:npub1utx00neqgqln72j22kej3ux7803c2k986henvvha4thuwfkper4s7r50e8 ‘s WoT relay, except that the WoT network is defined using the GrapeRank algo, ie: your network = all pubkeys with influence score above 0.01 or whatever threshold works for you. Will use #neo4j and will borrow a lot of code from Product 1. Two options: 1. Fork nostr:npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6 ‘s relay written in go (which is what utxo did I think) or 2. make a plugin for strfry. (Maybe try both?)
Product(s) 3. Make tools to make it easy for devs to crank out new interpretation protocols and craft new Worldviews, as presented here: https://grapevine-brainstorm.vercel.app/#/worldviews
#wot
#grapevine
Discussion
I would love to see that! lmk what I can do to help 💜 🍇
lmk if you have questions about how the GrapeRank algo works.
Lately I’ve been thinking that a potentially faster way to calculate something similar to GrapeRank would be:
1. Calculate PageRank
2. Map the PageRank score from [0, infinity) to [0, 1) — see the graph in my habla article below.
I don’t think that would be identical to my existing GrapeRank algo, but it would probably be a good approximation. Haven’t thought it all the way through. This would be easier to implement if you’re already familiar with PageRank and have access to software that implements it; and may be computationally faster too, since GrapeRank is iterative.
You speak as if I knew how to calculate PageRank and that was supposedly easier than Grapevine.
In my understanding you can calculate Grapevine by just iterating through Nostr connections sequentially through levels, right? Meanwhile PageRank involves some advanced matrix math I don't understand.
GrapeRank requires calculations that are about the same level of complexity as PageRank.
There are several ways to implement PageRank, one of which uses matrix algebra. The conceptually easier (but less computationally efficient — which doesn’t really matter for our purposes) doesn’t require any advanced math, although it is tedious to code.
The way I currently calculate GrapeRank is the same: tedious to code but nothing more mathematically complex or advanced than weighted averages.
And you’re correct: to calculate GrapeRank, you just do lots and lots of iterations. For each iteration, you calculate the GrapeRank score of one pubkey. You have to iterate through every pubkey multiple times until the scores don’t change, or the changes are below some threshold (I think 10 or 12 iterations was enough in my most recent implementation).
nostr:npub1xdtducdnjerex88gkg2qk2atsdlqsyxqaag4h05jmcpyspqt30wscmntxy uses something very much like PageRank to stratify search results for nostr.band, and it works pretty well imho, as he discusses here:
I’m not aware of anyone else using PageRank in nostr. (Although surely there’s gotta be someone?)
maybe even iris, https://graph.iris.to/
another interesting thing
Cool, ty for the links.
Although those don’t use PageRank, do they? Unless I just missed it …
I missed this over the weekend - the most exciting nostr news / collaboration I've seen in months!
nostr:note1qqqxv7sca43srrce9cjh8rfh28pgh27z0alz57thpc8vgqspg3xq8xc5dg