From 37289a5c9ab83c001a6b71adda5fcfbe7f3b53f4 Mon Sep 17 00:00:00 2001 From: Clemens Klug Date: Tue, 13 Mar 2018 18:33:59 +0100 Subject: [PATCH] t: incorporate p0, add dockerizations --- ThesTeX/.gitignore | 1 + ThesTeX/code/biogames/Dockerfile | 30 +++++++++ ThesTeX/code/biogames/docker-compose.yml | 48 ++++++++++++++ ThesTeX/code/biogames/start.sh | 15 +++++ ThesTeX/code/kibana-docker-compose.yml | 22 +++++++ ThesTeX/code/traefik.yml | 16 +++++ ThesTeX/content/0-introduction.tex | 33 +++++++--- ThesTeX/content/1-scope.tex | 56 +++++++---------- ThesTeX/content/2-state-of-the-art.tex | 66 ++++++++++++++++++++ ThesTeX/content/3-solution.tex | 79 ++++++++++++------------ ThesTeX/content/4-implementation.tex | 45 ++++++++++++++ ThesTeX/content/appendix.tex | 8 +++ ThesTeX/content/outline.tex | 17 +++-- ThesTeX/images/biogames.dot | 11 ++++ ThesTeX/thesis.tex | 4 +- meta/config/commands.tex | 2 +- 16 files changed, 366 insertions(+), 87 deletions(-) create mode 100644 ThesTeX/code/biogames/Dockerfile create mode 100644 ThesTeX/code/biogames/docker-compose.yml create mode 100755 ThesTeX/code/biogames/start.sh create mode 100644 ThesTeX/code/kibana-docker-compose.yml create mode 100644 ThesTeX/code/traefik.yml create mode 100644 ThesTeX/content/4-implementation.tex create mode 100644 ThesTeX/content/appendix.tex create mode 100644 ThesTeX/images/biogames.dot diff --git a/ThesTeX/.gitignore b/ThesTeX/.gitignore index b4626d9..934e744 100644 --- a/ThesTeX/.gitignore +++ b/ThesTeX/.gitignore @@ -25,3 +25,4 @@ .prepared # nano swap files *.swp +*.lol diff --git a/ThesTeX/code/biogames/Dockerfile b/ThesTeX/code/biogames/Dockerfile new file mode 100644 index 0000000..44ef638 --- /dev/null +++ b/ThesTeX/code/biogames/Dockerfile @@ -0,0 +1,30 @@ +FROM alpine:edge + +RUN set -ex &&\ + echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing/" >> /etc/apk/repositories && \ + apk upgrade --update &&\ + apk add --update nodejs proj4-dev \ + geos-dev \ + py-geos \ + gdal \ + gdal-dev \ + py-gdal \ + py-psycopg2 \ + jpeg-dev \ + postgresql-dev \ + bash \ + py-virtualenv \ + gcc \ + zlib-dev \ + python2-dev \ + libc-dev \ + sqlite-dev \ + postgresql-client + +ADD ["start.sh", "/"] + +VOLUME ["/biogames", "/venv"] +EXPOSE 8000 + +ENTRYPOINT ["/start.sh"] +CMD ["runserver", "0.0.0.0:8000"] diff --git a/ThesTeX/code/biogames/docker-compose.yml b/ThesTeX/code/biogames/docker-compose.yml new file mode 100644 index 0000000..139d666 --- /dev/null +++ b/ThesTeX/code/biogames/docker-compose.yml @@ -0,0 +1,48 @@ +version: "3" + +services: + web: + build: ./docker2 + image: biogames:python2 + volumes: + - ./biogames:/biogames + - ../gamefield/:/gamefield + - ./venv_web/:/venv/ + - ./gg-data/files/:/biogames/files/ + - ./gg-data/media/:/biogames/media/ + restart: on-failure:5 + depends_on: + - db + networks: + - traefik_net + - default + labels: + - "traefik.enable=true" + - "traefik.port=8000" + - "traefik.docker.network=traefik_net" + - "traefik.http.frontend.rule=Host:biogames.potato.kinf.wiai.uni-bamberg.de" + + celery: + image: biogames:python2 + volumes: + - ./biogames:/biogames + - ./venv_celery/:/venv/ + - ./gg-data/files/:/biogames/files/ + - ./gg-data/media/:/biogames/media/ + restart: on-failure:5 + command: ["celery", "worker"] + depends_on: + - db + + db: + image: docker.clkl.de/postgis:9.6-alpine + volumes: + - ./postgres/:/var/lib/postgresql/data + environment: + - POSTGRES_PASSWORD=secret + restart: on-failure:5 + +networks: + traefik_net: + external: + name: traefik_net diff --git a/ThesTeX/code/biogames/start.sh b/ThesTeX/code/biogames/start.sh new file mode 100755 index 0000000..cda3e30 --- /dev/null +++ b/ThesTeX/code/biogames/start.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +if [ ! -f /venv/bin/activate ]; then + virtualenv /venv; +fi; +source /venv/bin/activate; +LIBRARY_PATH=/lib:/usr/lib pip install -qr /biogames/requirements.txt; + +until pg_isready -qh db; do + echo "Waiting for Postgres@db…"; + sleep 1; +done + +cd /biogames; +/biogames/manage.py $@ \ No newline at end of file diff --git a/ThesTeX/code/kibana-docker-compose.yml b/ThesTeX/code/kibana-docker-compose.yml new file mode 100644 index 0000000..7bbbf92 --- /dev/null +++ b/ThesTeX/code/kibana-docker-compose.yml @@ -0,0 +1,22 @@ +version: '2' +services: + kibana: + image: docker.elastic.co/kibana/kibana:6.2.1 + volumes: + - ./kibana.yml:/usr/share/kibana/config/kibana.yml + environment: + - SERVER_HOST=0.0.0.0 + - ELASTICSEARCH_URL=http://elastic:9200 + networks: + - default + - traefik_net + labels: + - "traefik.enable=true" + - "traefik.docker.network=traefik_net" + elastic: + image: docker.elastic.co/elasticsearch/elasticsearch-basic:6.2.1 + +networks: + traefik_net: + external: + name: traefik_net diff --git a/ThesTeX/code/traefik.yml b/ThesTeX/code/traefik.yml new file mode 100644 index 0000000..c742a84 --- /dev/null +++ b/ThesTeX/code/traefik.yml @@ -0,0 +1,16 @@ +version: "3" + +services: + traefik: + image: traefik:1.5 + command: --logLevel="ERROR" --docker.domain="potato.kinf.wiai.uni-bamberg.de" + volumes: + - /var/run/docker.sock:/var/run/docker.sock + ports: + - 80:80 + networks: + - net + +networks: + net: + driver: bridge diff --git a/ThesTeX/content/0-introduction.tex b/ThesTeX/content/0-introduction.tex index c04673d..0ea0538 100644 --- a/ThesTeX/content/0-introduction.tex +++ b/ThesTeX/content/0-introduction.tex @@ -1,12 +1,29 @@ -\section{Auswertung ortsbezogener Spiele} + +\section{Location based Games} +\subsection{Put the 'fun' in education} +Intersection of GIS and gaming technology\cite{Ahlqvist2018} \begin{itemize} -\item geogames -\item datenspuren, logs -\item erkenntnisgewinn aus spatial logs -\item geogame analyse (z.b. paper mit auswertung von gg) -\item feedback loop: desingers/stagers + \item Game actions tied to real-world spatial places ('Break the magic circle')%TODO citation + \item Locomotion as essential game part + \item Trade-offs between board and race style games\cite{1705427} + \item Foster recognition of environment + \item Focus through game related tasks +\end{itemize} +\image{.5\textwidth}{../../PresTeX/images/gg2}{Geogame map view}{img:gg2} + +\subsection{Research with location based games} + +\begin{itemize} + \item Define mission statement + \item Build statistical framework + \item Questionnaires + \begin{itemize} + \item Pre + \item Post + \end{itemize} + \item {[Data entry]} + \item Statistical processing \end{itemize} -Beispiel für Auswertung mit Fragebögen vorher/nachher: \cite{Schaal2017} +\image{\textwidth}{../../PresTeX/images/biodiv-schaal}{Statistical framework for BioDiv2Go\cite{Schaal2017}}{img:biodiv-schaal} -TODO \cite{Ahlqvist2018} %TODO diff --git a/ThesTeX/content/1-scope.tex b/ThesTeX/content/1-scope.tex index dcf5c6a..5e83872 100644 --- a/ThesTeX/content/1-scope.tex +++ b/ThesTeX/content/1-scope.tex @@ -1,37 +1,29 @@ -\section{Analyseframework} +\subsection{Goal definition} +A Framework for the Analysis of Spatial Game Data \begin{itemize} -\item built-in analysis=> fixed implementation, no cross-game evaluations (independant results/methods etc) -\item framework - \begin{itemize} - \item create + store game log - \item per-game importer - \item analyzer modules crunch numbers - \item output/visualization - \item interface - \item cross-game comparisons - \end{itemize} -\end{itemize} - -\section{scope} -todo -\begin{itemize} -\item framework for analysis -\item expert users/researcher vs. staging/designing -\item integration von externen daten (fragebögen => CSV o.ä.) -\item adaptable for multiple games -\end{itemize} - -not todo -\begin{itemize} -\item interpretation -\item fragebögen + \item Framework for analysis + \item Two target groups: + \begin{itemize} + \item Expert users/researchers + \item Staging/designing staff + \end{itemize} + \item Integration of external data (questionnaire results) + \item Adaptable for multiple games \end{itemize} -steps -\begin{enumerate} - \item import data - \item analyze data - \item store/render/… results -\end{enumerate} \ No newline at end of file +\subsection{Components} +Prerequisites: Game log +\begin{itemize} + \item Creation + \item Storage +\end{itemize} +New components +\begin{itemize} + \item Per-game importer (Web client, File loader, …) + \item Analyzer modules (number crunching) + \item Output \& Visualization (CSV, [Geo]JSON, KML, Graphs, …) + \item Interface (Configuration) + \item Cross-game comparisons +\end{itemize} diff --git a/ThesTeX/content/2-state-of-the-art.tex b/ThesTeX/content/2-state-of-the-art.tex index 400a5e3..c8cc891 100644 --- a/ThesTeX/content/2-state-of-the-art.tex +++ b/ThesTeX/content/2-state-of-the-art.tex @@ -288,4 +288,70 @@ focus was to look for correlations between variables in the game.} \item … \end{itemize} +\end{itemize} + +\section{1. vortrag} + +\section{State of research} + +\subsection{Log processing} +Modern log processing stacks +Technologies: Collection, Time-series databases, Frontend +\begin{itemize} + \item ELK (Elastic search, Logstash, Kibana)\cite{andreassen2015monitoring} \cite{yang2016aggregated} \cite{steinegger2016analyse} \cite{sanjappa2017analysis} + \item Collectd, Influx DB, Grafana \cite{komarek2017metric} + \item … +\end{itemize} +\begin{itemize} + \item[+] widely deployed + \item[+] powerful query languages %TODO example + \item mainly web/container/hardware monitoring + \item[-] spatial analysis: heavily anonymized + \item[-] fast-paced environment +\end{itemize} + +\subsection{Pedestrian traces} +Analyzing pedestrian movement … based on GPS logs +\begin{itemize} + \item GPS overestimates systematically \cite{Ranacher_2015} + \item GPS is a suitable instrument for spatio-temporal data\cite{van_der_Spek_2009} + \item Activity mining \cite{Gong_2014} + \begin{itemize} + \item Speed-based Clustering \cite{ren2015mining} + %\item \cite{Ferrante_2016} % closed access + \item Machine Learning \cite{pattern_recog} %TODO + \end{itemize} + \item E.g.: Improve tourist management \cite{tourist_analysis2012} +\end{itemize} + + +\image{.81\textwidth}{../../PresTeX/images/strava}{Heatmap: Fitnesstracker\cite{strava}}{img:strava} + +\image{.72\textwidth}{../../PresTeX/images/space-time}{Space-time cube examples\cite{bach2014review}}{img:spacetime} + +\image{\textwidth}{../../PresTeX/images/traj-pattern}{Flock and meet trajectory pattern\cite{jeung2011trajectory}}{img:traj-pattern} + +\image{\textwidth}{../../PresTeX/images/generalization}{Trajectories and generalizations with varying radius parameter \cite{adrienko2011spatial}}{img:generalization} + + +\subsection{Analyzing games} +\begin{itemize} + \item there's more than heatmaps + \item combine position with game actions + \item identify patterns, balancing issues + \item manual processes %\citetitle{Drachen2013}\citetitle{AHLQVIST20181} +\end{itemize} +%\image{.5\textwidth}{game-an}{chat logs with players location \cite{Drachen2013}}{img:chatlogs} +%\image{.5\textwidth}{ac3-death}{identify critical sections \cite{Drachen2013}}{img:ac3death} +\twofigures{0.5}{../../PresTeX/images/game-an}{Chat logs with players location}{img:chatlogs}{../../PresTeX/images/ac3-death}{Identify critical sections}{img:ac3death}{Game analytics \cite{Drachen2013}}{fig:gameanal} + + + +\subsection{Summary} +\begin{itemize} + \item Log processing: Powerful stacks + \item Movement analysis: Large field already explored (GPS influence, Patterns, Behavior recognition, …) + \item Track rendering: Track (with attributes), Space-time cube, Heatmap, … + \item Spatial analysis of digital games with GIS + \item Analysis of location based games: Laborious manual process \end{itemize} \ No newline at end of file diff --git a/ThesTeX/content/3-solution.tex b/ThesTeX/content/3-solution.tex index 667e938..8d18651 100644 --- a/ThesTeX/content/3-solution.tex +++ b/ThesTeX/content/3-solution.tex @@ -1,57 +1,58 @@ -\section{modulare auswahl von metriken} + +\subsection{Requirements} +Wait, what did I want to do again? \begin{itemize} - \item base set of analytic functions - \item extendable for special cases - \item … + \item Per-game importer (Web client, File loader, …) + \item Analyzer modules (number crunching) + \item Output \& Visualization (CSV, [Geo]JSON, KML, Graphs, …) + \item Interface (Configuration) + \begin{itemize} + \item Expert users/researchers + \item Staging/designing staff + \end{itemize} + \item Cross-game comparisons + \item Integration of external data (questionnaire results) \end{itemize} -\section{spiel unabhängig} -\begin{itemize} - \item log importer/transformer necessary -\end{itemize} - - -\section{log processing taugt nich} +\subsection{Experiment: Kibana} +… taugt nich \begin{itemize} \item powerful timeseries database \item complex setup \item fast paced environment \item low spatial resolution => privacy optimized \end{itemize} +\image{.85\textwidth}{../../PresTeX/images/kibana}{Game trace in Kibana}{img:kibana} +\image{.85\textwidth}{../../PresTeX/images/kibana2}{Game trace in Kibana}{img:kibana2} -\section{architekturmodell} +\subsection{Architecture} +Game independance: \begin{itemize} - \item map-reduce ähnlich - \begin{enumerate} - \item input transformation - \item analysis/extension (looping) - \item render (image,csv,json,…) - \end{enumerate} - \image{.75\textwidth}{flowchart}{arch dlowcahrt}{img:flowchart} + \item log importer/transformer necessary +\end{itemize} +\begin{itemize} + \item Based on map-reduce + \item Map: Analysis + \begin{itemize} + \item Iterate Log entries + \item Feed log entry through analyzer queue + \begin{itemize} + \item Augment entries + \item Filter entries + \item Sequential order + \end{itemize} + \end{itemize} + \item Reduce: Collect summaries from analyzers + \begin{itemize} + \item Rendering + \item Post-processing, Comparison, … + \end{itemize} + \item standalone (indep. of any game) \item own client for game server (due to CORS/XSS prevention prohibiting shared use of game server assets in other host) \item API for integration \item allow load distribution \end{itemize} - -==== -\begin{itemize} - \item map-reduce like - \item map: analyse-läufe - \begin{itemize} - \item log-eintrags basiert - \item reichern log an - \item filtern log - \item metriken über komplette log => extern gespeichert - \item => evtl. Abhängigkeiten in Reihenfolge - \item basis-funktionalität || spiel-bezogen - \end{itemize} - \item reduce: Operieren mit Ergebnissen (über alle verarbeiteten logs hinweg) - \begin{itemize} - \item render - \item verteilung, … - \end{itemize} -\end{itemize} - +\image{\textwidth}{map-reduce.pdf}{Data flows}{img:flow} diff --git a/ThesTeX/content/4-implementation.tex b/ThesTeX/content/4-implementation.tex new file mode 100644 index 0000000..34fe9ca --- /dev/null +++ b/ThesTeX/content/4-implementation.tex @@ -0,0 +1,45 @@ +\section{klassenstruktur} +\section{konfigurierbarkeit (log import)} +\section{...} + +\section{1. vortrag} + +\section{Outlook: Implementation} + +\subsection{Implementation} +Analysis +\begin{itemize} + \item Python (3.6) + \item Standalone library/CLI tool + \item Web based configuration/Runner/API (Flask) +\end{itemize} +Rendering +\begin{itemize} + \item Matplotlib, Numpy + \begin{itemize} + \item Graphs + \end{itemize} + \item Javascript + \begin{itemize} + \item Leaflet + \item Web visualization: Maps, Tracks, … + \end{itemize} +\end{itemize} +\pic{.5\textwidth}{../../PresTeX/images/matplotlib} +\pic{.5\textwidth}{../../PresTeX/images/python} +\pic{.4\textwidth}{../../PresTeX/images/flask} +\pic{.4\textwidth}{../../PresTeX/images/leaflet} + + +\subsection{Examples} +Configuration \& results +\twofigures{0.5}{../../PresTeX/images/oeb-kml}{Analyzer configuration}{img:oebkml}{../../PresTeX/images/oeb-ge}{Result visualized}{img:oebge}{Example: Generate KML tracks (BioDiv2Go; Oberelsbach2016)}{fig:oeb2016} + +{ActivityMapper} +\image{.7\textwidth}{../../PresTeX/images/track-fi}{Combined screen activity and spatial progress}{img:trackfi} + + +{Graphs} +\image{\textwidth}{../../PresTeX/images/simu-retries}{Experimentational rounds}{img:retries} +\image{\textwidth}{../../PresTeX/images/speed}{Speed distribution}{img:speed} +\image{.9\textwidth}{../../PresTeX/images/time-rel}{Time distribution}{img:time} diff --git a/ThesTeX/content/appendix.tex b/ThesTeX/content/appendix.tex new file mode 100644 index 0000000..af66794 --- /dev/null +++ b/ThesTeX/content/appendix.tex @@ -0,0 +1,8 @@ +\section{Setup für Kibana} +\lstinputlisting[language=yaml,caption={Docker-compose file for Kibana test setup},label=code:kibana]{code/kibana-docker-compose.yml} +\section{Biogames Server Dockerized} +\image{\textwidth}{biogames.pdf}{Dockerized setup for biogames}{img:bd2gdocker} +\lstinputlisting[language=yaml,caption={Docker-compose file for Biogames server},label=code:bd2s]{code/biogames/docker-compose.yml} +\lstinputlisting[language=yaml,caption={Dockerfile for Biogames server},label=code:bd2d]{code/biogames/Dockerfile} +\lstinputlisting[language=bash,caption={Entrypoint for Biogames docker container},label=code:bd2e]{code/biogames/start.sh} +\lstinputlisting[language=yaml,caption={Dockerfile for Traefik reverse proxy},label=code:bd2t]{code/traefik.yml} \ No newline at end of file diff --git a/ThesTeX/content/outline.tex b/ThesTeX/content/outline.tex index c2fea10..fb659c0 100644 --- a/ThesTeX/content/outline.tex +++ b/ThesTeX/content/outline.tex @@ -11,18 +11,23 @@ \input{content/3-solution} \chapter{umsetzung} -%\input{content/4-implementation} -\section{klassenstruktur} -\section{konfigurierbarkeit (log import)} -\section{...} +\input{content/4-implementation} \chapter{evaluierung} %\input{content/5-evaluation} -\section{wie viele metriken umsetzbar?} -\section{erweiterbarkeit} +\section{Portierbarkeit (anderes game)} + + +\begin{verbatim} +… +\end{verbatim} \chapter{diskussion} %\input{content/6-discussion} +\begin{verbatim} +… +\end{verbatim} + \section{dummies} \cite{zheng2011computing} diff --git a/ThesTeX/images/biogames.dot b/ThesTeX/images/biogames.dot new file mode 100644 index 0000000..9085b1a --- /dev/null +++ b/ThesTeX/images/biogames.dot @@ -0,0 +1,11 @@ +graph{ +//rankdir="LR"; +s [label="Web-App\nBiogames"]; +c [label="Worker\nCelery"]; +db [label="DB\nPostgres"]; +t [label="HTTP frontend\nTraefik"]; + +s -- db []; +c -- db [label="Internal network"]; +t -- s [label=" External network,\nlabel"]; +} \ No newline at end of file diff --git a/ThesTeX/thesis.tex b/ThesTeX/thesis.tex index 154a803..2c7f5ee 100644 --- a/ThesTeX/thesis.tex +++ b/ThesTeX/thesis.tex @@ -61,7 +61,8 @@ \newpage \listoftables \newpage -\listofalgorithms +%\listofalgorithms +\lstlistoflistings \newpage %% Falls nur Abkuerzungs- oder Symbolverzeichnis benoetigt wird, folgende Befehle benutzen %% %\printnomenclature @@ -108,6 +109,7 @@ \appendix \setstretch{1.5} \chapter{Anhang} +\input{content/appendix} \setstretch{1.1} \cleardoubleemptypage diff --git a/meta/config/commands.tex b/meta/config/commands.tex index 0606c02..3f691ca 100644 --- a/meta/config/commands.tex +++ b/meta/config/commands.tex @@ -277,7 +277,7 @@ Ich erkläre hiermit gemäß § 17 Abs. 2 APO, dass ich die vorstehende \degree %=============================================================================== % Listing Styles %=============================================================================== -\lstset{basicstyle=\ttfamily,showstringspaces=false,commentstyle=\color{unibagrayI},keywordstyle=\color{unibablueI},breaklines=true} +\lstset{basicstyle=\ttfamily,showstringspaces=false,commentstyle=\color{unibagrayI},keywordstyle=\color{unibablueI},breaklines=true,captionpos=b} \DeclareFixedFont{\ttb}{T1}{txtt}{bx}{n}{9} % for bold \DeclareFixedFont{\ttm}{T1}{txtt}{m}{n}{9} % for normal \lstset{