\subsection{IoT}
\begin{frame}
- \frametitle{What is Internet of Things (IoT)}
+ \frametitle{What is the Internet of Things (IoT)}
\begin{block}{History}
\begin{itemize} \item 1999: \pause{} RFID
\item Device to device communication
\pause{}
- \item ESP8266
+ \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}
+ \begin{itemize}[<+->]
\item Monitoring (Temperature, Electricity, Humidity, Heartbeat)
\item Acting (Servo's, Motors)
\item Tracking (GPS, WiFi tracking)
- \item Relaying (SMS, Whatsapp)
- \pause{}
- \item Combinations: e.g. Thermostat
- \item Smart clothing, smart watches
+ \item Combinations: e.g. Thermostat, Smart Clothing, Smart Watches
\end{itemize}
\end{block}
\end{frame}
\begin{frame}
\frametitle{Problems with IoT}
- \begin{itemize}
+ \begin{itemize}[<+->]
\item Device $\rightarrow$ Server $\rightarrow$ Application
- \pause{}
\item Myriads of devices: Arduino, ESP8266, Raspberry pi\ldots
- \pause{}
\item Tons of languages: C++, Lua, C, python\ldots
- \pause{}
\item Heaps of communication methods: LoRa (Sigfox, KPN, TTN), BTLE, WiFi, ZigBee\ldots
- \pause{}
- \item But\ldots
- \pause{}
+ \item Resulting in
\item Separated logic
+
\item Integration problems
- \item Reprogramming, write cycles
\end{itemize}
\end{frame}
\frametitle{And there is TOP/iTasks}
\begin{block}{iTasks}
\begin{itemize}[<+->]
- \item Basic blocks
+ \item Tasks are basic blocks
\item Generated web interface
\item Type driven
- \item EDSL
+ \item EDSL in Clean
\end{itemize}
\end{block}
- \pause{}
\begin{block}{Tasks}
\begin{itemize}[<+->]
\item Filling in forms
\begin{block}{Overlap}
\begin{itemize}[<+->]
\item Tasks often involve humans
- \item Tasks can be performed by IoT
- \end{itemize}
- \end{block}
- \pause{}
- \begin{block}{But how to integrate}
- \begin{itemize}[<+->]
- \item Distributed iTasks
- \item SDS
- \item Swat two flies at once
+ \item Tasks can often be performed by IoT
\end{itemize}
\end{block}
\end{frame}
\begin{frame}
- \frametitle{Solution}
- \begin{itemize}[<+->]
- \item Add IoT to iTasks
- \item Solve the integration problem
- \item Extend the reach of iTasks
- \item iTasks server
- \item IoT device client
- \item EDSL to make IoT tasks
- \item Interpreted on the client
- \item No reprogramming
- \end{itemize}
+ \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{}
- Internalship
-\end{frame}
-\begin{frame}
- \frametitle{Problems overcome}
- \begin{itemize}[<+->]
- \item Way to express IoT Tasks
- \item Write client software
- \item Write server software
- \item Connect them up
- \end{itemize}
+ \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{Task Oriented Programming}
- \framesubtitle{\ldots and iTasks}
- \begin{block}{iTasks}
+ \frametitle{First some theory}
+ \framesubtitle{\ldots iTasks}
+ \begin{block}{Tasks}
\begin{itemize}[<+->]
- \item Basic blocks
- \item Generated web interface
- \item Type driven
+ \item Observables
+ \item Given the state, a \CI{TaskValue} is observed.
+ \item Continuous execution
\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}
+ \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}
+ \begin{lstlisting}[language=Clean]
:: Name = { firstname :: String, lastname :: String }
derive class iTask Name
\frametitle{Task Oriented Programming (3)}
\framesubtitle{Combinators}
\begin{block}{Sequence}
- \begin{lstlisting}
+ \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
\end{block}
\begin{block}{Parallel}
- \begin{lstlisting}
+ \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
\begin{frame}[fragile]
\frametitle{Shared Data Sources (SDS)}
\begin{block}{What is an SDS}
- \begin{itemize}[<+->]
+ \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}
+ \begin{lstlisting}[language=Clean]
:: RWShared p r w = ...
:: ReadWriteShared r w :== RWShared () r w
:: Shared r :== ReadWriteShared r 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 Implement a device as an SDS
- \pause{}
- \item Tailor made SDS for every task
- \item Difficult to get logic in
- \pause{}
- \item Arjan's Distributed iTasks
- \pause{}
- \item Requires fast hardware
- \pause{}
- \end{itemize}
- \end{block}
+ \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{Solution}
- \pause{}
- \begin{block}{EDSL to the rescue}
- \pause{}
- After the break.
- \end{block}
+ \frametitle{How to express Tasks suitable for microcontrollers}
+ \pause\centering\Huge EDSLs to the rescue
\end{frame}