Research and Development 1/^Archief/2009-2010/05/Pilot

Uit Werkplaats
Ga naar: navigatie, zoeken
Bagjoke.jpg

Research and Development 1

Patrick van Bommel
Sjaak Smetsers


 © comments



Pilot onderzoek

Hier volgt een beschrijving van de pilot.

Natuurlijke taal

Omschrijving van het Wave Client Protocol in natuurlijke taal is hier te vinden

Formalisatie onder natuurlijke taal

Hier volgt onze formalisatie in natuurlijke taal.

Data model

Wave := Verzameling van Wavelets
Waves hebben unieke id in het domein van de wereld

kinderwave := Er is een wave n en m waarvoor geldt m is een kind van n.
vaderwave:= Er is een wave n en m waarvoor geldt m is een vader van n := n is een kind van m. 
Client := Representeert een participant in de participant list, die een service bij de server aanvraagt.
Server := De server bied een service aan zijn clients.

Wavelets zijn verzameling van documenten en één participantlist.
Wavelets hebben unieke id in het domein van zijn wave
Wavelets zijn het domein van transformations

Participant worden geïdentificeerd met email string (waarop beperkingen van emailadressen gelden)
Participants zijn gebruikers, groepen van participants, of een robot.
Groep van participants bestaat uit verzameling van participants, die ieder dezelfde eigenschappen voor participant hebben.
Participants mogen maar 1 keer voorkomen in 1 participantlist

Robots zijn gebruikers met dezelfde rechten als gebruikers, maar worden buiten perspectief gelaten.

Documents hebben unieke id in het domein van zijn wavelet.
Documents bestaan uit XML elementen, die zijn opgemaakt met stijlelementen die niet in het XML zelf staan, maar daar naar verwijzen. (ranged key-value pairs)
Document zijn: tekstdocumenten (blips), datadocuments (overige documenten)
Wavelets zijn ook datadocumenten.

Wave view is de verzameling van wavelets in 1 wave waartoe 1 bepaalde gebruiker toegang tot heeft.
Een gebruiker krijgt nooit een kopie van de hele Wave, maar alleen zijn eigen Wave view.

Sharing model

Iedere participant krijgt een eigen wavelet per Wave, met zichzelf als enige participant, waarin participant-gerelateerde informatie bijgehouden wordt. Deze wavelet is een datawavelet die "user-data" wavelet heet.

Private reply is 1 wavelet waarvan de participantlist een subset is van de participantlist van de vaderwavelet

Client-Server protocol

Operations zijn functies die een wavelet verwachten als parameter, en ook een wavelet teruggeven.
De toestand van een Wavelet is geheel gedefinieerd door een lijst van uitgevoerde operations.

Bij uitgevoerde operations, worden de operaties op de uitgevoerde wavelets uitgewisseld tussen server en client. Server propageert deze verder naar andere clients en/of servers.
Operaties worden gegroepeerd in groepjes die Delta's heten. Dit zijn de groepjes die uitgewisseld worden tussen client en server.


Alle wavelets worden beheerd door de server van de Participant die de Wavelet heeft aangemaakt. Deze server heet de Master Server.
Alle uitgevoerde operations door deelnemers van de Participantlist , worden doorgestuurd en verwerkt naar en door de Master Server. 
Servers van participants uit de participantlist, anders dan participants die verbinden met de Master Server, dienen als knooppunt op de weg van operaties naar de Master Server.
Deze servers slaan alle operaties op, en sturen alle ontvangen operaties door naar alle clients van participants uit de participantlist van de Wavelet waarop de operaties uitgevoerd worden.

Participants bezitten alleen hun eigen Wave View. Servers bezitten alleen de Wave views die hun participanten mogen ontvangen. De Master Server bezit de Wave View die de hele Wavelet omvat.
Clients en Server passion hun operations toe op hun Wave View.

Operation Sequencing

Operational Transformation (OT) is een functie die twee verschillende operaties omzet naar de samenstelling van die operaties, met betrekking tot de context waarin de operaties plaatsvinden.
OT vereist dat verstuurde operaties geordend zijn op een bijgegeven versienummer.
Servers en ook alleen servers, kunnen nieuwe versienummers aan Wavelets toekennen.
Een versienummer is een integer die bij 0 begint en die opgehoogd wordt met 1 wanneer de server een delta bevestigd.
Clients mogen geen delta's versturen voordat de server de vorig verstuurde delta bevestigd heeft. 
Client en server weten dat hun Wavelet dezelfde state heeft, als hun versienummer en History Hash overeenkomen.
Een History Hash is "a rolling hash over the sequence of operations between version zero and the provided version number."

Opening a Wavelet

Een participant uit de participantlijst kan pas operations uitvoeren, als de wavelet in combinatie met de betreffende participant, de state "open"  heeft.
Als een participant een wavelet wil openen, moet hij een Open Request naar de Server sturen (Master server?!)
Een Open Request bevat de Wave ID en de Wavelet ID van de Wavelet die hij wil bewerken. (Dit kan toch onmogelijk alles zijn?)
Als de betreffende server een Open Request ontvangt (onder welke voorwaarden??!) stuurt hij de client een Snapshot en zijn meest recente History Hash
Een Snapshot is "The serialized state of the wavelet".

En een wavelet sluiten?? Hoeveel Wavelets mogen tegelijk Open zijn, met betrekking tot één bepaalde Participant?

Communicating changes to the client

Als een server operaties heeft ontvangen van een bron, stuurt hij een reeks gegevens door naar alle clients van participanten uit de participantlist, die op dat moment met de server verbonden zijn.
(En wat moeten we met clients die niet verbonden zijn, en later nog zullen verbinden?)
Deze reeks bestaat uit een Delta, het huidige Version Number en de History Hash tot dat moment. (Nogmaals, dit kan toch niet alles zijn?)
(Wat als de cliënt niet gevonden kan worden, of erger?)

Recovery

Als client-server communicatie faalt, de client en server moeten het eens worden over een gemeenschappelijke staat van de Wavelet, wanneer communicatie hervat wordt. (Wat is falen in deze context? Hoe faal ik ? Zijn er meerdere Faal States?)
De client heropend dan de Wavelet (Volgens bovenstaand stramien neem ik aan? Zie Opening a Wavelet zo ja) en stuurt een lijst met alle history hashes die de client tot dat moment van de server ontvangen heeft., de Wave ID én de Wavelet ID (Is dit wel nodig, want als je de Wavelet opend, stuur je deze informatie toch ook mee?)
Als de server bovenstaande informatie ontvangen, verwerkt en goedgekeurd heeft, stuurt hij een lijst met "Last known (by the server) history hash selected from the list of history hashes sent bij the client(1), the most recent History Hash on the Wavelet(2), and a sequence of delta's" (Ja, ècht waar! )
Als History Hash (1) gelijk is aan History Hash (2), dan mag verdere communicatie hervat worden zonder extra herstel.
Als History Hash (1) niet gelijk is aan History Hash (2) óf de server herkent de door de client geleverde History Hashes niet, (Betekend dat niet ongeveer hetzelfde?) dan zijn de server en client het niet eens geworden over een gemeenschappelijke staat van de Wavelet. In dat geval moet de client de huidige staat van de Wavelet van de server ophalen en zijn oude kopie van de Wavelet negeren (Client kan eventueel later zelf nog iets doen aan recovery met deze state). 

Het Google Wave protocol (Welke?) bevat "optimalisaties" aan dit stukje Recovery, dat het aantal keren volledig de Wavelet herladen verlaagd, maar deze vallen buiten de scope van dit document.

Overige vragen

  1. Moeten we Access Control hier nog in betrekken?
  2. What else?

Formalisatie Wave-Client Protocol

Hier volgt een beschrijving van het Wave-Client protocol in predicaatlogica.

NOTE: wat hieronder staat klopt nog voor geen meter.

Een van de mogelijke manieren om met formele tekens te werken in de wiki is door middel van HTML character entities. Dit werkt als volgt: je typt een ampersand (&) gevolgd door de entiteit-naam en sluit weer af met een puntkomma (;). Voor een lijst van veelgebruikte formele logica tekens, zie hier


Wave Data Model

Wave W 
Verzameling wavelets.
Wavelet w 
Verzameling Documenten. w ∈ W.
Document d 
Een bestand of een blip. d ∈ w. Functies bestand(d) en blip(d) om onderscheid te maken.

Sharing Model

asdfd

Operations

Operation o 
Een functie die de verzameling wavelets aan wavelets mapt. ƒ : w → w

Authenticatie

  • Client - server verbinding via ssl
  • Methode van initiële authenticatie:
    • Server verstuurt een willekeurige string en onthoudt deze.
    • Client versleutelt deze string met het wachtwoord.
    • Client stuurt versleutelde string terug.
    • Server ontsleutelt deze string weer terug met het wachtwoord.
    • Vergelijk deze strings.

Lijst veelgebruikte logicatekens

Logicatekens
Karakter Tekst Notitie
∧
∨ : ∨
→ Right Arrow
↔ Horizontal Arrow
∈
∃
∀
ƒ ƒ Function
ℜ Real Number
∉ Not In
¬ ¬ Not