Commit e19a7e8649b99de4e7728b9799b839332fe0a7fa

Authored by Geoffrey Challen
1 parent 9330201e

Cleanup.

.ispell_english
  1 +Android
  2 +APIs
1 3 app
  4 +apps
  5 +Wifi
... ...
introduction.tex
1 1 \section{Introduction}
2 2  
3   -All programmers must deal with uncertainty about runtime environments.
4   -For example, the most appropriate algorithm for a given task may
5   -depend on inputs
6   -that are unknown when the function is written, and its performance may
7   -depend on device-specific features that are impossible for the developer to
  3 +All programmers must deal with uncertainty about runtime environments. For
  4 +example, the most appropriate algorithm for a given task may depend on inputs
  5 +that are unknown when the function is written, and its performance may depend
  6 +on device-specific features that are impossible for the developer to
8 7 anticipate. In other cases, real-world testing may be required to choose
9   -between several approaches; This has led to the popularity of so-called AB
10   -or split testing.
11   -
12   -Uncertainty is especially problematic for mobile app programmers:
13   -Specific device features, such as
14   -accurate location from GPS, may or may not be available. Networks come and go,
15   -and their properties may change, from fast and free Wifi links to slower or
16   -metered mobile data connections. Energy may be plentiful or nearly exhausted,
17   -depending on the device's battery capacity and the user's energy consumption
18   -and charging patterns. These constantly fluctuating exogenous conditions
19   -make writing effective mobile apps particularly challenging.
20   -
21   -The most typical approach to address this problem is to force the
22   -programmer to implement the required adaptation themselves.
  8 +between several approaches, which has led to the popularity of split testing.
  9 +
  10 +Uncertainty is especially problematic for mobile app programmers. Specific
  11 +device features, such as accurate GPS location, may or may not be available.
  12 +Networks come and go and their properties change: from fast and free Wifi
  13 +links to slower metered mobile data connections. Energy may be plentiful or
  14 +scarce, depending on the device's battery capacity and the user's energy
  15 +consumption and charging patterns. These constantly fluctuating exogenous
  16 +conditions make writing effective mobile apps particularly challenging.
  17 +
  18 +Today programmers are forced to anticipate these changing conditions at
  19 +development time and implement the required adaptation themselves.
23 20 Figure~\ref{fig-example-if} shows an example of an Android app attempting to
24 21 adapt to the device's battery level by establishing regular- and low-battery
25   -code paths, with the latter attempting to save energy---by utilizing a slower
26   -but more energy-efficient algorithm, computing an approximation instead of an
27   -exact result, or deferring the computation.
28   -
29   -\sloppypar{ Unfortunately, this approach has several serious weaknesses. The
30   -most important is perhaps the least obvious: It is unclear that the
31   -different code paths achieve the desired result. There may be no differences
32   -between the alternatives (neither conserves energy), the alternative
33   -designed to conserve energy may actually consume more due to bugs or
34   -incorrect assumptions, or the result may also depend on some other factor not
35   -considered by the programmer, such as the type of network the device is
36   -connected to.}
  22 +code paths, with the latter attempting to save energy, possibly by utilizing
  23 +a slower but more energy-efficient algorithm, computing an approximate
  24 +result, or deferring the computation.
  25 +
  26 +Unfortunately, this approach has several serious weaknesses. The most
  27 +important is perhaps the least obvious: it is unclear that the different code
  28 +paths achieve the desired result. There may be no differences between the
  29 +alternatives (neither conserves energy), the alternative designed to conserve
  30 +energy may actually consume more due to bugs or incorrect assumptions, or the
  31 +result may also depend on some other factor not considered by the programmer,
  32 +such as the type of network the device is currently using.
37 33  
38 34 In addition, adaptive programming frequently requires arbitrary decision
39 35 thresholds chosen before deployment. Even if the two code paths shown in
... ... @@ -51,15 +47,15 @@ if (plugged == false && batteryLevel < 10) {
51 47 }
52 48 \end{minted}
53 49  
54   -\vspace*{-0.2in}
  50 +\vspace*{-0.1in}
55 51  
56   -\caption{\textbf{Typical Error-prone Energy Adaptation.} The threshold is
57   -arbitrary and the attempt to conserve energy may not work sometimes, for some
58   -users, or at all.}
  52 +\caption{\textbf{Typical Error-Prone Energy Adaptation.} The threshold is
  53 +arbitrary and the attempt to conserve energy succeed only at certain times,
  54 +only for certain users, only on certain devices, or never.}
59 55  
60 56 \label{fig-example-if}
61 57  
62   -\vspace*{-0.2in}
  58 +\vspace*{-0.1in}
63 59  
64 60 \end{figure}
65 61  
... ... @@ -70,14 +66,14 @@ these common tasks require writing large amounts of error-prone boilerplate
70 66 code, including APIs to adjust values at runtime and code to retrieve
71 67 settings from remote servers.
72 68  
73   -The root of the problem is that when it comes to the scope and effects of
74   -exogenous runtime conditions, \textbf{today's languages force programmers
75   -to be certain at a moment when they cannot be}, at compile time.
76   -This weakness is only exacerbated by the amount of variation across different
77   -mobile devices. Our solution is simple: (1) Provide developers with a
78   -way to express structured uncertainty as sets of equivalent options,
79   -and (2) Use this structure to enable a robust array of downstream tools for
80   -resolving uncertainty by selecting among options provided by the developer.
  69 +The root of the problem is that \textbf{today's languages force programmers to
  70 +be certain at a moment when they cannot be}: at development time. While this
  71 +problem is endemic to existing programming languages, when developing mobile
  72 +apps it is magnified by the amount of variation developers must confront. Our
  73 +solution is simple: (1) provide developers with a way to express
  74 +\textit{structured uncertainty}, and (2) use the resulting flexibility to
  75 +enable a large array of downstream tools for resolving uncertainty by
  76 +choosing from the alternatives provided by the developer.
81 77  
82 78 \begin{figure}[t]
83 79  
... ... @@ -91,31 +87,30 @@ maybe {
91 87  
92 88 \vspace*{-0.2in}
93 89  
94   -\caption{\textbf{Example Use of the \texttt{maybe} Statement.} }
  90 +\caption{\textbf{Example \texttt{maybe} Statement}}
95 91 \label{fig-example-maybe}
96 92  
97 93 \vspace*{-0.2in}
98 94  
99 95 \end{figure}
100 96  
101   -In this paper, we focus on the challenge of providing developers with
102   -a language construct for expressing structured uncertainty: The
103   -\texttt{maybe} statement. \texttt{maybe} statements allow programmers to
104   -express sets of equivalent options for both data and control-flow.
105   -Figure~\ref{fig-example-maybe} shows a simple case of a \texttt{maybe} case
106   -statement applied to our earlier example. Instead of being forced to choose,
107   -being forced to attempt to implement the decision process, or even required
108   -to evaluate multiple options, the programmer is free to offer two or more
109   -alternatives that are different but both correct, although one may be
110   -preferable. At runtime only one will be used during any given execution, with
111   -the system choosing the alternative that saves energy when it is appropriate
112   -to do so. Note that the branch that a \texttt{maybe} statement takes
113   -is not random; Rather, it tries to make the best choice and not just any choice.
  97 +In this paper, we present a novel a language construct for expressing
  98 +structured uncertainty: the \texttt{maybe} statement. \texttt{maybe}
  99 +statements allow programmers to express sets of equivalent alternatives for
  100 +both data and control-flow. Figure~\ref{fig-example-maybe} shows a simple
  101 +case of a \texttt{maybe} case statement applied to our earlier example.
  102 +Instead of being forced to choose, being forced to attempt to implement the
  103 +decision process, or even required to evaluate multiple alternatives, the
  104 +programmer is free to offer two or more alternatives that are different but
  105 +both correct, although one may be preferable. At runtime only one will be
  106 +used during any given execution, with the system both determining the energy
  107 +tradeoffs produced by multiple alternatives and activating energy-saving
  108 +alternatives when appropriate.
114 109  
115 110 How that choice is made is discussed in the remainder of our paper. We begin
116 111 by providing a more complete description of the \texttt{maybe} statement in
117   -Section~\ref{sec-maybe}. Section~\ref{sec-certainty} describes several
118   -techniques for collapsing compile-time uncertainty into the required runtime
119   -certainty. We continue by
120   -briefly describing several example use cases in Section~\ref{sec-usage} and related work in Section~\ref{sec-related}.
121   -We conclude in Section~\ref{sec-conclusion}.
  112 +Section~\ref{sec-maybe}. Section~\ref{sec-certainty} describes several
  113 +techniques for collapsing compile-time uncertainty into the required runtime
  114 +certainty. We continue by briefly describing several example use cases in
  115 +Section~\ref{sec-usage} and related work in Section~\ref{sec-related}. We
  116 +conclude in Section~\ref{sec-conclusion}.
... ...
maybe.tex
1 1 \section{\texttt{\large maybe} Statement Semantics}
2 2 \label{sec-maybe}
3 3  
4   -\sloppypar{To begin, we provide a brief overview of the semantics of the
5   -\texttt{maybe} statement, describing how it can express structured
6   -uncertainty in variable values and runtime execution. We refer to each of the
7   -values a \texttt{maybe} variable can take and each of the a paths a
8   -\texttt{maybe} code block can execute as an \textit{alternative}.
  4 +To begin, we provide a brief overview of the semantics of the \texttt{maybe}
  5 +statement, describing how it can express structured uncertainty in variable
  6 +values and runtime execution. We refer to each of the values a \texttt{maybe}
  7 +variable can take and each of the a paths a \texttt{maybe} code block can
  8 +execute as an \textit{alternative}.
  9 +
  10 +Note that structured uncertainty is not randomness. The \texttt{maybe}
  11 +statement indicates that during any given execution one alternative may be
  12 +better than the others---even if the developer or system are not sure which
  13 +alternative to use.
9 14  
10 15 \begin{figure}[t]
11 16 \begin{minted}[fontsize=\footnotesize]{java}
... ... @@ -51,17 +56,10 @@ else { cleanUpAfterSlowAlg(ret); }
51 56  
52 57 Variables can be used to represent uncertainty. Examples include an integer
53 58 storing how often a timer should trigger communication with a remote server,
54   -or a string containing the name of a policy used to coordinate multiple
55   -code blocks through the app.
56   -% Note that at present the \texttt{maybe}
57   -% statement controlling code blocks described below does not include features
58   -% required to coordinate multiple code blocks, and so if this functionality is
59   -% required, multiple \texttt{if-else} statements branching on a
60   -%\texttt{maybe}-derived variable can be used.
61   -Figure~\ref{fig-maybeexamples}
62   -shows examples of an integer that can take on values between 1 and 16, and a
63   -string that be set to either ``auto'', ``quality'', or ``perf''.
64   -A s
  59 +or a string containing the name of a policy used to coordinate multiple code
  60 +blocks through the app. Figure~\ref{fig-maybeexamples} shows examples of an
  61 +integer that can take on values between 1 and 16, and a string that be set to
  62 +either ``auto'', ``quality'', or ``perf''.
65 63  
66 64 \subsection{Controlling Code Flow}
67 65  
... ...