programmers can model workflow tasks. The system will then generate a
multi-user web service. This web service can be accessed through a browser and
used to complete these \glspl{Task}. Familiar workflow patterns like sequence,
-parallel and conditional tasks can be modelled.
+parallel and conditional tasks can be modelled. From the \gls{Task} description
+the system will generate an multi-user web application for real life tasks.
-describes workflows as \glspl{Task}. From the \gls{Task} description the system genThe system is originally designed to generate applications for real
-life tasks that have to be \todo{cont.}
+\gls{iTasks} has been shown to be useful in many fields of operation such as incident
+management~\cite{lijnse_top_2013}. Interfaces are automatically generated for
+the types of data which makes rapid development possible. However, while the
+tasks in the \gls{iTasks} system model after real life workflow tasks the
+modelling is very high level. It is difficult to connect actual tasks to the
+real tasks and let them interact. A lot of the actual tasks can be
+\emph{performed} by small \gls{IoT} devices. Nevertheless, adding such devices
+to the current system is difficult to say the least as it was not designed to
+cope with these devices.
-\gls{iTasks} has been shown to be useful in fields such as incident
-management~\cite{lijnse_top_2013}. However, there still lacks support for small
-devices to be added in the workflow. In principle such adapters can be written
-as \glspl{SDS}\footnote{Similar as to resources such as time are available in
+In the current system such adapters, in principle, can be written as
+\glspl{SDS}\footnote{Similar as to resources such as time are available in
the current \gls{iTasks} implementation} but this requires a very specific
-adapter to be written for every device and functionality. Oortgiese et al.\
-lifted \gls{iTasks} from a single server model to a distributed server
-architecture~\cite{oortgiese_distributed_2017} that is also runnable on smaller
-devices like \acrshort{ARM}. However, this is limited to fairly high
-performance devices that are equipped with high speed communication lines.
-Devices in \gls{IoT} often only have \gls{LTN} communication with low bandwidth
-and a very limited amount of processing power. \glspl{mTask} will bridge this
-gap. It can run on devices as small as Arduino microcontrollers and operates
-via the same paradigms as regular \glspl{Task}. The \glspl{mTask} have access
-to \glspl{SDS} and can run small imperative programs.
+adapter to be written for every device and functionality. Moreover, this does
+not allow you to build in logic into the device. A lot of the small \gls{IoT}
+devices have limited processing power but can still contain decision making.
+Oortgiese et al.\ lifted \gls{iTasks} from a single server model to a
+distributed server architecture~\cite{oortgiese_distributed_2017} that is also
+runnable on smaller devices like \acrshort{ARM}. However, this is limited to
+fairly high performance devices that are equipped with high speed communication
+lines. Devices in \gls{IoT} often only have \gls{LTN} communication with low
+bandwidth and a very limited amount of processing power and are therefore not
+suitable to run an entire \gls{iTasks} core.
+
+\glspl{mTask} will bridge this gap by introducing a new communication protocol,
+device server application and \glspl{Task} synchronizing the formers.
+The system can run on devices as small as Arduino microcontrollers and
+operates via the same paradigms and patterns as regular \glspl{Task}.
+\glspl{mTask} can run small imperative programs written in a \gls{EDSL} and
+have access to \glspl{SDS}.
\section{Document structure}
The structure of the thesis is as follows.
and discusses future research.
Appendix~\ref{app:communication-protocol} shows the concrete protocol used for
communicating between the server and client.
+Appendix~\ref{app:device-interface} shows the concrete interface for the
+devices.
\section{\acrlong{TOP}}
\gls{TOP} is a recent new programming paradigm implemented as
-\gls{iTasks}~\cite{achten_introduction_2015} in
-the pure lazy functional language \gls{Clean}
+\gls{iTasks}\cite{achten_introduction_2015} in the pure lazy functional
+language \gls{Clean}\cite{brus_cleanlanguage_1987}. \gls{iTasks} is a
+\gls{EDSL} to model workflow tasks in the broadest sense. A \CI{Task} is just
+a function that, given some state, returns the observable value of the
+\CI{TaskValue}. A simple example is shown in Listing~\ref{lst:taskex}
+accompanied with Figure~\ref{fig:taskex1},~\ref{fig:taskex2} and~%
+\ref{fig:taskex3}.
+
+\begin{lstlisting}[language=Clean,label={lst:taskex},%
+ caption={An example \gls{Task} for entering a name}]
+:: Name = { firstname :: String
+ , lastname :: String
+ }
+
+derive class iTask Name
+
+enterInformation :: String [EnterOption m] -> (Task m) | iTask m
+
+enterName :: Task Name
+enterName = enterInformation "Enter your name" []
+\end{lstlisting}
-\todo{Main terms}
-The lazy functional programming language based on graph rewriting
-\gls{Clean}~\cite{brus_cleanlanguage_1987}
+\begin{figure}[H]
+ \begin{subfigure}{.25\textwidth}
+ \centering
+ \includegraphics[width=.9\linewidth]{taskex1}
+ \caption{Initial interface}\label{fig:taskex1}
+ \end{subfigure}
+ \begin{subfigure}{.25\textwidth}
+ \centering
+ \includegraphics[width=.9\linewidth]{taskex2}
+ \caption{Incomplete entrance}\label{fig:taskex2}
+ \end{subfigure}
+ \begin{subfigure}{.25\textwidth}
+ \centering
+ \includegraphics[width=.9\linewidth]{taskex3}
+ \caption{Complete entry}\label{fig:taskex3}
+ \end{subfigure}
+ \caption{Example of a generated user interface}
+\end{figure}
\section{\acrlong{EDSL}s}
\glspl{mTask} are expressed in a class based shallowly embedded \gls{EDSL}.
\usepackage{subcaption} % Subcaptions
\usepackage{lipsum} % dummy text
\usepackage{listings} % source code
+\usepackage{float} % floating images
+
+\graphicspath{{img/}}
\urlstyle{same}
\hypersetup{%
pdfkeywords={TOP,iTasks,Clean,Function Programming,IoT},
hidelinks=true
}
+
\pdfstringdefDisableCommands{%
\def\acrlong#1{}%
\def\acrshort#1{}%
{.&&.}{{\texttt{.\&\&.}}}4
}
+\newcommand{\CI}[1]{\lstinline[language=Clean]|#1|}
+
\lstset{%
breakatwhitespace=false, % sets if automatic breaks should only happen at whitespace
breaklines=true, % sets automatic line breaking