Compare commits
37 Commits
doc-0.0.0-
...
e4dc1dc97c
| Author | SHA1 | Date | |
|---|---|---|---|
| e4dc1dc97c | |||
| 522e60793a | |||
| 4518e8142e | |||
| 8bde5bc89b | |||
| d57913c339 | |||
| aa983da15d | |||
| dfec681d34 | |||
| 1e5696cd50 | |||
| bafe030e25 | |||
| 62a6dd1fe3 | |||
| b975d4e270 | |||
| 8ce0d4e186 | |||
| c6ebf25659 | |||
| 2bb2161e2f | |||
| 7d570e9945 | |||
| 65983a2f38 | |||
| a27136bbe3 | |||
| 764b18e41a | |||
| b07fc29512 | |||
| f6718139cc | |||
| b944048df3 | |||
| 7eb4e0761e | |||
| 1bfd8b3a96 | |||
| 020707c380 | |||
| e623ca9340 | |||
| 76e0d6b65f | |||
| b408cb0d0f | |||
| 23fe2c0863 | |||
| dd8eb9d269 | |||
| c8f95f5169 | |||
| 450509008d | |||
| c780145790 | |||
| 9d96f7eafc | |||
| eb9b4c4c1f | |||
| 2cd24abcde | |||
| c030d304f5 | |||
| b950ec6d66 |
@@ -6,7 +6,7 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
name: Build the debian package
|
name: Convert to PDF
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
@@ -17,26 +17,25 @@ jobs:
|
|||||||
- name: "Submodules auschecken"
|
- name: "Submodules auschecken"
|
||||||
run: git submodule update --init
|
run: git submodule update --init
|
||||||
- name: "Debug"
|
- name: "Debug"
|
||||||
run: ls -la
|
run: ls -la ./Defensio
|
||||||
working_directory: ./Defensio
|
- uses: docker://git.kocoder.xyz/docker/ga-pandoc:d2995fb914e313703da2c7754763e7fa01dae88f
|
||||||
- uses: docker://git.kocoder.xyz/docker/ga-pandoc:c6eaa45b623c284e80f37434872621defc00f864
|
name: Pandoc
|
||||||
working_directory: ./Defensio
|
|
||||||
with:
|
with:
|
||||||
env: TEXINPUTS=.:./libs/awesome-beamer/:./libs/smile/
|
env: TEXINPUTS=./Defensio:./Defensio/libs/awesome-beamer/:./Defensio/libs/smile/
|
||||||
command: pandoc
|
command: pandoc
|
||||||
args: >-
|
args: >-
|
||||||
01_Praesentation_Allgemein.md \
|
/workspace/Diplomarbeit-Absolventenverein/pm/Defensio/01_Praesentation_Allgemein.md
|
||||||
02_Praesentation_Konstantin_Hintermayer.md \
|
/workspace/Diplomarbeit-Absolventenverein/pm/Defensio/02_Praesentation_Konstantin_Hintermayer.md
|
||||||
03_Praesentation_Florian_Edlmayer.md \
|
/workspace/Diplomarbeit-Absolventenverein/pm/Defensio/03_Praesentation_Florian_Edlmayer.md
|
||||||
04_Praesentation_Adam_Gaiswinkler.md \
|
/workspace/Diplomarbeit-Absolventenverein/pm/Defensio/04_Praesentation_Adam_Gaiswinkler.md
|
||||||
-t beamer \
|
-t beamer
|
||||||
--template 00_preamble.tex \
|
--template /workspace/Diplomarbeit-Absolventenverein/pm/Defensio/00_preamble.tex
|
||||||
--pdf-engine=pdflatex \
|
--pdf-engine=pdflatex
|
||||||
--slide-level=2 \
|
--slide-level=2
|
||||||
--number-sections \
|
--number-sections
|
||||||
--lua-filter ../_extensions/diagram/diagram.lua \
|
--lua-filter /workspace/Diplomarbeit-Absolventenverein/pm/_extensions/diagram/diagram.lua
|
||||||
--syntax-definition ../_extensions/razor/razor.xml \
|
--syntax-definition /workspace/Diplomarbeit-Absolventenverein/pm/_extensions/razor/razor.xml
|
||||||
--syntax-definition ../_extensions/nginx/nginx.xml \
|
--syntax-definition /workspace/Diplomarbeit-Absolventenverein/pm/_extensions/nginx/nginx.xml
|
||||||
-o defensio.pdf
|
-o defensio.pdf
|
||||||
- name: "Create release"
|
- name: "Create release"
|
||||||
uses: akkuman/gitea-release-action@v1
|
uses: akkuman/gitea-release-action@v1
|
||||||
|
|||||||
1
.gitignore
vendored
@@ -1 +1,2 @@
|
|||||||
diplomarbeitsbuch.pdf
|
diplomarbeitsbuch.pdf
|
||||||
|
defensio.pdf
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
\documentclass[aspectratio=169]{beamer}
|
\documentclass[aspectratio=169,t]{beamer}
|
||||||
|
|
||||||
\providecommand{\tightlist}{%
|
\providecommand{\tightlist}{%
|
||||||
\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
|
\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
|
||||||
@@ -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}
|
||||||
@@ -73,7 +74,6 @@
|
|||||||
\uni{Schulzentrum HTL HAK Ungargasse}
|
\uni{Schulzentrum HTL HAK Ungargasse}
|
||||||
\location{Wien}
|
\location{Wien}
|
||||||
\background{./Images/images/background/title-slide/background.png}
|
\background{./Images/images/background/title-slide/background.png}
|
||||||
\logo{\includegraphics[width=3cm]{\imagepath/images/logos/logo.png}}
|
|
||||||
\date{22. April 2026}
|
\date{22. April 2026}
|
||||||
|
|
||||||
|
|
||||||
@@ -81,7 +81,7 @@
|
|||||||
{
|
{
|
||||||
\begingroup
|
\begingroup
|
||||||
\nonumberson
|
\nonumberson
|
||||||
\begin{frame}[noframenumbering,plain]{Agenda}
|
\begin{frame}[c,noframenumbering,plain]{Agenda}
|
||||||
\tableofcontents[currentsection]
|
\tableofcontents[currentsection]
|
||||||
\end{frame}
|
\end{frame}
|
||||||
\endgroup
|
\endgroup
|
||||||
@@ -93,7 +93,7 @@
|
|||||||
|
|
||||||
\begingroup
|
\begingroup
|
||||||
\nonumberson
|
\nonumberson
|
||||||
\begin{frame}[noframenumbering,plain]{Agenda}
|
\begin{frame}[c,noframenumbering,plain]{Agenda}
|
||||||
\tableofcontents
|
\tableofcontents
|
||||||
\end{frame}
|
\end{frame}
|
||||||
\endgroup
|
\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}
|
||||||
|
|||||||
@@ -5,16 +5,19 @@
|
|||||||
::: columns
|
::: columns
|
||||||
|
|
||||||
:::: column
|
:::: column
|
||||||
Aufgabenbereiche:
|
**Aufgabenbereiche**:
|
||||||
|
|
||||||
- Infrastruktur & CI/CD
|
|
||||||
- Product Owner
|
- Product Owner
|
||||||
- Kundenschnittstelle
|
- Kundenschnittstelle
|
||||||
- Softwareentwicklung:
|
- Infrastruktur & CI/CD
|
||||||
|
|
||||||
|
**Softwareentwicklung:**
|
||||||
|
|
||||||
- Event Registration
|
- Event Registration
|
||||||
- Black Board
|
- Black Board
|
||||||
- Report System
|
- Report System
|
||||||
- Mass Mailer
|
- Mass Mailer
|
||||||
|
|
||||||
::::
|
::::
|
||||||
|
|
||||||
:::: column
|
:::: column
|
||||||
@@ -34,69 +37,237 @@ Aufgabenbereiche:
|
|||||||
::: columns
|
::: columns
|
||||||
:::: column
|
:::: column
|
||||||
|
|
||||||
Systemaufbau:
|
**Entwicklung:**
|
||||||
|
|
||||||
- Debian Linux
|
- **Gitea:** Versionskontrollsystem
|
||||||
- PostgreSQL
|
- **Wireguard:** VPN
|
||||||
- NginX
|
- **Docker:** Containerisierung
|
||||||
- Asp.Net Core
|
- **GitHub:** Transfer
|
||||||
|
- **Gitea Actions:** CI/CD
|
||||||
|
|
||||||
::::
|
::::
|
||||||
:::: column
|
:::: column
|
||||||
|
|
||||||
Entwicklungsumgebung:
|
**Produktion:**
|
||||||
|
|
||||||
- Gitea Server
|
- **Debian:** Betriebssystem
|
||||||
- Wireguard
|
- **NginX:** Reverse Proxy
|
||||||
- Docker
|
- **PostgreSQL:** Datenbank
|
||||||
- Transfer: GitHub
|
- **Oqtane:** CMS
|
||||||
- Gitea Actions
|
|
||||||
|
|
||||||
::::
|
::::
|
||||||
:::
|
:::
|
||||||
|
|
||||||
|
\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
|
---
|
||||||
- Debian Packages (.deb)
|
|
||||||
- Code-Reviewing:
|
|
||||||
- KI
|
|
||||||
- Git-Flow
|
|
||||||
|
|
||||||
## Softwarearchitektur
|
**Produktions-Infrastruktur:**
|
||||||
|
|
||||||
|
```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=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] {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
|
- Open-Closed Principle
|
||||||
- Strategy Pattern
|
- Dependency Injection (IServiceProvider)
|
||||||
- Dependency Injection
|
- Repository-Pattern (EntityFramework)
|
||||||
|
|
||||||
## Technischer Vergleich
|
## Module
|
||||||
|
|
||||||
Bisherige Erfahrungen:
|
|
||||||
|
|
||||||
- Go
|
|
||||||
- Typescript
|
|
||||||
- GRPC (interprozess Kommunikation)
|
|
||||||
|
|
||||||
Untersuchungsgebiete:
|
|
||||||
|
|
||||||
- Typisierung
|
|
||||||
- Konsistenz
|
|
||||||
|
|
||||||
## Teamleitung
|
|
||||||
|
|
||||||
::: columns
|
::: columns
|
||||||
|
|
||||||
:::: column
|
:::: column
|
||||||
left
|
**Admin Module:**
|
||||||
::::
|
|
||||||
|
|
||||||
|
- Mass Mailer
|
||||||
|
- Token Lifetime
|
||||||
|
- Report System
|
||||||
|
|
||||||
|
**Allgemeine Module:**
|
||||||
|
|
||||||
|
- Event Registration
|
||||||
|
- Black Board
|
||||||
|
|
||||||
|
::::
|
||||||
:::: column
|
:::: column
|
||||||
right
|

|
||||||
::::
|
::::
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
## 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{.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
|
||||||
|
|
||||||
|
::::
|
||||||
|
:::
|
||||||
|
|
||||||
|
{ 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}
|
||||||
|
::::
|
||||||
|
:::
|
||||||
@@ -1,13 +1,21 @@
|
|||||||
# Florian Edlmayer
|
# Florian Edlmayer
|
||||||
|
|
||||||
## Individueller Teil: Florian Edlmayer
|
## Individueller Teil: Florian Edlmayer
|
||||||
**Datensicherheit, Backup-Systeme & Premium-Bereich**
|
|
||||||
|
- **Datensicherheit** – DSGVO-konform & verschlüsselt
|
||||||
|
\vspace{1em}
|
||||||
|
- **Backup-Systeme** – Automatisch, täglich & zuverlässig
|
||||||
|
\vspace{1em}
|
||||||
|
- **Premium-Bereich** – Exklusiv, motivierend & sicher
|
||||||
|
\vspace{1em}
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Ausgangslage & Zielsetzung
|
## Ausgangslage & Zielsetzung
|
||||||
- **Ausgangssituation**:
|
- **Ausgangssituation**:
|
||||||
- Keine digitale, sichere Absolventen-Vernetzung.
|
- Kein digitaler Vernetzungsraum für Absolventen.
|
||||||
|
- Keine rechtskonforme Datenverwaltung (DSGVO).
|
||||||
|
- Keine automatisierte Datensicherung vorhanden.
|
||||||
- **Mein Beitrag**:
|
- **Mein Beitrag**:
|
||||||
- Datenschutz (DSGVO).
|
- Datenschutz (DSGVO).
|
||||||
- Automatisierte Backups & Restore.
|
- Automatisierte Backups & Restore.
|
||||||
@@ -18,7 +26,6 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
## Eingesetzte Technologien
|
## Eingesetzte Technologien
|
||||||
- **Framework**: ASP.NET Core & .NET 8
|
|
||||||
- **Datenbanksystem**: PostgreSQL
|
- **Datenbanksystem**: PostgreSQL
|
||||||
- **Authentifizierung**: OAuth 2.0 (LinkedIn)
|
- **Authentifizierung**: OAuth 2.0 (LinkedIn)
|
||||||
- **Scripting & Automation**: Bash-Skripte für Linux Cronjobs
|
- **Scripting & Automation**: Bash-Skripte für Linux Cronjobs
|
||||||
@@ -33,36 +40,40 @@
|
|||||||
- **Vertraulichkeit**: TLS/HTTPS & lokales Austria-Hosting.
|
- **Vertraulichkeit**: TLS/HTTPS & lokales Austria-Hosting.
|
||||||
- **Betroffenenrechte**: Auskunft & Löschung garantiert.
|
- **Betroffenenrechte**: Auskunft & Löschung garantiert.
|
||||||
|
|
||||||
|
\begin{center}
|
||||||
|
\begin{tikzpicture}[
|
||||||
|
node distance=0cm,
|
||||||
|
stepnode/.style={rectangle, rounded corners=3pt, minimum width=2.7cm, minimum height=2.6cm, 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},
|
||||||
|
]
|
||||||
|
% Boxes
|
||||||
|
\node[stepnode, draw=gray] (n1) at (0,0) {};
|
||||||
|
\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
|
||||||
|
\node[iconnode] at (n1.north) [yshift=-0.7cm] {\color{gray}\small\faCodeBranch};
|
||||||
|
\node[iconnode] at (n2.north) [yshift=-0.7cm] {\color{green!60!black}\small\faCheckCircle};
|
||||||
|
\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
|
||||||
|
\node[titlenode] at (n1.center) [yshift=-0.1cm] {Datenschutzerklärung};
|
||||||
|
\node[titlenode] at (n2.center) [yshift=-0.1cm] {Datenminimierung};
|
||||||
|
\node[titlenode] at (n3.center) [yshift=-0.1cm] {Vertraulichkeit};
|
||||||
|
\node[titlenode] at (n4.center) [yshift=-0.1cm] {Betroffenenrechte};
|
||||||
|
\end{tikzpicture}
|
||||||
|
\end{center}
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Backup- & Restore-Systeme (1)
|
## Backup- & Restore-Systeme (1)
|
||||||
- **Problem**: Datenverlust (Hardware, Software, Cyberangriffe).
|
- **Problem**: Datenverlust (Hardware, Software, Cyberangriffe).
|
||||||
- **Lösung**: Vollautomatisiertes Backup-Skript.
|
- **Lösung**: Vollautomatisiertes Backup-Skript.
|
||||||
|
|
||||||
```mermaid
|

|
||||||
graph LR
|
|
||||||
Start((Start: Cronjob 02:30)) --> Init[Initialisierung]
|
|
||||||
Init --> Vars[Konfiguration laden]
|
|
||||||
|
|
||||||
subgraph Sicherungsphase
|
|
||||||
Dir[Erstelle Backup-Ordner] --> DB[Datenbank-Backup]
|
|
||||||
DB --> Files[Dateisystem sichern]
|
|
||||||
end
|
|
||||||
|
|
||||||
Files --> Check{Fehler?}
|
|
||||||
Check -- Ja --> Mail[Log Error & Abbruch]
|
|
||||||
Check -- Nein --> Rotate[Lade Backups-Liste]
|
|
||||||
|
|
||||||
subgraph Speicherverwaltung
|
|
||||||
Rotate --> Count{Anzahl > 30?}
|
|
||||||
Count -- Ja --> Delete[Älteste löschen]
|
|
||||||
Count -- Nein --> Finish[Abschluss]
|
|
||||||
Delete --> Finish
|
|
||||||
end
|
|
||||||
|
|
||||||
Finish --> Ende((Ende))
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Backup- & Restore-Systeme (2)
|
## Backup- & Restore-Systeme (2)
|
||||||
@@ -82,7 +93,7 @@ graph LR
|
|||||||
- Abbau von Registrierungshürden.
|
- Abbau von Registrierungshürden.
|
||||||
- Keine sensiblen Passwörter im eigenen System.
|
- Keine sensiblen Passwörter im eigenen System.
|
||||||
|
|
||||||

|
{width=20em}
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -96,24 +107,7 @@ graph LR
|
|||||||
---
|
---
|
||||||
|
|
||||||
## Der Premium-Bereich (2)
|
## Der Premium-Bereich (2)
|
||||||
**Architektur des Premium-Bereich-Moduls:**
|

|
||||||
```mermaid
|
|
||||||
graph LR
|
|
||||||
subgraph Client [WebAssembly]
|
|
||||||
UI[Benutzeroberfläche] --> SvcC[Service Client]
|
|
||||||
end
|
|
||||||
|
|
||||||
subgraph Server [ASP.NET Core]
|
|
||||||
SvcC --> Ctrl[API Controller]
|
|
||||||
Ctrl --> SvcS[Service Schicht]
|
|
||||||
end
|
|
||||||
|
|
||||||
subgraph Data [Datenbank]
|
|
||||||
SvcS --> EF[EF Core]
|
|
||||||
EF --> DB[(PostgreSQL)]
|
|
||||||
end
|
|
||||||
```
|
|
||||||
|
|
||||||
**Datensparsame Mitgliedersuche & Kontaktfunktion:**
|
**Datensparsame Mitgliedersuche & Kontaktfunktion:**
|
||||||

|

|
||||||
|
|
||||||
@@ -125,6 +119,7 @@ graph LR
|
|||||||
- Hohe Ausfallsicherheit (automatisierte Bash-Backups).
|
- Hohe Ausfallsicherheit (automatisierte Bash-Backups).
|
||||||
- Barrierefreier Zugang (LinkedIn-Login).
|
- Barrierefreier Zugang (LinkedIn-Login).
|
||||||
- Echter Mehrwert durch Premium-Funktionen.
|
- Echter Mehrwert durch Premium-Funktionen.
|
||||||
- **Ausblick**:
|
- **Persönliche Learnings**:
|
||||||
- Weitere OAuth-Anbieter (z.B. Google, Microsoft).
|
- Tiefes Verständnis für moderne Webtechnologien (ASP.NET, PostgreSQL, OAuth 2.0).
|
||||||
- Ausbau zukünftiger Premium-Features.
|
- Agile Arbeitsweise mit Scrum stärkt Planung & Zeitmanagement.
|
||||||
|
- Komplexe Projekte fördern Selbstorganisation & Problemlösungskompetenz.
|
||||||
|
|||||||
@@ -3,17 +3,19 @@
|
|||||||
## Individueller Teil: Adam Gaiswinkler
|
## Individueller Teil: Adam Gaiswinkler
|
||||||
**Entwicklung von CMS‑Modulen & Frontend-Design**
|
**Entwicklung von CMS‑Modulen & Frontend-Design**
|
||||||
|
|
||||||
- Schwerpunkt: Oqtane-Theme, Hall-of-Fame-Modul & Anmeldetool
|
- **Schwerpunkt**:
|
||||||
- Ziel: Moderne, responsive Website für den HTL-Absolventenverein
|
- Oqtane-Theme
|
||||||
|
- Hall-of-Fame-Modul
|
||||||
<!-- BILD: Logo HTL Ungargasse + Vereinslogo nebeneinander -->
|
- Anmeldetool
|
||||||
|
- **Ziel**:
|
||||||
|
- Moderne, responsive Website für den SZU Absolventenverein
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Ausgangslage & Motivation
|
## Ausgangslage & Motivation
|
||||||
- **Ausgangssituation**: Moderne Frontend‑Plattform für den Absolventenverein (responsive, neue Features).
|
- **Ausgangssituation**: Moderne Frontend‑Plattform für den Absolventenverein (responsive, neue Features).
|
||||||
- **Persönliche Motivation**:
|
- **Persönliche Motivation**:
|
||||||
- Team‑Verkleinerung (6 → 3) → mehr Verantwortung.
|
- Team‑Verkleinerung (6 → 3) → mehr Verantwortung.
|
||||||
- Projektidentifikation & Praxis‑Blazor/ASP.NET.
|
- Projektidentifikation & Praxis‑Blazor/ASP.NET.
|
||||||
- **Ziele**:
|
- **Ziele**:
|
||||||
- Oqtane‑Module (Anmeldetool, Hall‑of‑Fame).
|
- Oqtane‑Module (Anmeldetool, Hall‑of‑Fame).
|
||||||
@@ -22,67 +24,183 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
## Eingesetzte Technologien
|
## Eingesetzte Technologien
|
||||||
- **Tech‑Stack**: Bootstrap + Custom‑CSS, QuestPDF, Gitea, VS 2022 wechsel zu VS Code (macOS).
|
|
||||||
|
|
||||||
<!-- BILD: Logos der verwendeten Tools (Bootstrap, QuestPDF, Gitea, VS Code) nebeneinander -->
|
::: columns
|
||||||
|
|
||||||
|
:::: column
|
||||||
|
- **Tech‑Stack**:
|
||||||
|
- Bootstrap
|
||||||
|
- Custom‑CSS
|
||||||
|
- QuestPDF
|
||||||
|
- Gitea
|
||||||
|
- Visual Studio 2022 → Visual Studio Code (macOS).
|
||||||
|
::::
|
||||||
|
|
||||||
|
:::: column
|
||||||
|
\begin{tikzpicture}
|
||||||
|
\node[inner sep=0pt, rounded corners=5pt, clip] {\includegraphics[width=0.8\columnwidth]{Images/Technologien.png}};
|
||||||
|
\end{tikzpicture}
|
||||||
|
::::
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Umsetzung: Oqtane Theme
|
## Oqtane Theme
|
||||||
- Eigen‑Navigation (bootstrap Komponenten haben nicht gepasst ).
|
|
||||||
|
::: columns
|
||||||
|
|
||||||
|
:::: column
|
||||||
|
- 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.
|
||||||
- ControlPanel & Cookie‑Consent.
|
- Cookie‑Consent (erforderlich für DSGVO-Konformität und Gesamtheit der Website).
|
||||||

|
::::
|
||||||
<!-- BILD: Screenshot der Website-Navigation auf Desktop (volle Menüleiste) -->
|
|
||||||
<!-- BILD: Screenshot des Burger-Menüs auf Mobile (aufgeklappt) -->
|
:::: column
|
||||||
|
\begin{tikzpicture}
|
||||||
|
\node[inner sep=0pt, rounded corners=5pt, clip] {\includegraphics[width=0.55\columnwidth]{Images/BurgerMenuLiveDesign.png}};
|
||||||
|
\end{tikzpicture}
|
||||||
|
::::
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Umsetzung: Hall of Fame
|
## Hall of Fame
|
||||||
|
|
||||||
|
::: columns
|
||||||
|
|
||||||
|
:::: column
|
||||||
- **Karten‑Grid**: Responsive Übersicht, Live‑Suche & Sortierung **in Echtzeit – kein Seitenreload** (Blazor).
|
- **Karten‑Grid**: Responsive Übersicht, Live‑Suche & Sortierung **in Echtzeit – kein Seitenreload** (Blazor).
|
||||||
- **Detail‑Seite**: Glasmorphismus‑Design (halbtransparente Karten mit Blur-Effekt).
|
- **Detail‑Seite**: Glasmorphismus‑Design (halbtransparente Karten mit Blur-Effekt).
|
||||||
- **Workflow**: Rich‑Text‑Editor, Bild‑Upload mit **Live-Vorschau** (max 5 MB), Status (Entwurf/Veröffentlicht) inkl. Eigentümer‑Check.
|
::::
|
||||||
- **PDF‑Export**: Professionelle Profil-PDFs server-seitig mit QuestPDF.
|
|
||||||
- **Moderation**: Meldesystem über separates Interfaces‑Paket → saubere Logik-Trennung.
|
:::: column
|
||||||

|
\begin{tikzpicture}
|
||||||

|
\node[inner sep=0pt, rounded corners=5pt, clip] {\includegraphics[width=0.55\columnwidth]{Images/HallOfFamePdfNeuBesser.png}};
|
||||||
<!-- BILD: Screenshot des Karten-Grids mit mehreren Alumni-Einträgen -->
|
\end{tikzpicture}
|
||||||
<!-- BILD: Screenshot der Detailseite (Glasmorphismus-Design) -->
|
::::
|
||||||
<!-- BILD: Screenshot eines generierten PDFs -->
|
|
||||||
|
:::
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Umsetzung: Anmeldetool
|
## Hall of Fame – Workflow & Export
|
||||||
- Klar getrennte Ja/Nein‑Buttons (grün/rot).
|
|
||||||
- **Live‑Feedback via Blazor**: Statusänderungen sofort sichtbar – andere Teilnehmer sehen Updates direkt.
|
|
||||||
- Mobile-optimiert: kein Overlay-Clipping, sauberes Touch-Handling.
|
|
||||||
- Saubere Trennung: UI-Komponente & Backend-API getrennt.
|
|
||||||
|
|
||||||
<!-- BILD: Screenshot Anmeldetool mit gruenem Ja- und rotem Nein-Button -->
|
::: columns
|
||||||
<!-- BILD: Screenshot auf Mobile (Overlay-Ansicht) -->
|
|
||||||
|
:::: column
|
||||||
|
- **Workflow**: Rich‑Text‑Editor, Bild‑Upload mit **Live-Vorschau** (max 5 MB), Status (Entwurf/Veröffentlicht) inkl. Eigentümer‑Check.
|
||||||
|
- **PDF‑Export**: Professionelle Profil-PDFs server-seitig mit QuestPDF.
|
||||||
|
- **Moderation**: Meldesystem über separates Interfaces‑Paket → saubere Logik-Trennung.
|
||||||
|
::::
|
||||||
|
|
||||||
|
:::: column
|
||||||
|
\begin{tikzpicture}[
|
||||||
|
node distance=12mm,
|
||||||
|
every node/.style={font=\small},
|
||||||
|
state/.style={rectangle, rounded corners=3pt, draw=accent, fill=accent!10, minimum width=2.4cm, minimum height=8mm, align=center, font=\small\bfseries},
|
||||||
|
arr/.style={->,>=stealth,thick,accent}
|
||||||
|
]
|
||||||
|
\node[coordinate] (start) {};
|
||||||
|
\node[state, right=10mm of start] (draft) {Entwurf};
|
||||||
|
\node[state, below=18mm of draft] (pub) {Veröffentlicht};
|
||||||
|
\draw[arr] (start) -- node[above] {\scriptsize Erstellen} (draft);
|
||||||
|
\draw[arr] (draft) to[out=135, in=45, looseness=4] node[above] {\scriptsize Speichern} (draft);
|
||||||
|
\draw[arr, bend left=25] (draft) to node[right] {\scriptsize Veröffentlichen} (pub);
|
||||||
|
\draw[arr, bend left=25] (pub) to node[left] {\scriptsize Zurückziehen} (draft);
|
||||||
|
\end{tikzpicture}
|
||||||
|
::::
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Anmeldetool
|
||||||
|
\vspace{1cm}
|
||||||
|
\begin{tikzpicture}[remember picture, overlay]
|
||||||
|
\node at (current page.center) {
|
||||||
|
\begin{tabular}{@{}c@{\hspace{4mm}}c@{}}
|
||||||
|
\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)
|
||||||
|
\end{tcolorbox}
|
||||||
|
&
|
||||||
|
\begin{tcolorbox}[colback=accent!5, colframe=accent, arc=3pt, title=\textbf{Live-Feedback}, width=6.5cm, height=2cm, valign=center]
|
||||||
|
\centering Sofort via Blazor
|
||||||
|
\end{tcolorbox}
|
||||||
|
\\[3mm]
|
||||||
|
\begin{tcolorbox}[colback=accent!5, colframe=accent, arc=3pt, title=\textbf{Mobile}, width=6.5cm, height=2cm, valign=center]
|
||||||
|
\centering Sauberes Touch-Handling
|
||||||
|
\end{tcolorbox}
|
||||||
|
&
|
||||||
|
\begin{tcolorbox}[colback=accent!5, colframe=accent, arc=3pt, title=\textbf{Architektur}, width=6.5cm, height=2cm, valign=center]
|
||||||
|
\centering UI \& Backend-API getrennt
|
||||||
|
\end{tcolorbox}
|
||||||
|
\end{tabular}
|
||||||
|
};
|
||||||
|
\end{tikzpicture}
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Herausforderungen & Lösungen
|
## Herausforderungen & Lösungen
|
||||||
- **Plattformwechsel** Windows → macOS: Oqtane stark an Windows gebunden → **Visual Studio Code** als plattformübergreifende Lösung.
|
|
||||||
- **Hosting-Ausfall** (Hetzner, Sommer 2025): kurz vor einem Event → schnelle **Node.js/HTML-Übergangslösung** sicherte Event-Anmeldung.
|
|
||||||
|
|
||||||
<!-- BILD: Screenshot von Visual Studio Code auf macOS -->
|
\vspace{5mm}
|
||||||
|
\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},
|
||||||
|
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}}
|
||||||
|
]
|
||||||
|
% 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}};
|
||||||
|
|
||||||
|
% 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}};
|
||||||
|
|
||||||
|
% 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=2.5cm, yshift=-3.1cm]current page.center) (s3) {\checkmark\;\textbf{Testen und Anpassen}\\[-1mm]{\scriptsize Debuggen und Verbessern der UI}};
|
||||||
|
\end{tikzpicture}
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Learnings
|
## Learnings
|
||||||
- **Technisch**: Git, CSS‑Flexbox, Blazor.
|
|
||||||
- **Methodisch**: Aufgabenverteilung, regelmäßige Meetings.
|
|
||||||
- **Persönlich**: Eigeninitiative & Verantwortung.
|
|
||||||
|
|
||||||
---
|
\vspace{1cm}
|
||||||
|
\begin{tikzpicture}[remember picture, overlay,
|
||||||
|
every node/.style={font=\small},
|
||||||
|
branch/.style={thick, accent},
|
||||||
|
cat/.style={rectangle, rounded corners=3pt, draw=accent, fill=accent!15, font=\small\bfseries, minimum height=7mm, align=center},
|
||||||
|
item/.style={font=\scriptsize, align=left}
|
||||||
|
]
|
||||||
|
\node[circle, draw=accent, fill=accent!20, font=\bfseries, minimum size=1.5cm] at (current page.center) (center) {Learnings};
|
||||||
|
|
||||||
|
% Technisch - links
|
||||||
|
\node[cat] at ([xshift=-3.5cm, yshift=0.8cm]current page.center) (tech) {Technisch};
|
||||||
|
\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}
|
||||||
|
|
||||||
## Fazit & Ausblick
|
|
||||||
- Theme final, mobil, Hall of Fame & Anmeldetool funktionsfähig.
|
|
||||||
- **Erweiterungen**: Teilnehmer‑Auswertung, Anmelde‑Limit, automatische E‑Mail‑Erinnerungen.
|
|
||||||
|
|
||||||
<!-- BILD: Gesamtansicht der fertigen Website (Desktop) als Abschluss-Screenshot -->
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
BIN
Defensio/Images/BurgerMenuLiveDesign.png
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
Defensio/Images/Technologien.png
Normal file
|
After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 27 KiB |
|
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
86
Defensio/Images/images/konstantin/logos/debian.svg
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 10.0, SVG Export Plug-In . SVG Version: 3.0.0 Build 77) -->
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [
|
||||||
|
<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
|
||||||
|
<!ENTITY ns_extend "http://ns.adobe.com/Extensibility/1.0/">
|
||||||
|
<!ENTITY ns_ai "http://ns.adobe.com/AdobeIllustrator/10.0/">
|
||||||
|
<!ENTITY ns_graphs "http://ns.adobe.com/Graphs/1.0/">
|
||||||
|
<!ENTITY ns_vars "http://ns.adobe.com/Variables/1.0/">
|
||||||
|
<!ENTITY ns_imrep "http://ns.adobe.com/ImageReplacement/1.0/">
|
||||||
|
<!ENTITY ns_sfw "http://ns.adobe.com/SaveForWeb/1.0/">
|
||||||
|
<!ENTITY ns_custom "http://ns.adobe.com/GenericCustomNamespace/1.0/">
|
||||||
|
<!ENTITY ns_adobe_xpath "http://ns.adobe.com/XPath/1.0/">
|
||||||
|
<!ENTITY ns_svg "http://www.w3.org/2000/svg">
|
||||||
|
<!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
|
||||||
|
]>
|
||||||
|
<svg
|
||||||
|
xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;" i:viewOrigin="262 450" i:rulerOrigin="0 0" i:pageBounds="0 792 612 0"
|
||||||
|
xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
|
||||||
|
width="87.041" height="108.445" viewBox="0 0 87.041 108.445" overflow="visible" enable-background="new 0 0 87.041 108.445"
|
||||||
|
xml:space="preserve">
|
||||||
|
<metadata>
|
||||||
|
<variableSets xmlns="&ns_vars;">
|
||||||
|
<variableSet varSetName="binding1" locked="none">
|
||||||
|
<variables></variables>
|
||||||
|
<v:sampleDataSets xmlns="&ns_custom;" xmlns:v="&ns_vars;"></v:sampleDataSets>
|
||||||
|
</variableSet>
|
||||||
|
</variableSets>
|
||||||
|
<sfw xmlns="&ns_sfw;">
|
||||||
|
<slices></slices>
|
||||||
|
<sliceSourceBounds y="341.555" x="262" width="87.041" height="108.445" bottomLeftOrigin="true"></sliceSourceBounds>
|
||||||
|
</sfw>
|
||||||
|
</metadata>
|
||||||
|
<g id="Layer_1" i:layer="yes" i:dimmedPercent="50" i:rgbTrio="#4F008000FFFF">
|
||||||
|
<g>
|
||||||
|
<path i:knockout="Off" fill="#A80030" d="M51.986,57.297c-1.797,0.025,0.34,0.926,2.686,1.287
|
||||||
|
c0.648-0.506,1.236-1.018,1.76-1.516C54.971,57.426,53.484,57.434,51.986,57.297"/>
|
||||||
|
<path i:knockout="Off" fill="#A80030" d="M61.631,54.893c1.07-1.477,1.85-3.094,2.125-4.766c-0.24,1.192-0.887,2.221-1.496,3.307
|
||||||
|
c-3.359,2.115-0.316-1.256-0.002-2.537C58.646,55.443,61.762,53.623,61.631,54.893"/>
|
||||||
|
<path i:knockout="Off" fill="#A80030" d="M65.191,45.629c0.217-3.236-0.637-2.213-0.924-0.978
|
||||||
|
C64.602,44.825,64.867,46.932,65.191,45.629"/>
|
||||||
|
<path i:knockout="Off" fill="#A80030" d="M45.172,1.399c0.959,0.172,2.072,0.304,1.916,0.533
|
||||||
|
C48.137,1.702,48.375,1.49,45.172,1.399"/>
|
||||||
|
<path i:knockout="Off" fill="#A80030" d="M47.088,1.932l-0.678,0.14l0.631-0.056L47.088,1.932"/>
|
||||||
|
<path i:knockout="Off" fill="#A80030" d="M76.992,46.856c0.107,2.906-0.85,4.316-1.713,6.812l-1.553,0.776
|
||||||
|
c-1.271,2.468,0.123,1.567-0.787,3.53c-1.984,1.764-6.021,5.52-7.313,5.863c-0.943-0.021,0.639-1.113,0.846-1.541
|
||||||
|
c-2.656,1.824-2.131,2.738-6.193,3.846l-0.119-0.264c-10.018,4.713-23.934-4.627-23.751-17.371
|
||||||
|
c-0.107,0.809-0.304,0.607-0.526,0.934c-0.517-6.557,3.028-13.143,9.007-15.832c5.848-2.895,12.704-1.707,16.893,2.197
|
||||||
|
c-2.301-3.014-6.881-6.209-12.309-5.91c-5.317,0.084-10.291,3.463-11.951,7.131c-2.724,1.715-3.04,6.611-4.227,7.507
|
||||||
|
C31.699,56.271,36.3,61.342,44.083,67.307c1.225,0.826,0.345,0.951,0.511,1.58c-2.586-1.211-4.954-3.039-6.901-5.277
|
||||||
|
c1.033,1.512,2.148,2.982,3.589,4.137c-2.438-0.826-5.695-5.908-6.646-6.115c4.203,7.525,17.052,13.197,23.78,10.383
|
||||||
|
c-3.113,0.115-7.068,0.064-10.566-1.229c-1.469-0.756-3.467-2.322-3.11-2.615c9.182,3.43,18.667,2.598,26.612-3.771
|
||||||
|
c2.021-1.574,4.229-4.252,4.867-4.289c-0.961,1.445,0.164,0.695-0.574,1.971c2.014-3.248-0.875-1.322,2.082-5.609l1.092,1.504
|
||||||
|
c-0.406-2.696,3.348-5.97,2.967-10.234c0.861-1.304,0.961,1.403,0.047,4.403c1.268-3.328,0.334-3.863,0.66-6.609
|
||||||
|
c0.352,0.923,0.814,1.904,1.051,2.878c-0.826-3.216,0.848-5.416,1.262-7.285c-0.408-0.181-1.275,1.422-1.473-2.377
|
||||||
|
c0.029-1.65,0.459-0.865,0.625-1.271c-0.324-0.186-1.174-1.451-1.691-3.877c0.375-0.57,1.002,1.478,1.512,1.562
|
||||||
|
c-0.328-1.929-0.893-3.4-0.916-4.88c-1.49-3.114-0.527,0.415-1.736-1.337c-1.586-4.947,1.316-1.148,1.512-3.396
|
||||||
|
c2.404,3.483,3.775,8.881,4.404,11.117c-0.48-2.726-1.256-5.367-2.203-7.922c0.73,0.307-1.176-5.609,0.949-1.691
|
||||||
|
c-2.27-8.352-9.715-16.156-16.564-19.818c0.838,0.767,1.896,1.73,1.516,1.881c-3.406-2.028-2.807-2.186-3.295-3.043
|
||||||
|
c-2.775-1.129-2.957,0.091-4.795,0.002c-5.23-2.774-6.238-2.479-11.051-4.217l0.219,1.023c-3.465-1.154-4.037,0.438-7.782,0.004
|
||||||
|
c-0.228-0.178,1.2-0.644,2.375-0.815c-3.35,0.442-3.193-0.66-6.471,0.122c0.808-0.567,1.662-0.942,2.524-1.424
|
||||||
|
c-2.732,0.166-6.522,1.59-5.352,0.295c-4.456,1.988-12.37,4.779-16.811,8.943l-0.14-0.933c-2.035,2.443-8.874,7.296-9.419,10.46
|
||||||
|
l-0.544,0.127c-1.059,1.793-1.744,3.825-2.584,5.67c-1.385,2.36-2.03,0.908-1.833,1.278c-2.724,5.523-4.077,10.164-5.246,13.97
|
||||||
|
c0.833,1.245,0.02,7.495,0.335,12.497c-1.368,24.704,17.338,48.69,37.785,54.228c2.997,1.072,7.454,1.031,11.245,1.141
|
||||||
|
c-4.473-1.279-5.051-0.678-9.408-2.197c-3.143-1.48-3.832-3.17-6.058-5.102l0.881,1.557c-4.366-1.545-2.539-1.912-6.091-3.037
|
||||||
|
l0.941-1.229c-1.415-0.107-3.748-2.385-4.386-3.646l-1.548,0.061c-1.86-2.295-2.851-3.949-2.779-5.23l-0.5,0.891
|
||||||
|
c-0.567-0.973-6.843-8.607-3.587-6.83c-0.605-0.553-1.409-0.9-2.281-2.484l0.663-0.758c-1.567-2.016-2.884-4.6-2.784-5.461
|
||||||
|
c0.836,1.129,1.416,1.34,1.99,1.533c-3.957-9.818-4.179-0.541-7.176-9.994l0.634-0.051c-0.486-0.732-0.781-1.527-1.172-2.307
|
||||||
|
l0.276-2.75C4.667,58.121,6.719,47.409,7.13,41.534c0.285-2.389,2.378-4.932,3.97-8.92l-0.97-0.167
|
||||||
|
c1.854-3.234,10.586-12.988,14.63-12.486c1.959-2.461-0.389-0.009-0.772-0.629c4.303-4.453,5.656-3.146,8.56-3.947
|
||||||
|
c3.132-1.859-2.688,0.725-1.203-0.709c5.414-1.383,3.837-3.144,10.9-3.846c0.745,0.424-1.729,0.655-2.35,1.205
|
||||||
|
c4.511-2.207,14.275-1.705,20.617,1.225c7.359,3.439,15.627,13.605,15.953,23.17l0.371,0.1
|
||||||
|
c-0.188,3.802,0.582,8.199-0.752,12.238L76.992,46.856"/>
|
||||||
|
<path i:knockout="Off" fill="#A80030" d="M32.372,59.764l-0.252,1.26c1.181,1.604,2.118,3.342,3.626,4.596
|
||||||
|
C34.661,63.502,33.855,62.627,32.372,59.764"/>
|
||||||
|
<path i:knockout="Off" fill="#A80030" d="M35.164,59.654c-0.625-0.691-0.995-1.523-1.409-2.352
|
||||||
|
c0.396,1.457,1.207,2.709,1.962,3.982L35.164,59.654"/>
|
||||||
|
<path i:knockout="Off" fill="#A80030" d="M84.568,48.916l-0.264,0.662c-0.484,3.438-1.529,6.84-3.131,9.994
|
||||||
|
C82.943,56.244,84.088,52.604,84.568,48.916"/>
|
||||||
|
<path i:knockout="Off" fill="#A80030" d="M45.527,0.537C46.742,0.092,48.514,0.293,49.803,0c-1.68,0.141-3.352,0.225-5.003,0.438
|
||||||
|
L45.527,0.537"/>
|
||||||
|
<path i:knockout="Off" fill="#A80030" d="M2.872,23.219c0.28,2.592-1.95,3.598,0.494,1.889
|
||||||
|
C4.676,22.157,2.854,24.293,2.872,23.219"/>
|
||||||
|
<path i:knockout="Off" fill="#A80030" d="M0,35.215c0.563-1.728,0.665-2.766,0.88-3.766C-0.676,33.438,0.164,33.862,0,35.215"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 6.6 KiB |
BIN
Defensio/Images/images/konstantin/logos/docker.pdf
Normal file
25
Defensio/Images/images/konstantin/logos/docker.svg
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 0 340 268">
|
||||||
|
<!-- Generator: Adobe Illustrator 30.1.0, SVG Export Plug-In . SVG Version: 2.1.1 Build 136) -->
|
||||||
|
<defs>
|
||||||
|
<style>
|
||||||
|
.st0 {
|
||||||
|
fill: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.st1 {
|
||||||
|
fill: #2560ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.st2 {
|
||||||
|
clip-path: url(#clippath);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<clipPath id="clippath">
|
||||||
|
<rect class="st0" width="339.5" height="268"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
<g class="st2">
|
||||||
|
<path class="st1" d="M334,110.1c-8.3-5.6-30.2-8-46.1-3.7-.9-15.8-9-29.2-24-40.8l-5.5-3.7-3.7,5.6c-7.2,11-10.3,25.7-9.2,39,.8,8.2,3.7,17.4,9.2,24.1-20.7,12-39.8,9.3-124.3,9.3H0c-.4,19.1,2.7,55.8,26,85.6,2.6,3.3,5.4,6.5,8.5,9.6,19,19,47.6,32.9,90.5,33,65.4,0,121.4-35.3,155.5-120.8,11.2.2,40.8,2,55.3-26,.4-.5,3.7-7.4,3.7-7.4l-5.5-3.7h0ZM85.2,92.7h-36.7v36.7h36.7v-36.7ZM132.6,92.7h-36.7v36.7h36.7v-36.7ZM179.9,92.7h-36.7v36.7h36.7v-36.7ZM227.3,92.7h-36.7v36.7h36.7v-36.7ZM37.8,92.7H1.1v36.7h36.7v-36.7ZM85.2,46.3h-36.7v36.7h36.7v-36.7ZM132.6,46.3h-36.7v36.7h36.7v-36.7ZM179.9,46.3h-36.7v36.7h36.7v-36.7ZM179.9,0h-36.7v36.7h36.7V0Z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.2 KiB |
BIN
Defensio/Images/images/konstantin/logos/gitea.pdf
Normal file
31
Defensio/Images/images/konstantin/logos/gitea.svg
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<svg version="1.1" id="main_outline" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
|
||||||
|
y="0px" viewBox="0 0 640 640" style="enable-background:new 0 0 640 640;" xml:space="preserve">
|
||||||
|
<g>
|
||||||
|
<path id="teabag" style="fill:#FFFFFF" d="M395.9,484.2l-126.9-61c-12.5-6-17.9-21.2-11.8-33.8l61-126.9c6-12.5,21.2-17.9,33.8-11.8
|
||||||
|
c17.2,8.3,27.1,13,27.1,13l-0.1-109.2l16.7-0.1l0.1,117.1c0,0,57.4,24.2,83.1,40.1c3.7,2.3,10.2,6.8,12.9,14.4
|
||||||
|
c2.1,6.1,2,13.1-1,19.3l-61,126.9C423.6,484.9,408.4,490.3,395.9,484.2z"/>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<path style="fill:#609926" d="M622.7,149.8c-4.1-4.1-9.6-4-9.6-4s-117.2,6.6-177.9,8c-13.3,0.3-26.5,0.6-39.6,0.7c0,39.1,0,78.2,0,117.2
|
||||||
|
c-5.5-2.6-11.1-5.3-16.6-7.9c0-36.4-0.1-109.2-0.1-109.2c-29,0.4-89.2-2.2-89.2-2.2s-141.4-7.1-156.8-8.5
|
||||||
|
c-9.8-0.6-22.5-2.1-39,1.5c-8.7,1.8-33.5,7.4-53.8,26.9C-4.9,212.4,6.6,276.2,8,285.8c1.7,11.7,6.9,44.2,31.7,72.5
|
||||||
|
c45.8,56.1,144.4,54.8,144.4,54.8s12.1,28.9,30.6,55.5c25,33.1,50.7,58.9,75.7,62c63,0,188.9-0.1,188.9-0.1s12,0.1,28.3-10.3
|
||||||
|
c14-8.5,26.5-23.4,26.5-23.4s12.9-13.8,30.9-45.3c5.5-9.7,10.1-19.1,14.1-28c0,0,55.2-117.1,55.2-231.1
|
||||||
|
C633.2,157.9,624.7,151.8,622.7,149.8z M125.6,353.9c-25.9-8.5-36.9-18.7-36.9-18.7S69.6,321.8,60,295.4
|
||||||
|
c-16.5-44.2-1.4-71.2-1.4-71.2s8.4-22.5,38.5-30c13.8-3.7,31-3.1,31-3.1s7.1,59.4,15.7,94.2c7.2,29.2,24.8,77.7,24.8,77.7
|
||||||
|
S142.5,359.9,125.6,353.9z M425.9,461.5c0,0-6.1,14.5-19.6,15.4c-5.8,0.4-10.3-1.2-10.3-1.2s-0.3-0.1-5.3-2.1l-112.9-55
|
||||||
|
c0,0-10.9-5.7-12.8-15.6c-2.2-8.1,2.7-18.1,2.7-18.1L322,273c0,0,4.8-9.7,12.2-13c0.6-0.3,2.3-1,4.5-1.5c8.1-2.1,18,2.8,18,2.8
|
||||||
|
l110.7,53.7c0,0,12.6,5.7,15.3,16.2c1.9,7.4-0.5,14-1.8,17.2C474.6,363.8,425.9,461.5,425.9,461.5z"/>
|
||||||
|
<path style="fill:#609926" d="M326.8,380.1c-8.2,0.1-15.4,5.8-17.3,13.8c-1.9,8,2,16.3,9.1,20c7.7,4,17.5,1.8,22.7-5.4
|
||||||
|
c5.1-7.1,4.3-16.9-1.8-23.1l24-49.1c1.5,0.1,3.7,0.2,6.2-0.5c4.1-0.9,7.1-3.6,7.1-3.6c4.2,1.8,8.6,3.8,13.2,6.1
|
||||||
|
c4.8,2.4,9.3,4.9,13.4,7.3c0.9,0.5,1.8,1.1,2.8,1.9c1.6,1.3,3.4,3.1,4.7,5.5c1.9,5.5-1.9,14.9-1.9,14.9
|
||||||
|
c-2.3,7.6-18.4,40.6-18.4,40.6c-8.1-0.2-15.3,5-17.7,12.5c-2.6,8.1,1.1,17.3,8.9,21.3c7.8,4,17.4,1.7,22.5-5.3
|
||||||
|
c5-6.8,4.6-16.3-1.1-22.6c1.9-3.7,3.7-7.4,5.6-11.3c5-10.4,13.5-30.4,13.5-30.4c0.9-1.7,5.7-10.3,2.7-21.3
|
||||||
|
c-2.5-11.4-12.6-16.7-12.6-16.7c-12.2-7.9-29.2-15.2-29.2-15.2s0-4.1-1.1-7.1c-1.1-3.1-2.8-5.1-3.9-6.3c4.7-9.7,9.4-19.3,14.1-29
|
||||||
|
c-4.1-2-8.1-4-12.2-6.1c-4.8,9.8-9.7,19.7-14.5,29.5c-6.7-0.1-12.9,3.5-16.1,9.4c-3.4,6.3-2.7,14.1,1.9,19.8
|
||||||
|
C343.2,346.5,335,363.3,326.8,380.1z"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.5 KiB |
BIN
Defensio/Images/images/konstantin/logos/github.pdf
Normal file
10
Defensio/Images/images/konstantin/logos/github.svg
Executable file
@@ -0,0 +1,10 @@
|
|||||||
|
<svg width="98" height="96" viewBox="0 0 98 96" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g clip-path="url(#clip0_730_27126)">
|
||||||
|
<path d="M41.4395 69.3848C28.8066 67.8535 19.9062 58.7617 19.9062 46.9902C19.9062 42.2051 21.6289 37.0371 24.5 33.5918C23.2559 30.4336 23.4473 23.7344 24.8828 20.959C28.7109 20.4805 33.8789 22.4902 36.9414 25.2656C40.5781 24.1172 44.4062 23.543 49.0957 23.543C53.7852 23.543 57.6133 24.1172 61.0586 25.1699C64.0254 22.4902 69.2891 20.4805 73.1172 20.959C74.457 23.543 74.6484 30.2422 73.4043 33.4961C76.4668 37.1328 78.0937 42.0137 78.0937 46.9902C78.0937 58.7617 69.1934 67.6621 56.3691 69.2891C59.623 71.3945 61.8242 75.9883 61.8242 81.252L61.8242 91.2051C61.8242 94.0762 64.2168 95.7031 67.0879 94.5547C84.4102 87.9512 98 70.6289 98 49.1914C98 22.1074 75.9883 6.69539e-07 48.9043 4.309e-07C21.8203 1.92261e-07 -1.9479e-07 22.1074 -4.3343e-07 49.1914C-6.20631e-07 70.4375 13.4941 88.0469 31.6777 94.6504C34.2617 95.6074 36.75 93.8848 36.75 91.3008L36.75 83.6445C35.4102 84.2188 33.6875 84.6016 32.1562 84.6016C25.8398 84.6016 22.1074 81.1563 19.4277 74.7441C18.375 72.1602 17.2266 70.6289 15.0254 70.3418C13.877 70.2461 13.4941 69.7676 13.4941 69.1934C13.4941 68.0449 15.4082 67.1836 17.3223 67.1836C20.0977 67.1836 22.4902 68.9063 24.9785 72.4473C26.8926 75.2227 28.9023 76.4668 31.2949 76.4668C33.6875 76.4668 35.2187 75.6055 37.4199 73.4043C39.0469 71.7773 40.291 70.3418 41.4395 69.3848Z" fill="black"/>
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<clipPath id="clip0_730_27126">
|
||||||
|
<rect width="98" height="96" fill="white"/>
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.5 KiB |
BIN
Defensio/Images/images/konstantin/logos/nginx.pdf
Normal file
2
Defensio/Images/images/konstantin/logos/nginx.svg
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||||
|
<svg width="800px" height="800px" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><title>file_type_nginx</title><path d="M15.948,2h.065a10.418,10.418,0,0,1,.972.528Q22.414,5.65,27.843,8.774a.792.792,0,0,1,.414.788c-.008,4.389,0,8.777-.005,13.164a.813.813,0,0,1-.356.507q-5.773,3.324-11.547,6.644a.587.587,0,0,1-.657.037Q9.912,26.6,4.143,23.274a.7.7,0,0,1-.4-.666q0-6.582,0-13.163a.693.693,0,0,1,.387-.67Q9.552,5.657,14.974,2.535c.322-.184.638-.379.974-.535" style="fill:#019639"/><path d="M8.767,10.538q0,5.429,0,10.859a1.509,1.509,0,0,0,.427,1.087,1.647,1.647,0,0,0,2.06.206,1.564,1.564,0,0,0,.685-1.293c0-2.62-.005-5.24,0-7.86q3.583,4.29,7.181,8.568a2.833,2.833,0,0,0,2.6.782,1.561,1.561,0,0,0,1.251-1.371q.008-5.541,0-11.081a1.582,1.582,0,0,0-3.152,0c0,2.662-.016,5.321,0,7.982-2.346-2.766-4.663-5.556-7-8.332A2.817,2.817,0,0,0,10.17,9.033,1.579,1.579,0,0,0,8.767,10.538Z" style="fill:#fff"/></svg>
|
||||||
|
After Width: | Height: | Size: 1.0 KiB |
BIN
Defensio/Images/images/konstantin/logos/oqtane.pdf
Normal file
19
Defensio/Images/images/konstantin/logos/oqtane.svg
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
<?xml version="1.0" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||||
|
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||||
|
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="200.000000pt" height="200.000000pt" viewBox="0 0 200.000000 200.000000"
|
||||||
|
preserveAspectRatio="xMidYMid meet">
|
||||||
|
|
||||||
|
<g transform="translate(0.000000,200.000000) scale(0.100000,-0.100000)"
|
||||||
|
fill="#000000" stroke="none">
|
||||||
|
<path d="M994 1922 c-6 -4 -25 -50 -44 -102 -80 -218 -210 -455 -391 -712 -49
|
||||||
|
-70 -100 -151 -114 -180 -105 -226 -53 -507 126 -686 190 -188 468 -234 709
|
||||||
|
-116 104 51 223 170 274 274 84 172 86 367 7 532 -16 35 -72 122 -123 193 -52
|
||||||
|
72 -111 161 -133 198 -21 37 -42 67 -46 67 -3 0 -46 -61 -94 -136 l-88 -136
|
||||||
|
106 -156 c57 -87 110 -172 116 -191 16 -50 13 -150 -6 -207 -23 -69 -110 -155
|
||||||
|
-182 -179 -68 -22 -144 -22 -212 0 -74 25 -159 110 -183 183 -19 57 -22 148
|
||||||
|
-7 200 6 19 116 193 246 387 129 195 235 358 235 363 0 5 -22 56 -49 113 -27
|
||||||
|
57 -64 145 -81 196 -31 88 -46 109 -66 95z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1008 B |
BIN
Defensio/Images/images/konstantin/logos/postgres.pdf
Normal file
22
Defensio/Images/images/konstantin/logos/postgres.svg
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||||
|
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
|
||||||
|
<svg width="432.071pt" height="445.383pt" viewBox="0 0 432.071 445.383" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g id="orginal" style="fill-rule:nonzero;clip-rule:nonzero;stroke:#000000;stroke-miterlimit:4;">
|
||||||
|
</g>
|
||||||
|
<g id="Layer_x0020_3" style="fill-rule:nonzero;clip-rule:nonzero;fill:none;stroke:#FFFFFF;stroke-width:12.4651;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;">
|
||||||
|
<path style="fill:#000000;stroke:#000000;stroke-width:37.3953;stroke-linecap:butt;stroke-linejoin:miter;" d="M323.205,324.227c2.833-23.601,1.984-27.062,19.563-23.239l4.463,0.392c13.517,0.615,31.199-2.174,41.587-7c22.362-10.376,35.622-27.7,13.572-23.148c-50.297,10.376-53.755-6.655-53.755-6.655c53.111-78.803,75.313-178.836,56.149-203.322 C352.514-5.534,262.036,26.049,260.522,26.869l-0.482,0.089c-9.938-2.062-21.06-3.294-33.554-3.496c-22.761-0.374-40.032,5.967-53.133,15.904c0,0-161.408-66.498-153.899,83.628c1.597,31.936,45.777,241.655,98.47,178.31 c19.259-23.163,37.871-42.748,37.871-42.748c9.242,6.14,20.307,9.272,31.912,8.147l0.897-0.765c-0.281,2.876-0.157,5.689,0.359,9.019c-13.572,15.167-9.584,17.83-36.723,23.416c-27.457,5.659-11.326,15.734-0.797,18.367c12.768,3.193,42.305,7.716,62.268-20.224 l-0.795,3.188c5.325,4.26,4.965,30.619,5.72,49.452c0.756,18.834,2.017,36.409,5.856,46.771c3.839,10.36,8.369,37.05,44.036,29.406c29.809-6.388,52.6-15.582,54.677-101.107"/>
|
||||||
|
<path style="fill:#336791;stroke:none;" d="M402.395,271.23c-50.302,10.376-53.76-6.655-53.76-6.655c53.111-78.808,75.313-178.843,56.153-203.326c-52.27-66.785-142.752-35.2-144.262-34.38l-0.486,0.087c-9.938-2.063-21.06-3.292-33.56-3.496c-22.761-0.373-40.026,5.967-53.127,15.902 c0,0-161.411-66.495-153.904,83.63c1.597,31.938,45.776,241.657,98.471,178.312c19.26-23.163,37.869-42.748,37.869-42.748c9.243,6.14,20.308,9.272,31.908,8.147l0.901-0.765c-0.28,2.876-0.152,5.689,0.361,9.019c-13.575,15.167-9.586,17.83-36.723,23.416 c-27.459,5.659-11.328,15.734-0.796,18.367c12.768,3.193,42.307,7.716,62.266-20.224l-0.796,3.188c5.319,4.26,9.054,27.711,8.428,48.969c-0.626,21.259-1.044,35.854,3.147,47.254c4.191,11.4,8.368,37.05,44.042,29.406c29.809-6.388,45.256-22.942,47.405-50.555 c1.525-19.631,4.976-16.729,5.194-34.28l2.768-8.309c3.192-26.611,0.507-35.196,18.872-31.203l4.463,0.392c13.517,0.615,31.208-2.174,41.591-7c22.358-10.376,35.618-27.7,13.573-23.148z"/>
|
||||||
|
<path d="M215.866,286.484c-1.385,49.516,0.348,99.377,5.193,111.495c4.848,12.118,15.223,35.688,50.9,28.045c29.806-6.39,40.651-18.756,45.357-46.051c3.466-20.082,10.148-75.854,11.005-87.281"/>
|
||||||
|
<path d="M173.104,38.256c0,0-161.521-66.016-154.012,84.109c1.597,31.938,45.779,241.664,98.473,178.316c19.256-23.166,36.671-41.335,36.671-41.335"/>
|
||||||
|
<path d="M260.349,26.207c-5.591,1.753,89.848-34.889,144.087,34.417c19.159,24.484-3.043,124.519-56.153,203.329"/>
|
||||||
|
<path style="stroke-linejoin:bevel;" d="M348.282,263.953c0,0,3.461,17.036,53.764,6.653c22.04-4.552,8.776,12.774-13.577,23.155c-18.345,8.514-59.474,10.696-60.146-1.069c-1.729-30.355,21.647-21.133,19.96-28.739c-1.525-6.85-11.979-13.573-18.894-30.338 c-6.037-14.633-82.796-126.849,21.287-110.183c3.813-0.789-27.146-99.002-124.553-100.599c-97.385-1.597-94.19,119.762-94.19,119.762"/>
|
||||||
|
<path d="M188.604,274.334c-13.577,15.166-9.584,17.829-36.723,23.417c-27.459,5.66-11.326,15.733-0.797,18.365c12.768,3.195,42.307,7.718,62.266-20.229c6.078-8.509-0.036-22.086-8.385-25.547c-4.034-1.671-9.428-3.765-16.361,3.994z"/>
|
||||||
|
<path d="M187.715,274.069c-1.368-8.917,2.93-19.528,7.536-31.942c6.922-18.626,22.893-37.255,10.117-96.339c-9.523-44.029-73.396-9.163-73.436-3.193c-0.039,5.968,2.889,30.26-1.067,58.548c-5.162,36.913,23.488,68.132,56.479,64.938"/>
|
||||||
|
<path style="fill:#FFFFFF;stroke-width:4.155;stroke-linecap:butt;stroke-linejoin:miter;" d="M172.517,141.7c-0.288,2.039,3.733,7.48,8.976,8.207c5.234,0.73,9.714-3.522,9.998-5.559c0.284-2.039-3.732-4.285-8.977-5.015c-5.237-0.731-9.719,0.333-9.996,2.367z"/>
|
||||||
|
<path style="fill:#FFFFFF;stroke-width:2.0775;stroke-linecap:butt;stroke-linejoin:miter;" d="M331.941,137.543c0.284,2.039-3.732,7.48-8.976,8.207c-5.238,0.73-9.718-3.522-10.005-5.559c-0.277-2.039,3.74-4.285,8.979-5.015c5.239-0.73,9.718,0.333,10.002,2.368z"/>
|
||||||
|
<path d="M350.676,123.432c0.863,15.994-3.445,26.888-3.988,43.914c-0.804,24.748,11.799,53.074-7.191,81.435"/>
|
||||||
|
<path style="stroke-width:3;" d="M0,60.232"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 4.3 KiB |
BIN
Defensio/Images/images/konstantin/logos/wireguard.pdf
Normal file
2
Defensio/Images/images/konstantin/logos/wireguard.svg
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="400" height="400" version="1.1" viewBox="0 0 400 400" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><defs><clipPath id="a"><path d="m0 300h300v-300h-300z"/></clipPath></defs><g transform="matrix(1.3333 0 0 -1.3333 0 400)"><g clip-path="url(#a)"><g transform="translate(177.57 268.56)"><path d="m0 0c0.969-0.066 2.097 0.81 3.987 1.635-1.862 0.802-2.973 1.655-3.939 1.593-0.996-0.063-2.592-1.031-2.567-1.578 0.027-0.603 1.532-1.583 2.519-1.65" fill="#871719"/></g><g transform="translate(179.32 268.11)"><path d="m0 0c0.969-0.066 2.097 0.81 3.987 1.635-1.862 0.802-2.973 1.655-3.939 1.593-0.996-0.063-2.592-1.031-2.567-1.578 0.027-0.603 1.532-1.583 2.519-1.65" fill="#871719"/></g><g transform="translate(299.74 154.44)"><path d="m0 0s6.94 145.56-153.04 145.56c-141.48 0-145.9-139.63-145.9-139.63s-20.811-160.37 149.16-160.37c163.02 0 149.78 154.44 149.78 154.44" fill="#871719"/></g><g transform="translate(133.86 128.17)"><path d="m0 0c-2.627-1.39-4.65-2.414-6.63-3.517-8.1-4.512-15.026-10.419-20.544-17.868-1.784-2.409-3.01-2.603-5.727-0.941-35.338 21.61-37.609 75.843 0.983 99.453 30.017 18.364 68.365 7.14 82.735-20.477 2.723-5.234 3.069-13.291 1.345-18.782-5.955-18.955-20.015-29.586-39.313-34.102 5.689 4.87 10.218 10.393 11.659 18.025 1.452 7.687-0.084 14.638-4.542 20.956-6.773 9.596-19.868 13.544-30.811 9.389-11.881-4.511-18.39-15.354-17.216-28.683 1.09-12.381 10.484-20.405 28.061-23.453" fill="#fff"/></g><g transform="translate(58.513 66.293)"><path d="M 0,0 C 2.838,19.152 25.265,36.788 44.23,34.776 38.356,26.832 35.643,17.846 34.988,8.883 28.686,7.722 22.747,6.941 16.981,5.478 11.304,4.037 5.803,1.903 0,0" fill="#fff"/></g><g transform="translate(183.79 273.09)"><path d="m0 0c1.061 0.812 2.155 1.494 3.472 0.408 0.75-0.617 1.478-1.257 2.386-2.032-1.127-0.595-2.042-1.096-2.975-1.567-1.306-0.658-2.282-0.218-3.072 0.822-0.642 0.844-0.757 1.645 0.189 2.369m15.447-157.8c-1.598 1.382-2.611 1.381-4.485 0.182-6.359-4.068-12.867-7.922-19.481-11.562-3.792-2.086-7.898-3.599-12.653-5.724 1.633-0.421 2.418-0.619 3.201-0.827 17.776-4.73 27.272-20.335 23.065-37.813-3.741-15.544-19.52-25.482-34.812-22.86-12.748 2.186-23.877 12.772-25.735 25.456-2.026 13.824 4.859 27.119 17.108 32.689 6.794 3.089 13.771 5.778 20.549 8.9 7.706 3.551 16.038 6.355 22.766 11.296 16.7 12.262 27.012 29.145 31.033 49.523 2.408 12.207 2.245 24.36-3.339 35.95-4.286 8.895-11.319 15.357-18.875 21.253-7.775 6.068-16.007 11.554-23.747 17.664-2.095 1.653-3.509 4.505-4.478 7.09-0.411 1.095 0.925 4.066 1.819 4.227 4.746 0.852 9.596 1.29 14.425 1.473 5.574 0.21 11.164 0.032 16.746-0.042 1.21-0.015 2.853 0.141 3.549-0.542 2.891-2.843 5.159-1.014 7.166 0.856 1.689 1.573 2.893 3.668 4.236 5.433-0.815 0.12-2.487 0.541-4.168 0.581-5.613 0.133-11.233 0.047-16.843 0.253-1 0.037-1.963 1.066-2.942 1.637 1.031 0.409 2.058 1.165 3.093 1.175 9.682 0.091 19.366 0.054 29.057 0.054 0.011 5.038-6.722 11.936-12.704 13.806-0.045-0.682-0.087-1.317-0.131-1.994-5.944-0.141-11.778-0.03-17.078 2.788-1.396 0.743-2.309 2.394-3.446 3.627-1.431 1.551-2.605 3.547-4.349 4.559-3.576 2.076-7.48 3.58-11.211 5.397-13.259 6.458-27.262 6.231-42.302 4.854 8.991-2.092 17.11-3.982 25.23-5.872-0.093-0.494-0.185-0.987-0.278-1.481-10.86-1.455-21.134 2.528-31.756 4.003 3.849-2.254 7.749-4.35 11.778-6.158 4.095-1.837 8.316-3.39 12.538-5.091-5.364-4.583-10.746-5.588-17.488-4.048-3.686 0.842-7.585 1.29-11.348 1.106-3.887-0.19-7.802-1.147-11.332-3.506 3.78-1.916 7.263-3.506 10.549-5.432 1.355-0.795 2.909-2.144 3.287-3.536 0.904-3.333 1.166-6.841 1.687-10.281-6.188-0.701-17.071-6.994-19.27-11.09 9.512-1.831 19.868 0.383 28.942-5.746-2.989-2.262-9.949-5.075-12.502-7.007 3.156-0.827 10.469-0.423 13.33-0.229 2.409 0.164 3.521 0.223 4.508-0.59l28.001-21.921c2.944-2.374 14.835-13.629 17.939-20.704 2.643-6.023 2.966-11.148 2.965-12.398-2e-3 -3.355-0.413-8.609-2.721-14.469-0.969-2.461-3.812-7.912-9.677-14.267-9.09-9.847-20.783-15.17-33.57-17.807-29.732-6.13-54.436-37.881-47.462-72.884 8.142-40.866 53.247-62.991 90.107-43.552 23.824 12.564 36.456 37.078 33.072 63.762-2.045 16.12-9.338 29.269-21.563 39.839" fill="#fff"/></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 4.1 KiB |
BIN
Defensio/Images/video/introduction/introduction.mp4
Normal file
BIN
Defensio/image.png
Normal file
|
After Width: | Height: | Size: 86 KiB |
3
Defensio/puppeteer-config.json
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"args": ["--no-sandbox"]
|
||||||
|
}
|
||||||
@@ -1,11 +1,9 @@
|
|||||||
# Video Text Skript
|
# Video Text Skript
|
||||||
|
|
||||||
Anfang: Willkommen zu unserem Video über den AlumniHub. Wir sind Konstantin Hintermayer, Florian Edlmayer und Adam Gaiswinkler und wir haben im Rahmen unserer Diplomarbeit an der HTL SZU Ungargasse eine moderne Webanwendung für den Absolventenverein entwickelt.
|
Anfang: Vernetzung, die wirklich funktioniert – willkommen beim AlumniHub. Wir haben im Rahmen unserer Diplomarbeit an unserer HTL eine moderne Webanwendung für den Absolventenverein entwickelt.
|
||||||
Zu beginn unseres Projekts sind wir auf viele Probleme gestoßen. Im Sommer beschäftigten wir uns mit einer Übergangslösung um das kommende Treffen der Absolventen im Jahr 2025 zu ermöglichen. Ein weiteres Problem war unser Team Downsizing von 6 auf 3 Mitglieder. Dadurch mussten wir unsere ursprünglichen Pläne stark überdenken und uns auf das Wesentliche konzentrieren.
|
Zu beginn unseres Projekts sind wir auf viele Probleme gestoßen. Im Sommer beschäftigten wir uns mit einer Übergangslösung um das kommende Treffen der Absolventen im Jahr 2025 zu ermöglichen. Ein weiteres Problem war unser Team Downsizing von 6 auf 3 Mitglieder. Dadurch mussten wir unsere ursprünglichen Pläne stark überdenken und uns auf das Wesentliche konzentrieren.
|
||||||
Außerdem sind wir immer wieder auf Probleme mit unserer Serverinfrastruktur gestoßen.
|
Außerdem sind wir immer wieder auf Probleme mit unserer Serverinfrastruktur gestoßen.
|
||||||
|
|
||||||
Ein zentraler Teil unserer Arbeit ist die kontinuierliche Integration unserer Software. Wir haben uns für Git als Versionsverwaltungssystem entschieden und hosten eine Gitea Instanz. Bei veröffentlichen eines tags wird automatisch ein neues Debian Paket gebaut und in unsererem Debian Package Registry bereitgestellt.Durch diese automatisierung ist die veröffentlichung von neuen Softwareversionen stark vereinfacht worden.
|
|
||||||
|
|
||||||
Das Hauptziel des Projektes war es eine moderne Webanwendung für den Absolvenntenverein zu kreieren. Die es ermöglicht einfach Events und treffen zu organisieren mithilfe unseres EventRegistration Moduls. Weiter Funktionen sind die Hall of Fame, wo Absolventen ihre Erfolge präsentieren können, das Schwarze Brett für Neuigkeiten und Jobangebote und der Premiumbereich für exklusive Inhalte. Diese sind im Laufe der Entwicklung hinzugekommen.
|
Das Hauptziel des Projektes war es eine moderne Webanwendung für den Absolvenntenverein zu kreieren. Die es ermöglicht einfach Events und treffen zu organisieren mithilfe unseres EventRegistration Moduls. Weiter Funktionen sind die Hall of Fame, wo Absolventen ihre Erfolge präsentieren können, das Schwarze Brett für Neuigkeiten und Jobangebote und der Premiumbereich für exklusive Inhalte. Diese sind im Laufe der Entwicklung hinzugekommen.
|
||||||
|
|
||||||
Nun wollen wir Ihnen unsere Webanwendung genauer vorstellen.
|
Nun wollen wir Ihnen unsere Webanwendung genauer vorstellen.
|
||||||
@@ -20,3 +18,6 @@ Schwarzes Brett Modul:
|
|||||||
|
|
||||||
|
|
||||||
Premiumbereich Modul:
|
Premiumbereich Modul:
|
||||||
|
|
||||||
|
|
||||||
|
Ein zentraler Teil unserer Arbeit ist die kontinuierliche Integration unserer Software. Wir haben uns für Git als Versionsverwaltungssystem entschieden und hosten eine Gitea Instanz. Bei veröffentlichen eines tags wird automatisch ein neues Debian Paket gebaut und in unsererem Debian Package Registry bereitgestellt.Durch diese automatisierung ist die veröffentlichung von neuen Softwareversionen stark vereinfacht worden.
|
||||||
@@ -151,6 +151,11 @@ local mermaid = {
|
|||||||
compile = function (self, code)
|
compile = function (self, code)
|
||||||
local mime_type = self.mime_type or 'image/svg+xml'
|
local mime_type = self.mime_type or 'image/svg+xml'
|
||||||
local file_extension = extension_for_mimetype[mime_type]
|
local file_extension = extension_for_mimetype[mime_type]
|
||||||
|
|
||||||
|
-- Resolve puppeteer config path
|
||||||
|
local puppeteer_config = pandoc.path.join({pandoc.system.get_working_directory(), 'puppeteer-config.json'})
|
||||||
|
|
||||||
|
|
||||||
return with_temporary_directory("diagram", function (tmpdir)
|
return with_temporary_directory("diagram", function (tmpdir)
|
||||||
return with_working_directory(tmpdir, function ()
|
return with_working_directory(tmpdir, function ()
|
||||||
local infile = 'diagram.mmd'
|
local infile = 'diagram.mmd'
|
||||||
@@ -158,7 +163,7 @@ local mermaid = {
|
|||||||
write_file(infile, code)
|
write_file(infile, code)
|
||||||
pipe(
|
pipe(
|
||||||
self.execpath or 'mmdc',
|
self.execpath or 'mmdc',
|
||||||
{"--pdfFit", "--iconPacksNamesAndUrls", "mdi#https://unpkg.com/@iconify-json/mdi@1.2.3/icons.json", "--input", infile, "--output", outfile},
|
{"--pdfFit", "--iconPacksNamesAndUrls", "mdi#https://unpkg.com/@iconify-json/mdi@1.2.3/icons.json", "-p", puppeteer_config, "--input", infile, "--output", outfile},
|
||||||
''
|
''
|
||||||
)
|
)
|
||||||
return read_file(outfile), mime_type
|
return read_file(outfile), mime_type
|
||||||
@@ -167,6 +172,24 @@ local mermaid = {
|
|||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-- Source - https://stackoverflow.com/a/27028488
|
||||||
|
-- Posted by hookenz, modified by community. See post 'Timeline' for change history
|
||||||
|
-- Retrieved 2026-04-18, License - CC BY-SA 4.0
|
||||||
|
|
||||||
|
function dump(o)
|
||||||
|
if type(o) == 'table' then
|
||||||
|
local s = '{ '
|
||||||
|
for k,v in pairs(o) do
|
||||||
|
if type(k) ~= 'number' then k = '"'..k..'"' end
|
||||||
|
s = s .. '['..k..'] = ' .. dump(v) .. ','
|
||||||
|
end
|
||||||
|
return s .. '} '
|
||||||
|
else
|
||||||
|
return tostring(o)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
--- TikZ
|
--- TikZ
|
||||||
--
|
--
|
||||||
|
|
||||||
|
|||||||
3
puppeteer-config.json
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"args": ["--no-sandbox"]
|
||||||
|
}
|
||||||