3 \frametitle{Internet of Things (IoT)
}
6 \item Devices: Arduino, ESP8266, Raspberry pi
\ldots
7 \item Peripherals: GPS, Sensors, Actuators
\ldots
8 \item Wearables: Smart clothing, smart watches
\ldots
9 \item Connectivity: LoRa (Sigfox, KPN, TTN), BTLE, WiFi, ZigBee
\ldots
15 \begin{frame
}[fragile
]
16 \frametitle{Task Oriented Programming
}
17 \framesubtitle{\ldots and iTasks
}
21 \item Generated web interface
27 \column{.49\linewidth}
31 \item Given the state, a
\CI{TaskValue
} is observed.
32 \item Continuous execution
37 \column{.49\linewidth}
40 \includegraphics[width=
\linewidth]{fig-taskvalue
}
41 \caption{The states of a
\CI{TaskValue
}}
46 \begin{frame
}[fragile
]
47 \frametitle{Task Oriented Programming
}
48 \framesubtitle{Example
}
50 :: Name =
{ firstname :: String, lastname :: String
}
51 derive class iTask Name
53 enterInformation :: String
[EnterOption m
] -> Task m | iTask m
54 enterName :: Task Name
55 enterName = enterInformation "Enter your name"
[]
60 \begin{subfigure
}{.30\textwidth}
62 \includegraphics[width=
.9\linewidth]{taskex1
}
63 \caption{Initial interface\\~
}\label{fig:taskex1
}
65 \begin{subfigure
}{.30\textwidth}
67 \includegraphics[width=
.9\linewidth]{taskex2
}
68 \caption{Incomplete entrance
}\label{fig:taskex2
}
70 \begin{subfigure
}{.30\textwidth}
72 \includegraphics[width=
.9\linewidth]{taskex3
}
73 \caption{Complete entry\\~
}\label{fig:taskex3
}
75 \caption{Example of a generated user interface
}
79 \begin{frame
}[fragile
]
80 \frametitle{Task Oriented Programming (
3)
}
81 \framesubtitle{Combinators
}
82 \begin{block
}{Sequence
}
84 (>>=) infixl
1 :: (Task a) (a -> Task b) -> Task b | iTask a & iTask b
85 (>>*) infixl
1 :: (Task a)
[TaskCont a (Task b)
] -> Task b | iTask a & iTask b
87 = OnValue ((TaskValue a) -> Maybe b)
88 | OnAction Action ((TaskValue a) -> Maybe b)
89 | E.e: OnException (e -> b) & iTask e
90 | OnAllExceptions (String -> b)
91 :: Action = Action String
95 \begin{block
}{Parallel
}
97 (-||-) infixr
3 :: (Task a) (Task a) -> Task a | iTask a
98 ( ||-) infixr
3 :: (Task a) (Task b) -> Task b | iTask a & iTask b
99 (-|| ) infixl
3 :: (Task a) (Task b) -> Task a | iTask a & iTask b
100 (-&&-) infixr
4 :: (Task a) (Task b) -> Task (a,b) | iTask a & iTask b
105 \begin{frame
}[fragile
]
106 \frametitle{Shared Data Sources (SDS)
}
107 \begin{block
}{What is an SDS
}
108 \begin{itemize
}[<+->
]
115 :: RWShared p r w = ...
116 :: ReadWriteShared r w :== RWShared () r w
117 :: Shared r :== ReadWriteShared r r
119 get :: (ReadWriteShared r w) -> Task r | iTask r
120 set :: w (ReadWriteShared r w) -> Task w | iTask w
121 upd :: (r -> w) (ReadWriteShared r w) -> Task w | iTask r & iTask w
123 sharedStore :: String a -> Shared a | JSONEncode
{|*|
}, JSONDecode
{|*|
}
125 wait :: String (r -> Bool) (ReadWriteShared r w) -> Task r
129 \begin{frame
}[fragile
]
131 \framesubtitle{Parametric Lenses
}
132 \begin{block
}{What is the
\CI{p
} for in
\CI{RWShared p r w
}}
135 \item Parameter fixed when writing
136 \item Used for notifications
141 sdsFocus :: p1 (RWShared p1 r w) -> RWShared p2 r w | iTask p
143 :: SDSNotifyPred p :== p -> Bool
144 :: SDSLensRead p r rs = SDSRead (p -> rs -> MaybeError TaskException r)
145 | SDSReadConst (p -> r)
146 :: SDSLensWrite p w rs ws = SDSWrite (p -> rs -> w -> MaybeError TaskException (Maybe ws))
147 | SDSWriteConst (p -> w -> MaybeError TaskException (Maybe ws))
148 :: SDSLensNotify p w rs = SDSNotify (p -> rs -> w -> SDSNotifyPred p)
149 | SDSNotifyConst (p -> w -> SDSNotifyPred p)
151 sdsLens :: String (p -> ps) (SDSLensRead p r rs) (SDSLensWrite p w rs ws)
152 (SDSLensNotify p w rs) (RWShared ps rs ws) -> RWShared p r w | iTask ps
157 \frametitle{Why add IoT devices to iTasks
}
168 \begin{block
}{Current possibilities
}
170 \item Implement a device as an SDS
172 \item Tailor made SDS for every task
173 \item Difficult to get logic in
175 \item Arjan's Distributed iTasks
177 \item Requires fast hardware
184 \frametitle{Solution
}
186 \begin{block
}{EDSL to the rescue
}