From a4bb863836abcafe5b813b14233a24228dc4198e Mon Sep 17 00:00:00 2001 From: Mart Lubbers Date: Mon, 21 Nov 2022 19:31:35 +0100 Subject: [PATCH] updates --- intro/img/.gitignore | 1 + intro/img/Makefile | 2 + intro/img/person0.jpg | Bin 7454 -> 18082 bytes intro/img/person0g.jpg | Bin 6605 -> 0 bytes intro/img/person1.jpg | Bin 8966 -> 21577 bytes intro/img/person1g.jpg | Bin 7991 -> 0 bytes intro/img/person2.jpg | Bin 5818 -> 15447 bytes intro/img/person2g.jpg | Bin 5189 -> 0 bytes intro/intro.tex | 108 ++++++++++++++++++++++------------------- intro/iot-layers.tex | 8 +-- intro/tosd.tex | 2 +- intro/traditional.tex | 6 +-- 12 files changed, 69 insertions(+), 58 deletions(-) create mode 100644 intro/img/.gitignore create mode 100644 intro/img/Makefile delete mode 100644 intro/img/person0g.jpg delete mode 100644 intro/img/person1g.jpg delete mode 100644 intro/img/person2g.jpg diff --git a/intro/img/.gitignore b/intro/img/.gitignore new file mode 100644 index 0000000..ddcb517 --- /dev/null +++ b/intro/img/.gitignore @@ -0,0 +1 @@ +*g.jpg diff --git a/intro/img/Makefile b/intro/img/Makefile new file mode 100644 index 0000000..2447e28 --- /dev/null +++ b/intro/img/Makefile @@ -0,0 +1,2 @@ +%g.jpg: %.jpg + convert $< -set colorspace Gray -separate -average $@ diff --git a/intro/img/person0.jpg b/intro/img/person0.jpg index 885d791db1ca25098ec4f30254ae256227c67555..ef9a0ccfc60ef3a22cb38ccbb47ed6186f27be9e 100644 GIT binary patch literal 18082 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%0D9lhN*aCFPf8|FD7hF$2;5uI4g2} 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 U?R(;(%J`1YHAXgPAMCUL178=tR{#J2 literal 7454 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 E2atB@0{{R3 diff --git a/intro/img/person1.jpg b/intro/img/person1.jpg index 7a5d8121e8081578330042e1a9d6951fe69548f8..07f5e7b13de295cac845546d68a63164671cdba2 100644 GIT binary patch literal 21577 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 I{CetN0ECnDh5!Hn diff --git a/intro/img/person2.jpg b/intro/img/person2.jpg index 311eb93219f235f85d70cb3107881c5ad722569b..a5547d7ae5673e1b4b2a31597fa689ddd80d4abb 100644 GIT binary patch literal 15447 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 at \cref{lst:task_comb}), the tasks can be combined in sequence. -Only when the user entered a complete value in the web editor, then the continue button enables and the result can be viewed. -Special combinators (e.g.\ \cleaninline{@>>} at \cref{lst:task_ui}) are available to tweak the \gls{UI} afterwards. +Using task combinators (e.g.\ \cleaninline{>>!} at \cref{lst:task_comb}), the tasks can be combined in sequence. +Only when the user enters a complete value in the web editor, then the continue button enables and the result can be viewed. +Special combinators (e.g.\ \cleaninline{@>>} at \cref{lst:task_ui}) are used to tweak the \gls{UI} so that informative labels are displayed. \begin{figure}[ht] \includegraphics[width=.325\linewidth]{person0g} @@ -233,7 +239,7 @@ Special combinators (e.g.\ \cleaninline{@>>} at \cref{lst:task_ui}) are availabl \label{fig:enter_person} \end{figure} -\begin{lstClean}[numbers=left,caption={The \gls{UI} and code for entering a person in \gls{ITASK}.},label={lst:enter_person}] +\begin{lstClean}[numbers=left,caption={The code for entering a person in \gls{ITASK}.},label={lst:enter_person}] :: Person = { name :: String, gender :: Gender, dateOfBirth :: Date }[+\label{lst:dt_fro}+] :: Gender = Male | Female | Other String[+\label{lst:dt_to}+] @@ -245,28 +251,30 @@ enterPerson >>! \result->Hint "You Entered:" @>> viewInformation [] result[+\label{lst:task_comb}+] \end{lstClean} -Functional languages are excellent hosts for \gls{TOP} language -\Gls{ITASK} is embedded in a functional language - \subsection{\texorpdfstring{\Gls{MTASK}}{MTask}} +\todo[inline]{Describe problem with iTask for the IoT.} This thesis uses \gls{ITASK} in conjunction with \gls{MTASK}, an innovative \gls{TOP} language designed for defining interactive systems for \gls{IOT} edge devices \citep{koopman_task-based_2018}. -Where \gls{ITASK} abstracts away from details such as user interfaces, data storage, client-side platforms, and persistent workflows. -On the other hand, \gls{MTASK} offers abstractions for edge layer-specific details such as the heterogeneity of architectures, platforms and frameworks; peripheral access; (multi) task scheduling; and lowering energy consumption. -The \gls{MTASK} language is written in \gls{CLEAN} as a multi-view \gls{EDSL} and hence there are multiple interpretations of the language of which the byte code compiler is the most relevant for this thesis. -From \gls{MTASK} term constructed at runtime, a very compact binary representation of the work that needs to be done is compiled. -This byte code is then sent to a device that running the \gls{MTASK} \gls{RTS}, a domain-specific \gls{TOP} engine implemented as a feather-light domain-specific \gls{OS}. +\Gls{ITASK} abstracts away from details such as user interfaces, data storage, client-side platforms, and persistent workflows. +On the other hand, \gls{MTASK} offers abstractions for edge layer-specific details such as the heterogeneity of architectures, platforms, and frameworks; peripheral access; (multi) task scheduling; and lowering energy consumption. +The \gls{MTASK} language is written in \gls{CLEAN} as a multi-view \gls{EDSL} and hence there are multiple interpretations possible. +The byte code compiler is the most relevant for this thesis. +From an \gls{MTASK} task constructed at runtime, a compact binary representation of the work that needs to be done is compiled. +This byte code is then sent to a device that running the \gls{MTASK} \gls{RTS}. +This feather-light domain-specific \gls{OS} is written in portable \gls{C} with a minimal device specific interface and functions as a \gls{TOP} engine. \Gls{MTASK} is seamlessly integrated with \gls{ITASK}: \gls{MTASK} tasks are integrated in such a way that they function as \gls{ITASK} tasks, and \glspl{SDS} in on the device can tether an \gls{ITASK} \gls{SDS}. -Using \gls{MTASK}, the programmer defines all layers of an \gls{IOT} system as a single declarative specification. +Using \gls{MTASK}, the programmer can define all layers of an \gls{IOT} system as a single declarative specification. \todo[inline]{Is this example useful? I think it's too technical} \Cref{lst:intro_blink} shows an interactive \gls{MTASK}\slash{}\gls{ITASK} application for blinking \pgls{LED} on the microcontroller every user-specified interval. \Crefrange{lst:intro:itask_fro}{lst:intro:itask_to} show the \gls{ITASK} part. -First a \gls{SDS} is defined to communicate the blinking interval, then the \gls{MTASK} is connected using \cleaninline{withDevice}. -Once connected, the \cleaninline{intBlink} task is sent to the device (\cref{lst:intro_liftmtask}) and in parallel, the value of the interval \gls{SDS} can be updated using an editor (\cref{lst:intro_editor}). -The \cleaninline{intBlink} task (\crefrange{lst:intro:mtask_fro}{lst:intro:mtask_to}) is the \gls{MTASK} part of the application that has its own tasks, \glspl{SDS}, and \gls{UOD}. -This task first defines \gls{GPIO} pin 13 to be of the output type (\cref{lst:intro:declarePin}) followed by lifting the \gls{ITASK} \gls{SDS} to an \gls{MTASK} \gls{SDS} (\cref{lst:intro:liftsds}). -The main expression of the program calls the \cleaninline{blink} function with the initial state. +First \pgls{SDS} is defined to communicate the blinking interval, then the \gls{MTASK} is connected using \cleaninline{withDevice}. +Once connected, the \cleaninline{intBlink} task is sent to the device (\cref{lst:intro_liftmtask}) and, in parallel, an editor is shown that updates the value of the interval \gls{SDS} (\cref{lst:intro_editor}). +The \cleaninline{intBlink} task (\crefrange{lst:intro:mtask_fro}{lst:intro:mtask_to}) is the \gls{MTASK} part of the application. +It has its own tasks, \glspl{SDS}, and \gls{UOD}. +This task first defines \gls{GPIO} pin 13 to be of the output type (\cref{lst:intro:declarePin}), followed by lifting the \gls{ITASK} \gls{SDS} to an \gls{MTASK} \gls{SDS} (\cref{lst:intro:liftsds}). +The main expression of the program calls the \cleaninline{blink} function with an initial state. This function on \crefrange{lst:intro:blink_fro}{lst:intro:blink_to} first reads the interval \gls{SDS}, waits the specified delay, writes the state to the \gls{GPIO} pin and calls itself recursively using the inverse of the state. +\todo[inline]{conclude} \begin{lstClean}[numbers=left,caption={\Gls{MTASK}\slash{}\gls{ITASK} interactive blinking.},label={lst:intro_blink}] interactiveBlink :: Task Int[+\label{lst:intro:itask_fro}+] diff --git a/intro/iot-layers.tex b/intro/iot-layers.tex index 06298c0..7e488d1 100644 --- a/intro/iot-layers.tex +++ b/intro/iot-layers.tex @@ -4,10 +4,10 @@ \begin{tikzpicture}[node distance=3em,nodes={rectangle,draw,minimum width=12em}] % \node (0) [dotted] {Business layer}; % \node (1) [below=of 0] {Presentation layer}; - \node (1) [] {Presentation layer}; - \node (2) [below=of 1] {Application layer}; + \node (1) [] {Presentation}; + \node (2) [below=of 1] {Application}; % \node (3) [below=of 2] {Network layer}; - \node (3) [below=of 2] {Perception layer}; + \node (3) [below=of 2] {Perception}; \draw [<->] (1) -- (2); \draw [<->] (2) -- (3); @@ -18,7 +18,7 @@ -- ([yshift=-1em,xshift=1em]1.south east) -- ([xshift=1em]1.north east) -- ([xshift=3em]1.north east) - -- node [draw=none,midway,sloped,below,yshift=-2pt] {Network layer} ([xshift=3em]3.south east) + -- node [draw=none,midway,sloped,below,yshift=-2pt] {Network} ([xshift=3em]3.south east) -- ([xshift=1em]3.south east) -- ([yshift=1em,xshift=1em]3.north east) -- ([xshift=1em,yshift=1em]3.north west) diff --git a/intro/tosd.tex b/intro/tosd.tex index 3fbee44..64b332d 100644 --- a/intro/tosd.tex +++ b/intro/tosd.tex @@ -13,7 +13,7 @@ 25/\textcolor{black}{UI}, 25/\textcolor{black}{Tasks}, 25/\textcolor{white}{UoD}, - 25/\textcolor{white}{SDS} + 25/\textcolor{white}{SDSs} } \node [draw,fill=white,circle]{Types}; \end{tikzpicture} diff --git a/intro/traditional.tex b/intro/traditional.tex index 39f678b..8c6404c 100644 --- a/intro/traditional.tex +++ b/intro/traditional.tex @@ -2,9 +2,9 @@ \usetikzlibrary{positioning} \begin{document} \begin{tikzpicture}[node distance=1em,nodes={rectangle,draw,minimum width=10em,minimum height=2.5em}] - \node (0) [fill=black!20,text=black] {Presentation layer}; - \node (1) [fill=black!40,text=black,below=of 0] {Business layer}; - \node (2) [fill=black!80,text=white,below=of 1] {Resource access layer}; + \node (0) [fill=black!20,text=black] {Presentation}; + \node (1) [fill=black!40,text=black,below=of 0] {Business}; + \node (2) [fill=black!80,text=white,below=of 1] {Resource access}; \draw [<->] (0) -- (1); \draw [<->] (1) -- (2); -- 2.20.1