<?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 Michelle Markl - Mobile USTP MKL</title>
	<atom:link href="https://mobile.fhstp.ac.at/author/it211503/feed/" rel="self" type="application/rss+xml" />
	<link>https://mobile.fhstp.ac.at/author/it211503/</link>
	<description>Die &#34;Mobile Forschungsgruppe&#34; der USTP, sie  sammelt hier alles zu den Themen Design, UX und Entwicklung mobiler Applikationen</description>
	<lastBuildDate>Mon, 11 Sep 2023 14:48: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 Michelle Markl - Mobile USTP MKL</title>
	<link>https://mobile.fhstp.ac.at/author/it211503/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Native Notizen App</title>
		<link>https://mobile.fhstp.ac.at/allgemein/native-notizen-app/</link>
		
		<dc:creator><![CDATA[Michelle Markl]]></dc:creator>
		<pubDate>Mon, 26 Jun 2023 10:42:11 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=10992</guid>

					<description><![CDATA[<p>Dieses Semester habe ich mich noch einmal näher mit der nativen App Entwicklung auseinandergesetzt. Zudem habe ich mich bisher noch nicht mit der Erstellung von Apps für Wearables und wenig mit der Entwicklung von Swift beschäftigt &#8211; so habe ich das Semesterprojekt genutzt, und habe an einer watchOS App gearbeitet.  Projektinhalt: Notizen für watchOS&#160; Lange <a class="read-more" href="https://mobile.fhstp.ac.at/allgemein/native-notizen-app/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/native-notizen-app/">Native Notizen App</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Dieses Semester habe ich mich noch einmal näher mit der nativen App Entwicklung auseinandergesetzt. Zudem habe ich mich bisher noch nicht mit der Erstellung von Apps für Wearables und wenig mit der Entwicklung von Swift beschäftigt &#8211; so habe ich das Semesterprojekt genutzt, und habe an einer watchOS App gearbeitet. </p>



<h2 class="wp-block-heading"><strong>Projektinhalt: Notizen für watchOS&nbsp;</strong></h2>



<p>Lange nutze ich jetzt schon mein iPhone XR in Verbindung mit meiner AppleWatch Series 3. Eines was mir bei der Watch fehlt ist, dass ich keine Notizen machen kann bzw. jene vom iPhone lesen kann. Diesen Grund habe ich zum Anlassen genommen meine eigene Notizen App, ich habe sie ‚Note+‘ genannt, zu entwickeln.&nbsp;</p>



<h2 class="wp-block-heading"><strong>ToDos: Das soll meine App können</strong></h2>



<p>Geplant ist eine watchOS App, welche ich auf meiner AppleWatch testen kann. Hier muss ich bedenken, dass diese &gt; watchOS 9.0 unterstützen. Die Daten sollen auf dem Gerät gespeichert sein, um den Zugriff auf die Daten jeder Zeit zu ermöglichen. Darüberhinaus soll es eine Begleit-App für iOS geben, welche zumindest die gespeicherten Notizen der Watch anzeigt.&nbsp;</p>



<p>Update: Während der Entwicklung der App ist der Wunsch gekommen an Notizen erinnert zu werden. So ist geplant Push-Notifications zu einer individuellen Zeit auszusenden.</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:100%">
<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<h2 class="wp-block-heading"><strong>Technologien: Swift und Xcode&nbsp;</strong></h2>



<p>Zur Umsetzung von nativen Apps für Apple Geräte stehen die Programmiersprachen Swift und Objective-C zur Auswahl. In diesem Projekt werde ich <strong>Swift</strong> nutzen. Als Ausgangsbasis für die angedachten GUI-Elemente wird <strong>SwiftUI</strong> verwendet. Für den optimalen Entwicklungsprozess wird <strong>xCode</strong> als Entwicklungsumgebung genutzt.&nbsp;</p>



<h2 class="wp-block-heading" id="block-b0d91d6d-45e8-430b-9e2d-78ad52b9b7de"><strong>Umsetzung: Die Entstehung von Note+&nbsp;</strong></h2>



<p>Da ich mich noch nicht viel mit der nativen App-Entwicklung für watchOS und/oder iOS auseinandergesetzt habe, habe ich mir im ersten Schritt vor allem die Zeit genommen mich mit Swift, SwiftUI und der Entwicklungsumgebung Xcode näher auseinanderzusetzen.&nbsp;</p>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:50%">
<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="1919" height="2560" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2023/06/IMG_0587-1-scaled.jpg" alt="" class="wp-image-11014" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2023/06/IMG_0587-1-scaled.jpg 1919w, https://mobile.fhstp.ac.at/wp-content/uploads/2023/06/IMG_0587-1-1152x1536.jpg 1152w, https://mobile.fhstp.ac.at/wp-content/uploads/2023/06/IMG_0587-1-1535x2048.jpg 1535w" sizes="(max-width: 1919px) 100vw, 1919px" /></figure>
</div>
</div>
</div></div>
</div>
</div>



<h3 class="wp-block-heading"><strong>UI-Elemente in verschiedenen Versionen</strong></h3>



<p>Ein erstes kleines Hindernis hat die Softwareversion dargestellt. Die AppleWatch Series 3 erhält seit watchOS 9.0 keine Softwareupdates mehr und unterstützt somit nur Funktionen für &gt; watchOS 9.0.&nbsp;</p>



<p>Das UI-Element ‚TextField‘ mit der Eigenschaft ‚axis‘, welches ich für die Detailseite der Notiz verwende, wird erst ab watchOS 9.0 unterstützt. ‚axis‘ ermöglicht ein Mehrzeiliges-Textfeld, wenn der Platz für die Eingabe nicht ausreicht. Das einfache ‚TextField‘ nutze ich bereits auf der Homeseite. Aus diesem Grund habe ich dieses ‚Hindernis‘ genutzt um mir das #available Attribut näher anzusehen.&nbsp;</p>



<pre class="wp-block-code"><code>if #available(watchOS 9, *) {
     // perform code at watchOS version &gt;= 9.0.0
} else {
     // perform code at watchOS version &lt; 9.0.0
} //: VStack (content)</code></pre>



<p>#available und @available ermöglichen es Teile des Codes für bestimmte Plattformen/Versionen auszuführen oder nicht. So ist es mir möglich das ‚TextField‘ wie gewünscht in watchOS Versionen &gt;9.0 anzuzeigen und eine vereinfachte Version des Textes in watchOS Versionen &lt;9.0 darzustellen.&nbsp;</p>



<p><strong>Vielleicht interessant:&nbsp;</strong></p>



<p>#available wird genutzt um Codezeilen zu markieren, welche ausgeführt werden sollen oder nicht. Sie stehen in Verbindung mit Conditions wie if oder guard, wie oben.&nbsp;</p>



<p>@available wird genutzt um Funktionen oder Klassen zu markieren, welche für die gegebenen Versionen/Plattformen verfügbar sind. &nbsp;</p>



<h3 class="wp-block-heading"><strong>Codeteile für watchOS und iOS</strong></h3>



<p>Beide Notizen-Apps, iOS und watchOS, folgen der selben Logik. Um Code-Duplikitionen zu vermeiden, habe ich einen Ordner im Root-Verzeichnis des Projekts angelegt, welcher die Logik für beide Elemente beinhalten soll. Im ersten Moment hat dies nicht funktioniert. In diesem Schritt war wichtig zu beachten, dass die Erstellten Files, welche die Logik enthalten, für beide Projekte, iOS und watchOS, im File Inspektor freigegeben sind.&nbsp;</p>



<h3 class="wp-block-heading"><strong>Speichern von Notizen auf dem Gerät&nbsp;</strong></h3>



<p>Für das Speichern von Dateien stehen unterschiedliche Wege zur Verfügung. Die Daten können in der iCloud, mit Hilfe des CloudKits, oder auf dem LocalStorage des Geräts gespeichert werden. Für diesen Anwendungsfall habe ich mich für den LocalStorage entschieden.&nbsp;</p>



<p>Vorteile des Speichern der Daten in der iCloud ist die Möglichkeit die Daten auf allen Geräten welche mit der iCloud verbunden sind einfach zu teilen. Sollte somit einmal eine weitere Platform (z.B. macOS) auch diese App erhalten wäre eine Implementierung der Datenspeicherung in der iCloud von Vorteil.</p>



<p>Aus Interesse habe ich mich jedoch für die Datenspeicherung im Filesystem des Geräts entschieden. Außerdem bleibt die App so unabhängig von einer aufrechten Internetverbindung. Um auf die Datenstruktur des Geräts zugreifen zu kommen ist das Interface <strong>FileManager</strong> verwendet worden. Diese Klasse ermöglicht es Daten im Filesystem des Geräts zu speichern, einzusehen, zu bewegen und zu löschen.</p>



<p>Meine App erlaubt es durch die Verwendung von FileManager Notizen zu speichern, einzusehen, zu bearbeiten und zu löschen.&nbsp;</p>



<h3 class="wp-block-heading"><strong>Kommunikation zwischen iPhone und AppleWatch&nbsp;</strong></h3>



<p>Eine spannende Phase innerhalb des Projekts war die Kommunikation zwischen Watch und Smartphone Applikation. Die Daten sollten von einem Gerät gesendet und auf der jeweiligen Begleit-App aktualisiert werden. Hierfür ist das Framework <strong>WatchConnectivity</strong> verwendet worden. Dieses Framework erlaubt die Datenübertragung zwischen verbundenen watchOS und iOS Geräten.&nbsp;</p>



<p>Bevor ich die Funktion zu meiner App hinzugefügt habe, habe ich eine kleine Test-App entwickelt um das Framework zu testen, einige Ausschnitte meiner WatchConnectivityTest App:</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-video"><video controls muted src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2023/06/IMG_0585-2.mov"></video></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-video"><video controls muted src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2023/06/IMG_0583-2.mov"></video></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-video"><video controls muted src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2023/06/IMG_0584-2.mov"></video></figure>
</div>
</div>



<p>Mit Hilfe des erlernten Wissens habe ich die Übertragung der Daten zwischen den Geräten zu der App hinzugefügt.&nbsp;</p>



<h3 class="wp-block-heading"><strong>Push-Notification als Erinnerung</strong></h3>



<p>Im Zuge der Umsetzung ist der Wunsch aufgekommen an Notizen durch eine Push-Notification zeitlich erinnert zu werden. Ein ‚Timepicker‘ erlaubt die Auswahl des gewünschten Zeitpunkts. Eine Funktion, welche sich an dem <strong>UNUserNotificationCenter</strong> Objekt bedient, erstellt und plant die Erstellung der Notification. Auch kann die Notification mit Hilfe der zugehörigen id aufgehoben werden.&nbsp;</p>



<div class="wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-ad2f72ca wp-block-group-is-layout-flex">
<div class="wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-ad2f72ca wp-block-group-is-layout-flex">
<figure class="wp-block-image size-full"><img decoding="async" width="828" height="1792" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2023/06/IMG_0952.png" alt="" class="wp-image-10996" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2023/06/IMG_0952.png 828w, https://mobile.fhstp.ac.at/wp-content/uploads/2023/06/IMG_0952-710x1536.png 710w" sizes="(max-width: 828px) 100vw, 828px" /><figcaption class="wp-element-caption">Einen Reminder setzen</figcaption></figure>



<figure class="wp-block-image size-full"><img decoding="async" width="828" height="1792" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2023/06/IMG_0953.jpg" alt="" class="wp-image-10997" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2023/06/IMG_0953.jpg 828w, https://mobile.fhstp.ac.at/wp-content/uploads/2023/06/IMG_0953-710x1536.jpg 710w" sizes="(max-width: 828px) 100vw, 828px" /><figcaption class="wp-element-caption">Push-Notification auf iOS</figcaption></figure>
</div>
</div>



<p></p>



<h2 class="wp-block-heading"><strong>Meine Learnings</strong></h2>



<p>Die Umsetzung des Projekts hat mir sehr viel Spaß bereitet und motiviert mich mehr in der nativen, vor allem der nativen Apple-Applikation Entwicklung, zu lernen. Auch hat mir das Projekt gezeigt, dass die Entwicklung für Wearables bzw. geräteübergreifende Applikationen sehr spannend ist.&nbsp;</p>



<p>Ich hatte bisher wenig Vorkenntnisse in der nativen iOS und keine in der watchOS Entwicklung. xCode, Swift und SwiftUI bieten jedoch eine einfache Implementierung für die unterschiedlichen Apple’s OS-Plattformen &#8211; so macht die gleichzeitige Entwicklung für mehrere Plattformen große Freude.&nbsp;</p>



<p>Je weiter ich im Projekt vorangeschritten bin, desto mehr habe ich gelernt und desto mehr sind mir Codeteile aufgefallen, welche ich ohne Verlust einfacher schreiben hätte können. Die Erfahrung aus anderen Technologien hat mir beim Einstieg in die die Entwicklung mit Swift sehr geholfen. Swift hat jedoch seinen eigenen Charm und bietet, in Hinblick für die Entwicklung von Apple’s OS-Applikationen, viele Hilfestellungen und Vereinfachungen. Hier habe ich durch das Projekt einiges kennenlernen dürfen, doch freue ich mich bereits in weiteren Projekten mehr zu erfahren.&nbsp;</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="2560" height="2560" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2023/06/NoteApp-3-scaled.jpg" alt="" class="wp-image-10995" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2023/06/NoteApp-3-scaled.jpg 2560w, https://mobile.fhstp.ac.at/wp-content/uploads/2023/06/NoteApp-3-150x150.jpg 150w, https://mobile.fhstp.ac.at/wp-content/uploads/2023/06/NoteApp-3-1536x1536.jpg 1536w, https://mobile.fhstp.ac.at/wp-content/uploads/2023/06/NoteApp-3-2048x2048.jpg 2048w, https://mobile.fhstp.ac.at/wp-content/uploads/2023/06/NoteApp-3-120x120.jpg 120w" sizes="auto, (max-width: 2560px) 100vw, 2560px" /></figure>



<p></p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/native-notizen-app/">Native Notizen App</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/2023/06/IMG_0585-2.mov" length="9518040" type="video/quicktime" />
<enclosure url="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2023/06/IMG_0583-2.mov" length="18394836" type="video/quicktime" />
<enclosure url="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2023/06/IMG_0584-2.mov" length="18024385" type="video/quicktime" />

			</item>
		<item>
		<title>StudyApp 2.0: Jetzt wird weiter gelernt</title>
		<link>https://mobile.fhstp.ac.at/allgemein/studyapp-2-0-jetzt-wird-weiter-gelernt/</link>
		
		<dc:creator><![CDATA[Michelle Markl]]></dc:creator>
		<pubDate>Thu, 19 Jan 2023 15:51:02 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=10345</guid>

					<description><![CDATA[<p>Meine StudyApp hat ein Re-Design bekommen. Das Glow-up bringt auch ein paar verbesserte Funktionen, sowie auch ganz neue Features mit sich. Für die Implementierung der neuen StudyApp ist Ionic in Verbindung mit Firebase verwendet worden. </p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/studyapp-2-0-jetzt-wird-weiter-gelernt/">StudyApp 2.0: Jetzt wird weiter gelernt</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Die StudyApp ist erweitert worden. Einen Eindruck der StudyApp 1.0 ist <a href="https://akirchknopf-21110.php.fhstp.cc/allgemein/studyapp-projektdokumentation/">hier</a> zu finden. Im Fokus stehen:  </p>



<ul class="wp-block-list"><li><strong>Re-Design:</strong> Das derzeitige Design ist sehr simpel und langweilig. Eine Kollegin aus dem Bereich MDD (Grafik Design) hat ein Design entworfen um die App aufregender zu gestalten. </li><li><strong>Offline Nutzbar:</strong> Es soll möglich sein die Applikation offline nutzen zu können. Dies bietet den Vorteil, dass der Nutzer/die Nutzerin überall lernen kann, auch im Zug bei schlechtem Internetzugang im Tunnel oder im Flugzeug. </li><li><strong>Anbindung an Firebase Datenbank:</strong> Abschließend werden die Daten regelmäßig in einer Datenbank gesichert. Ich möchte die Zeit nutzen um mich näher mit Firebase beschäftigen, dabei soll es um die NoSQL-Cloude-Datenbank Firebase handeln. </li></ul>



<h3 class="wp-block-heading"><strong>Technologien/Techniken, mit welchen ich arbeiten werde</strong></h3>



<p>Das Frontend wird, wie bereits genutzt, mit dem UI Toolkit <strong>Ionic</strong>, Angular als Basis, umgesetzt. Ich möchte meine Kenntnisse in diesem Framework weiter vertiefen. Aus diesem Grund werde ich mich im Zuge des Projekts auch mit dem CSS-Präprozessor <strong>SCSS</strong> auseinandersetzten. Die NoSQL-Cloude-Datenbank <strong>Firebase</strong> wird die bisherige SQL Datenbank ersetzten.&nbsp;</p>



<h3 class="wp-block-heading"><strong>Recap: Das war die StudyApp 1.0</strong></h3>



<p>Meine StudyApp Projektdokumentation ist <a href="https://akirchknopf-21110.php.fhstp.cc/allgemein/studyapp-projektdokumentation/">hier</a> zu finden. Auf der Abbildung <em>„Ausschnitt aus der StudyApp 1.0“ </em>gibt einen kleinen Einblick in die bestehende StudyApp Applikation.<em>&nbsp;</em></p>



<figure class="wp-block-image size-medium"><img loading="lazy" decoding="async" width="770" height="400" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2022/10/AbschlussPraesentation.001-2-770x400.jpeg" alt="Das Bild zeigt Ausschnitt aus der bestehenden StudyApp, den Homescreen, eine Frage zum beantworte und das erstellen einer Frage. Auch ist ein Bildausschnitt der API Zusammenfassung zu sehen. " class="wp-image-10346" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2022/10/AbschlussPraesentation.001-2-770x400.jpeg 770w, https://mobile.fhstp.ac.at/wp-content/uploads/2022/10/AbschlussPraesentation.001-2-1540x800.jpeg 1540w" sizes="auto, (max-width: 770px) 100vw, 770px" /><figcaption>StudyApp 2.0: Ausschnitt aus der StudyApp 1.0</figcaption></figure>



<p>Die Applikation basierte auf den Frameworks Ionic (Angular) und im Backend NestJS. Nachdem sich der Nutzer/die Nutzerin über Google oder mit seiner/ihrer Email-Adresse registriert bzw. angemeldet, hat der Nutzer/die Nutzerin die Möglichkeit Studysets zu erstellen. Die Fragen werden vom User als Freitext-Antwort oder als Multiple Choice Frage formuliert. Je nach Fragetyp werden die Karteikarten unterschiedlich präsentiert. Ein Quiz bietet die Möglichkeit das gelernte Wissen zu überprüfen.</p>



<h2 class="wp-block-heading">Neues Design bringt auch neue Features mit</h2>



<p>Im Zuge der Implementierung liegt ein großes Augenmerk auf der Wartbarkeit des Codes. Dies ist durch eine feine Gliederung in diverse Komponenten, Wiederverwendung von Code und der Nutzung von SCSS umgesetzt worden. So sind die neuen Features und das Design umgesetzt worden:</p>



<h3 class="wp-block-heading">Neuer Look für die Study App</h3>



<p>Das Design für die neue StudyApp ist in Kooperation mit einer Kollegin aus dem Bereich <em>Digital Design (Grafik Design)</em> entstanden. Das Design orientiert sich an hellen und freundlichen Farben, welche zum lernen anregen soll. Neben der hellen Version ist auch eine Version zur Unterstützung von dark-themes beachtet worden. Diese soll jedoch in weiteren Schritten farblich angepasst werden. </p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="963" height="625" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2023/01/Unbenannt-1_Zeichenflaeche-1-01.png" alt="" class="wp-image-10617" /><figcaption>Login &#8211; Homescreen &#8211; Lernset anlegen</figcaption></figure></div>


<p>Im Zuge des Projekts habe ich mich erstmalig mit dem CSS-Präprozessor <strong>SCSS</strong> beschäftigt. Vor allem das Erstellen der Hintergründe, welche aus einzelnen Containern besteht, ist durch die Nutzung von SCSS vereinfacht. Auch die Überarbeitung des CSS Codes wurde durch die verwendete Stylesheet-Sprache wesentlich einfacher. Sowie die Nutzung von Variablen für einzelne Werte, z.B. Farbwerte, machte die Änderung von Primär-, Sekundärfarben, etc., hat die Wartung des Codes maßgeblich erleichtert. </p>



<h3 class="wp-block-heading">Offline Nutzung durch Datensicherung im Local Storage</h3>



<p>Außerdem sind neben dem Design auch Features angepasst und hinzugefügt worden. Eine wesentliche Neuerung ist, dass Lernsets nun auch auf dem Gerät gespeichert werden können. Aus diesem Grund ist es nun möglich die App auch offline nutzen zu können. </p>



<h3 class="wp-block-heading">Quiz und Lernen mit neuen Features</h3>



<p>Darüberhinaus ist auch das Quiz, welches zur Wissensüberprüfung dient, überarbeitet worden. Das Ziel dieses App Abschnitts ist es, eine Prüfung zu Simulieren.</p>



<p>Die größte Neuerung innerhalb des Quiz und des Lernens ist die Überprüfung von Textaufgaben. Der Nutzer/Die Nutzerin entscheidet nicht mehr selbst ob eine Frage richtig ist oder nicht, sondern die App. Aus diesem Grund werden die Multiple Choice Fragen mit Hilfe der von dem Nutzer/derNutzerin angelegten Lernkarten auf Richtigkeit überprüft. Hingegen wird für die Bewertung der Textfragen eine Library verwendet. Mithilfe dieser Library wird die Übereinstimmung des Textinhaltes überprüft. </p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="962" height="625" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2023/01/Unbenannt-1_Zeichenflaeche-1-02.png" alt="" class="wp-image-10619" /><figcaption>Einfaches Lernen &#8211; Lernen mit dem Algorithmus &#8211; Quiz (Ergebnis)</figcaption></figure></div>


<p>Abschließend bekommt der Nutzer/die Nutzerin die Ergebnisübersicht. Außerdem können alle Fragen angesehen werden. So kann der Nutzer/die Nutzerin sehen wo Fehler passiert sind.</p>



<h3 class="wp-block-heading">Anbindung an eine NoSQL Datenbank</h3>



<p>Um auf unterschiedlichen Geräten Lernkarten anlegen oder lernen zu können, ist die Applikation an eine Datenbank angebunden worden. Hier habe ich mich für die NoSQL Datenbank Firebase entschieden. </p>



<p>Die Daten werden an unterschiedlichen Punkten an die Datenbank übertragen, wenn das Smartphone online ist &#8211; z.B. ein erstelltes Lernset, Aktualisierung der Lernkarte während dem Lernen, löschen eines Lernsets, &#8230; . Da die Daten ohnehin auf dem Smartphone-Speicher existieren ist ein stetiger Abruf der Daten von der Datenbank nicht notwendig. </p>



<p>Um aktuelle Daten von der Datenbank zu erhalten stehen dem/der NutzerIn zwei Möglichkeiten zur Verfügung: </p>



<ul class="wp-block-list"><li>Beim Öffnen der Applikation werden die Daten aus dem lokalen Speicher mit jenen Daten aus der Datenbank aktualisiert. </li><li>Die Daten können über einen dafür vorgesehenen Button innerhalb des Menüs aktualisiert werden. </li></ul>



<p>Durch die Nutzung einer Datenbank, und nicht nur des lokalen Speichers, hat sich die Möglichkeit ergeben alle Lernsets anzuzeigen, so ist die &#8216;Lernwelt&#8217; entstanden. Hier können generierte Lernsets für andere Nutzer veröffentlicht werden.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="962" height="625" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2023/01/Unbenannt-1_Zeichenflaeche-1-03.png" alt="" class="wp-image-10618" /><figcaption>Lernwelt</figcaption></figure></div>


<h3 class="wp-block-heading">Jetzt läuft die App auf dem Smartphone</h3>



<p>Der Vorläufer, StudyApp 1.0, ist bisher nicht als native Applikation getestet worden. Nun ist es möglich die Applikation auf mobilen Endgeräten, egal ob auf iPhone (iOS) oder Android Smartphones, zu testen. Um das Konzept vollständig darstellen zu können ist ein splash-screen, sowie das Logo für das App Icon in die Applikation integriert worden. </p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="962" height="626" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2023/01/Unbenannt-1_Zeichenflaeche-1-Kopie-1.png" alt="" class="wp-image-10634" /><figcaption>Homescreen auf iOS (links) und Android (rechts)</figcaption></figure>



<p>Ein große Herausforderung hat der Buildprozess auf iOS Geräte dargestellt. Die Problematik äußerte sich als white-screen/blank-page (auch häufig zu finden als white screen of death) nach dem generierten splash-screen. Im Zuge der Recherche hat sich herausgestellt, dass durch die Nutzung des Firebase-Module zur Authentifizierung das app.module.ts angepasst werden muss.</p>



<p>von:</p>



<pre class="wp-block-code"><code>...
provideAuth(() =&gt; getAuth()),
...</code></pre>



<p>zu:</p>



<pre class="wp-block-code"><code>...
provideAuth(() =&gt; {
  if (Capacitor.isNativePlatform()) {
    return initializeAuth(getApp(), {
      persistence: indexedDBLocalPersistence,
    });
  } else {
    return getAuth();
  }
}),
...</code></pre>



<h2 class="wp-block-heading">Das ist die neue StudyApp 2.0</h2>



<p>Die StudyApp hat ein komplettes Re-Design bekommen, sowie ein paar neue Features und die Möglichkeit die App auch offline nutzen zu können. Meine größten Learnings waren die Integration von Firebase in das Projekt, sowie die Nutzung von SCSS und dem LocalStorage. </p>



<p></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/2023/01/StudyApp-ImagePic-3-1540x800.png" alt="" class="wp-image-10636" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2023/01/StudyApp-ImagePic-3-1540x800.png 1540w, https://mobile.fhstp.ac.at/wp-content/uploads/2023/01/StudyApp-ImagePic-3-770x400.png 770w" sizes="auto, (max-width: 1540px) 100vw, 1540px" /></figure>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/studyapp-2-0-jetzt-wird-weiter-gelernt/">StudyApp 2.0: Jetzt wird weiter gelernt</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>AR mit Vuforia &#8211; Eine kleine Einführung</title>
		<link>https://mobile.fhstp.ac.at/allgemein/ar-mit-vuforia-eine-kleine-einfuehrung/</link>
		
		<dc:creator><![CDATA[Michelle Markl]]></dc:creator>
		<pubDate>Tue, 17 Jan 2023 14:24:00 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=10449</guid>

					<description><![CDATA[<p>Augmented Reality Applikationen lassen sich in fast allen Bereichen des Alltags finden. Vuforia ist eine Library, welche erlaubt einfach und schnell AR Applikationen zu erstellen. Was Vuforia genau ist wird in diesem Blogeintrag an einem Hands-on Beispiel erläutert.</p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/ar-mit-vuforia-eine-kleine-einfuehrung/">AR mit Vuforia &#8211; Eine kleine Einführung</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Egal ob in der Industrie, dem digitalen Lernen oder der Unterhaltung überall lassen sich Augmented Reality (AR) Applikationen finden. Mit Hilfe von Vuforia lassen sich schnell und einfach AR Anwendungen für diverse Anwendungsgebiete erstellen. In diesem Blogeintrag möchte ich kurz auf die Geschichte von Augmented Reality eingehen und die Vuforia Library zur Erstellung von AR Erlebnissen vorstellen. Abschließend stelle ich ein kurzes Beispielprojekt vor, welches die Anwendung von Vuforia demonstriert. </p>



<h2 class="wp-block-heading">Das ist Vuforia</h2>



<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-full is-style-default"><img loading="lazy" decoding="async" width="785" height="442" data-id="10454" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2023/01/mars_4_astronaut.jpg" alt="" class="wp-image-10454" /><figcaption>Mögliches Beispiel für AR in der Unterhaltung</figcaption></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1193" height="671" data-id="10455" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2023/01/vuforia-image-targets-feature.jpg" alt="" class="wp-image-10455" /><figcaption>Mögliches Beispiel für AR im Handel</figcaption></figure>
<figcaption class="blocks-gallery-caption">Beispiele für AR-Anwendungen (Bildquelle: <em>Image Targets | VuforiaLibrary</em>, o.&nbsp;D.)</figcaption></figure>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:100%">
<p>Die Vuforia Engine bietet eine Sammlung von Tools und Funktionen zur Entwicklung von Augmented Reality (AR) Anwendungen. Es wird Entwickler*innen ermöglicht, AR-Erlebnisse für mobile Geräte und Smartphones schnell und einfach zu erstellen. Mit Vuforia können Entwickler*innen digitale Inhalte in die reale Welt einbetten und Nutzer*innen interaktive AR-Erfahrungen bereitstellen. Die Plattform bietet unter anderem AR-Erlebnisse Marker-basierte und/oder Marker-los  zu erstellen. AR-Abenteuer können so für unterschiedliche Plattformen (Android, iOS, UWP) entwickelt werden. </p>
</div>
</div>



<p></p>



<h2 class="wp-block-heading">Doch was ist AR?</h2>



<p>Im Gegensatz zur Virtual Reality (VR), wo der/die Nutzer*in in eine digitale/virtuelle Welt eintaucht, bietet Augmented Reality (AR) digitale Inhalte innerhalb der realen Welt zu zeigen. Diese Technologie finden in unterschiedlichsten Bereichen Anwendung und wird auf unterschiedliche Weise verwendet.</p>



<ul class="wp-block-list"><li><strong>Mobile AR:</strong> AR-Anwendungen, die auf mobilen Geräten wie Smartphones oder Tablets verwendet werden.</li><li><strong>Head-Mounted Displays (HMDs):</strong> AR-Geräte, die auf dem Kopf getragen werden und die reale Welt mit digitalen Inhalten überlagern.</li><li><strong>Industrial AR: </strong>AR-Anwendungen, die in der Industrie zur Verbesserung von Prozessen und zur Erhöhung der Effizienz eingesetzt werden.</li><li><strong>Advertising AR: </strong>AR-Anwendungen, die im Marketing und in der Werbung verwendet werden, um Kunden interaktive Erlebnisse zu bieten.</li></ul>


<div class="wp-block-image">
<figure class="aligncenter size-medium"><img loading="lazy" decoding="async" width="770" height="400" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2023/01/vuforia-model-targets-770x400.jpg" alt="" class="wp-image-10456" /><figcaption>Anwendungsdarstellung für AR in der Industrie (Bildquelle: <em>Model Targets | VuforiaLibrary</em>, o.&nbsp;D.)</figcaption></figure></div>


<p>Wie aus der Aufzählung zu entnehmen, werden für die Darstellung der digitalen Inhalte häufig mobile Endgeräte wie Smartphones oder Tablets genutzt. AR ist schon jetzt in vielen Bereichen des täglichen Lebens zu finden und hat das Potential, viele Bereiche  zu verbessern und zu revolutionieren.</p>



<h2 class="wp-block-heading">So verwendest du die Vuforia Engine</h2>



<p>Für Weihnachten habe ich eine kleine AR-Weihnachtskarte erstellt. Umgesetzt habe ich das AR-Erlebnis mit Hilfe der Vuforia Engine und Elementen aus dem Unity Asset Store. Im folgenden möchte ich kurz erläutern wie auch ihr diese Karte nachbauen könnt.  </p>



<figure class="wp-block-image size-full"><img decoding="async" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2023/01/image-1-1.jpg" alt="" class="wp-image-10477" /><figcaption>Darstellung des Projektergebnis</figcaption></figure>



<h3 class="wp-block-heading">Projekt Set up </h3>



<p>Um ein AR-Abenteuer mit Hilfe von Vuforia erstellen zu können, muss das angelegte Unity Projekt wie folgt vorbereiten. </p>



<h4 class="wp-block-heading">Vuforia Package importieren</h4>



<div class="wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-ad2f72ca wp-block-group-is-layout-flex">
<p>Um Vuforia im Projekt nutzen zu können muss das Vuforia Package in das angelegte 3D Unity Projekt importiert werden. Dieses Package kann aus dem <a href="https://developer.vuforia.com/downloads/sdk">Vuforia Developer Portal</a> heruntergeladen werden. Hier können auch Packages  für die native Entwicklung für iOS oder Android geladen werden. </p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="2560" height="1255" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2023/01/image-scaled.jpg" alt="" class="wp-image-10457" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2023/01/image-scaled.jpg 2560w, https://mobile.fhstp.ac.at/wp-content/uploads/2023/01/image-1536x753.jpg 1536w, https://mobile.fhstp.ac.at/wp-content/uploads/2023/01/image-2048x1004.jpg 2048w" sizes="auto, (max-width: 2560px) 100vw, 2560px" /><figcaption>Download des Vuforia Package &#8211; Screenshot aus dem Vuforia Engine Developer Portal</figcaption></figure>
</div>



<p>Das eben geladene Package kann über <em>Assets -&gt; Import Package -&gt; Customer Package</em> in das Unity Projekt geladen werden. So werden hilfreiche Tools und Funktionen von Vuforia in das Projekt geladen, mit welchen die AR-Weihnachtskarte entwickelt wird. </p>



<h4 class="wp-block-heading">Kamera set-up</h4>



<p>Nun können wir mit dem Kamera Set-up beginnen. Die Default MainCamera kann entfernt werden. Diese wird durch die AR Camera, welche uns von Vuforia bereitgestellt wird, ersetzt. </p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="2560" height="1600" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2023/01/image-1-scaled.jpg" alt="" class="wp-image-10458" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2023/01/image-1-scaled.jpg 2560w, https://mobile.fhstp.ac.at/wp-content/uploads/2023/01/image-1-1536x960.jpg 1536w, https://mobile.fhstp.ac.at/wp-content/uploads/2023/01/image-1-2048x1280.jpg 2048w" sizes="auto, (max-width: 2560px) 100vw, 2560px" /><figcaption>Hinzufügen der Vuforia Engine AR Camera </figcaption></figure>



<p>Um die AR Camera optimal nutzen zu können, fügen wir einen Lizenzschlüssel hinzu. Diesen können wir im Vuforia Engine Developer Portal unter<em> Develop -&gt; License Manager </em>generieren lassen. Im Inspector, wenn die AR Camera ausgewählt ist, kann die Kamera Konfiguration mit einem Klick auf <em>Open Vuforia Engine Configurator</em> geöffnet werden. Nun kann der eben generierten Key in das dafür vorgesehene Feld (<em>App License Key</em>) eingefügt werden. </p>



<h3 class="wp-block-heading">Target anlegen </h3>



<p>Nun können die Targets, auf welche die digitalen Inhalte reagieren und daraufhin angezeigt werden, vorbereitet werden. Ich habe mir bereits eine physische Weihnachtskarte erstellt, auf welcher der digitale Weihnachtsbaum zu sehen sein soll. </p>



<h4 class="wp-block-heading">So lade ich meine Targets ins Projekt</h4>



<p>Im Vuforia Engine Developer Portal wird die erstellte Karte als .png oder .jpg Datei hochgeladen um diese später in unser Projekt importieren zu können. Hierfür wird im Vuforia Engine Developer Portal unter <em>Develop -&gt; Target Manager</em> eine neue Datenbank angelegt. Für dieses Beispiel wird eine Device Datenbank angelegt, so können Targets mittels einem generierten Package direkt in das Projekt importiert werden. Innerhalb der Datenbank werden die erstellten Targets, in diesem Fall die &#8216;christmas-card&#8217; hochgeladen.</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:50%">
<p>Für die Umsetzung der AR-Weihnachtskarte wird ein Image Target verwendet. Die Datei wird als .png oder .jpg Datei hochgeladen. Außerdem muss die Weiter des Objekts bestimmt werden und ein Name vergeben werden. Wie ein passendes Target gestaltet sein soll findest du in der <a href="https://library.vuforia.com/objects/best-practices-designing-and-developing-image-based-targets">Vuforia Dokumentation</a>.</p>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:50%">
<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/2023/01/image-7-1540x800.jpg" alt="" class="wp-image-10464" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2023/01/image-7-1540x800.jpg 1540w, https://mobile.fhstp.ac.at/wp-content/uploads/2023/01/image-7-770x400.jpg 770w" sizes="auto, (max-width: 1540px) 100vw, 1540px" /><figcaption>Hinzufügen von Image Targets in den Target Manager &#8211; Screenshot aus dem Vuforia Engine Developer Portal </figcaption></figure>
</div>
</div>



<p>Sind alle Targets in der erstellten Datenbank enthalten, wird die Datenbank unter <em>Download Database (All)</em> als Package für Unity heruntergeladen. Abschließend wird das  erstellte Package in das Unity Projekt (<em>Assets -&gt; Import Package -&gt; Customer Package</em>) importiert. </p>



<h4 class="wp-block-heading">Hinzufügen eines Targets in die Szene </h4>



<p>Um ein Image Target in die Unity Szene einfügen zu können, wird das Vuforia Engine Objekt Image Target in die Hierarchy eingefügt. Ist das erstellte Image Target ausgewählt werden im Inspector unter <em>Image Target Behaviour </em>folgende Einstellungen getroffen:</p>



<ul class="wp-block-list"><li>Type: From Database</li><li>Database: Hier sollte uns die importierte Datenbank als Auswahl angezeigt werden, in meinem Fall lautet der Name dieser &#8216;christmas&#8217;</li><li>Image Type: Hier sollte uns das importierte Image Target als Auswahl angezeigt werden, in meinem Fall lautet der Name dieses &#8216;christmas-card&#8217;</li></ul>



<p>Nun wird das ausgewählte Image Target in der Szene angezeigt. </p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="2560" height="1108" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2023/01/image-4-scaled.jpg" alt="" class="wp-image-10461" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2023/01/image-4-scaled.jpg 2560w, https://mobile.fhstp.ac.at/wp-content/uploads/2023/01/image-4-1536x665.jpg 1536w, https://mobile.fhstp.ac.at/wp-content/uploads/2023/01/image-4-2048x886.jpg 2048w" sizes="auto, (max-width: 2560px) 100vw, 2560px" /><figcaption>Hinzugefügtes Image Target in die Hierarchy</figcaption></figure>



<h3 class="wp-block-heading">Das erste AR-Objekt</h3>



<p>Im nächsten Schritt wird das 3D Objekt, welches digital angezeigt werden soll, platziert. In meinem Projekt nutze ich das Asset <a href="https://assetstore.unity.com/packages/3d/vegetation/trees/polycraft-christmas-tree-108277">POLYCRAFT &#8211; Christmas Tree von LowlyPoly</a> aus dem <a href="https://assetstore.unity.com">Unity Asset Store</a>. </p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:50%">
<p>Jene Objekte, welche bei der Erkennung des Image Targets angezeigt werden sollen, müssen innerhalb des Image Targets hinzugefügt werden. Innerhalb des Image Targets (tree Target) befindet sich nun der Tannenbaum in einer Gruppe mit der Dekoration, sowie zwei Virtuellen Button (siehe Interaktionen mit Hilfe von Virtuellen Button). </p>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:50%"><div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="1914" height="1310" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2023/01/image-8.jpg" alt="" class="wp-image-10465" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2023/01/image-8.jpg 1914w, https://mobile.fhstp.ac.at/wp-content/uploads/2023/01/image-8-1536x1051.jpg 1536w" sizes="auto, (max-width: 1914px) 100vw, 1914px" /><figcaption>Objekte auf dem Image Target platziert</figcaption></figure></div></div>
</div>



<p> </p>



<div class="wp-block-media-text alignwide is-stacked-on-mobile"><figure class="wp-block-media-text__media"><img loading="lazy" decoding="async" width="2060" height="1374" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2023/01/image-1-4.jpg" alt="" class="wp-image-10480 size-full" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2023/01/image-1-4.jpg 2060w, https://mobile.fhstp.ac.at/wp-content/uploads/2023/01/image-1-4-1536x1024.jpg 1536w, https://mobile.fhstp.ac.at/wp-content/uploads/2023/01/image-1-4-2048x1366.jpg 2048w" sizes="auto, (max-width: 2060px) 100vw, 2060px" /></figure><div class="wp-block-media-text__content">
<p>Nun kann erstmals das AR-Erlebnis getestet werden. Der Tannenbaum wird angezeigt, sobald das Image Target erkannt wird. </p>
</div></div>



<h3 class="wp-block-heading">Interaktionen mit Hilfe von Virtuellen Button </h3>



<p>Abschließen können Interaktionen zu den digitalen Inhalten hinzugefügt werden. Beispielsweise kann der Tannenbaum gedreht oder dekoriert/abdekoriert werden. </p>



<p>Um mit den virtuellen Inhalten Interagieren zu können, werden Virtuelle Button innerhalb des Image Targets hinzugefügt (bereits im vorherigen Schritt passiert). Diese können, wenn das Image Target ausgewählt ist, im Inspektor unter <em>Image Target Behaviour -&gt; Advanced -&gt; Add Virtual Button </em>generiert werden. Der erstellte Button wird auf dem Target platziert. </p>



<p>Nun kann das Verhalten der Objekte, beim Drücken der Button, erstellt werden. </p>



<h4 class="wp-block-heading">Dekorieren des Tannenbaums </h4>



<p>Beim Target Image wird eine Komponente hinzugefügt, welches ein Script erstellt. Der folgende Code kann im generierten Skript verwendet werden um den Tannenbaum zu dekorieren/ab zu dekorieren. </p>



<pre class="wp-block-code"><code>using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Vuforia;

public class btn_action_decorate : MonoBehaviour
{
    public GameObject obj;
    public VirtualButtonBehaviour Btn;
    private bool show = false;

    // Start is called before the first frame update
    void Start()
    {
        Btn.RegisterOnButtonPressed(OnButtonPressed);
        obj.SetActive(show);
    }

    public void OnButtonPressed(VirtualButtonBehaviour btn) {
        show = !show;
        obj.SetActive(show);
    }
}</code></pre>



<div class="wp-block-columns are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:50%">
<p>Nach dem das Skript gespeichert worden ist, können die Objekte mittels drang and drop der jeweiligen Variabel im Inspektor des Image Targets hinzugefügt werden. </p>
</div>



<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:50%">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="954" height="198" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2023/01/image.png" alt="" class="wp-image-10466" /><figcaption>Hinzufügen der Variablen des Skripts</figcaption></figure>
</div>
</div>



<div class="wp-block-media-text alignwide is-stacked-on-mobile"><figure class="wp-block-media-text__media"><img loading="lazy" decoding="async" width="2056" height="1406" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2023/01/image-1-5.jpg" alt="" class="wp-image-10481 size-full" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2023/01/image-1-5.jpg 2056w, https://mobile.fhstp.ac.at/wp-content/uploads/2023/01/image-1-5-1536x1050.jpg 1536w, https://mobile.fhstp.ac.at/wp-content/uploads/2023/01/image-1-5-2048x1401.jpg 2048w" sizes="auto, (max-width: 2056px) 100vw, 2056px" /></figure><div class="wp-block-media-text__content">
<p>Nun kann die Interaktion getestet werden. Die Dekoration erscheint, wenn eine &#8216;Berührung&#8217; des Virtuellen Button erkannt wird. </p>
</div></div>



<p>Ähnlich kann auch eine Animation erstellt werden um den Tannenbaum zu drehen. Probiert es doch einfach gleich selbst aus ????</p>



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



<p>Vuforia ist ein Tool, welches erlaubt, einfache AR-Erlebnisse schnell und mit wenig Aufwand zu erstellen und auch komplexere Projekte umzusetzen. Es erlaubt vor allem Anfänger*innen einen schnellen Einstieg in die Welt der AR Entwicklung. Ich kann das Tool jedem empfehlen um erste Erfahrungen in der Welt der Augmented Reality zu sammeln. </p>



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



<h4 class="wp-block-heading">Quellen:</h4>



<p><em>Image Targets | VuforiaLibrary</em>. (o.&nbsp;D.).&nbsp;https://library.vuforia.com/objects/image-targets</p>



<p><em>Model Targets | VuforiaLibrary</em>. (o.&nbsp;D.).&nbsp;https://library.vuforia.com/objects/model-targets</p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/ar-mit-vuforia-eine-kleine-einfuehrung/">AR mit Vuforia &#8211; Eine kleine Einführung</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>NLP Augmentation für Social-Media-Postings</title>
		<link>https://mobile.fhstp.ac.at/allgemein/nlp-augmentation-fuer-social-media-postings/</link>
		
		<dc:creator><![CDATA[Michelle Markl]]></dc:creator>
		<pubDate>Tue, 30 Aug 2022 13:11:47 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=10180</guid>

					<description><![CDATA[<p>Im Zuge meines Mitwirken bei Counter Speech, habe ich unterschiedliche NLP Augmentation Libraries recherchiert, um die Testdatenmenge zu vergrößern. Aus diesem Grund habe ich die NLP Augmentation Libraries ‚nlpaug‘ und ‚textattack‘ getestet. ‚nlpaug‘ bietet für das Projekt eine höhere Datendiversität, was für das Projekt von Vorteil ist. </p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/nlp-augmentation-fuer-social-media-postings/">NLP Augmentation für Social-Media-Postings</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Von April bis August 2022 durfte ich am Forschungsprojekt CounterSpeech (dt. Gegenrede) mitwirken. Das Projekt beschäftigt sich mit einer Methode, um Gegenrede in Social media Plattformen hervorzuheben, um so User*innen zu ermutigen Zivilcourage zu zeigen. Für dieses Ziel soll ein Machine Learning Konzept entwickelt werden, welches diese Gegenreden erkennt. Um das Modell bestmöglich zu trainieren, werden so viele Trainingsdaten wie möglich benötigt. Mit Hilfe einer passenden NLP Augmentation Library sollen Social-Media Einträge sinngemäß vervielfacht werden, um die Trainingsdaten für das Machine Learning Produkt zu vergrößern. </p>



<h2 class="wp-block-heading"><strong>Vorbereitung&nbsp;</strong></h2>



<p>Im ersten Schritt, meiner Mitarbeit am Forschungsprojekt, habe ich mich mit den Grundbegriffen der Materie auseinandergesetzt. &nbsp;</p>



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



<p>Natural Language Processing (NLP) beschreibt Lösungen zur Verarbeitung von natürlicher Sprache (Luber, 2019). Mit Hilfe von Methoden aus den Sprachwissenschaften, kombiniert mit moderner Informatik soll Text, gesprochen oder geschrieben, erfasst und computerbasiert verarbeitet werden.</p>



<p>Hierbei bedient sich NLP an Methoden des Maschine Learnings, einem Teilbereich der Künstlichen Intelligenz (Luber, 2019). Es müssen Lösungen geschaffen werden, um die komplexe menschliche Sprache erkennen, analysieren und den Sinn extrahieren zu können. Die Herausforderung an die Methodik besteht darin komplexe Textzusammenhänge, Sachverhalte und Mehrdeutigkeit (Beispiele hierfür sind Ironie oder rhetorische Fragen) zu erkennen und richtig zu verarbeiten.</p>



<p>Anwendungsfelder, welche sich bereits finden lassen sind: Texte aus Dokumenten extrahieren, sprachgesteuerte Assistenten oder gesprochene Sprache in Echtzeit übersetzen (Luber, 2019).&nbsp;</p>



<h3 class="wp-block-heading"><strong>Augmentation&nbsp;</strong></h3>



<p>Die Data Augmentation ist eine Technik, welche es ermöglicht Daten künstlich zu erhöhen (Tidke, 2022). Diese Methode wird verwendet, um das Problem zu weniger Trainingsdaten zu umgehen und um die Datendiversität zu erhöhen. Durch eine größere Trainingsdatenmenge, soll das Machine Learning Modell verbessert werden.</p>



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



<p>Natural Language Processing Augmentation beschreibt somit Erweiterungstechniken für Textdaten. In dem Artikel, welchen ich für meine Recherche zur Verfügung bekommen habe, beschreibt Grg (2022) drei Techniken der Data Augmentation.&nbsp;</p>



<ul class="wp-block-list"><li>Rule-Based: Easy Data Augmentation</li><li>Example Interpolation Techniques: MIXUP, SEQ2MIXUP</li><li>Model-Based: Seq2seq, language model, back translation, fine-tuning GPT-2, paraphrasing.</li></ul>



<p>Easy Data Augmentation (EDA) ist die am häufigst verwendete Methode des regelbasierten Verfahren. Die Technik umfasst folgende Hauptaufgaben (Grg, 2022), auch auf Abb. 1 zu sehen:&nbsp;</p>



<ul class="wp-block-list"><li>Synonym Replacement: Eine Anzahl an Wörter wird mit Synonymen ausgetauscht </li><li>Random Deletion: Eine Anzahl an Wörtern wird aus dem Text gelöscht </li><li>Random Swap: Zufällige zwei Wörter werden getauscht</li><li>Random Insertion: Ein zufälliges Synonym eines Wortes des Texts wird in den Text eingefügt</li></ul>



<p>Tidke (2022) führt weitere zwei Methoden der Datenerweiterung an: Generative Models und Backtranslation. Diese Erweiterungsmöglichkeiten können auf vier unterschiedlichen Ebenen eines Texts ausgeführt werden: (1) Zeichen, (2) Wort, (3) Phrase und (4) Dokument.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="858" height="554" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2022/08/NLPAug_1.jpg" alt="Methoden zur Datenerweiterung" class="wp-image-10183" /><figcaption>Abb. 1: NLP Augmentation Methoden (Tidke, 2022)</figcaption></figure>



<h2 class="wp-block-heading"><strong>NLP Augmentation für Counter Speech Postings</strong></h2>



<p>Als Grundlage zur Recherche der NLP Augmentation Libraries dient der Blogeintrag von Grg (2022). Durch weitere Recherche im Bereich ist die Liste der Libraries um TextAttack erweitert worden. Die nachstehenden Libraries sind auf Aktualität und Methodenvielfalt analysiert worden.&nbsp;</p>



<p>Libraries sind:</p>



<ul class="wp-block-list"><li>TextAugment</li><li>AugLy </li><li>Nlpaug </li><li>Parrot Paraphrase</li><li>Pegasus Paraphrase</li><li>TextAttack</li></ul>



<p>nlpaug und TextAttack sind in den folgenden Schritten näher für den Anwendungsbereich getestet worden. Als sinnvolle Methode für den Anwendungsfall ist die Augmentation Methode BackTranslation erachtet worden &#8211; die Libraries sind mit dieser Methode getestet worden. </p>



<h3 class="wp-block-heading"><strong>BackTranslation&nbsp;</strong></h3>



<p>Anhand der Backtranslation Methode sollten die Libraries nlpaug und TextAttack verglichen werden. Neue Sätze werden entwickelt, indem ein Text in eine andere Sprache übersetzt wird, der neue Satz wird wieder zurück übersetzt, wie auf Abb. 2 zu erkennen ist (Tidke, 2022).</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1386" height="484" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2022/08/Backtranslation.jpg" alt="Visualisierung der Backtranslation Methode. Ein Satz wird von seiner Originalsprache in eine andere Sprache übersetzt und wieder zurück übersetzt." class="wp-image-10184" /><figcaption>Abb. 2: Backtranslation (vgl. Chaudhary, 2020; <a href="https://amitness.com/2020/02/back-translation-in-google-sheets/">https://amitness.com/2020/02/back-translation-in-google-sheets/</a>)</figcaption></figure>



<h3 class="wp-block-heading"><strong>TextAttack&nbsp;</strong></h3>



<p>Das git-Repo für textattack finden Sie unter: <a href="https://github.com/QData/TextAttack">https://github.com/QData/TextAttack</a></p>



<p>TextAttack bietet Lösungen für adversarial attacks, adversarial training und NLP Augmentation. Zum Testen der Augmentationfunktion ist die BackTranslation Methode herangezogen worden. Ein Projektspezifischer Testsatz dient als Input für die Methode, sowie die passenden Sprachmodelle von Hugging Face (<a href="https://huggingface.co">https://huggingface.co</a>) und den Abkürzung zur Sprachidentifikation, wie auf dem Codebeispiel zu sehen ist.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
from textattack.transformations.sentence_transformations import BackTranslation
from textattack.constraints.pre_transformation import RepeatModification, StopwordModification
from textattack.augmentation import Augmenter

text = &#039;We are always developing as time goes on and same sex relationships are a part of the world now, why would we not educate our children on different ways of life?’

transformation = BackTranslation(
    src_lang=&quot;en&quot;,
    target_lang=&quot;es&quot;,
    src_model=&quot;Helsinki-NLP/opus-mt-ROMANCE-en&quot;,
    target_model=&quot;Helsinki-NLP/opus-mt-en-ROMANCE&quot;,
    chained_back_translation=0,
)

constraints = &#x5B; RepeatModification(), StopwordModification() ]

augmenter = Augmenter(
	transformation = transformation, 
	constraints = constraints
)

augmenter.augment(text)
</pre></div>


<p>Bei näherer Betrachtung der Dokumentation ist aufgefallen, dass für die zusätzlichen Sprachparameter eine Einschränkung besteht. Abb. 3 zeigt das Ergebnis des oberen Codebeispiels.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="2024" height="192" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2022/08/AUG_results_textattack.jpg" alt="Ergebnis der Textaugmentierung mit textattack" class="wp-image-10185" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2022/08/AUG_results_textattack.jpg 2024w, https://mobile.fhstp.ac.at/wp-content/uploads/2022/08/AUG_results_textattack-1536x146.jpg 1536w" sizes="auto, (max-width: 2024px) 100vw, 2024px" /><figcaption>Abb. 3: Ergebnis der Text Augmentierung mittels TextAttack</figcaption></figure>



<h3 class="wp-block-heading"><strong>nlpaug&nbsp;</strong></h3>



<p>Das git-Repo für nlpaug finden Sie unter: <a href="https://github.com/makcedward/nlpaug">https://github.com/makcedward/nlpaug</a></p>



<p>Nlpaug ist eine Library zur Textdatenerweiterung. Zum Testen der enthaltenen BackTranslation Methode ist das passende Code-Beispiel aus der Dokumentation herangezogen worden. Die Funktion ist mit einem für das Projekt relevanten Beispielsatz getestet worden. Der folgende Code Ausschnitt zeigt, wie die BackTranslation Methode aufgebaut ist.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
import nlpaug.augmenter.word as naw 

text = &quot;We are always developing as time goes on and same sex relationships are a part of the world now, why would we not educate our children on different ways of life?&quot;

back_translation_aug = naw.BackTranslationAug(
    from_model_name=&quot;Helsinki-NLP/opus-mt-en-de&quot;, 
    to_model_name=&quot;Helsinki-NLP/opus-mt-de-en&quot;
)

back_translation_aug.augment(text)
</pre></div>


<p>nlpaug bedient sich an den Sprachmodellen von Hugging Face (<a href="https://huggingface.co">https://huggingface.co</a>), ebenso wie TextAttack. Eine Funktion ist entwickelt worden, um unterschiedliche Sprachen schnell testen zu können, die unterschiedlichen Ergebnisse sind auf Abb. 4 abgebildet. Es ist zu erkennen, dass die Ergebnisse je nach Sprache sehr unterschiedlich ausfallen können. Trotz der unterschiedlichen Resultate, bleibt die Aussage des Postings gleich.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="2018" height="1236" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2022/08/AUG_results_nlpaug.jpg" alt="Ergebnis der Textaugmentierung mit nlpaug" class="wp-image-10186" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2022/08/AUG_results_nlpaug.jpg 2018w, https://mobile.fhstp.ac.at/wp-content/uploads/2022/08/AUG_results_nlpaug-1536x941.jpg 1536w" sizes="auto, (max-width: 2018px) 100vw, 2018px" /><figcaption>Abb. 4: Ergebnisse der Text Augmentierung mittels nlpaug</figcaption></figure>



<h2 class="wp-block-heading"><strong>Fazit&nbsp;</strong></h2>



<p>Zusammenfassend bietet nlpaug mehr Freiheit im Sinne der Sprachmöglichkeiten, da die Methode dieser Library nur auf die Sprachmodelle von <a href="http://huggingface.com">huggingface.com</a> (Link nochmal nachschauen) beschränkt ist, Modelle beschriftet mit „Helsinki-NLP/“ . Im Vergleich zu nlpaug ist textattack hier durch weitere geforderte Sprachparameter beschränkt. Aus diesem Grund bietet nlpaug durch die unterschiedlichen Sprachmodelle eine höhere Datendiversität, was für das Projekt von Vorteil ist. </p>



<p></p>



<h2 class="wp-block-heading"><strong>Quellen:</strong></h2>



<p>Grg, P. (2022, 5. März). NLP Data Augmentation &#8211; Pema Grg. Medium. Abgerufen am 29. März 2022, von <a href="https://pemagrg.medium.com/nlp-data-augmentation-a346479b295f">https://pemagrg.medium.com/nlp-data-augmentation-a346479b295f</a></p>



<p>Luber, S. (2019, 19. März). Was ist Natural Language Processing? BigData-Insider. Abgerufen am 27. März 2022, von <a href="https://www.bigdata-insider.de/was-ist-natural-language-processing-a-590102/">https://www.bigdata-insider.de/was-ist-natural-language-processing-a-590102/</a></p>



<p>Tidke, P. (2022, 26. Februar). Text Data Augmentation in Natural Language Processing with Texattack. Analytics Vidhya. Abgerufen am 28. März 2022, von <a href="https://www.analyticsvidhya.com/blog/2022/02/text-data-augmentation-in-natural-language-processing-with-texattack/">https://www.analyticsvidhya.com/blog/2022/02/text-data-augmentation-in-natural-language-processing-with-texattack/</a></p>



<p>Titelbild: Bild von <a href="https://pixabay.com/de/users/geralt-9301/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=2466833">Gerd Altmann</a> auf <a href="https://pixabay.com/de//?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=2466833">Pixabay</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/nlp-augmentation-fuer-social-media-postings/">NLP Augmentation für Social-Media-Postings</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>einfache ÜbersetzerApp (iOS + Android)</title>
		<link>https://mobile.fhstp.ac.at/allgemein/einfache-uebersetzerapp-ios-android/</link>
		
		<dc:creator><![CDATA[Michelle Markl]]></dc:creator>
		<pubDate>Tue, 21 Jun 2022 18:41:29 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=10103</guid>

					<description><![CDATA[<p>Im laufe des zweiten Semesters (SS 2022) wollte ich mich näher mit der nativen App-Entwicklung beschäftigen. Daher habe ich mich dafür entschlossen 2 kleine Apps zu Entwickeln, eine iOS und eine Android Applikation, um beide Techniken kennen zu lernen. Bereits für den Workshop habe ich mich mit dem Framework MachineLearning Kit von Google auseinandergesetzt. Die <a class="read-more" href="https://mobile.fhstp.ac.at/allgemein/einfache-uebersetzerapp-ios-android/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/einfache-uebersetzerapp-ios-android/">einfache ÜbersetzerApp (iOS + Android)</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Im laufe des zweiten Semesters (SS 2022) wollte ich mich näher mit der nativen App-Entwicklung beschäftigen. Daher habe ich mich dafür entschlossen 2 kleine Apps zu Entwickeln, eine iOS und eine Android Applikation, um beide Techniken kennen zu lernen. Bereits für den Workshop habe ich mich mit dem Framework <strong>MachineLearning Kit</strong> von Google auseinandergesetzt. Die Projekte haben sich angeboten um die Funktionen  weiter ausprobieren. Da ich dieses Jahr in Griechenland und Italien Urlaub machen werde ist die Idee einer eigenen kleinen Übersetzter-App entstanden. </p>



<hr class="wp-block-separator is-style-dots" />



<h2 class="wp-block-heading">ML Kit</h2>



<p>In einem anderen Blogeintrag bin ich bereits näher auf das MLKit eingegangen. Mit Hilfe dieser Projekte wollte ich mir den Unterschied zwischen der Implementierung des ML Kits in iOS und Android Apps näher ansehen. </p>



<p>Für die Erstellung der Applikationen habe ich folgende APIs herangezogen:</p>



<ul class="wp-block-list"><li>On-Device Translation </li><li>Language ID </li><li>Text Recognition (nur in der Android Variante)</li></ul>



<p>Ein Auszug der Dependencies, welche in der <strong>Android Applikation</strong> genutzt worden sind: (app/gridle.buid)</p>



<pre class="wp-block-code"><code>dependencies {

    ...

    // MLKit
    implementation 'com.google.mlkit:translate:17.0.0'
    implementation 'com.google.mlkit:language-id:17.0.3'
    implementation 'com.google.android.gms:play-services-mlkit-text-recognition:18.0.0'

    ...
}</code></pre>



<p>Ein Auszug der Dependencies, welche in der <strong>iOS Applikation</strong> genutzt worden sind: (Podfile)</p>



<pre class="wp-block-code"><code>platform :ios, '14.0'

target 'traveltranslator_ios' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!

  # Pods for traveltranslator_ios
  pod 'GoogleMLKit/Translate', '2.6.0'
  pod 'GoogleMLKit/LanguageID', '2.6.0'

end
</code></pre>



<p><span style="font-size: revert"><strong>On-Device Translation</strong></span> bietet die Möglichkeit einen beliebigen Text in eine andere Sprache zu übersetzten. Hierzu müssen die Zielsprache, wie auch die Originalsprache bekannt sein. </p>



<p>Um zu ermöglichen, dass der Nutzer eine für ihn unbekannte Sprache übersetzen kann, ist die <strong>Language ID</strong> API integriert worden. Mit Hilfe dieser API kann die Sprache eines Textes herausgefunden worden. </p>



<p>Bei der Android Variante habe ich abschließend noch eine Bildübersetzung eingefügt. Für dieses Feature ist die API <strong>Language Recognition</strong> hinzugefügt worden. So kann der Text einer Aufnahme/eines Bildes weiter bearbeitet werden. In diesem Fall wird auf den gefunden Text wieder die On-Device Translation API angewandt. </p>



<p></p>



<h2 class="wp-block-heading">Android App</h2>



<p>Die Android App (Kotlin) besteht aus insgesamt drei Screens:</p>



<ul class="wp-block-list"><li>Klassischer Übersetzer </li><li>Bildübersetzer </li><li>Spracheinstellungen, um die gewünschten Sprachen herunterladen zu können </li></ul>



<p>Die Entwicklung der Android Variante der Übersetzer-App hat sehr gut funktioniert. Die Anbindung des Machine Learning Kits und des neuen Material Designs, M3, hat sich mit kleinen Schwierigkeiten &#8211; aber diese gehören immer dazu ???? &#8211; gut integrieren lassen. Mein Ziel &#8220;native Android Entwicklung&#8221; kennen zu lernen habe ich auf alle Fälle erreicht. </p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:50%">
<figure class="wp-block-image size-full is-style-default"><img loading="lazy" decoding="async" width="1080" height="2340" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2022/06/Screenshot_20220621_153125_com.example.travel_translator_android.jpg" alt="" class="wp-image-10105" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2022/06/Screenshot_20220621_153125_com.example.travel_translator_android.jpg 1080w, https://mobile.fhstp.ac.at/wp-content/uploads/2022/06/Screenshot_20220621_153125_com.example.travel_translator_android-709x1536.jpg 709w, https://mobile.fhstp.ac.at/wp-content/uploads/2022/06/Screenshot_20220621_153125_com.example.travel_translator_android-945x2048.jpg 945w" sizes="auto, (max-width: 1080px) 100vw, 1080px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:50%">
<figure class="wp-block-image size-full is-style-default"><img loading="lazy" decoding="async" width="1080" height="2340" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2022/06/Screenshot_20220621_153801_com.example.travel_translator_android-1.jpg" alt="" class="wp-image-10113" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2022/06/Screenshot_20220621_153801_com.example.travel_translator_android-1.jpg 1080w, https://mobile.fhstp.ac.at/wp-content/uploads/2022/06/Screenshot_20220621_153801_com.example.travel_translator_android-1-709x1536.jpg 709w, https://mobile.fhstp.ac.at/wp-content/uploads/2022/06/Screenshot_20220621_153801_com.example.travel_translator_android-1-945x2048.jpg 945w" sizes="auto, (max-width: 1080px) 100vw, 1080px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:50%">
<figure class="wp-block-image size-full is-style-default"><img loading="lazy" decoding="async" width="1080" height="2340" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2022/06/Screenshot_20220621_153132_com.example.travel_translator_android.jpg" alt="" class="wp-image-10106" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2022/06/Screenshot_20220621_153132_com.example.travel_translator_android.jpg 1080w, https://mobile.fhstp.ac.at/wp-content/uploads/2022/06/Screenshot_20220621_153132_com.example.travel_translator_android-709x1536.jpg 709w, https://mobile.fhstp.ac.at/wp-content/uploads/2022/06/Screenshot_20220621_153132_com.example.travel_translator_android-945x2048.jpg 945w" sizes="auto, (max-width: 1080px) 100vw, 1080px" /></figure>
</div>
</div>



<h2 class="wp-block-heading">iOS App</h2>



<p>Neben der Android Version habe ich eine iOS Version, mit der Technologie Swift mit SwiftUI, erarbeitet. Diese Version besteht aus zwei Screens:</p>



<ul class="wp-block-list"><li>Klassischer Übersetzer </li><li>Spracheinstellungen, um die gewünschten Sprachen herunterladen zu können </li></ul>



<p>Hier habe ich mich für weniger Screens entschieden, da ich bisher weniger Erfahrungen mit nativer iOS Entwicklung als mit nativer Android Entwicklung sammeln konnte. </p>



<p>Während der Erarbeitung des Projekts habe ich mir auch angesehen, wie eine Kamera in die Applikation eingebunden werden kann. Dies hat gut funktioniert, doch hat die spätere Integrierung von Google ML Kit Schwierigkeiten bereitet. </p>



<p>Zusammenfassend hat die Erstellung der iOS Variante gut funktioniert. Mein Ziel &#8220;native iOS Entwicklung&#8221; kennen zu lernen habe ich auf alle Fälle erreicht. </p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:50%">
<figure class="wp-block-image size-full is-style-default"><img loading="lazy" decoding="async" width="828" height="1792" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2022/06/IMG_8753.png" alt="" class="wp-image-10108" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2022/06/IMG_8753.png 828w, https://mobile.fhstp.ac.at/wp-content/uploads/2022/06/IMG_8753-710x1536.png 710w" sizes="auto, (max-width: 828px) 100vw, 828px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:50%">
<figure class="wp-block-image size-full is-style-default"><img loading="lazy" decoding="async" width="828" height="1792" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2022/06/IMG_8754.png" alt="" class="wp-image-10107" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2022/06/IMG_8754.png 828w, https://mobile.fhstp.ac.at/wp-content/uploads/2022/06/IMG_8754-710x1536.png 710w" sizes="auto, (max-width: 828px) 100vw, 828px" /></figure>
</div>
</div>



<h2 class="wp-block-heading">Meine Learnings</h2>



<p>Natürlich sind beide Applikationen nicht perfekt. Beispielsweise ist die Usability beider Applikationen ausbaufähig, dies könnte in weiteren Iterationen verbessert werden. Zudem wäre es eine spannende Aufgabe, die Bildübersetzung auch in der iOS Variante zu implementieren. </p>



<p>Mein Hauptziel, die native App-Entwicklung kennenzulernen, habe ich auf alle Fälle erreicht. Ich konnte mir einen guten Überblick über die benutzen Technologien machen und bin mit dem Endergebnis sehr zufrieden ????. </p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/einfache-uebersetzerapp-ios-android/">einfache ÜbersetzerApp (iOS + Android)</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Machine Learning ganz einfach!</title>
		<link>https://mobile.fhstp.ac.at/allgemein/machine-learning-ganz-einfach/</link>
		
		<dc:creator><![CDATA[Michelle Markl]]></dc:creator>
		<pubDate>Tue, 21 Jun 2022 18:41:10 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=10069</guid>

					<description><![CDATA[<p>Das MachineLearning Kit ist für alle, egal ob MachineLearning Profi oder Anfänger. Es beinhaltet APIs für Lösungen im Bereich Vision und Natural Language, für iOS und Android. In diesem Artikel möchte ich etwas näher auf das ML Kit, unterstützt durch kleine Beispiele, eingehen. </p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/machine-learning-ganz-einfach/">Machine Learning ganz einfach!</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:50%">
<p>Mit dem MachineLearning Kit (ML Kit), entwickelt von Google, können schnell und einfach MachineLearning-Konzepte in eine mobile Applikation integriert werden. Die Dokumentation gibt eine Anleitung zur Entwicklung von ML Kit Applikation auf Android (Java/Kotlin) und iOS (Objective-C/Swift) Applikation. Abbildung 1 zeigt eine Auswahl von Apps, welche das MLKit bereits integriert haben. &nbsp;</p>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:50%">
<figure class="wp-block-image size-large is-style-default"><img loading="lazy" decoding="async" width="1540" height="800" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2022/06/Apps-1540x800.jpg" alt="" class="wp-image-10089" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2022/06/Apps-1540x800.jpg 1540w, https://mobile.fhstp.ac.at/wp-content/uploads/2022/06/Apps-770x400.jpg 770w" sizes="auto, (max-width: 1540px) 100vw, 1540px" /><figcaption>Abbildung 1: ML Kit Anwendungen</figcaption></figure>
</div>
</div>



<p></p>



<h2 class="wp-block-heading"><strong>Warum ML Kit?</strong></h2>



<p>Auf Abbildung 2 wird ein klassischer Machine learning Prozess dargestellt, welcher aus 7 Phasen besteht. Die einzelnen Schritte dieses Prozess können sehr viel Zeit in Anspruch nehmen um ein passendes Modell zu entwickeln. Der einzelne Schritt „Daten sammeln“ kann bereits einige Tage ein Anspruch nehmen.&nbsp;</p>



<div class="wp-block-image is-style-default"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1540" height="614" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2022/06/KlassischerMlProzess-1540x614.jpg" alt="" class="wp-image-10078" /><figcaption>Abbildung 2: Klassischer Machine learning Prozess</figcaption></figure></div>



<p>Das MLKit bündelt bereits viele dieser Aufgaben, wie auf Abbildung 3 zu sehen ist. Zusammengefasst reduziert das MLKit den Prozess auf 2 Phasen. So lassen sich MachineLearning Konzepte mit wenig Code in mobile Applikationen integrieren.&nbsp;</p>



<figure class="wp-block-image size-full is-style-default"><img loading="lazy" decoding="async" width="1466" height="638" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2022/06/MlKitProzess-1.jpg" alt="" class="wp-image-10087" /><figcaption>Abbildung 3: Machine learning Prozess mit ML Kit</figcaption></figure>



<h2 class="wp-block-heading"><strong>Worin kann ML Kit unterstützen?</strong></h2>



<p>Insgesamt bietet das Framework 12 APIs, welche bei den einzelnen Phasen unterstützen. Jede API bietet eine Lösung für unterschiedliche Probleme.</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:50%">
<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<h3 class="wp-block-heading"><strong>Vision APIs</strong></h3>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<ul class="wp-block-list"><li>Barcode Scanning</li><li>Face Detection&nbsp;</li><li>Image Labeling&nbsp;</li><li>Object Detection and tracking&nbsp;</li><li>Text Recognition&nbsp;</li><li>Digital Ink Recognition&nbsp;</li><li>Pose Detection&nbsp;</li><li>Selfie Segmentation&nbsp;</li></ul>
</div></div>
</div></div>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:50%">
<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<h3 class="wp-block-heading"><strong>Natural Language APIs</strong></h3>



<ul class="wp-block-list"><li>Smart Replay&nbsp;</li><li>Entity Extraction&nbsp;</li><li>Language ID&nbsp;</li><li>On-Device Translation</li></ul>
</div></div>
</div>
</div>



<p></p>



<h2 class="wp-block-heading"><strong>ML Kit on-device oder cloud-based?</strong></h2>



<p>Durch die cloud-based und/oder on-device APIs lassen sich ML-Techniken einfach anwenden. Mithilfe von cloud-based APIs, unterstützt durch Firebase, lassen sich bessere/genauere Resultate erzielen. Hingegen kann bei on-device unterstützen APIs eine bessere Performance erzielt werden. Dies ermöglicht die Entwicklung von Echtzeitanwendungen. Ein Beispiel für eine Echtzeit-Anwendung ist beispielsweise eine Gesichtserkennung auf Live-Fotos/Videos (z.B: Snapchat).&nbsp;</p>



<h2 class="wp-block-heading"><strong>Wie wird ML Kit implementiert?&nbsp;</strong></h2>



<p>Die Implementierung folgt einem gewissen Schema, welches sich (mit kleinen Abweichungen) auf alle APIs übertragen lässt. Die aufgeführten Schritte können als Checkliste angesehen werden um eine ML Kit-Anwendung zu entwickeln. Im folgenden wird die Struktur anhand der Object Detection and Tracking API dargestellt.</p>



<h4 class="wp-block-heading"># 1: Integrieren der Dependency in app/build.gridle</h4>



<pre class="wp-block-code"><code>dependencies {
  // ...

  implementation 'com.google.mlkit:object-detection:17.0.0'

}</code></pre>



<p></p>



<h4 class="wp-block-heading"># 2: Optionen/Einstellungen des jeweiligen Modells festlegen</h4>



<pre class="wp-block-code"><code>val options = ObjectDetectorOptions.Builder()
        .setDetectorMode(ObjectDetectorOptions.SINGLE_IMAGE_MODE)
        .enableMultipleObjects()
        .enableClassification()  // Optional
        .build()</code></pre>



<h4 class="wp-block-heading">#3: Instanz des Models erzeugen&nbsp;</h4>



<pre class="wp-block-code"><code>val objectDetector = ObjectDetection.getClient(options)</code></pre>



<p></p>



<h4 class="wp-block-heading">#4: Handelt es sich um eine Vision API muss das Bild vorbereitet werden</h4>



<p>Bilder müssen zu einem InputImage konvertiert werden um weiterverarbeitet werden zu können. </p>



<p></p>



<p></p>



<h4 class="wp-block-heading">#5: MachineLearning Modell anwenden&nbsp;</h4>



<pre class="wp-block-code"><code>objectDetector.process(image)
    .addOnSuccessListener { detectedObjects -&gt;
        // Task completed successfully
        // ...
    }
    .addOnFailureListener { e -&gt;
        // Task failed with an exception
        // ...
    }</code></pre>



<p></p>



<h3 class="wp-block-heading">Beispiel: Which Plant is this?</h3>



<p>Mit der oben aufgelisteten Checkliste ist das Basis Model für die Objekterkennung implementiert worden. Auf Abbildung 4 und 5 ist das Ergebnis der Implementierung der &#8220;Object Detection and Tracking&#8221;-API zu erkennen. </p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:50%">
<figure class="wp-block-image size-full is-style-default"><img loading="lazy" decoding="async" width="1080" height="2340" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2022/06/Screenshot_20220621_122547_com.example.ml_kit-2.jpg" alt="" class="wp-image-10095" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2022/06/Screenshot_20220621_122547_com.example.ml_kit-2.jpg 1080w, https://mobile.fhstp.ac.at/wp-content/uploads/2022/06/Screenshot_20220621_122547_com.example.ml_kit-2-709x1536.jpg 709w, https://mobile.fhstp.ac.at/wp-content/uploads/2022/06/Screenshot_20220621_122547_com.example.ml_kit-2-945x2048.jpg 945w" sizes="auto, (max-width: 1080px) 100vw, 1080px" /><figcaption>Abbildung 4: Object Detection Einfach Beispiel</figcaption></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:50%">
<figure class="wp-block-image size-full is-style-default"><img loading="lazy" decoding="async" width="1080" height="2340" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2022/06/Screenshot_20220621_122512_com.example.ml_kit-1.jpg" alt="" class="wp-image-10093" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2022/06/Screenshot_20220621_122512_com.example.ml_kit-1.jpg 1080w, https://mobile.fhstp.ac.at/wp-content/uploads/2022/06/Screenshot_20220621_122512_com.example.ml_kit-1-709x1536.jpg 709w, https://mobile.fhstp.ac.at/wp-content/uploads/2022/06/Screenshot_20220621_122512_com.example.ml_kit-1-945x2048.jpg 945w" sizes="auto, (max-width: 1080px) 100vw, 1080px" /><figcaption>Abbildung 5: Object Detection Einfach Beispiel</figcaption></figure>
</div>
</div>



<p>Die genutzte ML Kit API &#8220;Object Detection and Tracking&#8221; kann durch ein TensorFlow-Model erweitert werden. Für die Abbildungen 6 und 7 ist ein TensorFlow-Model integriert worden, welches Pflanzen kategorisiert. Das TensorFlow-Model ist mit folgendem Code in die Applikation eingefügt worden. </p>



<pre class="wp-block-code"><code>localModel = LocalModel.Builder()
            .setAssetFilePath("lite-model_aiy_vision_classifier_plants_V1_3.tflite")
            .build()

// Set TensorFlow model in the options
objOptions = CustomObjectDetectorOptions.Builder(localModel)
                .setDetectorMode(CustomObjectDetectorOptions.SINGLE_IMAGE_MODE)
                .enableMultipleObjects()
                .enableClassification()
                .setClassificationConfidenceThreshold(0f)
                .setMaxPerObjectLabelCount(3)
                .build()</code></pre>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:50%">
<figure class="wp-block-image size-full is-style-default"><img loading="lazy" decoding="async" width="1080" height="2340" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2022/06/Screenshot_20220621_122329_com.example.ml_kit.jpg" alt="" class="wp-image-10098" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2022/06/Screenshot_20220621_122329_com.example.ml_kit.jpg 1080w, https://mobile.fhstp.ac.at/wp-content/uploads/2022/06/Screenshot_20220621_122329_com.example.ml_kit-709x1536.jpg 709w, https://mobile.fhstp.ac.at/wp-content/uploads/2022/06/Screenshot_20220621_122329_com.example.ml_kit-945x2048.jpg 945w" sizes="auto, (max-width: 1080px) 100vw, 1080px" /><figcaption>Abbildung 6: Object Detection Erweitert</figcaption></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:50%">
<figure class="wp-block-image size-full is-style-default"><img loading="lazy" decoding="async" width="1080" height="2340" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2022/06/Screenshot_20220621_122405_com.example.ml_kit.jpg" alt="" class="wp-image-10097" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2022/06/Screenshot_20220621_122405_com.example.ml_kit.jpg 1080w, https://mobile.fhstp.ac.at/wp-content/uploads/2022/06/Screenshot_20220621_122405_com.example.ml_kit-709x1536.jpg 709w, https://mobile.fhstp.ac.at/wp-content/uploads/2022/06/Screenshot_20220621_122405_com.example.ml_kit-945x2048.jpg 945w" sizes="auto, (max-width: 1080px) 100vw, 1080px" /><figcaption>Abbildung 7: Object Detection Erweitert</figcaption></figure>



<p></p>
</div>
</div>



<p></p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/machine-learning-ganz-einfach/">Machine Learning ganz einfach!</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>StudyApp (Projektdokumentation)</title>
		<link>https://mobile.fhstp.ac.at/allgemein/studyapp-projektdokumentation/</link>
		
		<dc:creator><![CDATA[Michelle Markl]]></dc:creator>
		<pubDate>Wed, 23 Feb 2022 18:03:07 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=9733</guid>

					<description><![CDATA[<p>Schon seit längerem suche ich nach einer StudyApp, welche meinen Anforderungen entspricht. Da war die Idee, selbst an einer Lern(-karteikarten) App zu arbeiten, nicht weit. Gedacht &#8211; Getan! Ich habe bereits einige unterschiedliche Karteikarten- bzw. QuizApps getestet, doch so richtig überzeugt hat mich bisher keine. Innerhalb unzähliger App-Abos habe ich jedoch herausgefunden, dass ich mit <a class="read-more" href="https://mobile.fhstp.ac.at/allgemein/studyapp-projektdokumentation/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/studyapp-projektdokumentation/">StudyApp (Projektdokumentation)</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Schon seit längerem suche ich nach einer StudyApp, welche meinen Anforderungen entspricht. Da war die Idee, selbst an einer Lern(-karteikarten) App zu arbeiten, nicht weit. Gedacht &#8211; Getan!</p>



<p>Ich habe bereits einige unterschiedliche Karteikarten- bzw. QuizApps getestet, doch so richtig überzeugt hat mich bisher keine. Innerhalb unzähliger App-Abos habe ich jedoch herausgefunden, dass ich mit dem typischen Karteikarten-Format (Vorder-/Rückseite) und MultipleChoice Aufgaben am effektivsten lerne. Diese Funktionen sind auch die ersten, welche implementiert werden sollen. Neben dem Lern-/Quiz Modus, soll der/die NutzerIn natürlich Studysets (Lernsets) und Studycards (Inhalte in Karteikarten-Form) erstellen und bearbeiten können.</p>



<p>Doch Schritt für Schritt …</p>



<p><strong>Aufgabenstellung:</strong> Es soll ein funktionsfähiger MVP erstellt werden, welcher die wichtigsten Funktionen einer Karteikarten-App beinhaltet. Dazu zählen (1) das anlegen von Lernsets mit Lernkarten und (2) das Lernen von den erstellten Lernkarten in zuvor bestimmten zeitlichen Abständen. Als Zusatz wäre die Funktion eines Quiz in Planung, welches vom Aufbau her dem Lernen folgt, doch die Lösung nicht sofort zeigt. Auch ist das Anlagen eines Users und der Log in bereits registrierter User geplant. </p>



<h2 class="wp-block-heading">Technologien: <strong>NestJS und Ionic</strong></h2>



<p>Alles hat mit der Idee begonnen. Weiters musste die Frage geklärt werden, welche Frameworks verwendet werden sollen. Hier habe ich mich für NestJS im Backend und Ionic (Angular) im Frontend entschieden. </p>



<p>Vor allem habe ich das Projekt genutzt die neuen Frameworks kennen zu lernen. Bisher stützte sich mein Wissen lediglich auf die Grundtechnologien HTML, CSS, JavaScript und php, sowie kleine Einblicke in die Frameworks Angular und Laravel. Daher war ich von Anfang an auf das Projekt gespannt.&nbsp;</p>



<p>Später hat sich gezeigt, dass die Unwissenheit zu den Frameworks die zeitliche Planung übertroffen hat. Doch dazu später mehr.&nbsp;</p>



<h2 class="wp-block-heading"><strong>StudyApp in den Kinderschuhen&nbsp;</strong></h2>



<p>Nach dem die Idee und die verwendeten Technologien fixiert worden sind, konnte die Planung beginnen. An erster Stelle sind die Anforderungen definiert worden. Darauf Aufbauend sind Überlegungen zur Seitenstruktur, zum Datenbankmodell und zu den Abläufen getätigt worden.</p>



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



<p>Die Anforderungen der Applikation beschränken sich in der ersten Iteration auf die Basiselemente: Nutzer/innen, Studyset + Inhalte und den Lern- bzw. Quizmodus. Das Ziel war es eine erste Version zu generieren, welche beim Lernen unterstützen kann.</p>



<p><strong>Nutzer/innen </strong>sollen sich bei der Applikation anmelden bzw. registrieren können. Die Studysets, welche sie später erstellen werden, sind dem jeweiligen User zugeordnet. Natürlich soll sich der/die Nutzer/in von der Applikation ausloggen und das Benutzerprofil bei Bedarf anpassen/löschen können.&nbsp;</p>



<p><strong>Studysets </strong>beinhalten sogenannte Studycards (= Lernkarte), welche jeweils eine Frage und die Antwort/en beinhalten. Der/Die Nutzer/in kann diese erstellen, bearbeiten und löschen.</p>



<p><strong>Lernmodus</strong> der Lernmodus soll auf zwei Arten erfolgen können: 1) Lernen: Hier lernt der/die Nutzer/in angepasst an die Methode der Karteikarten <em>(1x richtig beantwortet nächster Tag wieder, 2x richtig beantwortet nach 2 Tagen wieder, …)</em>. 2) Quiz: Hier bekommt der/die Nutzer/in ALLE Studycards hintereinander. Die Applikation zählt mit, wie viele der/die Nutzer/in, nach eigenen Angaben, richtig bzw. falsch beantwortet hat. Der Unterschied zwischen den Modi ist, dass bei 1) Lernen nicht alle Karteikarten dem/der Nutzer/in vorgelegt werden, sondern nur jene des Tages.&nbsp;</p>



<p>Weitere mögliche Ziele für dieses Semester waren: Login mithilfe sozialer Accounts (Google) und das Speichern von Studysets im local storage (ohne weitere Funktionen), um auch diese Konzepte kennenzulernen.&nbsp;</p>



<p>Ideen für mögliche weitere Iterationen sind hier auch schon festgehalten worden. Beispielsweise offline Funktionalitäten einzelner/aller Studysets, Bilder zu Antwort/Frage hinzufügen, teilen von Studysets mit der Community, …</p>



<h3 class="wp-block-heading"><strong>Wireframes&nbsp;</strong></h3>



<p>Nach dem die Anforderungen an die Applikation definiert worden sind, sind Wireframes angefertigt worden. Die Wireframes, eine Auswahl ist auf der Abbildung <em>„StudyApp 1: Die ersten Ideen“ </em>zu sehen, haben vor allem den Zweck die Seitenstruktur fest zu legen. Die Wireframes haben mir bei der Entwicklung sehr geholfen, da ich so bereits eine erste kleine Designvorlage definiert hatte.&nbsp;</p>



<figure class="wp-block-image size-full is-style-default"><img loading="lazy" decoding="async" width="1824" height="1034" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2022/02/Bildschirmfoto-2022-02-23-um-18.49.52.jpg" alt="" class="wp-image-9767" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2022/02/Bildschirmfoto-2022-02-23-um-18.49.52.jpg 1824w, https://mobile.fhstp.ac.at/wp-content/uploads/2022/02/Bildschirmfoto-2022-02-23-um-18.49.52-1536x871.jpg 1536w" sizes="auto, (max-width: 1824px) 100vw, 1824px" /><figcaption class="wp-element-caption"><em>StudyApp 1: Die ersten Ideen</em></figcaption></figure>



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



<p>Datenbanken waren für mich ein sehr neues Thema. Bisher konnte ich nur wenig Erfahrung im Backend sammeln. Daher war es für mich Anfangs schwer ein Datenbankmodell zu skizzieren. Viele Entwürfe habe ich verworfen, bin dann jedoch wieder darauf zurückgekommen. Nach einer entsprechenden Recherche konnte ich ein (passendes) Datenbankmodell für diese erste Iteration entwerfen, welches auf Abbildung <em>„StudyApp 2: Datenbankmodell“</em> zu sehen ist.&nbsp;</p>



<figure class="wp-block-image size-full is-style-default"><img loading="lazy" decoding="async" width="1630" height="1192" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2022/02/Bildschirmfoto-2022-02-23-um-18.59.01.jpg" alt="" class="wp-image-9769" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2022/02/Bildschirmfoto-2022-02-23-um-18.59.01.jpg 1630w, https://mobile.fhstp.ac.at/wp-content/uploads/2022/02/Bildschirmfoto-2022-02-23-um-18.59.01-1536x1123.jpg 1536w" sizes="auto, (max-width: 1630px) 100vw, 1630px" /><figcaption class="wp-element-caption"><em>StudyApp 2: Datenbankmodell</em></figcaption></figure>



<p></p>



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



<p>Im Zuge der Anforderungen und des Wireframings/Prototypings habe ich einige Ablaufdiagramme angefertigt, um Ideen der möglichen Nutzerinteraktionen fest zu halten. Ein Auszug findet sich auf <em>„StudyApp 3: Nutzerinteraktionen“</em> wieder. Vor allem in der Design-Phase habe ich die angefertigten Diagramme als sehr hilfreich empfunden, da so die Interaktionsschritte bereits ausgearbeitet waren.&nbsp;</p>



<figure class="wp-block-image size-full is-style-default"><img loading="lazy" decoding="async" width="2216" height="1334" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2022/02/Bildschirmfoto-2022-02-23-um-18.55.19.jpg" alt="" class="wp-image-9768" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2022/02/Bildschirmfoto-2022-02-23-um-18.55.19.jpg 2216w, https://mobile.fhstp.ac.at/wp-content/uploads/2022/02/Bildschirmfoto-2022-02-23-um-18.55.19-1536x925.jpg 1536w, https://mobile.fhstp.ac.at/wp-content/uploads/2022/02/Bildschirmfoto-2022-02-23-um-18.55.19-2048x1233.jpg 2048w" sizes="auto, (max-width: 2216px) 100vw, 2216px" /><figcaption class="wp-element-caption"><em>StudyApp 3: Nutzerinteraktionen</em></figcaption></figure>



<h2 class="wp-block-heading"><strong>Die StudyApp wächst&nbsp;</strong></h2>



<p>Nach dem die Anforderungen definiert und das Design, sowie das Datenbankmodell geplant worden waren, hat die Umsetzung begonnen. Gestartet habe ich in einem ersten Versuch mit dem Frontend, etwas zeitversetzt auch mit der Umsetzung des Backends. In einer mitlaufenden Recherche habe ich immer wieder neue Ansätze, Tipps und Ideen gesammelt. Als Resultat habe ich den bereits geschrieben Code verworfen und das Projekt neu begonnen, um die erweiterten Erkenntnisse umzusetzen.&nbsp;</p>



<p>Der zweite Anlauf hat sehr gut gestartet. Bis auf einige, mal kleinere, mal größere Hindernisse, konnte ich die Basis der Applikation gut entwickeln. Eine erste kleinere Hürde hat die Anbindung des Frontends an das Backend dargestellt. Vor allem mit CORS Problemen musste ich mich länger auseinandersetzen, doch auch diese konnte ich schließlich lösen. Einige Eindrücke der App findest du auf Abbildung <em>„StudyApp 4: Erste Ergebnisse FE und BE“</em>.</p>



<figure class="wp-block-image size-full is-style-default"><img loading="lazy" decoding="async" width="1920" height="1080" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2022/02/AbschlussPraesentation.001-2.jpeg" alt="" class="wp-image-9743" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2022/02/AbschlussPraesentation.001-2.jpeg 1920w, https://mobile.fhstp.ac.at/wp-content/uploads/2022/02/AbschlussPraesentation.001-2-1536x864.jpeg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /><figcaption class="wp-element-caption"><em>StudyApp 4: Erste Ergebnisse FE und BE“</em>.</figcaption></figure>



<p>Ein Punkt, welcher mir bei der Umsetzung des Backends wichtig gewesen ist, war die Dokumentation. Hierfür habe ich mich etwas näher mit Swagger auseinander gesetzt. Einen Ausschnitt der implementierten Endpoints findest du auf Abbildung <em>„Studyset 4: <em>Erste Ergebnisse FE und BE</em>“</em>. Die Dokumentation war mir eine große Hilfe bei der Verwendung der Endpoints im Frontend. Eine solche Art von Dokumentation war neu für mich, daher habe ich auch in diesem Punkt einiges Neues lernen können.&nbsp;</p>



<p>Trotz alledem war das Error Handling innerhalb des User Interfacedesigns wieder eine etwas größere Herausforderung für mich. Nach dem aber auch diese Hürde überwunden worden ist, erhält der/die Nutzer/in nun angepasste Fehlermeldungen in Form einer Toast-Message.&nbsp;</p>



<p>Weitere größere Überlegungen musste ich bei der Erstellung der Lernmodi (Quiz bzw. Lernen) anstellen. Hier war mein Ziel so wenig wie möglich Codeduplikation zu erzeugen, da diese Screens sehr ähnlich sind, lediglich die Logik ist unterschiedlich. Eine Gegenüberstellung der Screens ist auf Abbildung <em>„Studyset 5: Lernmodi; Quiz (hell) und Lernen (dunkel)“</em> zu sehen. Wie auf der Abbildung zu erkennen erhält der/die Nutzer/in abschließend einen etwas abgewandelten Text. </p>



<figure class="wp-block-image size-full is-resized is-style-default"><img loading="lazy" decoding="async" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2022/02/AbschlussPraesentation.013.jpeg" alt="" class="wp-image-9744" width="840" height="472" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2022/02/AbschlussPraesentation.013.jpeg 1920w, https://mobile.fhstp.ac.at/wp-content/uploads/2022/02/AbschlussPraesentation.013-1536x864.jpeg 1536w" sizes="auto, (max-width: 840px) 100vw, 840px" /><figcaption class="wp-element-caption"><em>Studyset 5: Lernmodi; Quiz (hell) und Lernen (dunkel)</em></figcaption></figure>



<ul class="wp-block-list">
<li><strong>Lernen:</strong> Der/Die Nutzer/in erhält nur jene Lernkarten, welche an diesem Tag oder an einem vorherigen zu lernen waren. Nach jeder beantworteten Frage wird ein Request mit den aktualisierten Daten, lastLearnDate und nextLearnDate, an das Backend gesendet.</li>
</ul>



<ul class="wp-block-list">
<li><strong>Quiz: </strong>Hier beantwortet der/die Nutzer/in eine Lernkarte nach der anderen. Das Frontend versendet, im Gegensatz zum Modus Lernen, keine Requests an das Backend. Am Ende bekommt der/die Nutzer/in eine Übersicht der richtig beantworteten Fragen.&nbsp;</li>
</ul>



<p>Abschließend hat für mich die Implementierung des social Media LogIn eine große Hürde dargestellt. Die Implementierung dieses Konzepts im Backend konnte ich sehr einfach umsetzten. Anschließend wollte ich diese Implementierung mit dem Frontend verbinden, doch dies hat einen CORS Error geworfen. Nach ausgiebiger Recherche, und einem missglückten Testversuch mit dem Package GooglePlus für Ionic, habe ich nun den Google LogIn mithilfe der Library „angularx-social-login“ entwickelt. Anschließend wird der/die Nutzer/in mit den bereits bestehenden Methoden registriert bzw. eingeloggt.&nbsp;</p>



<h2 class="wp-block-heading"><strong>Meine persönlichen Learnings&nbsp;</strong></h2>



<p>Mir hat das Projekt sehr viel Freude bereitet. Es war schön mit an zu sehen wie das Projekt wächst und wie mir von Schritt zu Schritt die Arbeit mit den Frameworks leichter gefallen ist.&nbsp;</p>



<p>Das Hauptziel, die mir bis dahin unbekannten Frameworks NestJS und Ionic kennenzulernen, ist auf alle Fälle erfüllt worden und bildet in meinen Augen für mich das größte Learning.</p>



<p>Woran ich in zukünftigen Projekten arbeiten muss, ist die Zeitschätzung. Hier war ich doch etwas zu blauäugig. Schon früh hat sich im Projekt herauskristallisiert, dass ich für einzelne Aufgaben doch etwas länger brauche als gedacht, diese Zeit hat sich bis zum Ende hin summiert. Dies resultierte vor allem daraus, dass ich die Frameworks nicht kannte und so sehr viel Zeit mit dem lesen von Dokumentationen und Stackoverflow Beiträgen verbracht habe. Was ich jedoch auch beobachten konnte ist, dass je fortgeschrittener das Projekt, desto einfacher ist es mir gefallen Fehler aus der Erfahrung heraus korrigieren zu können.</p>



<p>Weiters habe ich das erste Mal Git richtig in einem Projekt versucht einzusetzen. Hier ist mir aufgefallen, dass mir auch dies mit der Zeit immer leichter gefallen ist. Anfangs war es für mich sehr schwer Commits aufzuteilen. Das Resultat war, dass die Commits sehr groß waren, was das zurechtfinden innerhalb der Commits und das wiederherstellen dieser sehr schwierig gestaltet hat. Zum Ende hin hatte ich das Gefühl, dass ich die Commits sehr gut aufteilen konnte. Vor allem bei meinem größeren Hindernis, der Social Login, hat sich mir der Vorteil einer Versionierung deutlich gezeigt.&nbsp;</p>



<figure class="wp-block-image size-full is-style-default"><img loading="lazy" decoding="async" width="1920" height="1080" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2022/02/AbschlussPraesentation.011.jpeg" alt="" class="wp-image-9766" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2022/02/AbschlussPraesentation.011.jpeg 1920w, https://mobile.fhstp.ac.at/wp-content/uploads/2022/02/AbschlussPraesentation.011-1536x864.jpeg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /><figcaption class="wp-element-caption"><em>StudyApp</em></figcaption></figure>



<h2 class="wp-block-heading"><strong>To be continued …</strong></h2>



<p>Im Austausch mit Freunden hat sich herausgestellt, dass auch diese nach Lernhilfen suchen und gerne meine App testen würden. So habe ich einen Ansporn an <em>StudyApp</em> weiter zu feilen. Zur Zeit besteht die Applikation lediglich aus den Basiselementen des Ionic Frameworks, hier könnte in nächsten Iterationen ein Styling überlegt werden. Weiters sind offline Funktionalitäten, welche das Lernen unterwegs ermöglichen eine Anforderung welche ich noch gerne umsetzen würde. Auch das gemeinsame Lernen, in Form von teilen der Studysets fände ich spannend zu implementieren. Wie man sieht bietet StudyApp noch viel Potential.&nbsp;</p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/studyapp-projektdokumentation/">StudyApp (Projektdokumentation)</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
