diff options
| author | s-ol <s+removethis@s-ol.nu> | 2022-01-13 16:25:07 +0000 |
|---|---|---|
| committer | s-ol <s+removethis@s-ol.nu> | 2022-01-13 17:26:21 +0000 |
| commit | e065914a6fea70c25e117d8aaca466b59bcad5c6 (patch) | |
| tree | 9c003c80318427f4486691b84576233ad7742816 | |
| parent | use @container:@id in defualt graph (diff) | |
| download | fedidag-e065914a6fea70c25e117d8aaca466b59bcad5c6.tar.gz fedidag-e065914a6fea70c25e117d8aaca466b59bcad5c6.zip | |
Menu, DiscDAG loading
| -rw-r--r-- | lib/graph.json | 2261 | ||||
| -rw-r--r-- | package.json | 2 | ||||
| -rw-r--r-- | src/config.js | 3 | ||||
| -rw-r--r-- | src/graph.js | 205 | ||||
| -rw-r--r-- | src/index.js | 309 | ||||
| -rw-r--r-- | src/ui/Attachment.js | 3 | ||||
| -rw-r--r-- | src/ui/Discussion.js | 35 | ||||
| -rw-r--r-- | src/ui/Menu.js | 139 | ||||
| -rw-r--r-- | src/ui/Note.js | 28 | ||||
| -rw-r--r-- | src/ui/Selection.js | 21 | ||||
| -rw-r--r-- | src/ui/index.js | 2 | ||||
| -rw-r--r-- | src/ui/theme.js | 12 | ||||
| -rw-r--r-- | webpack.config.js | 2 |
13 files changed, 484 insertions, 2538 deletions
diff --git a/lib/graph.json b/lib/graph.json deleted file mode 100644 index c4cac90..0000000 --- a/lib/graph.json +++ /dev/null @@ -1,2261 +0,0 @@ -{ - "@context": [ - "https://www.w3.org/ns/activitystreams", - { - "items": { - "@id": "as:items", - "@type": "@id", - "@container": "@id" - } - } - ], - "id": "https://dag.s-ol.nu/discussions/1", - "type": "Document", - "name": "DiscDAG's Future", - "first": "https://dag.s-ol.nu/users/ColinWright/notes/20200510151146a", - "items": { - "https://dag.s-ol.nu/users/ColinWright/notes/20200510151146a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T15:11:46Z", - "content": "Looking at the medium to long-term future of DiscDAG. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510151228a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510151228a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T15:12:28Z", - "content": "In discussion with s-ol, and possibly others. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510151146a" - ], - "replies": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510151336a", - "https://dag.s-ol.nu/users/s-ol/notes/20200510155908a" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20200510151336a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2020-05-10T15:13:36Z", - "content": "I've made a login request ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510151228a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510171915a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510154331b": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T15:43:31Z", - "content": "I've assigned you a colour for your nodes, and have given you permission to put reverse arrow and create orphaned nodes, and permission to create discussions. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510171915a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510154331c", - "https://dag.s-ol.nu/users/ColinWright/notes/20200510154417a", - "https://dag.s-ol.nu/users/ColinWright/notes/20200510154502a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510154331c": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T15:43:31Z", - "content": "That will let you create a discussion to have a play with the idea. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510154331b" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510154331d" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510154331d": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T15:43:31Z", - "content": "As you no doubt realise, the UIX is atrocious, but I hope that the potential is there to be seen. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510154331c" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510154331e" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510154331e": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T15:43:31Z", - "content": "I've installed your email, so if/when someone replies to any of your nodes you will get a notification. Let me know if you want that disabled. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510154331d" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510154331f", - "https://dag.s-ol.nu/users/ColinWright/notes/20200510154502a", - "https://dag.s-ol.nu/users/s-ol/notes/20200510182605a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510154331f": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T15:43:31Z", - "content": "Currently the system sees effectively no traffic, and has no users, so it shouldn't be a problem. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510154331e" - ], - "replies": [] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510154417a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T15:44:17Z", - "content": "If you'd like your colour changed, let me know the #RRGGBB you would like. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510154331b" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510154502a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510154502a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T15:45:02Z", - "content": "Currently there are no user accessible interfaces for editing your profile, or for import/export. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510154331b", - "https://dag.s-ol.nu/users/ColinWright/notes/20200510154331e", - "https://dag.s-ol.nu/users/ColinWright/notes/20200510154417a" - ], - "replies": [] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510154747a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T15:47:47Z", - "content": "This is an import of the email I recently sent you, so we can continue the discussion here. That might let you get the hang of using it \"for real\". ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510171915a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510154747b" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510154747b": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T15:47:47Z", - "content": "It's easy enough for me to export a discussion if you want to give up on it and revert to email (or other). ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510154747a" - ], - "replies": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510173824a" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20200510155908a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2020-05-10T15:59:08Z", - "content": "I think it is pretty interesting. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510151228a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160010a", - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160027a", - "https://dag.s-ol.nu/users/s-ol/notes/20200510160105a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160010a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T16:00:10Z", - "content": "I've also written an email-thread import script. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510155908a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160010b" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160010b": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T16:00:10Z", - "content": "It's not perfect, and things need fixed, but when an email thread gets complex and messy I can, as a one-time operation, import it into DiscDAG and make sense of it. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160010a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160010c" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160010c": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T16:00:10Z", - "content": "It's genuinely useful, although it still has many, many snags. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160010b" - ], - "replies": [] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160027a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T16:00:27Z", - "content": "Thank you. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510155908a" - ], - "replies": [] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20200510160105a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2020-05-10T16:01:05Z", - "content": "Do you really want and need to have DiscDAG be it's own separate information system? ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510155908a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160228a", - "https://dag.s-ol.nu/users/s-ol/notes/20200510160404a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160228a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T16:02:28Z", - "content": "At the moment, I don't know where I want this to go. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510160105a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160228b" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160228b": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T16:02:28Z", - "content": "I haven't found anything similar, so I've had to create my own system for my own use. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160228a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160228c" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160228c": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T16:02:28Z", - "content": "There are problems with the approach, in that discussions can become huge sprawling messes. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160228b" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160228d", - "https://dag.s-ol.nu/users/s-ol/notes/20200510181344a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160228d": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T16:02:28Z", - "content": "The existing implementation has let me explore possible solutions to that problem. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160228c" - ], - "replies": [] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20200510160404a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2020-05-10T16:04:04Z", - "content": "If DiscDAG were to become popular, there is a substantial amount of work required to scale, host and maintain it. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510160105a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160537a", - "https://dag.s-ol.nu/users/s-ol/notes/20200510160816a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160537a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T16:05:37Z", - "content": "Absolutely. It would end up having to be a service, and then that would have to be paid for somehow. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510160404a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160537b", - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160537c" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160537b": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T16:05:37Z", - "content": "People would want to be able to import and export their data. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160537a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160537d" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160537c": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T16:05:37Z", - "content": "People would (rightly) ask about whether things were encrypted, etc. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160537a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160537d" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160537d": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T16:05:37Z", - "content": "These are valid concerns. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160537b", - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160537c" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160537e" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160537e": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T16:05:37Z", - "content": "The fact that you ask is interesting to me, because it suggests you think the idea \"has legs\". ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160537d", - "https://dag.s-ol.nu/users/s-ol/notes/20200510161708a" - ], - "replies": [] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20200510160816a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2020-05-10T16:08:16Z", - "content": "To become popular, users would have to switch from X to DiscDAG, which is hard to do, especially with a currently half-baked alternative. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510160404a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160905a", - "https://dag.s-ol.nu/users/s-ol/notes/20200510161005a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160905a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T16:09:05Z", - "content": "Absolutely. I have ideas about that. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510160816a" - ], - "replies": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510175402a" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20200510161005a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2020-05-10T16:10:05Z", - "content": "Is there something that the DiscDAG needs from its data that e.g. Mastodon cannot provide? ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510160816a" - ], - "replies": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510161005b", - "https://dag.s-ol.nu/users/s-ol/notes/20200510175115a" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20200510161005b": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2020-05-10T16:10:05Z", - "content": "If not, then I would think building a client/frontend based on the DiscDAG principles would be an easier task and a more likely migration path for users to take. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510161005a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510161618a", - "https://dag.s-ol.nu/users/s-ol/notes/20200510161708a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510161618a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T16:16:18Z", - "content": "Consider the \"Chartodon\" system I have. If one could interact with that in the way one interacts with DiscDAG, suddenly it's something that is effectively both, Mastodon and DiscDAG. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510161005b" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510161618b", - "https://dag.s-ol.nu/users/s-ol/notes/20200510174013a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510161618b": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T16:16:18Z", - "content": "You still have the problem of discussions ending up sprawling, privacy concerns, etc., but yes, it's a derivative/evolution that could be \"A Thing(tm)\". ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510161618a" - ], - "replies": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510175749a" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20200510161708a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2020-05-10T16:17:08Z", - "content": "Clearly my bias is showing here, but that would be something I would be very interested in using myself. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510161005b" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160537e", - "https://dag.s-ol.nu/users/s-ol/notes/20200510161806a" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20200510161806a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2020-05-10T16:18:06Z", - "content": "I have experience in building software for the web using the \"modern\" technologies. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510161708a" - ], - "replies": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510161806b", - "https://dag.s-ol.nu/users/ColinWright/notes/20200510161921a" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20200510161806b": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2020-05-10T16:18:06Z", - "content": "(clientside JS frameworks, various serverside solutions etc.). ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510161806a" - ], - "replies": [] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510161921a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T16:19:21Z", - "content": "Then you have the skills to implement the vision. The question is, where do we go from here? ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510161806a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510161921b", - "https://dag.s-ol.nu/users/s-ol/notes/20200510181505a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510161921b": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T16:19:21Z", - "content": "The idea, as implemented in DiscDAG, is pretty obvious, and you could probably just code up an experiment and go with it. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510161921a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510161921c", - "https://dag.s-ol.nu/users/s-ol/notes/20210123205713a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510161921c": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T16:19:21Z", - "content": "What would you want from me to help you, and what would you provide me in return? Let's see if we can help each other. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510161921b" - ], - "replies": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510180057a", - "https://dag.s-ol.nu/users/s-ol/notes/20200510180222a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510171915a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T17:19:15Z", - "content": "I've registered you on the system. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510151336a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510154331b", - "https://dag.s-ol.nu/users/ColinWright/notes/20200510154747a" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20200510173824a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2020-05-10T17:38:24Z", - "content": "I'm actually liking this quite a lot. I hadn't thought about it when writing the email, but imagining this discussion as an email reply from you I can already tell this format is making it easier for me to process the whole scope of the discussion. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510154747b" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510180532a" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20200510174013a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2020-05-10T17:40:13Z", - "content": "Mastodon is designed in a client/server architecture, where a client can be a website or a native application that talks to the server over HTTP. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510161618a" - ], - "replies": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510174054a", - "https://dag.s-ol.nu/users/s-ol/notes/20210121233207a" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20200510174054a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2020-05-10T17:40:54Z", - "content": "An alternative Mastodon UI only needs to reimplement (the relevant parts of) the client. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510174013a" - ], - "replies": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510174214a" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20200510174214a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2020-05-10T17:42:14Z", - "content": "Such a solution automatically inherits all the features of the Mastodon data model and protocols (multiple users, federation), as long as it can stay with the models and protocols. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510174054a" - ], - "replies": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510174328a", - "https://dag.s-ol.nu/users/s-ol/notes/20200510175749a" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20200510174328a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2020-05-10T17:43:28Z", - "content": "I need to read more about this, but iirc the protocols mastodon uses have support for extensions. This is used e.g. for different types of embedded media, polls etc. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510174214a" - ], - "replies": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510174417a" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20200510174417a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2020-05-10T17:44:17Z", - "content": "The core protocol probably only supports single-parent-replies, but multiple parents could likely be added using an extension. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510174328a" - ], - "replies": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510175239a" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20200510175115a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2020-05-10T17:51:15Z", - "content": "When a new node is created, it can be connected as a \"downstream\" node of 0-N parents. Can these connections change after the fact - is there a way for another node to \"link downstream\" and adopt the first? ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510161005a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510180018a" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20200510175239a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2020-05-10T17:52:39Z", - "content": "that might be all that is needed server/data-wise for a Mastodon-DAG-frontend. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510174417a" - ], - "replies": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510183254a" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20200510175402a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2020-05-10T17:54:02Z", - "content": "elaborate maybe? ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160905a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510181030a" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20200510175749a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2020-05-10T17:57:49Z", - "content": "Privacy concerns would be solved to the degree that they are solved in Mastodon, which everyone seems to be quite happy with. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510161618b", - "https://dag.s-ol.nu/users/s-ol/notes/20200510174214a" - ], - "replies": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510181344a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510180018a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T18:00:18Z", - "content": "By default, currently a new node can be the child of any number of selected nodes. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510175115a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510180018b", - "https://dag.s-ol.nu/users/ColinWright/notes/20200510180047a", - "https://dag.s-ol.nu/users/s-ol/notes/20210123144929a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510180018b": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T18:00:18Z", - "content": "I'm thinking of limiting that to at most N, probably with N=3. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510180018a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510180145a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510180047a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T18:00:47Z", - "content": "If you have exactly two nodes selected you can choose to connect them with an arrow. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510180018a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510180145a", - "https://dag.s-ol.nu/users/ColinWright/notes/20200510180242a", - "https://dag.s-ol.nu/users/ColinWright/notes/20200510180320a", - "https://dag.s-ol.nu/users/s-ol/notes/20200510180536a" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20200510180057a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2020-05-10T18:00:57Z", - "content": "My biggest problem is that I have other stuff going on, and if this were to become a project I would like to take it seriously. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510161921c" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510182419a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510180145a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T18:01:45Z", - "content": "The ability to create new arrows then means limiting to N=3 isn't a major restriction, but it will prevent accidentally replying to, say, 23 nodes. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510180018b", - "https://dag.s-ol.nu/users/ColinWright/notes/20200510180047a" - ], - "replies": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510181013a" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20200510180222a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2020-05-10T18:02:22Z", - "content": "I would prefer to not be working on the client alone. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510161921c" - ], - "replies": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510181621a", - "https://dag.s-ol.nu/users/ColinWright/notes/20200510182419a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510180242a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T18:02:42Z", - "content": "The default setting is that arrows can only point forward in time. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510180047a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510180242b", - "https://dag.s-ol.nu/users/s-ol/notes/20200510180502a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510180242b": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T18:02:42Z", - "content": "Some people (you and me, for example) are permitted to create arrows going backwards. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510180242a" - ], - "replies": [] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510180320a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T18:03:20Z", - "content": "If the two selected nodes are already joined, you can remove the arrow, unless that would create an orphan. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510180047a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510180344a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510180344a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T18:03:44Z", - "content": "For some people (you and me, for example) that restriction is lifted, and any arrows can be removed. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510180320a" - ], - "replies": [] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20200510180502a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2020-05-10T18:05:02Z", - "content": "This is consistent with the way messages in Mastodon work - you can only mention content that already exists. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510180242a" - ], - "replies": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510180536a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510180532a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T18:05:32Z", - "content": "Excellent! ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510173824a" - ], - "replies": [] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20200510180536a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2020-05-10T18:05:36Z", - "content": "Mastodon messages are immutable, so this wouldn't be trivial to implement. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510180047a", - "https://dag.s-ol.nu/users/s-ol/notes/20200510180502a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510182205a" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20200510181013a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2020-05-10T18:10:13Z", - "content": "This makes sense in the current implementation, but would better be solved with a confirmation dialog in a \"well designed\" modern UI. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510180145a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510181921a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510181030a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T18:10:30Z", - "content": "Not fully formed ... and there are several half-formed ideas all floating around. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510175402a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510181030b", - "https://dag.s-ol.nu/users/ColinWright/notes/20200510181132a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510181030b": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T18:10:30Z", - "content": "One is along the lines of the Twitter -> Mastodon cross-poster I'm writing. So a DiscDAG node that contains a reference to a comment somewhere else transcludes the content, and has a link back to there in case someone wants to go there. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510181030a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510181030c" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510181030c": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T18:10:30Z", - "content": "Then the parents and children are *also* transcluded, but only one generation in each direction. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510181030b" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510181030d", - "https://dag.s-ol.nu/users/s-ol/notes/20210121232835a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510181030d": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T18:10:30Z", - "content": "But migrating across social media is a significantly hard problem everywhere. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510181030c" - ], - "replies": [] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510181132a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T18:11:32Z", - "content": "There's the challenge of \"on-boarding\" people, but that mostly goes away if this is just an interface to an existing system, such as Mastodon. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510181030a" - ], - "replies": [] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20200510181344a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2020-05-10T18:13:44Z", - "content": "It seems the biggest challenge that remains is the UX, not the technicalities. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510160228c", - "https://dag.s-ol.nu/users/s-ol/notes/20200510175749a" - ], - "replies": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510181505a", - "https://dag.s-ol.nu/users/s-ol/notes/20210121231940a" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20200510181505a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2020-05-10T18:15:05Z", - "content": "I think I am an alright UX armchair critic, but not too great at designing things functionally from scratch. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510161921a", - "https://dag.s-ol.nu/users/s-ol/notes/20200510181344a" - ], - "replies": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510181621a", - "https://dag.s-ol.nu/users/ColinWright/notes/20200510182419a", - "https://dag.s-ol.nu/users/s-ol/notes/20210121232348a" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20200510181621a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2020-05-10T18:16:21Z", - "content": "Finding and involving others could help here. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510180222a", - "https://dag.s-ol.nu/users/s-ol/notes/20200510181505a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510182419a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510181921a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T18:19:21Z", - "content": "Perhaps \"Warning\" rather than \"Confirmation\", but yes. Even so, the ability to add arrows means the restriction wouldn't be onerous. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510181013a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510181921b" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510181921b": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T18:19:21Z", - "content": "The question is in the detail of how to enforce it. I'm considering not allowing more than N nodes to be selected anyway, but that has its own problems. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510181921a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510181921c" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510181921c": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T18:19:21Z", - "content": "For one thing, it severely restricts \"Neighbourhood\" mode. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510181921b" - ], - "replies": [] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510182205a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T18:22:05Z", - "content": "Agreed, although it's not clear that the existing interface/API would allow multiple parents at all. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510180536a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510182205b", - "https://dag.s-ol.nu/users/s-ol/notes/20200510183254a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510182205b": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T18:22:05Z", - "content": "One could have a structural meta-node whose content is \"I have text from N, and parents A, B, and C\". ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510182205a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510182205c", - "https://dag.s-ol.nu/users/s-ol/notes/20200510183111a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510182205c": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T18:22:05Z", - "content": "That would effectively allow new arrows to be created (thinking out loud). ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510182205b" - ], - "replies": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510183111a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510182419a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T18:24:19Z", - "content": "I have effectively zero skills in this area, and too much going on to be able to take the time to come up to speed, so coding-wise I suspect I would be of no value. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510180057a", - "https://dag.s-ol.nu/users/s-ol/notes/20200510180222a", - "https://dag.s-ol.nu/users/s-ol/notes/20200510181505a", - "https://dag.s-ol.nu/users/s-ol/notes/20200510181621a" - ], - "replies": [] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20200510182605a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2020-05-10T18:26:05Z", - "content": "I don't mind the emails, but would appreciate them arriving in this inbox rather than my main one: ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510154331e" - ], - "replies": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510182605b" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20200510182605b": { - "type": "Tombstone", - "formerType": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2020-05-10T18:26:05Z", - "content": "Email redacted ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510182605a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510182850a", - "https://dag.s-ol.nu/users/ColinWright/notes/20210122120006a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510182850a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T18:28:50Z", - "content": "Address changed. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510182605b" - ], - "replies": [] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20200510183111a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2020-05-10T18:31:11Z", - "content": "Similarly I thought about having a new type of message that just represents a single edge in the graph. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510182205b", - "https://dag.s-ol.nu/users/ColinWright/notes/20200510182205c" - ], - "replies": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510183254a" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20200510183254a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2020-05-10T18:32:54Z", - "content": "I will try to read up a bit more on the existing data formats in the next week to find out what the relative difficulties and benefit's of the different implementation options would be. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510175239a", - "https://dag.s-ol.nu/users/ColinWright/notes/20200510182205a", - "https://dag.s-ol.nu/users/s-ol/notes/20200510183111a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510184005a", - "https://dag.s-ol.nu/users/s-ol/notes/20210121164835a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510184005a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T18:40:05Z", - "content": "Cool. I'll look at making some changes to this implementation. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510183254a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510184005b", - "https://dag.s-ol.nu/users/ColinWright/notes/20200510184031a", - "https://dag.s-ol.nu/users/ColinWright/notes/20200510184328a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510184005b": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T18:40:05Z", - "content": "One thing that could be useful would be an \"Archive this node\" feature to hide things you've read and don't need to see again, unless they are answered to. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510184005a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510184100a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510184031a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T18:40:31Z", - "content": "The \"Show Newer\" feature is broken, so I need to look at restoring that. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510184005a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510184100a", - "https://dag.s-ol.nu/users/ColinWright/notes/20200510195402a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510184100a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T18:41:00Z", - "content": "Other suggestions welcome. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510184005b", - "https://dag.s-ol.nu/users/ColinWright/notes/20200510184031a", - "https://dag.s-ol.nu/users/ColinWright/notes/20200510184328a" - ], - "replies": [] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510184328a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T18:43:28Z", - "content": "Wondering about \"Ephemeral Nodes\", nodes that only live for an hour (say). ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510184005a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510184100a", - "https://dag.s-ol.nu/users/ColinWright/notes/20200510184328b" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510184328b": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T18:43:28Z", - "content": "Example, me saying \"OK, I'm done for now, catch you later\" ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510184328a" - ], - "replies": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210121164643a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20200510195402a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2020-05-10T19:54:02Z", - "content": "OK, I've fixed \"Newer\" as a \"one shot\" display, but it doesn't remember the setting. ", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510184031a" - ], - "replies": [] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20210121164643a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2021-01-21T16:46:43Z", - "content": "If it lives only for one hour, and I do not rely on email notifications (which inadequately captures the conversation), I can and will miss such a message.", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510184328b" - ], - "replies": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210121164729a", - "https://dag.s-ol.nu/users/ColinWright/notes/20210121204008a" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20210121164729a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2021-01-21T16:47:29Z", - "content": "Instead, I would propose to have nodes that exist only until dismissed, or viewed the first time.", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210121164643a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20210121204312a" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20210121164835a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2021-01-21T16:48:35Z", - "content": "Predictably, I had not found time to read up on existing data formats the following week.", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510183254a" - ], - "replies": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210121164910a", - "https://dag.s-ol.nu/users/s-ol/notes/20210121165029a" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20210121164910a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2021-01-21T16:49:10Z", - "content": "However, I found this nice page detailing how Mastodon interacts with ActivityPub at large: https://docs.joinmastodon.org/spec/activitypub/", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210121164835a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20210121232648a", - "https://dag.s-ol.nu/users/s-ol/notes/20210121233207a" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20210121165029a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2021-01-21T16:50:29Z", - "content": "I also found this project, that seems useful and a good starting point, although it is somewhat hard to grasp which parts they actually built: https://semapps.org/docs/guides/ldp-server", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210121164835a" - ], - "replies": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210121165400a", - "https://dag.s-ol.nu/users/s-ol/notes/20210121165549a" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20210121165400a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2021-01-21T16:54:00Z", - "content": "I gather that they use a triple store (\"Jena Fuseki\"), which is inherently graph-based and would be ideal for DiscDAG.", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210121165029a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20210121232648a" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20210121165549a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2021-01-21T16:55:49Z", - "content": "Some sort of user/permission system that is compatible with ActivityPub/Mastodon seems to be included: https://semapps.org/docs/guides/activitypub", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210121165029a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20210121232648a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20210121204008a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2021-01-21T20:40:08Z", - "content": "But for some nodes, that would be what's wanted. Sometimes you want to say something like \"Back in a minute\" ... that doesn't need to persist, and if you don't see it at the time it doesn't matter.", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210121164643a" - ], - "replies": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210121231518a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20210121204312a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2021-01-21T20:43:12Z", - "content": "Certainly there is value in having the ability to dismiss or hide nodes ... I'll think about that.", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210121164729a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20210121204312b", - "https://dag.s-ol.nu/users/s-ol/notes/20210121231518a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20210121204312b": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2021-01-21T20:43:12Z", - "content": "When a discussion gets large it certainly needs some way to reduce what's shown.", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20210121204312a" - ], - "replies": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210121231940a" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20210121231518a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2021-01-21T23:15:18Z", - "content": "True, I can see the utility of either now. I think it depends a lot on the mode of conversation/use: fast-paced, chat-like, or slow, deliberate, wiki-ish.", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20210121204008a", - "https://dag.s-ol.nu/users/ColinWright/notes/20210121204312a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20210121232058a" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20210121231940a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2021-01-21T23:19:40Z", - "content": "A more deliberately crafted UI could trim or \"fade out\" remote and isolated branches of the graph (unrelated forks that never make a connection to the selection).", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510181344a", - "https://dag.s-ol.nu/users/ColinWright/notes/20210121204312b" - ], - "replies": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210121231940b", - "https://dag.s-ol.nu/users/ColinWright/notes/20210121232252a" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20210121231940b": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2021-01-21T23:19:40Z", - "content": "Any feature that hides content must be matched with a feature to find content though, so that the hiding does not lead to loss or duplication of content.", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210121231940a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20210121232351a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20210121232058a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2021-01-21T23:20:58Z", - "content": "I think that's one weakness of this system. It doesn't easily facilitate the distillation of the discussion into a \"document\"", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210121231518a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20210121232058b" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20210121232058b": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2021-01-21T23:20:58Z", - "content": "The original C2 wiki had the culture of starting in discussion-mode, and then working together in good faith to converge to document-mode.", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20210121232058a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20210121232058c", - "https://dag.s-ol.nu/users/s-ol/notes/20210122095153a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20210121232058c": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2021-01-21T23:20:58Z", - "content": "I haven't forgotten that, and am still working on how to achieve it.", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20210121232058b" - ], - "replies": [] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20210121232252a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2021-01-21T23:22:52Z", - "content": "Agreed ... that's in the plan (such as it is)", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210121231940a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20210121232351a" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20210121232348a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2021-01-21T23:23:48Z", - "content": "I think a tablet would be the perfect physical interface for this medium.", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510181505a" - ], - "replies": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210121232348b" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20210121232348b": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2021-01-21T23:23:48Z", - "content": "Gestural navigation maps to this kind of spacial structure much better than scrolling and probably also mouse-based interaction.", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210121232348a" - ], - "replies": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210121232348c" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20210121232348c": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2021-01-21T23:23:48Z", - "content": "Smartphones are essentially the same but the lack of screen real estate makes it somewhat uncomfortable to read.", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210121232348b" - ], - "replies": [] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20210121232351a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2021-01-21T23:23:51Z", - "content": "The \"Search\" feature exists, and that could have an option to specify time ranges or other \"near and far\" type ideas.", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210121231940b", - "https://dag.s-ol.nu/users/ColinWright/notes/20210121232252a" - ], - "replies": [] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20210121232648a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2021-01-21T23:26:48Z", - "content": "I'll go check those out in a day or two, thanks. Currently I'm working on an urgent task, but I've made a node of them.", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210121164910a", - "https://dag.s-ol.nu/users/s-ol/notes/20210121165400a", - "https://dag.s-ol.nu/users/s-ol/notes/20210121165549a" - ], - "replies": [] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20210121232835a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2021-01-21T23:28:35Z", - "content": "I do not understand this fully, but I've seen twitter, mastodon, and email threads \"imported\" into DiscDAG.", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510181030c" - ], - "replies": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210121233207a", - "https://dag.s-ol.nu/users/ColinWright/notes/20210121233221a" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20210121233207a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2021-01-21T23:32:07Z", - "content": "I have not explored this in detail yet, but my intuition is now that the ideal solution would be a system with the following components:", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510174013a", - "https://dag.s-ol.nu/users/s-ol/notes/20210121164910a", - "https://dag.s-ol.nu/users/s-ol/notes/20210121232835a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20210121233335a", - "https://dag.s-ol.nu/users/s-ol/notes/20210121233335a", - "https://dag.s-ol.nu/users/s-ol/notes/20210121233422a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20210121233221a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2021-01-21T23:32:21Z", - "content": "The idea is to allow some form of \"cross-connection\". So if a node here mentions a comment on, say, Mastodon, then a node is auto-created containing that Mastodon content. Clicking on *that* node would then take you to Mastodon.", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210121232835a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20210121233221b" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20210121233221b": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2021-01-21T23:32:21Z", - "content": "Or something ... not fully fleshed out.", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20210121233221a" - ], - "replies": [] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20210121233335a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2021-01-21T23:33:35Z", - "content": "(This would be an ephemeral node ... I need to go, it's late and I have an early start. I'm enjoying this ... thank you for your thoughts, and I'll get back to you when I can)", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210121233207a" - ], - "replies": [] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20210121233335a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2021-01-21T23:33:35Z", - "content": "a front-end that knows how to display various kinds of messages/schemas (including common AcrivityPub statuses) that are linked in a DAG", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210121233207a" - ], - "replies": [] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20210121233422a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2021-01-21T23:34:22Z", - "content": "an ActivityPub server", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210121233207a" - ], - "replies": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210121233522a", - "https://dag.s-ol.nu/users/s-ol/notes/20210121233627a", - "https://dag.s-ol.nu/users/s-ol/notes/20210121233718a" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20210121233522a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2021-01-21T23:35:22Z", - "content": "Users signed up on the server can post, link, etc. much like in this implementation", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210121233422a" - ], - "replies": [] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20210121233627a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2021-01-21T23:36:27Z", - "content": "The server can federate with other servers using the same (custom) ActivityPub extensions to create a distributed DAG", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210121233422a" - ], - "replies": [] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20210121233718a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2021-01-21T23:37:18Z", - "content": "The server can also federate with Mastodon instances, with a reduced feature set roughly equivalent to imported Mastodon conversations here.", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210121233422a" - ], - "replies": [] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20210122095153a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2021-01-22T09:51:53Z", - "content": "My immediate idea would be to introduce another kind of edge that denotes a \"content equivalency\".", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20210121232058b" - ], - "replies": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210122095153b", - "https://dag.s-ol.nu/users/ColinWright/notes/20210122102724a" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20210122095153b": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2021-01-22T09:51:53Z", - "content": "Then you can select a bunch of nodes and summarize / integrate / rephrase them in a new node that inherits their connections to outside nodes but drops connections between those replaced.", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210122095153a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20210122102724a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20210122102724a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2021-01-22T10:27:24Z", - "content": "Perhaps have a \"meta-node\" that \"overlays\" a set of selected nodes.", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210122095153a", - "https://dag.s-ol.nu/users/s-ol/notes/20210122095153b" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20210122102724b" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20210122102724b": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2021-01-22T10:27:24Z", - "content": "Select several nodes, write an \"overlay\" or \"summary\", and click \"Save\".", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20210122102724a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20210122102724c" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20210122102724c": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2021-01-22T10:27:24Z", - "content": "Then the selected nodes are not displayed, this new node is, and inherits the incoming and outgoing links from the group.", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20210122102724b" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20210122102724d" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20210122102724d": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2021-01-22T10:27:24Z", - "content": "There is a \"Button\" on the \"meta-node\" that reveals the ones underneath, so one can peel back the history.", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20210122102724c" - ], - "replies": [] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20210122120006a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2021-01-22T12:00:06Z", - "content": "I'm thinking of redacting this email address to avoid leaking it, and was wondering if you'd be happy for the discussion to be made public. When I'm finished my current work (in a few days) I'm thinking about inviting a few people to read the discussion, and potentially join in.", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20200510182605b" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20210122120006b", - "https://dag.s-ol.nu/users/s-ol/notes/20210122142745a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20210122120006b": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2021-01-22T12:00:06Z", - "content": "But this started as a discussion between us, so I wanted your thoughts. Nothing will happen for a few days at least.", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20210122120006a" - ], - "replies": [] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20210122142745a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2021-01-22T14:27:45Z", - "content": "Yes! In fact I was about to ask for this to be made public so I could show it to some friends as well. So please do redact and publicize :)", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20210122120006a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20210122145058a", - "https://dag.s-ol.nu/users/ColinWright/notes/20210122151850a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20210122145058a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2021-01-22T14:50:58Z", - "content": "OK, redacted, and I'm about to make this publicly readable.", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210122142745a" - ], - "replies": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20210122145058b", - "https://dag.s-ol.nu/users/ColinWright/notes/20210122151850a" - ] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20210122145058b": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2021-01-22T14:50:58Z", - "content": "I still don't have a convenient way to invite people to contribute. The lesson of Skype versus Zoom is one I need to internalise and implement", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20210122145058a" - ], - "replies": [] - }, - "https://dag.s-ol.nu/users/ColinWright/notes/20210122151850a": { - "type": "Note", - "attributedTo": "https://mathstodon.xyz/users/ColinTheMathmo", - "published": "2021-01-22T15:18:50Z", - "content": "Now \"World Readable\".", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210122142745a", - "https://dag.s-ol.nu/users/ColinWright/notes/20210122145058a" - ], - "replies": [] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20210123144929a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2021-01-23T14:49:29Z", - "content": "This is consitent with the \"Activity Vocabulary\" spec: https://www.w3.org/TR/activitystreams-vocabulary/#dfn-inreplyto", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510180018a" - ], - "replies": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210123144929b" - ] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20210123144929b": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2021-01-23T14:49:29Z", - "content": "Mastodon does not support replying to multiple posts in it's UI, but I wonder how it deals with such messages arriving via federation.", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/s-ol/notes/20210123144929a" - ], - "replies": [] - }, - "https://dag.s-ol.nu/users/s-ol/notes/20210123205713a": { - "type": "Note", - "attributedTo": "https://merveilles.town/users/s_ol", - "published": "2021-01-23T20:57:13Z", - "content": "Could you dump and mail or attach here in some way the DB representation of this discussion? It would be a great example dataset to prototype a new client with.", - "context": "https://dag.s-ol.nu/discussions/1", - "to": [ - "https://www.w3.org/ns/activitystreams#Public" - ], - "inReplyTo": [ - "https://dag.s-ol.nu/users/ColinWright/notes/20200510161921b" - ], - "replies": [] - } - } -} diff --git a/package.json b/package.json index b026c22..8a66943 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "fedidag-client", "version": "0.0.1", "scripts": { - "start": "CORS_PREFIX=http://localhost:8088 webpack serve -w --host 0.0.0.0", + "start": "API_PREFIX=http://localhost:3000 webpack serve -w --host 0.0.0.0", "cors": "node cors.js", "build": "webpack --config ./webpack.config.js --mode production --progress" }, diff --git a/src/config.js b/src/config.js new file mode 100644 index 0000000..91d6231 --- /dev/null +++ b/src/config.js @@ -0,0 +1,3 @@ +export const PUBLIC_URL = process.env.PUBLIC_URL || `${location.origin}`; +export const API_PREFIX = process.env.API_PREFIX || `${location.origin}`; +export const CORS_PREFIX = process.env.CORS_PREFIX || `${API_PREFIX}/remote`; diff --git a/src/graph.js b/src/graph.js new file mode 100644 index 0000000..7fe842c --- /dev/null +++ b/src/graph.js @@ -0,0 +1,205 @@ +import { Component } from 'preact'; +import * as jsonld from 'jsonld'; +import { CORS_PREFIX } from './config'; + +const cors = (url) => `${CORS_PREFIX}/${url}`; + +function wrapCache(target) { + const orig = target.descriptor.value; + + target.descriptor.value = function (id, ...args) { + this.cache[id] ||= orig.call(this, id, ...args); + return this.cache[id]; + }; + + return target; +}; + +const context = [ + 'https://www.w3.org/ns/activitystreams', + { + replies: { '@id': 'as:replies', '@container': '@set' }, + inReplyTo: { '@id': 'as:inReplyTo', '@container': '@set' }, + items: { '@id': 'as:items', '@type': '@id', '@container': '@set' }, + }, +]; + +export class GraphContainer extends Component { + state = { + loading: true, + name: "loading…", + items: {}, + error: null, + }; + + cache = {}; + + componentDidMount() { + this.componentDidUpdate({}); + } + + componentDidUpdate(prevProps) { + if (prevProps.url === this.props.url) return; + + this.loadData(this.props.url) + .catch(error => { + console.error(`Error loading ${this.props.url}:`, error); + this.setState({ + loading: false, + error, + }); + }); + } + + @wrapCache + async loadUser(id) { + if (id === "https://dag.s-ol.nu/users/unknown") { + return { + '@context': context, + id, + type: 'Person', + name: 'unknown', + summary: 'unknown user', + }; + } + + try { + const user = await jsonld.compact(id, context); + user.id = id; + return user; + } catch (error) { + console.error(`Error loading user '${id}':`, error); + return { + '@context': context, + id, + type: 'Person', + name: id, + summary: 'failed to load user information', + }; + } + } + + render() { + window.state = this.state; + return this.props.render(this.state); + } +} + +export class GraphContainerMastodon extends GraphContainer { + @wrapCache + async loadCollection(id, ...args) { + const collection = await jsonld.compact(cors(id), context); + let items = []; + + const addItems = (i) => { + if (Array.isArray(i)) + items = items.concat(i); + else if (i) + items.push(i); + }; + + // discover items + if (collection.items) { + addItems(collection.items); + } else { + let page = collection.first; + const seen = []; + while (page && seen.indexOf(page.id) < 0) { + seen.push(page.id); + addItems(page.items); + + page = page.next && await jsonld.compact(cors(page.next), context); + } + } + + // dereference items + return await Promise.all(items.map(item => this.loadNote(item.id ?? item, ...args))); + } + + @wrapCache + async loadNote(id, items, inReplyTo) { + let item; + try { + item = await jsonld.frame( + cors(id), + { + '@context': context, + type: 'Note', + context: { '@embed': '@never' }, + replies: { '@embed': '@always' }, + inReplyTo: { '@embed': '@never' }, + }, + { omitGraph: true } + ); + + if (item.replies.length) + item.replies = await this.loadCollection(item.replies[0].id, items, [id]); + } catch (error) { + console.error(`Error loading note '${id}':`, error); + item = { + '@context': context, + id, + type: 'Tombstone', + formerType: 'Note', + attributedTo: 'https://dag.s-ol.nu/users/unknown', + published: '1970-01-01T00:00:00Z', + content: `Error loading note: ${error.toString()}`, + replies: [], + inReplyTo, + }; + } + + item.attributedTo = await this.loadUser(item.attributedTo); + items[item.id] = item; + return item; + } + + async loadData(url) { + const items = {}; + const root = await this.loadNote(url, items, []); + + this.setState({ + name: root.name || root.content, + items, + loading: false, + }); + } +} + +export class GraphContainerJSONLD extends GraphContainer { + async loadData(url) { + const response = await fetch(url, { + headers: { 'Accept': 'application/ld+json, application/json' }, + credentials: 'include', + }); + + const discussion = await jsonld.frame( + await response.json(), + { + '@context': context, + type: 'Document', + first: { '@embed': '@never' }, + items: { + context: { '@embed': '@never' }, + replies: { '@embed': '@never' }, + inReplyTo: { '@embed': '@never' }, + attributedTo: { '@embed': '@always' }, + }, + }, + { omitGraph: true } + ); + + const indexedItems = {}; + await Promise.all(discussion.items.map(async (item) => { + item.attributedTo = await this.loadUser(item.attributedTo); + indexedItems[item.id] = item; + })); + + discussion.items = indexedItems; + + this.setState({ + ...discussion, + loading: false, + }); + } +} diff --git a/src/index.js b/src/index.js index 8cad259..a30dbf1 100644 --- a/src/index.js +++ b/src/index.js @@ -1,208 +1,9 @@ import 'preact/debug'; import 'core-js/stable'; import 'regenerator-runtime/runtime'; -import * as jsonld from 'jsonld'; import { h, Fragment, Component, render } from 'preact'; -import { Discussion, Selection } from './ui'; - -const context = [ - 'https://www.w3.org/ns/activitystreams', - { - replies: { '@id': 'as:replies', '@container': '@set' }, - inReplyTo: { '@id': 'as:inReplyTo', '@container': '@set' }, - }, -]; - - -const corsPrefix = process.env.CORS_PREFIX || `${location.origin}/remote`; -console.log(corsPrefix); -const cors = (url) => `${corsPrefix}/${url}`; - -function wrapCache(target) { - const orig = target.descriptor.value; - - target.descriptor.value = function (id, ...args) { - this.cache[id] ||= orig.call(this, id, ...args); - return this.cache[id]; - }; - - return target; -}; - -class GraphContainer extends Component { - state = { - name: "loading…", - items: {}, - error: null, - }; - - cache = {}; - - constructor(props) { - super(props); - - if (this.props.graph.startsWith('http')) - this.loadDataMastodon(this.props.graph) - .catch(error => { - console.error(`Error loading Mastodon graph ${this.props.graph}:`, error); - this.setState({ - name: "error loading", - error, - }); - }); - else - this.loadData(this.props.graph) - .catch(error => { - console.error("Error loading default graph:", error); - this.setState({ - name: "error loading", - error, - }); - }); - } - - @wrapCache - async loadCollection(id, ...args) { - const collection = await jsonld.compact(cors(id), context); - let items = []; - - const addItems = (i) => { - if (Array.isArray(i)) - items = items.concat(i); - else if (i) - items.push(i); - }; - - // discover items - if (collection.items) { - addItems(collection.items); - } else { - let page = collection.first; - const seen = []; - while (page && seen.indexOf(page.id) < 0) { - seen.push(page.id); - addItems(page.items); - - page = page.next && await jsonld.compact(cors(page.next), context); - } - } - - // dereference items - return await Promise.all(items.map(item => this.loadNote(item.id ?? item, ...args))); - } - - @wrapCache - async loadNote(id, items, inReplyTo) { - let item; - try { - item = await jsonld.frame( - cors(id), - { - '@context': context, - type: 'Note', - context: { '@embed': '@never' }, - replies: { '@embed': '@always' }, - inReplyTo: { '@embed': '@never' }, - }, - { omitGraph: true } - ); - - if (item.replies.length) - item.replies = await this.loadCollection(item.replies[0].id, items, [id]); - } catch (error) { - console.error(`Error loading note '${id}':`, error); - item = { - '@context': context, - id, - type: 'Tombstone', - formerType: 'Note', - attributedTo: 'https://dag.s-ol.nu/users/unknown', - published: '1970-01-01T00:00:00Z', - content: `Error loading note: ${error.toString()}`, - replies: [], - inReplyTo, - }; - } - - item.attributedTo = await this.loadUser(item.attributedTo); - items[item.id] = item; - return item; - } - - async loadDataMastodon(url) { - const items = {}; - const root = await this.loadNote(url, items, []); - - this.setState({ - name: root.name || root.content, - items, - }); - } - - async loadData(url) { - const response = await fetch(url, { - headers: { 'Accept': 'application/json' }, - }); - const discussion = await jsonld.frame( - await response.json(), - { - '@context': context, - type: 'Document', - first: { '@embed': '@never' }, - items: { - context: { '@embed': '@never' }, - replies: { '@embed': '@never' }, - inReplyTo: { '@embed': '@never' }, - attributedTo: { '@embed': '@always' }, - }, - }, - { omitGraph: true } - ); - - const indexedItems = {}; - await Promise.all(discussion.items.map(async (item) => { - item.attributedTo = await this.loadUser(item.attributedTo); - indexedItems[item.id] = item; - })); - - discussion.items = indexedItems; - - this.setState(discussion); - } - - @wrapCache - async loadUser(id) { - if (id === "https://dag.s-ol.nu/users/unknown") { - return { - '@context': context, - id, - type: 'Person', - name: 'unknown', - summary: 'unknown user', - }; - } - - try { - const user = await jsonld.compact(id, context); - user.id = id; - return user; - } catch (error) { - console.error(`Error loading user '${id}':`, error); - return { - '@context': context, - id, - type: 'Person', - name: id, - summary: 'failed to load user information', - }; - } - } - - render() { - window.state = this.state; - return this.props.render(this.state); - } -} +import { GraphContainerJSONLD, GraphContainerMastodon } from './graph'; +import { Menu, Discussion, Selection } from './ui'; class SelectionContainer extends Component { state = { @@ -280,46 +81,82 @@ class CollapseContainer extends Component { } } -const search = new URLSearchParams(window.location.search); -const graph = search.has('graph') ? search.get('graph') : 'lib/graph.json'; -const app = ( - <GraphContainer graph={graph} render={({ name, items, error }) => { - if (error) { - return ( - <article> - <h1>{name}</h1> +const graphRender = ({ loading, error, name, items }) => { + if (loading) { + return ( + <article> + <div>loading...</div> + </article> + ); + } + + if (error) { + return ( + <article> + <h1>error loading</h1> + <div> <p>{error.toString()}</p> <pre> <code> {error.stack} </code> </pre> - </article> - ); - } - - return ( - <SelectionContainer render={({ selection, toggleSelected }) => ( - <> - <CollapseContainer - items={items} - render={({ collapsed, toggleCollapsed }) => ( - <Discussion - name={name} - items={items} - collapsed={collapsed} - toggleCollapsed={toggleCollapsed} - toggleSelected={toggleSelected} - /> - )} - /> - <Selection - items={selection.map(id => items[id])} - toggleSelected={toggleSelected} - /> - </> - )} /> + </div> + </article> ); - }} /> -); + } + + return ( + <SelectionContainer render={({ selection, toggleSelected }) => ( + <> + <CollapseContainer + items={items} + render={({ collapsed, toggleCollapsed }) => ( + <Discussion + name={name} + items={items} + collapsed={collapsed} + toggleCollapsed={toggleCollapsed} + toggleSelected={toggleSelected} + /> + )} + /> + <Selection + items={selection.map(id => items[id])} + toggleSelected={toggleSelected} + /> + </> + )} /> + ); +}; + +const search = new URLSearchParams(window.location.search); +const graph = search.has('graph') ? search.get('graph') : 'lib/graph.json'; + +let app; +if (search.has('document')) { + app = ( + <GraphContainerJSONLD + url={search.get('document')} + render={graphRender} + /> + ); +} else if (search.has('note')) { + app = ( + <GraphContainerMastodon + url={search.get('note')} + render={graphRender} + /> + ); +} else if (search.has('graph')) { + app = ( + <GraphContainerMastodon + url={search.get('graph')} + render={graphRender} + /> + ); +} else { + app = <Menu />; +} + render(app, document.body); diff --git a/src/ui/Attachment.js b/src/ui/Attachment.js index 829dc8a..3c07ee5 100644 --- a/src/ui/Attachment.js +++ b/src/ui/Attachment.js @@ -5,8 +5,7 @@ css` .attachment { margin: 1rem; - width: 18rem; - height: 10rem; + height: 7rem; object-fit: contain; } diff --git a/src/ui/Discussion.js b/src/ui/Discussion.js index b0cdb4f..5fef693 100644 --- a/src/ui/Discussion.js +++ b/src/ui/Discussion.js @@ -7,24 +7,44 @@ import { Note } from './Note'; css` article { - display: flex; - flex-direction: column; + position: absolute; + inset: 0; overflow: auto; - flex: 1 1 auto; - padding: 0 2rem; } article > h1 { - flex: 0 0 auto; + display: flex; + align-items: baseline; + + position: sticky; + inset: 0; + bottom: auto; + z-index: 200; + + margin: 0; + padding: 0.75rem 1.5rem; + background: var(--theme-title-bg); + color: var(--theme-title-fg); +} +article > h1 > span { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } +article > h1 .back { + font-size: 0.8em; + color: inherit; + opacity: 0.5; + + margin-left: 1em; +} + article > div { position: relative; + margin: 2rem 2rem 6rem; } `; @@ -53,7 +73,10 @@ export const Discussion = ({ return ( <article> - <h1>{name}</h1> + <h1> + <span>{name}</span> + <a class="back" href="?">back</a> + </h1> <div> <Links width={width} height={height} links={links} /> <div> diff --git a/src/ui/Menu.js b/src/ui/Menu.js new file mode 100644 index 0000000..6f32280 --- /dev/null +++ b/src/ui/Menu.js @@ -0,0 +1,139 @@ +import { h, Fragment } from 'preact'; +import { useState, useEffect } from 'preact/hooks'; +import cn from 'classnames'; +import { API_PREFIX } from '../config'; +import css from './css'; + +const fetchJSON = async (url) => { + const res = await fetch(API_PREFIX + url, { credentials: 'include' }); + if (res.status !== 200) + throw new Error("wrong status"); + + return res.json(); +}; + +css` +a.discussion { + display: flex; + + padding: 0.25rem 0.5rem; + text-size: 2rem; + line-height: 2rem; + text-decoration: none; + + border-radius: 0.3rem; + + color: var(--theme-note-fg); + background: var(--theme-note-bg); +} + +a.discussion .access { + opacity: 0.5; + margin-right: 0.75rem; +} + +a.discussion .name { + flex: 1 1 auto; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +a.discussion > a { + margin-left: 0.75rem; + text-decoration: underline; + color: inherit; + opacity: 0.5; + + transition: opacity 0.3s; +} +a.discussion > a:hover { + opacity: 1; +} +`; + +const DiscussionLink = ({ id, name, url, attributedTo, user }) => { + const writable = attributedTo && attributedTo.indexOf(user) > -1; + + return ( + <a class="discussion" href={`?document=${id}`}> + <span class="access">{writable ? 'W' : 'R'}</span> + <span class="name">{name}</span> + {url && ( + <a href={url.href}>ext</a> + )} + </a> + ); +}; + +css` +ul.discussions { + list-style: none; + padding: 0; + + width: 26rem; +} + +ul.discussions > li { + margin: 0.2rem 0; +} +`; + +const DiscussionList = ({ discussions, user }) => { + return ( + <ul class="discussions"> + {discussions.map((discussion) => ( + <li> + <DiscussionLink {...discussion} user={user} /> + </li> + ))} + </ul> + ); +}; + +css` +div.menu { + margin: 1rem 2rem; +} +`; +export const Menu = () => { + const [user, setUser] = useState(null); + const [discussions, setDiscussions] = useState([]); + + useEffect(() => { + fetchJSON('/discdag/list') + .then(({ user, discussions }) => { + setUser(user ?? null); + setDiscussions(discussions); + }); + }, []); + + if (user === null) { + return ( + <div class="menu"> + <h2>Discussions</h2> + loading... + </div> + ); + } + + return ( + <div class="menu"> + <h2>Discussions</h2> + {/*user && user.name !== 'Guest' + ? ( + <> + <span>logged in as {user.name}</span> + <button>log out</button> + </> + ) + : ( + <> + <span>not logged in</span> + <button>log in</button> + </> + )*/} + <DiscussionList discussions={discussions} user={user?.id} /> + </div> + ); +}; diff --git a/src/ui/Note.js b/src/ui/Note.js index 63905e4..16b31cb 100644 --- a/src/ui/Note.js +++ b/src/ui/Note.js @@ -25,34 +25,34 @@ section > header { display: flex; flex-direction: row; - height: 2.5rem; + height: 1.75rem; color: var(--theme-header-fg); background: var(--theme-header-bg); } section > header.small { - height: 0.75rem; + height: 0.5rem; } section > header > * { - margin: 0 0.5rem; + margin: 0 0.35rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; - line-height: 2.5rem; + line-height: 1.75rem; } section > header > .avatar { - height: 2rem; - width: 2rem; + height: 1.25rem; + width: 1.25rem; flex: 0 0 auto; margin: 0.25rem; - border-radius: 0.3rem; + border-radius: 0.2rem; - font-size: 1.5rem; + font-size: 1.25rem; font-weight: bold; - line-height: 2rem; + line-height: 1.25rem; text-align: center; text-decoration: none; background: white; @@ -66,8 +66,8 @@ section > header > .collapse { height: 1rem; width: 1rem; flex: 0 0 auto; - margin: 0.6rem 0.5rem; - border-radius: 0.3rem; + margin: 0.3rem; + border-radius: 0.2rem; border: 0.05rem solid var(--theme-header-fg); line-height: 0.8rem; @@ -124,14 +124,14 @@ section { flex-direction: column; justify-content: space-between; - width: 22rem; + width: 15rem; overflow: hidden; color: var(--theme-note-fg); background: var(--theme-note-bg); box-shadow: rgba(0,0,0, 0.7) 2px 4px 5px; - border-radius: 0.4rem; + border-radius: 0.3rem; } section.type-Tombstone { @@ -141,7 +141,7 @@ section.type-Tombstone { section > main { position: relative; - padding: 0.75rem; + padding: 0.5rem; overflow: hidden; font-family: serif; } diff --git a/src/ui/Selection.js b/src/ui/Selection.js index d6e62ab..d8dfa88 100644 --- a/src/ui/Selection.js +++ b/src/ui/Selection.js @@ -6,28 +6,31 @@ import { Note } from './Note'; css` .drawer { - background: var(--theme-note-fg); + position: fixed; + inset: 0; + top: auto; - flex: 0 0 auto; + z-index: 200; + background: var(--theme-note-fg); /* wtf webkit */ -webkit-backface-visibility: hidden; } .drawer .handle { - height: 2rem; + height: 1.5rem; margin-bottom: 1rem; } .drawer .handle button { display: block; - height: 2rem; - line-height: 2rem; + height: 1rem; + line-height: 1rem; margin: -1rem auto 0; padding: 0.25rem; background: var(--theme-note-bg); - border-radius: 0.4rem; + border-radius: 0.2rem; } .drawer .scroller { @@ -44,7 +47,7 @@ css` align-items: flex-start; gap: 1rem; - padding: 0 2rem; + padding: 0 1.5rem; } .drawer .contents > * { @@ -66,7 +69,7 @@ export const Drawer = ({ height, children }) => { class="scroller" style={{ height, - 'max-height': hidden ? '0' : height, + 'max-height': hidden ? '1rem' : height, }} > <div class="contents"> @@ -78,7 +81,7 @@ export const Drawer = ({ height, children }) => { }; export const Selection = ({ items, toggleSelected }) => ( - <Drawer height="12rem" style={{ }} > + <Drawer height="8.55rem" > {items.map((item) => ( <Note {...item} diff --git a/src/ui/index.js b/src/ui/index.js index fa831e2..f9ebf7f 100644 --- a/src/ui/index.js +++ b/src/ui/index.js @@ -1,8 +1,10 @@ import './theme'; import { Discussion } from './Discussion'; import { Selection } from './Selection'; +import { Menu } from './Menu'; export { Discussion, Selection, + Menu, }; diff --git a/src/ui/theme.js b/src/ui/theme.js index 58c8397..8977791 100644 --- a/src/ui/theme.js +++ b/src/ui/theme.js @@ -2,7 +2,6 @@ import css from './css'; css` html { - font-size: 11px; margin: 0; padding: 0; } @@ -15,6 +14,9 @@ body { --theme-note-bg-trans: rgba(238,238,238,0); --theme-note-fg-trans: rgba(54,54,54,0); --theme-header-fg: #121212; + + --theme-title-fg: #eeeeee; + --theme-title-bg: #363636; } body.darktheme { @@ -33,13 +35,5 @@ body { margin: 0; padding: 0; - width: 100vw; - height: 100vh; - overflow: hidden; - - display: flex; - flex-direction: column; - justify-content: space-around; } `; - diff --git a/webpack.config.js b/webpack.config.js index ac522d6..62ce3a6 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -27,6 +27,8 @@ module.exports = { new webpack.EnvironmentPlugin({ NODE_ENV: 'production', DEBUG: false, + PUBLIC_URL: null, + API_PREFIX: null, CORS_PREFIX: null, }), new HtmlWebpackPlugin({ |
