\documentclass[25pt, a0paper, landscape]{tikzposter}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{graphicx}
\usepackage[sfdefault]{FiraSans}
\usepackage{FiraMono}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17}
\usetikzlibrary{shapes.geometric, shadows}

% Riesige Grundschrift, lesbar aus mehreren Metern
\makeatletter
\renewcommand\normalsize{\@setfontsize\normalsize{40}{54}}
\renewcommand\small{\@setfontsize\small{32}{42}}
\renewcommand\large{\@setfontsize\large{48}{60}}
\renewcommand\Large{\@setfontsize\Large{58}{70}}
\renewcommand\LARGE{\@setfontsize\LARGE{70}{84}}
\renewcommand\huge{\@setfontsize\huge{82}{96}}
\renewcommand\Huge{\@setfontsize\Huge{95}{110}}
\makeatother
\AtBeginDocument{\normalsize}

% Helles Design, kraeftige Akzente
\definecolor{bglight}{HTML}{FFFFFF}
\definecolor{card}{HTML}{FFFFFF}
\definecolor{cardline}{HTML}{E2E8F0}
\definecolor{strongline}{HTML}{CBD5E1}
\definecolor{rowbg}{HTML}{F1F5F9}
\definecolor{textdark}{HTML}{0F172A}
\definecolor{textmut}{HTML}{64748B}
\definecolor{textchart}{HTML}{334155}
\definecolor{accent}{HTML}{A855F7}
\definecolor{accentsoft}{HTML}{A855F7}
\definecolor{codekey}{HTML}{A855F7}
\definecolor{lilaa}{HTML}{A855F7}
\definecolor{liladeep}{HTML}{A855F7}
\definecolor{gruen}{HTML}{10B981}
\definecolor{rot}{HTML}{F43F5E}
\definecolor{gelb}{HTML}{F59E0B}
\definecolor{grau}{HTML}{64748B}
\definecolor{codebg}{HTML}{0F172A}

\definecolorstyle{RingStyle}{}{
    \colorlet{backgroundcolor}{bglight}
    \colorlet{framecolor}{bglight}
    \colorlet{titlefgcolor}{textdark}
    \colorlet{titlebgcolor}{bglight}
    \colorlet{blocktitlebgcolor}{card}
    \colorlet{blocktitlefgcolor}{textdark}
    \colorlet{blockbodybgcolor}{card}
    \colorlet{blockbodyfgcolor}{textdark}
    \colorlet{innerblocktitlebgcolor}{card}
    \colorlet{innerblocktitlefgcolor}{textdark}
    \colorlet{innerblockbodybgcolor}{card}
    \colorlet{innerblockbodyfgcolor}{textdark}
    \colorlet{notefgcolor}{textdark}
    \colorlet{notebgcolor}{card}
    \colorlet{noteframecolor}{card}
}
\usecolorstyle{RingStyle}

% Ein Block ist eine weisse Karte mit weichem Schatten
\defineblockstyle{RingBlock}{
    titlewidthscale=1, bodywidthscale=1, titleleft,
    titleoffsetx=0pt, titleoffsety=0pt, bodyoffsetx=0pt, bodyoffsety=14mm,
    bodyverticalshift=10mm, roundedcorners=26, linewidth=2pt,
    titleinnersep=12mm, bodyinnersep=13mm
}{
    \draw[color=cardline, line width=2pt, fill=blockbodybgcolor, rounded corners=26,
        drop shadow={shadow xshift=0mm, shadow yshift=-2.5mm, opacity=0.10, fill=textdark}]
        (blockbody.south west) rectangle (blocktitle.north east);
    \ifBlockHasTitle
        \fill[accentsoft, rounded corners=1] ([xshift=12mm, yshift=6mm]blocktitle.south west)
            rectangle ([xshift=110mm, yshift=5mm]blocktitle.south west);
    \fi
}
\useblockstyle{RingBlock}

% Unsichtbarer Block fuer das Fazit-Banner
\defineblockstyle{PlainBlock}{
    titlewidthscale=1, bodywidthscale=1, titleleft,
    titleoffsetx=0pt, titleoffsety=0pt, bodyoffsetx=0pt, bodyoffsety=0pt,
    bodyverticalshift=0pt, roundedcorners=0, linewidth=0pt,
    titleinnersep=0mm, bodyinnersep=0mm
}{}

% Weisser Hintergrund fuer den Druck
\definebackgroundstyle{RingBackground}{
    \draw[color=bglight, fill=bglight] (bottomleft) rectangle (topright);
}
\usebackgroundstyle{RingBackground}

\usetitlestyle{Empty}
\tikzposterlatexaffectionproofoff

% Browserfenster um einen Screenshot
% #1 Breite in mm, #2 Hoehe des Bilds in mm, #3 Pfad
\newcommand{\browserframe}[3]{%
\begin{tikzpicture}[x=1mm, y=1mm]
    \begin{scope}
        \clip[rounded corners=16] (0,0) rectangle (#1, {#2+16});
        \fill[codebg] (0, #2) rectangle (#1, {#2+16});
        \node[anchor=south west, inner sep=0] at (0,0) {\includegraphics[width=#1 mm]{#3}};
    \end{scope}
    \fill[rot]   (11, {#2+8}) circle (3.2);
    \fill[gelb]  (22, {#2+8}) circle (3.2);
    \fill[gruen] (33, {#2+8}) circle (3.2);
    \draw[strongline, line width=1.8pt, rounded corners=16] (0,0) rectangle (#1, {#2+16});
\end{tikzpicture}}

% Schmale Zeile fuer die Marktrecherche
% #1 Farbe, #2 Name, #3 Stichwort, #4 y-Position
\newcommand{\dbrow}[4]{%
    \node[rounded corners=12, fill=rowbg, minimum width=352mm, minimum height=38mm, anchor=west] at (0, #4) {};
    \begin{scope}
        \clip[rounded corners=12] (0, #4-19) rectangle (352, #4+19);
        \fill[#1] (0, #4-19) rectangle (8, #4+19);
    \end{scope}
    \node[anchor=west, font=\fontsize{36}{42}\selectfont\bfseries, text=#1] at (22, #4) {#2};
    \node[anchor=east, font=\fontsize{26}{32}\selectfont, text=textmut] at (340, #4) {#3};
}

% Balken fuer das Ranking der Nutzwertanalyse
% #1 Farbe, #2 Name, #3 Punkte, #4 y-Position
\newcommand{\rankbar}[4]{%
    \draw[fill=rowbg, draw=cardline, line width=1pt, rounded corners=8] (0, #4-15) rectangle (315, #4+15);
    \draw[fill=#1, draw=none, rounded corners=8] (0, #4-15) rectangle ({55 + #3*7.0}, #4+15);
    \node[anchor=west, text=white, font=\fontsize{31}{37}\selectfont\bfseries] at (8, #4) {#2};
    \node[anchor=east, fill=white, text=#1, rounded corners=9, inner xsep=5mm, inner ysep=2mm,
        font=\fontsize{29}{35}\selectfont\bfseries] at ({55 + #3*7.0 - 6}, #4) {#3};
}

\settitle{
\begin{minipage}[c]{0.63\linewidth}
    {\color{textdark}\fontsize{108}{116}\selectfont\bfseries Ringstats}\par
    \vspace{8mm}
    {\color{accent}\fontsize{42}{52}\selectfont Live Spielerdaten aus dem Spiel, gespeichert in \textcolor{liladeep}{Key-Value-Datenbanken}}\par
\end{minipage}\hfill
\begin{minipage}[c]{0.35\linewidth}
    \begin{flushright}
    {\color{textmut}\fontsize{33}{44}\selectfont Justin Rost (7208260) \ \textcolor{strongline}{|}\ Michelle Reichelt (7216628) \ \textcolor{strongline}{|}\ Yasin Ergün (7215184)\par}
    \vspace{4mm}
    {\color{textmut}\fontsize{33}{44}\selectfont Moderne Datenbanken\par}
    \end{flushright}
\end{minipage}

\vspace{6mm}
{\color{accentsoft}\rule{\linewidth}{3pt}\par}
}

\begin{document}
\maketitle[width=0.97\textwidth]

\begin{columns}

% ================= SPALTE 1 =================
\column{0.34}

\block{Was ist Ringstats?}{
\centering
\vspace{5mm}
\begin{tikzpicture}[x=1mm, y=1mm, line cap=round, line join=round]
    % Boxen
    \node[rounded corners=14, fill=rowbg, draw=cardline, line width=1.5pt, minimum width=74mm, minimum height=70mm] (a) at (0,0) {};
    \node[rounded corners=14, fill=rowbg, draw=cardline, line width=1.5pt, minimum width=74mm, minimum height=70mm] (b) at (94,0) {};
    \node[rounded corners=14, fill=liladeep, minimum width=74mm, minimum height=70mm] (c) at (188,0) {};
    \node[rounded corners=14, fill=rowbg, draw=cardline, line width=1.5pt, minimum width=74mm, minimum height=70mm] (d) at (282,0) {};
    \draw[-stealth, line width=4.5pt, accentsoft] (a) -- (b);
    \draw[stealth-stealth, line width=4.5pt, accentsoft] (b) -- (c);
    \draw[-stealth, line width=4.5pt, accentsoft] (c) -- (d);
    % Icon Ring
    \draw[accent, line width=5pt] (0, 15) circle (9);
    % Icon Monitor
    \draw[accent, line width=4pt, rounded corners=2] (83, 10) rectangle (105, 25);
    \draw[accent, line width=4pt] (94, 10) -- (94, 6) (88, 6) -- (100, 6);
    % Icon Datenbank (Zylinder)
    \draw[white, line width=4pt] (179, 21) arc (180:360:9 and 3.2);
    \draw[white, line width=4pt] (179, 21) -- (179, 9);
    \draw[white, line width=4pt] (197, 21) -- (197, 9);
    \draw[white, line width=4pt] (179, 9) arc (180:360:9 and 3.2);
    \draw[white, line width=4pt] (188, 21) ellipse (9 and 3.2);
    % Icon Globus
    \draw[accent, line width=4pt] (282, 15) circle (9);
    \draw[accent, line width=3pt] (282, 15) ellipse (4 and 9);
    \draw[accent, line width=3pt] (273, 15) -- (291, 15);
    % Beschriftung
    \node[text=textdark, font=\fontsize{25}{31}\selectfont\bfseries, align=center] at (0, -16) {Elden\\Ring};
    \node[text=textdark, font=\fontsize{25}{31}\selectfont\bfseries, align=center] at (94, -16) {Client\\Mod};
    \node[text=white, font=\fontsize{25}{31}\selectfont\bfseries, align=center] at (188, -16) {Daten-\\bank};
    \node[text=textdark, font=\fontsize{25}{31}\selectfont\bfseries, align=center] at (282, -16) {Website};

\end{tikzpicture}

\vspace{10mm}
{\large Spielerdaten \textcolor{accent}{\textbf{live}} erfassen und anzeigen.\par}

\vspace{9mm}
\begin{tikzpicture}
\node[rounded corners=14, fill=codebg, minimum width=0.95\linewidth, inner sep=9mm] at (0,0) {
    \ttfamily\fontsize{29}{36}\selectfont\textcolor{codekey}{player:1} \textcolor{cardline}{\{ health, region\_id \}}
};
\end{tikzpicture}

\vspace{2mm}
{\small\color{textmut} Ein Schlüssel pro Entität, gleich in allen drei Datenbanken.\par}
}

\block{Marktrecherche}{
\centering
\begin{tikzpicture}[x=1mm, y=1mm]
    \dbrow{rot}{Redis}{In-Memory, Hashes und Sets}{0}
    \dbrow{gruen}{Memcached}{In-Memory, keine Persistenz}{-45}
    \dbrow{liladeep}{ArangoDB}{multimodale Datenbank}{-90}
    \dbrow{grau}{DynamoDB}{Cloud, kostet pro Anfrage}{-135}
    \dbrow{grau}{etcd}{nur für Konfigurationen}{-180}
    \dbrow{grau}{Riak KV}{kaum noch entwickelt}{-225}
\end{tikzpicture}
}

% ================= SPALTE 2 =================
\column{0.33}

\block{Live-Ansicht}{
\centering
\browserframe{338}{185}{assets/website-home-redis.png}

\vspace{8mm}
\browserframe{338}{185}{assets/website-search.png}


}

% ================= SPALTE 3 =================
\column{0.33}

\block{Nutzwertanalyse}{
\centering
\begin{tikzpicture}[x=1mm, y=1mm]
    \rankbar{rot}{Redis}{37}{0}
    \rankbar{gruen}{Memcached}{27}{-34}
    \rankbar{lilaa}{ArangoDB}{22}{-68}
    \rankbar{grau}{Riak KV}{22}{-102}
    \rankbar{grau}{etcd}{21}{-136}
    \rankbar{grau}{DynamoDB}{18}{-170}
\end{tikzpicture}
}

\block{Performancevergleich}{
\centering
\begin{tikzpicture}
\begin{axis}[
    ybar,
    bar width=12mm,
    width=0.99\linewidth,
    height=150mm,
    ymin=0, ymax=2750,
    symbolic x coords={Sync Schreiben, Sync Lesen, Region Lesen, Region Schreiben},
    xtick=data,
    axis line style={draw=none},
    tick label style={color=textchart, font=\fontsize{23}{29}\selectfont},
    ytick={0,1000,2000},
    yticklabels={0, 1000, 2000},
    x tick label style={color=textchart},
    ymajorgrids=true,
    grid style={cardline},
    legend style={draw=none, fill=none, text=textdark, font=\fontsize{27}{34}\selectfont, at={(0.5,1.02)}, anchor=south, legend columns=3, column sep=10mm},
    nodes near coords,
    every node near coord/.append style={color=textmut, font=\fontsize{17}{21}\selectfont, /pgf/number format/1000 sep={}},
    enlarge x limits=0.14,
]
\addplot[fill=rot, draw=rot] coordinates {(Sync Schreiben,2154) (Sync Lesen,2162) (Region Lesen,2153) (Region Schreiben,2299)};
\addplot[fill=gruen, draw=gruen] coordinates {(Sync Schreiben,2162) (Sync Lesen,2185) (Region Lesen,2153) (Region Schreiben,2075)};
\addplot[fill=lilaa, draw=lilaa] coordinates {(Sync Schreiben,1207) (Sync Lesen,1332) (Region Lesen,1321) (Region Schreiben,1217)};
\legend{Redis, Memcached, ArangoDB}
\end{axis}
\end{tikzpicture}

\vspace{8mm}
{\large\bfseries\color{textdark} Ops/s: \textcolor{liladeep}{ArangoDB} nur halb so schnell.\par}
}

\end{columns}

\useblockstyle{PlainBlock}
\block{}{
\centering
\begin{tikzpicture}[x=1mm, y=1mm]
    \node[rounded corners=24, fill=liladeep, minimum width=0.99\linewidth, minimum height=104mm,
        drop shadow={shadow xshift=0mm, shadow yshift=-3mm, opacity=0.15, fill=textdark}] (banner) at (0,0) {};
    \node[text=white] at ([yshift=14mm]banner.center) {\Huge Unsere Wahl: \textbf{Redis}};
    \node[rounded corners=22, fill=white, fill opacity=0.20, text opacity=1, text=white,
        font=\fontsize{45}{55}\selectfont\bfseries, inner xsep=18mm, inner ysep=8mm] at ([xshift=-190mm, yshift=-26mm]banner.center) {schnell wie Memcached};
    \node[rounded corners=22, fill=white, fill opacity=0.20, text opacity=1, text=white,
        font=\fontsize{45}{55}\selectfont\bfseries, inner xsep=18mm, inner ysep=8mm] at ([yshift=-26mm]banner.center) {Hashes und Sets};
    \node[rounded corners=22, fill=white, fill opacity=0.20, text opacity=1, text=white,
        font=\fontsize{45}{55}\selectfont\bfseries, inner xsep=18mm, inner ysep=8mm] at ([xshift=142mm, yshift=-26mm]banner.center) {Persistenz};
\end{tikzpicture}
}

\end{document}
