Compare commits
1 Commits
1bd88dca6a
...
gaisi-patc
| Author | SHA1 | Date | |
|---|---|---|---|
| c50580733c |
@@ -58,153 +58,40 @@
|
|||||||
::::
|
::::
|
||||||
:::
|
:::
|
||||||
|
|
||||||
\vfill
|
|
||||||
|
|
||||||
\begin{center}
|
## CI/CD
|
||||||
\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
|
CI:
|
||||||
<!-- { width=100% } -->
|
|
||||||
|
|
||||||
---
|
- Gitea Actions
|
||||||
|
- Debian Packages (.deb)
|
||||||
|
- Code-Reviewing:
|
||||||
|
- KI
|
||||||
|
- Git-Flow
|
||||||
|
|
||||||
**Produktions-Infrastruktur:**
|
## Softwarearchitektur
|
||||||
|
|
||||||
```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] (n1) at (0,0) {\color{gray}\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=orange, right=of n3] (n4) {\color{orange}\small\faBoxOpen};
|
|
||||||
\node[stepnode, draw=orange!70!black, right=of n4] (n5) {\color{orange!70!black}\small\faDatabase};
|
|
||||||
|
|
||||||
% Labels Above
|
|
||||||
\node[labelnode, below=0.2cm of n1, color=gray] {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=orange] {.deb Paket};
|
|
||||||
\node[labelnode, below=0.2cm of n5, color=orange!70!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:**
|
|
||||||
|
|
||||||
\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
|
- Open-Closed Principle
|
||||||
- Dependency Injection (IServiceProvider)
|
- Strategy Pattern
|
||||||
- Repository-Pattern (EntityFramework)
|
- Dependency Injection
|
||||||
|
|
||||||
|
## Technischer Vergleich
|
||||||
|
|
||||||
## Module
|
Bisherige Erfahrungen:
|
||||||
|
|
||||||
|
- Go
|
||||||
|
- Typescript
|
||||||
|
- GRPC (interprozess Kommunikation)
|
||||||
|
|
||||||
|
Untersuchungsgebiete:
|
||||||
|
|
||||||
|
- Typisierung
|
||||||
|
- Konsistenz
|
||||||
|
|
||||||
|
## Teamleitung
|
||||||
|
|
||||||
::: columns
|
::: 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
|
|
||||||
"It works on my Machine"
|
|
||||||
::::
|
|
||||||
:::: column
|
:::: column
|
||||||
left
|
left
|
||||||
::::
|
::::
|
||||||
|
|||||||
@@ -117,88 +117,44 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
## Anmeldetool
|
## Anmeldetool
|
||||||
\vspace{1cm}
|
- **UI**: Ja/Nein‑Buttons (grün/rot)
|
||||||
\begin{tikzpicture}[remember picture, overlay]
|
- **Live‑Feedback**: Sofortige Statusänderung via Blazor
|
||||||
\node at (current page.center) {
|
- **Mobile**: Sauberes Touch-Handling
|
||||||
\begin{tabular}{@{}c@{\hspace{4mm}}c@{}}
|
- **Architektur**: UI & Backend-API getrennt
|
||||||
\begin{tcolorbox}[colback=accent!5, colframe=accent, arc=3pt, title=\textbf{UI}, width=6cm]
|
|
||||||
\centering Ja/Nein-Buttons (grün/rot)
|
|
||||||
\end{tcolorbox}
|
|
||||||
&
|
|
||||||
\begin{tcolorbox}[colback=accent!5, colframe=accent, arc=3pt, title=\textbf{Live-Feedback}, width=6cm]
|
|
||||||
\centering Sofort via Blazor
|
|
||||||
\end{tcolorbox}
|
|
||||||
\\[3mm]
|
|
||||||
\begin{tcolorbox}[colback=accent!5, colframe=accent, arc=3pt, title=\textbf{Mobile}, width=6cm]
|
|
||||||
\centering Sauberes Touch-Handling
|
|
||||||
\end{tcolorbox}
|
|
||||||
&
|
|
||||||
\begin{tcolorbox}[colback=accent!5, colframe=accent, arc=3pt, title=\textbf{Architektur}, width=6cm]
|
|
||||||
\centering UI \& Backend-API getrennt
|
|
||||||
\end{tcolorbox}
|
|
||||||
\end{tabular}
|
|
||||||
};
|
|
||||||
\end{tikzpicture}
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Herausforderungen & Lösungen
|
## Herausforderungen & Lösungen
|
||||||
|
- **Plattformwechsel** Windows → macOS
|
||||||
\vspace{5mm}
|
- Oqtane stark an Windows gebunden
|
||||||
\begin{tikzpicture}[remember picture, overlay,
|
- → **Visual Studio Code** als plattformübergreifende Lösung
|
||||||
problem/.style={rectangle, rounded corners=3pt, draw=red!60!black, fill=red!8, minimum width=5cm, minimum height=1.4cm, align=center, font=\small},
|
- **Keine funktionsfähige Website** (Sommer 2025)
|
||||||
solution/.style={rectangle, rounded corners=3pt, draw=green!60!black, fill=green!8, minimum width=5cm, minimum height=1.4cm, align=center, font=\small},
|
- Kurz vor einem Event, kein funktionierendes CMS
|
||||||
header/.style={font=\small\bfseries\color{gray!70}}
|
- → Schnelle **Node.js/HTML-Übergangslösung** sicherte Event-Anmeldung
|
||||||
]
|
|
||||||
% 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) {Lösung};
|
|
||||||
|
|
||||||
% Reihe 1
|
|
||||||
\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}};
|
|
||||||
|
|
||||||
% Trennlinie
|
|
||||||
\draw[gray!30, dashed] ([xshift=-4.5cm]current page.center) -- ([xshift=4.5cm]current page.center);
|
|
||||||
|
|
||||||
% 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[solution] at ([xshift=2.5cm, yshift=-1.1cm]current page.center) (s2) {\checkmark\;\textbf{Node.js/HTML}\\[-1mm]{\scriptsize Übergangslösung}};
|
|
||||||
\end{tikzpicture}
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Learnings
|
## Learnings
|
||||||
|
|
||||||
\vspace{1cm}
|
\vspace{1cm}
|
||||||
\begin{tikzpicture}[remember picture, overlay,
|
\begin{tikzpicture}[remember picture, overlay]
|
||||||
every node/.style={font=\small},
|
\node at (current page.center) {
|
||||||
branch/.style={thick, accent},
|
\renewcommand{\arraystretch}{1.5}
|
||||||
cat/.style={rectangle, rounded corners=3pt, draw=accent, fill=accent!15, font=\small\bfseries, minimum height=7mm, align=center},
|
\begin{tabular}{c c c}
|
||||||
item/.style={font=\scriptsize, align=left}
|
\textbf{Technisch} & \textbf{Methodisch} & \textbf{Persönlich} \\
|
||||||
]
|
\hline
|
||||||
\node[circle, draw=accent, fill=accent!20, font=\bfseries, minimum size=1.5cm] at (current page.center) (center) {Learnings};
|
Git & Aufgabenverteilung & Eigeninitiative \\
|
||||||
|
CSS-Flexbox & Regelmäßige Meetings & Verantwortung \\
|
||||||
% Technisch - links
|
Blazor & & \\
|
||||||
\node[cat] at ([xshift=-3.5cm, yshift=0.8cm]current page.center) (tech) {Technisch};
|
\end{tabular}
|
||||||
\draw[branch] (center) -- (tech);
|
};
|
||||||
\node[item, anchor=east] at ([xshift=-1mm, yshift=5mm]tech.west) {Git};
|
|
||||||
\node[item, anchor=east] at ([xshift=-1mm]tech.west) {CSS-Flexbox};
|
|
||||||
\node[item, anchor=east] at ([xshift=-1mm, yshift=-5mm]tech.west) {Blazor};
|
|
||||||
|
|
||||||
% Methodisch - rechts oben
|
|
||||||
\node[cat] at ([xshift=3.5cm, yshift=0.8cm]current page.center) (meth) {Methodisch};
|
|
||||||
\draw[branch] (center) -- (meth);
|
|
||||||
\node[item, anchor=west] at ([xshift=1mm, yshift=3mm]meth.east) {Aufgaben-};
|
|
||||||
\node[item, anchor=west] at ([xshift=1mm, yshift=-3mm]meth.east) {verteilung};
|
|
||||||
\node[item, anchor=west] at ([xshift=1mm, yshift=-9mm]meth.east) {Meetings};
|
|
||||||
|
|
||||||
% Persönlich - unten
|
|
||||||
\node[cat] at ([yshift=-2cm]current page.center) (pers) {Persönlich};
|
|
||||||
\draw[branch] (center) -- (pers);
|
|
||||||
\node[item] at ([yshift=-7mm]pers.south) {Eigeninitiative \& Verantwortung};
|
|
||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Fazit & Ausblick
|
||||||
|
- **Ergebnis**:
|
||||||
|
- Theme final & mobil-optimiert
|
||||||
|
- Hall of Fame funktionsfähig
|
||||||
|
- Anmeldetool einsatzbereit
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,6 +1,6 @@
|
|||||||
\cleardoublepage
|
\cleardoublepage
|
||||||
|
|
||||||
# Adam Gaiswinkler
|
# Adam Gaiswinklerr
|
||||||
|
|
||||||
## Einleitung des individuellen Teils
|
## Einleitung des individuellen Teils
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user