Files
pm/Defensio/02_Praesentation_Konstantin_Hintermayer.md

7.3 KiB

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


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 :::: :::

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{ 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} :::: :::