diff --git a/30_Thesis/sections/50_design_and_implementation.tex b/30_Thesis/sections/50_design_and_implementation.tex index f6afe68..1f90296 100644 --- a/30_Thesis/sections/50_design_and_implementation.tex +++ b/30_Thesis/sections/50_design_and_implementation.tex @@ -57,23 +57,16 @@ Data is stored and retrieved using a data access objects therefore the currently \subsection{Database} -The choice among database systems was between \emph{non-relational} and \emph{relational} databases. Relational databases are great at the four ACID (atomicity, consistency, isolation durability) principles. Moreover if the data structures are not changing it provides a solid basis that keeps the data reliable. A non-relational database on the other hand is ideal for rapid agile development. Moreover it shines if data requirements are not entirely clear and if a large amount of unstructured data has to be stored. Moreover non-relational databases allows the system to store the data in any kind of structure. This proves as an advantage as it allows to use the same data structure to be stored that also has to be fed out through the api. Therefore parsing methods for the api can be reused and changed upon changing requirements. Moreover the data used for the recommender is mostly not interconnected therefore a relational databases main strength the data structure doesn't really come into play here. -\subsection{Scoring Functions} +\section{Technologies} +\label{sec:DesignImplementation:Technologies} -Scoring functions are implemented in a modular fashion. There is different types of scoring functions. Some are meant for evaluating user preferences (and inherit from the class \emph{PreferenceScoringFunction}), others are meant for penalising changes in the current configuration state and therefore inheriting from \emph{ConfigurationPenalty}. The last type of scoring function is a composite scoring function that consists of one or multiple scoring functions and combines their score into one. It uses the \emph{composite} design pattern. These functions allow a flexible combination function but moreover because of their underlying structure they can use similar components. For example preference scoring functions uses a pipeline for first converting preferences to a list of values. This is done using \emph{PreferenceToListFunction}. A list can now be modified with a\emph{ListToListFunction}. This step is optional. The last mandatory step is converting the list to a value using \emph{ListToValueFunction}. After this step the value can be modified further for example with a threshold function or any other function. All these components allow the easy and quick addition of new scoring functions. A scoring function factory is used to assemble a scoring function based on input parameters. Flexibility in the scoring functions was necessary because the mechanisms for scoring had not been finalised at this point of software development. +M.Recommend is built in \emph{Python} \cite{PythonOrg} using \emph{FlaskRESTPlus} \cite{FlaskRESTPlus13Documentation}. \emph{FlaskRESTPlus} is an extension of \emph{Flask} \cite{FlaskDocumentation} that is meant to build a REST-Service and allows the generation of a web ui which documents the API. \emph{Flask} is a WSGI \cite{WhatWSGI} framework that meant to easily get started with development while maintaining the ability to scale up to complex applications. +As Database system \emph{TinyDB} \cite{TinyDB15Documentation} with the extension \emph{tinyrecord} \cite{junEugeneeeoTinyrecord2020} is used. \emph{TinyDB} is a simple well tested NoSQL database framework that can store documents that are represented as dictionaries. The extension \emph{tinyrecord} adds atomic transaction support with a record-first then execute architecture. -\subsection{Technologies} +As testing library for unittests \emph{pytest} \cite{PytestDocumentation} is used. This framework is a unit testing framework that commonly is used for python. It supports automatic test discovery. -M.Recommend is built in Python using FlaskRESTPlus. It is meant to build a REST-Service and allows the generation of a web ui which documents the API. The REST-API exposes three endpoints. +For the evaluation of data and also for some operations with lists \emph{numpy} \cite{NumPy} is used. This library is optimised for fast scientific computing. -\begin{itemize} - \item FlaskRESTPlus - \item TinyDB (with Tinyrecord) - \item Numpy - \item Matplotlib - \item jsonref - \item pytest - \item pandas -\end{itemize} \ No newline at end of file +Visualisation is done using \emph{Matplotlib} \cite{MatplotlibDocumentation} in combination with \emph{pandas} \cite{PandasPythonData}. \emph{Pandas} is a powerful framework for data analysis and manipulation tool which in the context of this thesis is used to load evaluation data. The loaded data is visualised with \emph{Matplotlib} a plotting library for python that also is compatible with numpy. \ No newline at end of file diff --git a/30_Thesis/thesis.bib b/30_Thesis/thesis.bib index d051a9d..19f5476 100644 --- a/30_Thesis/thesis.bib +++ b/30_Thesis/thesis.bib @@ -629,6 +629,20 @@ langid = {english} } +@online{FlaskDocumentation, + title = {Flask {{Documentation}} (1.1.x)}, + url = {https://flask.palletsprojects.com/en/1.1.x/}, + urldate = {2020-04-09}, + file = {C\:\\Users\\Hannes.Kuchelmeister\\Zotero\\storage\\IYAG7QV6\\1.1.x.html} +} + +@online{FlaskRESTPlus13Documentation, + title = {Flask-{{RESTPlus}} 0.13.0 Documentation}, + url = {https://flask-restplus.readthedocs.io/en/stable/}, + urldate = {2020-04-09}, + file = {C\:\\Users\\Hannes.Kuchelmeister\\Zotero\\storage\\CI5RGD28\\stable.html} +} + @inproceedings{garciaGroupRecommenderSystem2009, title = {A {{Group Recommender System}} for {{Tourist Activities}}}, booktitle = {E-{{Commerce}} and {{Web Technologies}}}, @@ -842,6 +856,16 @@ procedure.}, file = {C\:\\Users\\Hannes.Kuchelmeister\\Zotero\\storage\\3JN8DV3U\\griffin-groupthink-challenger.pdf} } +@software{junEugeneeeoTinyrecord2020, + title = {Eugene-Eeo/Tinyrecord}, + author = {Jun, Eeo}, + date = {2020-02-01T17:00:35Z}, + origdate = {2014-08-26T01:58:44Z}, + url = {https://github.com/eugene-eeo/tinyrecord}, + urldate = {2020-04-09}, + abstract = {transaction support for TinyDB. Contribute to eugene-eeo/tinyrecord development by creating an account on GitHub.} +} + @article{kerrBiasJudgmentComparing1996, title = {Bias in Judgment: {{Comparing}} Individuals and Groups.}, author = {Kerr, Norbert L and MacCoun, Robert J and Kramer, Geoffrey P}, @@ -921,6 +945,13 @@ procedure.}, isbn = {978-1-4899-7637-6} } +@online{MatplotlibDocumentation, + title = {Matplotlib 3.2.1 Documentation}, + url = {https://matplotlib.org/}, + urldate = {2020-04-09}, + file = {C\:\\Users\\Hannes.Kuchelmeister\\Zotero\\storage\\C75Q6QS8\\matplotlib.org.html} +} + @incollection{mazoRecommendationHeuristicsImproving2014, title = {Recommendation {{Heuristics}} for {{Improving Product Line Configuration Processes}}}, booktitle = {Recommendation {{Systems}} in {{Software Engineering}}}, @@ -1048,6 +1079,13 @@ procedure.}, langid = {english} } +@online{NumPy, + title = {{{NumPy}}}, + url = {https://numpy.org/}, + urldate = {2020-04-09}, + file = {C\:\\Users\\Hannes.Kuchelmeister\\Zotero\\storage\\3QGT59ZB\\numpy.org.html} +} + @inproceedings{offermannOutlineDesignScience2009, title = {Outline of a Design Science Research Process}, booktitle = {Proceedings of the 4th {{International Conference}} on {{Design Science Research}} in {{Information Systems}} and {{Technology}} - {{DESRIST}} '09}, @@ -1063,6 +1101,13 @@ procedure.}, langid = {english} } +@online{PandasPythonData, + title = {Pandas - {{Python Data Analysis Library}}}, + url = {https://pandas.pydata.org/}, + urldate = {2020-04-09}, + file = {C\:\\Users\\Hannes.Kuchelmeister\\Zotero\\storage\\FD9I7UUJ\\pandas.pydata.org.html} +} + @article{peffersDesignScienceResearch2007, title = {A {{Design Science Research Methodology}} for {{Information Systems Research}}}, author = {Peffers, Ken and Tuunanen, Tuure and Rothenberger, Marcus A. and Chatterjee, Samir}, @@ -1186,6 +1231,23 @@ procedure.}, type = {Data \& Analytics} } +@online{PytestDocumentation, + title = {Pytest Documentation}, + url = {https://docs.pytest.org/en/latest/}, + urldate = {2020-04-09}, + file = {C\:\\Users\\Hannes.Kuchelmeister\\Zotero\\storage\\EHSWVWHW\\latest.html} +} + +@online{PythonOrg, + title = {Python.Org}, + url = {https://www.python.org/}, + urldate = {2020-04-09}, + abstract = {The official home of the Python Programming Language}, + file = {C\:\\Users\\Hannes.Kuchelmeister\\Zotero\\storage\\ZKIC9FPT\\www.python.org.html}, + langid = {english}, + note = {Library Catalog: www.python.org} +} + @article{qiuInfluenceGroupConfiguration2015, title = {Influence of Group Configuration on Online Discourse Reading}, author = {Qiu, Mingzhu and McDougall, Douglas}, @@ -1479,6 +1541,13 @@ OCLC: 935904837}, number = {1} } +@online{TinyDB15Documentation, + title = {{{TinyDB}} 3.15.1 Documentation}, + url = {https://tinydb.readthedocs.io/en/latest/}, + urldate = {2020-04-09}, + file = {C\:\\Users\\Hannes.Kuchelmeister\\Zotero\\storage\\LL8TVTE9\\latest.html} +} + @book{tsangFoundationsConstraintSatisfaction1993, title = {Foundations of Constraint Satisfaction}, author = {Tsang, Edward}, @@ -1593,6 +1662,14 @@ OCLC: 935904837}, type = {Master's thesis} } +@online{WhatWSGI, + title = {What Is {{WSGI}}?}, + journaltitle = {WSGI.org}, + url = {https://wsgi.readthedocs.io/en/latest/what.html}, + urldate = {2020-04-09}, + file = {C\:\\Users\\Hannes.Kuchelmeister\\Zotero\\storage\\77YX2NJ9\\what.html} +} + @article{winterInterviewMitAlan2009, title = {Interview mit Alan R. Hevner zum Thema ,,Design Science``}, author = {Winter, Robert},