3 \frametitle{What is Internet of Things (IoT)
}
5 \begin{itemize
} \item 1999:
\pause{} RFID
6 \item Device to device communication
9 \item Estimated
30 billion in
2020
13 \begin{block
}{Tasks performed by IoT
}
15 \item Monitoring (Temperature, Electricity, Humidity, Heartbeat)
16 \item Acting (Servo's, Motors)
17 \item Tracking (GPS, WiFi tracking)
18 \item Communication (SMS, Whatsapp)
20 \item Combinations: e.g. Thermostat, Smart Clothing, Smart Watches
26 \frametitle{Problems with IoT
}
28 \item Device $
\rightarrow$ Server $
\rightarrow$ Application
30 \item Myriads of devices: Arduino, ESP8266, Raspberry pi
\ldots
32 \item Tons of languages: C++, Lua, C, python
\ldots
34 \item Heaps of communication methods: LoRa (Sigfox, KPN, TTN), BTLE, WiFi, ZigBee
\ldots
37 \item Integration problems
42 \frametitle{And there is TOP/iTasks
}
45 \item Tasks are basic blocks
46 \item Generated web interface
54 \item Filling in forms
55 \item Looking at data (Monitoring, Maps)
56 \item Act on data changes
62 \frametitle{IoT and TOP
}
63 \begin{block
}{Overlap
}
65 \item Tasks often involve humans
66 \item Tasks can be performed by IoT
70 \begin{block
}{But how to integrate
}
72 \item Distributed iTasks
74 \item Swat two flies at once
82 \item Add IoT to iTasks
83 \item Solve the integration problem
84 \item Extend the reach of iTasks
86 \item IoT device client
87 \item EDSL to make IoT tasks
93 \frametitle{Problems overcome
}
95 \item Way to express IoT Tasks
96 \item Write client software
97 \item Write server software
99 \item But first some theory
100 \item Reprogramming, write cycles
105 \begin{frame
}[fragile
]
106 \frametitle{Task Oriented Programming
}
107 \framesubtitle{\ldots and iTasks
}
108 \begin{block
}{iTasks
}
109 \begin{itemize
}[<+->
]
111 \item Generated web interface
117 \column{.49\linewidth}
119 \begin{itemize
}[<+->
]
121 \item Given the state, a
\CI{TaskValue
} is observed.
122 \item Continuous execution
127 \column{.49\linewidth}
130 \includegraphics[width=
\linewidth]{fig-taskvalue
}
131 \caption{The states of a
\CI{TaskValue
}}
136 \begin{frame
}[fragile
]
137 \frametitle{Task Oriented Programming
}
138 \framesubtitle{Example
}
139 \begin{lstlisting
}[language=Clean
]
140 :: Name =
{ firstname :: String, lastname :: String
}
141 derive class iTask Name
143 enterInformation :: String
[EnterOption m
] -> Task m | iTask m
144 enterName :: Task Name
145 enterName = enterInformation "Enter your name"
[]
150 \begin{subfigure
}{.30\textwidth}
152 \includegraphics[width=
.9\linewidth]{taskex1
}
153 \caption{Initial interface\\~
}\label{fig:taskex1
}
155 \begin{subfigure
}{.30\textwidth}
157 \includegraphics[width=
.9\linewidth]{taskex2
}
158 \caption{Incomplete entrance
}\label{fig:taskex2
}
160 \begin{subfigure
}{.30\textwidth}
162 \includegraphics[width=
.9\linewidth]{taskex3
}
163 \caption{Complete entry\\~
}\label{fig:taskex3
}
165 \caption{Example of a generated user interface
}
169 \begin{frame
}[fragile
]
170 \frametitle{Task Oriented Programming (
3)
}
171 \framesubtitle{Combinators
}
172 \begin{block
}{Sequence
}
173 \begin{lstlisting
}[language=Clean
]
174 (>>=) infixl
1 :: (Task a) (a -> Task b) -> Task b | iTask a & iTask b
175 (>>*) infixl
1 :: (Task a)
[TaskCont a (Task b)
] -> Task b | iTask a & iTask b
177 = OnValue ((TaskValue a) -> Maybe b)
178 | OnAction Action ((TaskValue a) -> Maybe b)
179 | E.e: OnException (e -> b) & iTask e
180 | OnAllExceptions (String -> b)
181 :: Action = Action String
185 \begin{block
}{Parallel
}
186 \begin{lstlisting
}[language=Clean
]
187 (-||-) infixr
3 :: (Task a) (Task a) -> Task a | iTask a
188 ( ||-) infixr
3 :: (Task a) (Task b) -> Task b | iTask a & iTask b
189 (-|| ) infixl
3 :: (Task a) (Task b) -> Task a | iTask a & iTask b
190 (-&&-) infixr
4 :: (Task a) (Task b) -> Task (a,b) | iTask a & iTask b
195 \begin{frame
}[fragile
]
196 \frametitle{Shared Data Sources (SDS)
}
197 \begin{block
}{What is an SDS
}
198 \begin{itemize
}[<+->
]
201 \item Both have access to the world
205 \begin{lstlisting
}[language=Clean
]
206 :: RWShared p r w = ...
207 :: ReadWriteShared r w :== RWShared () r w
208 :: Shared r :== ReadWriteShared r r
210 get :: (ReadWriteShared r w) -> Task r | iTask r
211 set :: w (ReadWriteShared r w) -> Task w | iTask w
212 upd :: (r -> w) (ReadWriteShared r w) -> Task w | iTask r & iTask w
214 sharedStore :: String a -> Shared a | JSONEncode
{|*|
}, JSONDecode
{|*|
}
216 wait :: String (r -> Bool) (ReadWriteShared r w) -> Task r
221 \frametitle{But not all Tasks or SDSs are suitable for microcontrollers
\ldots}
222 \pause\centering\Large EDSLs to the rescue