# Konstantin Hintermayer ## Rolle im Projekt ::: columns :::: column **Aufgabenbereiche**: - Product Owner - Kundenschnittstelle - Infrastruktur & CI/CD **Softwareentwicklung:** - Event Registration - Black Board - Report System - Mass Mailer :::: :::: column \begin{tikzpicture} \clip (0,0) circle (3em); \node at (0,0) {\includegraphics[width=6em]{./Images/images/konstantin/profile.jpg}}; \draw[accent, line width=3pt] (0,0) circle (3em); \end{tikzpicture} :::: ::: ## Infrastruktur ::: columns :::: column **Entwicklung:** - **Gitea:** Versionskontrollsystem - **Wireguard:** VPN - **Docker:** Containerisierung - **GitHub:** Transfer - **Gitea Actions:** CI/CD :::: :::: column **Produktion:** - **Debian:** Betriebssystem - **NginX:** Reverse Proxy - **PostgreSQL:** Datenbank - **Oqtane:** CMS :::: ::: \vfill \begin{center} \includegraphics[width=2.5em]{./Images/images/konstantin/logos/debian.pdf} \hspace{1em} \includegraphics[width=2.5em]{./Images/images/konstantin/logos/docker.pdf} \hspace{1em} \includegraphics[width=2.5em]{./Images/images/konstantin/logos/gitea.pdf} \hspace{1em} \includegraphics[width=2.5em]{./Images/images/konstantin/logos/wireguard.pdf} \hspace{1em} \includegraphics[width=2.5em]{./Images/images/konstantin/logos/github.pdf} \hspace{1em} \includegraphics[width=2.5em]{./Images/images/konstantin/logos/nginx.pdf} \hspace{1em} \includegraphics[width=2.5em]{./Images/images/konstantin/logos/postgres.pdf} \hspace{1em} \includegraphics[width=2.5em]{./Images/images/konstantin/logos/oqtane.pdf} \end{center} \vfill --- ```mermaid sequenceDiagram participant browser as Client participant nginx as NginX participant oqtane as Oqtane participant db as PostgreSQL browser->>+nginx: HTTPS => 0.0.0.0:443 nginx->>nginx: SSL Terminierung nginx->>+oqtane: HTTP => 127.0.0.1:5000 oqtane->>+db: SQL => 127.0.0.1:5432 db-->>-oqtane: SQL oqtane-->>-nginx: HTTP nginx-->>-browser: HTTPS ``` ## Von Commit zu Paket \begin{tikzpicture}[ node distance=1cm, stepnode/.style={circle, minimum size=1.2cm, draw, line width=1.5pt, fill=white, inner sep=0pt}, labelnode/.style={align=center, font=\small\bfseries}, textnode/.style={align=center, font=\scriptsize, color=gray}, track/.style={line width=2pt, gray!20} ] % Central Track \draw[track] (-1,0) -- (12,0); \node[stepnode, draw=gray!60!black] (n1) at (0,0) {\color{gray!60!black}\small\faCodeBranch}; \node[stepnode, draw=green!60!black, right=of n1] (n2) {\color{green!60!black}\small\faCheckCircle}; \node[stepnode, draw=blue!60!black, right=of n2] (n3) {\color{blue!60!black}\small\faCogs}; \node[stepnode, draw=green!60!black, right=of n3] (n4) {\color{green!60!black}\small\faBoxOpen}; \node[stepnode, draw=blue!60!black, right=of n4] (n5) {\color{blue!60!black}\small\faDatabase}; % Labels Above \node[labelnode, below=0.2cm of n1, color=gray!60!black] {Commit}; \node[labelnode, below=0.2cm of n2, color=green!60!black] {Tag}; \node[labelnode, below=0.2cm of n3, color=blue!60!black] {CI/CD}; \node[labelnode, below=0.2cm of n4, color=green!60!black] {.deb Paket}; \node[labelnode, below=0.2cm of n5, color=blue!60!black] {Registry}; \end{tikzpicture} \vspace{1em} **Ablauf:** 1. laufende Entwicklung 2. Commit zu einem Release zusammenfassen (Tag) 3. CI/CD Pipeline beginnt zu laufen 4. .deb Paket wird gebaut 5. .deb Paket wird in der Registry abgelegt ## Softwarearchitektur (.NET / Oqtane) **Design Patterns:** \vspace{1em} \begin{tikzpicture}[ node distance=0.15cm, stepnode/.style={rectangle, draw, line width=1.5pt, minimum width=1.5cm, minimum height=1.5cm, fill=white, inner sep=0pt}, ] \node[stepnode, draw=gray!60!black] (n1) at (0,0) {\LARGE\color{gray!60!black}S}; \node[stepnode, draw=green!60!black, right=of n1] (n2) {\LARGE\color{green!60!black}O}; \node[stepnode, draw=blue!60!black, right=of n2] (n3) {\LARGE\color{blue!60!black}L}; \node[stepnode, draw=orange, right=of n3] (n4) {\LARGE\color{orange}I}; \node[stepnode, draw=orange!70!black, right=of n4] (n5) {\LARGE\color{orange!70!black}D}; \end{tikzpicture} \vspace{1em} - Open-Closed Principle - Dependency Injection (IServiceProvider) - Repository-Pattern (EntityFramework) ## Module ::: columns :::: column **Admin Module:** - Mass Mailer - Token Lifetime - Report System **Allgemeine Module:** - Event Registration - Black Board :::: :::: column ![](./Images/images/konstantin/ReportingSystem.png) :::: ::: ## Produktion $\neq$ Staging \begin{tikzpicture}[ node distance=2.2cm, stepnode/.style={circle, minimum size=1.2cm, draw, line width=1.5pt, fill=white, inner sep=0pt}, labelnode/.style={align=center, font=\small\bfseries}, textnode/.style={align=center, font=\scriptsize, color=gray}, track/.style={line width=2pt, gray!20} ] % Central Track \draw[track] (-1,0) -- (12,0); % Steps \node[stepnode, draw=green!60!black] (s1) at (0,0) {\color{green!60!black}\Large\faCheck}; \node[stepnode, draw=accent, right=of s1] (s2) {\color{accent}\Large\faCodeBranch}; \node[stepnode, draw=red, right=of s2] (s3) {\color{red}\Large\faExclamationTriangle}; \node[stepnode, draw=orange, right=of s3] (s4) {\color{orange}\Large\faLightbulb}; % Labels Above \node[labelnode, above=0.2cm of s1, color=green!60!black] {Staging}; \node[labelnode, above=0.2cm of s2, color=accent] {Deploy}; \node[labelnode, above=0.2cm of s3, color=red] {Bruch}; \node[labelnode, above=0.2cm of s4, color=orange] {Erkenntnis}; \end{tikzpicture} \vfill ::: columns :::: column{.column width=33%} "It works on my Machine" :::: :::: column{.column width=66%} **Deploymentprobleme bei Hetzner** Problem: schlechte Dokumentation. Lösung: Debugging mithilfe von Wireshark und lesen des Source Codes um das Framework zu verstehen und den Fehler zu finden. :::: ::: ## Teamleitung & PM ::: columns :::: column **Scrum Workflow:** - 14-tägige Sprints - Weeklies & Retrospektiven - Definition of Done (DoD) :::: :::: column **Gitea Issues / Board:** - Integrierter Workflow - Single Source of Truth :::: ::: ![Gitea Board](./Images/images/konstantin/GiteaIssues-TaskBoard.png){ width=60% } ## Was bleibt \vspace{0.5em} \begin{tikzpicture}[x=\linewidth/10, y=1cm, every node/.style={font=\sffamily}] % Rule: 90/90 \fill[black!5] (0, 2.8) rectangle (10, 3.4); \fill[green!60!black] (0, 2.8) rectangle (9, 3.4); \node[anchor=north west, inner sep=3pt] at (0, 2.8) {\scriptsize Erste \textbf{90\,\%} des Codes $\rightarrow$ \textbf{90\,\%} der Zeit}; \fill[black!5] (0, 1.2) rectangle (10, 1.8); \fill[accent] (0, 1.2) rectangle (1, 1.8); \node[anchor=north west, inner sep=3pt, text=accent] at (0, 1.2) {\scriptsize \textbf{Letzte 10\,\% des Codes $\rightarrow$ weitere 90\,\% der Zeit}}; \end{tikzpicture} \vspace{0.5em} ::: columns :::: { .column width=33% } \begin{block}{Lean beats Perfect} \scriptsize Weniger bauen, dafür fertig stellen. \end{block} :::: :::: { .column width=33% } \begin{block}{Environment First} \scriptsize Zielumgebung testen, nicht nur lokal. \end{block} :::: :::: { .column width=33% } \begin{block}{Fragen ist Architektur} \scriptsize Wer früh fragt, spart später Monate. \end{block} :::: :::