<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Beiträge von Lukas Gruber - Mobile USTP MKL</title>
	<atom:link href="https://mobile.fhstp.ac.at/author/it231519/feed/" rel="self" type="application/rss+xml" />
	<link>https://mobile.fhstp.ac.at/author/it231519/</link>
	<description>Die &#34;Mobile Forschungsgruppe&#34; der USTP, sie  sammelt hier alles zu den Themen Design, UX und Entwicklung mobiler Applikationen</description>
	<lastBuildDate>Sun, 05 Jan 2025 12:06:59 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://mobile.fhstp.ac.at/wp-content/uploads/2025/03/icon-120x120.webp</url>
	<title>Beiträge von Lukas Gruber - Mobile USTP MKL</title>
	<link>https://mobile.fhstp.ac.at/author/it231519/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Blogartikel &#124; Docusaurus: Dokumentationswebseiten leicht gemacht &#8211; Part I</title>
		<link>https://mobile.fhstp.ac.at/dokumentation/docusaurus-dokumentationswebseiten-leicht-gemacht-part-i/</link>
		
		<dc:creator><![CDATA[Lukas Gruber]]></dc:creator>
		<pubDate>Sun, 05 Jan 2025 12:02:45 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Dokumentation]]></category>
		<category><![CDATA[Webdevelopment]]></category>
		<category><![CDATA[Docusaurus]]></category>
		<category><![CDATA[Markdown]]></category>
		<category><![CDATA[React]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=13340</guid>

					<description><![CDATA[<p>Docusaurus ist ein Markdown basierender Website-Generator, der es ermöglicht einfach und schnell professionelle Dokumentationswebseiten zu generieren.</p>
<p>The post <a href="https://mobile.fhstp.ac.at/dokumentation/docusaurus-dokumentationswebseiten-leicht-gemacht-part-i/">Blogartikel | Docusaurus: Dokumentationswebseiten leicht gemacht &#8211; Part I</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><a href="https://docusaurus.io/">Docusaurus</a> ist ein statischer Website-Generator, der hauptsächlich für die Erstellung von Dokumentationswebseiten verwendent wird. Docusaurus wird von Meta weiterentwickelt und ist unter der MIT-Lizenz veröffentlicht. Daher kann das Tool frei und kostenlos verwendet werden. Die Hauptmerkmale sind:</p>



<ul class="wp-block-list">
<li>Einfachheit: Dokumentation wird in Markdown geschrieben und Docussaurus wandelt sie in HTML-Dateien um.</li>



<li>Reaktivität: Docusaurus verwendet React um interaktive Elemente hinzuzufügen. So können auch spezielle Markdown Files (MDX) React Elemente beinhalten.</li>



<li>Erweiterbar: Durch eine modulare Architektur konnen benutzererstellte Plugins hinzugefügt werden.</li>



<li>Versionierung und Lokalisierung: Eine Versionierung von Dokumentationen sowie mehrsprachige Inhalte werden von Haus aus unterstützt.</li>
</ul>



<p>Inhalte Part I</p>



<nav class="wp-block-table-of-contents"><ol><li><a class="wp-block-table-of-contents__entry" href="https://akirchknopf-21110.php.fhstp.cc/dokumentation/docusaurus-dokumentationswebseiten-leicht-gemacht-part-i/#beispiele">Beispiele</a></li><li><a class="wp-block-table-of-contents__entry" href="https://akirchknopf-21110.php.fhstp.cc/dokumentation/docusaurus-dokumentationswebseiten-leicht-gemacht-part-i/#installieren-und-projekt-anlegen">Installieren und Projekt anlegen</a></li><li><a class="wp-block-table-of-contents__entry" href="https://akirchknopf-21110.php.fhstp.cc/dokumentation/docusaurus-dokumentationswebseiten-leicht-gemacht-part-i/#bereinigen">Bereinigen</a></li><li><a class="wp-block-table-of-contents__entry" href="https://akirchknopf-21110.php.fhstp.cc/dokumentation/docusaurus-dokumentationswebseiten-leicht-gemacht-part-i/#markdown-schreiben">Markdown schreiben</a></li><li><a class="wp-block-table-of-contents__entry" href="https://akirchknopf-21110.php.fhstp.cc/dokumentation/docusaurus-dokumentationswebseiten-leicht-gemacht-part-i/#build-plugins-suchfeld-erstellen">Build &amp; Plugins &#8211; Suchfeld erstellen</a></li><li><a class="wp-block-table-of-contents__entry" href="https://akirchknopf-21110.php.fhstp.cc/dokumentation/docusaurus-dokumentationswebseiten-leicht-gemacht-part-i/#abschluss-part-i">Abschluss Part I</a></li></ol></nav>



<h2 class="wp-block-heading" id="beispiele"><strong>Beispiele</strong></h2>



<p>Viele bekannte Webseiten benutzen Docusaurus, wie z.B. Ionic, Jest oder React. Einen Showcase gibt es auf der Docusaurus Homepage <a href="https://docusaurus.io/showcase">https://docusaurus.io/showcase</a>.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img fetchpriority="high" decoding="async" width="756" height="286" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2025/01/docusaurus_showcase.png" alt="" class="wp-image-13343"/></figure></div>


<h2 class="wp-block-heading" id="installieren-und-projekt-anlegen"><strong>Installieren und Projekt anlegen</strong></h2>



<p>Vorrausgesetzt wird das Node.js und npm installiert sind. In diesem Fall:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
node -v
v22.9.0
</pre></div>


<p>Mithilfe des nachstehenden Kommandos lässt sich das Grundtemplate einrichten.t</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
npx create-docusaurus@latest example-docs classic --typescript
# oder alternativ mit pnpm
pnpm dlx create-docusaurus@latest example-docs classic --typescript
</pre></div>


<p>Damit erhält man die folgende Struktur:</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="276" height="312" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2025/01/docusaurus_folders.png" alt="" class="wp-image-13345"/></figure></div>


<p>Bereitstellen lässt sich die Dokumentation anschließend per „npm start“ für die Entwicklung. In weiterer Folge lässt sich alles an der Seite frei gestalten. So etwa Logos, Farbpalette, Styles, Footer, Header, Links, etc.</p>



<h2 class="wp-block-heading" id="bereinigen"><strong>Bereinigen</strong></h2>



<p>Docusaurus ermöglicht es nicht nur mit Markdown Files Dokumentationen zu erstellen, sondern auch Webseiten mithilfe von React zu integrieren (üblicherweise die Startseite) oder einen Blog (z.B. Versionsänderungen) zu machen.</p>



<p>In unserem Beispiel beschränken wir uns auf die Dokumentationsfeatures und bereinigen dazu das Projekt. Das erfolgt in drei Schritten:</p>



<ol class="wp-block-list">
<li>Löschen des Ordners „blog“</li>



<li>Entfernen der Blog-Referenzen im Docusaurus-Config-File</li>



<li>Anpassen der URL des Dokumentationseinstiegsfiles</li>
</ol>



<figure class="wp-block-video"><video controls src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2025/01/docusaurus_create.mp4"></video></figure>



<h2 class="wp-block-heading" id="markdown-schreiben"><strong>Markdown schreiben</strong></h2>



<p>Im erstellten Template finden sich nun verschiedene Files:</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="131" height="260" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2025/01/docusaurus_docs_folders.png" alt="" class="wp-image-13344"/></figure></div>


<p>„.md“-Files sind herkömmliche Markdown Files. „.mdx“-Files hingegen sind Markdown Files die angereichert sind mit React JSX Funktionalität. Diese Files enthalten die eigentliche Dokumentation. Als generelle Hilfe bei Markdown empfehle ich <a href="https://www.markdownguide.org/">https://www.markdownguide.org/</a>.  Im Header dieser Files lassen sich Optionen treffen, etwa wie der Titel des Dokuments in der Übersicht ist oder die URL. So haben wir vorher im ersten Video dem Intro die URL „/“ gegeben.</p>



<p>In jedem Ordner gibt es ein optionales „_category_.json“-File, welches uns die verwendete Bezeichung für eine Gruppe (= Ordner) von zusammengehörigen Dokumentationsseiten sowie die Position auf der Sidebar verändern lässt.</p>



<p>Wird im Markdown kein Header angegeben und in den Ordnern kein category json File angelegt, so wird standardmäßig der Name des Files bzw. Ordnerns herangezogen.</p>



<p>Außerdem finden sich einige Bilder im img Order. Es ist optional ob Dokumente wie Bilder, PDF, etc. im zugehörigen Ordner angelegt werden oder im static Folder.</p>



<p>Als Beispiel wird eine neues File angelegt, welches unter dem Adresszustatz „/example“ erreicht werden kann, als Titel Beispiel trägt und einige Überschriften sowie anderen Inhalt enhält.</p>



<figure class="wp-block-video"><video controls src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2025/01/docusaurus_md.mp4"></video></figure>



<h2 class="wp-block-heading" id="build-plugins-suchfeld-erstellen"><strong>Build &amp; Plugins &#8211; Suchfeld erstellen</strong></h2>



<p>Es gibt unterschiedliche Varianten ein Suchfeld zu erstellen. Auf Webseiten mit OpenSource Bezug empfiehlt sich Algolia. Wir haben aber nur ein privates Projekt und installieren uns dazu ein anderes Plugin via:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
npm i @easyops-cn/docusaurus-search-local
# oder alternativ wieder via pnpm
pnpm i @easyops-cn/docusaurus-search-local
</pre></div>


<p>Die Suche ist erst möglich nach einem Build. Daher adden wir das Plugin und führen die folgenden Schritte aus:</p>



<ol class="wp-block-list">
<li>Hinzufügen des Plugins/Themes im Config File</li>



<li>Docusaurus Build</li>



<li>Docusaurus Serve</li>
</ol>



<figure class="wp-block-video"><video controls src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2025/01/docusaurus_search.mp4"></video></figure>



<p>Den Fehler ingnorieren wir an dieser Stelle einmal, da er nicht mehr auftreten sollte, wenn alle Links korrekt sind.</p>



<h2 class="wp-block-heading" id="abschluss-part-i"><strong>Abschluss Part I</strong></h2>



<p>Mit Docusaurus lassen sich echt einfach und schnell professionelle Dokumentationswebseiten erstellen. In diesem ersten Teil wurde ein Grundprojekt angelegt, dieses bereinigt auf die Dokumentationsfeatures, ein Markdown File erstellt und eine Erweiterung in Form eines Suchfeldes hinzugefügt. Eventuell gibt es in weiteren Teilen: Lokalisierung; Versionierung und Bereitstellen via GitHub Pages.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>* Titelbild von <a href="https://repository-images.githubusercontent.com/94911145/de889380-2905-11eb-9e9b-9332f0537e38 ">https://repository-images.githubusercontent.com/94911145/de889380-2905-11eb-9e9b-9332f0537e38 </a></p>



<p></p>
<p>The post <a href="https://mobile.fhstp.ac.at/dokumentation/docusaurus-dokumentationswebseiten-leicht-gemacht-part-i/">Blogartikel | Docusaurus: Dokumentationswebseiten leicht gemacht &#8211; Part I</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		<enclosure url="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2025/01/docusaurus_create.mp4" length="381218567" type="video/mp4" />
<enclosure url="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2025/01/docusaurus_md.mp4" length="393917081" type="video/mp4" />
<enclosure url="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2025/01/docusaurus_search.mp4" length="486839666" type="video/mp4" />

			</item>
		<item>
		<title>Projekt &#124; FF Mannschaftsbuch</title>
		<link>https://mobile.fhstp.ac.at/studium/studium-projekte/projekt-ff-mannschaftsbuch/</link>
		
		<dc:creator><![CDATA[Lukas Gruber]]></dc:creator>
		<pubDate>Mon, 30 Dec 2024 14:04:22 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Projekte]]></category>
		<category><![CDATA[Studium]]></category>
		<category><![CDATA[Webdevelopment]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Blazor]]></category>
		<category><![CDATA[Blazor WASM]]></category>
		<category><![CDATA[Print-to-mobile]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=13320</guid>

					<description><![CDATA[<p>Die Niederösterreichischen Feuerwehren protokollieren sämtliche ihrer Aktivitäten. Häufig passiert dies in Form eines Mannschaftsbuches. Ziel dieses Projektes war es einerseits eine digitalisierte Form der Protokollierung zu schaffen und andererseits Erfahrung mit C#.NET zu sammeln.</p>
<p>The post <a href="https://mobile.fhstp.ac.at/studium/studium-projekte/projekt-ff-mannschaftsbuch/">Projekt | FF Mannschaftsbuch</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Die Niederösterreichischen Feuerwehren protokollieren sämtliche ihrer Aktivitäten. Häufig passiert dies in Form eines Mannschaftsbuches. Ziel dieses Projektes war es einerseits eine digitalisierte Form der Protokollierung zu schaffen und andererseits Erfahrung mit C#.NET zu sammeln.</p>



<ol class="wp-block-list">
<li><a class="wp-block-table-of-contents__entry" href="https://akirchknopf-21110.php.fhstp.cc/allgemein/projekt-ff-mannschaftsbuch/#problemstellung-zielsetzung">Problemstellung &amp; Zielsetzung</a></li>



<li><a class="wp-block-table-of-contents__entry" href="https://akirchknopf-21110.php.fhstp.cc/allgemein/projekt-ff-mannschaftsbuch/#funktionsubersicht">Funktionsübersicht</a></li>



<li><a class="wp-block-table-of-contents__entry" href="https://akirchknopf-21110.php.fhstp.cc/allgemein/projekt-ff-mannschaftsbuch/#technologiestack-net-blazor-wasm">Technologiestack | .NET &amp; Blazor WASM</a></li>



<li><a class="wp-block-table-of-contents__entry" href="https://akirchknopf-21110.php.fhstp.cc/allgemein/projekt-ff-mannschaftsbuch/#mogliche-weiterentwicklung">Mögliche Weiterentwicklung</a></li>



<li><a class="wp-block-table-of-contents__entry" href="https://akirchknopf-21110.php.fhstp.cc/allgemein/projekt-ff-mannschaftsbuch/#schlussworte">Schlussworte</a></li>
</ol>



<h2 class="wp-block-heading" id="problemstellung-zielsetzung">Problemstellung &amp; Zielsetzung</h2>



<p>Bei den niederösterreichischen Feuerwehren müssen sämtliche durchgeführten Tätigkeiten protokolliert werden. Manche Feuerwehren verwenden dazu ein leeres Notizbuch (=Mannschaftsbuch), das im Feuerwehrhaus aufliegt und in dem alle einschreiben können. </p>



<p>Ein Berechtigter, wie der Verwalter oder Kommandant nimmt sich dieses Buch und trägt die Daten ins FDISK (Feuerwehrdateninformationssystem und Katastrophenschutzmanagement) ein. Dabei wird erfasst: das Datum, die zeitliche Dauer, die Anwesenden, der Protokollierende sowie eine Beschreibung der Tätigkeit. Problem dabei ist einerseits die schlechte Lesbarkeit mancher Einträge und andererseits das es manchmal vergessen wird und Einträge dann an anderer Stelle später wieder auftauchen.</p>



<p>Die Idee hinter diesem Projekt ist es eine Anwendung zu entwickeln mit der die Tätigkeiten digital erfasst werden können. Zum Beispiel könnte auf der Innenseite der Haustüre ein QR-Code mit einem Hinweis auf den Tätigkeitsnachweis hängen. Durch Einscannen, gelangt man zur Webseite, über die der Eintrag am Smartphone erledigt werden kann (=Print-To-Mobile). Annahme dabei ist das sich derjenige im richtigen WLAN befindet. Da das Eintragen ins FDISK eine Notwendigkeit darstellt, soll dies dem Verwalter zumindest vereinfacht werden, indem dieser eine Art Abarbeitungsliste erhält. Er kann Einträge damit als eingetragen markieren, sie nach Datum sortieren und sie auch editieren.</p>



<p>Weiters ist es ein Hauptziel sich näher mit C#.NET auseinanderzusetzen, da hier keinerlei Vorwissen besteht, jedoch C# nach wie vor in vielen Unternehmen gesucht wird. Daher ist damit zu rechnen das insgesamt weniger Features umgesetzt werden können als in einem Projekt mit bekanntem Technologiestack.</p>



<h2 class="wp-block-heading" id="funktionsubersicht">Resultate bzw. Funktionsübersicht</h2>



<p>Resultat ist eine einfache Webanwendung mit Serveranbindung die auf einem Raspberry Pi in Docker Containern bereitgestellt wird. </p>



<div class="wp-block-media-text is-stacked-on-mobile" style="grid-template-columns:29% auto"><figure class="wp-block-media-text__media"><video controls src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/12/fflog_user.mp4"></video></figure><div class="wp-block-media-text__content">
<p>Nach dem Aufruf der Root-URL (= Einscannen des QR-Codes) kann nun ein Benutzer ausgewählt werden, welcher zur Signatur der erstellten Aktivitäten dient. Ist der gewünschte Benutzer noch nicht vorhanden kann direkt ein neuer erstellt werden, in dem der zu verwendende Name ins Suchfeld eingegeben wird. Anschließend bleibt der ausgewählte Benutzer durch den LocalStorage des Browsers gespeichert.  </p>



<p>Danach gelangt man zur Erstellung einer neuen Aktivität. Hier gibt man eine Kurzbeschreibung in Form des Titels ein sowie das Start und Ende Datum. Durch drücken auf den &#8220;Beschreibung&#8221;-Button kann man eine längere Beschreibung eingeben und durch das Drücken des Button &#8220;Anwesende&#8221; kann man die beteiligten Personen auswählen. Wie bei der Benutzerauswahl vorhin können auch an dieser Stelle direkt neue Benutzer, anhand der Eingabe im Suchfeld, erstellt werden.</p>
</div></div>



<p>Klickt man auf das Menü kann zur Übersichtsseite für den Verwalter gesprungen oder der ausgewählte Benutzer gewechselt werden. Auf der Übersichtsseite werden alle erfassten Aktivitäten gelistet. Diese können hier bestätigt (= Eingetragen ins FDISK), verändert oder gelöscht werden. Durch klicken auf das Menü können Filter wie Datumsspanne, Suchfeld oder &#8220;bestätigte Einträge anzeigen&#8221; gesetzt werden.</p>



<h2 class="wp-block-heading" id="technologiestack-net-blazor-wasm">Technologiestack | .NET &amp; Blazor WASM</h2>



<p>Am Beginn des Projektes stand die Anfertigung eines Low Fidelty Mockups sowie eines ER-Datenbank-Diagramms. Im Anschluss wurde die Anwendung als Webapplikation umgesetzt. Dazu wurde frontendseitig auf Blazor Webassembly gesetzt. Diese Lösung von Microsoft ermöglicht es den Code auch am Frontend in C# zu schreiben, in dem dieser anschließend, mithilfe von Webassembly, dem Browser zur Verfügung gestellt wird. Zudem lassen sich mit .NET Maui solche Blazor Anwendungen relativ einfach in native bzw. hybride Applikationen umwandeln. Backendseitig wurde auf eine .NET Core REST API mit dem EF Framework Core und einer MariaDB Datenbank gesetzt. Als IDE kam Rider von Jetbrains zum Einsatz, welches in einer Studentenlizenz kostenlos bezogen werden kann. </p>



<p>Anahme war das die Applikation auf einem Raspberry Pi im Feuerwehrhaus bereitgestellt werden kann. Dazu wurde ein Docker Compose File erstellt, mit dem die Services, mit den richtigen Abhängigkeiten, gestartet werden können. Aufgrund der abweichenden Systemarchitektur zwischen Entwicklungsrechner und Raspberry (amd64 zu arm64) wurde ein Multiarchitecture Build mit docker buildx durchgeführt und das Container Image auf DockerHub zur Verfügung gestellt.  </p>



<p><strong>Toolset:</strong></p>



<ul class="wp-block-list">
<li>IDE: JetBrains Toolbox (Rider, DataGrip)</li>



<li>Frontend: .NET Blazor WebAssembly</li>



<li>Backend: .NET Core mit EF Framework Core</li>



<li>Datenbank: MariaDB</li>



<li>DevOps: GitLab</li>
</ul>



<p><strong>Bilder aus der Entwicklung:</strong></p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1540" height="800" data-id="13328" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/12/fflog_mockup-1540x800.png" alt="" class="wp-image-13328" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2024/12/fflog_mockup-1540x800.png 1540w, https://mobile.fhstp.ac.at/wp-content/uploads/2024/12/fflog_mockup-770x400.png 770w" sizes="auto, (max-width: 1540px) 100vw, 1540px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="447" height="273" data-id="13325" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/12/fflog_er.png" alt="" class="wp-image-13325"/></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1540" height="800" data-id="13329" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/12/fflog_docker-1540x800.jpg" alt="" class="wp-image-13329" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2024/12/fflog_docker-1540x800.jpg 1540w, https://mobile.fhstp.ac.at/wp-content/uploads/2024/12/fflog_docker-770x400.jpg 770w" sizes="auto, (max-width: 1540px) 100vw, 1540px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1540" height="800" data-id="13330" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/12/fflog_ide-1540x800.jpg" alt="" class="wp-image-13330" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2024/12/fflog_ide-1540x800.jpg 1540w, https://mobile.fhstp.ac.at/wp-content/uploads/2024/12/fflog_ide-770x400.jpg 770w" sizes="auto, (max-width: 1540px) 100vw, 1540px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1540" height="800" data-id="13326" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/12/fflog_dockerhub-1540x800.png" alt="" class="wp-image-13326" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2024/12/fflog_dockerhub-1540x800.png 1540w, https://mobile.fhstp.ac.at/wp-content/uploads/2024/12/fflog_dockerhub-770x400.png 770w" sizes="auto, (max-width: 1540px) 100vw, 1540px" /></figure>
</figure>



<div style="height:21px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="mogliche-weiterentwicklung">Mögliche Weiterentwicklung</h2>



<p>Eine mögliche Weiterentwicklung ist die Implemtierung eines Benutzermanagements mitsamt Rechteverwaltung und Login-Funktionalität. Weiters ist ein PDF-Export der Tätigkeiten eine sinnvolle Erweiterung zur Dokumentation und Archivierung der Tätigkeitserfassung. Auch die Möglichkeit den Beschreibungen Bilder anzuhängen wäre eine Option. Wichtig wäre auch noch eine automatisierte Backupfunktionalität der Datenbank.</p>



<h2 class="wp-block-heading" id="schlussworte">Schlussworte</h2>



<p>Mein persönliches Ziel war es mich näher mit den Technologien bzw. Tools und Frameworks rund um .NET und C# auseinanderzusetzen. Dieses Ziel wurde erreicht, wenngleich zu einer marktreifen Applikation noch viel Inhalt fehlt, wie etwa Testing Mechanismen, Datenbankmigrationen etc. Würde mich wer fragen ob  ich ein neues Projekt in Angular und Nest.js aufsetzen würde oder mit .NET und Blazor WASM dann wäre meine Antwort ganz klar ersteres, da hier doch einiges gefühlt einfach leichter und verständlicher zu implementieren ist sowie die Entwicklung schneller abläuft.</p>



<p></p>
<p>The post <a href="https://mobile.fhstp.ac.at/studium/studium-projekte/projekt-ff-mannschaftsbuch/">Projekt | FF Mannschaftsbuch</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		<enclosure url="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/12/fflog_user.mp4" length="38280059" type="video/mp4" />

			</item>
		<item>
		<title>Blogartikel &#124; Web3 – Das republikanische Modell des Internets?</title>
		<link>https://mobile.fhstp.ac.at/development/webdevelopment/web3-das-republikanische-modell-des-internets/</link>
		
		<dc:creator><![CDATA[Lukas Gruber]]></dc:creator>
		<pubDate>Wed, 06 Nov 2024 11:10:03 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Webdevelopment]]></category>
		<category><![CDATA[blockchain]]></category>
		<category><![CDATA[dApp]]></category>
		<category><![CDATA[Web3]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=13108</guid>

					<description><![CDATA[<p>Die Republikaner stehen für weniger Regulierung, mehr Freiheit und Selbstverantwortung des Individuums. Im Kontext des World Wide Webs werden eben diese Prinzipien oft mit dem Begriff des Web3 verbunden. Doch wofür steht das Web3 überhaupt?</p>
<p>The post <a href="https://mobile.fhstp.ac.at/development/webdevelopment/web3-das-republikanische-modell-des-internets/">Blogartikel | Web3 – Das republikanische Modell des Internets?</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Die Republikaner haben einmal mehr den Wahlsieg in den USA errungen und Donald Trump in das Präsidentenamt gehievt. Im Gegensatz zu den Demokraten steht die Partei einerseits für weniger Regulierung sowie andererseits für mehr Freiheit und Selbstverantwortung des Individuums. Im Kontext des World Wide Webs werden eben diese Prinzipien oft mit dem Begriff des Web3 verbunden. Doch wofür steht das Web3 überhaupt?</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="1920" height="1080" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/11/image-1-1.jpg" alt="" class="wp-image-13113" style="width:516px;height:auto" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2024/11/image-1-1.jpg 1920w, https://mobile.fhstp.ac.at/wp-content/uploads/2024/11/image-1-1-1536x864.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></figure></div>


<p class="has-text-align-center">Abbildung: Demokraten und Republikaner im Blickfeld der Freiheitsstatue <a href="https://www.vn.at/politik/2022/07/28/usa-ex-republikaner-und-demokraten-gruenden-neue-partei.vn">[1]</a>  </p>



<h3 class="wp-block-heading"><strong>Grundgedanke</strong> <strong>hinter dem Web3</strong></h3>



<p>Grundgedanke hinter dem Web3 ist es ein offeneres und gerechteres Internet zu schaffen. Das Web3 zielt darauf ab, den Nutzern mehr Kontrolle über ihre Daten und digitalen Vermögenswerte zu geben und dies zugleich in einem sicheren und transparenten Internet. Indem die Macht und der Einfluss dezentralisiert werden, wird es kleineren Akteure und Einzelpersonen ermöglicht eine größere Rolle zu spielen, ohne von zentralen Instanzen abhängig zu sein.</p>



<p>Teil dieser Idee ist es unter anderem den Einfluss von großen Technologiekonzernen wie Microsoft, Google oder Meta zurückzudrängen. Diese nutzen ihre Machtstellung aus, um Mitbewerber aus dem Markt zu drängen und weiter zu wachsen.</p>



<h3 class="wp-block-heading"><strong>Die Evolution des Webs</strong></h3>



<p>Am 30. April 1993 startete das CERN die erste Website der Welt <a href="https://home.cern/science/computing/birth-web#:~:text=The%20first%20website%20at%20CERN,software%20in%20the%20public%20domain">[2]</a>. Seitdem hat sich das World Wide Web in den letzten 30 Jahren von einfachen, statischen Seiten (Web1) hin zu interaktiven Seiten und sozialen Medien (Web2) entwickelt <a href="https://ieeexplore.ieee.org/document/10273397">[3]</a>. Web3 führt das Konzept des Eigentums ein und schafft ein „Lesen-Schreiben-Besitzen“-Modell. Manche schmieden schon Pläne für das Web 4.0. Die EU-Kommission etwa hat eine Strategie für Web4 als Teil ihrer Forschung zu virtuellen Welten und den Aussichten der EU-Wirtschaft über 2030 hinaus verabschiedet <a href="https://germany.representation.ec.europa.eu/news/web-40-und-virtuelle-welten-kommission-stellt-eu-strategie-vor-2023-07-11_de">[4]</a>. Das „Symbiotische Web“ wird digitale und reale Umgebungen integrieren und die Mensch-Maschine-Interaktion verbessern.</p>



<p>Web3 und insbesondere Web4 befinden sich jedoch in einer laufenden Entwicklungsphase. Sie stellen momentan in Wahrheit ein unscharfes Konzept dar, denen keine exakte Definition zugrunde liegt und damit eher als Leitvisionen zu verstehen sind.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="1600" height="1473" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/11/image-1.jpg" alt="" class="wp-image-13112" style="width:483px;height:auto" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2024/11/image-1.jpg 1600w, https://mobile.fhstp.ac.at/wp-content/uploads/2024/11/image-1-1536x1414.jpg 1536w" sizes="auto, (max-width: 1600px) 100vw, 1600px" /></figure></div>


<p class="has-text-align-center">Abbildung: Evolution des Webs <a href="https://www.ministryoftesting.com/articles/6b425540">[5]</a></p>



<h3 class="wp-block-heading"><strong>Funktionsweisen des Web3</strong></h3>



<p>Web3 funktioniert grundlegend durch die Nutzung von Blockchain-Technologie und dezentralen Netzwerken, um ein benutzerzentriertes Internet zu schaffen <a href="https://www.krypto-magazin.de/web3-alles-was-sie-wissen-muessen/">[6]</a>. Hier sind die Hauptkomponenten und Funktionsweisen von Web3:</p>



<ol start="1" class="wp-block-list">
<li><strong>Dezentralisierung</strong>: Anstatt Daten auf zentralen Servern zu speichern, werden sie über ein Netzwerk von Computern verteilt. Dies reduziert die Abhängigkeit von zentralen Instanzen und erhöht die Sicherheit.</li>



<li><strong>Blockchain</strong>: Diese Dezentralisierung wird durch eine Blockchain ermöglicht. Es gibt verschiedenste Blockchains, wie z.B. Ethereum und IoTeX, welche zumeist einen bestimmten Anwendungszweck verfolgen. Sie bestehen aus verteilten Ledgern, welche Transaktionen in Blöcken speichern. Jede Transaktion wird von einem Netzwerk von Computern verifiziert, was Manipulationen nahezu unmöglich macht.</li>



<li><strong>Smart Contracts</strong>: Dies sind selbstausführende Verträge, bei denen die Bedingungen der Vereinbarung direkt in Code geschrieben sind. Dieser Code ist wiederum auf der Blockchain selbst bereitgestellt. Sie ermöglichen automatisierte und vertrauenslose Transaktionen.</li>



<li><strong>Kryptowährungen</strong>: Ein integraler Bestandteil des Web3 sind Kryptowährungen wie Bitcoin oder Ethereum, welche für Transaktionen verwendet werden. Diese digitalen Währungen ermöglichen es Nutzern, Werte ohne Zwischenhändler (z.B. Banken) zu übertragen.</li>



<li><strong>Wallets</strong>: Nutzer verwenden digitale Wallets, um ihre Kryptowährungen und digitalen Vermögenswerte zu speichern und zu verwalten. Diese Wallets bieten auch Zugang zu verschiedenen Web3-Anwendungen.</li>



<li><strong>DApps</strong>: Dezentralisierte Applikationen werden wie herkömmliche Web2 Anwendungen mit HTML, CSS und JavaScript erstellt. Als Backend fungiert jedoch der auf der Blockchain codierte Smart Contract. Wallets und eigene Schnittstellenbibliotheken werden für diese Anbindung genutzt.</li>
</ol>



<h3 class="wp-block-heading"><strong>Beispielanwendung einer dApp</strong></h3>



<p>In der einwöchigen Summer School wurde eine dApp für das Wetten bei EM-Endrunden erstellt, welche hier eingesehen werden kann: <a href="https://akirchknopf-21110.php.fhstp.cc/allgemein/workshopergebnis-smart-contracts-token-creation-with-erc20/">https://akirchknopf-21110.php.fhstp.cc/allgemein/workshopergebnis-smart-contracts-token-creation-with-erc20/</a>.</p>



<h3 class="wp-block-heading"><strong>Kritik</strong></h3>



<p>Das Web3 muss eine Menge Kritik über sich ergehen lassen <a href="https://de.wikipedia.org/wiki/Web3">[7]</a>. Manche sehen es überhaupt nur als eine von Risikokapitalgeber wie Andreessen Horowitz finanzierte Marketingkampagne. Andere bezweifeln die Durchsetzbarkeit aufgrund mangelhafter Möglichkeiten zur Regulierung, wodurch Cyberkriminalität, Cyber-Mobbing, Hassrede und die Verbreitung von Bildern von Kindesmissbrauch zusätzlichen Raum zur Entfaltung bekommen würden. Wieder andere befürchten eine dem Ansatz entgegengesetzte stärkere Zentralisierung des Webs. Schlussendlich sind auch im Web3 nicht alle Komponenten dezentralisiert. Etwa werden die Programmierschnittstellen für Blockchain-Anwendungen im Moment hauptsächlich von den beiden Unternehmen Alchemy und Infra kontrolliert.</p>



<h3 class="wp-block-heading">Fazit</h3>



<p>Schlussendlich wird es nur die Zeit zeigen in welche Richtung sich das Internet entwickelt. Der Kritik zum Trotze wird das Web3 weiter erforscht. Womöglich sind die Möglichkeiten, die es bietet, noch gar nicht richtig erkannt. Wie Anton Zeilinger sagte – ein Österreichischer Quantenphysiker – “I think there is a need for something completely new. Something that is too different, too unexpected, to be accepted as yet.“</p>



<p></p>
<p>The post <a href="https://mobile.fhstp.ac.at/development/webdevelopment/web3-das-republikanische-modell-des-internets/">Blogartikel | Web3 – Das republikanische Modell des Internets?</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>TFG &#124; Equipment-Monitor</title>
		<link>https://mobile.fhstp.ac.at/allgemein/tfg-equipment-monitor/</link>
		
		<dc:creator><![CDATA[Lukas Gruber]]></dc:creator>
		<pubDate>Mon, 08 Jul 2024 18:19:59 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Projekte]]></category>
		<category><![CDATA[Studium]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=12336</guid>

					<description><![CDATA[<p>Erstellung einer Anwendung zur Verwaltung von Equipment im Rahmen der Lehrveranstaltung Tun-Forschen-Gründen.</p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/tfg-equipment-monitor/">TFG | Equipment-Monitor</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Im Rahmen der Lehrveranstaltung &#8220;Tun-Forschen-Gründen&#8221; werden durch die Studierenden der Studienabteilung &#8220;Medien und digitale Technologien&#8221; Aufträge ausgeschrieben. Für diese Aufträge kann man sich anschließend bewerben. Anschließend liegt es in der Verantwortung der Studierenden einerseits als Auftraggeber die Ausführung zu überwachen und andererseits als Auftragnehmer diesen auszuführen.</p>



<p>Konkret lautete der gewählte Arbeitsauftrag in Kooperation mit dem Projektteam aus der Masterklasse Industrie 4.0 an deren Semesterprojekt &#8220;Equipment Monitoring&#8221; zu arbeiten. Der Projektauftraggeber arbeitet neben dem Studium bei der Doka. Mit dem Semesterprojekt soll eine Lösung für das Verwalten von Ausrüstungsteilen im Unternehmen geschaffen werden. Im Detail ging es um die Gestaltung und Implementierung einer Listenansicht der Ausrüstung inklusive Updaten, Löschen und Hinzufügen von Artikeln. Zusätzlich sollten die Ausrüstungen mit diversen Sensoren verknüpft werden können, die etwa die aktuelle Temperatur, Luftfeuchtigkeit, etc. messen.</p>



<h2 class="wp-block-heading">Vorgangsweise</h2>



<p>Im Rahmen des Projektes wurde alle zwei Wochen ein Meeting mit dem Projektteam abgehalten. In diesem wurde jeweils der aktuelle Fortschritt präsentiert und anschließend wurden die weiteren Schritte besprochen. Initialisierend wurde ein Mockup erstellt, um die zu erstellenden Inhalte abzuklären.</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-full is-style-default"><img loading="lazy" decoding="async" width="1475" height="927" data-id="12346" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/05/tfg_it231519_-6.png" alt="" class="wp-image-12346"/></figure>
</figure>



<h2 class="wp-block-heading">Technologieeinsatz</h2>



<p>Im Hintergrund befindet sich eine SQL-Datenbank die von der Doka auf Microsoft Azure gehostet ist. Als Backendtechnologie wird Node.js mit dem Nest.js Framework eingesetzt. Frontendseitig basiert die Lösung auf Next.js mit React. Zusätzlich wird die Komponentenbibliothek Mui und für das Styling Tailwind verwendet. Die Wahl dieses Technologiesets geschah auf Wunsch des Auftraggebers, da sich dessen Projektteam bereits mit den dafür erforderlichen Themen auseinandergesetzt hatte.</p>



<h2 class="wp-block-heading">Ergebnis</h2>



<p>Die angelegte Listenansicht ermöglicht es nun alle Gegenstände einzusehen. Über einen Aktionsbutton kann schnell das Prüfdatum gesetzt, ein Element gelöscht oder zur Detail bzw. Bearbeitenseite gesprungen werden. Die Tabelle bietet nützliche Funktionen zum Filtern sowie Sortieren der Einträge. Zudem kann ein Eintrag ausgeklappt werden um die Details anzusehen. Es folgen diverse Screenshots der erstellten Inhalte. Weiters wurde auf die Verwendbarkeit der Anwendung auf mobilen Geräten bzw. kleineren Bildschirmen geachtet.</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="496" height="1065" data-id="12361" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/06/TFG_it231519_7.png" alt="" class="wp-image-12361"/></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="492" height="1076" data-id="12363" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/06/TFG_it231519_2.jpg" alt="" class="wp-image-12363"/></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="492" height="1072" data-id="12362" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/06/TFG_it231519_5-1.png" alt="" class="wp-image-12362"/></figure>
</figure>



<figure class="wp-block-gallery aligncenter has-nested-images columns-2 wp-block-gallery-4 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="2558" height="1196" data-id="12343" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/05/tfg_it231519_-0.jpg" alt="" class="wp-image-12343" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2024/05/tfg_it231519_-0.jpg 2558w, https://mobile.fhstp.ac.at/wp-content/uploads/2024/05/tfg_it231519_-0-1536x718.jpg 1536w, https://mobile.fhstp.ac.at/wp-content/uploads/2024/05/tfg_it231519_-0-2048x958.jpg 2048w" sizes="auto, (max-width: 2558px) 100vw, 2558px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="2560" height="1195" data-id="12341" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/05/tfg_it231519_-1.jpg" alt="" class="wp-image-12341" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2024/05/tfg_it231519_-1.jpg 2560w, https://mobile.fhstp.ac.at/wp-content/uploads/2024/05/tfg_it231519_-1-1536x717.jpg 1536w, https://mobile.fhstp.ac.at/wp-content/uploads/2024/05/tfg_it231519_-1-2048x956.jpg 2048w" sizes="auto, (max-width: 2560px) 100vw, 2560px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="2183" height="1196" data-id="12357" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/06/TFG_it231519_1.jpg" alt="" class="wp-image-12357" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2024/06/TFG_it231519_1.jpg 2183w, https://mobile.fhstp.ac.at/wp-content/uploads/2024/06/TFG_it231519_1-1536x842.jpg 1536w, https://mobile.fhstp.ac.at/wp-content/uploads/2024/06/TFG_it231519_1-2048x1122.jpg 2048w" sizes="auto, (max-width: 2183px) 100vw, 2183px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="2181" height="1193" data-id="12360" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/06/TFG_it231519_6.png" alt="" class="wp-image-12360" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2024/06/TFG_it231519_6.png 2181w, https://mobile.fhstp.ac.at/wp-content/uploads/2024/06/TFG_it231519_6-1536x840.png 1536w, https://mobile.fhstp.ac.at/wp-content/uploads/2024/06/TFG_it231519_6-2048x1120.png 2048w" sizes="auto, (max-width: 2181px) 100vw, 2181px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="2558" height="1198" data-id="12340" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/05/tfg_it231519_-3.jpg" alt="" class="wp-image-12340" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2024/05/tfg_it231519_-3.jpg 2558w, https://mobile.fhstp.ac.at/wp-content/uploads/2024/05/tfg_it231519_-3-1536x719.jpg 1536w, https://mobile.fhstp.ac.at/wp-content/uploads/2024/05/tfg_it231519_-3-2048x959.jpg 2048w" sizes="auto, (max-width: 2558px) 100vw, 2558px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="2560" height="1183" data-id="12344" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/05/tfg_it231519_-5.jpg" alt="" class="wp-image-12344" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2024/05/tfg_it231519_-5.jpg 2560w, https://mobile.fhstp.ac.at/wp-content/uploads/2024/05/tfg_it231519_-5-1536x710.jpg 1536w, https://mobile.fhstp.ac.at/wp-content/uploads/2024/05/tfg_it231519_-5-2048x946.jpg 2048w" sizes="auto, (max-width: 2560px) 100vw, 2560px" /></figure>
</figure>



<h2 class="wp-block-heading">Schlussworte</h2>



<p>Insgesamt hat eine angenehme und wertschätzende Kommunikation zwischen Auftraggeber und Auftragnehmer stattgefunden. Für mich persönlich war React die größte Neuerung und zugleich Herausforderung in diesem Projekt, da ich noch nie damit gearbeitet habe und ansonsten das Angular-Framework bevorzuge. </p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/tfg-equipment-monitor/">TFG | Equipment-Monitor</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Projekt &#124; Odoo-Zeiterfassung</title>
		<link>https://mobile.fhstp.ac.at/studium/studium-projekte/projekt-odoo-zeiterfassung/</link>
		
		<dc:creator><![CDATA[Lukas Gruber]]></dc:creator>
		<pubDate>Mon, 27 May 2024 07:37:07 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Projekte]]></category>
		<category><![CDATA[Studium]]></category>
		<category><![CDATA[Angular]]></category>
		<category><![CDATA[NestJs]]></category>
		<category><![CDATA[Odoo]]></category>
		<category><![CDATA[PNPM]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=12216</guid>

					<description><![CDATA[<p>Idee dieses Projektes ist die Entwicklung eines Zeiterfassungs-/Stempelsystems für Unternehmensmitarbeiter, dass mit den in Odoo integrierten Modulen verknüpft ist bzw. auf die zugrundeliegene Datenbank aufbaut.</p>
<p>The post <a href="https://mobile.fhstp.ac.at/studium/studium-projekte/projekt-odoo-zeiterfassung/">Projekt | Odoo-Zeiterfassung</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Idee dieses Projektes ist die Entwicklung eines Zeiterfassungs-/Stempelsystems für Unternehmensmitarbeiter, dass mit den in Odoo integrierten Modulen verknüpft ist bzw. auf die zugrundeliegene Datenbank aufbaut. Dies ist ein Ein-Personen-Projekt.</p>



<div style="height:13px" aria-hidden="true" class="wp-block-spacer"></div>



<nav class="wp-block-table-of-contents"><ol><li><a class="wp-block-table-of-contents__entry" href="https://akirchknopf-21110.php.fhstp.cc/studium/studium-projekte/projekt-odoo-zeiterfassung/#odoo-erp-system">ODOO ERP-System</a><ol><li><a class="wp-block-table-of-contents__entry" href="https://akirchknopf-21110.php.fhstp.cc/studium/studium-projekte/projekt-odoo-zeiterfassung/#beweggrunde-fur-das-projekt">Beweggründe für das Projekt</a></li></ol></li><li><a class="wp-block-table-of-contents__entry" href="https://akirchknopf-21110.php.fhstp.cc/studium/studium-projekte/projekt-odoo-zeiterfassung/#odoo-erp-system">Funktionsübersicht</a></li><li><a class="wp-block-table-of-contents__entry" href="https://akirchknopf-21110.php.fhstp.cc/studium/studium-projekte/projekt-odoo-zeiterfassung/#odoo-erp-system">Technologiestack</a></li><li><a class="wp-block-table-of-contents__entry" href="https://akirchknopf-21110.php.fhstp.cc/studium/studium-projekte/projekt-odoo-zeiterfassung/#odoo-erp-system">Vorgangsweise</a></li><li><a class="wp-block-table-of-contents__entry" href="https://akirchknopf-21110.php.fhstp.cc/studium/studium-projekte/projekt-odoo-zeiterfassung/#odoo-erp-system">Mögliche Weiterentwicklung</a></li><li><a class="wp-block-table-of-contents__entry" href="https://akirchknopf-21110.php.fhstp.cc/studium/studium-projekte/projekt-odoo-zeiterfassung/#odoo-erp-system">Schlussworte</a></li></ol></nav>



<div style="height:13px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="odoo-erp-system">ODOO ERP-System</h2>



<div style="height:13px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="1790" height="1077" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/04/image.png" alt="" class="wp-image-12220" style="width:570px;height:auto" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2024/04/image.png 1790w, https://mobile.fhstp.ac.at/wp-content/uploads/2024/04/image-1536x924.png 1536w" sizes="auto, (max-width: 1790px) 100vw, 1790px" /></figure></div>


<div style="height:13px" aria-hidden="true" class="wp-block-spacer"></div>



<p><a href="https://odoo.com">Odoo</a> ist ein ERP-System. ERP (Enterprise Resource Planning) bezeichnet einen Software-Typ, den Unternehmen zur Verwaltung der täglichen Geschäftstätigkeit verwenden. Odoo ist als eine Art Suite von Betriebsanwendungen vorstellbar, die verschiedenste Bedürfnisse eines Unternehmens in einer Software vereint abdeckt. Beispiele dafür sind Projektmanagement, Rechnungsstellung, Einkauf, Lager, Personalwesen, uvw. Das System ist dabei beliebig um Applikationen erweiterbar &#8211; die unter anderem im Odoo App Store zum Kauf angeboten werden.</p>



<div style="height:13px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading" id="beweggrunde-fur-das-projekt">Beweggründe für das Projekt</h3>



<div style="height:13px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Odoo gibt es in einem Abonnement oder as kostenlose Community Edition. Odoo muss einer vielzahl an Unternehmenstypen gerecht werden und kann damit nicht all die Sonderwünsche abdecken die ein jeder haben möchte. Wenngleich es einen erweiterbaren modularen Ansatz verfolgt. </p>



<p>Das Unternehmen Triolgic Automation GmbH nutzt seit Ende letzten Jahren Odoo für den eigenen Betrieb. Prinzipiell ist man zufrieden aber es gibt ein paar Kritikpunkte für die man noch keine Lösung hat. Ein Kritikpunkt an Odoo ist etwa die Aufteilung zwischen Anwesenheit und Zeiterfassung. Jeder Mitarbeiter sollte zu jeder Zeit auf ein Projekt gestempelt sein. In Odoo ist es aber so geregelt das die Zeiterfassung nachträglich erfolgen muss und diese nicht von der Anwesenheit abhängt. Deshalb besteht der Bedarf an einer eigens angepassten Stempelapp, welche diese Bedürnisse abdeckt. Diese soll mit den in Odoo integrierten Modulen Anwesenheit, Zeiterfassung und Abwesenheiten synchronisiert sein, da die Projektabrechnung von den geleisteten Stunden abhängig ist. Das folgende Video soll einen kurzen Einblick in die erwähnten Module geben.</p>



<figure class="wp-block-video"><video controls src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/04/Aufzeichnung-2024-04-10-115004.mp4"></video></figure>



<div style="height:13px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="odoo-erp-system">Funktionsübersicht</h2>



<div style="height:13px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Vorab ist es wichtig anzumerken das sämtliche Daten in der Applikation aus der Datenbank stammen auf die auch Odoo zugreift. Will heißen das zum Beispiel Anwesenheitseinträge die im Tool erstellt werden auch in Odoo aufscheinen und umgekehrt.</p>



<div style="height:13px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-media-text is-stacked-on-mobile" style="grid-template-columns:32% auto"><figure class="wp-block-media-text__media"><video controls src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/04/Aufzeichnung-2024-04-10-110411.mp4"></video></figure><div class="wp-block-media-text__content">
<p><strong><em>Login</em> &amp; Stempeln</strong></p>



<p class="has-text-align-left">Die Anmeldung erfolgt mithilfe der Zugangsdaten des Odoo-Benutzers. Alternativ kann man sich mit einem dem Odoo-Benutzer zugeordneten RFID-Chip am Kiosk anmelden. Nach der Anmeldung gelangt man auf die Stempelseite. Hier kann bzw. muss ein Projekt sowie eine diesem zugeordnete Aufgabe ausgewählt werden und ein kurzer Tätigkeitsbericht verfasst werden. Die Einstempelzeit wird automatisch mit der aktuellen Zeit ausgefüllt. Ist der Nutzer aktuell eingestempelt wird hingegen die Austempelzeit automatisch ausgefüllt. Zusätzlich hat der Benutzer die Möglichkeit über den Button &#8220;Aufgabenwechsel&#8221; sich auszustempeln und sich mit den eingegebenen Informationen gleich wieder einzustempeln. Weiters besteht die Möglichkeit Reisedaten einzugeben, falls der Mitarbeiter während dieser Anwesenheit eine Dienstreise unternehmen muss.</p>
</div></div>



<div style="height:13px" aria-hidden="true" class="wp-block-spacer"></div>



<p><strong><em>Eintragsübersicht &amp; Bearbeiten von Einträgen</em></strong></p>



<p>Über den Reiter Einträge bekommt man eine Übersicht über alle Stempeleinträge. Ganz oben kann die Zeitspanne ausgewählt werden. Mit den Buttons &#8220;M,W,T&#8221; (Monat,Woche,Tag) kann die Zeitspanne auf das entsprechende Intervall gesetzt werden. Die Buttons &#8220;&lt;,&gt;&#8221; erlauben ein vor und zurückgehen mit dem eingestellen zeitlichen Abstand. Danach wird anhand der in Odoo eingestellten Normalwochenstunden des Mitarbeiters die zu arbeitende bzw. die bereits erledigte Arbeitszeit angezeigt. Ist der eingeloggte User Administrator kann dieser zwischen den Mitarbeitern wählen. Das Balkendiagramm stellt die täglichen Stunden im gegebenen Zeitraum, unterteilt in Anwesenheiten und Abwesenheiten, dar.</p>



<p>Wird auf einen Anwesenheitseintrag gelickt gelangt man zur Stempelansicht, wo der Eintrag editiert werden kann. Wird gespeichtert, gelangt der User zurück auf die Einträge-Ansicht. Der eingestellte Zeiraum inkl. Userauswahl bleibt erhalten. Zusätzlich wird hinuntergescrollt zu der Stelle wo der Nutzer zuvor war.</p>



<figure class="wp-block-video"><video controls src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/04/Aufzeichnung-2024-04-10-111000.mp4"></video></figure>



<div style="height:13px" aria-hidden="true" class="wp-block-spacer"></div>



<p><strong><em>Excel-Export</em></strong></p>



<p>Über den Button &#8220;Stunden&#8221; können die angezeigten Einträge als Excel exportiert werden. &#8220;Diäten&#8221; liefert ein Excel-Template ausgefüllt mit den eingegebenen Reisedaten.</p>



<figure class="wp-block-video"><video controls src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/04/Aufzeichnung-2024-04-10-111255.mp4"></video></figure>



<div style="height:13px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="odoo-erp-system">Technologiestack</h2>



<div style="height:13px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Die Odoo-Webanwendung nutzt als Datenbank PostgreSQL und ist selbst in Python geschrieben. Da von meinerseite kaum Pyhton-Kentnisse vorhanden sind, wurde zware die selbe Datenbank verwendet, aber entschieden die Applikation mit anderen Sprachen/Frameworks zu gestalten.</p>



<p>Entwickelt wurde in Visual Studio Code. Mithilfe des Windows-Subsystem für Linux wurde der Programmcode auf einem Ubuntu-System ausgeführt. Die Datenbank wurde mittels Docker-Container betrieben. GitLab diente zur Kollaboration in der Entwicklung bzw. zur Code-Versionierung. PNPM &#8211; eine alternative zu NPM &#8211; kam zur Paketverwaltung zum Einsatz.</p>



<p>Das Service wurde anschließend in der virtuellen Maschine auf der auch die Odoo Instanz läuft mithilfe von pm2 bereitgestellt und anschließend wurde die bestehende Nginx Konfiguration angepasst um die Seite über einen Hostnamen im Firmennetzwerk erreichen zu können.</p>



<ul class="wp-block-list">
<li>Nodes.js &amp; PNPM</li>



<li>GitLab</li>



<li>VSCode</li>



<li>WSL (Ubuntu)</li>



<li>Docker</li>



<li>PM2</li>



<li>Nginx</li>
</ul>



<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>



<p><strong>Backend</strong></p>



<p>Backendseitig wurde das NestJs Framework mit Fastify zur Erstellung einer REST API verwendet. Das Node.js Service greift auf die PostgreSQL-Datenbank zu. Aus den API Endpunkten wurde die Swagger Dokumentation automatisch generiert. Weiters wurde anstelle eines ORM der Querybuilder Knex eingesetzt.</p>



<ul class="wp-block-list">
<li>NestJs</li>



<li>PostgreSQL</li>



<li>Swagger</li>



<li>Knex</li>
</ul>



<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>



<p><strong>Frontend</strong></p>



<p>Im Frontend wurde &#8211; wie bereits im vorherigen Projekt &#8211; Angular 17 verwendet. Dies geschah aus dem Grund da beim letzten Projekt einige Sachen neu waren und damit eben diese Kentnisse gefestigt werden.</p>



<ul class="wp-block-list">
<li>Angular</li>



<li>Tailwind</li>



<li>ChartJs</li>



<li>ExcelJs</li>
</ul>



<div style="height:13px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="odoo-erp-system">Vorgangsweise</h2>



<div style="height:13px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Die größte Herausforderung in diesem Projekt bestand darin den Aufbau der bestehenden Datenbank zu verstehen bzw. die richtigen Tabellen zu finden und diese sinngemäß aufzufüllen. Es gab dazu drei Möglichkeiten:</p>



<ul class="wp-block-list">
<li>Analyse der Datenbank</li>



<li>Analyse des Python-Quellcodes</li>



<li><a href="https://chromewebstore.google.com/detail/odoo-debug/hmdmhilocobgohohpdpolmibjklfgkbi?pli=1">Odoo-Debug</a> Browser Extension</li>
</ul>



<p>Nach dem die erforderlichen Tabellen und deren Abängigkeiten identifiziert wurden, wurden deren Schematas in TypeScript Interfaces festgehalten. Mit diesen wurden Dtos gebildet und Restendpunkte gescriptet welche über die automatisierte Swagger-Dokumentation einsehbar sind. Anhand dieser Dokumentation wurde die Abfragen am Frontend erstellt. Das Design des Frontends ist zum Teil inspiriert von dem alten Zeitstempelsystems des Unternehmens wo ich vorher tätig war, der Vorgaben von seiten des Odoo Systems und den persönlichen Vorlieben einiger Mitarbeiter.</p>



<div style="height:13px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="odoo-erp-system">Mögliche Weiterentwicklung</h2>



<div style="height:13px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Es ist ein Akt der Balance welche Features dem Odoo-Portal vorbehalten werden sollen und welche explizit nochmals angepasst auf das Unternehmen in eigenen Tools anwendbar sein sollen.</p>



<p>Eine mögliche Erweiterung wäre es ein Dashboard anzulegen in der die für ein Projekt geleisteten Stunden analysiert werden können oder ein Stundenexport für alle Mitarbeiter mit einem Click.</p>



<div style="height:13px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="odoo-erp-system">Schlussworte</h2>



<div style="height:13px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Dieses Projekt brachte mich der Funktionsweise eines ERP-Systems näher. Da eigentlich jede Firma etwas in der Art benötigt oder alternativ auf viele Einzeltools setzt ist dies Wissen das sich auch später anwenden lässt. </p>
<p>The post <a href="https://mobile.fhstp.ac.at/studium/studium-projekte/projekt-odoo-zeiterfassung/">Projekt | Odoo-Zeiterfassung</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		<enclosure url="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/04/Aufzeichnung-2024-04-10-115004.mp4" length="290818709" type="video/mp4" />
<enclosure url="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/04/Aufzeichnung-2024-04-10-110411.mp4" length="28096397" type="video/mp4" />
<enclosure url="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/04/Aufzeichnung-2024-04-10-111000.mp4" length="107257097" type="video/mp4" />
<enclosure url="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/04/Aufzeichnung-2024-04-10-111255.mp4" length="85839613" type="video/mp4" />

			</item>
		<item>
		<title>Projekt &#124; FLA-Champ</title>
		<link>https://mobile.fhstp.ac.at/studium/studium-projekte/projekt-fla-champ/</link>
		
		<dc:creator><![CDATA[Lukas Gruber]]></dc:creator>
		<pubDate>Wed, 28 Feb 2024 20:29:00 +0000</pubDate>
				<category><![CDATA[Projekte]]></category>
		<category><![CDATA[Studium]]></category>
		<category><![CDATA[Angular]]></category>
		<category><![CDATA[Capacitor]]></category>
		<category><![CDATA[Figma]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[NestJs]]></category>
		<category><![CDATA[PNPM]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=11853</guid>

					<description><![CDATA[<p>App zur Unterstützung bei der Erlernung der notwendigen Kenntnisse für den Erwerb des Feuerwehrleistungsabzeichens in Bronze und Silber.</p>
<p>The post <a href="https://mobile.fhstp.ac.at/studium/studium-projekte/projekt-fla-champ/">Projekt | FLA-Champ</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Idee dieses Projektes ist es eine App zu entwerfen, welche unterstützend zur Erlernung der notwendigen Kenntnisse für den Erwerb des Feuerwehrleistungsabzeichens in Bronze und Silber dient. Neben Gruppenfunktionalitäten, wie z.B. Übungen anlegen, Chat, etc., gibt es die Möglichkeit bei Übungen die Positionen auszulosen sowie die Zeit zu stoppen und Guides der einzelnen Positionen wie auch Informationen allgemeiner Art abzurufen. Ausgeführt wurde dieses Projekt zu zweit.</p>



<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>



<nav class="wp-block-table-of-contents"><ol><li><a class="wp-block-table-of-contents__entry" href="https://akirchknopf-21110.php.fhstp.cc/studium/studium-projekte/projekt-fla-champ/#der-no-landesfeuerwehrleistungsbewerb-fla">Der NÖ Landesfeuerwehrleistungsbewerb (FLA)</a></li><li><a class="wp-block-table-of-contents__entry" href="https://akirchknopf-21110.php.fhstp.cc/studium/studium-projekte/projekt-fla-champ/#funktionsubersicht">Funktionsübersicht</a></li><li><a class="wp-block-table-of-contents__entry" href="https://akirchknopf-21110.php.fhstp.cc/studium/studium-projekte/projekt-fla-champ/#technologiestack">Technologiestack</a></li><li><a class="wp-block-table-of-contents__entry" href="https://akirchknopf-21110.php.fhstp.cc/studium/studium-projekte/projekt-fla-champ/#vorgangsweise">Vorgangsweise</a></li><li><a class="wp-block-table-of-contents__entry" href="https://akirchknopf-21110.php.fhstp.cc/studium/studium-projekte/projekt-fla-champ/#mogliche-weiterentwicklung">Mögliche Weiterentwicklung</a></li><li><a class="wp-block-table-of-contents__entry" href="https://akirchknopf-21110.php.fhstp.cc/studium/studium-projekte/projekt-fla-champ/#schlussworte">Schlussworte</a></li></ol></nav>



<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="der-no-landesfeuerwehrleistungsbewerb-fla">Der NÖ Landesfeuerwehrleistungsbewerb (FLA)</h2>



<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Der Niederösterreichische Landesfeuerwehrleistungsbewerb (Siehe auch <a href="https://www.noe122.at/service/bewerbe/fla-in-bronze-und-silber">https://www.noe122.at/service/bewerbe/fla-in-bronze-und-silber</a>) findet einmal jährlich im Juni statt. An den Bewerbstagen finden sich Wettkampfgruppen aus ganz NÖ am Austragungsort ein. Neben dem sportlichen Wettkampf ist für viele Teilnehmer die Erringung des Feuerwehrleistungsabzeichen in Bronze und Silber das Ziel. Außer dem Landesbewerb gibt es Bewerbe gleicher Art auch auf der Abschnitts- und Unterabschnittsebene. Um für die Bewerbe fit zu sein bereiten sich die Feuerwehren bereits Monate im vorhinein mit zahlreichen Übungen vor.</p>



<p>Die Grundlage für den Bewerb ist der idealisierte Löschangriff. Dabei wird mit A-Saugschläuchen an einer Wasserstelle angesaugt und anschließend werden mehrere C-Löschleitungen ausgezogen. Mit der Befehlsgabe &#8220;Wasser marsch&#8221; wird die Zeit gestoppt. Die besten Gruppen schaffen dies &#8211; fehlerfrei wohlgemerkt &#8211; in einer Zeit von etwa 30 Sekunden. </p>



<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="funktionsubersicht">Funktionsübersicht</h2>



<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-media-text is-stacked-on-mobile" style="grid-template-columns:22% auto"><figure class="wp-block-media-text__media"><img loading="lazy" decoding="async" width="828" height="1791" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/02/127.0.0.1_4202_iPhone-XR.jpg" alt="" class="wp-image-11999 size-full" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2024/02/127.0.0.1_4202_iPhone-XR.jpg 828w, https://mobile.fhstp.ac.at/wp-content/uploads/2024/02/127.0.0.1_4202_iPhone-XR-710x1536.jpg 710w" sizes="auto, (max-width: 828px) 100vw, 828px" /></figure><div class="wp-block-media-text__content">
<p><strong><em>Übersicht</em></strong></p>



<p>Grundlage für die Applikation sind die Bestimmungen des Bundesfeuerwehrverbandes (Erhältlich unter <a href="https://www.bundesfeuerwehrverband.at/2023/12/06/fh-11-in-ueberarbeiteter-version-veroeffentlicht/">https://www.bundesfeuerwehrverband.at/2023/12/06/fh-11-in-ueberarbeiteter-version-veroeffentlicht/</a>). Das PDF sowie allgemeine Informationen finden sich auf der Homepage der App.</p>
</div></div>



<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-media-text is-stacked-on-mobile" style="grid-template-columns:21% auto"><figure class="wp-block-media-text__media"><video controls src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/02/Aufzeichnung-2024-02-28-103103.mp4"></video></figure><div class="wp-block-media-text__content">
<p><strong><em>Stoppuhr</em></strong></p>



<p>Mit der Stoppuhr können einzelne Läufe erfasst werden. Dabei können Fehler hinzugefügt und Breakpoints gesetzt werden. Optional kann vor dem Lauf der Angriffsbefehl abgespielt werden, bevor die Uhr automatisch zu ticken beginnt. Die Ergebnisse können nachher über den entsprechenden Button aufgerufen werden. Ist eine Gruppe aktiviert, wird das Ergebnis zwischen allen Gruppenteilnehmern synchronisiert. </p>



<p>Außerdem besteht die Möglichkeit die Positionen auslosen zu lassen. Mit aktivierter Gruppe wird jedem Gruppenteilnehmer automatisch eine Position zugewiesen. Ohne aktivierte Gruppe können die Positionen nacheinander gezogen werden. Als Beispiel siehe angefügtes Video.</p>
</div></div>



<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-media-text is-stacked-on-mobile" style="grid-template-columns:21% auto"><figure class="wp-block-media-text__media"><video controls src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/02/Aufzeichnung-2024-02-28-102752-1.mp4"></video></figure><div class="wp-block-media-text__content">
<p><strong><em>Guides / Informationen</em></strong></p>



<p>Über den Reiter Guides gelangt man zu Informationen bzw. über die Aufgaben der einzelnen neun Positionen sowie zu allgemeinen Daten wie zum Beispiel über die Bemaßung der Bewerbsbahn. Als Beispiel siehe angefügtes Video.</p>
</div></div>



<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-media-text is-stacked-on-mobile" style="grid-template-columns:21% auto"><figure class="wp-block-media-text__media"><video controls src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/02/Aufzeichnung-2024-02-28-212633.mp4"></video></figure><div class="wp-block-media-text__content">
<p><br><strong><em>Gruppenfunktionen</em></strong></p>



<p>In der App können mehrere Gruppen angelegt werden. Durch einen Einladungstoken können andere Appnutzer zur Gruppe eingeladen werden. Ist man Teil einer Gruppe können Termine angelegt werden. Zum Beispiel ein Termin für das nächste Training, einen Bewerb oder ein anderes Event. Die Mitglieder können dann mit Daumen hoch oder runter reagieren ob sie dafür Zeit haben. Im Chat besteht die Möglichkeit sich miteinander auszutauschen. Das Dashboard soll eine Übersicht über die nächsten Termine und den aktuellen Chatverlauf bieten.</p>
</div></div>



<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="technologiestack">Technologiestack</h2>



<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Entwickelt wurde in Visual Studio Code. Mithilfe des Windows-Subsystem für Linux wurde der Programmcode auf einem Ubuntu-System ausgeführt. Die Datenbank wurde mittels Docker-Container betrieben. GitLab diente zur Kollaboration in der Entwicklung bzw. zur Code-Versionierung. PNPM &#8211; eine alternative zu NPM &#8211; kam zur Paketverwaltung zum Einsatz.</p>



<ul class="wp-block-list">
<li>Nodes.js &amp; PNPM</li>



<li>GitLab</li>



<li>VSCode</li>



<li>WSL (Ubuntu)</li>



<li>Docker</li>
</ul>



<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>



<p><strong>Backend</strong></p>



<p>Backendseitig wurde das NestJs Framework mit Fastify zur Erstellung einer REST API verwendet. Das Node.js Service greift auf eine MongoDB Datenbank zu. Aus den API Endpunkten wurde die Swagger Dokumentation automatisch generiert.</p>



<ul class="wp-block-list">
<li>NestJs</li>



<li>MongoDB</li>



<li>Swagger</li>
</ul>



<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>



<p><strong>Frontend</strong></p>



<p>Als Frontend-Framework wurde Angular 17 verwendet. Dies geschah aufgrund der für uns besonders interressanten weiterentwicklung des Frameworks (Siehe dazu auch der Blogartikel:  <a href="https://akirchknopf-21110.php.fhstp.cc/development/webdevelopment/angular-17-die-angular-renaissance/">https://akirchknopf-21110.php.fhstp.cc/development/webdevelopment/angular-17-die-angular-renaissance/</a>). Für das App-Design wurde Figma verwendet. Damit aus der Webapp eine richtige App werden kann wurde zudem Capacitor als native App-Laufzeitumgebung installiert.</p>



<ul class="wp-block-list">
<li>Figma</li>



<li>Angular</li>



<li>Capacitor</li>



<li>Tailwind</li>



<li>Android Studio</li>
</ul>



<h2 class="wp-block-heading" id="vorgangsweise">Vorgangsweise</h2>



<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Zunächst wurde in Figma gemeinsam ein Wireframe erstellt und dieser kontinuierlich zu einem Mockup weiterentwickelt.</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-5 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1381" height="800" data-id="11882" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/01/fla_champ_figma1-1381x800.jpg" alt="" class="wp-image-11882"/></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1540" height="800" data-id="11883" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/01/fla_champ_figma2-1540x800.jpg" alt="" class="wp-image-11883" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2024/01/fla_champ_figma2-1540x800.jpg 1540w, https://mobile.fhstp.ac.at/wp-content/uploads/2024/01/fla_champ_figma2-770x400.jpg 770w" sizes="auto, (max-width: 1540px) 100vw, 1540px" /></figure>
</figure>



<p>Danach wurde mithilfe von VsCode das Projekt als PNPM-Monorepo angelegt. Ein Common Ordner bzw. Paket wurde angelegt, welches als Projektreferenz im Frontend und Backend Code importiert werden kann. Dadurch können Typdefinitionen zwischen Frontend und Backend geteilt werden.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1540" height="800" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/02/Screenshot-2024-02-28-085732-1540x800.jpg" alt="" class="wp-image-11990" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2024/02/Screenshot-2024-02-28-085732-1540x800.jpg 1540w, https://mobile.fhstp.ac.at/wp-content/uploads/2024/02/Screenshot-2024-02-28-085732-770x400.jpg 770w" sizes="auto, (max-width: 1540px) 100vw, 1540px" /></figure>



<p>Backendseitig wurde eine Swagger-API-Dokumentation generiert. Frontendseitig wurde mit den Developertools des Browsers gearbeitet.</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-6 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1540" height="800" data-id="11991" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/02/Screenshot-2024-02-28-090010-1540x800.jpg" alt="" class="wp-image-11991" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2024/02/Screenshot-2024-02-28-090010-1540x800.jpg 1540w, https://mobile.fhstp.ac.at/wp-content/uploads/2024/02/Screenshot-2024-02-28-090010-770x400.jpg 770w" sizes="auto, (max-width: 1540px) 100vw, 1540px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1540" height="800" data-id="11992" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/02/Screenshot-2024-02-28-090030-1540x800.png" alt="" class="wp-image-11992" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2024/02/Screenshot-2024-02-28-090030-1540x800.png 1540w, https://mobile.fhstp.ac.at/wp-content/uploads/2024/02/Screenshot-2024-02-28-090030-770x400.png 770w" sizes="auto, (max-width: 1540px) 100vw, 1540px" /></figure>
</figure>



<h2 class="wp-block-heading" id="mogliche-weiterentwicklung">Mögliche Weiterentwicklung</h2>



<p>Aus Feature-Sicht wäre die Implementierung einer Push-Benachrichtigung eine Option. Eine zweite wäre die stärkere Einbindung der Gruppenfunktionalität in die Stoppuhr. Die dritte Möglichkeit besteht in der Gamifizierung der Anwendung. Bedeutet das zum Beispiel Tests für die einzelnen Positionen erstellt werden und man dafür Punkte bekommt, die in weitere Folge irgendwelche Benefits mit sich bringen.</p>



<p>Will man die App in einem Appstore zum Download bereitstellen sind noch eine Reihe von Anpassungen notwendig. Wird dieses Projekt fortgesetzt, wäre es zunächst notwendig das App-Deployment auf Android/Ios zu überarbeiten bzw. in den jeweiligen Entwicklungsumgebungen weiterzuarbeiten. Dies wurde bisher nur unzureichend getan. Derzeit besitzt die App etwa noch kein App-Icon, Name usw..</p>



<h2 class="wp-block-heading" id="schlussworte">Schlussworte</h2>



<p>Aus unserer Sicht ein zuweilen spannendes Projekt. Manche der verwendeten Technologien waren uns bereits zuvor bekannt &#8211; manche nur vom Namen, andere auch von ersten Workshops, andere wiederum aus anderen Projekten. Es gab aber auch Technologien bzw. Frameworks die wir zuvor noch nicht kannten. Viel Zeit ist unter anderem mit dem Erstellen des Styling in CSS bzw. Tailwind verstrichen. Die Mockup-Erstellung mit Figma war uns zudem komplett neu.  </p>
<p>The post <a href="https://mobile.fhstp.ac.at/studium/studium-projekte/projekt-fla-champ/">Projekt | FLA-Champ</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		<enclosure url="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/02/Aufzeichnung-2024-02-28-103103.mp4" length="6133689" type="video/mp4" />
<enclosure url="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/02/Aufzeichnung-2024-02-28-102752-1.mp4" length="2522472" type="video/mp4" />
<enclosure url="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/02/Aufzeichnung-2024-02-28-212633.mp4" length="9509325" type="video/mp4" />

			</item>
		<item>
		<title>Blogartikel &#124; Web Crypto API</title>
		<link>https://mobile.fhstp.ac.at/allgemein/blogartikel-web-crypto-api/</link>
		
		<dc:creator><![CDATA[Lukas Gruber]]></dc:creator>
		<pubDate>Wed, 28 Feb 2024 07:26:33 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Webdevelopment]]></category>
		<category><![CDATA[crypto]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=11857</guid>

					<description><![CDATA[<p>Nachrichten synchron sowie asynchron verschlüsseln und signieren mit der WebCrypto API.</p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/blogartikel-web-crypto-api/">Blogartikel | Web Crypto API</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Dieser Artikel stellt einige Funktionen der Web Crypto API (<a href="https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto">https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto</a>) vor. Als Anwendungsbeispiel dafür soll eine Nachricht signiert und Symmetrisch verschlüsselt werden. Der für die symmetrische Verschlüsselung verwendete Key soll anschließend durch eine asymmetrische Verschlüsselung an einen anderen User weitergegeben werden.</p>



<h2 class="wp-block-heading">Setup</h2>



<p>In den nachfolgenden Kapiteln angeführte Funktionen sind Teil der nachstehenden Klasse &#8220;CryptoKeyService&#8221;. Die Funktion test() dient zum Überprüfen der Funktionsweise. </p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: jscript; title: ; notranslate">
export default class CryptoKeyService {
  static algorithmAsym = &quot;RSA-OAEP&quot;;
  static algorithmSym = &quot;AES-GCM&quot;;
  static algorithmSign = &quot;ECDSA&quot;;

  static async test() {
    // B Side
    const bAsymKeyPair = await this.generateAsymKeyPair();
    // A Side
    const aSymKey = await this.generateSymKey();
    const wrappedSymKey = await this.wrapSymKeyWithAsymKey(bAsymKeyPair.publicKey, aSymKey);
    const aSignKeyPair = await this.generateSignKeyPair();
    const aSignature = await this.signMessage(aSignKeyPair.privateKey, wrappedSymKey);
    // B Side
    const data = &quot;Super Secret Test Message!&quot;;
    const isWrappedKeyOk = await this.verifyMessage(aSignKeyPair.publicKey, aSignature, wrappedSymKey);
    console.log(isWrappedKeyOk);
    const unwrappedSymKey = await this.unwrapAsymSymKey(wrappedSymKey, bAsymKeyPair.privateKey);
    const bSignKeyPair = await this.generateSignKeyPair();
    const bSignature = await this.signMessage(bSignKeyPair.privateKey, data);
    const iv = crypto.getRandomValues(new Uint8Array(16));
    const bSymEncryptedData = await this.encryptSymMessage(unwrappedSymKey, iv, data);
    // A Side
    const decryptedData = await this.decryptSymMessage(aSymKey, iv, bSymEncryptedData);
    const isDataOk = await this.verifyMessage(bSignKeyPair.publicKey, bSignature, decryptedData);
    console.log(decryptedData, isDataOk);
  }

  ... // Functions
}
</pre></div>


<p>Wird die Testfunktion mit CryptoKeyService.test() aufgerufen wird der in nachstehender Grafik dargestellte Ablauf simuliert. Damit es nicht zu kompliziert wird, wird nur so getan als ob die Daten versendet worden wären. Die Konsolenausgabe gibt &#8220;Super Secret Test Message!, true&#8221; zurück.</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="2646" height="4386" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/01/crypto-1.png" alt="" class="wp-image-11879" style="width:446px;height:auto" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2024/01/crypto-1.png 2646w, https://mobile.fhstp.ac.at/wp-content/uploads/2024/01/crypto-1-927x1536.png 927w, https://mobile.fhstp.ac.at/wp-content/uploads/2024/01/crypto-1-1236x2048.png 1236w" sizes="auto, (max-width: 2646px) 100vw, 2646px" /></figure></div>


<div style="height:46px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Alle Funktionen haben gemeinsam das die zu übergebenden bzw. rückgegebenen Keys im &#8220;JSON Web Key&#8221; Format sind.</p>



<p>Die WebCrypto API unterstützt eine ganze Reihe von Algorithmen, wobei jeder seinen eigenen Anwendungszweck besitzt.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="936" height="956" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/01/webcryptoalgorithms.png" alt="" class="wp-image-11871" style="width:419px;height:auto"/><figcaption class="wp-element-caption">Quelle: <a href="https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto">https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto</a></figcaption></figure></div>


<p>Für die Assymetrische Verschlüsselung wurde RSA-OAEP gewählt, für die synchrone AES-GCM und für das signieren von Nachrichten ECDSA.</p>



<h2 class="wp-block-heading">Asymmetrische Verschlüsselung</h2>



<p>Bei der assymetrischen Verschlüsselung wird ein Schlüssepaar erzeugt, welches aus aus einem privaten &#8211; beim Ersteller verbleibenden &#8211; und einem öffentlichen &#8211; den jeder haben darf &#8211; Schlüssel besteht. Eine Nachricht wird mit dem öffentlichen Schlüssel des Empfängers verschlüsselt. Der Empfänger kann diese dann mit seinem privaten Schlüssel entschlüsseln.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="1153" height="514" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/01/asym.png" alt="" class="wp-image-11873" style="width:574px;height:auto"/><figcaption class="wp-element-caption">Quelle: <a href="https://www.simplilearn.com/tutorials/cryptography-tutorial/asymmetric-encryption">https://www.simplilearn.com/tutorials/cryptography-tutorial/asymmetric-encryption</a></figcaption></figure></div>


<p>Anwendungszwecke sind etwa der Austausch synchroner Schlüssel, verschlüsseltes browsing oder auch digitale Signaturen. Mit der Subtle WebCrypto API lässt sich diese Form wie folgt umsetzen. </p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: jscript; title: ; notranslate">
  static async generateAsymKeyPair() {
    const keyPair = await crypto.subtle.generateKey(
      {
        name: this.algorithmAsym,
        modulusLength: 4096,
        publicExponent: new Uint8Array(&#x5B;1, 0, 1]),
        hash: &quot;SHA-256&quot;,
      },
      true,
      &#x5B;&quot;encrypt&quot;, &quot;decrypt&quot;, &quot;wrapKey&quot;, &quot;unwrapKey&quot;],
    );

    const publicKey = await crypto.subtle.exportKey(&quot;jwk&quot;, keyPair.publicKey);
    const privateKey = await crypto.subtle.exportKey(&quot;jwk&quot;, keyPair.privateKey);

    return { publicKey, privateKey };
  }

  static async encryptAsymMessage(publicKey: JsonWebKey, message: string) {
    const importedKey = await this.importAsymKey(publicKey, &#x5B;&quot;encrypt&quot;]);
    const encMessage = new TextEncoder().encode(message);

    return await window.crypto.subtle.encrypt(this.algorithmAsym, importedKey, encMessage);
  }

  static async decryptAsymMessage(privateKey: JsonWebKey, encryptedMessage: ArrayBuffer) {
    let returnMessage = &quot;&quot;;

    try {
      const importedKey = await this.importAsymKey(privateKey, &#x5B;&quot;decrypt&quot;]);

      let decrypted = await crypto.subtle.decrypt(this.algorithmAsym, importedKey, encryptedMessage);

      returnMessage = new TextDecoder().decode(decrypted);
    } catch (error) {
      returnMessage = &quot;Error decrypting message&quot;;
    }

    return returnMessage;
  }

  static async importAsymKey(key: JsonWebKey, keyUsage: KeyUsage&#x5B;]) {
    return await crypto.subtle.importKey(
      &quot;jwk&quot;,
      key,
      {
        name: this.algorithmAsym,
        hash: &quot;SHA-256&quot;,
      },
      true,
      keyUsage,
    );
  }
</pre></div>


<h2 class="wp-block-heading">Symmetrische Verschlüsselung</h2>



<p>Bei der symmetrischen Verschlüsselung wird nur ein Schlüssel erzeugt, den sich alle Clients teilen. Die Herausforderung besteht darin diesen Schlüssel allen Teilnehmern sicher zukommen zu lassen. Vorteil hingegen ist das diese Methode deutlich performanter ist als die asynchrone Verschlüsselung.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="720" height="360" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/01/1_D2Kwlzm7GGqP70dYlcADhw.png" alt="" class="wp-image-11872" style="width:508px;height:auto"/><figcaption class="wp-element-caption">Quelle: <a href="https://vadivelyathursan.medium.com/secret-key-symmetric-algorithms-in-cryptography-10d3ef428cf8">https://vadivelyathursan.medium.com/secret-key-symmetric-algorithms-in-cryptography-10d3ef428cf8</a></figcaption></figure></div>


<p>Anwendungszweck ist daher zum Beispiel die Verschlüsselung größerer Datenmengen. Mit der Subtle WebCrypto API lässt sich diese Form wie folgt umsetzen. Anzumerken ist das iv Feld welches dem Empfänger mitgesendet wird.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: jscript; title: ; notranslate">
  static async generateSymKey() {
    const key = await crypto.subtle.generateKey(
      {
        name: this.algorithmSym,
        length: 256,
      },
      true,
      &#x5B;&quot;encrypt&quot;, &quot;decrypt&quot;],
    );
    return await await crypto.subtle.exportKey(&quot;jwk&quot;, key);
  }

  static async encryptSymMessage(key: JsonWebKey, iv: Uint8Array, message: string) {
    const importedKey = await this.importSymKey(key, &#x5B;&quot;encrypt&quot;]);
    const encMessage = new TextEncoder().encode(message);

    return await window.crypto.subtle.encrypt(
      {
        name: this.algorithmSym,
        iv,
      },
      importedKey,
      encMessage,
    );
  }

  static async decryptSymMessage(key: JsonWebKey, iv: Uint8Array, encryptedMessage: ArrayBuffer) {
    let returnMessage = &quot;&quot;;

    try {
      const importedKey = await this.importSymKey(key, &#x5B;&quot;decrypt&quot;]);

      let decrypted = await window.crypto.subtle.decrypt(
        {
          name: this.algorithmSym,
          iv,
        },
        importedKey,
        encryptedMessage,
      );

      returnMessage = new TextDecoder().decode(decrypted);
    } catch (error) {
      returnMessage = &quot;Error decrypting message&quot;;
    }

    return returnMessage;
  }

  static async importSymKey(key: JsonWebKey, keyUsage: KeyUsage&#x5B;]) {
    return await crypto.subtle.importKey(
      &quot;jwk&quot;,
      key,
      {
        name: this.algorithmSym,
        length: 256,
      },
      true,
      keyUsage,
    );
  }
</pre></div>


<h2 class="wp-block-heading">Signatur</h2>



<p>Anders als bei der asynchronen Verschlüsselung wird beim signieren nicht der öffentliche Schlüssel sondern der private angewendet. Zur Verifizierung wird der öffentliche Schlüssel auf der Empfängerseite benötigt. </p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="450" height="305" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/01/signature.png" alt="" class="wp-image-11874" style="width:353px;height:auto"/><figcaption class="wp-element-caption">Quelle: <a href="http://guides.brucejmack.net/SOA-Patterns/WSSP/13.1PublicKeyEncryptDigSigDoc.htm">http://guides.brucejmack.net/SOA-Patterns/WSSP/13.1PublicKeyEncryptDigSigDoc.htm</a></figcaption></figure></div>


<p>Anwendungszweck ist zur weiteren Absicherung eines Nachrichtenaustauschs, etwa um Man in the Middle Angriffe erkennen zu können. Mit der Subtle WebCrypto API lässt sich diese Form wie folgt umsetzen.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: jscript; title: ; notranslate">
  static async generateSignKeyPair() {
    const keyPair = await crypto.subtle.generateKey(
      {
        name: this.algorithmSign,
        namedCurve: &quot;P-384&quot;,
      },
      true,
      &#x5B;&quot;sign&quot;, &quot;verify&quot;],
    );

    const publicKey = await crypto.subtle.exportKey(&quot;jwk&quot;, keyPair.publicKey);
    const privateKey = await crypto.subtle.exportKey(&quot;jwk&quot;, keyPair.privateKey);

    return { publicKey, privateKey };
  }

  static async signMessage(privateKey: JsonWebKey, message: string | ArrayBuffer): Promise&lt;ArrayBuffer&gt; {
    const importedKey = await this.importSignKey(privateKey, &#x5B;&quot;sign&quot;]);

    return await window.crypto.subtle.sign(
      {
        name: this.algorithmSign,
        hash: { name: &quot;SHA-384&quot; },
      },
      importedKey,
      typeof message === &quot;string&quot; ? new TextEncoder().encode(message) : message,
    );
  }

  static async verifyMessage(publicKey: JsonWebKey, signature: ArrayBuffer, message: string | ArrayBuffer): Promise&lt;boolean&gt; {
    let returnMessage = false;

    try {
      const importedKey = await this.importSignKey(publicKey, &#x5B;&quot;verify&quot;]);

      return await window.crypto.subtle.verify(
        {
          name: this.algorithmSign,
          hash: { name: &quot;SHA-384&quot; },
        },
        importedKey,
        signature,
        typeof message === &quot;string&quot; ? new TextEncoder().encode(message) : message,
      );
    } catch (error) {
      returnMessage = false;
    }

    return returnMessage;
  }

  static async importSignKey(key: JsonWebKey, keyUsage: KeyUsage&#x5B;]) {
    return await crypto.subtle.importKey(
      &quot;jwk&quot;,
      key,
      {
        name: this.algorithmSign,
        namedCurve: &quot;P-384&quot;,
      },
      true,
      keyUsage,
    );
  }
</pre></div>


<h2 class="wp-block-heading">Wrapping</h2>



<p>Die Wrapping Funktion dient dazu einen bestehenden Key mit einem anderen abzusichern. So kann etwa ein synchroner Schlüssel mit einen asychronen Schlüssel gepackt werden, um diesen anschließend zu einem Client schicken zu können.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: jscript; title: ; notranslate">
  static async wrapSymKeyWithAsymKey(publicKey: JsonWebKey, symKeyToWrap: JsonWebKey) {
    const importedPublicKey = await this.importAsymKey(publicKey, &#x5B;&quot;wrapKey&quot;]);
    const importedKeyToWrap = await this.importSymKey(symKeyToWrap, &#x5B;&quot;encrypt&quot;, &quot;decrypt&quot;]);

    return await crypto.subtle.wrapKey(&quot;jwk&quot;, importedKeyToWrap, importedPublicKey, this.algorithmAsym);
  }

  static async unwrapAsymSymKey(wrappedSymKey: ArrayBuffer, privateKey: JsonWebKey) {
    const importedPrivateKey = await this.importAsymKey(privateKey, &#x5B;&quot;unwrapKey&quot;]);

    const key = await crypto.subtle.unwrapKey(&quot;jwk&quot;, wrappedSymKey, importedPrivateKey, this.algorithmAsym, this.algorithmSym, true, &#x5B;
      &quot;encrypt&quot;,
      &quot;decrypt&quot;,
    ]);

    return await crypto.subtle.exportKey(&quot;jwk&quot;, key);
  }
</pre></div>


<h2 class="wp-block-heading">Schlussworte</h2>



<p>Die WebCrypto API ist ein umfangreiches Werkzeug um simple Nachrichtenverschlüsselungen vorzunehmen. Möchte man aber tatsächlich eine hochsicherheitsanwendung entwickeln, so ist diese mit Vorsicht anzuwenden. So wird in den Mozilla Developer Docs extra darauf hingewiesen das schnell einmal etwas übersehen werden kann.</p>


<div class="wp-block-image is-style-default">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="992" height="482" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2024/01/crypto_warning.png" alt="" class="wp-image-11875" style="width:517px;height:auto"/><figcaption class="wp-element-caption">Quelle: <a href="https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto">https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto</a></figcaption></figure></div>


<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>* Titelbild wurde mit Bing Image KI erstellt</p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/blogartikel-web-crypto-api/">Blogartikel | Web Crypto API</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
