<?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 Bettina Bröthaler - Mobile USTP MKL</title>
	<atom:link href="https://mobile.fhstp.ac.at/author/it201506/feed/" rel="self" type="application/rss+xml" />
	<link>https://mobile.fhstp.ac.at/author/it201506/</link>
	<description>Die &#34;Mobile Forschungsgruppe&#34; der USTP, sie  sammelt hier alles zu den Themen Design, UX und Entwicklung mobiler Applikationen</description>
	<lastBuildDate>Thu, 03 Mar 2022 14:45:32 +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 Bettina Bröthaler - Mobile USTP MKL</title>
	<link>https://mobile.fhstp.ac.at/author/it201506/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Sensor Library</title>
		<link>https://mobile.fhstp.ac.at/development/sensor-library/</link>
		
		<dc:creator><![CDATA[Bettina Bröthaler]]></dc:creator>
		<pubDate>Thu, 03 Mar 2022 09:59:13 +0000</pubDate>
				<category><![CDATA[Cross Plattform]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Projekte]]></category>
		<category><![CDATA[Software]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=9852</guid>

					<description><![CDATA[<p>Sensor Library Innerhalb des 3ten Semesters haben wir, die Masterklasse Mobile, die Aufgabe ein Gruppenprojekt umzusetzten. Zusammen wurde entschieden, dieses mit Flutter umzusetzen. Eine Flutter Library, welche verschiedene Sensoren auslesen kann und roh oder interpretiert zurückgibt. https://github.com/hraschan/flutter_sensor_library Außerdem haben wir uns hier entschieden, dass es eine “Beispiel App” dafür geben soll, die die Anwendung der <a class="read-more" href="https://mobile.fhstp.ac.at/development/sensor-library/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/development/sensor-library/">Sensor Library</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading">Sensor Library</h1>



<p>Innerhalb des 3ten Semesters haben wir, die Masterklasse Mobile, die Aufgabe ein Gruppenprojekt umzusetzten. Zusammen wurde entschieden, dieses mit Flutter umzusetzen. Eine Flutter Library, welche verschiedene Sensoren auslesen kann und roh oder interpretiert zurückgibt.</p>



<p><a href="https://github.com/hraschan/flutter_sensor_library">https://github.com/hraschan/flutter_sensor_library</a></p>



<p>Außerdem haben wir uns hier entschieden, dass es eine “Beispiel App” dafür geben soll, die die Anwendung der Library präsentiert.</p>



<p><a href="https://github.com/hraschan/flutter_sensor_library_app">https://github.com/hraschan/flutter_sensor_library_app</a></p>



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



<p>Da wir alle zuvor kaum bis gar keine Erfahrung mit Flutter gemacht haben, wurde von Mario und Maximilian ein Workshop vorbereitet, der uns die Grundlagen präsentiert hat und in welchem wir gemeinsam das Setup des Projekts durchführten.</p>



<p>Flutter an sich ist ein Open-Souce-Framework von Google, das zur Erstellung von nativ kompilierten Anwendungen verwendet wird. Bei Flutter gibt es viele Bibliotheken für Standard-UI-Elemente, die bei Android oder iOS benötigt werden. Für Desktop Webanwendungen kann das Framework auch eingesetzt werden.</p>



<p>Das Framework wird also primär für iOS und Android Applikationen verwendet. Für die Entwicklung wird die Programmiersprache “Dart” verwendet, diese wurde ebenfalls von Google entwicklet.</p>



<h2 class="wp-block-heading">Was kann die Library</h2>



<p>Die Library bietet verschiedene Klassen und Methodensammlungen an, um die Sensoren eines Mobilgeräts nutzen zu können. Dabei beruht sie bei den meisten Sensoren auf bereits vorhandenen Librarys, verarbeitet diese und gibt die Daten, wenn gewünscht, gesammelt an eine Flutter App weiter. Zudem bietet die Library auch interpretierte bzw. aus mehreren Sensoren zusammengefasste Daten, wie bspw. die Höhenmeter an, die aus dem aktuellen Luftdruck (Barometer) und dem Luftdruck auf Seehöhe ausgerechnet werden.</p>



<p>Aufgerufen kann die Funktionalität über gewisse Wrapper-Klassen, je nachdem ob Bewegungs-Daten (Movement), Positions-Daten (Position) oder Umgebungs-Daten (Environment) benötigt werden. Außerdem können die nativen Sensoren einzeln aufgerufen werden. Dabei muss immer angegeben werden, in welchem Zeitintervall die jeweilige Klasse Daten zurückliefern soll.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
Movement mvmnt = Movement(inMillis: 2000);
mvmnt.getMovementType(true).forEach((element) {print(element.fwd);});

</pre></div>


<p>Mit diesem einfachen Code-Beispiel kann alle 2 Sekunden abgefragt werden, ob sich das Gerät in den letzten zwei Sekunden nach vorne bewegt hat. Mit der Übergabe des Boolean (in dem Fall true) kann festgelegt werden, ob die aktuelle Fortbewegung zum Zeitpunkt der Abfrage oder die interpolierten Daten seit der letzten Abfrage wiedergegeben werden sollen.</p>



<h2 class="wp-block-heading">Die Bespielapplikation</h2>



<p>Um die Andwendung der Library zu vereinfachen, wurde ein Beispielapplikation geschaffen, welche die einzelnen Verwendungszwecke zeigen soll. Hier einige Screenshots der Anwendung:</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-image size-full"><img fetchpriority="high" decoding="async" width="257" height="529" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2022/03/grafik-2.png" alt="" class="wp-image-9856"/></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><img decoding="async" width="258" height="529" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2022/03/grafik-1.png" alt="" class="wp-image-9855"/></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow"></div>
</div>



<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-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-image size-full"><img decoding="async" width="313" height="643" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2022/03/grafik-3.png" alt="" class="wp-image-9857"/></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="313" height="643" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2022/03/grafik-5.png" alt="" class="wp-image-9859"/></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="313" height="643" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2022/03/grafik-7.png" alt="" class="wp-image-9862"/></figure>
</div>
</div>
</div>
</div>



<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-image size-full"><img loading="lazy" decoding="async" width="289" height="642" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2022/03/grafik-4.png" alt="" class="wp-image-9858"/></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="290" height="643" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2022/03/grafik-8.png" alt="" class="wp-image-9863"/></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="289" height="643" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2022/03/grafik-9.png" alt="" class="wp-image-9864"/></figure>
</div>
</div>



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



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



<p>Mein Learning aus dem Gruppenprojekt ist die Einführung in Flutter. Ich habe mit diesem Framework zuvor noch keine Projekte umsetzen können. Ehrlichgesagt finde ich das Framework recht unübersichtlich und ich finde es gibt Frameworks, die um Einiges besser konzipiert sind als Flutter. Dennoch habe ich dieses Learning für die Zukunft mitnehmen können und da Flutter recht bekannt ist, ist auch diese Erfahrung von Wert.</p>



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



<p>Für mich war Flutter vollkommenes Neuland. Bei diesem Projekt konnte ich hier einiges lernen. Von Projektstruktur über Codeaufbau, Widget Aufbau, Verwendung von Libraries sowie die Nutzung verschiedener Simulatoren.</p>



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



<p>Die Vertiefung der Kenntnisse in Flutter nach dem gemeinsamen Workshop mit Maximilian ist bestimmt ein großer Lernzugewinn. Die Nutzung der Sprache Dart ist doch etwas ungewohnt, obwohl sie sehr an JavaScript angelehnt ist. Außerdem konnte ich bei der Konzeption einer Library sehr viel dazulernen. Die Erarbeitung einer Library und die Vorstellung anderer Entwickler<em>innen als Nutzer</em>innen des eigenen Programms stellt einen Lerneffekt dar, den man in anderen Projektkontexten so nicht hat.</p>



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



<p>Für mich hat dieses Projekt vor allem einen tieferen Einblick in Flutter ermöglicht. Auch habe ich das aufbauen einer eigenen Library bis jetzt noch nicht in dieser Form kennengelernt. Ich denke jedoch das es noch einiger Zeit bedarf um gute Lösungen mit der Technologie Flutter entwickeln zu können</p>



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



<p>Bis zum Workshop von Mario und Maxi kannte ich weder Flatter noch Dart. Durch den Workshop konnte ich mir ein gutes Grundwissen aneignen und anschließend im Rahmen des Projekts tiefer in die Materie einsteigen. Im Großen und Ganzen habe ich einen guten Überblick über Flutter, Dart und verschiedener Sensoren bekommen.</p>



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



<p>Die Zusammenarbeit mit Mario und Maxi während der Ausarbeitung des Backends hat mir einige neue Erkenntnisse gebracht. Sowohl mit Flutter als auch mit Dart hatte ich vor diesem Projekt wenig zu tun gehabt. Daher war es für mich sehr erkenntnisreich, ein Projekt umzusetzen, beziehungsweise daran beteiligt zu sein. Auch der Gedanke eine eigene Library zu erstellen war für mich interessant, da ich diesen Aspekt des Programmierens bis dato nur von der anderen Seite gekannt habe. Ich bin gespannt, ob die Library in irgendeiner Form einen späteren Verwendungszweck finden wird.</p>
<p>The post <a href="https://mobile.fhstp.ac.at/development/sensor-library/">Sensor Library</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Stimulus</title>
		<link>https://mobile.fhstp.ac.at/development/stimulus/</link>
		
		<dc:creator><![CDATA[Bettina Bröthaler]]></dc:creator>
		<pubDate>Sun, 20 Feb 2022 11:48:42 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Webdevelopment]]></category>
		<category><![CDATA[JavaScript]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=9490</guid>

					<description><![CDATA[<p>https://stimulus.hotwired.dev/ Stimulus, ein modernes JavaScript-Framework, das ein bestehendes HTML-DOM problemlos ergänzen kann. Aber warum ist Stimulus ein nützliches Tool? Alles in allem ist Stimulus eine ~30kb große Bibliothek, die kleine, wiederverwendbare JavaScript Bausteine beinhaltet, welche durch kleine Hinweise in HTML inkludiert werden können. Aber wie funktioniert das Ganze? Controller Ein Controller ist die grundlegende Strukturierungseinheit <a class="read-more" href="https://mobile.fhstp.ac.at/development/stimulus/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/development/stimulus/">Stimulus</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><a href="https://stimulus.hotwired.dev/">https://stimulus.hotwired.dev/</a></p>



<p>Stimulus, ein modernes JavaScript-Framework, das ein bestehendes HTML-DOM problemlos ergänzen kann. Aber warum ist Stimulus ein nützliches Tool?</p>



<p>Alles in allem ist Stimulus eine ~30kb große Bibliothek, die kleine, wiederverwendbare JavaScript Bausteine beinhaltet, welche durch kleine Hinweise in HTML inkludiert werden können.</p>



<p>Aber wie funktioniert das Ganze?</p>



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



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



<p>Ein <code>Controller</code> ist die grundlegende Strukturierungseinheit einer Stimulus-Anwendung.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: jscript; title: ; notranslate">
import { Controller } from &quot;@hotwired/stimulus&quot;

export default class extends Controller {
  // …
}

</pre></div>


<p>Im Dateinamen werden mehrere Worte durch Unterstriche oder Bindestriche getrennt:</p>



<p><code>controllers/sidebar_controller.js</code></p>



<p><code>controllers/delete_modal_controller.js</code></p>



<p></p>



<p><code>Identifiers</code> sind die Namen, die verwendet werden um eine Controller-Klasse zu referenzieren. Wenn ein Element mittels <code>data-controller</code> Attribute hinzugefügt wird, liest Stimulus den Identifier aus dem Attribut und erstellt eine neue Instanz der Controller-Klasse.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: xml; title: ; notranslate">
&lt;div data-controller=&quot;sidebar&quot;&gt;&lt;/div&gt;

</pre></div>


<p>Hier hat das Element den Controller <code>controllers/sidebar_controller.js</code></p>



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



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



<p>Wenn Stimulus beispielsweise mit Webpack genutzt wird, gibt es die Möglichkeit das Paket <code>@hotwired/stimulus-webpack-helpers</code> zu nutzen um die Controller-Klassen automatisch zu laden und zu registrieren:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: jscript; title: ; notranslate">
import { Application } from &quot;@hotwired/stimulus&quot;
import { definitionsFromContext } from &quot;@hotwired/stimulus-webpack-helpers&quot;

window.Stimulus = Application.start()
const context = require.context(&quot;./controllers&quot;, true, /\\.js$/)
Stimulus.load(definitionsFromContext(context))

</pre></div>


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



<h2 class="wp-block-heading">Manuelle Einbindung</h2>



<p>Ohne den Webpack Helper muss jede Controller-Klasse manuell geladen und registriert werden z.B.:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: jscript; title: ; notranslate">
import SidebarController from &quot;./controllers/sidebar_controller&quot;

application.register(&quot;sidebar&quot;, SidebarController)

</pre></div>


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



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



<p>Actions sind die Events, die vom DOM ausgeführt werden.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: xml; title: ; notranslate">
&lt;div data-controller=&quot;sidebar&quot;&gt;
	&lt;button data-action=&quot;click-&gt;sidebar#open&quot;&gt;…&lt;/button&gt;
&lt;/div&gt;

</pre></div>

<div class="wp-block-syntaxhighlighter-code "><pre class="brush: jscript; title: ; notranslate">
// controllers/sidebar_controller.js
import { Controller } from &quot;@hotwired/stimulus&quot;

export default class extends Controller {
  open(event) {
    // …
  }
}

</pre></div>


<ul class="wp-block-list"><li><code>click</code> ist der Name des Event Listeners</li><li><code>sidebar</code> ist der Name des Controllers</li><li><code>open</code> ist der Name der Methode</li></ul>



<p>Hier gibt es auch die Möglichkeit für globale Events, also Event Listeners, die auf das Fenster oder das Dokument hören. Beispielsweise:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: xml; title: ; notranslate">
&lt;div data-controller=&quot;sidebar&quot;
     data-action=&quot;resize@window-&gt;sidebar#layout&quot;&gt;
&lt;/div&gt;

</pre></div>


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



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



<p>Targets referenzieren bestimmte Elemente beim Namen.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: xml; title: ; notranslate">
&lt;div data-controller=&quot;sidebar&quot;&gt;
  &lt;div data-sidebar-target=&quot;overlay&quot;&gt;&lt;/div&gt;
&lt;/div&gt;

</pre></div>


<p>Die Targets werden im Controller mittels einem <code>static targets</code> Array definiert</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: jscript; title: ; notranslate">
// controllers/sidebar_controller.js
import { Controller } from &quot;@hotwired/stimulus&quot;

export default class extends Controller {
  static targets = &#x5B; &quot;overlay&quot; ]
}

</pre></div>


<p>Jedes Target kann mittels <code>this.[name]Target</code> innerhalb des Controllers aufgerufen werden. Hier also z.B. <code>this.overlayTarget</code>.</p>



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



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



<p>Ähnlich können HTML Attribute für Daten verwendet werden.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: xml; title: ; notranslate">
&lt;div data-controller=&quot;sidebar&quot;
     data-sidebar-color-value=&quot;#000&quot;&gt;
&lt;/div&gt;

</pre></div>

<div class="wp-block-syntaxhighlighter-code "><pre class="brush: jscript; title: ; notranslate">
// controllers/sidebar_controller.js
import { Controller } from &quot;@hotwired/stimulus&quot;

export default class extends Controller {
  static values = {
    color: String
  }
}

</pre></div>


<p>Auf diesen Wert kann dann mittels <code>this.colorValue</code> zugegriffen werden.</p>



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



<h2 class="wp-block-heading">Lifecycle Callbacks</h2>



<p>Spezielle Methoden, ermöglichen es mit den <code>Lifecycle Callbacks</code> direkt zu reagieren, wenn ein Controller eine Verbindung zu einem Dokument herstellt oder getrennt wird.</p>



<p>Methoden:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="698" height="195" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2022/02/grafik.png" alt="" class="wp-image-9494"/></figure>



<p>Quelle: <a href="https://stimulus.hotwired.dev/reference/lifecycle-callbacks"></a><a href="https://stimulus.hotwired.dev/reference/lifecycle-callbacks">https://stimulus.hotwired.dev/reference/lifecycle-callbacks</a> (15.02.2022, 12:10)</p>



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



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



<p>Ein <strong>Controller</strong> wird verbunden wenn entweder eines seiner Elemente im Dokument vorhanden ist oder sein Identifier in einem <code>data-controller</code> Attribute aufgerufen wird.</p>



<p>Wenn ein Controller verbunden wird, wird die <code>connect()</code> Methode aufgerufen.</p>



<p>Ein <strong>Target</strong> wird verbunden wenn entweder das Element im Dokument innerhalb des jeweiligen Controller Elements vorhanden ist oder sein Identifier vorhanden ist (<code>data-{identifier}-target</code>).</p>



<p>Wenn ein Target verbunden wird, wird die <code>[name]TargetConnected()</code> Methode aufgerufen, dies wird außerdem <strong>VOR</strong> der allgemeinen <code>connect()</code> Methode aufgerufen.</p>



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



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



<p>Ein verbundener Controller wird getrennt wenn eine “verbindenden” Bedingungen nicht mehr zutrifft. Wenn also beispielsweise das Element vom DOM, das Eltern Element enfernt oder ersetzt wird oder auch wenn das <code>data-controller</code> Attribute entfernt oder überschrieben wird.</p>



<p>In einem dieser Fälle wird die Methode <code>disconnect()</code> aufgerufen.</p>



<p>Die gleiche Vorgehensweise trifft auf die Trennung eines Targets zu hier wird <code>[name]TargetDisconnected()</code> aufgerufen. Dies wird ebenfalls VOR der Controller <code>disconnect()</code> Funktion ausgeführt.</p>



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



<h2 class="wp-block-heading">Sidebar Beispiel</h2>



<p>Hier ein Beispiel für eine einfache “Sidebar” Erstellung. In diesem Beispiel wird anhand von Buttons eine Sidebar ein- bzw. ausgeblendet. Hier wird mittels Webpack das <code>script.js</code> generiert, in welchem wie oben beschrieben, die Controller Klasse eingebunden wird.</p>



<p>Die Buttons rufen die Funktionen <code>open()</code> und <code>close()</code> auf, die im <code>sidebar_controller</code> definiert sind. In den Funktionen wird die CSS Klasse <code>.hidden</code> hinzugefügt bzw. entfernt.</p>



<p><code>index.html</code></p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: xml; title: ; notranslate">
&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;title&gt;Stimulus&lt;/title&gt;
    &lt;link rel=&quot;stylesheet&quot; href=&quot;/dist/css/style.css&quot;&gt;
&lt;/head&gt;
&lt;body data-controller=&quot;sidebar&quot;&gt;
    &lt;div class=&quot;sidenav hidden&quot; data-action=&quot;click-&gt;sidebar#close&quot; data-sidebar-target=&quot;overlay&quot;&gt;
        &lt;button&gt;Close Sidebar&lt;/button&gt;
    &lt;/div&gt;

    &lt;main&gt;
        &lt;h1&gt;Stimulus Sidebar&lt;/h1&gt;
        &lt;button data-action=&quot;click-&gt;sidebar#open&quot;&gt;Open Sidebar&lt;/button&gt;
    &lt;/main&gt;

    &lt;script src=&quot;/dist/javascript/script.js&quot;&gt;&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;

</pre></div>


<p><code>style.scss</code></p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: css; title: ; notranslate">
.sidenav {
    height: 100%;
    width: 200px;
    position: fixed;
    z-index: 1;
    top: 0;
    left: 0;
    background-color: #111;
    overflow-x: hidden;
    padding: 2rem;
}

.hidden {
    visibility: hidden;
}

main {
    padding: 2rem;
}

</pre></div>


<p><code>script.js</code></p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: jscript; title: ; notranslate">
import { Application } from &quot;@hotwired/stimulus&quot;
import { definitionsFromContext } from &quot;@hotwired/stimulus-webpack-helpers&quot;

window.Stimulus = Application.start()
const context = require.context(&quot;./controllers&quot;, true, /\\.js$/)
Stimulus.load(definitionsFromContext(context))

</pre></div>


<p><code>sidebar_controller.js</code></p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: jscript; title: ; notranslate">
import { Controller } from &quot;@hotwired/stimulus&quot;

export default class extends Controller {

    static targets = &#x5B;
        &quot;overlay&quot;
    ]

    connect() {
        console.log(&quot;Sidebar Controller connected&quot;);
    }

    open() {
        console.log(&quot;OPEN&quot;);
        this.overlayTarget.classList.remove(&quot;hidden&quot;);
    }

    close() {
        console.log(&quot;CLOSE&quot;);
        this.overlayTarget.classList.add(&quot;hidden&quot;);
    }
}

</pre></div>


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



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



<p><a href="https://stimulus.hotwired.dev/">https://stimulus.hotwired.dev/</a></p>



<p><a href="https://pspdfkit.com/blog/2018/introduction-to-stimulus-js/">https://pspdfkit.com/blog/2018/introduction-to-stimulus-js/</a></p>



<p><a href="https://gist.github.com/mrmartineau/a4b7dfc22dc8312f521b42bb3c9a7c1e">https://gist.github.com/mrmartineau/a4b7dfc22dc8312f521b42bb3c9a7c1e</a></p>



<p><a href="https://www.smashingmagazine.com/2020/07/introduction-stimulusjs/">https://www.smashingmagazine.com/2020/07/introduction-stimulusjs/</a></p>



<p><a href="https://egghead.io/lessons/javascript-fire-a-stimulus-controller-action-on-a-click-event">https://egghead.io/lessons/javascript-fire-a-stimulus-controller-action-on-a-click-event</a></p>



<p></p>



<p></p>
<p>The post <a href="https://mobile.fhstp.ac.at/development/stimulus/">Stimulus</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>FeliCity &#8211; Projektbeitrag</title>
		<link>https://mobile.fhstp.ac.at/development/native-development/felicity-projektbeitrag/</link>
		
		<dc:creator><![CDATA[Bettina Bröthaler]]></dc:creator>
		<pubDate>Tue, 21 Sep 2021 20:17:38 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Native Development]]></category>
		<category><![CDATA[Projekte]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Nest.js]]></category>
		<category><![CDATA[TypeORM]]></category>
		<category><![CDATA[Typescript]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=9070</guid>

					<description><![CDATA[<p>Im Rahmen des Semesterprojektes, der Masterklasse Mobile im zweiten und dritten Semester, haben wir (Michalea Buschberger und Bettina Bröthaler) die Mobile App „FeliCity“ implementiert. Die App ist eine Sightseeing App, die anhand von Kategorien wie beispielsweise Kunst &#38; Kultur, Natur Pur oder Geschichte den Usern die Möglichkeit bietet, die Stadt mit Rundwegen per Navigation die <a class="read-more" href="https://mobile.fhstp.ac.at/development/native-development/felicity-projektbeitrag/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/development/native-development/felicity-projektbeitrag/">FeliCity &#8211; Projektbeitrag</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Im Rahmen des Semesterprojektes, der Masterklasse Mobile im zweiten und dritten Semester, haben wir (Michalea Buschberger und Bettina Bröthaler) die Mobile App „FeliCity“ implementiert. Die App ist eine Sightseeing App, die anhand von Kategorien wie beispielsweise <strong>Kunst &amp; Kultur</strong>, <strong>Natur Pur</strong> oder <strong>Geschichte</strong> den Usern die Möglichkeit bietet, die Stadt mit Rundwegen per Navigation die Stadt zu besichtigen. Außerdem beinhaltet die App Informationen zu den einzelnen Sehenswürdigkeiten.</p>



<h2 class="wp-block-heading">Zuständigkeiten</h2>



<p>Für die Design Guidelines sowie die Umsetzung des Designs war Michaela zuständig. Auch die Frontendentwicklung mittels Android lag in ihrem Zuständigkeitsbereich.</p>



<p>Datenbank, Backendentwicklung mit NestJs und Content lag in Bettinas Zuständigkeit.</p>



<h2 class="wp-block-heading">Masterklassen Zusammenarbeit</h2>



<p>Im Rahmen des zweiten Semesters war außerdem im Rahmen einer anderen Lehrveranstaltung die Zusammenarbeit zwischen den Masterklassen angedacht. Somit hatten wir das Glück drei Kollegen beauftragen zu können uns bei der Erstellung der Inhalte zu unterstützen.</p>



<p>Lisa-Maria Gaff und Miriam Widhalm aus der Masterklasse Grafik Design haben uns wunderschöne Grafiken, Icons und ein fantastisches Logo kreiert und Sebastian Fröhlich war für die Fotografische Darstellung ausgewählter Wiener Sehenswürdigkeiten verantwortlich.</p>



<p>Einen herzlichen Dank nochmal an dieser Stelle!</p>



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



<p>Michaela war für das Design und die grafischen Guidelines verantwortlich. Nach der Erstellung der Mockups und der Richtlinien wurde das Design verfeinert und schließlich fertiggestellt.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1386" height="421" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2021/09/FeliCity_BlogBeitrag_DesignGuideLines.png" alt="" class="wp-image-9093"/></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1006" height="649" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2021/09/FeliCity_BlogBeitrag_Design.jpg" alt="" class="wp-image-9094"/></figure>



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



<p>Im Backend war die Entscheidung schnell klar, dass wir mit NestJs und TypeORM arbeiten wollen. Für die Frontendentwicklung war die Entscheidung etwas schwieriger. Für die Navigation an sich sollte MapBox verwandet werden. Die Technologie für die Frontendentwicklung fiel, aufgrund der Verwendung von Navigation, auf Android.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="800" height="415" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2021/09/BlogBeitrag_Technologien.png" alt="" class="wp-image-9095" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2021/09/BlogBeitrag_Technologien.png 800w, https://mobile.fhstp.ac.at/wp-content/uploads/2021/09/BlogBeitrag_Technologien-770x400.png 770w" sizes="auto, (max-width: 800px) 100vw, 800px" /></figure>



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



<p>Als erstes wird nach der Installation der App ein Onboarding angeboten, um den Benutzer bereits zum Start die verschiedenen Funktionen vorzuführen. Nach der Registrierung beziehungsweise des Logins hat ein Benutzer die Möglichkeit sich die verfügbaren Städte anzusehen. Unter einem Benutzerprofil können die angegebenen Daten wie Username und Email eingesehen und auch das aktuelle Passwort auf ein neues abgeändert werden. Bei uns ist es momentan möglich Linz und Wien zu erforschen. Auch die zukünftig verfügbaren Städte sind hier aufgelistet aber noch nicht auswählbar.</p>



<p>Nach einer Stadtauswahl bekommt man die auswählbaren Kategorien, sowie die verfügbaren Sehenswürdigkeiten angezeigt. Auch die einzelnen Sehenswürdigkeiten kann man sich genauer ansehen und bekommt grundlegende Informationen zu den einzelnen Plätzen.</p>



<p>Ein großer Teil der App besteht im Planen der Routen. Ein Nutzer kann sich seine bereits erstellten Routen ansehen und auch die veröffentlichten Routen anderer Nutzer speichern und zu einem späteren Zeitpunkt gehen.</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:33.34%">
<figure class="wp-block-image alignwide size-large"><img loading="lazy" decoding="async" width="375" height="800" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2021/09/FeliCity_BlogBeitrag_KeineRoutenScreen-375x800.png" alt="" class="wp-image-9096"/></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.34%">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="376" height="800" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2021/09/FeliCity_BlogBeitrag_RoutenScreen-376x800.png" alt="" class="wp-image-9097"/></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="376" height="800" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2021/09/FeliCity_BlogBeitrag_Navigation-376x800.png" alt="" class="wp-image-9098"/></figure>
</div>
</div>



<p>Für die Routenplanung haben wir einen Konfigurator. Durch die Eingabe mehrerer Parameter wird eine Sammlung an Sehenswürdigkeiten aus dem Backend geliefert, die der Nutzer im Frontend noch weiterbearbeiten kann bevor er diese abspeichern und gehen kann.</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:33.34%">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="376" height="800" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2021/09/FeliCity_BlogBeitrag_AutomConfig-376x800.png" alt="" class="wp-image-9100"/></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.34%">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="376" height="800" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2021/09/FeliCity_BlogBeitrag_AutomConfig2-376x800.png" alt="" class="wp-image-9101"/></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="376" height="800" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2021/09/FeliCity_BlogBeitrag_AutomConfig3-376x800.png" alt="" class="wp-image-9102"/></figure>
</div>
</div>



<p>Einer der größten Teile der App bildet unter anderem die Routen-Optimierung und Navigation zu den einzelnen Teilzielen innerhalb einer Route ab. Diese Funktionalitäten wurden im dritten Semester noch in Android/Kotlin mit dem Plugin Mapbox Navigation und Optimization umgesetzt.</p>



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



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



<p>Für mich bestanden die größten Learnings in NestJs, sowie in TypeScript und TypeORM. Außerdem konnte ich mich weiter mit dem Aufbau von Datenbanken auseinandersetzen und auch mit der Serverkonfiguration für NodeJs Projekte. Auch konnte ich mich mit der API Definition unserer App auseinandersetzen und mir den Mailversand genauer ansehen.</p>



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



<p>Da für mich die Entwicklung in Android (und Kotlin) ganz was Neues war, bestand für mich hier das größte Learning. Dazu gehörte nicht nur Basiswissen wie beispielsweise wie binde ich Vectoren oder Images ein, was ist eine Activity oder ein Fragment, wie verwende ich Navhosts, sondern auch der Einsatz von Retrofit und der Mapbox stellten eine neue und interessante Herausforderung für mich da. Jedoch habe ich das Styling von Screens und Einbinden von Ressourcen um Einiges zeitaufwändiger empfunden als in der Webentwicklung.</p>



<h2 class="wp-block-heading">Wie es weitergehen soll…</h2>



<p>Wir haben noch viele Ideen, wie wir FeliCity noch besser machen können. Unser Ziel wäre es hier, die App zu veröffentlichen und möglicherweise noch für iOS zu entwickeln.</p>



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



<h2 class="wp-block-heading">Admin Interface</h2>



<p>Das Admin Interface wurde mit dem React Framework NextJs entwickelt. Die Daten werden über die NestJs API abgerufen und aktualisiert. Anmelden können sich hier nur Admin Mitglieder, die damit die Berechtigung haben Inhalte zu aktualsieren. Das Interface soll also nicht, wie die zugehörige App zum navigieren genutzt werden, sondern zu Administrativen Zwecken verwendet werden. Das Design ist an die mobile Applikation angepasst.</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/2022/02/grafik-1-1540x800.jpg" alt="" class="wp-image-9711" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2022/02/grafik-1-1540x800.jpg 1540w, https://mobile.fhstp.ac.at/wp-content/uploads/2022/02/grafik-1-770x400.jpg 770w" sizes="auto, (max-width: 1540px) 100vw, 1540px" /><figcaption>Städteübersicht</figcaption></figure>



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



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2022/02/grafik-1-2-1540x800.jpg" alt="" class="wp-image-9713" width="840" height="436" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2022/02/grafik-1-2-1540x800.jpg 1540w, https://mobile.fhstp.ac.at/wp-content/uploads/2022/02/grafik-1-2-770x400.jpg 770w" sizes="auto, (max-width: 840px) 100vw, 840px" /><figcaption>Wien Detailansicht</figcaption></figure>



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



<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/2022/02/grafik-1-3-1540x800.jpg" alt="" class="wp-image-9714" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2022/02/grafik-1-3-1540x800.jpg 1540w, https://mobile.fhstp.ac.at/wp-content/uploads/2022/02/grafik-1-3-770x400.jpg 770w" sizes="auto, (max-width: 1540px) 100vw, 1540px" /><figcaption>Sehenswürdigkeiten Übersicht</figcaption></figure>



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



<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/2022/02/grafik-1-4-1540x800.jpg" alt="" class="wp-image-9715" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2022/02/grafik-1-4-1540x800.jpg 1540w, https://mobile.fhstp.ac.at/wp-content/uploads/2022/02/grafik-1-4-770x400.jpg 770w" sizes="auto, (max-width: 1540px) 100vw, 1540px" /><figcaption>Sehenswürdigkeit Detail</figcaption></figure>



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



<p>Das Admin Interface soll dafür genutzt werden die Daten auf dem aktuellen Stand zu halten. Hierfür können die Formulare genutzt werden. Beispielsweise für eine Stadt:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1663" height="1383" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2022/02/grafik-1-5.jpg" alt="" class="wp-image-9716" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2022/02/grafik-1-5.jpg 1663w, https://mobile.fhstp.ac.at/wp-content/uploads/2022/02/grafik-1-5-1536x1277.jpg 1536w" sizes="auto, (max-width: 1663px) 100vw, 1663px" /><figcaption>Stadt Bearbeiten</figcaption></figure>



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



<p>Auf die gleiche Art und Weise können Städe, Sehenswürdigkeiten oder Routen erstellt oder aktualisiert werden.</p>



<p></p>
<p>The post <a href="https://mobile.fhstp.ac.at/development/native-development/felicity-projektbeitrag/">FeliCity &#8211; Projektbeitrag</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>WildWeek: PubQuiz</title>
		<link>https://mobile.fhstp.ac.at/allgemein/wildweek-pubquiz/</link>
		
		<dc:creator><![CDATA[Bettina Bröthaler]]></dc:creator>
		<pubDate>Mon, 20 Sep 2021 09:41:11 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Projekte]]></category>
		<category><![CDATA[Express.js]]></category>
		<category><![CDATA[Extreme Programming Week]]></category>
		<category><![CDATA[Node.js]]></category>
		<category><![CDATA[Vue.js]]></category>
		<category><![CDATA[websockets]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=9068</guid>

					<description><![CDATA[<p>Bei der WildWeek der Masterklasse Mobile handelt es sich um eine „Extreme Programming Week“ während des zweiten Master Semesters. Durch das Stattfinden von Distance Learning konnten wir diese Woche nicht an der Fachhochschule umgeben von Kaffee und Bildschirmen verbringen, sondern waren mittels Discord miteinander verbunden. So der Begriff WildWeek ist ja nun geklärt. Eine Woche <a class="read-more" href="https://mobile.fhstp.ac.at/allgemein/wildweek-pubquiz/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/wildweek-pubquiz/">WildWeek: PubQuiz</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Bei der WildWeek der Masterklasse Mobile handelt es sich um eine „Extreme Programming Week“ während des zweiten Master Semesters. Durch das Stattfinden von Distance Learning konnten wir diese Woche nicht an der Fachhochschule umgeben von Kaffee und Bildschirmen verbringen, sondern waren mittels Discord miteinander verbunden.</p>



<p>So der Begriff WildWeek ist ja nun geklärt. Eine Woche Programmieren. Aber mit der einen Woche ist es nicht getan. Zuerst musste ein Projekt her. Kollektiv entschieden wir, die Masterklasse Mobile, uns für die Umsetzung einer App, dem „Pub Quiz“. Es handelt sich um eine App, mit der man sich ein Gefühl von Gemeinschaft nach Hause holen können, soll. Außerdem soll es möglich sein mit der App direkt in einem Pub an einem solchen Quiz teilnehmen zu können.</p>



<p>Für die Umsetzung wurden die Technologien NodeJs mit ExpressJs für die Entwicklung im Backend, sowie VueJs für die Frontendentwicklung herangezogen. Weiters wurde socket.io für die Verbindung der Spiele herangezogen.</p>



<p>Im Vorfeld war es unsere Aufgabe uns individuell auf die zugeteilten Aufgaben vorzubereiten, Tutorials anzusehen und die einzelnen Anteile vorzubereiten.</p>



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



<p>Meine Aufgaben lagen neben der Backendentwicklung auch in der Organisation und Koordination in der Vorbereitung. Wir mussten einige Vorbereitungen treffen, wie Technologieentscheidungen, Erstellung von Diagrammen und das Design sollte auch im Vorhinein erstellt werden.</p>



<p>Mit dem Start der Woche hatten wir also alle unsere Teile soweit vorbereitet, dass wir mit der Umsetzung starten konnten. Während der Woche war ich Teil des Backendteams für die Organisationsplattform. In diesem Teil der App sollten die Spiele erstellt werden, Freunde eingeladen werden und ein Spiel gestartet werden können. Auch die Statistik sollte ein Teil hiervon sein. Hier hatte ich die Möglichkeit mein Wissen in NodeJs zu vertiefen und auch Kenntnisse im Websocket Bereich zu sammeln.</p>



<p>Mein größter Fortschritt war wohl in Sachen Websockets. Ich war mit dieser Art Kommunikation zwischen Front- und Backend noch nicht in Berührung gekommen und konnte somit ein neues Feld kennen lernen. Für Anwender mag es unbedeutend erscheinen, dass ein Name neben einem andren auftaucht, wenn ein weiterer Spieler teilnimmt, für mich war das wohl der spannendste Fortschritt.</p>



<p>Schwierig war wohl die Kommunikation innerhalb der Gruppe. Da wir alle isoliert zuhause saßen und lediglich online verbunden waren, hatten wir hier einige Anlaufschwierigkeiten. Ich denke aber dennoch lässt sich, das Ergebnis dieser Woche sehen!</p>



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



<p>Ich durfte die technische Planung und Leitung des Projektes übernehmen. Zur Vorbereitung dieser intensiven Programmier-Woche kümmerte ich mich um die Zusammenführung einzelner Design- und Architektur-Konzepte. Außerdem bereitete ich die Entwicklungsumgebung für die Arbeit am Projekt vor. Dabei forderte mich am meisten die Einrichtung von Pipelines zur automatischen Testung und Veröffentlichung des Programms auf unserem Server.<br>Während der Woche investierte ich die meiste Zeit in Meetings zur Abstimmung der einzelnen Entwicklungsstränge und mit dem Überprüfen von geschriebenen Code, sowie dem Instandhalten des Environments.<br>Ich durfte aber auch an einigen Features, wie der Erstellung eines Quizzes, mitarbeiten.</p>



<h3 class="wp-block-heading">My Learnings</h3>



<h4 class="wp-block-heading">Arbeit mit Gitlab CI/CD</h4>



<p>Ein System mit Frontend und Backend auf einem Produktiv-System mit funktionierender Kommunikation zum Laufen zu bringen, ist nicht die einfachste Aufgabe. Dafür musste ich schon viel Zeit in der Vorbereitung für die Woche, aber auch an den ersten Tagen der Woche investieren. Den Umgang mit Docker konnte ich außerdem noch vertiefen.</p>



<h4 class="wp-block-heading">Konzeption eines Full Stack Web Projekts</h4>



<p>In einem derart großen und komplexen Projekt mit so vielen Teammitgliedern habe ich gelernt, wie wichtig es ist, das Design, die User Experience und die Usability im Vorhinein zu planen und mit der Entwicklung nicht zu früh anzufangen. Sonst besteht die Gefahr, dass zwei verschiedene Entwicklungsstränge aneinander vorbei arbeiten und nicht dieselbe Vision von der Funktionalität vor sich haben.</p>



<h4 class="wp-block-heading">Zusammenarbeit bei verschiedenen Arbeitsweisen</h4>



<p>Je unterschiedlicher die Arbeitsweisen, desto besser muss die Planung sein. In bisherigen FH-Projekte mit einzelnen Kolleginnen und Kollegen gab es da wenige Probleme. Man sucht sich schließlich Projektpartnerinnen und -partner aus, mit denen man gut zusammenarbeiten kann. In diesem Projekt sind einige unterschiedliche Arbeitsweisen aufeinander getroffen und es hätte zu manchen Zeitpunkten bessere Koordination und womöglich konkretere Pläne benötigt, um stets das Ziel im Auge zu behalten.</p>



<h4 class="wp-block-heading">Discord ist gold wert</h4>



<p>Discord ist ein Tool zur Kommunikation, das aus der Videospielszene hervorgegangen ist. Es erlaubt, einerseits über Textkanäle zu chatten, aber auch in verschiedenen Sprachkanälen zu reden bzw. sogar per Video zu telefonieren und den Bildschirm zu teilen. Dabei sieht man dauerhaft, wer gerade mit wem in einem Gespräch ist und wer verfügbar ist. Die digitale Kommunikation funktioniert besser, wenn Nutzer wissen, wer online ist und wen sie gerade nicht stören mit ihrer Frage. Die Nutzung dieses Tools hat uns meiner Meinung nach besonders geholfen.</p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/wildweek-pubquiz/">WildWeek: PubQuiz</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>SSH Schlüssel &#038; GitLab</title>
		<link>https://mobile.fhstp.ac.at/allgemein/ssh-schluessel-gitlab/</link>
		
		<dc:creator><![CDATA[Bettina Bröthaler]]></dc:creator>
		<pubDate>Sun, 19 Sep 2021 21:45:41 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=9047</guid>

					<description><![CDATA[<p>Definition, Verwendung von mehreren SSH Schlüsseln mit GIT Definition SSH Schlüssel Bei SSH Schlüsseln (Secure Shell) handelt es sich um eine Zugangsberechtigung, die im SSH Protokoll verwendet werden. Die Schlüssel gibt es in vielen Größen, die beliebteste Wahl ist eine RSA 2048 Bit Verschlüsselung, welche mit einem 617 Stellen langen Passwort vergleichbar ist. SSH Schlüssel <a class="read-more" href="https://mobile.fhstp.ac.at/allgemein/ssh-schluessel-gitlab/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/ssh-schluessel-gitlab/">SSH Schlüssel &#038; GitLab</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><strong>Definition, Verwendung von mehreren SSH Schlüsseln mit GIT</strong></p>



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



<h2 class="wp-block-heading">Definition SSH Schlüssel</h2>



<p>Bei SSH Schlüsseln (Secure Shell) handelt es sich um eine <strong>Zugangsberechtigung</strong>, die im SSH Protokoll verwendet werden. Die Schlüssel gibt es in vielen Größen, die beliebteste Wahl ist eine RSA 2048 Bit Verschlüsselung, welche mit einem 617 Stellen langen Passwort vergleichbar ist. SSH Schlüssel liegen also immer paarweise vor und jedes Paar besteht aus einem privaten und einem öffentlichen Schlüssel. [1]</p>



<p>Der <strong>private Schlüssel</strong> bleibt auf dem System, das für den Zugriff auf ein entferntes System verwendet wird, also auf dem Desktop oder Laptop des Benutzter. In Zusammenhang mit einem GIT Repository, also dem Ort, an dem ein Projekt geklont wird. Der private Schlüssel wird dann zum Entschlüsseln von Informationen verwendet, welche im SSH Protokoll ausgetauscht werden. Private Schlüssel sollten nie mit jemandem geteilt werden und sicher auf dem System gespeichert werden. Bei der Erstellung eines SSH Schlüssels kann auch ein Passwort vergeben werden, um dem Schlüssel zu sichern. [1]</p>



<p>Ein <strong>öffentlicher Schlüssel</strong> wird, im Gegensatz zum Privaten, zur Verschlüsselung von Informationen verwendet, kann weitergegen werden. Dieser Schlüssel wird im Zusammenhang mit GIT im Repository hinterlegt. [1]</p>



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



<h1 class="wp-block-heading">Einen SSH Schlüssel generieren</h1>



<p>Mit dem Befehl <code>ssh-keygen</code> kann ein neuer SSH Key generiert werden. Dieser Befehl kann direkt über die Kommandozeile ausgeführt werden.</p>



<pre class="wp-block-code"><code>$ ssh-keygen -t rsa -C "username"</code></pre>



<div class="wp-block-image"><figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2021/09/sshKeys_Abbildung1.png" alt="" class="wp-image-9048" width="589" height="74"/><figcaption><a>Abbildung </a>1 &#8211; &#8220;ssh-keygen&#8221; Eingabe und Pfad Angabe</figcaption></figure></div>



<p>Nach dieser Eingabe wird der Speicherort festgelegt. Standardmäßig wird vorgeschlagen den Schlüssel in das <code>./ssh </code>Verzeichnis abzuspeichern in die Datei <code>id_rsa</code>. Wenn der Vorgegebene Pfad verwendet werden soll kann man dies einfach mit der Eingabetaste bestätigen. Wenn ein anderer Pfad verwendet werden soll kann hier ein anderer Pfad definiert werden, beispielsweise:</p>



<pre class="wp-block-code"><code>/C/Users/Betti/.ssh/username</code></pre>



<div class="wp-block-image"><figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2021/09/sshKeys_Abbildung2.png" alt="" class="wp-image-9049" width="600" height="104"/><figcaption><a>Abbildung </a>2 &#8211; Passwort Eingabe</figcaption></figure></div>



<p>Danach kann man ein Passwort angeben, um die Verwendung zu sichern. Mit Enter kann man dies auch überspringen und das Passwort leer lassen. Danach wird die Wiederholung des Passwortes gefordert.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="598" height="377" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2021/09/sshKeys_Abbildung3.png" alt="" class="wp-image-9050"/><figcaption><a>Abbildung </a>3 &#8211; Schlüssel Generierung im Terminal</figcaption></figure></div>



<p>Nach der Wiederholung des Passwortes wird der SSH Schlüssel generiert und abgespeichert. Wenn man hier das <code>./ssh</code> Verzeichnis öffnet kann man die genierten Dateien sehen.</p>



<div class="wp-block-image"><figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2021/09/sshKeys_Abbildung4-1.png" alt="" class="wp-image-9052" width="239" height="67"/><figcaption><a>Abbildung </a>4 – Screenshot: Ausschnitt SSH Verzeichnis in Visual Studio Code</figcaption></figure></div>



<p>In Abbildung 4 sieht man die beiden Dateien. Die erste Datei username beinhaltet den privaten Schlüssel die Datei username.pub den Öffentlichen. Erkennbar ist hier es wird der eingegebene String als Dateiname übernommen.</p>



<div class="wp-block-image"><figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2021/09/sshKeys_Abbildung5.png" alt="" class="wp-image-9053" width="239" height="53"/><figcaption><a>Abbildung </a>5 &#8211; Screenshot: Ausschnitt SSH Verzeichnis in Visual Studio Code Standardgenerierung</figcaption></figure></div>



<p>In Abbildung 5 sieht man das Ergebnis von einer SSH Generierung, wenn die Pfad Eingabe den Standard beinhaltet. Standardmäßig werden hier also Dateien generiert mit dem Namen <code>id_rsa</code>.</p>



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



<h2 class="wp-block-heading">Kopieren eines „Public Keys“</h2>



<p>Um den öffentlichen Schlüssel zu verwenden muss dieser kopiert werden. Hierfür gibt es mehrere Möglichkeiten. Zum einen kann das<code> ./ssh</code> Verzeichnis mit einem Text Editor geöffnet werden und die<code> .pub </code>Datei des gewünschten Schlüssels geöffnet werden. Hier kann der String direkt kopiert werden.</p>



<p>Ein anderer Weg ist das Kopieren des Schlüssels über die Kommandozeile:</p>



<pre class="wp-block-code"><code>$ clip &lt; ~/.ssh/username.pub</code></pre>



<p>Durch den <code>clip </code>Befehl wird der öffentliche Schlüssel aus der username.pub Datei direkt in den Zwischenspeicher geladen. (Funktioniert nicht auf MAC)</p>



<pre class="wp-block-code"><code>$ cat ~/.ssh/username.pub</code></pre>



<p>Mit <code>cat </code>wird der Schlüssel im Terminal angezeigt und kann von dort kopiert werden. (Funktioniert auf MAC)</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="614" height="201" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2021/09/sshKeys_Abbildung6.png" alt="" class="wp-image-9054"/><figcaption><a>Abbildung </a>6 &#8211; Ausgabe der Kopierbefehle im Terminal</figcaption></figure></div>



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



<h1 class="wp-block-heading">GIT Repository und SSH</h1>



<p>SSH ist eine von mehreren Möglichkeiten ein GIT Repository zu klonen. Hierzu hat man in einem Repository einen Link der direkt genutzt werden kann.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="398" height="339" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2021/09/sshKeys_Abbildung7.png" alt="" class="wp-image-9055"/><figcaption><a>Abbildung </a>7 &#8211; Übertragungslinks GIT Repository</figcaption></figure></div>



<p>Für das Klonen einen Projekts muss zuerst der öffentliche SSH Key im GIT Konto hinterlegt werden, damit die Verbindung funktioniert.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1067" height="529" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2021/09/sshKeys_Abbildung8.png" alt="" class="wp-image-9056"/><figcaption><a>Abbildung </a>8 &#8211; Hinzufügen eines Public SSH Keys im GIT Konto</figcaption></figure></div>



<p>Beim Hinzufügen ist es möglich mehrere Schlüssel zu hinterlegen und diese auch mit einem identifizierbaren Titel sowie einem Ablaufdatum zu versehen. Sobald die Schlüssel am lokalen System und im GIT Konto hinzugefügt wurden kann ohne weitere Anmeldung Daten übertragen werden.</p>



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



<h1 class="wp-block-heading">Mehrere SSH Schlüssel auf einem System</h1>



<p>Soweit so gut, jetzt kommt aber dazu, dass ein einzelner Benutzer mehrere Arbeitsplätze hat. Einen Laptop, einen PC, einen Rechner zuhause, einen in der Firma. Im GIT Konto ist das leicht gelöst, es können mehrere SSH Schlüssel hinterlegt werden. Auf jedem Rechner, der auf das Projekt zugreifen möchte, muss also ein eigener Schlüssel generiert werden und im GIT Konto hinterlegt werden.</p>



<p>Aber nun hat ein Nutzer nicht nur mehrere Arbeitsplätze, sondern auch mehrere GIT Konten. Nehmen wir eines für private Projekte, eines von der Universität oder Fachhochschule und eines vom Arbeitsplatz. Besonders in der momentanen Zeit ist Heimarbeit ein großes Thema und hier kommen mehrere Konten zusammen.</p>



<p>Eine Lösung wird in Stack Overflow [2] beschrieben und zwar die Nutzung einer Konfigurationsdatei für SSH Schlüssel. In dieser Datei werden die verschiedenen Hosts und der Pfad zur jeweiligen Schlüsseldatei hinterlegt.</p>



<p>Weiter oben wurden zwei Schlüsselpaare generiert und im<code> ./ssh</code> Verzeichnis gespeichert. In diesem Ordner erstellt man zusätzlich eine <code>config </code>Datei:</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="395" height="273" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2021/09/sshKeys_Abbildung9.png" alt="" class="wp-image-9057"/><figcaption><a>Abbildung </a>9 &#8211; GIT Konfigurationsdatei</figcaption></figure></div>



<p>In Abbildung 9 sieht man die Konfiguration. Hier wird der Host angegeben sowie, dass die Authentifizierung mittels öffentlichen Schlüssel stattfinden sollte. Im <code>IdentityFile </code>wird dann der Pfad zum privaten Schlüssel angegeben. Beispielsweise wurde der<code> id_rsa</code> Schlüssel für das private GIT Konto generiert und wird zur Datenübertragung verwendet sowie der <code>username </code>Schlüssel für den Zugriff auf <code>xy.gitlab.com</code> verwendet werden soll.</p>



<p>Im lokalen GIT Projekt kann dann, wie folgt, noch die Konfiguration für den Benutzer hinterlegt werden:</p>



<pre class="wp-block-code"><code>$ git config user.name “username”</code></pre>



<pre class="wp-block-code"><code>$ git config user.email “username@email.com”</code></pre>



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



<h1 class="wp-block-heading">Quellenverzeichnis</h1>



<p>1. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Blanton S. What are SSH Keys? [Internet]. JumpCloud. 2021 [cited 2021 May 9]. Available from: https://jumpcloud.com/blog/what-are-ssh-keys</p>



<p>2. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Best way to use multiple SSH private keys on one client [Internet]. Stack Overflow. [cited 2021 Sep 19]. Available from: https://stackoverflow.com/questions/2419566/best-way-to-use-multiple-ssh-private-keys-on-one-client</p>



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



<h1 class="wp-block-heading">Abbildungsverzeichnis</h1>



<ol class="wp-block-list"><li>&#8220;ssh-keygen&#8221; Eingabe und Pfad Angabe.</li><li>Passwort Eingabe</li><li>Schlüssel Generierung im Terminal</li><li>Screenshot: Ausschnitt SSH Verzeichnis in Visual Studio Code.</li><li>Screenshot: Ausschnitt SSH Verzeichnis in Visual Studio Code Standardgenerierung</li><li>Ausgabe der Kopierbefehle im Terminal</li><li>Übertragungslinks GIT Repository</li><li> Hinzufügen eines Public SSH Keys im GIT Konto</li><li>GIT Konfigurationsdatei</li></ol>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/ssh-schluessel-gitlab/">SSH Schlüssel &#038; GitLab</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>CSS-Architekturen</title>
		<link>https://mobile.fhstp.ac.at/allgemein/css-architekturen/</link>
		
		<dc:creator><![CDATA[Bettina Bröthaler]]></dc:creator>
		<pubDate>Fri, 19 Feb 2021 16:14:07 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=8870</guid>

					<description><![CDATA[<p>Einleitung Um den Überblick über alle CSS-Dateien eines großen Projektes zu behalten braucht es eine gewisse Struktur. Besonders, wenn sich das Projekt über eine längere Zeit erstreckt. Nach (Guerriero, 2020) fokussieren sich die verglichenen CSS Architekturen alle auf zwei Ziele. Bei diesen Zielen handelt es sich um Effizienz und Konsistenz. Es soll also sichergestellt werden, <a class="read-more" href="https://mobile.fhstp.ac.at/allgemein/css-architekturen/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/css-architekturen/">CSS-Architekturen</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Einleitung</h2>



<p>Um den Überblick über alle CSS-Dateien eines großen Projektes zu behalten braucht es eine gewisse Struktur. Besonders, wenn sich das Projekt über eine längere Zeit erstreckt. Nach (Guerriero, 2020) fokussieren sich die verglichenen CSS Architekturen alle auf zwei Ziele. Bei diesen Zielen handelt es sich um Effizienz und Konsistenz. Es soll also sichergestellt werden, dass die Zeit in der Entwicklung möglichst gut genutzt werden kann sowie, dass alle Entwickler auf die gleiche Art arbeiten (Guerriero, 2020).</p>



<p>Um diese beiden Ziele zu erreichen braucht ein Projekt eine gewisse Art an Organisation. Besonders wenn mehr als ein Entwickler beteiligt ist, ist es von Vorteil, wenn die Style Beschreibung Regeln folgen. Wenn jede CSS-Regel einfach ans Ende des Stylesheets geschrieben wird, wird es früher oder später zu Komplikationen führen, beispielsweise Unübersichtlichkeit oder unerwünschtes Überschreiben eines vorhergehenden Styling Befehls (<em>Book &#8211; Scalable and Modular Architecture for CSS</em>, o.&nbsp;J., Abschn. Categorizing CSS Rules).</p>



<p>Genau an diesem Punkt setzten CSS-Architekturen ein. Hier werden, je nach Architektur, Regeln definiert wie Klassen benannt werden und in welcher Abfolge die Regeln angeführt werden sollten. Nachfolgend werden die BEM (Block Element Modifier) Methologie sowie die Architekturen Atomic Design, ITCSS (Inverted Triangle CSS) sowie SMACSS (Scalable and modular architecture for CSS) vorgestellt, welche anhand von Online Ressourcen recherchiert wurden.</p>



<h2 class="wp-block-heading">BEM (Block Element Modifier)</h2>



<p>BEM ist eine Benennungsmethode mit dem Ziel wiederverwendbare Komponenten zu erstellen (Guerriero, 2020).</p>



<p>Der <strong>Block</strong> ist das Überelement, welchem die Elemente zugeordnet werden (Guerriero, 2020).</p>



<p>Ein <strong>Element</strong> ist also das Kind eines Blocks, man könnte die Klasse also <code>.block__element</code> nennen (Guerriero, 2020).</p>



<p>Ein <strong>Modifier</strong> ist dagegen eine Variation eines Blocks oder eines Elements. Hier könnte man zum Beispiel <code>.block—modifier </code>als Bezeichnung vergeben um Klarheit über die Zugehörigkeit zu geben (Guerriero, 2020).</p>



<p>Standardsyntax für BEM ist also: <code>.block__element--modifier</code></p>



<h2 class="wp-block-heading">Atomic Design</h2>



<p>In (<em>Atomic Design</em>, 2013) wird von der Aufteilung in kleinste Teile gesprochen. Also das Interfaces aus immer kleineren Komponenten besteht und damit in fundamentale Blöcke aufgeteilt werden kann, was die Basis für ein „Atomisches Design“ bildet. Atomic Design wird in fünf Levels eingeteilt:</p>



<ol class="wp-block-list"><li>Atoms</li><li>Molecules</li><li>Organisms</li><li>Templates</li><li>Pages</li></ol>



<p>Die <strong>Atoms</strong>, also die kleinesten Teile dieses Modells, bilden die Basis. Hier geht es um HTML Tags, wie Form Labels, Inputs oder einzelne Buttons. Auch die Farbschemen, sowie Schriftarten, werden hier definiert. Man kann zusammenfassen, hier werden die „Globalen“ Styles definiert (<em>Atomic Design</em>, 2013).</p>



<p>Mit den <strong>Molecules</strong> wird das ganze etwas größer, die Atome werden zusammengefasst und bilden hier die kleineste Einheit einer Komponente. Diese Moleküle beinhalten auch ihre eigenen Eigenschaften und dienen damit als „Rückgrat“ eines Design Systems. Die, in den Atomen definierten Einzelteile werden hier also zusammengesetzt. Nehmen wir also das Form Label, den Input und den Button und setzten sie zusammen, haben wir ein einfaches Formular (<em>Atomic Design</em>, 2013).</p>



<p>Die Moleküle geben nun die Möglichkeit Blöcke zu bilden. Diese Zusammensetzung ergibt einen <strong>Organisms</strong>. Aus den mehreren Organismen ergeben sich dann <strong>Templates</strong>, hier werden die Inhalte noch von Platzhaltern ausgefüllt, welche dann in der letzten Instanz, den <strong>Pages</strong> selbst, schließlich von den wirklichen Inhalten ausgefüllt werden (<em>Atomic Design</em>, 2013).</p>



<h2 class="wp-block-heading">ITCSS (Inverted Triangle CSS)</h2>



<p>ITCSS hilft CSS-Dateien in einem Projekt zu organisieren. Die Architektur kann auch zusammen mit der BEM Benennungsmethode genutzt werden, um einen noch optimaleren Nutzungsmehrwert hervorzubringen (Kmetko, 2016). Es geht hier darum eine möglichst skalierbare und gut aktualisierbare CSS-Architektur zu erstellen (<em>Was ist ITCSS?</em>, o.&nbsp;J.).</p>



<p>Das Schlüsselprinzip von ITCSS ist, ähnlich dem Atomic Design, das Aufteilen der CSS Code Teile in verschiedene Sektionen, die sogenannten Layers, welche sich in einem verkehrten Dreieck anordnen lassen, wie in Abbildung 1 ersichtlich ist (Kmetko, 2016).</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="658" height="394" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2021/02/grafik.png" alt="" class="wp-image-8872"/><figcaption>Abbildung 1 &#8211; Layers of ITCSS (Kmetko, 2016)</figcaption></figure>



<p>In den <strong>Settings</strong> wird die Basis gelegt. Hier werden Farben, Schriften und Basisgrößen definiert. In den <strong>Tools</strong> werden globale Funktionen und Mixins festgelegt. Die ersten beiden Layer geben also keine CSS-Inhalte direkt aus, sondern legen den Grundstein für die darauf folgenden Schichten (Kmetko, 2016).</p>



<p>In der nächsten Schicht, <strong>Generic</strong>, werden vordefinierte Styles zurückgesetzt oder normalisiert. Zum Beispiel standardmäßige Werte von Listen oder Formulare werden hier korrigiert (Kmetko, 2016).</p>



<p>In der <strong>Elements</strong> Schicht werden HTML Elemente wie H1, P, A, etc. neu definiert (Kmetko, 2016).</p>



<p><strong>Objekte</strong>, bezeichnen klassenbasierte Selektoren. Also Grundgerüste für einzelne Elemente, wie beispielsweise eines Buttons. Hier werden noch keine Sonderfälle behandelt, sondern lediglich das Basisaussehen für die Elemente beschrieben (Kmetko, 2016).</p>



<p>Die spezifischere Beschreibung erfolgt in dem Layer der <strong>Components</strong>. Hier können die zuvor definierten Objekte für speziellere Anwendungen gestylet werden. Die Basis des Buttons soll hier eine andere Hintergrundfarbe bekommen (Kmetko, 2016).</p>



<p>Zuletzt werden die <strong>Utilities</strong> definiert. Hier handelt es sich um Hilfsklassen, in denen zuvor definierte Klassen überschrieben werden können (Kmetko, 2016).</p>



<h2 class="wp-block-heading">SMACSS (Scalable and Modular Architecture for CSS)</h2>



<p>Auch SMACSS ist eine Architektur, die helfen soll Code leserlicher zu gestalten und wartbarer zu machen (Gajic, o.&nbsp;J.).</p>



<p>Eine SMACSS Struktur basiert auf fünf Kategorien (Gajic, o.&nbsp;J.):</p>



<ol class="wp-block-list"><li>Base</li><li>Layout</li><li>Modules</li><li>State</li><li>Theme</li></ol>



<p>In der <strong>Base</strong> Kategorie wird definiert, wie ein einzelnes Element aussehen soll. Hier werden die Standardwerte gesetzt. Hier sollten lediglich Basis Element Selektoren inkludiert werden aber keine expliziten Klassen oder IDs angesprochen werden. Die Grundwerte, die hier gesetzt werden, inkludieren Standardgrößen, Farben und Rahmen (Gajic, o.&nbsp;J.).</p>



<p>In den <strong>Layout</strong> Styles wird die Seite in seine Hauptabschnitte separiert und beinhaltet die Styles für eben diese Abschnitte. Die Navigation zählt hier nicht zu einem Abschnitt, hier geht es wirklich um die „Oberabschnitte“ wie Header, Sidebar, Content und Footer (Gajic, o.&nbsp;J.).</p>



<p><strong>Modules</strong> sind kleinere Teile von Code, die in einem separaten Ordner abgespeichert werden. Hier wird beispielsweise ein „article“ definiert, in dem Module werden auch die Kind-Elemente „title“ und „text“ gespeichert (Gajic, o.&nbsp;J.).</p>



<p>In <strong>State</strong> werden dynamische Situationen beschrieben, beispielsweise das Aussehen eines ausgewählten Elements (Gajic, o.&nbsp;J.).</p>



<p>In der Kategorie <strong>Theme</strong> werden die Theme basierten Regeln definiert. Wiederverwendete Elemente, wie Buttons werden hier mittels Grundregeln für die gesamte Seite definiert (Gajic, o. J.).</p>



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



<p>Wenn man diese CSS-Architekturen betrachtet, fällt auf, dass sie alle ähnlich funktionieren. Die Basis aller Architekturen bildet hier, dass die einzelnen Styles zu Beginn möglichst klein zerlegt werden und danach immer größer zusammengesetzt werden. Hier wird Fokus auf möglichst effiziente Verwendung der Komponenten gelegt.</p>



<p>In der Verwendung wird hier, wie in der Einleitung erwähnt, in allen Architekturen möglichst viel Bedacht auf die Wartbarkeit und damit auf Effizienz gelegt. Es geht in allen Architekturstilen darum die Wiederverwendbarkeit eines Elements im Auge zu behalten. Das Kopieren von Stylebefehlen wird versucht außen vor zu lassen genauso wie das überschreiben mittels <code>!importent</code> soll möglichst vermieden werden.</p>



<p>Eine Empfehlung, welche Architektur schlussendlich in einem Projekt verwendet werden sollte gibt es nicht. Hier hängt es lediglich von einer persönlichen Referenz ab, allerdings sollten die Stile nicht miteinander vermischt werden.</p>



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



<p><em>Atomic Design</em>. (2013, Juni 10). Brad Frost. <a href="https://bradfrost.com/blog/post/atomic-web-design/" target="_blank" rel="noreferrer noopener">https://bradfrost.com/blog/post/atomic-web-design/</a></p>



<p><em>Book—Scalable and Modular Architecture for CSS</em>. (o. J.). Abgerufen 19. Februar 2021, von <a href="http://smacss.com/book/categorizing" target="_blank" rel="noreferrer noopener">http://smacss.com/book/categorizing</a></p>



<p>Gajic, S. (o. J.). <em>Exploring SMACSS: Scalable and Modular Architecture for CSS</em>. Toptal Engineering Blog. Abgerufen 19. Februar 2021, von <a href="https://www.toptal.com/css/smacss-scalable-modular-architecture-css" target="_blank" rel="noreferrer noopener">https://www.toptal.com/css/smacss-scalable-modular-architecture-css</a></p>



<p>Guerriero, S. (2020, April 21). <em>Building a Scalable CSS Architecture With BEM and Utility Classes | CSS-Tricks</em>. CSS-Tricks. <a href="https://css-tricks.com/building-a-scalable-css-architecture-with-bem-and-utility-classes/" target="_blank" rel="noreferrer noopener">https://css-tricks.com/building-a-scalable-css-architecture-with-bem-and-utility-classes/</a></p>



<p>Kmetko, L. (2016, Februar 10). <em>ITCSS: Scalable and Maintainable CSS Architecture—Xfive</em> [Blog]. Xfive. <a href="https://www.xfive.co/blog/itcss-scalable-maintainable-css-architecture/" target="_blank" rel="noreferrer noopener">https://www.xfive.co/blog/itcss-scalable-maintainable-css-architecture/</a></p>



<p><em>Was ist ITCSS?</em> (o. J.). Abgerufen 16. Februar 2021, von <a href="https://kulturbanause.de/faq/itcss-inverted-triangle-css/" target="_blank" rel="noreferrer noopener">https://kulturbanause.de/faq/itcss-inverted-triangle-css/</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/css-architekturen/">CSS-Architekturen</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>App Varianten &#8211; Was ist was?</title>
		<link>https://mobile.fhstp.ac.at/allgemein/app-varianten-was-ist-was/</link>
		
		<dc:creator><![CDATA[Bettina Bröthaler]]></dc:creator>
		<pubDate>Wed, 06 Jan 2021 11:39:19 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=8696</guid>

					<description><![CDATA[<p>Native App Native Apps laufen lediglich auf Endgeräten mit einem installierten Betriebssystem (iOS oder Android), für welches die App explizit entwickelt werden muss. Diese Apps werden mittels dem jeweiligen App Store heruntergeladen. Auch Updates laufen über den Store des Betriebssystemanbieters. Daten werden direkt am Gerät gespeichert. Es scheint als könnte man Daten unbegrenzt abspeichern, da <a class="read-more" href="https://mobile.fhstp.ac.at/allgemein/app-varianten-was-ist-was/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/app-varianten-was-ist-was/">App Varianten &#8211; Was ist was?</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Native App</h2>



<p><strong>Native Apps</strong> laufen lediglich auf Endgeräten mit einem installierten Betriebssystem (iOS oder Android), für welches die App explizit entwickelt werden muss. Diese Apps werden mittels dem jeweiligen App Store heruntergeladen. Auch Updates laufen über den Store des Betriebssystemanbieters. Daten werden direkt am Gerät gespeichert. Es scheint als könnte man Daten unbegrenzt abspeichern, da die Größe der App wird lediglich durch die Speicherkapazität des Endgeräts begrenzt.</p>



<p>Da eine der Stärken von nativen Apps in der Nutzung von Hardwarefunktionen (GPS, Kamera, Gyroskop, …) ist, eignet sich diese Art von App insbesondere für Anwendungen, welche auf Gerätehardware zugreift. Also zum Beispiel, dass die App auf andere Bereiche des Smartphones zugreift, das GPS zum Standort lokalisieren nutzt oder für ein Spiel das Gyroskop verwendet.</p>



<p>Da diese Art von Apps für ein spezielles Betriebssystem entwickelt wird kann die bestmögliche Leistung, Geschwindigkeit und Benutzerfreundlichkeit gewährleistet werden. Dieser Hauptvorteil erweist sich gleichzeitig auch als Hauptnachteil, da eine App speziell für ein Betriebssystem entwickelt wird, muss es für jedes Betriebssystem separat erarbeitet werden und kostet somit wesentlich mehr Zeit und damit auch Budget.</p>



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



<p><strong>Web Apps</strong> sind im Gegensatz zu Nativen Apps auf allen internetfähigen Endgeräten lauffähig und sind über Websites veröffentlich- und aktualisierbar. Die offline Speicherbeschränkung liegt zwischen 5MB und 10MB. Durch den Cache (z.B. Browsercache) können aber diese Daten leicht wieder vom Endgerät gelöscht werden.</p>



<p>Ein großer Vorteil von Web Apps ist natürlich, dass kostengünstig eine große Anzahl an NutzerInnen zu erreichen und einfach Updates auszuführen sind, ohne dass ein Nutzer beteiligt werden muss. Der Nachteil ist, dass eine Web App offline nicht funktioniert und auch nicht über einen Store veröffentlicht werden kann.</p>



<h3 class="wp-block-heading">Progressive Web App</h3>



<p>Bei einer <strong>progressive Web App</strong> handelt es sich um eine Web App, die in App Stores veröffentlicht werden, wodurch eine breitere Masse an Benutzern erreicht werden kann. Man könnte es als Erweiterung von einer „normalen“ Web App ansehen.</p>



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



<p>Meist wirken <strong>hybride Apps</strong> wie native Applikationen. Sie werden gleichermaßen über einen App Store auf das Endgerät geladen und installiert. Allerdings wird lediglich eine native Umgebung für den Inhalt angelegt. Beim Öffnen startet die Applikation dann in einer browserähnlichen Umgebung, ähnlich einer Web App. Eine Hybride App bedient sich allerdings einer „WebView“, die zur Ausführung und Darstellung von Inhalten innerhalb einer App genutzt werden, ganz ohne typische Browserelemente. Schlussendlich ist eine hybride App eine Web App, welche in eine native App eingebunden wird und sich Stärken beider App Formate bedient. Man könnte sagen, dass es sich bei einer hybriden App um eine Browseranwendung in einer nativen Umgebung handelt.</p>



<p>Einer der größten Vorteile einer hybriden App liegt in der Plattformunabhängigkeit im Gegensatz zu einer nativen App, welche für jedes Betriebssystem separat programmiert werden muss. Durch die große Anzahl an möglichen Betriebssystemen garantiert es gleichfalls auch eine große Reichweite der Apps und wirkt sich dadurch auch positiv auf die Anzahl potenzieller Nutzer aus. Zusätzlich werden auch Kosten und Arbeit für die Implementierung erspart.</p>



<p>Im Gegensatz zu Web Apps benötigen hybride Apps eine Internetverbindung lediglich für Downloads oder Updates und laufen ansonsten offline. Zusätzlich kann eine hybride App auf mehr native Gerätefunktionen zurückgreifen als es Web Apps können, allerdings nicht in dem Ausmaß, wie es eine native App kann. Gegenüber den ganzen Vorteilen zu Web Apps kommt eine hybride App allerdings nicht an die Performance einer nativen App heran. Auch die geringere Präzession, Geschwindigkeit und Reaktionszeit im Gegensatz zu nativen Apps reduzieren die Benutzerfreundlichkeit von hybriden Applikationen.</p>



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



<p>Bei einer <strong>Cross-Platform App</strong> wird mit Hilfe eines Frameworks der Code für das jeweilige Betriebssystem kompiliert. Teile des Codes oder auch der gesamte Code kann auf allen Betriebssystemen genutzt werden. Diese Art von Apps vermischen native und mobile Anwendungskonzepte, während eine hybride Apps sich eher Webbrowser verhalten, wie in einem vorherigen Abschnitt beschrieben. Einerseits, der Hauptvorteil von cross-platform Entwicklung ist der Mittelweg zwischen nativer Leistung und der Benutzerfreundlichkeit auf einem nativen Endgerät. Andererseits besteht eine große Eingeschränktheit in der Entwicklung und dadurch die reduzierte Performance. Zu erwähnen wäre auch noch, dass Cross-Platform Apps auf die Sensoren des Endgeräts zugreifen können und auch offline lauffähig sind, was große Vorteile gegenüber reiner Web Apps sind.</p>



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



<p>Entscheidend ist normalerweise nicht ob das eine oder das andere besser ist. Primär stellt sich hierbei die Frage von welcher Lösung die Anforderungen am optimalsten erfüllt werden können. Zusätzlich stellt sich die Frage nach dem Budget sowie die angeforderten Funktionen und Design-Varianten. In der nachfolgenden Abbildung werden die Vorteile von Nativen Apps, Cross-Platform Apps, Hybriden Apps und Web Apps gegenübergestellt.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1028" height="771" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2021/01/AppVarianten_Entscheidung_IMG.png" alt="" class="wp-image-8697"/><figcaption>Abbildung 1 &#8211; Vergleich auf einen Blick vgl. <a href="https://www.brightsolutions.de/blog/native-vs-hybride-vs-web-app/" target="_blank" rel="noreferrer noopener">https://www.brightsolutions.de/blog/native-vs-hybride-vs-web-app/</a></figcaption></figure>



<p>Da der Urheber der Grafik, sich auf die Nativen App Varianten fokussiert ist die Spalte der Web Apps ausgegraut und aus seiner Sicht lediglich zum Vergleich vorhanden.</p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/app-varianten-was-ist-was/">App Varianten &#8211; Was ist was?</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
