3 \frametitle{What is the Internet of Things (IoT)
}
5 \begin{itemize
} \item 1999:
\pause{} RFID
6 \item Device to device communication
8 \item Now:
\pause{} IoT is everywhere
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 Combinations: e.g. Thermostat, Smart Clothing, Smart Watches
24 \frametitle{Problems with IoT
}
26 \item Device $
\rightarrow$ Server $
\rightarrow$ Application
28 \item Myriads of devices: Arduino, ESP8266, Raspberry pi
\ldots
30 \item Tons of languages: C++, Lua, C, python
\ldots
32 \item Heaps of communication methods: LoRa (Sigfox, KPN, TTN), BTLE, WiFi, ZigBee
\ldots
35 \item Integration problems
40 \frametitle{And there is TOP/iTasks
}
43 \item Tasks are basic blocks
44 \item Generated web interface
52 \item Filling in forms
53 \item Looking at data (Monitoring, Maps)
54 \item Act on data changes
60 \frametitle{IoT and TOP
}
61 \begin{block
}{Overlap
}
63 \item Tasks often involve humans
64 \item Tasks can often be performed by IoT
70 \frametitle{Problem statement
}
71 \begin{block
}{What is the problem?
}
75 \item But...
\pause{} integration does not
81 \begin{block
}{Why is this interesting?
}
83 \item Make IoT integration easier
84 \item Extend the reach of iTasks
85 \item Fully integrated systems
91 \begin{frame
}[fragile
]
92 \frametitle{First some theory
}
93 \framesubtitle{\ldots iTasks
}
97 \item Given the state, a
\CI{TaskValue
} is observed.
98 \item Continuous execution
105 \includegraphics[width=
\linewidth]{fig-taskvalue
}
106 \caption{The states of a
\CI{TaskValue
}}
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
117 enterInformation :: String
[EnterOption m
] -> Task m | iTask m
118 enterName :: Task Name
119 enterName = enterInformation "Enter your name"
[]
124 \begin{subfigure
}{.30\textwidth}
126 \includegraphics[width=
.9\linewidth]{taskex1
}
127 \caption{Initial interface\\~
}\label{fig:taskex1
}
129 \begin{subfigure
}{.30\textwidth}
131 \includegraphics[width=
.9\linewidth]{taskex2
}
132 \caption{Incomplete entrance
}\label{fig:taskex2
}
134 \begin{subfigure
}{.30\textwidth}
136 \includegraphics[width=
.9\linewidth]{taskex3
}
137 \caption{Complete entry\\~
}\label{fig:taskex3
}
139 \caption{Example of a generated user interface
}
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
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
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
169 \begin{frame
}[fragile
]
170 \frametitle{Shared Data Sources (SDS)
}
171 \begin{block
}{What is an SDS
}
172 \begin{itemize
}[<+->
]
175 \item Both have access to the world
179 \begin{lstlisting
}[language=Clean
]
180 :: RWShared p r w = ...
181 :: ReadWriteShared r w :== RWShared () r w
182 :: Shared r :== ReadWriteShared r r
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
188 sharedStore :: String a -> Shared a | JSONEncode
{|*|
}, JSONDecode
{|*|
}
190 wait :: String (r -> Bool) (ReadWriteShared r w) -> Task r
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
204 \frametitle{But not all Tasks or SDSs are suitable for microcontrollers
\ldots}
205 \pause\centering\Large EDSLs to the rescue