Compare commits

...

18 Commits

12 changed files with 148 additions and 80 deletions

View File

@@ -4,7 +4,7 @@
::: columns ::: columns
:::: column ::: {.column width="50%"}
**Aufgabenbereiche**: **Aufgabenbereiche**:
- Product Owner - Product Owner
@@ -17,10 +17,11 @@
- Black Board - Black Board
- Report System - Report System
- Mass Mailer - Mass Mailer
- Token Lifetime
:::: :::
:::: column ::: {.column width="50%"}
\begin{tikzpicture} \begin{tikzpicture}
\clip (0,0) circle (3em); \clip (0,0) circle (3em);
@@ -28,14 +29,14 @@
\draw[accent, line width=3pt] (0,0) circle (3em); \draw[accent, line width=3pt] (0,0) circle (3em);
\end{tikzpicture} \end{tikzpicture}
:::: :::
::: :::
## Infrastruktur ## Infrastruktur
::: columns ::: columns
:::: column ::: {.column width="50%"}
**Entwicklung:** **Entwicklung:**
@@ -45,8 +46,8 @@
- **GitHub:** Transfer - **GitHub:** Transfer
- **Gitea Actions:** CI/CD - **Gitea Actions:** CI/CD
:::: :::
:::: column ::: {.column width="50%"}
**Produktion:** **Produktion:**
@@ -55,7 +56,7 @@
- **PostgreSQL:** Datenbank - **PostgreSQL:** Datenbank
- **Oqtane:** CMS - **Oqtane:** CMS
:::: :::
::: :::
\vfill \vfill
@@ -74,7 +75,9 @@
\vfill \vfill
<!-- ![](./Images/konstantin/tech_stack_logos.png){ width=100% } --> <!-- ![](./Images/konstantin/tech_stack_logos.png){ width=100% } -->
--- ## {.unnumbered .noframenumbering}
\vfill
```mermaid ```mermaid
sequenceDiagram sequenceDiagram
@@ -92,8 +95,9 @@ sequenceDiagram
nginx-->>-browser: HTTPS nginx-->>-browser: HTTPS
``` ```
\vfill
## Von Commit zu Paket ## Vom Commit zu Paket
\begin{tikzpicture}[ \begin{tikzpicture}[
node distance=1cm, node distance=1cm,
@@ -105,14 +109,14 @@ sequenceDiagram
% Central Track % Central Track
\draw[track] (-1,0) -- (12,0); \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=red] (n1) at (0,0) {\color{red}\small\faCodeBranch};
\node[stepnode, draw=green!60!black, right=of n1] (n2) {\color{green!60!black}\small\faCheckCircle}; \node[stepnode, draw=green!60!black, right=of n1] (n2) {\color{green!60!black}\small\faTag};
\node[stepnode, draw=blue!60!black, right=of n2] (n3) {\color{blue!60!black}\small\faCogs}; \node[stepnode, draw=blue!60!black, right=of n2] (n3) {\color{blue!60!black}\small\faTasks};
\node[stepnode, draw=green!60!black, right=of n3] (n4) {\color{green!60!black}\small\faBoxOpen}; \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}; \node[stepnode, draw=blue!60!black, right=of n4] (n5) {\color{blue!60!black}\small\faDatabase};
% Labels Above % Labels Above
\node[labelnode, below=0.2cm of n1, color=gray!60!black] {Commit}; \node[labelnode, below=0.2cm of n1, color=red] {Commit};
\node[labelnode, below=0.2cm of n2, color=green!60!black] {Tag}; \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 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 n4, color=green!60!black] {.deb Paket};
@@ -139,7 +143,7 @@ sequenceDiagram
node distance=0.15cm, 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}, 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=red] (n1) at (0,0) {\LARGE\color{red}S};
\node[stepnode, draw=green!60!black, right=of n1] (n2) {\LARGE\color{green!60!black}O}; \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=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, right=of n3] (n4) {\LARGE\color{orange}I};
@@ -155,7 +159,7 @@ sequenceDiagram
## Module ## Module
::: columns ::: columns
:::: column ::: {.column width="50%"}
**Admin Module:** **Admin Module:**
- Mass Mailer - Mass Mailer
@@ -167,10 +171,12 @@ sequenceDiagram
- Event Registration - Event Registration
- Black Board - Black Board
:::: :::
:::: column ::: {.column width="50%"}
\vfill
![](./Images/images/konstantin/ReportingSystem.png) ![](./Images/images/konstantin/ReportingSystem.png)
:::: \vfill
:::
::: :::
## Produktion $\neq$ Staging ## Produktion $\neq$ Staging
@@ -201,14 +207,16 @@ sequenceDiagram
\vfill \vfill
::: columns ::: columns
:::: column{.column width=33%} ::: {.column width="40%"}
"It works on my Machine" "It works on my Machine"
:::: :::
:::: column{.column width=66%} ::: {.column width="60%"}
**Deploymentprobleme bei Hetzner** **Deploymentprobleme**
Problem: schlechte Dokumentation.
Lösung: Debugging mithilfe von Wireshark und lesen des Source Codes um das Framework zu verstehen und den Fehler zu finden. **Problem:** Schlechte Dokumentation.
::::
**Lösung:** Debugging mithilfe von Wireshark und Source Code lesen.
:::
::: :::
@@ -233,7 +241,7 @@ Lösung: Debugging mithilfe von Wireshark und lesen des Source Codes um das Fram
![Gitea Board](./Images/images/konstantin/GiteaIssues-TaskBoard.png){ width=60% } ![Gitea Board](./Images/images/konstantin/GiteaIssues-TaskBoard.png){ width=60% }
## Was bleibt ## Fazit
\vspace{0.5em} \vspace{0.5em}
@@ -248,24 +256,10 @@ Lösung: Debugging mithilfe von Wireshark und lesen des Source Codes um das Fram
\node[anchor=north west, inner sep=3pt, text=accent] at (0, 1.2) {\scriptsize \textbf{Letzte 10\,\% des Codes $\rightarrow$ weitere 90\,\% der Zeit}}; \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} \end{tikzpicture}
\vspace{0.5em} \vspace{1em}
::: columns Learnings:
:::: { .column width=33% }
\begin{block}{Lean beats Perfect}
\scriptsize Weniger bauen, dafür fertig stellen.
\end{block}
::::
:::: { .column width=33% } - **Asynchrones Arbeiten:** Entkopplung von Meetings und Deadlines.
\begin{block}{Environment First} - **Review-First-Policy:** Konsequente Umsetzung der *Definition of Done*.
\scriptsize Zielumgebung testen, nicht nur lokal. - **Team-Fokus:** höhere Motivation und Eigenverantwortung durch Verkleinerung des Teams.
\end{block}
::::
:::: { .column width=33% }
\begin{block}{Fragen ist Architektur}
\scriptsize Wer früh fragt, spart später Monate.
\end{block}
::::
:::

View File

@@ -2,12 +2,49 @@
## Individueller Teil: Florian Edlmayer ## Individueller Teil: Florian Edlmayer
- **Datensicherheit** DSGVO-konform & verschlüsselt \vspace{0.8em}
\vspace{1em}
- **Backup-Systeme** Automatisch, täglich & zuverlässig \begin{center}
\vspace{1em} \begin{tikzpicture}
- **Premium-Bereich** Exklusiv, motivierend & sicher
\vspace{1em} % ── Card 1: Datensicherheit ────────────────────────────────────────
\fill[rounded corners=6pt, fill=orange!8] (0,0) rectangle (3.4,-3.0);
\draw[rounded corners=6pt, orange, line width=1.8pt] (0,0) rectangle (3.4,-3.0);
\begin{scope}
\clip[rounded corners=6pt] (0,0) rectangle (3.4,-3.0);
\fill[orange] (0,0) rectangle (3.4,-0.85);
\end{scope}
\node[text=white, font=\small\bfseries, align=center] at (1.7,-0.425)
{\faLock\ \ Datensicherheit};
\node[font=\small, align=center, text width=3.0cm] at (1.7,-1.95)
{DSGVO-konform \& verschlüsselt};
% ── Card 2: Backup-Systeme ─────────────────────────────────────────
\fill[rounded corners=6pt, fill=orange!8] (3.8,0) rectangle (7.2,-3.0);
\draw[rounded corners=6pt, orange, line width=1.8pt] (3.8,0) rectangle (7.2,-3.0);
\begin{scope}
\clip[rounded corners=6pt] (3.8,0) rectangle (7.2,-3.0);
\fill[orange] (3.8,0) rectangle (7.2,-0.85);
\end{scope}
\node[text=white, font=\small\bfseries, align=center] at (5.5,-0.425)
{\faDatabase\ \ Backup-Systeme};
\node[font=\small, align=center, text width=3.0cm] at (5.5,-1.95)
{Automatisch, täglich \& zuverlässig};
% ── Card 3: Premium-Bereich ────────────────────────────────────────
\fill[rounded corners=6pt, fill=orange!8] (7.6,0) rectangle (11.0,-3.0);
\draw[rounded corners=6pt, orange, line width=1.8pt] (7.6,0) rectangle (11.0,-3.0);
\begin{scope}
\clip[rounded corners=6pt] (7.6,0) rectangle (11.0,-3.0);
\fill[orange] (7.6,0) rectangle (11.0,-0.85);
\end{scope}
\node[text=white, font=\small\bfseries, align=center] at (9.3,-0.425)
{\faStar\ \ Premium-Bereich};
\node[font=\small, align=center, text width=3.0cm] at (9.3,-1.95)
{Exklusiv, motivierend \& sicher};
\end{tikzpicture}
\end{center}
--- ---
@@ -26,44 +63,75 @@
--- ---
## Eingesetzte Technologien ## Eingesetzte Technologien
- **Datenbanksystem**: PostgreSQL
- **Authentifizierung**: OAuth 2.0 (LinkedIn) \vspace{1em}
- **Scripting & Automation**: Bash-Skripte für Linux Cronjobs
\begin{columns}[c]
\begin{column}{0.33\textwidth}
\centering
\includegraphics[height=2.2cm]{image-1.png}\\[0.5em]
{\large\textbf{\color{accent}PostgreSQL}}\\[0.3em]
{\small Relationale Datenbank\\für strukturierte Datenspeicherung}
\end{column}
\begin{column}{0.33\textwidth}
\centering
\includegraphics[height=2.2cm]{image-6.png}\\[0.5em]
{\large\textbf{\color{accent}LinkedIn OAuth 2.0}}\\[0.3em]
{\small Sichere Authentifizierung\\ohne eigene Passwortverwaltung}
\end{column}
\begin{column}{0.33\textwidth}
\centering
\includegraphics[height=2.2cm]{image-7.png}\\[0.5em]
{\large\textbf{\color{accent}Bash}}\\[0.3em]
{\small Automatisierte Skripte\\für Linux Cronjobs}
\end{column}
\end{columns}
--- ---
## DSGVO & Datenschutz ## DSGVO & Datenschutz
- **Rechtliche Basis**: Einhaltung von DSGVO & DSG. - **Rechtliche Basis**: Einhaltung von DSGVO & DSG.
- **Umsetzung**: - **Umsetzung**:
- **Datenschutzerklärung**: Rechtskonform integriert.
- **Datenminimierung**: Nur zwingend benötigte Daten.
- **Vertraulichkeit**: TLS/HTTPS & lokales Austria-Hosting.
- **Betroffenenrechte**: Auskunft & Löschung garantiert.
\begin{center} \begin{center}
\begin{tikzpicture}[ \begin{tikzpicture}[
node distance=0cm, node distance=0.5cm,
stepnode/.style={rectangle, rounded corners=3pt, minimum width=2.7cm, minimum height=2.6cm, draw, line width=1pt, fill=white, inner sep=2pt}, stepnode/.style={rectangle, rounded corners=3pt, minimum width=4.2cm, minimum height=2.2cm, draw, line width=1pt, fill=white, inner sep=2pt},
iconnode/.style={circle, minimum size=0.8cm, fill=gray!5}, iconnode/.style={circle, minimum size=0.8cm, fill=gray!5},
titlenode/.style={align=center, font=\scriptsize\bfseries}, titlenode/.style={align=center, font=\scriptsize\bfseries},
arrow/.style={-latex, line width=1.5pt, color=accent!60}
] ]
% Boxes % Obere Reihe
\node[stepnode, draw=gray] (n1) at (0,0) {}; \node[stepnode, draw=gray] (n1) at (0,0) {};
\node[stepnode, draw=green!60!black, right=of n1] (n2) {}; \node[stepnode, draw=green!60!black, right=of n1] (n2) {};
\node[stepnode, draw=blue!60!black, right=of n2] (n3) {};
\node[stepnode, draw=orange, right=of n3] (n4) {};
% Icons % Untere Reihe
\node[iconnode] at (n1.north) [yshift=-0.7cm] {\color{gray}\small\faCodeBranch}; \node[stepnode, draw=blue!60!black, below=of n1] (n3) {};
\node[iconnode] at (n2.north) [yshift=-0.7cm] {\color{green!60!black}\small\faCheckCircle}; \node[stepnode, draw=orange, below=of n2] (n4) {};
\node[iconnode] at (n3.north) [yshift=-0.7cm] {\color{blue!60!black}\small\faCogs};
\node[iconnode] at (n4.north) [yshift=-0.7cm] {\color{orange}\small\faBoxOpen};
% Titles and Subtext % Icons obere Reihe
\node[titlenode] at (n1.center) [yshift=-0.1cm] {Datenschutzerklärung}; \node[iconnode] at (n1.north) [yshift=-0.7cm] {\color{gray}\small\faFile};
\node[titlenode] at (n2.center) [yshift=-0.1cm] {Datenminimierung}; \node[iconnode] at (n2.north) [yshift=-0.7cm] {\color{green!60!black}\small\faFilter};
\node[titlenode] at (n3.center) [yshift=-0.1cm] {Vertraulichkeit};
\node[titlenode] at (n4.center) [yshift=-0.1cm] {Betroffenenrechte}; % Icons untere Reihe
\node[iconnode] at (n3.north) [yshift=-0.7cm] {\color{blue!60!black}\small\faLock};
\node[iconnode] at (n4.north) [yshift=-0.7cm] {\color{orange}\small\faUserShield};
% Labels
\node[titlenode] at (n1.center) [yshift=-0.2cm] {Datenschutz-\\erkl\"{a}rung};
\node[titlenode] at (n2.center) [yshift=-0.2cm] {Daten-\\minimierung};
\node[titlenode] at (n3.center) [yshift=-0.2cm] {Vertrau-\\lichkeit};
\node[titlenode] at (n4.center) [yshift=-0.2cm] {Betroffenen-\\rechte};
% Pfeile: → rechts oben, ↓ rechts, → rechts unten
% \draw[arrow] (n1) -- (n2);
% \draw[arrow] (n2) -- (n4);
% \draw[arrow] (n3) -- (n4);
\end{tikzpicture} \end{tikzpicture}
\end{center} \end{center}
@@ -77,6 +145,7 @@
![](image.png) ![](image.png)
---
## Backup- & Restore-Systeme (2) ## Backup- & Restore-Systeme (2)
- **Speichermanagement (Retention)**: - **Speichermanagement (Retention)**:

View File

@@ -149,23 +149,28 @@
\begin{tikzpicture}[remember picture, overlay, \begin{tikzpicture}[remember picture, overlay,
problem/.style={rectangle, rounded corners=3pt, draw=red!60!black, fill=red!8, minimum width=5cm, minimum height=1.4cm, align=center, font=\small}, problem/.style={rectangle, rounded corners=3pt, draw=red!60!black, fill=red!8, minimum width=5cm, minimum height=1.4cm, align=center, font=\small},
solution/.style={rectangle, rounded corners=3pt, draw=green!60!black, fill=green!8, minimum width=5cm, minimum height=1.4cm, align=center, font=\small}, solution/.style={rectangle, rounded corners=3pt, draw=green!60!black, fill=green!8, minimum width=5cm, minimum height=1.4cm, align=center, font=\small},
header/.style={font=\small\bfseries\color{gray!70}} header/.style={font=\small\bfseries\color{gray!70!black}},
arrow/.style={-latex, line width=1.5pt, color=accent!70}
] ]
% Spalten-Header % Spalten-Header
\node[header] at ([xshift=-2.5cm, yshift=2.2cm]current page.center) {Herausforderung}; \node[header] at ([xshift=-2.5cm, yshift=2.2cm]current page.center) {Herausforderung};
\node[header] at ([xshift=2.5cm, yshift=2.2cm]current page.center) {Lösung}; \node[header] at ([xshift=4cm, yshift=2.2cm]current page.center) {Lösung};
% Reihe 1 % Reihe 1
\node[problem] at ([xshift=-2.5cm, yshift=0.9cm]current page.center) (p1) {$\triangle$\;\textbf{Plattformwechsel}\\[-1mm]{\scriptsize Windows $\rightarrow$ macOS}}; \node[problem] at ([xshift=-2.5cm, yshift=0.9cm]current page.center) (p1) {$\triangle$\;\textbf{Plattformwechsel}\\[-1mm]{\scriptsize Windows $\rightarrow$ macOS}};
\node[solution] at ([xshift=2.5cm, yshift=0.9cm]current page.center) (s1) {\checkmark\;\textbf{Visual Studio Code}\\[-1mm]{\scriptsize Plattformübergreifend}}; \node[solution] at ([xshift=4cm, yshift=0.9cm]current page.center) (s1) {\checkmark\;\textbf{Visual Studio Code}\\[-1mm]{\scriptsize Plattformübergreifend}};
% Reihe 2 % Reihe 2
\node[problem] at ([xshift=-2.5cm, yshift=-1.1cm]current page.center) (p2) {$\triangle$\;\textbf{Kein CMS verfügbar}\\[-1mm]{\scriptsize Sommer 2025, Event steht an}}; \node[problem] at ([xshift=-2.5cm, yshift=-1.1cm]current page.center) (p2) {$\triangle$\;\textbf{Kein CMS verfügbar}\\[-1mm]{\scriptsize Sommer 2025, Event steht an}};
\node[solution] at ([xshift=2.5cm, yshift=-1.1cm]current page.center) (s2) {\checkmark\;\textbf{Node.js/HTML}\\[-1mm]{\scriptsize Übergangslösung}}; \node[solution] at ([xshift=4cm, yshift=-1.1cm]current page.center) (s2) {\checkmark\;\textbf{Node.js/HTML}\\[-1mm]{\scriptsize Übergangslösung}};
% Reihe 3 % Reihe 3
\node[problem] at ([xshift=-2.5cm, yshift=-3.1cm]current page.center) (p3) {$\triangle$\;\textbf{UI-Fehler am Handy}\\[-1mm]{\scriptsize Clipping-Probleme}}; \node[problem] at ([xshift=-2.5cm, yshift=-3.1cm]current page.center) (p3) {$\triangle$\;\textbf{UI-Fehler am Handy}\\[-1mm]{\scriptsize Clipping-Probleme}};
\node[solution] at ([xshift=2.5cm, yshift=-3.1cm]current page.center) (s3) {\checkmark\;\textbf{Testen und Anpassen}\\[-1mm]{\scriptsize Debuggen und Verbessern der UI}}; \node[solution] at ([xshift=4cm, yshift=-3.1cm]current page.center) (s3) {\checkmark\;\textbf{Testen und Anpassen}\\[-1mm]{\scriptsize Debuggen und Verbessern der UI}};
\draw[arrow] (p1) -- (s1);
\draw[arrow] (p2) -- (s2);
\draw[arrow] (p3) -- (s3);
\end{tikzpicture} \end{tikzpicture}
--- ---

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

BIN
Defensio/image-1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

BIN
Defensio/image-2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
Defensio/image-3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

BIN
Defensio/image-4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

BIN
Defensio/image-5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

BIN
Defensio/image-6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

BIN
Defensio/image-7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB