\subsection{IoT}
\begin{frame}
	\frametitle{What is the Internet of Things (IoT)}
	\begin{block}{History}
		\begin{itemize} \item 1999: \pause{} RFID
			\item Device to device communication
			\pause{}
			\item Now: \pause{} IoT is everywhere
			\item Estimated 30 billion in 2020
		\end{itemize}
	\end{block}
	\pause{}
	\begin{block}{Tasks performed by IoT}
		\begin{itemize}[<+->]
			\item Monitoring (Temperature, Electricity, Humidity, Heartbeat)
			\item Acting (Servo's, Motors)
			\item Tracking (GPS, WiFi tracking)
			\item Combinations: e.g. Thermostat, Smart Clothing, Smart Watches
		\end{itemize}
	\end{block}
\end{frame}

\begin{frame}
	\frametitle{Problems with IoT}
	\begin{itemize}[<+->]
		\item Device $\rightarrow$ Server $\rightarrow$ Application
		\item Myriads of devices: Arduino, ESP8266, Raspberry pi\ldots
		\item Tons of languages: C++, Lua, C, python\ldots
		\item Heaps of communication methods: LoRa (Sigfox, KPN, TTN), BTLE, WiFi, ZigBee\ldots
		\item Resulting in
		\item Separated logic
		
		\item Integration problems
	\end{itemize}
\end{frame}

\begin{frame}
	\frametitle{And there is TOP/iTasks}
	\begin{block}{iTasks}
		\begin{itemize}[<+->]
			\item Tasks are basic blocks
			\item Generated web interface
			\item Type driven
			\item EDSL in Clean
		\end{itemize}
	\end{block}
	\begin{block}{Tasks}
		\begin{itemize}[<+->]
			\item Filling in forms
			\item Looking at data (Monitoring, Maps)
			\item Act on data changes
		\end{itemize}
	\end{block}
\end{frame}

\begin{frame}
	\frametitle{IoT and TOP}
	\begin{block}{Overlap}
		\begin{itemize}[<+->]
			\item Tasks often involve humans
			\item Tasks can often be performed by IoT
		\end{itemize}
	\end{block}
\end{frame}

\begin{frame}
	\frametitle{Problem statement}
	\begin{block}{What is the problem?}
		\begin{itemize}
			\item iTasks works
			\item IoT works
			\item But\ldots\pause{} integration does not
		\end{itemize}
	\end{block}

	\pause{}

	\begin{block}{Why is this interesting?}
		\begin{itemize}[<+->]
			\item Makes IoT integration easier
			\item Safer IoT clients
			\item Extend the reach of iTasks
			\item Generate all three components of IoT from one source
		\end{itemize}
	\end{block}
\end{frame}

\subsection{iTasks}
\begin{frame}[fragile]
	\frametitle{First some theory}
	\framesubtitle{\ldots iTasks}
	\begin{block}{Tasks}
		\begin{itemize}[<+->]
			\item Observables
			\item Given the state, a \CI{TaskValue} is observed.
			\item Continuous execution
		\end{itemize}
	\end{block}
	\pause{}
	\begin{figure}[ht]
		\centering
		\includegraphics[width=.6\linewidth]{fig-taskvalue}
		\caption{The states of a \CI{TaskValue}}
	\end{figure}
\end{frame}

\begin{frame}[fragile]
	\frametitle{Task Oriented Programming}
	\framesubtitle{Example}
	\begin{lstlisting}[language=Clean]
:: 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}[language=Clean]
(>>=)  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}[language=Clean]
(-||-) 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
			\pause{}
			\item Both have access to the world
			\item Default: JSON file storage
		\end{itemize}
	\end{block}

	\begin{lstlisting}[language=Clean]
:: 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}
	\frametitle{So how can we do the integration?}
	\begin{itemize}[<+->]
		\item Program device as an SDS
		\item Distributed iTasks
		\item Devices have different paradigms
	\end{itemize}
\end{frame}

\begin{frame}
	\frametitle{How to express Tasks suitable for microcontrollers}
	\pause\centering\Huge EDSLs to the rescue
\end{frame}
