update
[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)
163 (SDSLensNotify p w rs) (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 \begin{block}{Why?}
170 \begin{itemize}
171 \item Execute Tasks
172 \item Monitoring
173 \item Hardware
174 \end{itemize}
175 \end{block}
176
177 \pause{}
178
179 \begin{block}{Current possibilities}
180 \begin{itemize}
181 \item Arjan's Distributed iTasks
182 \item Implement a device as an SDS
183 \pause{}
184 \item Difficult to get logic in
185 \end{itemize}
186 \end{block}
187 \end{frame}
188
189 \section{mTask}
190 \subsection{EDSLs}
191 \begin{frame}
192 \frametitle{Embedded Domain Specific Language}
193 \framesubtitle{What is are EDSL}
194 \begin{itemize}
195 \item DSL:\ language for a specific domain
196 \item E.g., PostScript, VimScript, HTML, \ldots
197 \pause{}
198 \item EDSL:\ Embedded DSL
199 \item Language in a language
200 \item Use the properties of the host
201 \item E.g., Ivory, \ldots\pause{} and iTasks
202 \end{itemize}
203 \end{frame}
204
205 \begin{frame}
206 \frametitle{Embedded Domain Specific Language (2)}
207 \framesubtitle{Embedding techniques}
208 \begin{block}{Deep}
209 \end{block}
210
211 \begin{block}{Shallow}
212 \end{block}
213
214 \begin{block}{Class based shallow}
215 \end{block}
216 \end{frame}
217
218 \begin{frame}
219 \frametitle{Embedded Domain Specific Language (2)}
220 \framesubtitle{Shallow Embedding}
221 \end{frame}
222
223 \begin{frame}
224 \frametitle{Embedded Domain Specific Language (3)}
225 \framesubtitle{Class Based Shallow Embedding}
226 \end{frame}
227
228 \subsection{mTask}
229 \begin{frame}
230 \frametitle{mTask}
231 \framesubtitle{Class Based Shallow Embedding}
232 \end{frame}
233
234 \begin{frame}
235 \frametitle{Extending mTask}
236 \end{frame}
237
238 \section{System Overview}
239 \subsection{Devices}
240 \subsection{Server}
241 \subsection{Examples}
242
243 \section{Demo}
244 \begin{frame}
245 \frametitle{And ofcourse\ldots}
246 \end{frame}
247 \begin{frame}
248 \frametitle{And ofcourse\ldots a demo}
249 \end{frame}
250 \end{document}