Git Product home page Git Product logo

multihack-web's People

Contributors

kifhan avatar parasrah avatar rationalcoding avatar t-mullen avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

multihack-web's Issues

No way to create files/folders

This is a regression from V1.

Need to decide the best way to implement this. V1's +/- signs were difficult to use and confusing.

Add/remove syntax support

Currently comes packaged with XML, CSS, and Javascript support.

User should be able to add/remove languages, and these Codemirror mixins should be loaded/deleted dynamically.

Multihack should NOT just be for web languages.

Keyboard shortcuts

Add keyboard shortcuts to submit with enter (specifically when joining the room)

Internationalization

  • Code changes to support native internationalization.
  • API to add languages manually.

Embed mode

Take advantage of oEmbed and allow embedding Multihack in Slack and such.

Need to hide topbar, collapse file tree and skip upload, room, nickname.

Move to loose mesh model

P2P network is fully connected at the moment. This won't scale well to 10+ users.

A structured loose mesh is probably the best option.

yfs and FileSystem needs to be changed to support rename file and directory.

Description

MultiHack use this way to maintain files.

self.yfs.set(filePath, Y.Text)

but I found out this way you get really messy when you try to rename file or directory.

Because of this problem: Cannot change property's key name on y-map. You must delete obj from Y-map and insert again. But when you do that (delete and insert) you cannot use exist Y data type object (y-text, y-array, etc) because Y-Map set takes only TypeDefinition and creates new data type object.

Solution

My Solution is use two Y-map data.

filesystem_index: 'Map',
filesystem_nodes: 'Map'

Both filesystem_index and filesystem_nodes use randomly generated contentID as a key.
One contentID can access both file meta information (filesystem_index) and file content (filesystem_nodes).

Meta data looks like this.

self.yFSIndex.set(contentID, {
  name: filename,
  type: filetype,
  contentID: contentID,
  replydbID: replydbID,
  parentPath: parentPath
})

Feel free to check my implementation on Rellat.
I also fix few things on filesystem.js and main file (index.js).
One tricky thing is when you use _buildPath you can't guarantee to get right meta data at right timing.
So I made this sideway.

self.execWhenTargetSet = function (target, f) {
    function ft () {
      if (target) f()
      else setTimeout(ft, 50)
    }
    ft()
  }

I'm not sure this is best way but this works pretty well.

Amazing Project/Is it ok to use as an alpha

Multihack is an amazing project !!!!
Is the master branch ok as an alpha....I m part of a team of developers that would like to install and begin using

Thanks for all of the amazing Magic !!!

Add preferences

  • Themes
  • Toggle Codemirror Plugins
  • Default room/nickname

Should save to localStorage.

Accessibility

Issue for general accessibility testing. Should satisfy the W3C's guidelines, or above.

If you require an accessibility feature, or have any feedback on the topic, please comment here.

Video chat

Not sure how conducive this is to a programming tool. Voice chat seems better suited.

Backlog until requested.

Add quick tabs

Tabs at top of editor to quickly switch between recent documents

Crashes on larger projects

Probably too many DOM nodes to start with, memory issue later.

Need to take a different approach to the virtual filesystem if we want to support much larger projects.

Multihack Logo

I dont know if this is the right place to ask, but does Mutlihack and the editor plugins need an own logo? Currently there is this one with the two cricling arrows in brackets. It looks boring and a lot like a refresh button.

I could help, I even have some ideas.
Are you interested and if so, what do you want it to look like?

Make Multihack CCI compliant

So far Multihack has managed fine with optimistic edits (due to low latency, not many consecutive users), but eventually we should move to a proper CCI model.

To be a provably correct realtime collab system, Multihack must meet the following criteria:

  1. Convergence: All users eventually have the same set of documents.
  2. Casuality Preservation: All edits are applied in the same order they are generated.
  3. Intention Preservation: The actual effect of any edit is the same as the intended effect.

Thanks @kifhan for originally pointing out that there's a bit more theory behind this than I originally thought.

Add Indentation Guide

Is it possible to add the option to have an indentation guide like this?
I find it structures the code and gives better overview.

Prompt user to fetch code after joining

screenshot_2017-04-23_08-35-00_multihack_bug

How it happened.

  1. Client 1 connect to the room.
  2. Client 1 creates code file and start edit it. Adds some words.
  3. Client 2 connect to the same room. But Client 2 see no file in the room.
  4. Client 1 Adds more words.
  5. Now Client 2 see the file. And able to edit it. But see contents only after 4.
  6. Client 2 starts edit, but contents is not fully synced so line number is mixed, then it overwrites contents on 2.

I believe it's a problem about Operational_transformation.

Offline mode

Should behave normally until connection is reestablished.

Electron desktop app

It could be useful to have this fantastic tool as an Electron app, where users could choose to synchronize the browser file system with the local file system.

They could then use their favorite editor and would not require the files to pass through a zip archive. Instead they could drag in a folder (or point to one) and have the filesystem initialized.

It could even allow you to set up your own "private code server", similar to Coda - although I'm not sure how smart/easy that would be security wise.

Deploy and audio calls overload websocket resources.

Joining an audio call with a large number of people (less than the limit of 10), and deploying a HH server will fail due.

This is less then what the maximum number of connections should be, so some cleanup must be incorrect.

Add help tooltips

To explain things that might not be 100% clear (ie, deploy button)

Lazily fetch code

Instead of fetching all of the code, the user should be able to:

  • See the entire directory structure on joining.
  • Fetch individual files when opening them.
  • Still have the option to fetch the whole project.

More IO

  • WebkitDirectory
  • Individual file upload
  • Download from Github (for mobile)
  • Drag and drop

Theme support

Server owners (and possibly users) should be able to change color, syntax themes, etc.

Support for drop-in themes would be ideal.

Move deletion button

It's too easy to misclick and delete a whole folder.

Thanks @mbosnjak01 for beta testing.

Rebranding for Beta release.

  • New name. So far "Relay" is the best idea.
  • Colour palette and UI consistency.
  • Logo. (Thanks @tweakimp)
  • Tagline, product description, important feature list, etc.
  • Documentation improvements.

E2E encryption

Everything is encrypted with WebRTC and WSS, but the server can see the key exchanges in the WebRTC case and the content in the WSS case.

Would be neat if you could specify a shared key along with your room and have everything encrypted.

Backlog because web crypto is useless without something like hyperboot (if even then), and that would need to be opt-in and so more complicated.

Basically, if you trust the server, you are fine and this isn't needed.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.