From 64c3f4dd3bfee801695b83101bf97180aacf9899 Mon Sep 17 00:00:00 2001 From: KoCoder Date: Fri, 20 Mar 2026 19:02:46 +0100 Subject: [PATCH] New: TGM csl, a markdown preamble --- 00-praemble.md | 16 ++ 00_preamble.tex | 13 - 00-toc.md => 01-toc.md | 2 +- 01-Allgemein.md => 02-Allgemein.md | 0 ...uch-individueller-teil-Adam-Gaiswinkler.md | 32 +-- ...uch-individueller-teil-Florian-Edlmayer.md | 32 +-- ...dividueller-teil-Konstantin-Hintermayer.md | 0 97-tabellenverzeichnis.md | 2 + 98-abbildungsverzeichnis.md | 2 + 99-bibliographie.md | 2 + _extensions/header/header.tex | 22 ++ _extensions/sources/tgm.csl | 230 ++++++++++++++++ metadata.yaml | 2 +- pandoc-cmd.sh | 12 +- sources.bib | 256 ++++++++++++------ 15 files changed, 464 insertions(+), 159 deletions(-) create mode 100644 00-praemble.md rename 00-toc.md => 01-toc.md (78%) rename 01-Allgemein.md => 02-Allgemein.md (100%) rename 02-Diplomarbeitsbuch-individueller-teil-Adam-Gaiswinkler.md => 03-Diplomarbeitsbuch-individueller-teil-Adam-Gaiswinkler.md (97%) rename 03-Diplomarbeitsbuch-individueller-teil-Florian-Edlmayer.md => 04-Diplomarbeitsbuch-individueller-teil-Florian-Edlmayer.md (97%) rename 04-Diplomarbeitsbuch-individueller-teil-Konstantin-Hintermayer.md => 05-Diplomarbeitsbuch-individueller-teil-Konstantin-Hintermayer.md (100%) create mode 100644 _extensions/sources/tgm.csl diff --git a/00-praemble.md b/00-praemble.md new file mode 100644 index 0000000..cf64cdd --- /dev/null +++ b/00-praemble.md @@ -0,0 +1,16 @@ +\newpage + +# Kurzfassung {.unnumbered .unlisted} + +Hier steht die Kurzfassung der Diplomarbeit. + +\cleardoublepage + +# Abstract {.unnumbered .unlisted} + +Hier steht der Abstract der Diplomarbeit. + +\cleardoublepage +\pagestyle{empty} +\pagenumbering{arabic} +\setcounter{page}{1} diff --git a/00_preamble.tex b/00_preamble.tex index 4af7df5..c3b106f 100644 --- a/00_preamble.tex +++ b/00_preamble.tex @@ -93,19 +93,6 @@ Wien, am 26.03.2026 & & \hrulefill \\ & & Konstantin Hintermayer \end{tabular} -\newpage -\section*{Kurzfassung} -Die vorliegende Diplomarbeit „AlumniHub“ befasst sich mit der Entwicklung eines zentralen Portals für den Absolventenverein der HTL Ungargasse. Ziel des Projektes ist es, die Kommunikation zwischen dem Verein und seinen Mitgliedern zu digitalisieren und zu vereinfachen. Die Plattform ermöglicht es Absolventinnen und Absolventen, Profile zu erstellen, sich zu vernetzen und Informationen über Vereinsaktivitäten abzurufen. Ein besonderer Fokus lag auf der Integration eines Premium-Bereichs sowie eines sicheren Anmeldesystems über LinkedIn. - -\cleardoublepage -\section*{Abstract} -The diploma thesis "AlumniHub" focuses on the development of a central portal for the alumni association of the HTL Ungargasse. The project aims to digitize and simplify communication between the association and its members. The platform allows alumni to create profiles, network, and retrieve information about association activities. A major focus was the integration of a premium section and a secure authentication system via LinkedIn. - -\newpage -\pagenumbering{arabic} -\ -\setcounter{page}{1} - \makeatletter \renewcommand{\tableofcontents}{% \@starttoc{toc}% diff --git a/00-toc.md b/01-toc.md similarity index 78% rename from 00-toc.md rename to 01-toc.md index c7f4382..5b09c24 100644 --- a/00-toc.md +++ b/01-toc.md @@ -1,4 +1,4 @@ -\pagestyle{empty} +\cleardoublepage # Inhaltsverzeichnis {.unnumbered .unlisted} diff --git a/01-Allgemein.md b/02-Allgemein.md similarity index 100% rename from 01-Allgemein.md rename to 02-Allgemein.md diff --git a/02-Diplomarbeitsbuch-individueller-teil-Adam-Gaiswinkler.md b/03-Diplomarbeitsbuch-individueller-teil-Adam-Gaiswinkler.md similarity index 97% rename from 02-Diplomarbeitsbuch-individueller-teil-Adam-Gaiswinkler.md rename to 03-Diplomarbeitsbuch-individueller-teil-Adam-Gaiswinkler.md index 71d3501..1fd4348 100644 --- a/02-Diplomarbeitsbuch-individueller-teil-Adam-Gaiswinkler.md +++ b/03-Diplomarbeitsbuch-individueller-teil-Adam-Gaiswinkler.md @@ -42,27 +42,27 @@ In diesem Kapitel werden die Technologien und Werkzeuge vorgestellt, die für di ### C# und ASP.NET Core -C# ist eine moderne Programmiersprache von Microsoft, die besonders für die Entwicklung von Webanwendungen und Softwaresystemen geeignet ist. Sie ist klar strukturiert, gut lesbar und weit verbreitet in der professionellen Softwareentwicklung. ASP.NET Core ist ein Framework – also eine Art Werkzeugkasten – das auf C# aufbaut und die Entwicklung von Webseiten und Webanwendungen vereinfacht. Es stellt vorgefertigte Bausteine bereit, sodass man nicht alles von Grund auf neu programmieren muss. Für AlumniHub bildete ASP.NET Core die technische Grundlage aller entwickelten Module. +C# ist eine moderne Programmiersprache von Microsoft, die besonders für die Entwicklung von Webanwendungen und Softwaresystemen geeignet ist. Sie ist klar strukturiert, gut lesbar und weit verbreitet in der professionellen Softwareentwicklung. ASP.NET Core ist ein Framework – also eine Art Werkzeugkasten – das auf C# aufbaut und die Entwicklung von Webseiten und Webanwendungen vereinfacht [@aspnet_core_docs]. Es stellt vorgefertigte Bausteine bereit, sodass man nicht alles von Grund auf neu programmieren muss. Für AlumniHub bildete ASP.NET Core die technische Grundlage aller entwickelten Module. ### Blazor -Blazor ist ein Framework, das es ermöglicht, interaktive Weboberflächen direkt in C# zu entwickeln. Normalerweise werden solche Oberflächen – also alles, was der Benutzer auf dem Bildschirm sieht und mit dem er interagiert – mit einer anderen Programmiersprache namens JavaScript umgesetzt. Blazor erlaubt es, dasselbe in C# zu schreiben, was die Entwicklung vereinheitlicht und übersichtlicher macht. Konkret bedeutet das: Wenn ein Benutzer beispielsweise auf den „Zusagen"-Button klickt, reagiert die Seite sofort und aktualisiert sich automatisch – ohne dass die gesamte Seite neu geladen werden muss. +Blazor ist ein Framework, das es ermöglicht, interaktive Weboberflächen direkt in C# zu entwickeln. Normalerweise werden solche Oberflächen – also alles, was der Benutzer auf dem Bildschirm sieht und mit dem er interagiert – mit einer anderen Programmiersprache namens JavaScript umgesetzt. Blazor erlaubt es, dasselbe in C# zu schreiben, was die Entwicklung vereinheitlicht und übersichtlicher macht [@blazor_docs]. Konkret bedeutet das: Wenn ein Benutzer beispielsweise auf den „Zusagen"-Button klickt, reagiert die Seite sofort und aktualisiert sich automatisch – ohne dass die gesamte Seite neu geladen werden muss. ### Oqtane -Oqtane ist ein Content-Management-System (CMS) – also eine Software, mit der Webseiten und deren Inhalte verwaltet werden können, ähnlich wie WordPress oder Typo3. Das Besondere an Oqtane ist, dass es vollständig auf Blazor und C# aufbaut und eine modulare Architektur besitzt: Man kann eigene Erweiterungen – sogenannte Module – entwickeln und in das System einbinden, ohne den Kern der Software verändern zu müssen. Für AlumniHub wurde Oqtane als Grundlage gewählt, weil es Benutzerverwaltung, Seitenstruktur und viele weitere Standardfunktionen bereits mitbringt und somit viel Entwicklungsaufwand spart. +Oqtane ist ein Content-Management-System (CMS) – also eine Software, mit der Webseiten und deren Inhalte verwaltet werden können, ähnlich wie WordPress oder Typo3. Das Besondere an Oqtane ist, dass es vollständig auf Blazor und C# aufbaut und eine modulare Architektur besitzt: Man kann eigene Erweiterungen – sogenannte Module – entwickeln und in das System einbinden, ohne den Kern der Software verändern zu müssen. Für AlumniHub wurde Oqtane als Grundlage gewählt, weil es Benutzerverwaltung, Seitenstruktur und viele weitere Standardfunktionen bereits mitbringt und somit viel Entwicklungsaufwand spart [@oqtane_about]. ### Bootstrap und CSS -CSS (Cascading Style Sheets) ist die Sprache, mit der das Aussehen einer Webseite festgelegt wird – also Farben, Schriftarten, Abstände und das Layout. Bootstrap ist eine fertige Sammlung von CSS-Regeln und Hilfsmitteln, die von Twitter entwickelt wurde und kostenlos verfügbar ist. Der große Vorteil von Bootstrap ist, dass es sogenanntes Responsive Design einfach umsetzbar macht: Die Webseite passt sich automatisch an verschiedene Bildschirmgrößen an – egal ob Desktop, Tablet oder Smartphone. Für AlumniHub wurde Bootstrap als Basis verwendet, ergänzt durch eigenes CSS für das individuelle Erscheinungsbild der Plattform. +CSS (Cascading Style Sheets) ist die Sprache, mit der das Aussehen einer Webseite festgelegt wird – also Farben, Schriftarten, Abstände und das Layout. Bootstrap ist eine fertige Sammlung von CSS-Regeln und Hilfsmitteln, die von Twitter entwickelt wurde und kostenlos verfügbar ist. Der große Vorteil von Bootstrap ist, dass es sogenanntes Responsive Design einfach umsetzbar macht: Die Webseite passt sich automatisch an verschiedene Bildschirmgrößen an – egal ob Desktop, Tablet oder Smartphone. Für AlumniHub wurde Bootstrap als Basis verwendet, ergänzt durch eigenes CSS für das individuelle Erscheinungsbild der Plattform [@bootstrap]. ### QuestPDF -QuestPDF ist eine kostenlose Open-Source-Bibliothek – also eine fertige Programmsammlung – die es ermöglicht, PDF-Dokumente direkt aus C#-Code heraus zu erstellen. Anstatt ein PDF manuell zu gestalten, beschreibt man im Code wie das Dokument aussehen soll, und QuestPDF generiert daraus automatisch eine fertige PDF-Datei. Im Hall-of-Fame-Modul wurde QuestPDF eingesetzt, um jedem Absolventen zu ermöglichen, sein eigenes Profil als visuell ansprechendes PDF herunterzuladen. +QuestPDF ist eine kostenlose Open-Source-Bibliothek – also eine fertige Programmsammlung – die es ermöglicht, PDF-Dokumente direkt aus C#-Code heraus zu erstellen. Anstatt ein PDF manuell zu gestalten, beschreibt man im Code wie das Dokument aussehen soll, und QuestPDF generiert daraus automatisch eine fertige PDF-Datei. Im Hall-of-Fame-Modul wurde QuestPDF eingesetzt, um jedem Absolventen zu ermöglichen, sein eigenes Profil als visuell ansprechendes PDF herunterzuladen [@questpdf]. ### Gitea -Wenn mehrere Personen gemeinsam an einem Softwareprojekt arbeiten, braucht man ein System, das alle Änderungen am Code nachverfolgt und verhindert, dass sich Änderungen verschiedener Personen gegenseitig überschreiben. Dieses Konzept nennt sich Versionskontrolle. Gitea ist eine selbst gehostete Plattform für genau diesen Zweck – ähnlich wie GitHub, aber auf einem eigenen Server betrieben. Jede Änderung am Code wird als sogenannter „Commit" gespeichert, sodass man jederzeit nachvollziehen kann, wer wann was geändert hat, und bei Bedarf auf eine ältere Version zurückwechseln kann. +Wenn mehrere Personen gemeinsam an einem Softwareprojekt arbeiten, braucht man ein System, das alle Änderungen am Code nachverfolgt und verhindert, dass sich Änderungen verschiedener Personen gegenseitig überschreiben. Dieses Konzept nennt sich Versionskontrolle. Gitea ist eine selbst gehostete Plattform für genau diesen Zweck – ähnlich wie GitHub, aber auf einem eigenen Server betrieben [@gitea_about]. Jede Änderung am Code wird als sogenannter „Commit" gespeichert, sodass man jederzeit nachvollziehen kann, wer wann was geändert hat, und bei Bedarf auf eine ältere Version zurückwechseln kann. ### Entwicklungsumgebung @@ -420,23 +420,3 @@ Langfristig könnte die Plattform um eine automatische E-Mail-Benachrichtigung e AlumniHub bietet als Plattform eine solide Grundlage, die in den kommenden Jahren kontinuierlich erweitert werden kann, um den Absolventenverein der HTL Ungargasse langfristig digital zu unterstützen. --- - -### Quellen - -Microsoft: ASP.NET Core Documentation. https://learn.microsoft.com/en-us/aspnet/core/ [Zugriff: 17.03.2026] - -Microsoft: Blazor Documentation. https://learn.microsoft.com/en-us/aspnet/core/blazor/ [Zugriff: 17.03.2026] - -Microsoft: Entity Framework Core – Migrations. https://learn.microsoft.com/en-us/ef/core/managing-schemas/migrations/ [Zugriff: 17.03.2026] - -Oqtane Framework: https://www.oqtane.org/ [Zugriff: 17.03.2026] - -Oqtane Developer Documentation: https://docs.oqtane.org/ [Zugriff: 17.03.2026] - -QuestPDF Open Source Library: https://www.questpdf.com/ [Zugriff: 17.03.2026] - -Bootstrap Framework: https://getbootstrap.com/ [Zugriff: 17.03.2026] - -Gitea – Open Source Git Service: https://about.gitea.com/ [Zugriff: 17.03.2026] - -LiveDesign – Hosting, Design & Branding: https://livedesign.at/ [Zugriff: 17.03.2026] diff --git a/03-Diplomarbeitsbuch-individueller-teil-Florian-Edlmayer.md b/04-Diplomarbeitsbuch-individueller-teil-Florian-Edlmayer.md similarity index 97% rename from 03-Diplomarbeitsbuch-individueller-teil-Florian-Edlmayer.md rename to 04-Diplomarbeitsbuch-individueller-teil-Florian-Edlmayer.md index 48a1dc9..645f5b2 100644 --- a/03-Diplomarbeitsbuch-individueller-teil-Florian-Edlmayer.md +++ b/04-Diplomarbeitsbuch-individueller-teil-Florian-Edlmayer.md @@ -132,7 +132,7 @@ Für die sichere Anmeldung über externe Identitätsanbieter wurde das Protokoll ### Datenschutz und rechtliche Grundlagen -#### Bedeutung der Datenschutz-Grundverordnung (DSGVO) [^1] +#### Bedeutung der Datenschutz-Grundverordnung (DSGVO) [@dsgvo] Die Datenschutz-Grundverordnung (DSGVO) ist eine rechtsverbindliche Verordnung der Europäischen Union, die seit dem 25. Mai 2018 unmittelbar in allen EU-Mitgliedstaaten gilt und den Schutz personenbezogener Daten regelt. Sie wurde erlassen, um die Rechte natürlicher Personen bei der Verarbeitung ihrer Daten zu stärken und ein einheitliches Datenschutzniveau innerhalb der EU zu gewährleisten. @@ -153,7 +153,7 @@ Die DSGVO enthält dabei zentral die Grundsätze der Datenverarbeitung (Art. 5 D Die Einhaltung dieser Prinzipien ist für jede Organisation verpflichtend, die personenbezogene Daten verarbeitet – unabhängig von ihrer Größe oder Branche. Dies umfasst sowohl technische Aspekte der Datenverarbeitung als auch die Informationspflichten gegenüber Betroffenen, wie sie etwa in Datenschutzerklärungen umgesetzt werden müssen. -#### Umsetzung der Datenschutzanforderungen auf der Website [^2] +#### Umsetzung der Datenschutzanforderungen auf der Website [@ris] Im Rahmen der Diplomarbeit wurde eine umfassende Analyse der Datenschutzanforderungen durchgeführt und entsprechende Maßnahmen zur Umsetzung auf der Website implementiert. Dabei wurden insbesondere die Vorgaben der DSGVO berücksichtigt, um sicherzustellen, dass die Website den geltenden Datenschutzbestimmungen entspricht. @@ -175,7 +175,7 @@ Neben der Informationspflicht wurden auch technische und organisatorische Maßna • Regelmäßige Sicherheitsupdates der eingesetzten Software • Minimierung der Datenerhebung auf das Notwendige: Es werden nur die Daten erhoben, die für die Funktion der Website unbedingt erforderlich sind. (Grundprinzip der Datenminimierung nach Art. 5 Abs. 1 lit. c DSGVO) -#### Schutz personenbezogener Daten der Benutzer [^3] +#### Schutz personenbezogener Daten der Benutzer [@dsb] Der Schutz personenbezogener Daten der Benutzer stellt einen zentralen Bestandteil der Website des Absolventenvereins dar. Sämtliche Datenverarbeitungen erfolgen unter Berücksichtigung der Vorgaben der Datenschutz-Grundverordnung (DSGVO) sowie des österreichischen Datenschutzgesetzes (DSG). @@ -195,7 +195,7 @@ Durch die Kombination aus klar definierten Rechtsgrundlagen, transparenten Infor ### Backup & Restore -#### Notwendigkeit von Datensicherung [^4][^5] +#### Notwendigkeit von Datensicherung [@bsi_datensicherung][@bsi_grundschutz] Die Datensicherung ist ein wesentlicher Bestandteil der Website des Absolventenvereins. Sie dient dazu, die auf der Website gespeicherten Daten vor Verlust oder Beschädigung zu schützen. Digitale Daten bilden die Grundlage für die Funktion der Website und müssen daher regelmäßig gesichert werden. Ein Verlust oder eine Beschädigung der Daten kann zu erheblichen Problemen führen. @@ -460,7 +460,7 @@ Insgesamt stellt das entwickelte Backup-System eine robuste und praxisnahe Lösu #### Authentifizierung mittels OAuth 2.0 -Zur Anmeldung auf der entwickelten Webplattform wurde eine Authentifizierung über das Business-Netzwerk LinkedIn implementiert. Dabei kommt das standardisierte Autorisierungsprotokoll OAuth 2.0 zum Einsatz [^6]. Dieses Verfahren ermöglicht es, Benutzer über externe Identitätsanbieter zu authentifizieren, ohne dass deren Zugangsdaten direkt an die Webanwendung übertragen werden müssen. +Zur Anmeldung auf der entwickelten Webplattform wurde eine Authentifizierung über das Business-Netzwerk LinkedIn implementiert. Dabei kommt das standardisierte Autorisierungsprotokoll OAuth 2.0 zum Einsatz [@rfc6749]. Dieses Verfahren ermöglicht es, Benutzer über externe Identitätsanbieter zu authentifizieren, ohne dass deren Zugangsdaten direkt an die Webanwendung übertragen werden müssen. OAuth 2.0 basiert auf dem Prinzip der delegierten Autorisierung. Dabei erlaubt ein Benutzer einer Anwendung, bestimmte Informationen seines Kontos bei einem externen Dienst zu verwenden. Die eigentlichen Zugangsdaten – beispielsweise das LinkedIn-Passwort – verbleiben dabei ausschließlich beim Identitätsanbieter. @@ -476,9 +476,9 @@ Der Vorteil dieses Verfahrens liegt darin, dass die Webanwendung zu keinem Zeitp #### Technische Umsetzung der LinkedIn-Anmeldung in Oqtane -Die technische Umsetzung der LinkedIn-Authentifizierung erfolgte über das integrierte External Login System [^8] des Content-Management-Systems Oqtane. Dieses System ermöglicht die Integration externer Identitätsanbieter über standardisierte Protokolle wie OAuth 2.0. +Die technische Umsetzung der LinkedIn-Authentifizierung erfolgte über das integrierte External Login System [@oqtane_about] des Content-Management-Systems Oqtane. Dieses System ermöglicht die Integration externer Identitätsanbieter über standardisierte Protokolle wie OAuth 2.0. -Für die Verbindung mit LinkedIn wurde zunächst eine Entwickleranwendung im LinkedIn Developer Portal [^7] erstellt. Dabei werden zwei zentrale Zugangsdaten generiert: +Für die Verbindung mit LinkedIn wurde zunächst eine Entwickleranwendung im LinkedIn Developer Portal [@linkedin_auth_flow] erstellt. Dabei werden zwei zentrale Zugangsdaten generiert: • Client ID • Client Secret @@ -916,21 +916,3 @@ Darüber hinaus kann die Plattform auch zur Organisation von Veranstaltungen gen Langfristig kann die Plattform zu einem zentralen digitalen Treffpunkt für Absolventinnen und Absolventen werden. Besonders im beruflichen Umfeld kann ein starkes Alumni-Netzwerk einen großen Mehrwert bieten, beispielsweise durch den Austausch von Erfahrungen oder beruflichen Möglichkeiten. Insgesamt besitzt die entwickelte Plattform ein großes Zukunftspotenzial. Durch kontinuierliche Erweiterungen und die aktive Nutzung durch die Mitglieder kann sie zu einem wichtigen Instrument für die Vernetzung und Weiterentwicklung des Absolventenvereins werden. - -## Quellenverzeichnis - -[^1]: DSGVO – Datenschutz-Grundverordnung: https://eur-lex.europa.eu/eli/reg/2016/679/ [Zugriff: 19.03.2026] - -[^2]: RIS – Rechtsinformationssystem des Bundes: https://www.ris.bka.gv.at/ [Zugriff: 19.03.2026] - -[^3]: DSB – Österreichische Datenschutzbehörde: https://dsb.gv.at/ [Zugriff: 19.03.2026] - -[^4]: Datensicherung und Datenverlust: https://www.bsi.bund.de/DE/Themen/Verbraucherinnen-und-Verbraucher/Informationen-und-Empfehlungen/Cyber-Sicherheitsempfehlungen/Daten-sichern-verschluesseln-und-loeschen/Datensicherung-und-Datenverlust/Datensicherung-wie-geht-das/datensicherung-wie-geht-das_node.html [Zugriff: 19.03.2026] - -[^5]: BSI – Bundesamt für Sicherheit in der Informationstechnik: _IT-Grundschutz-Kompendium – CON.3: Datensicherungskonzept._ URL: https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Grundschutz/Kompendium/IT_Grundschutz_Kompendium_Edition2023.pdf [Zugriff: 19.03.2026] - -[^6]: IETF RFC 6749 – The OAuth 2.0 Authorization Framework: https://datatracker.ietf.org/doc/html/rfc6749 [Zugriff: 19.03.2026] - -[^7]: LinkedIn Developer Documentation – Authorization Code Flow: https://learn.microsoft.com/en-us/linkedin/shared/authentication/authorization-code-flow [Zugriff: 19.03.2026] - -[^8]: Oqtane Framework – External Login: https://docs.oqtane.org/ [Zugriff: 19.03.2026] diff --git a/04-Diplomarbeitsbuch-individueller-teil-Konstantin-Hintermayer.md b/05-Diplomarbeitsbuch-individueller-teil-Konstantin-Hintermayer.md similarity index 100% rename from 04-Diplomarbeitsbuch-individueller-teil-Konstantin-Hintermayer.md rename to 05-Diplomarbeitsbuch-individueller-teil-Konstantin-Hintermayer.md diff --git a/97-tabellenverzeichnis.md b/97-tabellenverzeichnis.md index a79d1a1..1f7427c 100644 --- a/97-tabellenverzeichnis.md +++ b/97-tabellenverzeichnis.md @@ -1,3 +1,5 @@ +\cleardoublepage + # Tabellenverzeichnis \listoftables diff --git a/98-abbildungsverzeichnis.md b/98-abbildungsverzeichnis.md index 677e3c7..9fb36f0 100644 --- a/98-abbildungsverzeichnis.md +++ b/98-abbildungsverzeichnis.md @@ -1,3 +1,5 @@ +\cleardoublepage + # Abbildungsverzeichnis \listoffigures diff --git a/99-bibliographie.md b/99-bibliographie.md index 85ba6bb..657d5e2 100644 --- a/99-bibliographie.md +++ b/99-bibliographie.md @@ -1,3 +1,5 @@ +\cleardoublepage + # Quellenverzeichnis ::: {#refs} diff --git a/_extensions/header/header.tex b/_extensions/header/header.tex index 89a52d3..c7a5837 100644 --- a/_extensions/header/header.tex +++ b/_extensions/header/header.tex @@ -7,6 +7,28 @@ \usepackage[hidelinks]{hyperref} \setlength{\emergencystretch}{3em} % Prevent overfull lines +\usepackage{tocloft} + +% Dotted lines for all levels in TOC +\renewcommand{\cftsecleader}{\cftdotfill{\cftdotsep}} +\renewcommand{\cftsubsecleader}{\cftdotfill{\cftdotsep}} +\renewcommand{\cftsubsubsecleader}{\cftdotfill{\cftdotsep}} + +% Bold section numbers and names +\renewcommand{\cftsecfont}{\bfseries} +\renewcommand{\cftsecpagefont}{\bfseries} + +% Adjust vertical spacing before sections +\setlength{\cftbeforesecskip}{0.5em} + +\usepackage{fvextra} +\fvset{breaklines=true} + +\usepackage{needspace} +\let\oldShaded\Shaded +\let\oldendShaded\endShaded +\renewenvironment{Shaded}{\needspace{8\baselineskip}\oldShaded}{\oldendShaded} + \usepackage{fancyhdr} % Define the fancy style but don't activate yet diff --git a/_extensions/sources/tgm.csl b/_extensions/sources/tgm.csl new file mode 100644 index 0000000..8274db6 --- /dev/null +++ b/_extensions/sources/tgm.csl @@ -0,0 +1,230 @@ + + diff --git a/metadata.yaml b/metadata.yaml index d8c3b7e..42a1dad 100644 --- a/metadata.yaml +++ b/metadata.yaml @@ -2,6 +2,6 @@ include_toc: true gitea: none lang: de-DE -csl: ieee.csl +csl: _extensions/sources/tgm.csl link-citations: true --- diff --git a/pandoc-cmd.sh b/pandoc-cmd.sh index ee49eab..2aead11 100755 --- a/pandoc-cmd.sh +++ b/pandoc-cmd.sh @@ -1,10 +1,11 @@ #!/bin/bash pandoc \ - 00-toc.md \ - 01-Allgemein.md \ - 02-Diplomarbeitsbuch-individueller-teil-Adam-Gaiswinkler.md \ - 03-Diplomarbeitsbuch-individueller-teil-Florian-Edlmayer.md \ - 04-Diplomarbeitsbuch-individueller-teil-Konstantin-Hintermayer.md \ + 00-praemble.md \ + 01-toc.md \ + 02-Allgemein.md \ + 03-Diplomarbeitsbuch-individueller-teil-Adam-Gaiswinkler.md \ + 04-Diplomarbeitsbuch-individueller-teil-Florian-Edlmayer.md \ + 05-Diplomarbeitsbuch-individueller-teil-Konstantin-Hintermayer.md \ 97-tabellenverzeichnis.md \ 98-abbildungsverzeichnis.md \ 99-bibliographie.md \ @@ -13,6 +14,7 @@ pandoc \ --syntax-definition _extensions/razor/razor.xml \ --citeproc \ --bibliography sources.bib \ + --csl _extensions/sources/tgm.csl \ --include-before-body 00_preamble.tex \ -H _extensions/header/header.tex \ -V geometry:"top=2.5cm, bottom=2cm, left=3cm, right=2cm, a4paper" \ diff --git a/sources.bib b/sources.bib index f7c88ec..77f5142 100644 --- a/sources.bib +++ b/sources.bib @@ -1,171 +1,251 @@ @online{ms_dependency_inversion, - title = {Dependency Inversion}, - url = {https://learn.microsoft.com/en-us/dotnet/architecture/modern-web-apps-azure/architectural-principles#dependency-inversion}, - author = {{Microsoft}}, - year = {2024}, + title = {Dependency Inversion}, + url = {https://learn.microsoft.com/en-us/dotnet/architecture/modern-web-apps-azure/architectural-principles#dependency-inversion}, + author = {{Microsoft}}, + year = {2024}, urldate = {2026-03-19} } @online{logrocket_dependency_inversion, - title = {Dependency Inversion Principle}, - url = {https://blog.logrocket.com/dependency-inversion-principle/}, - author = {{LogRocket}}, - year = {2024}, + title = {Dependency Inversion Principle}, + url = {https://blog.logrocket.com/dependency-inversion-principle/}, + author = {{LogRocket}}, + year = {2024}, urldate = {2026-03-19} } @online{oodesign_dependency_inversion, - title = {Dependency Inversion Principle}, - url = {https://www.oodesign.com/dependency-inversion-principle}, - author = {{OO Design}}, - year = {2024}, + title = {Dependency Inversion Principle}, + url = {https://www.oodesign.com/dependency-inversion-principle}, + author = {{OO Design}}, + year = {2024}, urldate = {2026-03-19} } @online{ms_di_overview, - title = {Dependency Injection Overview}, - url = {https://learn.microsoft.com/en-us/dotnet/core/extensions/dependency-injection/overview}, - author = {{Microsoft}}, - year = {2024}, + title = {Dependency Injection Overview}, + url = {https://learn.microsoft.com/en-us/dotnet/core/extensions/dependency-injection/overview}, + author = {{Microsoft}}, + year = {2024}, urldate = {2026-03-19} } @online{oqtane_about, - title = {About Oqtane}, - url = {https://www.oqtane.org/#about}, - author = {{Oqtane Foundation}}, - year = {2024}, + title = {About Oqtane}, + url = {https://www.oqtane.org/#about}, + author = {{Oqtane Foundation}}, + year = {2024}, urldate = {2026-03-19} } @online{oqtane_docs_extensions, - title = {Oqtane Extensions}, - url = {https://docs.oqtane.org/dev/extensions/index.html}, - author = {{Oqtane Foundation}}, - year = {2024}, + title = {Oqtane Extensions}, + url = {https://docs.oqtane.org/dev/extensions/index.html}, + author = {{Oqtane Foundation}}, + year = {2024}, urldate = {2026-03-19} } @online{wikipedia_blazor, - title = {Blazor}, - url = {https://en.wikipedia.org/wiki/Blazor}, - author = {{Wikipedia}}, - year = {2024}, + title = {Blazor}, + url = {https://en.wikipedia.org/wiki/Blazor}, + author = {{Wikipedia}}, + year = {2024}, urldate = {2026-03-19} } @article{bentley1985programming, - title = {Programming pearls}, - author = {Jon Bentley}, - journal = {Communications of the ACM}, - volume = {28}, - number = {9}, - pages = {896--901}, - year = {1985}, + title = {Programming pearls}, + author = {Jon Bentley}, + journal = {Communications of the ACM}, + volume = {28}, + number = {9}, + pages = {896--901}, + year = {1985}, publisher = {ACM}, - doi = {10.1145/4284.315122} + doi = {10.1145/4284.315122} } @online{fowler_dependency_injection, - title = {Inversion of Control Containers and the Dependency Injection pattern}, - url = {https://martinfowler.com/articles/injection.html}, - author = {Martin Fowler}, - year = {2004}, + title = {Inversion of Control Containers and the Dependency Injection pattern}, + url = {https://martinfowler.com/articles/injection.html}, + author = {Martin Fowler}, + year = {2004}, urldate = {2026-03-19} } @online{andrewlock_token_lifetime, - title = {Implementing custom token providers for passwordless authentication in ASP.NET Core Identity}, - url = {https://andrewlock.net/implementing-custom-token-providers-for-passwordless-authentication-in-asp-net-core-identity/#changing-the-default-token-lifetime}, - author = {Andrew Lock}, - year = {2024}, + title = {Implementing custom token providers for passwordless authentication in ASP.NET Core Identity}, + url = {https://andrewlock.net/implementing-custom-token-providers-for-passwordless-authentication-in-asp-net-core-identity/#changing-the-default-token-lifetime}, + author = {Andrew Lock}, + year = {2024}, urldate = {2026-03-19} } @online{race_conditions_pdf, - title = {Race Conditions}, - url = {https://www.cs.umd.edu/projects/syschat/raceConditions.pdf}, - author = {University of Maryland}, - year = {2024}, + title = {Race Conditions}, + url = {https://www.cs.umd.edu/projects/syschat/raceConditions.pdf}, + author = {University of Maryland}, + year = {2024}, urldate = {2026-03-19} } @online{gitea_docs, - title = {Gitea Documentation}, - url = {https://docs.gitea.com/}, - author = {{Gitea}}, - year = {2024}, + title = {Gitea Documentation}, + url = {https://docs.gitea.com/}, + author = {{Gitea}}, + year = {2024}, urldate = {2026-03-19} } @online{gitea_issue_tracker, - title = {Gitea Issue Tracker Comparison}, - url = {https://docs.gitea.com/installation/comparison#issue-tracker}, - author = {{Gitea}}, - year = {2024}, + title = {Gitea Issue Tracker Comparison}, + url = {https://docs.gitea.com/installation/comparison#issue-tracker}, + author = {{Gitea}}, + year = {2024}, urldate = {2026-03-19} } @online{gitea_pull_requests, - title = {Gitea Pull Requests}, - url = {https://docs.gitea.com/usage/pull-request}, - author = {{Gitea}}, - year = {2024}, + title = {Gitea Pull Requests}, + url = {https://docs.gitea.com/usage/pull-request}, + author = {{Gitea}}, + year = {2024}, urldate = {2026-03-19} } @online{gitea_actions, - title = {Gitea Actions Overview}, - url = {https://docs.gitea.com/usage/actions/overview}, - author = {{Gitea}}, - year = {2024}, + title = {Gitea Actions Overview}, + url = {https://docs.gitea.com/usage/actions/overview}, + author = {{Gitea}}, + year = {2024}, urldate = {2026-03-19} } @online{gitea_packages, - title = {Gitea Packages Overview}, - url = {https://docs.gitea.com/usage/packages/overview}, - author = {{Gitea}}, - year = {2024}, + title = {Gitea Packages Overview}, + url = {https://docs.gitea.com/usage/packages/overview}, + author = {{Gitea}}, + year = {2024}, urldate = {2026-03-19} } @online{dsgvo, - title = {Datenschutz-Grundverordnung (DSGVO)}, - url = {https://eur-lex.europa.eu/eli/reg/2016/679/}, - author = {{Europäische Union}}, - year = {2016}, + title = {Datenschutz-Grundverordnung (DSGVO)}, + url = {https://eur-lex.europa.eu/eli/reg/2016/679/}, + author = {{Europäische Union}}, + year = {2016}, urldate = {2026-03-19} } @online{ris, - title = {Rechtsinformationssystem des Bundes (RIS)}, - url = {https://www.ris.bka.gv.at/}, - author = {{Bundeskanzleramt Österreich}}, - year = {2024}, + title = {Rechtsinformationssystem des Bundes (RIS)}, + url = {https://www.ris.bka.gv.at/}, + author = {{Bundeskanzleramt Österreich}}, + year = {2024}, urldate = {2026-03-19} } @online{dsb, - title = {Österreichische Datenschutzbehörde (DSB)}, - url = {https://dsb.gv.at/}, - author = {{Datenschutzbehörde}}, - year = {2024}, + title = {Österreichische Datenschutzbehörde (DSB)}, + url = {https://dsb.gv.at/}, + author = {{Datenschutzbehörde}}, + year = {2024}, urldate = {2026-03-19} } @online{bsi_datensicherung, - title = {Datensicherung und Datenverlust}, - url = {https://www.bsi.bund.de/DE/Themen/Verbraucherinnen-und-Verbraucher/Informationen-und-Empfehlungen/Cyber-Sicherheitsempfehlungen/Daten-sichern-verschluesseln-und-loeschen/Datensicherung-und-Datenverlust/Datensicherung-wie-geht-das/datensicherung-wie-geht-das_node.html}, - author = {{Bundesamt für Sicherheit in der Informationstechnik (BSI)}}, - year = {2024}, + title = {Datensicherung und Datenverlust}, + url = {https://www.bsi.bund.de/DE/Themen/Verbraucherinnen-und-Verbraucher/Informationen-und-Empfehlungen/Cyber-Sicherheitsempfehlungen/Daten-sichern-verschluesseln-und-loeschen/Datensicherung-und-Datenverlust/Datensicherung-wie-geht-das/datensicherung-wie-geht-das_node.html}, + author = {{Bundesamt für Sicherheit in der Informationstechnik (BSI)}}, + year = {2024}, urldate = {2026-03-19} } @online{chatgpt_datensicherung, - title = {Notwendigkeit der Datensicherung}, - url = {https://chatgpt.com/c/69a06632-e4fc-8384-bd6c-a543d7bbd00d}, - author = {{OpenAI (ChatGPT)}}, - year = {2024}, + title = {Notwendigkeit der Datensicherung}, + url = {https://chatgpt.com/c/69a06632-e4fc-8384-bd6c-a543d7bbd00d}, + author = {{OpenAI (ChatGPT)}}, + year = {2024}, + urldate = {2026-03-19} +} + +@online{aspnet_core_docs, + title = {ASP.NET Core Documentation}, + url = {https://learn.microsoft.com/en-us/aspnet/core/}, + author = {{Microsoft}}, + year = {2026}, + urldate = {2026-03-17} +} + +@online{blazor_docs, + title = {Blazor Documentation}, + url = {https://learn.microsoft.com/en-us/aspnet/core/blazor/}, + author = {{Microsoft}}, + year = {2026}, + urldate = {2026-03-17} +} + +@online{ef_core_migrations, + title = {Entity Framework Core – Migrations}, + url = {https://learn.microsoft.com/en-us/ef/core/managing-schemas/migrations/}, + author = {{Microsoft}}, + year = {2026}, + urldate = {2026-03-17} +} + +@online{questpdf, + title = {QuestPDF Open Source Library}, + url = {https://www.questpdf.com/}, + author = {{QuestPDF}}, + year = {2026}, + urldate = {2026-03-17} +} + +@online{bootstrap, + title = {Bootstrap Framework}, + url = {https://getbootstrap.com/}, + author = {{Bootstrap}}, + year = {2026}, + urldate = {2026-03-17} +} + +@online{gitea_about, + title = {Gitea – Open Source Git Service}, + url = {https://about.gitea.com/}, + author = {{Gitea}}, + year = {2026}, + urldate = {2026-03-17} +} + +@online{livedesign, + title = {LiveDesign – Hosting, Design & Branding}, + url = {https://livedesign.at/}, + author = {{LiveDesign}}, + year = {2026}, + urldate = {2026-03-17} +} + +@online{bsi_grundschutz, + title = {IT-Grundschutz-Kompendium – CON.3: Datensicherungskonzept}, + url = {https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Grundschutz/Kompendium/IT_Grundschutz_Kompendium_Edition2023.pdf}, + author = {{BSI}}, + year = {2023}, + urldate = {2026-03-19} +} + +@online{rfc6749, + title = {IETF RFC 6749 – The OAuth 2.0 Authorization Framework}, + url = {https://datatracker.ietf.org/doc/html/rfc6749}, + author = {{IETF}}, + year = {2012}, + urldate = {2026-03-19} +} + +@online{linkedin_auth_flow, + title = {LinkedIn Developer Documentation – Authorization Code Flow}, + url = {https://learn.microsoft.com/en-us/linkedin/shared/authentication/authorization-code-flow}, + author = {{Microsoft}}, + year = {2026}, urldate = {2026-03-19} }