while [ $# -ne 0 ]; do
log "Clean $1"
rm -fv $1.{acn,acr,alg,aux,bbl,blg,idl,idx,ilg,ind,fmt,glg,glo,gls,\
-ist,loa,lof,log,lol,lot,nav,out,pdf,snm,tdo,toc}
+ist,loa,lof,log,lol,lot,nav,out,pdf,snm,tdo,toc,vrb}
shift
done
}
\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}
-\section{TOP \& EDSLs}
+\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}
+ %TODO
+\end{frame}
\section{mTask}
+\subsection{EDSLs}
+\begin{frame}
+ \frametitle{Embedded Domain Specific Language}
+ \framesubtitle{Deep Embedding}
+\end{frame}
-\section{System Overview}
+\begin{frame}
+ \frametitle{Embedded Domain Specific Language (2)}
+ \framesubtitle{Shallow Embedding}
+\end{frame}
-\section{Extending the mTask EDSL}
+\begin{frame}
+ \frametitle{Embedded Domain Specific Language (3)}
+ \framesubtitle{Class Based Shallow Embedding}
+\end{frame}
-\section{Considerations \& Implementation}
+\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}