sanchezcarlosjr / evanotebook

EvaNotebook - A P2P Browser-Based Computational Notebook for Real Systems with IA.
https://notebook.sanchezcarlosjr.com/
MIT License
24 stars 8 forks source link

Questions! #2

Closed pranitsh closed 9 months ago

pranitsh commented 9 months ago

Hey,

I've been looking to contribute, and couldn't figure out a couple of things. I'd really appreciate you answering a couple of questions related to my future contribution so as to ensure that my future pull request can be merged.

  1. What is the idea behind topic and peer? And which relates to uuid (because I saw cases of both using uuid)? Admittedly, this question is probably on the dumber side since I have yet to spend a decent number of hours understanding editorjs. For my plan, I want to build an import and export toolkit for markdown, html, text, docx, github through the unified library. I'm currently testing using the injector for database via specifically creating random id, topic, and createdBy/lastEditedBy and inadvertendly random peers and topics. This approach is probably not correct, but using the Shell class seems even messier, since I want to add to the current file or specified files alongside sending a thousand CustomEvents seems like a decent way to crash. Any thoughts on how to approach this?
  2. What is the purpose of the form component in src/app/notebook/form? I had a couple of guesses, such as its relation to localhost:3000/form or the use of jsonforms (which I would appreciate you didn't depend on since it is old and the main dependency preventing updating Angular to 16), but I don't even know the purpose of these two parts either. I plan to remove this component in my pull request, if it is okay? Later, I plan to update to Angular 16.
  3. I've seen similar projects, including Standard Note, and believe the use of componentization is going to be soon necessary. You have a process worker, a shell process worker, a database with SQL (we really need SQL), and dozens of components related to coding. Would you be open to me fixing up the componentization? I would appreciate being added as a contributor in such a case.
  4. Lastly, I plan to use a devcontainer folder instead of .gitpod.yml, would that be okay?
  5. There is also many, many unnecessary // @ts-ignore. I plan to add a .eslintrc file and fix up the code quality. Would that be alright?

Thanks for answering my questions, and I hope my contributions are successful.

sanchezcarlosjr commented 9 months ago

Hello @pranitsh,

  1. Topic and Peer UUIDs refer to overlay network identifiers, allowing users to distribute their content in a decentralized manner. The topic represents the notebook identifier, while the peer signifies the tab identifier. When I started the project, the goal of the Shell was to schedule the WebWorkers. However, I later realized that all languages face common tasks, prompting me to provide them with a common event-driven architecture. You're correct; browsers are not equipped to support thousands of CustomEvents efficiently. An alternative for communication between the main thread and WebWorkers is using shared memory or a filesystem, rather than message passing.

2 .You're right; we can remove JSONForms to migrate to Angular 16. I've realized that coupling with certain libraries wasn't the best approach. However, I had to make a decision to get the job done, especially since those libraries are incompatible with CDNs.

  1. Yes. I realized that creating a mono repo with different npm packages would be a good idea.

  2. It's okay. I was using Gitpod, but now I have a good computer to handle the job.

  3. It's okay to me.

P.S. I'm migrating to React with BlockNote but not with TypeCell. Additionally, I'm writing a paper about the architecture, decisions, and the problems that arise with this kind of software. Would you like to read a draft?

pranitsh commented 9 months ago

I would love to read the paper behind this. Admittedly, most papars fly above my head, but I'm still impressed by the comprehensivenees of your work. It significantly surprises anything else I've seen in this space, especially in regard to CRDTs, IPFS, and the necessitated architectural consistency.

If possible, could you clarify the purpose of the Form component and localhost:3000?

Thank you for answering my deluge of questions. This should be about it.

sanchezcarlosjr commented 9 months ago

The purpose of the Form component and other components was to provide reactive web components to developers working with WebWorkers, as they don't have direct access to the DOM.

We have a Discord channel where we've published the draft. You can find it at https://discord.gg/us9nYvSyM6.

pranitsh commented 9 months ago

Thank you!