update presentation
[msc-thesis1617.git] / presentation.tex
1 %&presentation
2 \begin{document}
3 \begin{frame}
4 \maketitle
5 \end{frame}
6
7 \begin{frame}
8 \tableofcontents
9 \end{frame}
10
11 \section{Introduction}
12 \subsection{IoT}
13 \begin{frame}
14 \frametitle{Internet of Things (IoT)}
15 \begin{itemize}[<+->]
16 \item Early days, RFID
17 \item Devices: Arduino, ESP8266, Raspberry pi\ldots
18 \item Peripherals: GPS, Sensors, Actuators\ldots
19 \item Wearables: Smart clothing, smart watches\ldots
20 \item Connectivity: LoRa (Sigfox, KPN, TTN), BTLE, WiFi, ZigBee\ldots
21 \item \ldots
22 \end{itemize}
23 \end{frame}
24
25 \subsection{iTasks}
26 \begin{frame}[fragile]
27 \frametitle{Task Oriented Programming}
28 \framesubtitle{\ldots and iTasks}
29 \begin{block}{iTasks}
30 \begin{itemize}[<+->]
31 \item Basic blocks
32 \item Generated web interface
33 \item Type driven
34 \end{itemize}
35 \end{block}
36 \pause{}
37 \begin{columns}[c]
38 \column{.49\linewidth}
39 \begin{block}{Tasks}
40 \begin{itemize}[<+->]
41 \item Observables
42 \item Given the state, a \CI{TaskValue} is observed.
43 \item Continuous execution
44 \item Generics
45 \end{itemize}
46 \end{block}
47 \pause{}
48 \column{.49\linewidth}
49 \begin{figure}[ht]
50 \centering
51 \includegraphics[width=\linewidth]{fig-taskvalue}
52 \caption{The states of a \CI{TaskValue}}
53 \end{figure}
54 \end{columns}
55 \end{frame}
56
57 \begin{frame}[fragile]
58 \frametitle{Task Oriented Programming}
59 \framesubtitle{Example}
60 \begin{lstlisting}
61 :: Name = { firstname :: String, lastname :: String }
62 derive class iTask Name
63
64 enterInformation :: String [EnterOption m] -> Task m | iTask m
65 enterName :: Task Name
66 enterName = enterInformation "Enter your name" []
67 \end{lstlisting}
68
69 \begin{figure}[H]
70 \centering
71 \begin{subfigure}{.30\textwidth}
72 \centering
73 \includegraphics[width=.9\linewidth]{taskex1}
74 \caption{Initial interface\\~}\label{fig:taskex1}
75 \end{subfigure}
76 \begin{subfigure}{.30\textwidth}
77 \centering
78 \includegraphics[width=.9\linewidth]{taskex2}
79 \caption{Incomplete entrance}\label{fig:taskex2}
80 \end{subfigure}
81 \begin{subfigure}{.30\textwidth}
82 \centering
83 \includegraphics[width=.9\linewidth]{taskex3}
84 \caption{Complete entry\\~}\label{fig:taskex3}
85 \end{subfigure}
86 \caption{Example of a generated user interface}
87 \end{figure}
88 \end{frame}
89
90 \begin{frame}[fragile]
91 \frametitle{Task Oriented Programming (3)}
92 \framesubtitle{Combinators}
93 \begin{block}{Sequence}
94 \begin{lstlisting}
95 (>>=) infixl 1 :: (Task a) (a -> Task b) -> Task b | iTask a & iTask b
96 (>>*) infixl 1 :: (Task a) [TaskCont a (Task b)] -> Task b | iTask a & iTask b
97 :: TaskCont a b
98 = OnValue ((TaskValue a) -> Maybe b)
99 | OnAction Action ((TaskValue a) -> Maybe b)
100 | E.e: OnException (e -> b) & iTask e
101 | OnAllExceptions (String -> b)
102 :: Action = Action String
103 \end{lstlisting}
104 \end{block}
105
106 \begin{block}{Parallel}
107 \begin{lstlisting}
108 (-||-) infixr 3 :: (Task a) (Task a) -> Task a | iTask a
109 ( ||-) infixr 3 :: (Task a) (Task b) -> Task b | iTask a & iTask b
110 (-|| ) infixl 3 :: (Task a) (Task b) -> Task a | iTask a & iTask b
111 (-&&-) infixr 4 :: (Task a) (Task b) -> Task (a,b) | iTask a & iTask b
112 \end{lstlisting}
113 \end{block}
114 \end{frame}
115
116 \begin{frame}[fragile]
117 \frametitle{Shared Data Sources (SDS)}
118 \begin{block}{What is an SDS}
119 \begin{itemize}[<+->]
120 \item Read function
121 \item Write function
122 \end{itemize}
123 \end{block}
124
125 \begin{lstlisting}
126 :: RWShared p r w = ...
127 :: ReadWriteShared r w :== RWShared () r w
128 :: Shared r :== ReadWriteShared r r
129
130 get :: (ReadWriteShared r w) -> Task r | iTask r
131 set :: w (ReadWriteShared r w) -> Task w | iTask w
132 upd :: (r -> w) (ReadWriteShared r w) -> Task w | iTask r & iTask w
133
134 sharedStore :: String a -> Shared a | JSONEncode{|*|}, JSONDecode{|*|}
135
136 wait :: String (r -> Bool) (ReadWriteShared r w) -> Task r
137 \end{lstlisting}
138 \end{frame}
139
140 \begin{frame}[fragile]
141 \frametitle{SDS (2)}
142 \framesubtitle{Parametric Lenses}
143 \begin{block}{What is the \CI{p} for in \CI{RWShared p r w}}
144 \pause{}
145 \begin{itemize}
146 \item Parameter fixed when writing
147 \item Used for notifications
148 \end{itemize}
149 \end{block}
150
151 \begin{lstlisting}
152 sdsFocus :: p1 (RWShared p1 r w) -> RWShared p2 r w | iTask p
153
154 :: SDSNotifyPred p :== p -> Bool
155 :: SDSLensRead p r rs = SDSRead (p -> rs -> MaybeError TaskException r)
156 | SDSReadConst (p -> r)
157 :: SDSLensWrite p w rs ws = SDSWrite (p -> rs -> w -> MaybeError TaskException (Maybe ws))
158 | SDSWriteConst (p -> w -> MaybeError TaskException (Maybe ws))
159 :: SDSLensNotify p w rs = SDSNotify (p -> rs -> w -> SDSNotifyPred p)
160 | SDSNotifyConst (p -> w -> SDSNotifyPred p)
161
162 sdsLens :: String (p -> ps) (SDSLensRead p r rs) (SDSLensWrite p w rs ws) (SDSLensNotify p w rs)
163 (RWShared ps rs ws) -> RWShared p r w | iTask ps
164 \end{lstlisting}
165 \end{frame}
166
167 \begin{frame}
168 \frametitle{Why add IoT devices to iTasks}
169 %TODO
170 \end{frame}
171
172 \section{mTask}
173 \subsection{EDSLs}
174 \begin{frame}
175 \frametitle{Embedded Domain Specific Language}
176 \framesubtitle{Deep Embedding}
177 \end{frame}
178
179 \begin{frame}
180 \frametitle{Embedded Domain Specific Language (2)}
181 \framesubtitle{Shallow Embedding}
182 \end{frame}
183
184 \begin{frame}
185 \frametitle{Embedded Domain Specific Language (3)}
186 \framesubtitle{Class Based Shallow Embedding}
187 \end{frame}
188
189 \subsection{mTask}
190 \begin{frame}
191 \frametitle{mTask}
192 \framesubtitle{Class Based Shallow Embedding}
193 \end{frame}
194
195 \begin{frame}
196 \frametitle{Extending mTask}
197 \end{frame}
198
199 \section{System Overview}
200 \subsection{Devices}
201 \subsection{Server}
202 \subsection{Examples}
203
204 \section{Demo}
205 \begin{frame}
206 \frametitle{And ofcourse\ldots}
207 \end{frame}
208 \begin{frame}
209 \frametitle{And ofcourse\ldots a demo}
210 \end{frame}
211 \end{document}