11 \section{Introduction
}
14 \frametitle{Internet of Things (IoT)
}
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
26 \begin{frame
}[fragile
]
27 \frametitle{Task Oriented Programming
}
28 \framesubtitle{\ldots and iTasks
}
32 \item Generated web interface
38 \column{.49\linewidth}
42 \item Given the state, a
\CI{TaskValue
} is observed.
43 \item Continuous execution
48 \column{.49\linewidth}
51 \includegraphics[width=
\linewidth]{fig-taskvalue
}
52 \caption{The states of a
\CI{TaskValue
}}
57 \begin{frame
}[fragile
]
58 \frametitle{Task Oriented Programming
}
59 \framesubtitle{Example
}
61 :: Name =
{ firstname :: String, lastname :: String
}
62 derive class iTask Name
64 enterInformation :: String
[EnterOption m
] -> Task m | iTask m
65 enterName :: Task Name
66 enterName = enterInformation "Enter your name"
[]
71 \begin{subfigure
}{.30\textwidth}
73 \includegraphics[width=
.9\linewidth]{taskex1
}
74 \caption{Initial interface\\~
}\label{fig:taskex1
}
76 \begin{subfigure
}{.30\textwidth}
78 \includegraphics[width=
.9\linewidth]{taskex2
}
79 \caption{Incomplete entrance
}\label{fig:taskex2
}
81 \begin{subfigure
}{.30\textwidth}
83 \includegraphics[width=
.9\linewidth]{taskex3
}
84 \caption{Complete entry\\~
}\label{fig:taskex3
}
86 \caption{Example of a generated user interface
}
90 \begin{frame
}[fragile
]
91 \frametitle{Task Oriented Programming (
3)
}
92 \framesubtitle{Combinators
}
93 \begin{block
}{Sequence
}
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
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
106 \begin{block
}{Parallel
}
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
116 \begin{frame
}[fragile
]
117 \frametitle{Shared Data Sources (SDS)
}
118 \begin{block
}{What is an SDS
}
119 \begin{itemize
}[<+->
]
126 :: RWShared p r w = ...
127 :: ReadWriteShared r w :== RWShared () r w
128 :: Shared r :== ReadWriteShared r r
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
134 sharedStore :: String a -> Shared a | JSONEncode
{|*|
}, JSONDecode
{|*|
}
136 wait :: String (r -> Bool) (ReadWriteShared r w) -> Task r
140 \begin{frame
}[fragile
]
142 \framesubtitle{Parametric Lenses
}
143 \begin{block
}{What is the
\CI{p
} for in
\CI{RWShared p r w
}}
146 \item Parameter fixed when writing
147 \item Used for notifications
152 sdsFocus :: p1 (RWShared p1 r w) -> RWShared p2 r w | iTask p
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)
162 sdsLens :: String (p -> ps) (SDSLensRead p r rs) (SDSLensWrite p w rs ws) (SDSLensNotify p w rs)
163 (RWShared ps rs ws) -> RWShared p r w | iTask ps
168 \frametitle{Why add IoT devices to iTasks
}
175 \frametitle{Embedded Domain Specific Language
}
176 \framesubtitle{Deep Embedding
}
180 \frametitle{Embedded Domain Specific Language (
2)
}
181 \framesubtitle{Shallow Embedding
}
185 \frametitle{Embedded Domain Specific Language (
3)
}
186 \framesubtitle{Class Based Shallow Embedding
}
192 \framesubtitle{Class Based Shallow Embedding
}
196 \frametitle{Extending mTask
}
199 \section{System Overview
}
202 \subsection{Examples
}
206 \frametitle{And ofcourse
\ldots}
209 \frametitle{And ofcourse
\ldots a demo
}