NEP dropping soon.

nostr:nevent1qvzqqqqqqypzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyw8wumn8ghj7argv43kjarpv3jkctnwdaehgu339e3k7mf0qydhwumn8ghj7argv4nx7un9wd6zumn0wd68yvfwvdhk6tcpz3mhxue69uhkzmr8duh82arcduhx7mn99uqzpnl53esemxvsvja4szvxscla6xn7zwxduga2347v7nm4ugfstv7qq40gzm

Reply to this note

Please Login to reply.

Discussion

NEPs ❤️‍🔥

💪

Yes, @Beave is on us to go ahead and expand it with public and private/encrypted options, but I want to check the basic scaffolding, first.

It's an interesting concept because you can, of course, share these virtual drives with other npubs, copy or fork drives, etc. And because you can replace everything in the scaffold, you can move events around, add-or-remove events, etc.

Notes starting off as a flat hierarchy, where they can be organized by tags and unique ids, and then imposing a tree hierarchy for specific contexts,

AND then you can distribute the files/text across relays and servers. One can always worry about larger files, but if you're just working with text (as many file are- code, notes, collaborative docs) you really can go far. Anything requiring larger files just points to a server location.

nostr:nprofile1qqsza748zkamgmw4he4hm2xhwqpxd5gkwju38wqh3twmtshx8kv8xvgpramhxw309u6rxdpsd4skjm3wv36kx6mydeejummjvuargwp58qhsz9nhwden5te0v4jx2m3wdehhxarj9ekxzmny9uq3samnwvaz7tmxd9k8getj9ehx7um5wgh8w6twv5hsv0qvag what do you think? I know you are working on distributed file storage.

Hard to talk about specifics from this context, but I would say insure that the file storage expectations are set up to work well with content-addressable data.

We've only been thinking of git blobs and blossom objects, so far.. Did you have something else in mind?

I guess what I had in mind was "arbitrary data" lol. Like if it's content addressable and the remote source is still alive, whatever may be at that hash is what the data for that "file" is.

I would think this would allow for being backend-agnostic. As long as there are bytes to be received from that address, bytes ye will get.

But I am pretty green on your whole system here so there might be plenty of reasons that wouldn't work? (MIME types come to mind immediately)

Yeah, that's what we were also thinking. Anything addressable could be included, really.

30040/41 contain a MIME-Type tag, but we just use that to guide rendering.

Grateful, for any constructive feedback, including suggestions on a different method for performing something similar.

Then maybe you need to see if the versions match so you need to write the version somewhere

Versions have an eventID. We can compare that and fallback on the `a` tag, otherwise, and display an info.

Versioning could be handled by the metadata event nostr:npub1ecdlntvjzexlyfale2egzvvncc8tgqsaxkl5hw7xlgjv2cxs705s9qs735 suggested 🤔

What is being versioned here? The entire tree structure?

Individual events in the tree, I think.

Can't relays choose to version them (or not)? Histories is outside of the scope of this NEP.

Yeah I agree it's outside scope. But if we wanted to add versioning, I think metadata would be the way to do it.

Okay. We can add that as a MAY suggestion.

i think leave versioning out of the spec for now, to build a versioning scheme for it is a whole other can of wriggly worms

Yeah, totally blows up the spec.

The background story is that I was supposed to write a story for an #Alexandria grid-view of the 30040 indexes and immediately saw a fileserver explorer in my head.

we got symlinks on nostr now

you have a knack for doing stuff that will make Linus Torvalds curious about nostr

I like data structures and version control.

I just hate Microsoft. By our powers combined, we will get Linus on here

From the article:

"The `a` tags MUST be an unordered list of root 30040 index events."

A couple of notes:

1. The diagram shows a symlink connected to the drive event. How do we make symlinks discoverable for a client trying to browse a drive? It might be better for the drive to reference the symlink, and then the symlink references a "leaf" event in the filetree.

2. This specification says "unordered" list. Does this mean the client can render the child events in any order it desires? That differs from the behavior defined for 30040 events, so we should make sure the expectation is perfectly clear.

3. To use the Drive analogy, a typical drive would only have one root (e.g., `/` on Linux, or `C:\` on Windows). Is the 30043 considered to be the root of the filetree, or is it the flag that identifies the root? If that's the case, the root is the 30040, and each drive should have only one root.

I suppose, for symlinks, a client could discover them by requesting kind 30044 events containing an `a` tag pointing to the drive's root 30043 event.

I wonder if this kind of lookup by tag value is faster, slower, or the same speed as a lookup from a known event to one of its children? The relay devs would likely know.

tag lookups are as fast as all the others in a filter except the search field

good quality key/value stores maintain sort order in the blocks of the data once it has done a compaction pass, so it really is just finding the start point and simple iteration

i haven't thought about the implications of the tree structure of these 30040/1 events though, you should maybe read up a little on filesystem architecture theory to help evaluate what ways you can do things... filesystems are not quite the same as key/value stores, similar, but a filesystem can be highly branched where a key value store is like a (mostly) sorted index

I said it in another comment, but if the filesystem must be unix-like, we could only have one root.

Unrelated to my previous comment; possible suggestions to complete this proposal:

- Permissions must be handled (read, write, not execute since this is mainly for storage)

- information node structures for all the metadata (also related to permissions)

Yes, permissions are missing.

I don't understand the second point.

I think, at least for the first draft, it will be a read-only drive for everyone except the user who creates it. Handling write permissions would require some way of delegating event signing or deferring original events signed by one user to a replacement signed by another user, which means the event is constantly changing ownership/authorship.

What kind of information would it be useful to have on this distributed filesystem concept? It doesn't need to exactly mirror Unix. Should we have a metadata event that contains relay hints, for instance?

Couldn't metadata be in the drive event, analog to 30040s?

Potentially. Just throw a bunch of tags on there.

Though that wouldn't work if we wanted to tie metadata to each level of the file tree.

In addition to the traceback, or instead of it and including the traceback as metadata?

In addition to traceback.

I'm not going to tie two different events to a third event. Event spaghetti.

Well a file has a path which describes the traversal to reach the desired leaf. So it contains a pointer to the root, which could be fetched for metadata. So as long as there is enough information to find the root, then you shouldn't have any trouble fetching metadata from a child node.

It's turning into too many separate events, IMO. Complexity x² with each additional event.

1) If the drive contains a reference to the symlink, rather than the other way around, we should maybe just skip the symlink. Otherwise, there's redundancy and you would have to constantly change the drive, anytime a symlink is changed. The size of the drive is then limited by length of drive event, as well. You would have a max number of syms.

2) There doesn't seem to be a purpose to a predefined order, so I wanted to make that explicit. But maybe we should make it ordered, to match. Devs can always choose to ignore the order. Changed it.

3. 30043 is the drive and the root. I didn't want to overload 30040s with root attributes and functions.

Points 2 and 3 make sense.

Given nostr:npub1fjqqy4a93z5zsjwsfxqhc2764kvykfdyttvldkkkdera8dr78vhsmmleku's comments on search efficiency, I think symlinks as currently defined will work well. Clients will need to discover symlinks by searching for tags, but that's not hard to do.

Can symlinks reference something other than a 30040? The way they are currently defined, we can only create symlinks to directories. What if I want to create a symlink to a particular file? Can I use an `e` tag to point to an arbitrary event?

One 30041 can then be found in multiple places. I would like a way to share or link to that 30041 event with its context, like it’s nearest 30040, since pointing to the event itself won’t give enough info, but sharing the 30040 isn’t precise enough in this case.

Yeah, the possibility of filepaths.

Like Drive/30040/30040/30041 ?

Filepaths would get very long if we used the hex IDs or bech32 encodings. Since these are all parameterized replaceable events, we could use d tags for each step in the path.

If the end event isn't a 30041, we'd have to use a hex ID or URL or something like that.

Also, is a drive replaceable?

Yes. Any event with 3xxxxx is replaceable.

I don't get it, too much talk about 30042 and 30041 events and "a" tags without any explanation of what it actually does or how its actually used...

I tried reading NKBIP-01 but I still don't understand how its supposed to be used

nostr:naddr1qvzqqqrcvgpzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqyghwumn8ghj7mn0wd68ytnhd9hx2tcpzamhxue69uhhyetvv9ujumn0wd68ytnzv9hxgtcqpphxkcnfwqknqvg9xm7pr

👋 requesting a left curve product person translation

That's okay. You don't have to understand it.

Its ultimately about organization of the events.

You can listen to albums in their linear order, or you can create playlists that explore multiple artists and albums. You can customize how you want the information to be organized.

Example: Suppose you want to replace a transmission for your car, but its hard to navigate and understand the several manuals that discuss replacing the transmission. With the event kinds we have, you would be able to navigate the manuals more easily to find the specific pages that discuss transmissions and find the one that you understand the best.

If you look at the feed on next-alexandria.gitcitadel.edu , you'll find everything organized like regular books and articles - closed, linear and isolated. Great for reading as we normally do.

When you click on the 'visualize' tab, you'll see something similar to an Obsidian knowledge graph, where ideas are scattered around.

In later versions, the individual events will have their own networks.

So again, these event kinds are helpful for data organization, and for future customization to create knowledge graphs and find ideas, books, aricles, etc, that are related to one another.

Kind 30041 is basically a bunch of scattered events that you can search through beyond a single book. Like regular text search of kind 1.

On the other hand, kind 30040 creates the structure of a book for regular reading.

Just go there, click on the publications, read the publications, look at the events on njump. That's how you understand it. The spec is just for people who want to implement the same thing.

While other devs are trying to figure out why their clients can't do anything consistently, our devs are building things with the nostr protocol that are, literally, going to change the world.

Your relays are going to be the distributed file server that will change file storage as we know it, without much in the way of implementation.

Gitcitadel #devs are not #sissydevs.

#gitcitadel #filesystems #thenostrprotocol #otherstuff #nostrability #relaysareservers #relaymaximalist

nostr:nevent1qqsyefys7jlx75h6a78uspae53aw9vc9vk9pp7z36t0wxqx84jel00cprdmhxue69uhhg6r9vehhyetnwshxummnw3erztnrdakj7q3qm4ny6hjqzepn4rxknuq94c2gpqzr29ufkkw7ttcxyak7v43n6vvsxpqqqqqqzet74h0

t Y*