Merge branch 'master' of git.martlubbers.net:msc-thesis1617
[msc-thesis1617.git] / pres.intro.tex
1 \subsection{IoT}
2 \begin{frame}
3 \frametitle{What is the Internet of Things (IoT)}
4 \begin{block}{History}
5 \begin{itemize} \item 1999: \pause{} RFID
6 \item Device to device communication
7 \pause{}
8 \item Now: \pause{} IoT is everywhere
9 \item Estimated 30 billion in 2020
10 \end{itemize}
11 \end{block}
12 \pause{}
13 \begin{block}{Tasks performed by IoT}
14 \begin{itemize}[<+->]
15 \item Monitoring (Temperature, Electricity, Humidity, Heartbeat)
16 \item Acting (Servo's, Motors)
17 \item Tracking (GPS, WiFi tracking)
18 \item Combinations: e.g. Thermostat, Smart Clothing, Smart Watches
19 \end{itemize}
20 \end{block}
21 \end{frame}
22
23 \begin{frame}
24 \frametitle{Problems with IoT}
25 \begin{itemize}[<+->]
26 \item Device $\rightarrow$ Server $\rightarrow$ Application
27 \item Myriads of devices: Arduino, ESP8266, Raspberry pi\ldots
28 \item Tons of languages: C++, Lua, C, python\ldots
29 \item Heaps of communication methods: LoRa (Sigfox, KPN, TTN), BTLE, WiFi, ZigBee\ldots
30 \item Resulting in
31 \item Separated logic
32
33 \item Integration problems
34 \end{itemize}
35 \end{frame}
36
37 \begin{frame}
38 \frametitle{And there is TOP/iTasks}
39 \begin{block}{iTasks}
40 \begin{itemize}[<+->]
41 \item Tasks are basic blocks
42 \item Generated web interface
43 \item Type driven
44 \item EDSL in Clean
45 \end{itemize}
46 \end{block}
47 \begin{block}{Tasks}
48 \begin{itemize}[<+->]
49 \item Filling in forms
50 \item Looking at data (Monitoring, Maps)
51 \item Act on data changes
52 \end{itemize}
53 \end{block}
54 \end{frame}
55
56 \begin{frame}
57 \frametitle{IoT and TOP}
58 \begin{block}{Overlap}
59 \begin{itemize}[<+->]
60 \item Tasks often involve humans
61 \item Tasks can often be performed by IoT
62 \end{itemize}
63 \end{block}
64 \end{frame}
65
66 \begin{frame}
67 \frametitle{Problem statement}
68 \begin{block}{What is the problem?}
69 \begin{itemize}
70 \item iTasks works
71 \item IoT works
72 \item But\ldots\pause{} integration does not
73 \end{itemize}
74 \end{block}
75
76 \pause{}
77
78 \begin{block}{Why is this interesting?}
79 \begin{itemize}[<+->]
80 \item Makes IoT integration easier
81 \item Safer IoT clients
82 \item Extend the reach of iTasks
83 \item Generate all three components of IoT from one source
84 \end{itemize}
85 \end{block}
86 \end{frame}
87
88 \subsection{iTasks}
89 \begin{frame}[fragile]
90 \frametitle{First some theory}
91 \framesubtitle{\ldots iTasks}
92 \begin{block}{Tasks}
93 \begin{itemize}[<+->]
94 \item Observables
95 \item Given the state, a \CI{TaskValue} is observed.
96 \item Continuous execution
97 \end{itemize}
98 \end{block}
99 \pause{}
100 \begin{figure}[ht]
101 \centering
102 \includegraphics[width=.6\linewidth]{fig-taskvalue}
103 \caption{The states of a \CI{TaskValue}}
104 \end{figure}
105 \end{frame}
106
107 \begin{frame}[fragile]
108 \frametitle{Task Oriented Programming}
109 \framesubtitle{Example}
110 \begin{lstlisting}[language=Clean]
111 :: Name = { firstname :: String, lastname :: String }
112 derive class iTask Name
113
114 enterInformation :: String [EnterOption m] -> Task m | iTask m
115 enterName :: Task Name
116 enterName = enterInformation "Enter your name" []
117 \end{lstlisting}
118
119 \begin{figure}[H]
120 \centering
121 \begin{subfigure}{.30\textwidth}
122 \centering
123 \includegraphics[width=.9\linewidth]{taskex1}
124 \caption{Initial interface\\~}\label{fig:taskex1}
125 \end{subfigure}
126 \begin{subfigure}{.30\textwidth}
127 \centering
128 \includegraphics[width=.9\linewidth]{taskex2}
129 \caption{Incomplete entrance}\label{fig:taskex2}
130 \end{subfigure}
131 \begin{subfigure}{.30\textwidth}
132 \centering
133 \includegraphics[width=.9\linewidth]{taskex3}
134 \caption{Complete entry\\~}\label{fig:taskex3}
135 \end{subfigure}
136 \caption{Example of a generated user interface}
137 \end{figure}
138 \end{frame}
139
140 \begin{frame}[fragile]
141 \frametitle{Task Oriented Programming (3)}
142 \framesubtitle{Combinators}
143 \begin{block}{Sequence}
144 \begin{lstlisting}[language=Clean]
145 (>>=) infixl 1 :: (Task a) (a -> Task b) -> Task b | iTask a & iTask b
146 (>>*) infixl 1 :: (Task a) [TaskCont a (Task b)] -> Task b | iTask a & iTask b
147 :: TaskCont a b
148 = OnValue ((TaskValue a) -> Maybe b)
149 | OnAction Action ((TaskValue a) -> Maybe b)
150 | E.e: OnException (e -> b) & iTask e
151 | OnAllExceptions (String -> b)
152 :: Action = Action String
153 \end{lstlisting}
154 \end{block}
155
156 \begin{block}{Parallel}
157 \begin{lstlisting}[language=Clean]
158 (-||-) infixr 3 :: (Task a) (Task a) -> Task a | iTask a
159 ( ||-) infixr 3 :: (Task a) (Task b) -> Task b | iTask a & iTask b
160 (-|| ) infixl 3 :: (Task a) (Task b) -> Task a | iTask a & iTask b
161 (-&&-) infixr 4 :: (Task a) (Task b) -> Task (a,b) | iTask a & iTask b
162 \end{lstlisting}
163 \end{block}
164 \end{frame}
165
166 \begin{frame}[fragile]
167 \frametitle{Shared Data Sources (SDS)}
168 \begin{block}{What is an SDS}
169 \begin{itemize}
170 \item Read function
171 \item Write function
172 \pause{}
173 \item Both have access to the world
174 \item Default: JSON file storage
175 \end{itemize}
176 \end{block}
177
178 \begin{lstlisting}[language=Clean]
179 :: RWShared p r w = ...
180 :: ReadWriteShared r w :== RWShared () r w
181 :: Shared r :== ReadWriteShared r r
182
183 get :: (ReadWriteShared r w) -> Task r | iTask r
184 set :: w (ReadWriteShared r w) -> Task w | iTask w
185 upd :: (r -> w) (ReadWriteShared r w) -> Task w | iTask r & iTask w
186
187 sharedStore :: String a -> Shared a | JSONEncode{|*|}, JSONDecode{|*|}
188
189 wait :: String (r -> Bool) (ReadWriteShared r w) -> Task r
190 \end{lstlisting}
191 \end{frame}
192
193 \begin{frame}
194 \frametitle{So how can we do the integration?}
195 \begin{itemize}[<+->]
196 \item Program device as an SDS
197 \item Distributed iTasks
198 \item Devices have different paradigms
199 \end{itemize}
200 \end{frame}
201
202 \begin{frame}
203 \frametitle{How to express Tasks suitable for microcontrollers}
204 \pause\centering\Huge EDSLs to the rescue
205 \end{frame}