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