diff --git a/Allgemein.md b/Allgemein.md index 97876af..0b979a5 100644 --- a/Allgemein.md +++ b/Allgemein.md @@ -1,3 +1,5 @@ +# Allgemeines + ## Danksagung Obwohl die Umsetzung dieses Projektes durch das Projektteam selbst erfolgte, gab es eine Reihe an Personen, die uns tatkräftig unterstützt haben. @@ -12,9 +14,9 @@ Als wir im Oktober kurzfristig eine neue Produktionsumgebung benötigten, wurde Für den „frischen Wind“ und das sorgfältige Korrekturlesen der Arbeit bedanken wir uns herzlich bei Frau Prof. Gertrude Brindlmayer. Ihr geschulter Blick auf Details, die dem Team im Arbeitsprozess entgangen waren, stellte eine große Bereicherung für die finale Qualität dieser Arbeit dar. -## 2. Projektmanagement mit Scrum +## Projektmanagement mit Scrum -### 2.1 Grundlagen der Scrum-Methode +### Grundlagen der Scrum-Methode Für die Organisation und Umsetzung des Projekts wurde das agile Projektmanagement-Framework Scrum verwendet. Scrum ist ein weit verbreitetes Vorgehensmodell in der Softwareentwicklung, das besonders für Projekte geeignet ist, bei denen sich Anforderungen im Laufe der Entwicklung verändern können. Im Gegensatz zu klassischen Projektmanagementmethoden arbeitet Scrum nicht mit einer vollständig im Voraus geplanten Entwicklung, sondern mit kurzen, wiederkehrenden Entwicklungszyklen. @@ -41,7 +43,7 @@ Anschließend folgt die Sprint Retrospective, in der das Team den Ablauf des ver Durch diese strukturierte Vorgehensweise ermöglicht Scrum eine kontinuierliche Weiterentwicklung der Software sowie eine regelmäßige Überprüfung des Projektfortschritts. -### 2.2 Rollenverteilung im Projektteam +### Rollenverteilung im Projektteam Das Scrum-Framework definiert drei zentrale Rollen, die jeweils unterschiedliche Aufgaben innerhalb des Projekts übernehmen. Diese Rollen tragen dazu bei, Verantwortlichkeiten klar zu strukturieren und den Entwicklungsprozess effizient zu gestalten. @@ -53,7 +55,7 @@ Das Entwicklungsteam ist für die technische Umsetzung der Anforderungen verantw Durch diese klar definierten Rollen wird sichergestellt, dass organisatorische und technische Aufgaben effizient verteilt werden können und der Entwicklungsprozess strukturiert abläuft. -### 2.3 Sprintplanung und Umsetzung +### Sprintplanung und Umsetzung Die Sprintplanung stellt einen wichtigen Bestandteil des Scrum-Prozesses dar. Zu Beginn jedes neuen Sprints trifft sich das Team, um gemeinsam zu entscheiden, welche Aufgaben innerhalb des kommenden Zeitraums umgesetzt werden sollen. @@ -71,7 +73,7 @@ Durch diese regelmäßige Abstimmung wird sichergestellt, dass alle Teammitglied Am Ende eines Sprints werden die entwickelten Funktionen im Sprint Review präsentiert. In diesem Meeting wird überprüft, welche Anforderungen erfolgreich umgesetzt wurden und ob weitere Anpassungen notwendig sind. Anschließend reflektiert das Team im Rahmen der Sprint Retrospective den Arbeitsprozess und identifiziert mögliche Verbesserungen für zukünftige Sprints. -### 2.4 Vorteile von Scrum für die Webentwicklung +### Vorteile von Scrum für die Webentwicklung Die Verwendung von Scrum bietet insbesondere für Webentwicklungsprojekte zahlreiche Vorteile. Webanwendungen entwickeln sich häufig dynamisch weiter, da sich Anforderungen, Technologien oder Benutzerbedürfnisse im Laufe der Zeit verändern können. diff --git a/Diplomarbeitsbuch-individueller-teil-Adam-Gaiswinkler.md b/Diplomarbeitsbuch-individueller-teil-Adam-Gaiswinkler.md index a72e458..d7b4ee9 100644 --- a/Diplomarbeitsbuch-individueller-teil-Adam-Gaiswinkler.md +++ b/Diplomarbeitsbuch-individueller-teil-Adam-Gaiswinkler.md @@ -1,6 +1,6 @@ # Adam Gaiswinkler -## 1. Einleitung +## Einleitung ### Motivation @@ -34,49 +34,49 @@ Das Datenbankdesign sowie die Infrastruktur und das Server-Setup waren nicht Tei --- -## 2. Technologischer Überblick +## Technologischer Überblick In diesem Kapitel werden die Technologien und Werkzeuge vorgestellt, die für die Entwicklung des Anmeldetools, des Hall-of-Fame-Moduls und des Oqtane-Themes eingesetzt wurden. Die Beschreibungen sind dabei so gestaltet, dass sie auch für Leserinnen und Leser ohne technischen Hintergrund verständlich sind. -### 2.1 C# und ASP.NET Core +### 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. -### 2.2 Blazor +### 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. -### 2.3 Oqtane +### 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. -### 2.4 Bootstrap und CSS +### 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. -### 2.5 QuestPDF +### 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. -### 2.6 Gitea +### 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. -### 2.7 Entwicklungsumgebung +### Entwicklungsumgebung Eine Entwicklungsumgebung – auch IDE (Integrated Development Environment) genannt – ist ein Programm, das Entwicklerinnen und Entwickler beim Schreiben von Code unterstützt. Sie bietet unter anderem Funktionen wie automatische Vervollständigung, Fehlererkennung und integrierte Debugging-Werkzeuge, die das Auffinden und Beheben von Fehlern im Code erleichtern. Zu Beginn des Projekts wurde Visual Studio 2022 auf Windows verwendet. Visual Studio 2022 ist die führende Entwicklungsumgebung von Microsoft für .NET-Projekte und bietet eine umfangreiche Unterstützung für ASP.NET Core und Blazor. Im Laufe des Projekts erfolgte jedoch ein Wechsel von Windows auf macOS. Da Visual Studio 2022 auf Mac nicht mehr verfügbar ist – Microsoft hat die Mac-Version eingestellt – wurde als Ersatz JetBrains Rider eingesetzt. JetBrains Rider ist eine next-generation IDE von Google, die plattformübergreifend funktioniert und eine moderne Entwicklungsumgebung für .NET-Projekte auf macOS bietet. Der Umstieg auf JetBrains Rider ermöglichte es, die Entwicklung auf dem neuen System ohne größere Unterbrechungen fortzusetzen. -### 2.8 Plattformwechsel: Windows zu macOS +### Plattformwechsel: Windows zu macOS Ein besonderer Aspekt der Entwicklung war der Wechsel von Windows auf macOS während des Projektverlaufs. Unter Plattform versteht man in der Softwareentwicklung das Betriebssystem, auf dem eine Anwendung läuft – also etwa Windows, macOS oder Linux. Dieser Wechsel brachte spezifische Herausforderungen mit sich, da Oqtane primär für Windows entwickelt wurde. Obwohl Oqtane grundsätzlich auch auf macOS und Linux lauffähig ist, ist die Unterstützung für diese Plattformen veraltet und nicht vollständig angepasst. In der Praxis bedeutete das: Der Code ließ sich teilweise nicht fehlerfrei kompilieren – also in ein lauffähiges Programm umwandeln – und Oqtane startete zunächst nur mit Fehlermeldungen. Durch den Einsatz von JetBrains Rider als IDE konnten diese Probleme weitgehend gelöst werden, da JetBrains Rider eine bessere plattformübergreifende Integration bietet als die ursprünglich verwendete Entwicklungsumgebung. --- -## 3. Entwicklung des Oqtane Themes +## Entwicklung des Oqtane Themes -### 3.1 Ziel des Themes +### Ziel des Themes Im Rahmen des Projekts AlumniHub wurde ein eigenes Theme für das Content-Management-System Oqtane entwickelt. Ziel dieser Entwicklung war es, das Standarddesign von Oqtane vollständig durch eine projektspezifische Benutzeroberfläche zu ersetzen, die den Anforderungen des Absolventenvereins der HTL Ungargasse entspricht. Das Standardtheme von Oqtane ist funktional, jedoch generisch gehalten und bietet keinen Bezug zur Schule oder zum Projekt. Aus diesem Grund wurde frühzeitig die Entscheidung getroffen, ein vollständig eigenes Theme zu entwickeln, das sowohl optisch als auch technisch auf die Bedürfnisse der Plattform zugeschnitten ist. @@ -84,7 +84,7 @@ Das visuelle Design orientiert sich dabei am bestehenden Erscheinungsbild der of Neben der visuellen Gestaltung standen auch technische Anforderungen im Mittelpunkt. Das Theme sollte auf unterschiedlichen Endgeräten – sowohl auf Desktop-Computern als auch auf Smartphones und Tablets – zuverlässig und benutzerfreundlich funktionieren. Responsive Design war daher von Anfang an eine zentrale Anforderung. Darüber hinaus sollte das Theme vollständig in die Oqtane-Architektur integriert sein, sodass alle Standardfunktionen des CMS wie Benutzerverwaltung, Seitenverwaltung und Modulintegration weiterhin ohne Einschränkungen genutzt werden können. -### 3.2 Technische Umsetzung +### Technische Umsetzung Als technische Grundlage diente die Theme-Architektur von Oqtane. Das Layout wurde in einer zentralen Razor-Datei (`Theme.razor`) definiert, welche von der Basisklasse `ThemeBase` erbt. Durch diese Vererbung stehen im Theme automatisch zentrale Funktionen des Frameworks zur Verfügung, darunter der Seitenzustand (`PageState`), Navigationsdaten, Systemeinstellungen sowie Informationen über den aktuell angemeldeten Benutzer. Dies ermöglicht eine tiefe Integration des Themes in das CMS, ohne dass zusätzliche Schnittstellen oder externe Datenzugriffe notwendig sind. @@ -133,41 +133,41 @@ Neben Navigation und Layout wurden weitere Funktionen in das Theme integriert. D Darüber hinaus wurde das ControlPanel von Oqtane integriert, das Administratorinnen und Administratoren direkten Zugriff auf Verwaltungsfunktionen bietet. Login- und Registrierungsoptionen werden über den `SettingService` aus den Site-Einstellungen geladen, sodass diese Funktionen ohne Anpassungen am Code aktiviert oder deaktiviert werden können. -### 3.3 Herausforderungen +### Herausforderungen Die eigene Implementierung der Navigation über `PageState.Pages` und eine LINQ-basierte Filterlogik erwies sich als die richtige Entscheidung. Sie löste nicht nur das Problem der fehlenden Anpassbarkeit der Standardkomponente, sondern brachte gleichzeitig einen wesentlichen Mehrwert: Die Navigation ist vollständig wartungsfrei. Werden im CMS neue Seiten angelegt, erscheinen diese automatisch im Menü – ohne dass eine einzige Zeile Code angepasst werden muss. Zudem ermöglichte dieser Ansatz die vollständige Kontrolle über das Erscheinungsbild des Burger-Menüs, was mit der Standardkomponente nicht möglich gewesen wäre. --- -## 4. Umsetzung der Module +## Umsetzung der Module -### 4.1 Anmeldetool +### Anmeldetool -#### 4.1.1 Ziel des Moduls +#### Ziel des Moduls Das Anmeldetool wurde entwickelt, um Mitgliedern des Absolventenvereins eine einfache und strukturierte Möglichkeit zu bieten, sich zu Veranstaltungen und Treffen an- oder abzumelden. Ziel des Moduls ist es, den organisatorischen Aufwand bei der Planung und Verwaltung von Treffen deutlich zu reduzieren und gleichzeitig eine benutzerfreundliche Oberfläche für alle Beteiligten bereitzustellen. Das Modul wurde als zusätzliche Funktionserweiterung in das bestehende Content-Management-System integriert. Es ermöglicht sowohl die Verwaltung der Veranstaltungen auf Seiten der Organisatoren als auch eine intuitive Interaktion für die Teilnehmerinnen und Teilnehmer. Durch den Einsatz moderner Webtechnologien konnte dabei eine reaktionsschnelle und geräteübergreifend nutzbare Lösung geschaffen werden. -#### 4.1.2 Frontend (Eingabemaske) +#### Frontend (Eingabemaske) Die Benutzeroberfläche des Anmeldetools wurde mithilfe von Blazor realisiert, einem Framework der ASP.NET-Technologieplattform, das die Entwicklung interaktiver Weboberflächen in C# ermöglicht. Die Eingabemaske wurde als eigenständige Blazor-Komponente implementiert, die flexibel in verschiedene Seiten der Anwendung eingebettet werden kann. Beim Aufruf der Seite wird dem Benutzer zunächst eine kurze Beschreibung der jeweiligen Veranstaltung angezeigt. Im Anschluss stehen zwei klar gekennzeichnete Schaltflächen zur Verfügung: Zusagen zur Bestätigung der Teilnahme sowie Absagen zur Ablehnung. Die Schaltflächen wurden farblich differenziert gestaltet – eine grüne Hervorhebung signalisiert die Zusage, eine rote Darstellung steht für die Absage. Diese Gestaltung orientiert sich an etablierten Designkonventionen moderner Webanwendungen und verbessert die intuitive Bedienbarkeit erheblich. Darüber hinaus wurde besonderer Wert auf eine responsive Darstellung gelegt, damit das Tool sowohl auf Desktop-Geräten als auch auf Smartphones und Tablets problemlos genutzt werden kann. -#### 4.1.3 API-Schnittstelle +#### API-Schnittstelle Die Anbindung des Anmeldetools an das bestehende CMS erfolgt über klar definierte Schnittstellen innerhalb der ASP.NET-Architektur. Die Komponente kommuniziert mit dem Backend, um Veranstaltungsdaten abzurufen sowie Anmelde- und Absagestatus der Teilnehmenden zu übermitteln und zu persistieren. Die Datenübertragung erfolgt nach dem Prinzip der sauberen Komponentenarchitektur: Die Blazor-Komponente ist als eigenständige Einheit konzipiert, die über Parameter und Rückruffunktionen mit übergeordneten Seitenkomponenten kommuniziert. Diese Struktur gewährleistet eine klare Trennung zwischen Darstellungslogik und Datenzugriff und erleichtert zukünftige Erweiterungen der Schnittstelle erheblich. -#### 4.1.4 Datenauswertung +#### Datenauswertung Die im Anmeldetool erfassten Daten bilden die Grundlage für die Verwaltung und Auswertung von Veranstaltungsteilnahmen. Organisatoren können auf Basis der gespeicherten An- und Abmeldungen die Teilnehmerzahlen einsehen und die Planung entsprechend anpassen. Die Architektur des Moduls ist bereits auf zukünftige Erweiterungen ausgelegt. Geplante Erweiterungen umfassen eine übersichtliche Teilnehmerliste mit Namen und Anmeldestatus, die Möglichkeit, eine maximale Teilnehmeranzahl je Veranstaltung festzulegen sowie eine direkte Speicherung und Auswertung der Anmeldedaten in einer Datenbank. Durch diese Erweiterungen soll das Anmeldetool künftig nicht nur als Interaktionselement für Teilnehmer, sondern auch als vollwertiges Verwaltungswerkzeug für Veranstaltungsorganisatoren dienen. -#### 4.1.5 UX-Überlegungen (User Experience) +#### UX-Überlegungen (User Experience) Ein zentraler Aspekt bei der Entwicklung des Anmeldetools war die Benutzerfreundlichkeit der Oberfläche. UX (User Experience) bezeichnet dabei die Gesamtheit aller Erfahrungen, die ein Benutzer bei der Interaktion mit einer Anwendung macht – von der visuellen Gestaltung über die Bedienbarkeit bis hin zur allgemeinen Zufriedenheit mit dem System. Die Module wurden so gestaltet, dass Benutzerinnen und Benutzer die Funktionen ohne zusätzliche Schulung verwenden können. Eine klare Struktur, eine intuitive Bedienung sowie ein konsistentes Erscheinungsbild innerhalb des bestehenden Systems standen dabei im Vordergrund. @@ -175,7 +175,7 @@ Während der Testphase wurden mehrere visuelle Darstellungsprobleme identifizier Diese Maßnahmen stellen einen ersten Schritt in der kontinuierlichen Verbesserung der mobilen Benutzeroberfläche dar. Weitere Feinabstimmungen sind geplant, um das Anmeldetool langfristig als stabile, benutzerfreundliche und geräteübergreifend konsistente Lösung zu etablieren. -### 4.2 Hall of Fame +### Hall of Fame Das Hall-of-Fame-Modul ist ein zentrales Modul der AlumniHub-Plattform. Es dient dazu, ehemalige Absolventinnen und Absolventen der HTL Ungargasse sichtbar zu machen und ihre beruflichen Werdegänge zu präsentieren. Das Modul wurde als eigenständiges, wiederverwendbares Oqtane-Modul entwickelt und ermöglicht es registrierten Benutzerinnen und Benutzern, sich selbst mit einem persönlichen Profil einzutragen. @@ -303,9 +303,9 @@ Die ursprünglich fest codierten Sortierrichtungen wurden durch einen Toggle-But --- -## 5. Übergangslösung, Probleme & Learnings +### Übergangslösung, Probleme & Learnings -### 5.1 Übergangslösung (Sommer 2025) +### Übergangslösung (Sommer 2025) #### Gründe & Technische Umsetzung @@ -327,7 +327,7 @@ Es gab keine Benutzerkonten und keine Authentifizierung. Jede Person, die die Se Diese bewusste Reduktion auf das Wesentliche war jedoch kein Nachteil, sondern eine pragmatische Entscheidung: Die Lösung musste schnell funktionieren und zuverlässig sein – und das war sie. Nach dem Absolvententreffen wurde die Seite nicht einfach abgeschaltet, sondern zu einer reinen Feedback-Seite für das Diplomprojekt umfunktioniert. Über diese Seite konnten Interessierte – darunter Lehrkräfte, Mitschülerinnen und Mitschüler sowie externe Besucher der Präsentation – weiterhin direktes Feedback zum Projekt abgeben. Die Seite blieb so lange in Betrieb, bis die vollständig entwickelte AlumniHub-Plattform diese Funktion nativ übernahm. -### 5.2 Probleme +### Probleme #### Technische Probleme @@ -353,7 +353,7 @@ Neben den technischen Herausforderungen gab es auch auf organisatorischer Ebene Diese Situation führte zu einer deutlichen Ungleichverteilung der Arbeitsbelastung. Wenige Personen mussten in dieser Zeit deutlich mehr Verantwortung übernehmen als ursprünglich geplant, was zu Frustration und Verzögerungen führte. Im Nachhinein zeigt sich, dass klarere Absprachen und verbindlichere Vereinbarungen zu Beginn des Sommers dazu beigetragen hätten, diese Situation zu vermeiden oder zumindest abzumildern. -### 5.3 Learnings +### Learnings #### Technisch @@ -375,7 +375,7 @@ Auf persönlicher Ebene war die wichtigste Erkenntnis aus diesem Projekt die Bed --- -## 6. Testen & Qualitätssicherung +### Testen & Qualitätssicherung ### Funktionstests der Module @@ -395,9 +395,9 @@ Ein häufiges Feedback war, dass die Unterscheidung zwischen Zusage und Absage a --- -## 7. Fazit und Ausblick +### Fazit und Ausblick -### 7.1 Zielerreichung +### Zielerreichung Rückblickend auf das Projekt AlumniHub lässt sich festhalten, dass die zentralen Ziele meines individuellen Aufgabenbereichs erfolgreich umgesetzt wurden. @@ -409,7 +409,7 @@ Das **Theme** wurde von einem anderen Teammitglied entwickelt und ist ebenfalls Insgesamt bin ich mit dem erreichten Stand zufrieden – insbesondere angesichts der Herausforderungen durch die Teamverkleinerung, den Plattformwechsel von Windows auf macOS und die technischen Probleme mit dem ursprünglichen Hosting. -### 7.2 Ausblick +### Ausblick Für die Weiterentwicklung der Plattform gibt es mehrere sinnvolle nächste Schritte. Im Bereich des Anmeldetools wäre die Implementierung einer vollständigen Teilnehmerliste mit direkter Datenbankanbindung der wichtigste nächste Schritt. Ergänzend dazu sollte die Möglichkeit geschaffen werden, maximale Teilnehmerzahlen pro Veranstaltung festzulegen, sodass Organisatoren die Kapazität von Treffen besser steuern können. @@ -419,7 +419,7 @@ AlumniHub bietet als Plattform eine solide Grundlage, die in den kommenden Jahre --- -## 8. Quellen +### Quellen Microsoft: ASP.NET Core Documentation. https://learn.microsoft.com/en-us/aspnet/core/ [Zugriff: 17.03.2026] diff --git a/Diplomarbeitsbuch-individueller-teil-Florian-Edlmayer.md b/Diplomarbeitsbuch-individueller-teil-Florian-Edlmayer.md index 4061725..3a5908e 100644 --- a/Diplomarbeitsbuch-individueller-teil-Florian-Edlmayer.md +++ b/Diplomarbeitsbuch-individueller-teil-Florian-Edlmayer.md @@ -1,20 +1,20 @@ # Florian Edlmayer -## 1. Einleitung des individuellen Teils +## Einleitung des individuellen Teils In diesem Abschnitt wird meine persönliche Aufgabenstellung im Rahmen des Projektes (Alumnihub) beschrieben. -### 1.1 Auftrag / persönliche Aufgabenstellungen +### Auftrag / persönliche Aufgabenstellungen ## 1.3 Nutzen für den Absolventenverein Für den Verein bedeutet das: rechtskonforme Datenverarbeitung, gesicherte Datenverfügbarkeit und ein niedrigschwelliger Login für Absolventinnen und Absolventen mit bestehendem LinkedIn-Konto. -## 2. Anforderungen an das entwickelte Modul bzw. die Funktionalität +## Anforderungen an das entwickelte Modul bzw. die Funktionalität -### 2.1 Modulanforderungen / funktionale Anforderungen +### Modulanforderungen / funktionale Anforderungen -### 2.2 Infrastrukturanforderungen / nicht‑funktionale Anforderungen +### Infrastrukturanforderungen / nicht‑funktionale Anforderungen ### Entwicklung eines CMS-Moduls @@ -35,7 +35,7 @@ Abschließend wurde das Thema Datensicherung umfassend behandelt, da die Sichers Ziel dieser Maßnahmen ist es, das Risiko von Datenverlusten zu minimieren und einen stabilen sowie sicheren Betrieb der Webanwendung zu gewährleisten. Die Backup- und Restore-Prozesse sollen automatisiert ablaufen, um menschliche Fehler zu reduzieren und eine kontinuierliche, regelmäßige Datensicherung sicherzustellen. Dadurch wird eine hohe Ausfallsicherheit sowie die langfristige Verfügbarkeit der gespeicherten Informationen gewährleistet. -### 3.2 Zielsetzung +### Zielsetzung #### Technische Zielsetzung @@ -69,9 +69,9 @@ Darüber hinaus wurde darauf geachtet, dass die Plattform ein modernes Erscheinu Insgesamt verfolgt die gestalterische Zielsetzung das Ziel, eine Plattform zu schaffen, die sowohl funktional als auch optisch ansprechend ist und den Benutzern eine positive Nutzungserfahrung bietet. -## 4. Datenschutz und rechtliche Grundlagen +## Datenschutz und rechtliche Grundlagen -### 4.1 Bedeutung der Datenschutz-Grundverordnung (DSGVO) [@dsgvo] +### 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. @@ -92,7 +92,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. -### 4.2 Umsetzung der Datenschutzanforderungen auf der Website [@ris] +### 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. @@ -114,7 +114,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) -### 4.3 Schutz personenbezogener Daten der Benutzer [@dsb] +### 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). @@ -132,9 +132,9 @@ Darüber hinaus besteht das Recht, sich bei der österreichischen Datenschutzbeh Durch die Kombination aus klar definierten Rechtsgrundlagen, transparenten Informationspflichten und technischen Schutzmaßnahmen wird ein hohes Datenschutzniveau gewährleistet und der verantwortungsvolle Umgang mit personenbezogenen Daten sichergestellt. -## 5. Automatisierung von Serverprozessen +## Automatisierung von Serverprozessen -### 5.1 Notwendigkeit von Datensicherung [@bsi_datensicherung][@chatgpt_datensicherung] +### Notwendigkeit von Datensicherung [@bsi_datensicherung][@chatgpt_datensicherung] 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. @@ -251,7 +251,7 @@ Durch diesen Rotationsmechanismus wird verhindert, dass sich im Laufe der Zeit e Die gewählte Anzahl von 30 Sicherungen ermöglicht es, bei täglicher Ausführung des Backup-Skripts ungefähr einen Monat an Wiederherstellungspunkten vorzuhalten. Dadurch wird ein sinnvoller Kompromiss zwischen Datensicherheit und effizienter Speicherverwaltung erreicht. -### 5.3 Implementierung der Backup-Skripte +### Implementierung der Backup-Skripte Die Implementierung des Backup-Systems erfolgte mittels eines Bash-Skripts, das auf dem Linux-Server ausgeführt wird. Bash eignet sich besonders für administrative Aufgaben, da sie direkten Zugriff auf Systembefehle, Dateien und Prozesse bietet. Das Skript wurde so aufgebaut, dass es robust, automatisierbar und nachvollziehbar arbeitet. @@ -310,7 +310,7 @@ Die Implementierung zeichnet sich durch folgende Eigenschaften aus: Durch diese Umsetzung wurde ein zuverlässiges und wartbares Backup-System geschaffen, das den kontinuierlichen Betrieb der Webanwendung unterstützt und im Fehlerfall eine schnelle Wiederherstellung ermöglicht. -### 5.4 Wiederherstellung von Daten mittels Restore-Skripten +### Wiederherstellung von Daten mittels Restore-Skripten Neben der Datensicherung stellt die strukturierte Wiederherstellung der Daten einen zentralen Bestandteil des Backup-Systems dar. Zu diesem Zweck wurde ein eigenes Bash-Skript implementiert, das sowohl die PostgreSQL-Datenbank als auch die Anwendungsdateien aus einem gewählten Backup-Ordner wiederherstellt (Restore-Skript). Ziel war es, einen klar definierten und kontrollierten Prozess zu schaffen, der im Fehlerfall eine vollständige Rücksetzung des Systems ermöglicht. @@ -383,7 +383,7 @@ Der Parameter -x extrahiert das Archiv, -p stellt die ursprünglichen Dateiberec Zusammenfassend ermöglicht das Restore-Skript eine vollständige Rücksetzung der Webanwendung auf einen definierten Sicherungsstand. Durch die Kombination aus Sicherheitsabfrage, kontrollierter Datenbank-Neuerstellung und strukturiertem Dateirestore wird ein zuverlässiger und nachvollziehbarer Wiederherstellungsprozess gewährleistet. Das System ergänzt somit das Backup-Konzept um eine praxisnahe und technisch saubere Lösung für den Ernstfall. -### 5.5 Fazit zur Datensicherung +### Fazit zur Datensicherung Durch die Implementierung eines automatisierten Backup- und Restore-Systems wurde eine zuverlässige Grundlage für die Datensicherheit der Webanwendung geschaffen. Das entwickelte System ermöglicht eine regelmäßige Sicherung sowohl der PostgreSQL-Datenbank als auch der vollständigen Anwendungsdateien. Durch die automatisierte Ausführung mittels Cronjob wird sichergestellt, dass die Backups ohne manuelles Eingreifen täglich erstellt werden. @@ -411,7 +411,7 @@ Nach der Autorisierung sendet LinkedIn einen solchen Autorisierungscode an die W Der Vorteil dieses Verfahrens liegt darin, dass die Webanwendung zu keinem Zeitpunkt Zugriff auf das Passwort des Benutzers erhält. Dadurch wird ein höheres Sicherheitsniveau erreicht und gleichzeitig die Benutzerfreundlichkeit verbessert, da sich Benutzer mit ihrem bestehenden LinkedIn-Konto anmelden können. -### 6.2 Technische Umsetzung der LinkedIn-Anmeldung in Oqtane +### 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. @@ -444,7 +444,7 @@ Diese Daten werden von Oqtane als sogenannte Claims verarbeitet und anschließen Darüber hinaus wurde in den Einstellungen aktiviert, dass bei der ersten Anmeldung automatisch ein neues Benutzerkonto erstellt werden kann. Dadurch können sich neue Nutzer direkt über ihr LinkedIn-Konto registrieren. -### 6.3 Ablauf des Anmeldeprozesses +### Ablauf des Anmeldeprozesses Der eigentliche Anmeldevorgang erfolgt in mehreren aufeinanderfolgenden Schritten. Zunächst wählt der Benutzer auf der Login-Seite der Webplattform die Option zur Anmeldung über LinkedIn aus. @@ -454,9 +454,9 @@ Nach erfolgreicher Authentifizierung sendet LinkedIn eine Antwort an die zuvor d Wie in Abschnitt 6.1 beschrieben, werden die abgerufenen Profildaten zur Identifikation oder Neuanlage des Benutzerkontos in der lokalen Datenbank verwendet. -## 7. Implementierung des Premium-Bereichs +## Implementierung des Premium-Bereichs -### 7.1 Ziel und Zweck des Premium-Bereichs +### Ziel und Zweck des Premium-Bereichs Der Premium-Bereich wurde mit dem Ziel entwickelt, den Mitgliedern des SZU Absolventenvereins einen klar abgegrenzten, exklusiven Bereich innerhalb der Vereinswebsite bereitzustellen. Das Premium-Bereich-Modul ist eine Erweiterung für das Content-Management-System Oqtane und bildet das Kernstück des digitalen Mitgliederbereichs. Es ermöglicht Mitgliedern, sich über das Hochladen eines Ingenieur-Antrags als PDF-Dokument für eine zeitlich begrenzte Premium-Mitgliedschaft zu qualifizieren. Premium-Mitglieder erhalten Zugang zu exklusiven Funktionen wie dem Einsehen genehmigter Anträge anderer Mitglieder sowie einer Mitgliedersuche mit integrierter Kontaktfunktion. @@ -664,7 +664,7 @@ public class AddPremiumTables : MultiDatabaseMigration Insgesamt definieren vier Migrationen die Datenbankstruktur: Die erste erstellt die Basistabelle des Moduls, die zweite fügt die drei Tabellen für Ingenieur-Anträge, Premium-Status und Premium-Events hinzu, die dritte entfernt nicht mehr benötigte Spalten nach der Umstellung auf den Oqtane FileManager, und die vierte ergänzt die Felder für Titel und Kurzbeschreibung. Alle Migrationen werden bei der Modulinstallation automatisch ausgeführt. -### 7.3 Zugriffsbeschränkung und Benutzerrechte +### Zugriffsbeschränkung und Benutzerrechte Der Zugriff auf den Premium-Bereich wird durch ein mehrstufiges Berechtigungssystem gesteuert, das sowohl auf Server- als auch auf Client-Seite durchgesetzt wird. Die verfügbaren Berechtigungen werden in der `ModuleInfo`-Klasse registriert: @@ -739,7 +739,7 @@ Zuerst wird die Oqtane-Rollenzugehörigkeit geprüft, anschließend der datenban Die Zugriffsbeschränkung wird konsequent auf beiden Seiten durchgesetzt: Clientseitig entscheidet die Blazor-Komponente anhand der Benutzerrolle, welche UI-Elemente angezeigt werden. Serverseitig prüft jeder Service-Aufruf die Berechtigung des anfragenden Benutzers über das `[Authorize]`-Attribut mit Policies wie `PolicyNames.ViewModule` und `PolicyNames.EditModule`, bevor Daten zurückgegeben oder Änderungen vorgenommen werden. Dadurch wird sichergestellt, dass selbst bei einer Manipulation der Client-Anfrage keine unberechtigten Zugriffe möglich sind. -### 7.4 Mehrwert für registrierte Mitglieder +### Mehrwert für registrierte Mitglieder Der Premium-Bereich schafft einen konkreten Mehrwert für registrierte Mitglieder auf mehreren Ebenen. Auf fachlicher Ebene entsteht durch die gesammelten Ingenieur-Anträge eine wachsende Wissensbasis, die allen Premium-Mitgliedern zugänglich ist. Absolventen können von den Arbeiten anderer Mitglieder lernen, sich inspirieren lassen und fachliche Ansätze vergleichen. Durch die Möglichkeit, Titel und Kurzbeschreibungen zu hinterlegen, können Mitglieder gezielt nach relevanten Themen suchen, ohne jedes PDF-Dokument einzeln öffnen zu müssen. @@ -749,9 +749,9 @@ Auf motivationaler Ebene bietet das zeitlich begrenzte Premium-System einen Anre Der Datenschutz wird dabei konsequent gewahrt. Die Mitgliedersuche gibt nur ausgewählte, nicht-sensible Informationen wie Anzeigenamen und Benutzernamen zurück. E-Mail-Adressen und andere persönliche Daten werden serverseitig herausgefiltert und sind für andere Mitglieder nicht einsehbar. Die Kontaktaufnahme erfolgt ausschließlich über das plattformeigene Benachrichtigungssystem, sodass kein Mitglied seine persönlichen Kontaktdaten preisgeben muss. -## 8. Technologien +## Technologien -### 8.1 ASP.NET und .NET +### ASP.NET und .NET Für die Entwicklung der Webanwendung wurde das Framework ASP.NET in Kombination mit der Plattform .NET verwendet. .NET ist eine von Microsoft entwickelte Entwicklungsplattform zur Erstellung moderner Anwendungen für Web, Desktop, Cloud und mobile Systeme. @@ -771,7 +771,7 @@ Ein weiterer Vorteil von ASP.NET besteht in der klar strukturierten Architektur Diese Struktur erleichtert die Wartung und Erweiterung der Anwendung erheblich, da Änderungen gezielt innerhalb einzelner Komponenten vorgenommen werden können. -### 8.2 PostgreSQL-Datenbank +### PostgreSQL-Datenbank Zur Speicherung der Daten der Plattform wurde das relationale Datenbanksystem PostgreSQL eingesetzt. PostgreSQL gehört zu den leistungsfähigsten Open-Source-Datenbanken und wird weltweit in vielen professionellen Anwendungen verwendet. @@ -814,7 +814,7 @@ Zusätzlich wurden Funktionen im Bereich Datenschutz umgesetzt, die den Anforder Insgesamt konnte ich durch die praktische Umsetzung der Plattform ein deutlich tieferes Verständnis für Webtechnologien, Systemarchitekturen und Backend-Entwicklung gewinnen. -### 9.2 Agile Projektarbeit und Teamarbeit (Zeitmanagement) +### Agile Projektarbeit und Teamarbeit (Zeitmanagement) Neben den technischen Aspekten konnte ich auch wichtige Erfahrungen im Bereich der agilen Projektarbeit sammeln. Für die Organisation des Projekts wurde das agile Framework Scrum eingesetzt. @@ -828,7 +828,7 @@ Darüber hinaus zeigte sich, dass agile Methoden besonders gut für Softwareproj Diese Erfahrungen haben mir ein besseres Verständnis für moderne Softwareentwicklungsprozesse vermittelt und gezeigt, wie wichtig strukturierte Planung und kontinuierliche Verbesserung in technischen Projekten sind. -### 9.3 Persönliche Weiterentwicklung +### Persönliche Weiterentwicklung Neben den technischen und organisatorischen Erkenntnissen stellte die Diplomarbeit auch eine wichtige persönliche Weiterentwicklung dar. Die eigenständige Planung und Umsetzung eines komplexen Softwareprojekts erforderte ein hohes Maß an Selbstorganisation und Durchhaltevermögen. @@ -840,9 +840,9 @@ Ein weiterer wichtiger Lernaspekt war die Verbesserung meiner Fähigkeiten im Be Zusammenfassend hat mir die Diplomarbeit nicht nur tiefere technische Kenntnisse vermittelt, sondern auch meine Fähigkeiten im Bereich Problemlösung, Selbstorganisation und Projektplanung gestärkt. Diese Kompetenzen stellen eine wichtige Grundlage für zukünftige berufliche Tätigkeiten im Bereich der Softwareentwicklung dar. -## 10. Fazit und Ausblick +## Fazit und Ausblick -### 10.1 Zusammenfassung der Arbeit +### Zusammenfassung der Arbeit Ziel dieser Diplomarbeit war die Konzeption und Entwicklung einer webbasierten Alumni-Plattform für den Absolventenverein. Die Plattform soll ehemaligen Studierenden ermöglichen, miteinander in Kontakt zu bleiben, Informationen auszutauschen und an Veranstaltungen des Vereins teilzunehmen. Dadurch wird die Kommunikation zwischen Absolventinnen und Absolventen sowie der Bildungseinrichtung langfristig gestärkt. @@ -856,7 +856,7 @@ Die Entwicklung der Plattform erfolgte nach agilen Prinzipien mithilfe des Scrum Zusammenfassend konnte mit der Diplomarbeit eine funktionale und erweiterbare Plattform entwickelt werden, die eine moderne Grundlage für die digitale Vernetzung von Alumni darstellt. -### 10.2 Mögliche Erweiterungen der Website +### Mögliche Erweiterungen der Website Obwohl bereits viele grundlegende Funktionen implementiert wurden, bietet die Plattform weiteres Potenzial für zukünftige Erweiterungen und Verbesserungen. @@ -878,7 +878,7 @@ erweiterte Such- und Filterfunktionen für Alumni-Profile Durch diese Erweiterungen könnte die Plattform langfristig noch attraktiver und vielseitiger gestaltet werden. -### 10.3 Zukunftspotenzial für den Absolventenverein +### Zukunftspotenzial für den Absolventenverein Die entwickelte Alumni-Plattform bietet dem Absolventenverein eine moderne digitale Infrastruktur zur Verwaltung und Vernetzung seiner Mitglieder. Durch die zentrale Plattform können Informationen, Veranstaltungen und Kontakte effizient organisiert werden. diff --git a/Diplomarbeitsbuch-individueller-teil-Konstantin-Hintermayer.md b/Diplomarbeitsbuch-individueller-teil-Konstantin-Hintermayer.md index 3d54653..2e0b7b1 100644 --- a/Diplomarbeitsbuch-individueller-teil-Konstantin-Hintermayer.md +++ b/Diplomarbeitsbuch-individueller-teil-Konstantin-Hintermayer.md @@ -1,10 +1,10 @@ # Konstantin Hintermayer -## 1. Einleitung des individuellen Teils +## Einleitung des individuellen Teils In diesem Abschnitt wird meine persönliche Aufgabenstellung im Rahmen des Projektes (`Alumnihub`) beschrieben. -### 1.1 Auftrag / persönliche Aufgabenstellungen +### Auftrag / persönliche Aufgabenstellungen Meine Zuständigkeiten und Verantwortlichkeiten: @@ -14,28 +14,28 @@ Meine Zuständigkeiten und Verantwortlichkeiten: - Auswertungen - Schwarzes Brett -### 1.2 Motivation +### Motivation Gegenstand der Diplomarbeit ist die Entwicklung modularer Webanwendungen mit Blazor und Oqtane. Aufbauend auf fundierten Kenntnissen in der Fullstack-Entwicklung (React, Node.js, Golang), welche privat bei diversen Projekten gesammelt worden sind, fokussiert sich die Arbeit auf die Architekturvorteile des .NET-Stacks. Besonders im Fokus stehen die Konsistenz durch statische Typisierung sowie das Zusammenspiel modularer Komponenten in verteilten Systemen. Mein Untersuchungsanliegen: Inwieweit optimiert die Integration von Blazor und dem Oqtane-Framework die Konsistenz und Wartbarkeit modularer Web-Architekturen im Vergleich zu den für mich gewohnten Technologie-Stacks (React/Node.js)? -## 2. Anforderungen an das entwickelte Modul bzw. die Funktionalität +## Anforderungen an das entwickelte Modul bzw. die Funktionalität -### 2.1 Modulanforderungen / funktionale Anforderungen +### Modulanforderungen / funktionale Anforderungen -### 2.2 Infrastrukturanforderungen / nicht‑funktionale Anforderungen +### Infrastrukturanforderungen / nicht‑funktionale Anforderungen - funktionale / nicht‑funktionale Anforderungen - Use Cases -## 3. Technisches Umfeld +## Technisches Umfeld Mein Aufgabenbereich umfasst einerseits die Entwicklung eigener Module, sowie das Bereitstellen des Services. -### 3.1 Auswahlverfahren +### Auswahlverfahren -#### 3.1.1 Entscheidungsfindung CMS +#### Entscheidungsfindung CMS Auch steht die Wahl der Programmiersprache und des CMS an. Nachdem wir im Unterricht fast ausschließlich mit C# entwickelt haben und nicht in eine komplett unbekannte Entwicklungsumgebung abdriften wollten, haben wir uns für die Webentwicklung mit ASP.NET Core 9 (Upgrade im Lauf der Diplomarbeit auf .NET Core 10) und dem CMS Oqtane entschieden. Auch hier gab es einige Kandidaten: @@ -50,7 +50,7 @@ Auch steht die Wahl der Programmiersprache und des CMS an. Nachdem wir im Unterr Insbesondere aufgrund seiner sehr hohen Flexibilität, haben wir uns am Ende für Oqtane entschieden. -#### 3.1.2 Entscheidungsfindung restliche Infrastruktur +#### Entscheidungsfindung restliche Infrastruktur Als Betriebssystem habe ich mich für Linux entschieden, einfach, da ich mit Linux im Serverumfeld die meisten und besten Erfahrungen gemacht habe. @@ -62,7 +62,7 @@ Im Bereich der Datenbanken musste ich mir ein paar Fragen stellen: Es war von Anfang an klar, dass es ein SQL-basiertes System wird, da wir im Team nur mit SQL-basierten Systemen Erfahrungen haben. Außerdem unterstützt unser CMS (Oqtane) nur SQL-basierte Systeme. In der Linuxwelt kommen jetzt nur noch ein paar Datenbankmanagementsysteme in die Auswahl: PostgreSQL, MySQL / MariaDB, SQLite. Da ist die Wahl auf PostgreSQL gefallen. Grund dafür war meine Vorerfahrung mit diesem Datenbankmanagementsystem, welche ich in meinem Nebenjob erlangt habe. -### 3.2 Beschreibung und Architektur von Oqtane +### Beschreibung und Architektur von Oqtane Oqtane ist ein Framework und CMS zur Entwicklung von Webseiten mithilfe von ASP.NET und Blazor. [@oqtane_about] Ein Oqtane-System besteht aus mehreren Komponenten. @@ -70,7 +70,7 @@ In dieser Diplomarbeit fokussieren wir uns hauptsächlich auf `Themes` und `Modu Ein `Module` (Modul) soll neue Funktionalitäten in das CMS hinzufügen und ein `Theme` soll die ganze Gestaltung der Webseite (die Shell) festlegen. [@oqtane_docs_extensions] -#### 3.2.1 Architektur eines Moduls +#### Architektur eines Moduls Ein Modul in Oqtane besteht aus vier Projekten: @@ -84,7 +84,7 @@ Ein Modul in Oqtane besteht aus vier Projekten: - Beim Debug werden die DLLs, PDBs und statischen Assets wie Skripte und Stylesheets der drei anderen Projekte in den bereits gebauten Oqtane.Server `oqtane.framework/oqtane.server/bin/debug/net10.0/...` kopiert. - Beim Release wird ein NuGet-Paket erstellt und unter oqtane.framework/oqtane.server/Packages abgelegt. Dort abgelegte NuGet-Pakete werden beim nächsten Start des Oqtane Servers installiert (Datenbank Migrationen werden gemacht und die Pakete entpackt). -### 3.3 Zusammenspiel der Infrastruktur +### Zusammenspiel der Infrastruktur In diesem Kapitel erkläre ich wie die ausgewählten Komponenten zusammenspielen. Wir verwenden NginX als Reverse Proxy, welcher bei uns die SSL Terminierung macht. Das Zertifikat, welches verwendet wird, wird von Let's Encrypt bereit gestellt und mittels HTTP-Challenges und dem Certbot auf dem Server aktualisiert und verwaltet. Oqtane selber läuft als Systemd-Service im Kestrel Backend. Kestrel ist ein kleiner Webserver, welcher in das ASP.NET Core Framework eingebaut worden ist. Oqtane (bzw. der ASP.NET Core Server "Kestrel") hört auf der Loopback IP und Port 5000. Damit ist Oqtane nur durch NginX erreichbar. PostgreSQL ist die Datenbank in dem System: Sie hört wieder auf der Loopback IP und Port 5432. In der folgenden Grafik ist das System Schematisch dargestellt. @@ -113,9 +113,9 @@ Zusätzlich gab es einen Administrationszugang zu den Servern, welcher über SSH Die VPN basierten Zugänge sind tendenziell schwieriger zu finden und auszunutzen, während die Lösung in der Schule mittels Highport den SSH Service öffentlich erreichbar macht. Durch den `Highport` ist der SSH Service schwieriger zu finden. Zur Authentifizierung mit SSH verwenden wir SSH-Keys, da diese durch ihre komplexität sicherer sind, als Passwörter. -### 3.4 Entwicklung mit ASP.NET +### Entwicklung mit ASP.NET -#### 3.4.1 Blazor [@wikipedia_blazor] +#### Blazor [@wikipedia_blazor] Blazor ist ein kostenloses und quelloffenes Web-Framework, welches es möglich macht Benutzeroberflächen für Web-Browser, basierend auf C# und HTML, zu erstellen. Es wird von Microsoft als teil des ASP.NET Core Frameworks entwickelt. @@ -158,11 +158,11 @@ Razor hat auch eine Reihe an Keywords, wie zum Beispiel (nur Auszugsweise, bzw. - foreach: Für Wiederholungen im Markup - if: Für Verzweigungen im Markup -#### 3.4.2 Kommunikation zwischen Front- und Backend +#### Kommunikation zwischen Front- und Backend Wie Front- und Backend miteinander interagieren hängt hauptsächlich vom Render-Modus ab. Oqtane kann auf verschiedene Arten betrieben werden. Hierbei ist es dem Modulentwickler ziemlich egal, welche Art der Kommunikation (WebSockets, HTTP Long-Polling, REST) verwendet wird. SignalR ist eine Library aus dem ASP.NET Framework, welche es möglich macht, Server zu Client Kommunikation zu betreiben. Oqtane verwendet SignalR im `Interactive Server (SignalR)` Render-Modus. -### 3.5 Dependency Injection +### Dependency Injection Dependency Injection ist ein Entwurfsmuster, bei dem die Abhängigkeiten eines Objekts nicht von diesem selbst erzeugt, sondern von außen „injiziert“ werden. @@ -170,7 +170,7 @@ Wie der Software-Architekt Martin Fowler, der den Begriff im Jahr 2004 maßgebli In den folgenden beiden Kapiteln wird das Dependency Inversion Principle und das Microsoft Dependency Injection Framework genauer vorgestellt. -#### 3.5.1 Dependency Inversion Principle [@ms_dependency_inversion][@logrocket_dependency_inversion] +#### Dependency Inversion Principle [@ms_dependency_inversion][@logrocket_dependency_inversion] Das Dependency-Inversion-Principle (DIP / auf Deutsch: Abhängigkeits-Umkehr-Prinzip) ist eines von den fünf `SOLID` Prinzipien in der Softwareentwicklung. @@ -204,7 +204,7 @@ architecture-beta Das High-Level-Modul ruft lediglich eine Abstraktion eines Low-Level-Moduls auf, welche von einem, oder mehreren Low-Level-Modulen implementiert wurde. Für das High-Level-Modul ist es hier egal, welches Low-Level-Modul die Implementierung bereitstellt. Dadurch erhält man einen viel modulareren Aufbau in der Software. Die einzelnen Module sind auch leichter austauschbar und testbar. Genau diese Modularität macht Dependency Injection möglich. -#### 3.5.2 Microsoft Dependency Injection Framework +#### Microsoft Dependency Injection Framework Dependency Injection ist in .NET genau so wie Konfiguration, Protokollierung und das Optionsmuster ins Framework integriert. [@ms_di_overview] @@ -270,7 +270,7 @@ architecture-beta ``` -### 3.6 Continuous Integration +### Continuous Integration Gitea, das Versionskontrollsystem dieser Diplomarbeit, hat einen Continuous-Integration-System eingebaut. Im Kern ist es baugleich zu den GitHub-Pipelines. Man kann im `.gitea/workflow` Ordner `.yml` Dateien ablegen, welche dann das Verhalten der Workflows definieren. @@ -290,17 +290,17 @@ Anwendungen von Gitea Actions bei dieser Diplomarbeit: - PM Repository: > Zum automatischen Überprüfen der Dokumente, unter anderem, mithilfe von KI, wie zum Beispiel Gemini. -### 3.7 Debian Paket +### Debian Paket TODO -## 4 Projektmanagement & Tools +## Projektmanagement & Tools -### 4.1 Scrum +### Scrum -### 4.2 YouTrack +### YouTrack -### 4.3 Git +### Git Git fungierte im Rahmen dieser Diplomarbeit als zentrales Werkzeug zur Versionskontrolle und Koordination sämtlicher Entwicklungsschritte. Die wichtigste Komponente stellt dabei der Commit dar, welcher als eindeutiger Snapshot des Projektzustands dient und über eine spezifische Commit-SHA (Secure Hash Algorithm) referenziert werden kann. Um eine lückenlose Nachvollziehbarkeit zu gewährleisten, wurde für jeden abgeschlossenen Arbeitsschritt ein eigener Commit erstellt. @@ -318,7 +318,7 @@ Sobald eine Änderung erfolgreich getestet wurde, wird sie durch einen Merge wie Für die Sicherung und Zusammenarbeit wurde im Rahmen dieser Arbeit Remote-Repositories auf einer Gitea Instanz verwendet. Durch die Befehle push und pull wird der lokale Stand mit dem Server synchronisiert. Dies gewährleistet eine konsistente Datenbasis und dient gleichzeitig als kontinuierliches Backup des Projektfortschritts. -### 4.4 Gitea +### Gitea Als schlanke und selbst gehostete Open-Source-Alternative zu Plattformen wie GitHub oder GitLab wurde für die Verwaltung der Repositories Gitea eingesetzt. Hauptgrund für die Benutzung von Gitea war meine bereits aufgesetzte Instanz, welche schon mehrere Jahre in Verwendung war und mit der es im Team auch schon Erfahrungen gab. Gitea bietet neben der reinen Git-Verwaltung essenzielle Werkzeuge für den Software-Lebenszyklus, wie ein integriertes Issue-Tracking, Code-Reviews über Pull-Requests sowie eine Benutzerverwaltung, und unterstützt somit die strukturierte Umsetzung der Diplomarbeit im Team.[@gitea_docs] @@ -346,11 +346,11 @@ Gitea Actions wurden eingesetzt, um CI/CD-Pipelines (Continuous Integration / Co Gitea fungierte zusätzlich als Register für Pakete und Container-Images. Selbst erstellte Artefakte, wie das Debian Paket für die Bereitstellung der Anwendung, wurden direkt in der Gitea-Instanz versioniert gespeichert. Dadurch waren alle notwendigen Komponenten für das Deployment an einem zentralen Ort verfügbar und abrufbar. Gitea selbst unterstützt verschiedenste Pakettypen. Darunter fallen unteranderem NuGet- und Debianpakete. Für beide haben wir in dieser Arbeit verwendung gefunden. [@gitea_docs][@gitea_packages] -### 4.5 Kommunikation +### Kommunikation -## 5 Module +## Module -### 5.1 Admin Modules +### Admin Modules Eine C#-Solution, welche einige Module, welche für den Admineinsatz geschrieben worden sind beinhaltet. Dieses Modul besteht aus 3 Teilmodulen. Einem Modul für den Versand von Rundmails, eines für die Einstellung von der Token Lebenszeit bei Tokens, welche per E-Mail verschickt werden und eines, welches das Reporting-System übernimmt. @@ -419,7 +419,7 @@ Die Implementierung des IReportingComponents stellt nur eine Property (`ReportTy Die Bereitstellung des Moduls geschieht im `AdminModules` Modul. -### 5.2 Event Registration +### Event Registration Dieses Modul ermöglicht es Administratoren und Absolventen, Veranstaltungen zu erstellen, auf der Seite zu veröffentlichen und zu verwalten, während Mitglieder ihre Teilnahme direkt über das Portal bestätigen oder absagen können. Dieses Modul dient der organisatorischen Unterstützung von Absolvententreffen und anderen Vereinsaktivitäten. Dieses Modul wurde gemeinsam mit Adam Gaiswinkler geschrieben, wobei er sich um die Darstellung der Events im Frontend gekümmert hat, während ich mich der Infrastruktur im Hintergrund angenommen habe. @@ -443,7 +443,7 @@ Um die Brücke zwischen dem C#-basierten Blazor-Frontend und der JavaScript-Bibl Durch diese Trennung bleibt die Geschäftslogik im C#-Code, während für die performante und ansprechende Darstellung auf etablierte Web-Technologien zurückgegriffen wird. -### 5.3 Schwarzes Brett +### Schwarzes Brett Das Modul "Schwarzes Brett" dient als digitale Anschlagtafel für den Absolventenverein. Mitglieder können hier Gesuche, Angebote oder allgemeine Informationen veröffentlichen. Es stellt eine zentrale Informationsdrehscheibe dar, die den informellen Austausch innerhalb des Vereins fördern soll. @@ -472,17 +472,17 @@ Ein wichtiges Merkmal des Schwarzen Bretts zur Sicherstellung der Inhaltsqualit Auf der Serverseite folgt das Modul dem etablierten Muster mit einem `BlackBoardRepository` für den effizienten Datenbankzugriff und einem `BlackBoardController` für die API-Bereitstellung. Die Implementierung des Scheduled Jobs als HostedServiceBase ermöglicht eine tiefe Integration in die Oqtane-Infrastruktur bei gleichzeitig geringem Ressourcenverbrauch. -## 6 Learnings +## Learnings -### 6.1 Produktion != Staging +### Produktion != Staging Ein Learning, welches doch relativ schnell aufkam ist im Bereich der IT eigentlich kein unbekanntes. Wir hatten dieses Learning relativ bald, im Frühling 2025, als die ersten Probleme mit dem Deployment von Oqtane aufkamen. Oqtane war zwar in unserer Entwicklungsumgebung sehr einfach zum einrichten gewesen, das Deployment in der Cloud vom Hetzner war jedoch geplagt von Problemen. Im Zeitraum von Mai bis Okober hatten wir keine laufende Produktivumgebung. Dadurch sind wir mit dieser Diplomarbeit auch in [Zeitverzug](#arbeitszeiteinschätzung-zeitverzug) gekommen. Hätte ich mich vor dem Start der Diplomarbeit mit dem Deployment von Oqtane auseinander gesetzt, dann wäre das in [Probleme mit Oqtane](#fehlende-oder-nur-schlechte-dokumentation-von-oqtane) beschriebene Problem früher aufgekommen und der Zeitverzug wäre nicht so groß, oder noch ganz vermeidbar gewesen. -### 6.2 Teamleitung (Motivation / Downsizing) +### Teamleitung (Motivation / Downsizing) Nachdem ich mich von Anfang an volkommen in das Deploymentproblem von Oqtane gestürzt habe, habe ich meine Rolle als Teamleitung etwas schleifen lassen. Dadurch fehlte bei einigen Teammitgliedern initial die Identifikation mit dem Projekt und in weitererfolge auch die Motivation an diesem Projekt mitzuarbeiten. Nachdem im Verlauf des Frühlings und über den Sommer von der hälfte des Teams trotz Besprechungen und Mahnungen keine Beiträge zu dem Projekt kamen, haben Hr. Prof. Gürth und ich uns dazu entschieden uns von 2 Personen vor unterschreiben des Projektantrages zu trennen. Grund dazu war die Angst, die mangelnde Motivation zieht das restliche Team mit hinunter. Wir wollten uns trotz des Downsizings nicht an Funktionalitäten sparen und haben uns für das nächste halbe bis dreiviertel Jahr einen ziemlich strikten Zeitplan vorgenommen. -### 6.3 Arbeitszeiteinschätzung (Zeitverzug) +### Arbeitszeiteinschätzung (Zeitverzug) Ein wesentliches Learning aus dem Projektverlauf war die Diskrepanz zwischen der initialen Planung und dem tatsächlichen Aufwand. Ursprünglich wurde der Zeitaufwand für das Aufsetzen der Infrastruktur und die Einarbeitung in das Oqtane-Framework auf etwa drei Wochen geschätzt. In der Realität nahm dieser Prozess jedoch mehrere Monate in Anspruch. @@ -503,7 +503,7 @@ Um das Projektziel dennoch zu erreichen, wurde der Zeitplan im Herbst 2025 massi > (Jon Bentley. 1985. Programmimg pearls. Commun. ACM 28, 9 (Sept. 1985), 896–901. https://doi.org/10.1145/4284.315122) [@bentley1985programming] > Diese Diplomarbeit liefert weitere Evidenz, dass diese Faustregel stimmt. -### 6.4 Sprints und Meetings (in Zukunft ja asynchron) +### Sprints und Meetings (in Zukunft ja asynchron) Ein zentrales Problem in unserer ursprünglichen Arbeitsweise war die Kopplung von Besprechungsterminen mit festen „Commit-Deadlines“ (dem Ende des aktuellen Sprint zyklusses). Da wir uns einmal pro Woche für sechs Stunden am Stück trafen, entstand ein destruktives Muster: