Compare commits
31 Commits
b975d4e270
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 27ef0a0ba7 | |||
| 6e124dfb67 | |||
| d900fa258d | |||
| 1f21067f75 | |||
| 0306fabb91 | |||
| a52d5ab983 | |||
| 25fc5690fe | |||
| f88a170d86 | |||
| 71678fafa3 | |||
| 898d7eacce | |||
| deb8173bde | |||
| 2bfede6112 | |||
| ae5ecf8564 | |||
| 48b6193507 | |||
| d2c877fe42 | |||
| e065b1f6ff | |||
| 6a6786f6bc | |||
| 803bdb234a | |||
| e30c4086e2 | |||
| 9f827889f9 | |||
| a7d0f34a14 | |||
| e4dc1dc97c | |||
| 522e60793a | |||
| 4518e8142e | |||
| 8bde5bc89b | |||
| d57913c339 | |||
| aa983da15d | |||
| dfec681d34 | |||
| 1e5696cd50 | |||
| bafe030e25 | |||
| 62a6dd1fe3 |
@@ -33,13 +33,14 @@
|
|||||||
\usepackage{pgfplots}
|
\usepackage{pgfplots}
|
||||||
\usepackage{pgfplotstable}
|
\usepackage{pgfplotstable}
|
||||||
% \usepackage{fontawesome}
|
% \usepackage{fontawesome}
|
||||||
|
\usepackage{fontawesome5}
|
||||||
\usepackage{tikzpingus}
|
\usepackage{tikzpingus}
|
||||||
\usepackage{tikzducks}
|
\usepackage{tikzducks}
|
||||||
\usepackage{pdfpc}
|
\usepackage{pdfpc}
|
||||||
\usepackage{amsmath}
|
\usepackage{amsmath}
|
||||||
|
|
||||||
\usepgfplotslibrary{dateplot}
|
\usepgfplotslibrary{dateplot}
|
||||||
\usetikzlibrary{shapes,tikzmark}
|
\usetikzlibrary{shapes,tikzmark,positioning,shapes.geometric}
|
||||||
\tikzset{pipelinestep/.style={lw,rnd,shape=signal,signal from=west,signal pointer angle=130,minimum width=3cm,minimum height=2cm,draw=black,fill=lightgray!30}}
|
\tikzset{pipelinestep/.style={lw,rnd,shape=signal,signal from=west,signal pointer angle=130,minimum width=3cm,minimum height=2cm,draw=black,fill=lightgray!30}}
|
||||||
|
|
||||||
\def\info#1{\begingroup\color{gray}\scriptsize#1\endgroup}
|
\def\info#1{\begingroup\color{gray}\scriptsize#1\endgroup}
|
||||||
|
|||||||
@@ -4,8 +4,10 @@
|
|||||||
|
|
||||||
## {.plain}
|
## {.plain}
|
||||||
|
|
||||||
|
\setbeamertemplate{sidebar left}{}
|
||||||
|
|
||||||
\begin{tikzpicture}[remember picture,overlay]
|
\begin{tikzpicture}[remember picture,overlay]
|
||||||
\node[anchor=center] at (current page.center) {
|
\node[anchor=center, inner sep=0pt, outer sep=0pt] at (current page.center) {
|
||||||
\movie[width=\paperwidth, height=\paperheight, poster, showcontrols=false, autostart]{}{\imagepath/video/introduction/sample-10s.mp4}
|
\movie[width=\paperwidth, height=\paperheight, poster, showcontrols=false, autostart]{}{\imagepath/video/introduction/introduction.mp4}
|
||||||
};
|
};
|
||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
|
|||||||
@@ -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,51 +56,210 @@
|
|||||||
- **PostgreSQL:** Datenbank
|
- **PostgreSQL:** Datenbank
|
||||||
- **Oqtane:** CMS
|
- **Oqtane:** CMS
|
||||||
|
|
||||||
::::
|
:::
|
||||||
:::
|
:::
|
||||||
|
|
||||||
|
\vfill
|
||||||
|
|
||||||
## CI/CD
|
\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}
|
||||||
|
|
||||||
CI:
|
\vfill
|
||||||
|
<!-- { width=100% } -->
|
||||||
|
|
||||||
- Gitea Actions
|
## {.unnumbered .noframenumbering}
|
||||||
- Debian Packages (.deb)
|
|
||||||
- Code-Reviewing:
|
|
||||||
- KI
|
|
||||||
- Git-Flow
|
|
||||||
|
|
||||||
## Softwarearchitektur
|
\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
|
||||||
|
```
|
||||||
|
|
||||||
|
\vfill
|
||||||
|
|
||||||
|
## Vom 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=red] (n1) at (0,0) {\color{red}\small\faCodeBranch};
|
||||||
|
\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\faTasks};
|
||||||
|
\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=red] {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=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=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
|
- Open-Closed Principle
|
||||||
- Strategy Pattern
|
- Dependency Injection (IServiceProvider)
|
||||||
- Dependency Injection
|
- Repository-Pattern (EntityFramework)
|
||||||
|
|
||||||
## Technischer Vergleich
|
|
||||||
|
|
||||||
Bisherige Erfahrungen:
|
## Module
|
||||||
|
|
||||||
- Go
|
|
||||||
- Typescript
|
|
||||||
- GRPC (interprozess Kommunikation)
|
|
||||||
|
|
||||||
Untersuchungsgebiete:
|
|
||||||
|
|
||||||
- Typisierung
|
|
||||||
- Konsistenz
|
|
||||||
|
|
||||||
## Teamleitung
|
|
||||||
|
|
||||||
::: columns
|
::: columns
|
||||||
|
::: {.column width="50%"}
|
||||||
|
**Admin Module:**
|
||||||
|
|
||||||
:::: column
|
- Mass Mailer
|
||||||
left
|
- Token Lifetime
|
||||||
::::
|
- Report System
|
||||||
|
|
||||||
:::: column
|
**Allgemeine Module:**
|
||||||
right
|
|
||||||
::::
|
- Event Registration
|
||||||
|
- Black Board
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
::: {.column width="50%"}
|
||||||
|
\vfill
|
||||||
|

|
||||||
|
\vfill
|
||||||
|
:::
|
||||||
|
:::
|
||||||
|
|
||||||
## Fazit
|
## 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 width="40%"}
|
||||||
|
"It works on my Machine"
|
||||||
|
:::
|
||||||
|
::: {.column width="60%"}
|
||||||
|
**Deploymentprobleme**
|
||||||
|
|
||||||
|
**Problem:** Schlechte Dokumentation.
|
||||||
|
|
||||||
|
**Lösung:** Debugging mithilfe von Wireshark und Source Code lesen.
|
||||||
|
:::
|
||||||
|
:::
|
||||||
|
|
||||||
|
|
||||||
|
## 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
|
||||||
|
|
||||||
|
::::
|
||||||
|
:::
|
||||||
|
|
||||||
|
{ width=60% }
|
||||||
|
|
||||||
|
## Fazit
|
||||||
|
|
||||||
|
\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{1em}
|
||||||
|
|
||||||
|
Learnings:
|
||||||
|
|
||||||
|
- **Asynchrones Arbeiten:** Entkopplung von Meetings und Deadlines.
|
||||||
|
- **Review-First-Policy:** Konsequente Umsetzung der *Definition of Done*.
|
||||||
|
- **Team-Fokus:** höhere Motivation und Eigenverantwortung durch Verkleinerung des Teams.
|
||||||
@@ -2,9 +2,49 @@
|
|||||||
|
|
||||||
## Individueller Teil: Florian Edlmayer
|
## Individueller Teil: Florian Edlmayer
|
||||||
|
|
||||||
- **Datensicherheit** – DSGVO-konform & verschlüsselt
|
\vspace{0.8em}
|
||||||
- **Backup-Systeme** – Automatisch, täglich & zuverlässig
|
|
||||||
- **Premium-Bereich** – Exklusiv, motivierend & sicher
|
\begin{center}
|
||||||
|
\begin{tikzpicture}
|
||||||
|
|
||||||
|
% ── 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}
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -23,19 +63,77 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
## 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.
|
\begin{center}
|
||||||
- **Vertraulichkeit**: TLS/HTTPS & lokales Austria-Hosting.
|
\begin{tikzpicture}[
|
||||||
- **Betroffenenrechte**: Auskunft & Löschung garantiert.
|
node distance=0.5cm,
|
||||||
|
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},
|
||||||
|
titlenode/.style={align=center, font=\scriptsize\bfseries},
|
||||||
|
arrow/.style={-latex, line width=1.5pt, color=accent!60}
|
||||||
|
]
|
||||||
|
% Obere Reihe
|
||||||
|
\node[stepnode, draw=gray] (n1) at (0,0) {};
|
||||||
|
\node[stepnode, draw=green!60!black, right=of n1] (n2) {};
|
||||||
|
|
||||||
|
% Untere Reihe
|
||||||
|
\node[stepnode, draw=blue!60!black, below=of n1] (n3) {};
|
||||||
|
\node[stepnode, draw=orange, below=of n2] (n4) {};
|
||||||
|
|
||||||
|
% Icons – obere Reihe
|
||||||
|
\node[iconnode] at (n1.north) [yshift=-0.7cm] {\color{gray}\small\faFile};
|
||||||
|
\node[iconnode] at (n2.north) [yshift=-0.7cm] {\color{green!60!black}\small\faFilter};
|
||||||
|
|
||||||
|
% 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{center}
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -43,7 +141,9 @@
|
|||||||
- **Problem**: Datenverlust (Hardware, Software, Cyberangriffe).
|
- **Problem**: Datenverlust (Hardware, Software, Cyberangriffe).
|
||||||
- **Lösung**: Vollautomatisiertes Backup-Skript.
|
- **Lösung**: Vollautomatisiertes Backup-Skript.
|
||||||
|
|
||||||

|
\vspace{2em}
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -64,7 +164,7 @@
|
|||||||
- Abbau von Registrierungshürden.
|
- Abbau von Registrierungshürden.
|
||||||
- Keine sensiblen Passwörter im eigenen System.
|
- Keine sensiblen Passwörter im eigenen System.
|
||||||
|
|
||||||

|
{width=20em}
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -78,7 +178,7 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
## Der Premium-Bereich (2)
|
## Der Premium-Bereich (2)
|
||||||

|

|
||||||
**Datensparsame Mitgliedersuche & Kontaktfunktion:**
|
**Datensparsame Mitgliedersuche & Kontaktfunktion:**
|
||||||

|

|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,8 @@
|
|||||||
- Oqtane-Theme
|
- Oqtane-Theme
|
||||||
- Hall-of-Fame-Modul
|
- Hall-of-Fame-Modul
|
||||||
- Anmeldetool
|
- Anmeldetool
|
||||||
- **Ziel**: Moderne, responsive Website für den HTL-Absolventenverein
|
- **Ziel**:
|
||||||
|
- Moderne, responsive Website für den SZU Absolventenverein
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -50,10 +51,10 @@
|
|||||||
::: columns
|
::: columns
|
||||||
|
|
||||||
:::: column
|
:::: column
|
||||||
- Eigen‑Navigation (bootstrap Komponenten haben nicht gepasst ).
|
- Eigen‑Navigation (Bootstrap-Komponenten haben nicht gepasst).
|
||||||
- Systemseiten per LINQ ausblenden.
|
- Systemseiten per LINQ ausblenden.
|
||||||
- Responsive CSS‑Media‑Queries + reines CSS‑Burger‑Menu.
|
- Responsive CSS‑Media‑Queries + reines CSS‑Burger‑Menu.
|
||||||
- Cookie‑Consent (erforderlich für dsgvo konformität und gesamtheit der website ).
|
- Cookie‑Consent (erforderlich für DSGVO-Konformität und Gesamtheit der Website).
|
||||||
::::
|
::::
|
||||||
|
|
||||||
:::: column
|
:::: column
|
||||||
@@ -77,7 +78,7 @@
|
|||||||
|
|
||||||
:::: column
|
:::: column
|
||||||
\begin{tikzpicture}
|
\begin{tikzpicture}
|
||||||
\node[inner sep=0pt, rounded corners=5pt, clip] {\includegraphics[width=0.55\columnwidth]{Images/HallOfFameBeispiel.png}};
|
\node[inner sep=0pt, rounded corners=5pt, clip] {\includegraphics[width=0.55\columnwidth]{Images/HallOfFamePdfNeuBesser.png}};
|
||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
::::
|
::::
|
||||||
|
|
||||||
@@ -121,19 +122,19 @@
|
|||||||
\begin{tikzpicture}[remember picture, overlay]
|
\begin{tikzpicture}[remember picture, overlay]
|
||||||
\node at (current page.center) {
|
\node at (current page.center) {
|
||||||
\begin{tabular}{@{}c@{\hspace{4mm}}c@{}}
|
\begin{tabular}{@{}c@{\hspace{4mm}}c@{}}
|
||||||
\begin{tcolorbox}[colback=accent!5, colframe=accent, arc=3pt, title=\textbf{UI}, width=6cm]
|
\begin{tcolorbox}[colback=accent!5, colframe=accent, arc=3pt, title=\textbf{UI}, width=6.5cm, height=2cm, valign=center]
|
||||||
\centering Ja/Nein-Buttons (grün/rot)
|
\centering Ja/Nein-Buttons (grün/rot)
|
||||||
\end{tcolorbox}
|
\end{tcolorbox}
|
||||||
&
|
&
|
||||||
\begin{tcolorbox}[colback=accent!5, colframe=accent, arc=3pt, title=\textbf{Live-Feedback}, width=6cm]
|
\begin{tcolorbox}[colback=accent!5, colframe=accent, arc=3pt, title=\textbf{Live-Feedback}, width=6.5cm, height=2cm, valign=center]
|
||||||
\centering Sofort via Blazor
|
\centering Sofort via Blazor
|
||||||
\end{tcolorbox}
|
\end{tcolorbox}
|
||||||
\\[3mm]
|
\\[3mm]
|
||||||
\begin{tcolorbox}[colback=accent!5, colframe=accent, arc=3pt, title=\textbf{Mobile}, width=6cm]
|
\begin{tcolorbox}[colback=accent!5, colframe=accent, arc=3pt, title=\textbf{Mobile}, width=6.5cm, height=2cm, valign=center]
|
||||||
\centering Sauberes Touch-Handling
|
\centering Sauberes Touch-Handling
|
||||||
\end{tcolorbox}
|
\end{tcolorbox}
|
||||||
&
|
&
|
||||||
\begin{tcolorbox}[colback=accent!5, colframe=accent, arc=3pt, title=\textbf{Architektur}, width=6cm]
|
\begin{tcolorbox}[colback=accent!5, colframe=accent, arc=3pt, title=\textbf{Architektur}, width=6.5cm, height=2cm, valign=center]
|
||||||
\centering UI \& Backend-API getrennt
|
\centering UI \& Backend-API getrennt
|
||||||
\end{tcolorbox}
|
\end{tcolorbox}
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
@@ -148,22 +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}};
|
||||||
|
|
||||||
% Trennlinie
|
|
||||||
\draw[gray!30, dashed] ([xshift=-4.5cm]current page.center) -- ([xshift=4.5cm]current page.center);
|
|
||||||
|
|
||||||
% 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
|
||||||
|
\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=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}
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
BIN
Defensio/Images/HallOfFamePdfNeuBesser.png
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 352 KiB After Width: | Height: | Size: 352 KiB |
BIN
Defensio/Images/images/florian/image-1.png
Normal file
|
After Width: | Height: | Size: 53 KiB |
BIN
Defensio/Images/images/florian/image-2.png
Normal file
|
After Width: | Height: | Size: 75 KiB |
BIN
Defensio/Images/images/florian/image-3.png
Normal file
|
After Width: | Height: | Size: 65 KiB |
BIN
Defensio/Images/images/florian/image-4.png
Normal file
|
After Width: | Height: | Size: 49 KiB |
BIN
Defensio/Images/images/florian/image.png
Normal file
|
After Width: | Height: | Size: 86 KiB |
BIN
Defensio/Images/images/konstantin/BlackBoard-Overview.png
Normal file
|
After Width: | Height: | Size: 227 KiB |
BIN
Defensio/Images/images/konstantin/Brevo.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
Defensio/Images/images/konstantin/EventRegistration-PieChart.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
Defensio/Images/images/konstantin/GiteaActions-Overview.png
Normal file
|
After Width: | Height: | Size: 220 KiB |
BIN
Defensio/Images/images/konstantin/GiteaIssues-TaskBoard.png
Normal file
|
After Width: | Height: | Size: 459 KiB |
BIN
Defensio/Images/images/konstantin/GiteaPackageRepository.png
Normal file
|
After Width: | Height: | Size: 195 KiB |
BIN
Defensio/Images/images/konstantin/ReportingSystem.png
Normal file
|
After Width: | Height: | Size: 71 KiB |
BIN
Defensio/Images/images/konstantin/logos/debian.pdf
Normal file
BIN
Defensio/Images/images/konstantin/logos/docker.pdf
Normal file
BIN
Defensio/Images/images/konstantin/logos/gitea.pdf
Normal file
BIN
Defensio/Images/images/konstantin/logos/github.pdf
Normal file
BIN
Defensio/Images/images/konstantin/logos/nginx.pdf
Normal file
BIN
Defensio/Images/images/konstantin/logos/oqtane.pdf
Normal file
BIN
Defensio/Images/images/konstantin/logos/postgres.pdf
Normal file
BIN
Defensio/Images/images/konstantin/logos/wireguard.pdf
Normal file
BIN
Defensio/Images/video/introduction/introduction.mp4
Normal file
|
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 101 KiB |
|
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 44 KiB |
BIN
Defensio/image-5.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
Defensio/image-6.png
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
BIN
Defensio/image-7.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 86 KiB |