\section{Summary \& Outlook}
\label{sec:conclusion}

Some special events are intercepted by the use of \emph{ContextJS}. These events are transformed into a command and send through \emph{WebSockets} to the server, which saves the commands in the key/value store \emph{Redis}. Via this mechanism nearly every Wiki page can be made collaborative.

At this stage of the project users can collaboratively work on a wikipage and add new morphs or drag them around, or even complex actions like adding new journal entries. All these actions are synchronized between the server and all users. Each user can even see the mouse cursors of the other users.

\paragraph{General Outlook} % (fold)
\label{par:general_outlook}

In the future there will be a client side time slider, which enables each user to travel back in time, via undoing the saved commands. The user name next to each users mouse will be the login name and not an anonymously generated one. Near the time slider there can be a button or checkbox to easily switch the collaboration on and off. These two user interaction elements can be grouped to a preference pane. If one user saves the Wiki page, this could be intercepted and every command saved on the server before this event can be deleted.

In the future there have to be also a feature to suppress the synchronization of some events. At the moment the menus from every user are synchronized to every other user, which is not the preferred behavior.

% paragraph general_outlook (end)

\paragraph{Conflict Management} % (fold)
\label{par:conflict_management}

The conflict management could be extended to Operational Transformations, because in our solution it depends on the action taken by the users, which user will win. For example, if two users are positioning the same morph, the last command that arrives at the server will win. This is because the position of a morph is absolute and so the last value will be used. An example in which the first user wins is, if one user deletes a morph before another can change the size of that morph. The deletion will invalidate the resizing command of that morph.

Consecutive projects which will implement a better conflict management are welcome.

% paragraph conflict_management (end)

\paragraph{Clock synchronization} % (fold)
\label{par:clock_synchronization}

Events which are not originated by a user action, like the tick of a \verb+ClockMorph+ are produced by every client nearly at the same time. These multiple events could also collide with each other, if the users are in different time zones. There are multiple solutions to solve these kind of conflicts, one solution is that only one client produces these special events. But the problem with different time zones is not considered with this solution. Not synchronizing these kind of events would be another result to this problem.

% paragraph clock_synchronization (end)
