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.
|
section describes the components of this application.
|
||||||
|
|
||||||
\subsubsection{Platform}
|
\subsubsection{Platform}
|
||||||
The Android paltform makes up more than half of the market share
|
The Android platform makes up more than half of the market share
|
||||||
in the United States, with a majority of the remaining share taken
|
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
|
up by Apple iOS. Because iOS requires an Apple device to perform
|
||||||
development [citation needed], and because Android devices are
|
development, and because Android devices are
|
||||||
on average more 50\% cheaper than iPhone devices, we will
|
on average more than 50\% cheaper than iPhone devices \cite{iphone-price}, we will
|
||||||
use the Android platform for developing the mobile application
|
use the Android platform for developing the mobile application
|
||||||
associated with this project.
|
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
|
% 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}
|
\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
|
for creating an Android application. The most common way for developing
|
||||||
Android apps is using the Java programming language,
|
Android apps is using the Java programming language,
|
||||||
utilizing the standard Android tooling. Such tooling includes
|
utilizing the standard Android tooling. Such tooling includes
|
||||||
the Android Studio Integrated Development Environment (IDE),
|
the Android Studio Integrated Development Environment (IDE),
|
||||||
and the Gradle build system. However, since Android's creation,
|
and the Gradle build system. However, since Android's creation,
|
||||||
multiple other ways of developing Android applications have been introduced. For
|
multiple other ways of developing Android applications have been introduced. For
|
||||||
example, technologies such as the Ionic Framework and
|
example, technologies such as the Ionic Framework \cite{ionic} and
|
||||||
React Native have been created, allowing for the creation
|
React Native \cite{react-native} have been created, allowing for the creation
|
||||||
of Android applications using the JavaScript programming
|
of Android applications using the JavaScript programming
|
||||||
language. More recently, Google announced that JetBrains' Kotlin
|
language. More recently, Google announced that JetBrains' Kotlin
|
||||||
language will be made an official language of the Android
|
language will be made an official language of the Android
|
||||||
platform.
|
platform \cite{android-kotlin}.
|
||||||
%https://ionicframework.com/
|
%https://ionicframework.com/
|
||||||
%https://facebook.github.io/react-native/
|
%https://facebook.github.io/react-native/
|
||||||
%https://www.theverge.com/2017/5/17/15654988/google-jet-brains-kotlin-programming-language-android-development-io-2017
|
%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
|
taken every 15 seconds, as well as instances of the activation
|
||||||
of the collars' sound and shock features. This way, the client
|
of the collars' sound and shock features. This way, the client
|
||||||
can monitor the locations and habits of the animals, as well
|
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
|
attempt to leave the prescribed area. Each data point will
|
||||||
be associated with the collar that produced it, such that
|
be associated with the collar that produced it, such that
|
||||||
behaviors of individual animals can be easily analyzed.
|
behaviors of individual animals can be easily analyzed.
|
||||||
|
|
||||||
\subsubsection{Storage Type}
|
\subsubsection{Storage Type}
|
||||||
An SQL database will be used for storing the data generated
|
An SQL database will be used for storing the data generated
|
||||||
by the collars. A single MariaDB server will be used to store
|
by the collars. The technology chosen for this is MariaDB.
|
||||||
the data. MariaDB was chosen because of its permissive license
|
MariaDB \cite{mariadb} was chosen because of its permissive license
|
||||||
and compatibility with MySQL, another SQL dialect that is very
|
and compatibility with MySQL \cite{mysql}, another SQL dialect that is very
|
||||||
commonly used in the industry.
|
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://mariadb.org/
|
||||||
% https://www.mysql.com/
|
% 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
|
Debian Linux operating system, but also allows for the
|
||||||
addition of hardware components, which will be used
|
addition of hardware components, which will be used
|
||||||
for communicating with collars in the field. Among the
|
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 shield, which allows the Pi to send and receive
|
||||||
LoRa signals. This is ideal since the server machine will also act as the LoRa
|
LoRa signals. This is ideal since the server machine will also act as the LoRa
|
||||||
gateway, serving as the liaison between the collars
|
gateway, serving as the liaison between the collars
|
||||||
deployed in the field and the rest of the project.
|
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/
|
% https://www.raspberrypi.org/
|
||||||
|
|
||||||
\subsection{App API Server}
|
\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
|
This is because it is rather expensive, in terms of both
|
||||||
price and complexity, to introduce two server machines
|
price and complexity, to introduce two server machines
|
||||||
for the individual tasks of SQL data storage and smartphone
|
for the individual tasks of SQL data storage and smartphone
|
||||||
app support. The server will use the Python programming
|
app support.
|
||||||
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.
|
|
||||||
|
|
||||||
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
|
application to the Android application clients. While
|
||||||
other web servers, such as Apache and nginx, are very
|
other web servers, such as Apache and nginx, are very
|
||||||
commonly deployed in production, Gunicorn has excellent
|
commonly deployed in production, Gunicorn has excellent
|
||||||
|
@ -186,7 +216,7 @@ quickly develop the HTTP application.
|
||||||
\subsubsection{Authentication}
|
\subsubsection{Authentication}
|
||||||
The mobile app will use JSON web token (JWT)
|
The mobile app will use JSON web token (JWT)
|
||||||
to allow the mobile application to make multiple requests
|
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
|
and password to the server. The idea of JWT is that
|
||||||
a JSON (JavaScript Object Notation) object, containing
|
a JSON (JavaScript Object Notation) object, containing
|
||||||
session information (such as the identity of the current user),
|
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
|
used as a "proof of identity". Since only the server can decrypt
|
||||||
the token, the user cannot deliberately make changes to it, preventing
|
the token, the user cannot deliberately make changes to it, preventing
|
||||||
security breaches. Once a user logs in, a JWT token will be generated,
|
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
|
returned to the app. The app will then use the token for further
|
||||||
requests.
|
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}
|
\subsubsection{API}
|
||||||
There are several ways of communicating data to the mobile application
|
There are several ways of communicating data to the mobile application
|
||||||
from the server. Because writing custom code to encode / decode data
|
from the server. Because writing custom code to encode / decode data
|
||||||
send between the android application (client) and the server is
|
send between the android application (client) and the server is
|
||||||
time consuming and prone to errors, priority is given to existing
|
time consuming and prone to errors, priority is given to existing
|
||||||
encoding / decoding technologies. Of these technologies, Google's
|
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,
|
for this project because of the ease with which it can be decoded,
|
||||||
as well as due to its compatibility with the JavaScript ecosystem.
|
as well as due to its compatibility with the JavaScript ecosystem.
|
||||||
Virtually every language (including Kotlin and Python) has support
|
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
|
% 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}
|
\end{document}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user