thesamovar / notpaper

GNU General Public License v3.0
20 stars 2 forks source link

Concrete plan #15

Closed thesamovar closed 2 years ago

thesamovar commented 3 years ago

OK, I've been thinking about what are the core elements for this idea, and I think I've got a fairly decent idea now.

Firstly, one of the key ideas is about bringing relevant information into automatically without you having to do anything. So, in a scientific paper that would be figures or tables, but you could also imagine the same thing in another texts. In an art book you might want to be comparing two images. In a fantasy novel, at moments when characters are travelling you might want to show the map. When a character you haven't seen for a while comes in, you might want to show a family tree, etc.

Second key idea is things like definitions, citations, footnotes, etc. That is, a short bit of additional text. These can be handled as pop-ups better than appearing in the 'related information' popup, although both could be options.

Third idea is non-linear navigation. If you have links between one part of a document and another, you want to be able to follow that link and keep your trains of thought active and visible so you can navigate back and forth. For this idea, I'm thinking that our model could be something like the "Tree Style Tab" add-on for Firefox. It shows all your tabs in a tree, where when you open a new tab from an existing one, it's a descendant in the tree. This could be built into the page.

Finally, you might want to explicitly generate backlinks as well as forward links.

So I'm imagining a view with two large columns and one narrow column. The narrow column would be the navigation. The tree view could potentially be one of several views here - keep it flexible. Then you have a current text column, and a related information column. These should all be resizable and various features of them customisable.

Thoughts?

rorybyrne commented 3 years ago

Hey I use Tree Style Tab! Funny coincidence.

I like all of this, the idea of applying this to a novel is really interesting. I watched a film yesterday on Amazon Prime (Manchester By The Sea - highly recommended!), and I noticed that when you pause the film the overlay shows you the bio for the actors who are on-screen, as well as trivia related to that specific scene. It even shows you which song from the soundtrack is currently playing. I imagine that must be backed by a system not dissimilar to ours, probably based on existing knowledge graph technology that Amazon has built for collaborative filtering and other use-cases.

One thing comes to mind: if the front-end experience is going to be varied across different media (research papers, novels, etc.) then I think it becomes even more important for us to try keep the UI/presentation separated from the underlying graph representation. Being able to build new UIs on top of an abstract foundation is really important, and in my experience it will actually (counter-intuitively) save us time.

That gets me thinking: could we, instead of forcing a specific UI on our users, provide a powerful set of primitives that others could use to create new experiences. That could be little UI widgets that you can drag/drop, or React components which you can import into a new React app and use, or even just a really good Javascript (e.g.) library for interacting with a graph-representation of a paper/book/whatever. At the end of the day I feel like the underlying goal here is to break free of prescribed structures in media, so if we just prescribe our own structure instead then we've just started a new cycle with the same mistake.

I'm just thinking out loud at this point, but an idea I've had for a while is that I should be able to "Bring My Own GUI" to plug into various systems, like for example Github or Twitter. It would be a UI that can consume basically any input data and turn it into a UI that always looks similar no matter what data you plug into it. I suspect that in the future we won't have UIs that are so tightly-coupled to data, but instead one of the two will be able to dynamically adapt to the other. We may look back on static data-and-UI systems the way we look at punchcards or 70s minicomputer terminals now.

thesamovar commented 3 years ago

I agree with the idea of a set of powerful primitives! I think that's exactly the right approach.

I'm currently learning how to use things like npm, webpack, etc. Tinkering around with some Vaadin stuff for layout (I'm sure there are other, better choices, but this is the one I found):

https://vaadin.com/components/vaadin-app-layout/

and

https://vaadin.com/components/vaadin-split-layout

rorybyrne commented 3 years ago

Webpack can be a bit of a nightmare, just a warning! Webpack is also a part of the React setup that I showed you too by the way, but it's hidden behind the scenes so you don't have to configure it manually.

Keep me updated, and let me know if there's anything I can help with!

thesamovar commented 3 years ago

Thanks! So far reasonably straightforward.

thesamovar commented 2 years ago

Closing because I have a better idea.