%&presentation
\begin{document}
\begin{frame}
	\maketitle
\end{frame}

\begin{frame}
	\tableofcontents
\end{frame}

\section{Introduction}
\subsection{IoT}
\begin{frame}
	\frametitle{Internet of Things (IoT)}
	\begin{itemize}[<+->]
		\item Early days, RFID
		\item Devices: Arduino, ESP8266, Raspberry pi\ldots
		\item Peripherals: GPS, Sensors, Actuators\ldots
		\item Wearables: Smart clothing, smart watches\ldots
		\item Connectivity: LoRa (Sigfox, KPN, TTN), BTLE, WiFi, ZigBee\ldots
		\item \ldots
	\end{itemize}
\end{frame}

\subsection{iTasks}
\begin{frame}[fragile]
	\frametitle{Task Oriented Programming}
	\framesubtitle{\ldots and iTasks}
	\begin{block}{iTasks}
		\begin{itemize}[<+->]
			\item Basic blocks
			\item Generated web interface
			\item Type driven
		\end{itemize}
	\end{block}
	\pause{}
	\begin{columns}[c]
		\column{.49\linewidth}
			\begin{block}{Tasks}
				\begin{itemize}[<+->]
					\item Observables
					\item Given the state, a \CI{TaskValue} is observed.
					\item Continuous execution
					\item Generics
				\end{itemize}
			\end{block}
		\pause{}
		\column{.49\linewidth}
			\begin{figure}[ht]
				\centering
				\includegraphics[width=\linewidth]{fig-taskvalue}
				\caption{The states of a \CI{TaskValue}}
			\end{figure}
	\end{columns}
\end{frame}

\begin{frame}[fragile]
	\frametitle{Task Oriented Programming}
	\framesubtitle{Example}
	\begin{lstlisting}
:: 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}

	\begin{figure}[H]
		\centering
		\begin{subfigure}{.30\textwidth}
			\centering
			\includegraphics[width=.9\linewidth]{taskex1}
			\caption{Initial interface\\~}\label{fig:taskex1}
		\end{subfigure}
		\begin{subfigure}{.30\textwidth}
			\centering
			\includegraphics[width=.9\linewidth]{taskex2}
			\caption{Incomplete entrance}\label{fig:taskex2}
		\end{subfigure}
		\begin{subfigure}{.30\textwidth}
			\centering
			\includegraphics[width=.9\linewidth]{taskex3}
			\caption{Complete entry\\~}\label{fig:taskex3}
		\end{subfigure}
		\caption{Example of a generated user interface}
	\end{figure}
\end{frame}

\begin{frame}[fragile]
	\frametitle{Task Oriented Programming (3)}
	\framesubtitle{Combinators}
	\begin{block}{Sequence}
		\begin{lstlisting}
(>>=)  infixl 1 :: (Task a) (a -> Task b)         -> Task b | iTask a & iTask b
(>>*)  infixl 1 :: (Task a) [TaskCont a (Task b)] -> Task b | iTask a & iTask b
:: TaskCont a b
	=     OnValue             ((TaskValue a)  -> Maybe b)
	|     OnAction    Action  ((TaskValue a)  -> Maybe b)
	| E.e: OnException         (e              -> b)         & iTask e
	|     OnAllExceptions     (String         -> b)
:: Action = Action String
		\end{lstlisting}
	\end{block}

	\begin{block}{Parallel}
		\begin{lstlisting}
(-||-) infixr 3 :: (Task a) (Task a) -> Task a     | iTask a
( ||-) infixr 3 :: (Task a) (Task b) -> Task b     | iTask a & iTask b
(-|| ) infixl 3 :: (Task a) (Task b) -> Task a     | iTask a & iTask b
(-&&-) infixr 4 :: (Task a) (Task b) -> Task (a,b) | iTask a & iTask b
		\end{lstlisting}
	\end{block}
\end{frame}

\begin{frame}[fragile]
	\frametitle{Shared Data Sources (SDS)}
	\begin{block}{What is an SDS}
		\begin{itemize}[<+->]
			\item Read function
			\item Write function
		\end{itemize}
	\end{block}

	\begin{lstlisting}
:: RWShared p r w = ... 
:: ReadWriteShared r w :== RWShared () r w
:: Shared r :== ReadWriteShared r r

get ::          (ReadWriteShared r w)           -> Task r | iTask r
set :: w        (ReadWriteShared r w)           -> Task w | iTask w
upd :: (r -> w) (ReadWriteShared r w)           -> Task w | iTask r & iTask w

sharedStore :: String a -> Shared a | JSONEncode{|*|}, JSONDecode{|*|}

wait :: String (r -> Bool) (ReadWriteShared r w) -> Task r
	\end{lstlisting}
\end{frame}

\begin{frame}[fragile]
	\frametitle{SDS (2)}
	\framesubtitle{Parametric Lenses}
	\begin{block}{What is the \CI{p} for in \CI{RWShared p r w}}
		\pause{}
		\begin{itemize}
			\item Parameter fixed when writing
			\item Used for notifications
		\end{itemize}
	\end{block}

	\begin{lstlisting}
sdsFocus :: p1 (RWShared p1 r w) -> RWShared p2 r w | iTask p

:: SDSNotifyPred p :== p -> Bool
:: SDSLensRead p r rs     = SDSRead        (p -> rs -> MaybeError TaskException r)
                          | SDSReadConst   (p -> r)
:: SDSLensWrite p w rs ws = SDSWrite       (p -> rs -> w -> MaybeError TaskException (Maybe ws))
                          | SDSWriteConst  (p -> w -> MaybeError TaskException (Maybe ws))
:: SDSLensNotify p w rs   = SDSNotify      (p -> rs -> w -> SDSNotifyPred p)
                          | SDSNotifyConst (p -> w -> SDSNotifyPred p)

sdsLens :: String (p -> ps) (SDSLensRead p r rs) (SDSLensWrite p w rs ws)
	(SDSLensNotify p w rs) (RWShared ps rs ws) -> RWShared p r w | iTask ps
	\end{lstlisting}
\end{frame}

\begin{frame}
	\frametitle{Why add IoT devices to iTasks}
	\begin{block}{Why?}
	\begin{itemize}
		\item Execute Tasks
		\item Monitoring
		\item Hardware
		\end{itemize}
	\end{block}

	\pause{}

	\begin{block}{Current possibilities}
		\begin{itemize}
			\item Arjan's Distributed iTasks
			\item Implement a device as an SDS
				\pause{}
			\item Difficult to get logic in
		\end{itemize}
	\end{block}
\end{frame}

\section{mTask}
\subsection{EDSLs}
\begin{frame}
	\frametitle{Embedded Domain Specific Language}
	\framesubtitle{What is are EDSL}
	\begin{itemize}
		\item DSL:\ language for a specific domain
		\item E.g., PostScript, VimScript, HTML, \ldots
		\pause{}
		\item EDSL:\ Embedded DSL
		\item Language in a language
		\item Use the properties of the host
		\item E.g., Ivory, \ldots\pause{} and iTasks
	\end{itemize}
\end{frame}

\begin{frame}
	\frametitle{Embedded Domain Specific Language (2)}
	\framesubtitle{Embedding techniques}
	\begin{block}{Deep}
	\end{block}

	\begin{block}{Shallow}
	\end{block}

	\begin{block}{Class based shallow}
	\end{block}
\end{frame}

\begin{frame}
	\frametitle{Embedded Domain Specific Language (2)}
	\framesubtitle{Shallow Embedding}
\end{frame}

\begin{frame}
	\frametitle{Embedded Domain Specific Language (3)}
	\framesubtitle{Class Based Shallow Embedding}
\end{frame}

\subsection{mTask}
\begin{frame}
	\frametitle{mTask}
	\framesubtitle{Class Based Shallow Embedding}
\end{frame}

\begin{frame}
	\frametitle{Extending mTask}
\end{frame}

\section{System Overview}
\subsection{Devices}
\subsection{Server}
\subsection{Examples}

\section{Demo}
\begin{frame}
	\frametitle{And ofcourse\ldots}
\end{frame}
\begin{frame}
	\frametitle{And ofcourse\ldots a demo}
\end{frame}
\end{document}
