updated READMEs
This commit is contained in:
parent
c6ca102bce
commit
716fbd40d8
18
README.md
18
README.md
@ -34,21 +34,23 @@ My Bachelor Thesis project aim was to develop a P2P OT Framework that enables co
|
|||||||
[Intention Preservation](http://www3.ntu.edu.sg/home/czsun/projects/otfaq/#intentionPreservation).
|
[Intention Preservation](http://www3.ntu.edu.sg/home/czsun/projects/otfaq/#intentionPreservation).
|
||||||
After some time I realized that OT has significant drawbacks in P2P environments.
|
After some time I realized that OT has significant drawbacks in P2P environments.
|
||||||
|
|
||||||
With my gained experiences I came up with a new approach. I named it Yata - Yet Another Transformation Approach.
|
With my gained experiences I came up with a new approach. I named it *Yata* - Yet Another Transformation Approach.
|
||||||
It enables concurrent editing with the following space and time properties:
|
It enables concurrent editing with the following space and time properties:
|
||||||
* Time complexity: O(S), whereby S is the number of operations that are inserted concurrently at the same position. This means that my approach does not transform against operations that happen on other positions.
|
* Time complexity: O(S), whereby S is the number of operations that are inserted concurrently at the same position (no transformation against operations that happen on different positions).
|
||||||
* Space complexity = O(|Document|), whereby |Document| is the size of the shared document. Depending on the used data structure, Yata may needs 4*|Document| of space.
|
* Space complexity = O(|Document|), whereby |Document| is the size of the shared document.
|
||||||
|
|
||||||
This means that my approach beats all OT time complexities. Furthermore, it is possible to make a very strict definition of Intention Preservation, and I was able to
|
This means that my approach beats all OT time complexities. Furthermore, Yatta has a very strict definition of Intention Preservation, and I was able to
|
||||||
show that it is never violated.
|
show that it is never violated.
|
||||||
|
|
||||||
Another advantage of my approach is that propagated messages are very small.
|
Another advantage of Yata is that propagated messages are very small.
|
||||||
Background: In real-time P2P OT algorithms you have to send a state-vector with each message that defines the state of the History Buffer
|
Background: In real-time P2P OT algorithms you have to send a state-vector with each message that defines the state of the History Buffer
|
||||||
on which the operation was created. This is not necessary in Yata.
|
on which the operation was created. This is not necessary in Yata.
|
||||||
|
|
||||||
One downside is that the History Buffer holds at least as many operations as there are characters in the document.
|
The downside of this approach is that the History Buffer holds at least as many operations as there are characters in the document.
|
||||||
In contrast, an OT algorithm can have an empty History Buffer while the document size is very big.
|
In contrast, an OT algorithm can have an empty History Buffer while the document size is very big.
|
||||||
|
|
||||||
|
Eventually (after my thesis), I will publish more information about Yata.
|
||||||
|
|
||||||
So, how did I come up with the name for the implementation (Yatta! is not Yata)?
|
So, how did I come up with the name for the implementation (Yatta! is not Yata)?
|
||||||
Yatta! means "I did it!" in Japanese. You scream it when you accomplish something (for proper application I refer to the Yatta-man in [Heroes](http://heroeswiki.com/Yatta!)).
|
Yatta! means "I did it!" in Japanese. You scream it when you accomplish something (for proper application I refer to the Yatta-man in [Heroes](http://heroeswiki.com/Yatta!)).
|
||||||
There is also this awesome video on the Internet that will change your life [Yatta](https://www.youtube.com/watch?v=kL5DDSglM_s).
|
There is also this awesome video on the Internet that will change your life [Yatta](https://www.youtube.com/watch?v=kL5DDSglM_s).
|
||||||
@ -57,6 +59,10 @@ There is also this awesome video on the Internet that will change your life [Yat
|
|||||||
Yatta! is still in an early development phase. Don't expect that everything is working fine.
|
Yatta! is still in an early development phase. Don't expect that everything is working fine.
|
||||||
But I would become really motivated if you give me some feedback ([github](https://github.com/DadaMonad/Yatta/issues) or mail).
|
But I would become really motivated if you give me some feedback ([github](https://github.com/DadaMonad/Yatta/issues) or mail).
|
||||||
|
|
||||||
|
## Current Issues
|
||||||
|
* Garbage Collection
|
||||||
|
* XML support
|
||||||
|
|
||||||
# Support
|
# Support
|
||||||
Please report any issues to the [Github issue page](https://github.com/DadaMonad/Yatta/issues)!
|
Please report any issues to the [Github issue page](https://github.com/DadaMonad/Yatta/issues)!
|
||||||
|
|
||||||
|
@ -25,33 +25,45 @@ it will be instantaneously shared with all the other collaborators.
|
|||||||
|
|
||||||
```js
|
```js
|
||||||
yatta = new Y.TextYatta(user_id, Connector);
|
yatta = new Y.TextYatta(user_id, Connector);
|
||||||
|
```
|
||||||
|
|
||||||
/*
|
|
||||||
Get the url of this frame. If it has a url-encoded parameter
|
Get the url of this frame. If it has a url-encoded parameter
|
||||||
we will connect to the foreign peer.
|
we will connect to the foreign peer.
|
||||||
*/
|
|
||||||
|
|
||||||
|
```js
|
||||||
var url = window.location.href;
|
var url = window.location.href;
|
||||||
var peer_id = location.search
|
var peer_id = location.search
|
||||||
var url = url.substring(0,-peer_id.length);
|
var url = url.substring(0,-peer_id.length);
|
||||||
peer_id = peer_id.substring(1);
|
peer_id = peer_id.substring(1);
|
||||||
|
```
|
||||||
|
|
||||||
/*
|
|
||||||
Set the shareable link.
|
Set the shareable link.
|
||||||
*/
|
|
||||||
|
|
||||||
|
```js
|
||||||
document.getElementById("peer_link").setAttribute("href",url+"?"+user_id);
|
document.getElementById("peer_link").setAttribute("href",url+"?"+user_id);
|
||||||
|
```
|
||||||
|
|
||||||
/*
|
|
||||||
Connect to other peer.
|
Connect to other peer.
|
||||||
*/
|
|
||||||
|
|
||||||
|
```js
|
||||||
if (peer_id.length > 0){
|
if (peer_id.length > 0){
|
||||||
yatta.connector.connectToPeer(peer_id);
|
yatta.connector.connectToPeer(peer_id);
|
||||||
}
|
}
|
||||||
|
```
|
||||||
|
|
||||||
/*
|
|
||||||
Bind yatta to the textfield.
|
|
||||||
|
|
||||||
The .bind property is a method of the Word class. You can also use it with all the other Frameworks in Yatta (e.g. Json).
|
Bind yatta to the textfield.
|
||||||
*/
|
|
||||||
|
The .bind property is a method of the Word class. You can also use it with all the other Frameworks in Yatta (e.g. Json).
|
||||||
|
|
||||||
|
|
||||||
|
```js
|
||||||
var textbox = document.getElementById("textfield");
|
var textbox = document.getElementById("textfield");
|
||||||
yatta.bind(textbox);
|
yatta.bind(textbox);
|
||||||
});
|
});
|
||||||
|
@ -22,7 +22,7 @@ function init(){
|
|||||||
*/
|
*/
|
||||||
yatta = new Y.TextYatta(user_id, Connector);
|
yatta = new Y.TextYatta(user_id, Connector);
|
||||||
|
|
||||||
/*
|
/**
|
||||||
Get the url of this frame. If it has a url-encoded parameter
|
Get the url of this frame. If it has a url-encoded parameter
|
||||||
we will connect to the foreign peer.
|
we will connect to the foreign peer.
|
||||||
*/
|
*/
|
||||||
@ -31,19 +31,19 @@ function init(){
|
|||||||
var url = url.substring(0,-peer_id.length);
|
var url = url.substring(0,-peer_id.length);
|
||||||
peer_id = peer_id.substring(1);
|
peer_id = peer_id.substring(1);
|
||||||
|
|
||||||
/*
|
/**
|
||||||
Set the shareable link.
|
Set the shareable link.
|
||||||
*/
|
*/
|
||||||
document.getElementById("peer_link").setAttribute("href",url+"?"+user_id);
|
document.getElementById("peer_link").setAttribute("href",url+"?"+user_id);
|
||||||
|
|
||||||
/*
|
/**
|
||||||
Connect to other peer.
|
Connect to other peer.
|
||||||
*/
|
*/
|
||||||
if (peer_id.length > 0){
|
if (peer_id.length > 0){
|
||||||
yatta.connector.connectToPeer(peer_id);
|
yatta.connector.connectToPeer(peer_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
Bind yatta to the textfield.
|
Bind yatta to the textfield.
|
||||||
|
|
||||||
The .bind property is a method of the Word class. You can also use it with all the other Frameworks in Yatta (e.g. Json).
|
The .bind property is a method of the Word class. You can also use it with all the other Frameworks in Yatta (e.g. Json).
|
||||||
|
Loading…
x
Reference in New Issue
Block a user