Update techreview
This commit is contained in:
parent
a6124db2bd
commit
8f74990a79
127
techreview.latex
127
techreview.latex
|
@ -53,30 +53,30 @@ the settings of the wireless collar devices. This
|
|||
section describes the components of this application.
|
||||
|
||||
\subsubsection{Platform}
|
||||
The Android paltform makes up more than half of the market share
|
||||
in the United States, with a majority of the remaining share taken
|
||||
The Android platform makes up more than half of the market share
|
||||
in the United States \cite{android-share}, with a majority of the remaining share taken
|
||||
up by Apple iOS. Because iOS requires an Apple device to perform
|
||||
development [citation needed], and because Android devices are
|
||||
on average more 50\% cheaper than iPhone devices, we will
|
||||
development, and because Android devices are
|
||||
on average more than 50\% cheaper than iPhone devices \cite{iphone-price}, we will
|
||||
use the Android platform for developing the mobile application
|
||||
associated with this project.
|
||||
% Source https://www.businessinsider.com/android-stops-us-market-share-decline-2013-5
|
||||
% https://www.businessinsider.com/android-stops-us-market-share-decline-2013-5
|
||||
% https://www.forbes.com/sites/amitchowdhry/2015/02/03/average-iphone-price-increases-to-687-and-android-decreases-to-254-says-report/#4d9d29a3539e
|
||||
|
||||
\subsubsection{Language}
|
||||
There exists a variety of available technolgoies and techniques suitable
|
||||
There exists a variety of available technologies and techniques suitable
|
||||
for creating an Android application. The most common way for developing
|
||||
Android apps is using the Java programming language,
|
||||
utilizing the standard Android tooling. Such tooling includes
|
||||
the Android Studio Integrated Development Environment (IDE),
|
||||
and the Gradle build system. However, since Android's creation,
|
||||
multiple other ways of developing Android applications have been introduced. For
|
||||
example, technologies such as the Ionic Framework and
|
||||
React Native have been created, allowing for the creation
|
||||
example, technologies such as the Ionic Framework \cite{ionic} and
|
||||
React Native \cite{react-native} have been created, allowing for the creation
|
||||
of Android applications using the JavaScript programming
|
||||
language. More recently, Google announced that JetBrains' Kotlin
|
||||
language will be made an official language of the Android
|
||||
platform.
|
||||
platform \cite{android-kotlin}.
|
||||
%https://ionicframework.com/
|
||||
%https://facebook.github.io/react-native/
|
||||
%https://www.theverge.com/2017/5/17/15654988/google-jet-brains-kotlin-programming-language-android-development-io-2017
|
||||
|
@ -122,17 +122,26 @@ The data collected will consist of GPS coordinates of the animal,
|
|||
taken every 15 seconds, as well as instances of the activation
|
||||
of the collars' sound and shock features. This way, the client
|
||||
can monitor the locations and habits of the animals, as well
|
||||
as quantatively assess the number of items that the animals
|
||||
as quantitatively assess the number of items that the animals
|
||||
attempt to leave the prescribed area. Each data point will
|
||||
be associated with the collar that produced it, such that
|
||||
behaviors of individual animals can be easily analyzed.
|
||||
|
||||
\subsubsection{Storage Type}
|
||||
An SQL database will be used for storing the data generated
|
||||
by the collars. A single MariaDB server will be used to store
|
||||
the data. MariaDB was chosen because of its permissive license
|
||||
and compatibility with MySQL, another SQL dialect that is very
|
||||
commonly used in the industry.
|
||||
by the collars. The technology chosen for this is MariaDB.
|
||||
MariaDB \cite{mariadb} was chosen because of its permissive license
|
||||
and compatibility with MySQL \cite{mysql}, another SQL dialect that is very
|
||||
commonly used in the industry. There exist other technologies
|
||||
for storage, such as MongoDB, which do not use the relational
|
||||
model used by SQL-based databases. The advantage of NoSQL databases
|
||||
is the ability to store data in arbitrary formats, without
|
||||
specifying prior schema. On the other hand, SQL-based
|
||||
systems (including MySQL and MariaDB) support concurrency,
|
||||
which is much more useful for our project due to the future
|
||||
need to scale the fenceless grazing system. Additionally,
|
||||
we already know the format of our data, making the benefit
|
||||
of flexible data storage irrelevant to our use case.
|
||||
|
||||
% https://mariadb.org/
|
||||
% https://www.mysql.com/
|
||||
|
@ -145,12 +154,25 @@ computer. This computer not only has a full-featured
|
|||
Debian Linux operating system, but also allows for the
|
||||
addition of hardware components, which will be used
|
||||
for communicating with collars in the field. Among the
|
||||
hardware components compatible with the Raspberry Pi is a
|
||||
hardware components compatible with the Raspberry Pi \cite{raspi} is a
|
||||
LoRa shield, which allows the Pi to send and receive
|
||||
LoRa signals. This is ideal since the server machine will also act as the LoRa
|
||||
gateway, serving as the liaison between the collars
|
||||
deployed in the field and the rest of the project.
|
||||
|
||||
Alternative implementations include an AVR-based microcontroller
|
||||
equipped with ethernet and / or Bluetooth. Such a controller
|
||||
would be integrated with a LoRa receiver and transmitter,
|
||||
and programmed to send data to some other storage medium,
|
||||
potentially a Virtual Private Server (VPS). This
|
||||
implementation was dismissed due to the additional
|
||||
complexity introduced by separating the LoRa receiver
|
||||
and transmitter from the storage medium. This leaves
|
||||
room for issues such as network errors between
|
||||
LoRa and the SQL machine, which are entirely
|
||||
avoided my using a Linux machine (Raspberry Pi) with support
|
||||
for external hardware components (LoRa shield).
|
||||
|
||||
% https://www.raspberrypi.org/
|
||||
|
||||
\subsection{App API Server}
|
||||
|
@ -167,13 +189,21 @@ The server will run on the aforementioned Linux machine.
|
|||
This is because it is rather expensive, in terms of both
|
||||
price and complexity, to introduce two server machines
|
||||
for the individual tasks of SQL data storage and smartphone
|
||||
app support. The server will use the Python programming
|
||||
language, which is natively supportd by the Raspberry Pi,
|
||||
to host an HTTP(s) server on the local network. The
|
||||
use of Python will allow for rapid development, as give
|
||||
direct access to the server's LoRa hardware.
|
||||
app support.
|
||||
|
||||
The Gunicorn server will be used to expose the Python
|
||||
The server will use the Python \cite{python} programming
|
||||
language, which is natively supported by the Raspberry Pi,
|
||||
to host an HTTP(S) server on the local network. The
|
||||
use of Python will allow for rapid development, and give
|
||||
direct access to the server's LoRa hardware. While other
|
||||
languages, such as Go, are also commonly used for API
|
||||
implementations, they lack the first-class support that
|
||||
Python receives from the Raspberry Pi project. Additionally,
|
||||
Python is currently at the top of the popularity rankings
|
||||
for programming languages, leading to increased access
|
||||
to documentation and support.
|
||||
|
||||
The Gunicorn \cite{gunicorn} server will be used to expose the Python
|
||||
application to the Android application clients. While
|
||||
other web servers, such as Apache and nginx, are very
|
||||
commonly deployed in production, Gunicorn has excellent
|
||||
|
@ -186,7 +216,7 @@ quickly develop the HTTP application.
|
|||
\subsubsection{Authentication}
|
||||
The mobile app will use JSON web token (JWT)
|
||||
to allow the mobile application to make multiple requests
|
||||
without having to continously provide a username
|
||||
without having to continuously provide a username
|
||||
and password to the server. The idea of JWT is that
|
||||
a JSON (JavaScript Object Notation) object, containing
|
||||
session information (such as the identity of the current user),
|
||||
|
@ -195,17 +225,29 @@ version of this object is then sent to the user, and can be
|
|||
used as a "proof of identity". Since only the server can decrypt
|
||||
the token, the user cannot deliberately make changes to it, preventing
|
||||
security breaches. Once a user logs in, a JWT token will be generated,
|
||||
containing the identity of the user and an experiation date, and
|
||||
containing the identity of the user and an expiration date, and
|
||||
returned to the app. The app will then use the token for further
|
||||
requests.
|
||||
|
||||
Cookie-based authentication systems were considered as an alternative;
|
||||
This is commonly used in web applications, serving as a different
|
||||
way to avoid authentication on every API or web request. However,
|
||||
this approach will not generalize well. Using cookie or session-based
|
||||
authentication requires more extensive bookkeeping on the client side, which
|
||||
complicates the implementation of other clients. In the future, it is
|
||||
likely that the smart application will be ported to other platforms,
|
||||
including iOS and Web. To ease this expansion, the approach
|
||||
requiring the least additional implementation overhead is preferred.
|
||||
Because of this criterion, JWT-based authentication is better suited
|
||||
for the API server.
|
||||
|
||||
\subsubsection{API}
|
||||
There are several ways of communicating data to the mobile application
|
||||
from the server. Because writing custom code to encode / decode data
|
||||
send between the android application (client) and the server is
|
||||
time consuming and prone to errors, priority is given to existing
|
||||
encoding / decoding technologies. Of these technologies, Google's
|
||||
ProtoBuf, XML, and JSON are the most viable. JSON was chosen
|
||||
ProtoBuf \cite{protobuf}, XML, and JSON are the most viable. JSON was chosen
|
||||
for this project because of the ease with which it can be decoded,
|
||||
as well as due to its compatibility with the JavaScript ecosystem.
|
||||
Virtually every language (including Kotlin and Python) has support
|
||||
|
@ -220,4 +262,41 @@ through HTTP containing the resulting data.
|
|||
|
||||
% https://developers.google.com/protocol-buffers
|
||||
|
||||
\pagebreak
|
||||
\begin{thebibliography}{99}
|
||||
|
||||
\bibitem{android-share}Alex Cocotas, \textit{Android Bounces Back From U.S. Market Share Decline} \\
|
||||
\texttt{https://www.businessinsider.com/android-stops-us-market-share-decline-2013-5}
|
||||
|
||||
\bibitem{iphone-price}Amit Chowdhry, \textit{Average iPhone Price Increases To $687 And Android Decreases To $254, Says Report} \\
|
||||
\texttt{https://www.forbes.com/sites/amitchowdhry/2015/02/03/average-iphone-price-increases-to-687-and-android-decreases-to-254-says-report/\#437c18ac539e}
|
||||
|
||||
\bibitem{ionic}\textit{Ionic Framework} \\
|
||||
\texttt{https://ionicframework.com/}
|
||||
|
||||
\bibitem{react-native}\textit{React Native} \\
|
||||
\texttt{https://facebook.github.io/react-native/}
|
||||
|
||||
\bibitem{android-kotlin}Paul Miller, \textit{Google is adding Kotlin as an official programming language for Android development} \\
|
||||
\texttt{https://www.theverge.com/2017/5/17/15654988/google-jet-brains-kotlin-programming-language-android-development-io-2017}
|
||||
|
||||
\bibitem{mariadb}\textit{MariaDB} \\
|
||||
\texttt{https://mariadb.org/}
|
||||
|
||||
\bibitem{mysql}\textit{MySQL} \\
|
||||
\texttt{https://www.mysql.com/}
|
||||
|
||||
\bibitem{raspi}\textit{Raspberry Pi} \\
|
||||
\texttt{https://www.raspberrypi.org/}
|
||||
|
||||
\bibitem{python}\textit{Python} \\
|
||||
\texttt{https://www.python.org/}
|
||||
|
||||
\bibitem{gunicorn}\textit{GUnicorn} \\
|
||||
\texttt{https://gunicorn.org/}
|
||||
|
||||
\bibitem{protobuf}\textit{Protocol Buffer} \\
|
||||
\texttt{https://developers.google.com/protocol-buffers}
|
||||
\end{thebibliography}
|
||||
|
||||
\end{document}
|
||||
|
|
Loading…
Reference in New Issue
Block a user