<?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 Michael Emberger - Mobile USTP MKL</title>
	<atom:link href="https://mobile.fhstp.ac.at/author/dm131509/feed/" rel="self" type="application/rss+xml" />
	<link>https://mobile.fhstp.ac.at/author/dm131509/</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, 05 Jun 2014 15:39:43 +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 Michael Emberger - Mobile USTP MKL</title>
	<link>https://mobile.fhstp.ac.at/author/dm131509/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Usertesting einer Webapp</title>
		<link>https://mobile.fhstp.ac.at/ux/usertesting-einer-webapp/</link>
		
		<dc:creator><![CDATA[Michael Emberger]]></dc:creator>
		<pubDate>Thu, 05 Jun 2014 15:39:43 +0000</pubDate>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Projekte]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[User Experience]]></category>
		<category><![CDATA[Webdevelopment]]></category>
		<category><![CDATA[Herculess]]></category>
		<category><![CDATA[Usability Testing]]></category>
		<category><![CDATA[User Testing]]></category>
		<category><![CDATA[UX]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=4521</guid>

					<description><![CDATA[<p>Während der Entwicklung von Herculess führen wir laufend kleinere Usabilitytests durch um herauszufinden ob die Abläufe und die User Interface Elemente verstanden werden. Dabei ist uns wichtig, dass die getesteten Personen nicht immer dieselben sind, sondern sie die Webapp zum ersten Mal benutzen. Dabei geben wir den Testern eine kurze Beschreibung des Projekts und starten dann <a class="read-more" href="https://mobile.fhstp.ac.at/ux/usertesting-einer-webapp/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/ux/usertesting-einer-webapp/">Usertesting einer Webapp</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Während der Entwicklung von <a href="http://herculess.com" target="_blank">Herculess</a> führen wir laufend kleinere Usabilitytests durch um herauszufinden ob die Abläufe und die User Interface Elemente verstanden werden. Dabei ist uns wichtig, dass die getesteten Personen nicht immer dieselben sind, sondern sie die Webapp zum ersten Mal benutzen. Dabei geben wir den Testern eine kurze Beschreibung des Projekts und starten dann gleich los.</p>
<p><span id="more-4521"></span>Die Probanden bekommen Zugangsdaten und können sich danach in das System einloggen. Danach werden sechs vordefinierte kleine Aufgaben durchgearbeitet. Alle Beobachtungen und Anmerkungen der Testperson werden dabei notiert und danach noch ein paar offene Fragen gestellt.</p>
<p>&nbsp;</p>
<h2>Warum Usertesting?</h2>
<p>Durch diese Tests können wir unsere App laufend optimieren. Außerdem bekommen wir zusätzlich Informationen über das Nutzungsverhalten abhängig von Alter und Beruf. Hier werde ich die bisher wichtigsten Erkenntnisse beschreiben. Die folgenden Screenshots sollen helfen die nachstehenden Punkte besser verstehen zu können.</p>
<p>&nbsp;</p>
<h3>1) Persönliche Übersicht</h3>
<h3><a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/06/herculess-uebersicht-menu-open.png"><img fetchpriority="high" decoding="async" class="alignnone size-full wp-image-4526" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/06/herculess-uebersicht-menu-open.png" alt="herculess-uebersicht-menu-open" width="408" height="688" /></a></h3>
<h3>2) Projektübersicht ohne Aufgaben</h3>
<h3><a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/06/herculess-uebersicht-new-project.png"><img decoding="async" class="alignnone size-full wp-image-4525" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/06/herculess-uebersicht-new-project.png" alt="herculess-uebersicht new-project" width="404" height="598" /></a></h3>
<p>&nbsp;</p>
<h2>Beschriftung/Wording</h2>
<p>Viele Begriffe die in Herculess verwendet wurden, wie beispielsweise &#8220;Dashboard&#8221; oder &#8220;Task&#8221; waren den Testpersonen nicht geläufig. Während für uns als Webprofessionals diese Begriffe Gang und Gebe sind, haben die Probanden ihre Bedeutung teilweise nicht verstanden. Deshalb haben wir die Begriffe gegen Deutsche Wörter ausgetauscht: zum Beispiel wurde aus Dashboard Übersicht und aus Task Aufgabe.</p>
<h2>Datum</h2>
<p>Das Datum für Aufgaben war im Format &#8220;20. Mai, 2014&#8221; angegeben. Die Tests ergaben, dass Zusätze wie heute, morgen oder gestern hilfreich wären. Außerdem wurden Wochentagsangaben gewünscht, sowie relative Zeitzusätze wie &#8220;noch 2 Wochen&#8221;.</p>
<h2>Layout</h2>
<p>Besonders positiv wurde von allen Probanden das “aufgeräumte” Layout erwähnt. Die Tester haben schnell erkannt, dass das Plus rechts oben für das Erstellen von Aufgaben und Projekten vorgesehen ist. Auch wenn zu Beginn keine Aufgabe vorhanden war, haben sie durch den kurzen Beschreibungstext sofort gewusst was zu tun ist.</p>
<h2>Icons</h2>
<p>Das Thema Icons ist sehr schwierig, besonders wenn man ein Icon nicht nur zur Unterstützung einer Beschriftung in einem Button verwendet, sondern es keine Beschriftung hat. Das Plus für Hinzufügen und der Haken zum Abschließen wurde von allen Probanden verstanden. Probleme gab es aber bei dem bekannten Hamburger Icon für das Menü. Besonders ältere Probanden erkannten das Icon nicht. Im Gegensatz zu den jüngeren Testpersonen, die das Icon dann einfach “ausprobiert” haben, hatten die älteren hier mehr Scheu. Gegen das Hamburger Icon gibt es zurzeit einiges an Kritik in der Online-Community. (Siehe beispielsweise: <a href="http://techcrunch.com/2014/05/24/before-the-hamburger-button-kills-you/" target="_blank">Before the hamburger button kills you</a>). In der Erstversion werden wir das Hamburger Icon so belassen, wobei wir wahrscheinlich &#8220;Menü&#8221; dazu schreiben werden, dazu werden wir aber noch ein paar Tests machen. Am Desktop ist das Menü ohnehin immer eingeblendet. Allgemein hatten aber nach dem Test alle Probanden angegeben keine Probleme beim Navigieren durch die App gehabt zu haben.</p>
<h2>Gesten</h2>
<p>Während wir in einer anderen Studie “Touchgesten in Webbrowsern am Smartphone”, welche diesen Sommer publiziert wird, untersuchen ob User Touchgesten überhaupt verwenden, haben wir während des Herculess-Tests herausgefunden, das kein Proband bisher Swipe-Right für Details oder Swipe-Left zum Aufschieben verwendet hat. Der Indikator für Optionen in der Listenansicht ist aber bei einem Großteil der Nutzer gut angekommen. Diese haben darauf geklickt &amp; somit die Optionen in der Liste eingeblendet, um eine Aufgabe abzuschließen.</p>
<p>&nbsp;</p>
<p>Die Liste mit gefundenen Optimierungsmöglichkeiten könnte ich hier noch viel länger fortsetzten, jedoch sind das meist sehr spezifische Dinge. Falls jemand noch mehr darüber wissen möchte oder einfach nur allgemein Fragen zu der App hat, stehen wir jederzeit zur Verfügung.</p>
<p>&nbsp;</p>
<h2>Fazit</h2>
<p>Solche Tests sollten keine einmalige Sache bleiben. Einen kurzen Testleitfaden mit kleinen Aufgaben zu erstellen ist, wenn man seine App kennt, wirklich kein großer Aufwand &amp; diesen Testleitfaden kann man dann, mit kleineren Adaptionen, über eine längeren Zeitraum verwenden. Jeder unserer Tests hat nicht  länger als 10 Minuten gedauert und viele wichtige Erkenntnisse für unser Projekt gebracht. Es ist sehr wichtig, dass man bei solch großen Projekten nicht das Gefühl für die “echten” User verliert, denn im Normalfall ist der Durchschnittsnutzer kein Computerprofi, der den Großteil seiner Zeit online verbringt.</p>
<p>&nbsp;</p>
<p>The post <a href="https://mobile.fhstp.ac.at/ux/usertesting-einer-webapp/">Usertesting einer Webapp</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>codefront.io</title>
		<link>https://mobile.fhstp.ac.at/allgemein/codefront-io/</link>
		
		<dc:creator><![CDATA[Michael Emberger]]></dc:creator>
		<pubDate>Wed, 28 May 2014 11:29:50 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Studium]]></category>
		<category><![CDATA[AngularJS]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[codefront]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[Konferenz]]></category>
		<category><![CDATA[Linz]]></category>
		<category><![CDATA[Sass]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=4492</guid>

					<description><![CDATA[<p>Acht Studierende der Masterklasse Mobiles Internet des Studiengangs Digitale Medientechnologien besuchten gemeinsam mit Grischa Schmiedl und Kerstin Blumenstein am 10. Mai 2014 die Front-End Developement Konferenz codefront.io. In der nicht weit von St. Pölten entfernten Johannes Kepler Universität in Linz fanden den ganzen Tag parallel in vier Hörsälen Vorträge zu verschiedensten Themen statt. Die Themen der <a class="read-more" href="https://mobile.fhstp.ac.at/allgemein/codefront-io/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/codefront-io/">codefront.io</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Acht Studierende der Masterklasse Mobiles Internet des Studiengangs Digitale Medientechnologien besuchten gemeinsam mit Grischa Schmiedl und Kerstin Blumenstein am 10. Mai 2014 die Front-End Developement Konferenz codefront.io. In der nicht weit von St. Pölten entfernten Johannes Kepler Universität in Linz fanden den ganzen Tag parallel in vier Hörsälen Vorträge zu verschiedensten Themen statt.</p>
<p><span id="more-4492"></span></p>
<p><a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/05/10312600_793285870695973_4846584541707797059_n.jpg"><img decoding="async" class="aligncenter wp-image-4495 size-medium" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/05/10312600_793285870695973_4846584541707797059_n-300x225.jpg" alt="10312600_793285870695973_4846584541707797059_n" width="300" height="225" /></a></p>
<p>Die Themen der Konferenz waren sehr vielfältig. Das Spektrum reichte von Entwickler-Themen wie Angular JS und weiteren JavaScript Vorträgen über Responsive Web Design und SASS bis hin zu User Interface Design und Daten Visualisierung. Dadurch konnte sich jede/r die interessantesten Themen heraussuchen.</p>
<p>Einer der spannendsten Vorträge war der des Gründers des bekannten Smashing Magazine, Vitaly Friedman (Twitter: @smashingmag), über Responsive Web Design. Der Talk mit dem Titel &#8220;Real-Life Responsive Web Design&#8221; deckte sehr viele wichtige Aspekte ab, die heutzutage für die Erstellung von flexiblen Web-Projekten wichtig sind.</p>
<p><a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/05/10253922_793285817362645_2829413033242432445_n.jpg"><img loading="lazy" decoding="async" class="aligncenter wp-image-4494 size-medium" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/05/10253922_793285817362645_2829413033242432445_n-300x225.jpg" alt="10253922_793285817362645_2829413033242432445_n" width="300" height="225" /></a></p>
<p>Auch sehr spannend war der Vortrag von Monica Dinculescu (Twitter: @notwaldorf). Sie arbeitet bei Google an der Entwicklung des eigenen Browsers Chrome und sprach über sechs Tricks, wie Google seine Chrome User glücklich macht. Damit gab sie einen spannenden Einblick hinter die Kulissen der Arbeit von Google.</p>
<p>Die Designer/innen und Entwickler/innen der Masterklasse Mobiles Internet konnten sehr viel aus den verschiedenen Vorträgen mitnehmen und werden auch bei der nächsten Konferenz in Österreich wieder dabei sein.</p>
<p><a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/05/10178088_565304850255008_7360456056746908306_n.jpg"><img loading="lazy" decoding="async" class="aligncenter wp-image-4493 size-medium" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/05/10178088_565304850255008_7360456056746908306_n-300x225.jpg" alt="10178088_565304850255008_7360456056746908306_n" width="300" height="225" /></a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/codefront-io/">codefront.io</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Das war die Kod.io 2014 in Linz</title>
		<link>https://mobile.fhstp.ac.at/allgemein/das-war-die-kod-io-2014-linz/</link>
		
		<dc:creator><![CDATA[Michael Emberger]]></dc:creator>
		<pubDate>Mon, 03 Mar 2014 20:13:07 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Developerkonferenz]]></category>
		<category><![CDATA[Kod.io]]></category>
		<category><![CDATA[Linz]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=4189</guid>

					<description><![CDATA[<p>Im Zuge unserer Vertiefung &#8220;mobiles Internet&#8221; haben einige von uns beschlossen die Developerkonferenz Namens &#8220;Kod.io&#8221; in Linz am 01.03.2014 zu besuchen. Die Konferenz selbst fand zum zweiten Mal statt &#8211; die erste war 2013 in Istanbul. Die Konferenz fand im eindrucksvollen Gebäude der ARS Electronica statt. Es waren knapp 300 internationale Teilnehmer, sowie 18 Speaker <a class="read-more" href="https://mobile.fhstp.ac.at/allgemein/das-war-die-kod-io-2014-linz/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/das-war-die-kod-io-2014-linz/">Das war die Kod.io 2014 in Linz</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Im Zuge unserer Vertiefung &#8220;mobiles Internet&#8221; haben einige von uns beschlossen die Developerkonferenz Namens &#8220;Kod.io&#8221; in Linz am 01.03.2014 zu besuchen. Die Konferenz selbst fand zum zweiten Mal statt &#8211; die erste war 2013 in Istanbul. Die Konferenz fand im eindrucksvollen Gebäude der ARS Electronica statt. Es waren knapp 300 internationale Teilnehmer, sowie 18 Speaker und viele fleißige Helfer und Organisatoren auf der Konferenz unterwegs. <span id="more-4189"></span>Am Abend zuvor gab es bereits ein nettes Meet-and-Greet mit allen Teilnehmern auf der Welcome-Party. Die Konferenz selbst startete am Samstag um 08:30 mit der Registrierung sowie einer Willkommensrede der Organisatoren und Vertreter der Stadt Linz. Es wurde gleich zu Beginn, und auch während den Vorträgen immer wieder darauf Aufmerksam gemacht, dass die Veranstaltung viel Wert auf politisch korrektes Verhalten legt, was auch bei den Teilnehmern sehr gut ankam. Die Vortrage waren alle durch die Bank sehr spannend, vielfältig und mitreißen. Hier eine kurze Zusammenfassung der Beiträge die uns am besten gefallen haben (ein paar konnten wir leider nicht sehen, da es 2 Tracks mit Vorträgen gab):</p>
<p><a href="http://lea.verou.me/">Lea Verou</a> hielt eine der beiden Keynote Vorträge mit dem Thema &#8220;The Chroma Zone Engineering Color on the Web&#8221;. Dabei zeigte sie die unterschiedlichsten Methoden der Farbimplementierung in CSS auf. Neben der Analyse des Farbraumes RGB und der Erweiterung um den Alphakanal RGBA, erklärte sie auch die anderen Möglichkeiten um Farbwerte auszudrücken, wie HSL (Hue, Saturation, Luminance) und HSLA (Hue, Saturation, Luminance, Alpha). Neben zahlreichen nützlichen Javascript und Sass Funktionen zur Berechnung der Farbwerte stelle sie auch die Neuerungen im neuen W3C Color Modul 4 vor. So ist vorgesehen, dass es eine neue Möglichkeit für den Ausdruck der Farbwerte gibt, nämlich HWB, diese Möglichkeit kennt man auch aus Photoshop. Außerdem gibt es erstmalig Variablen direkt im CSS. So gibt es dann die neue Variable currentColor, die verwendet werden kann um die aktuelle Farbe in einer Regel wieder zu verwenden. Außerdem gibt es eine Funktion gray() über die mit der Angabe von Prozenten der Grauton direkt im CSS gesteuert werden kann. Die Neuerungen werden kaum von Browsern unterstützt, jedoch zeigte Lea Fallbacks um die Neuerungen jetzt schon zum implementieren. Alles in allem, war es ein sehr spannender Talk und Lea überzeugte nicht zuletzt mit einer <a href="http://leaverou.github.io/chroma-zone/">interaktiven Präsentation</a> und einigen Live-Code Beispielen.</p>
<p><a href="https://twitter.com/PascalPrecht">Pascal Precht</a> präsentierte in seiner ebenfalls <a href="http://pascalprecht.github.io/slides/angularjs-and-i18n">interaktiven Präsentation</a> Dependency Injection und Two-Way Data-Binding mit Angular.js. Darüber hinaus behandelte er das Thema Internationalisierung und Lokalisierung und zeigte, wie man über die Möglichkeiten von Angular hinaus, mit Angular-Translate Texte und Formate einfach asynchron laden und dynamisch anpassen kann.</p>
<p><a href="http://kmikael.com">Mikael Konutgan</a> von All About Apps zeigte in einer Gegenüberstellung von Objective C mit Ruby, die von vielen unerwarteten Gemeinsamkeiten. Er verglich den Syntax der beiden Programmiersprachen und vermittelte den Zuschauern, das es viel mehr Ähnlichkeiten als Unterschiede gibt, vor allem wenn man von &#8220;modernen Objective C&#8221; ausgeht. Und für alle die den gewöhnungsbedürftigen Block Syntax von Objective C im Kopf behalten, verwies Mikael noch auf die Seite <a href="http://fuckingblocksyntax.com/">http://fuckingblocksyntax.com/</a>, wo er selbst täglich nachschlägt. Seine Slides mit dem genauen Codevergleich sind unter <a href="https://speakerdeck.com/kmikael/objective-c-for-rubyists">https://speakerdeck.com/kmikael/objective-c-for-rubyists</a> zu finden.</p>
<p><a href="https://twitter.com/macdevnet">Steve Scott</a> gab uns in seiner Keynote &#8220;Going Native&#8221; einen amüsanten Einblick in sämtlich Programmiersprachen, mit denen er selbst in der Vergangenheit gearbeitet hat bzw. heute noch arbeitet. Anhand dieses Streifzuges durch die Zeit zwischen 1987 bis heute zeigte Steve, wie sich die &#8220;native&#8221; Programmierung von damals, wo Entwickler Code auf Systemeben schrieben, im Vergleich zur Gegenwart, wo großteils Frameworks wie beispielsweise Cocoa Touch für iOS verwendet werden unterscheidet. Auch die Entwicklung von mobilen Webapplikationen setzte Steve in seiner Keynote auf dieselbe Ebene, wie die Entwicklung von &#8220;nativen&#8221; Apps für Plattformen wie iOS, Android oder Windows. Der Browser bietet in diesem Fall die Plattform und HTML, CSS und Javascript ein Framework zur Entwicklung von Applikationen. Den wesentlichen Vorteil von plattformspezifischen Apps sieht Steve vor allem in der User Experience, die aus seiner Sicht bei crossplatform Apps zu kurz kommt.</p>
<p><img loading="lazy" decoding="async" class="alignnone  wp-image-4228" alt="2014-03-01 17.28.31" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/03/2014-03-01-17.28.31.jpg" width="564" height="467" /></p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/das-war-die-kod-io-2014-linz/">Das war die Kod.io 2014 in Linz</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Offline REST Fallback via LocalStorage</title>
		<link>https://mobile.fhstp.ac.at/development/webdevelopment/offline-rest-fallback-mit-javascript/</link>
		
		<dc:creator><![CDATA[Michael Emberger]]></dc:creator>
		<pubDate>Sat, 30 Nov 2013 08:51:43 +0000</pubDate>
				<category><![CDATA[Webdevelopment]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[ember]]></category>
		<category><![CDATA[ember-data]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[localstorage]]></category>
		<category><![CDATA[Offline]]></category>
		<category><![CDATA[rest]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=3616</guid>

					<description><![CDATA[<p>Für unser Projektmanagement-Tool „Herculess“ ist ein wichtiger Aspekt, dass die App Offline-fähig ist. Während das in einer nativen App relativ einfach möglich ist, ist solch eine Funktionalität bei Web-Apps immer noch nur sehr selten zu finden. Die Web-App von Herculess basiert auf dem JavaScript-MVC-Framework Ember.js, welches, ergänzt durch Ember-Data, sehr einfach mit REST-APIs umgehen kann. <a class="read-more" href="https://mobile.fhstp.ac.at/development/webdevelopment/offline-rest-fallback-mit-javascript/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/development/webdevelopment/offline-rest-fallback-mit-javascript/">Offline REST Fallback via LocalStorage</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Für unser Projektmanagement-Tool „Herculess“ ist ein wichtiger Aspekt, dass die App Offline-fähig ist. Während das in einer nativen App relativ einfach möglich ist, ist solch eine Funktionalität bei Web-Apps immer noch nur sehr selten zu finden. Die Web-App von Herculess basiert auf dem JavaScript-MVC-Framework Ember.js, welches, ergänzt durch Ember-Data, sehr einfach mit REST-APIs umgehen kann. So kümmert sich das Framework komplett um den Datenerhalt und die Synchronisierung und der Developer muss nur mit den von Ember bereitgestellten Objekten arbeiten. Auch Promises werden automatisch implementiert.</p>
<p>Während Ember-Data somit extrem hilfreich ist und auch für sehr komplexe Applikationen geeignet ist, stießen wir auf das Problem, dass man zwar einstellen kann, ob man die Daten über eine REST-API oder den LocalStorage persistieren möchte, aber nicht beide Optionen gleichzeitig nutzen kann. Für Herculess brauchen wir aber eine Funktionalität, die standardmäßig Daten vom REST-Server holt und nur im Offline-Fall auf zwischengespeicherte Daten aus dem LocalStorage zurückgreift.</p>
<p><span id="more-3616"></span></p>
<h2>Der Weg zum Ziel</h2>
<p>Die Lösung dieses Problems war nicht ganz einfach und hat erst einmal zu diversen Fehlversuchen geführt. Erste Ansätze waren es, den bestehenden LocalStorage-Adapter von Ember-Data umzubauen und um eine Hintergrund-Synchronisierung zu ergänzen. So hätte Ember immer lokal im LocalStorage gearbeitet und nur im Hintergrund wären die Daten von der REST-API in den LocalStorage geschrieben worden. Das Problem hierbei war jedoch, dass Ember, um stets eine Datenintegrität zu gewährleisten, es nicht ermöglicht, zur Laufzeit alle Daten aus dem LocalStorage zu erneuern. Es hätte stets nach dem Update von der REST-Schnittstelle eine kompletter Seitenrefresh durchgeführt werden müssen, was wiederrum die unbemerkte Synchronisierung unmöglich gemacht hätte.</p>
<p>Nachdem diverse Experimente in diese Richtung fehlgeschlagen sind, haben wir einen neuen Ansatz ausprobiert: Wenn die App offline ist, sollen die Ajax-Calls einfach statt an den Server an eine (offline verfügbar gemachte) Datei geroutet werden und diese dann aus dem LocalStorage zwischengespeicherte Daten in derselben Form wie die richtige REST-API zurückgeben. So könnte der Client immer gleich arbeiten und nur die URL der AJAX-Calls müsste geändert werden. Das Problem hierbei ist natürlich, dass man lokal nur JavaScript/HTML zwischenspeichern kann und diese clientseitig keine reinen JSON-Responses zusammenbauen können: Die AJAX-Calls parsen die Responses ja nicht, sondern geben nur den Dateiinhalt zurück.</p>
<p>Somit sind wir schlussendlich bei einer Adaption dieser Idee gelandet. Anstatt eine Pseudo-API zu implementieren, fangen wir alle AJAX-Calls ab und liefern mithilfe des jQuery-Plugins jquery.ajax.fake selbst zusammengebaute JSON-Responses zurück.</p>
<h2>Unsere Lösung</h2>
<p>In der Praxis sieht das wie folgt aus:</p>
<p>Der erste Schritt ist es, die Daten überhaupt einmal zwischen zu speichern. Dafür haben wir eine JavaScript-Klasse erstellt, welche für alle Synchronisations-Vorgänge zuständig ist. Diese ist komplett unabhängig von Ember.</p>
<p>Diese Klasse hat eine „sync()“ Funktion. Diese Funktion holt sich von der REST-API über eine eigene Route „/downSync“ eine Kollektion aller wichtigen Daten für diesen User. Diese Kollektion enthält alle Tasks und Projekte, die für diesen User wichtig sind.</p>
<p>Das Sync-Objekt speichert diese Daten dann in den LocalStorage. Danach wird nach einigen Sekunden erneut sync() aufgerufen und die Daten im LocalStorage aktualisiert. Somit sind die Daten im LocalStorage immer (bis auf seltene Ausnahmen) eine Spiegelung der Daten von der REST-API.</p>
<p>Der nächste Schritt ist es, abzufragen, ob gerade eine Internet-Verbindung besteht. Das machen wir beim ersten Seitenaufruf über „navigator.onLine“, welcher den Online-Status zurückgibt. So wird ein Cookie „is-offline“ auf true oder false gesetzt. Danach wird bei jedem Sync-Versuch dieser Cookie angepasst, falls der Sync-Versuch fehlschlägt oder doch wieder klappt.</p>
<p>Falls die App erkennt, dass man plötzlich offline geht, schaltet sie auf jquery.ajax.fake um. Dafür verändern wir über die jQuery-Funktion „$.ajaxSetup“, welche Voreinstellung für alle folgenden $.ajax-Calls setzen kann, das Attribut „fake: true“. Dieses braucht jquery.ajax.fake, um zu wissen dass dieser Request gefakt werden soll.</p>
<p>Zusätzlich dazu muss man, damit die Fake-Responses funktionieren, für jede URL einstellen, welcher Response kommen soll. Da es unmöglich wäre, hier im Vorfeld alle möglichen URLs einzustellen (da wir ja auch Parameter wie IDs mitsenden), muss das automatisch geschehen. Das haben wir so gelöst, dass wir in der Ember-Data Methode, die für die AJAX-Aufrufe zuständig ist, noch eine Zeile hinzugefügt haben, die – vor dem Senden – zu der nun gleich gesendeten URL immer die gleiche Funktion aufrufen soll.</p>
<pre class="brush: jscript; title: ; notranslate">
$.ajax.fake.registerWebservice(url, function(data) {
    return restSyncer.fakeAjax(data);
});
</pre>
<p>Außerdem fügen wir vor dem Senden die URL als Parameter zum AJAX-Request hinzu.</p>
<p>Die Funktion, welche die Fake-AJAX-Responses zusammen bauen soll, kann dann über den so mitgelieferten Parameter „url“ ermitteln, welche Route angesprochen wurde, und dann aus dem LocalStorage entsprechend einen Response zusammenbauen und zurückgeben. Die eigentliche App merkt so nie, ob die Daten jetzt wirklich vom Server oder aus dem LocalStorage kommen. Sobald die App wieder online ist, wird automatisch umgestellt – ohne, dass der User es merkt.</p>
<p>Während diese Methode, soweit bisherige Test gezeigt haben, sehr gut und nahtlos funktioniert, hat sie auch zwei Nachteile: Jede Änderung der REST-API muss genau im Client gespiegelt werden, und es entsteht zusätzlicher Traffic durch das Syncen im Hintergrund. Letzteres werden wir in späteren Versionen optimieren, indem wir einen Timestamp der letzten Synchronisierung mitschicken und so nur neue Einträge erhalten. Außerdem soll man in der App die Frequenz der Sync-Abfragen einstellen können oder auch nur manuell synchronisieren.</p>
<p>Die aktuelle Implementation funktioniert bereits für alle GET-Requests. POST, PUT oder DELETE Requests sind aber genauso lösbar: Hierfür werden wir alle solche offline getätigten Requests eigens im LocalStorage speichern, und wenn die App wieder online geht werden diese gespeicherten Requests einer nacheinander erneut an den Server gesendet. Hierbei ist es besonders wichtig, den Status mitzuspeichern: Erstens muss der User immer wissen, ob gerade etwas synchronisiert wird oder ob alle Daten aktuell sind, und zweitens muss die App immer wissen, ob ein Request erfolgreich beim Server angekommen ist oder ob es wieder einen Fehler gab und es später erneut versucht werden muss, um den Verlust von Daten zu verhindern.</p>
<p>The post <a href="https://mobile.fhstp.ac.at/development/webdevelopment/offline-rest-fallback-mit-javascript/">Offline REST Fallback via LocalStorage</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Erstellung einer einfachen REST-API mit PHP</title>
		<link>https://mobile.fhstp.ac.at/development/erstellung-eines-einfachen-rest-api-backends-mit-php/</link>
					<comments>https://mobile.fhstp.ac.at/development/erstellung-eines-einfachen-rest-api-backends-mit-php/#comments</comments>
		
		<dc:creator><![CDATA[Michael Emberger]]></dc:creator>
		<pubDate>Sat, 16 Nov 2013 14:13:49 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[backend]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[slim framework]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=3537</guid>

					<description><![CDATA[<p>Der Trend hin zu nativen Apps und Webapps welche hauptsächlich auf JavaScript basieren hat dazu geführt, dass immer öfter eigene REST APIs entwickelt werden müssen. Für unser kommendes Projekt &#8220;Herculess&#8221;, welches sowohl als native App als auch als JavaScript-MVC-Framework basierte Webapp entwickelt wird, haben wir deshalb angefangen, eine solche API zu entwickeln. Die wichtigsten Eckdaten <a class="read-more" href="https://mobile.fhstp.ac.at/development/erstellung-eines-einfachen-rest-api-backends-mit-php/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/development/erstellung-eines-einfachen-rest-api-backends-mit-php/">Erstellung einer einfachen REST-API mit PHP</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Der Trend hin zu nativen Apps und Webapps welche hauptsächlich auf JavaScript basieren hat dazu geführt, dass immer öfter eigene REST APIs entwickelt werden müssen. Für unser kommendes Projekt &#8220;Herculess&#8221;, welches sowohl als native App als auch als JavaScript-MVC-Framework basierte Webapp entwickelt wird, haben wir deshalb angefangen, eine solche API zu entwickeln.</p>
<p><span id="more-3537"></span></p>
<p>Die wichtigsten Eckdaten für die erste Version unserer API schauen wie folgt aus:</p>
<ul>
<li>PHP-basiertes Backend</li>
<li>Gibt JSON zurück</li>
<li>Aktionen: CRUD: Create, Retrieve, Update, Delete</li>
<li>CRUD soll passende HTTP-Header verwenden</li>
<li>Authentifikation soll später über OAuth2 gehen, erstmal eine simple Pseudo-Implementierung zum Testen</li>
</ul>
<p>Mit diesen Daten im Kopf haben wir also begonnen unsere API zu entwickeln.</p>
<p>Dafür verwenden wir das PHP-Framework <a href="http://www.slimframework.com/" target="_blank">Slim Framework</a>, welches ausschließlich für solche REST-APIs gedacht ist. Nachdem wir das Framework nach dem (sehr einfachen) Tutorial der Webseite eingebunden und initialisiert haben, war hier schon mal ein wesentlicher Grundstein gelegt. Das Slim Framework nimmt uns im wesentlichen das Routing ab. So müssen wir uns nur noch um die eigentliche Datenverarbeitung kümmern.</p>
<p>Für unser Framework verwenden wir Routen, wie sie mittlerweile von den meisten APIs genutzt werden. Sie folgen dem Prinzip:</p>
<p>/projects: Gibt alle Projekte zurück</p>
<p>/projects/1: Gibt das Projekt mit der ID 1 zurück</p>
<p>/projects/1/tasks: Gibt alle Tasks des Projektes mit der ID 1 zurück</p>
<p>/tasks/1: Gibt den Task mit der ID 1 zurück</p>
<p>&#8230;</p>
<p>Alle diesen Routen können grundsätzlich mit verschiedenen HTTP-Headern (GET für Retrieve, POST für Create, PUT für Update, DELETE für Delete) genutzt werden. So wird ein GET Aufruf an /projects alle Projekte zurück geben, während ein POST Aufruf an /projects, zusammen mit mitgesendeten Daten, ein neues Projekt erstellen wird.</p>
<p>Wir werden nun kurz erläutern, wie wir bei der Entwicklung dieser API bisher vorgegangen sind. Die Authentifizierung werden wir in einem späteren Blogbeitrag behandeln, in diesem einfachen Beispiel gehen wir davon aus das alles öffentlich zugänglich ist.</p>
<p>Wir haben folgende Ordnerstruktur:</p>
<ul>
<li>/Slim (Framework-Dateien)</li>
<li>/classes
<ul>
<li>ApiObject.class.php</li>
<li>ApiResultBuilder.class.php</li>
<li>Project.class.php</li>
</ul>
</li>
<li>index.php</li>
<li>.htaccess</li>
</ul>
<p>In der .htaccess haben wir folgenden Code, der dafür sorgt dass wir &#8220;schöne&#8221; URLs wie &#8220;http://api.com/tasks/1&#8221; statt &#8220;http://api.com/index.php/tasks/1&#8221;:</p>
<pre class="brush: plain; title: ; notranslate">
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php &#x5B;QSA,L]
</pre>
<p>Wir werden nun zeigen, wie wir beispielsweise die Routen /projects und /projects/1 implementiert haben. Andere Routen werden im Grunde genauso gehandhabt.<br />
In der index.php binden wir die nötigen Klassen ein und kümmern uns dann in einem späteren Schritt um das Routing:</p>
<pre class="brush: php; title: ; notranslate">// Don't forget to load all neccessary classes!

// Initialize Slim Framework
require 'Slim/Slim.php';
\Slim\Slim::registerAutoloader();

$api = new \Slim\Slim();

$api-&gt;get('/projects', function ($) {
  // todo
}

$api-&gt;get('/projects/:uid', function ($uid) {
  // todo
}

$api-&gt;run();</pre>
<p>Hier sehen wir, wie das Routing mit Slim funktioniert. Die eigentliche Datenverarbeitung passiert in den entsprechenden Klassen, in diesem Fall in der Project.class.php.<br />
Aber was machen eigentlich die anderen drei Klassen, die wir erstellt haben?</p>
<p>Die Klasse &#8220;ApiObject&#8221; ist die Vorlage, von der die anderen Api-Klassen wie Project oder Task erben. In der aktuellen Implementation gibt es eigentlich keine besonderen Vorgaben hier, wir haben das nur für zukünftige Erweiterbarkeit so umgesetzt.</p>
<p>Die ApiResultBuilder-Klasse ist für den eigentlichen Aufbau der JSON-Response zuständig. Wir haben das so implementiert, damit es immer eine einheitliche Rückgabe gibt, und bei einer ggf. API-Änderung das nur an einer Stelle geändert werden muss.</p>
<p>Wir wollen eine Rückgabe wie folgt erreichen:</p>
<pre class="brush: jscript; title: ; notranslate">{
    &quot;status&quot;: {
        &quot;code&quot;: 100,
        &quot;message&quot;: &quot;OK&quot;
    },
    &quot;projects&quot;: &#x5B;
        {
            //Objekt1
        },
        {
            //Objekt2
        },
        //...
    ]
}</pre>
<p>In einer eigenen Tabelle in der Datenbank haben wir uns die möglichen Statuscodes mit passenden Messages gespeichert. zB. ist 100: OK oder 205: ENTRY NOT FOUND.</p>
<p>Schauen wir uns zuerst die ApiResultBuilder-Klasse an.</p>
<p>Diese verfügt über folgende Methoden: addObject(), setStatus(), setDataType(), getStatusMessage() und out().</p>
<p>Die Methoden setStatus() und setDataType() setzen im ApiResultBuilder-Objekt die Attribute &#8220;status&#8221; bzw. &#8220;dataType&#8221; auf einen übergebenen Wert. DataType entspricht dabei im obigen Beispiel &#8220;project&#8221;, also dem Model-Name. So können wir die JSON-Response theoretisch mit mehreren Objekttypen zurückgeben. Die Methode getStatusMessage() liefert zum Status die entsprechende Status-Message (zB. &#8220;OK&#8221; oder &#8220;ENTRY NOT FOUND&#8221;).</p>
<p>Die spannenden Methoden sind addObject() und out(): Ersteres kümmert sich darum, Daten zur Ausgabe hinzuzufügen, und letzteres kümmert sich um den Zusammenbau der Ausgabe. Die Methode addObject() nimmt ein normiertes Objekt als Übergabe-Parameter und speichert es im Objekt ab. Die Methode out() baut dann aus status, statusMessage, dataType und den gespeicherten Objekten die obige JSON-Response zusammen und gibt diese als Text aus.</p>
<p>Die Verarbeitung der Route /projects kann dann wie folgt passieren:</p>
<pre class="brush: php; title: ; notranslate">// Load all Projects from Project class
$projects = Project::getAll();
$apiBuilder = new ApiResultBuilder();
$dataType = &quot;projects&quot;;

if(count($projects) &lt; 0) {   // No results   $apiBuilder-&gt;setStatus(205);
} else {
  foreach($projects as $project) {
    $apiBuilder-&gt;addObject($project);
  }
  $apiBuilder-&gt;setStatus(100);
}

$apiBuilder-&gt;setDataType($dataType);
echo $apiBuilder-&gt;out();</pre>
<p>Somit kümmert sich die index.php nur um das Routing, die ApiResultBuilder nur um die Ausgabe und die eigentlichen Klassen kümmern sich rein um die Datenverarbeitung. Natürlich ist dieses Beispiel recht vereinfacht und muss um Abfragen und Authentifizierung erweitert werden. Es lässt sich aber ausgezeichnet vergrößern und bietet eine ausreichende Trennung der verschiedenen Codeteile.</p>
<p>Wer sich fragt, wie man zB. mit POST-Anfragen umgehen würde: Auch das lässt sich mit Slim ganz einfach machen:</p>
<pre class="brush: php; title: ; notranslate">$api-&gt;post('/projects', function () { ...}</pre>
<p>In diesem Block kann man dann einfach normal mit $_REQUEST arbeiten, um die mitübergebenen Daten zu verwenden.</p>
<p>In diesem Blogpost haben wir nun einen kleinen Einblick in unseren Ansatz zum API-Design gegeben. Natürlich gibt es tausende Ansätze, Formatierungen und Möglichkeiten, um solch eine API umzusetzen. Wir freuen uns über alternative Ideen in den Kommentaren!</p>
<p>The post <a href="https://mobile.fhstp.ac.at/development/erstellung-eines-einfachen-rest-api-backends-mit-php/">Erstellung einer einfachen REST-API mit PHP</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mobile.fhstp.ac.at/development/erstellung-eines-einfachen-rest-api-backends-mit-php/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Smart Interaction Patterns</title>
		<link>https://mobile.fhstp.ac.at/allgemein/smart-interaction-patterns/</link>
					<comments>https://mobile.fhstp.ac.at/allgemein/smart-interaction-patterns/#comments</comments>
		
		<dc:creator><![CDATA[Michael Emberger]]></dc:creator>
		<pubDate>Wed, 13 Nov 2013 20:58:34 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Projekte]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[User Experience]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[Smart Interaction]]></category>
		<category><![CDATA[Transitions]]></category>
		<category><![CDATA[UI-Design]]></category>
		<category><![CDATA[User Interface Design]]></category>
		<category><![CDATA[UX-Design]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=3481</guid>

					<description><![CDATA[<p>Im Zuge unserer Vertiefung haben wir uns dazu entschieden ein Projektmanagement-Tool zu erstellen, welches den mobile First Ansatz verfolgt und vor allem für Menschen interessant ist, die bei Ihrer Tätigkeit unterwegs sind und nur das Handy zur Zeit/Arbeits/Aufgaben Erfassung zur Verfügung haben. Das Tool selbst kann natürlich von jeder Arbeitsgruppe bedient werden, hat aber als <a class="read-more" href="https://mobile.fhstp.ac.at/allgemein/smart-interaction-patterns/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/smart-interaction-patterns/">Smart Interaction Patterns</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Im Zuge unserer Vertiefung haben wir uns dazu entschieden ein Projektmanagement-Tool zu erstellen, welches den mobile First Ansatz verfolgt und vor allem für Menschen interessant ist, die bei Ihrer Tätigkeit unterwegs sind und nur das Handy zur Zeit/Arbeits/Aufgaben Erfassung zur Verfügung haben. Das Tool selbst kann natürlich von jeder Arbeitsgruppe bedient werden, hat aber als Zielgruppe Menschen, die mit Handy Apps nicht jeden Tag zu tun haben und nicht jahrelange UI Erfahrung mit sich bringen.<span id="more-3481"></span></p>
<p>Aus diesem Grund ist es besonders wichtig, das Design, die Eingabe und die Gesten so aufzubauen, dass es leicht erlernt werden kann und dem User eine gute User Experience bietet. Denn wie Steve Jobs es schon sehr passend formuliert hat: Es geht nicht nur darum wie aus aussieht oder wie es sich anfühlt, sondern auch darum wie es funktioniert! In den nächsten Wochen werden wir also laufend aus unseren Erfahrungen mit dem Projekt berichtet. Aus meiner ersten Recherche ergaben sich die folgenden Punkte, die man zu smarten UX Design beachten sollte:</p>
<h3>Transitions</h3>
<p>Transitions (Übergänge) helfen dem User sich zu orientieren. Wenn man zum Beispiel ein Akkordeon öffnet und sich dieses langsam ausklappt, fühlt sich das für den User viel natürlicher an, als wenn es einfach plötzlich erscheint, das es so etwas in der Realität auch nicht gibt. Ein gutes Praxisbeispiel ist auch das Plusicon, was sich beim Öffnen des Inhalts zum einem „X“ dreht.</p>
<div style="width: 490px" class="wp-caption alignnone"><a href="http://dribbble.com/shots/1275053-Menu-Gif?list=searches"><img loading="lazy" decoding="async" class="  " alt="" src="http://cdn1.dribbble.com/users/43655/screenshots/1275053/menu-gif.gif" width="480" height="360" /></a><p class="wp-caption-text">Menü Transition (Dribbble &#8211; Zarin Ficklin)</p></div>
<h3>Inhalte anbieten, wenn der Nutzer sie braucht</h3>
<p>Es sollte auf den ersten Blick zwar ersichtlich sein, aus welchen Komponenten die Seite besteht, jedoch sollte nicht zu Beginn alles geladen werden. Man sollte die UI Elemente also auf das wesentliche reduzieren und erst nach und nach enthüllen, wenn der Nutzer sie braucht. Eine übliche Vorgangsweise ist es zum Beispiel bei Blogbeiträgen die einzelnen Kommentare erst zu laden, wenn der Nutzer an die jeweilige Stelle scrollt.</p>
<h3>Angebotscharakter der UI Elemente</h3>
<p>Hier ist gemeint UI Elemente so zu stylen, dass der User die richtigen Schritte macht, um sein Ziel damit zu erreichen. Ein besonders gutes Beispiel dafür bietet das Kamera-Icon am Sperrscreen ab iOS6. Die doppelten Linien oben und unter dem Icon sollen dem User klar machen, das es sich hierbei nicht um ein normales Icon handelt sondern um eines mit einer besonderen Funktion dahinter. So kann man leicht herausfinden, dass man mit einer Geste nach oben, die Kamera öffnen kann. Unter iOS7 wurden diese doppelten Linien jedoch entfernt, wahrscheinlich weil die User die Geste nun schon gelernt haben, und iOS7 ja auf „Einfachheit“ setzt. Etwas schwierig könnte es jedoch bei neuen Nutzern werden, die auf Apple Produkte umsteigen. Manchmal ist Reduktion nicht das beste Mittel für gute UX.</p>
<p><a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2013/11/2012-06-13-06-23-32.png"><img loading="lazy" decoding="async" class="size-full wp-image-3484 alignleft" style="margin-top: 20px;" alt="2012-06-13-06-23-32" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2013/11/2012-06-13-06-23-32.png" width="300" height="480" /></a><br />
<a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2013/11/iOS-7-Lockscreen.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3485" alt="iOS-7-Lockscreen" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2013/11/iOS-7-Lockscreen.jpg" width="300" height="567" /></a></p>
<h3>Abläufe/Gesten verwenden, die der User bereits kennt</h3>
<p>Hier ist es vor allem wichtig zuerst herauszufinden, wie etabliert manche Gesten oder Abläufe sind. Kennt man die Gesten/Abläufe nur aus einer kleinen eigenen App, so zählt diese dann nicht zu häufig verwendeten. Ein schönes Beispiel hier ist das „Ziehen zum Aktualisieren“, was man aus der Facebook, Gmail, Twitter und noch vielen weiteren Apps kennt.</p>
<div style="width: 490px" class="wp-caption alignnone"><a href="http://dribbble.com/shots/1048116-Dribbble-Mobile-Refresh-ANIMATED?list=searches"><img loading="lazy" decoding="async" class=" " alt="" src="http://cdn0.dribbble.com/users/288708/screenshots/1048116/dribbble-loader-hand.gif" width="480" height="360" /></a><p class="wp-caption-text">Pull to refresh (dribble Mikael)</p></div>
<h3>Inhalts-abhängiges Verstecken</h3>
<p>Google Chrome unter iOS und Android sowie Safari unter iOS 7 haben das Inhalts-abhängige Verstecken der Statusbar sowie der Navigationbar eingeführt. Scrollt man also über eine Site so verschwindet die Navigation, bleibt man stehen erscheint sie wieder. Diese Verhalten soll den User auf den Inhalt fokussieren, sowie mehr Platz für den Inhalt schaffen.</p>
<h3>Gesture-Interaction</h3>
<p>Nachdem Statusbar und Footer sowie Icons natürlich eine gute Sache in mobilen Design sind und die Interaktionselemente auch immer eine entsprechende Größe haben sollen, um sie sinnvoll bedienen zu können, nehmen diese Elemente aber auch einen großen Platz des Screens ein. Da auf mobilen Endgeräten dieser Platz aber sehr kostbar ist, sollte man sich nicht nur auf diese Elemente beschränken, sondern auch etablierte Gesten verwenden, um Platz zu sparen und dem User eine gute User Experience zu bieten. So kann man sich beispielsweise für ein Flyout Menü, das man mit Swipe von rechts nach links öffnet entscheiden, anstatt eines überfüllten Navigationbars. Gute Beispiele dafür sind Facebook und Gmail. Man sollte also Mut dazu haben, solche Gesture Interactions zahlreich einzubauen. Sei es ein einfaches Tapping, ein doppeltes Tapping, ein Tap and Slide oder ein Drag &amp; Drop. Instagram zum Beispiel hat als Core Feature ein doppeltes Tapping, um ein Bild zu liken. Hier geht es nicht mehr nur um das Design der einzelnen Seiten sondern um Fragen wie: Was passiert, wenn der User tapped, wie kann man das visualisieren? Wie lange dauert eine Transition, etc….?</p>
<div style="width: 490px" class="wp-caption alignnone"><a href="http://dribbble.com/shots/1259748-Animated-Cubtab-Queue-GIF?list=searches"><img loading="lazy" decoding="async" class=" " alt="" src="http://cdn0.dribbble.com/users/1097/screenshots/1259748/cubtab-iso.gif" width="480" height="360" /></a><p class="wp-caption-text">Swipe Gestures (dribbble Vin Thomas)</p></div>
<h3>Lernkurve der User</h3>
<p>Jedes Mal wenn ein UI Element durch eine Geste ersetzt wird, steigt die Lernkurve für den Nutzer an. Aus diesem Grund sollte es visuelle Hinweise oder einen App Walktrough, der die wichtigsten Schritte erklärt, geben, um den User bei Erstbenutzung anzuleiten. Der User soll kleine Hinweise zum rechten Zeitpunkt bekommen, ohne sich davon gleich überfordert zu fühlen. Oftmals ist es schwer eine Balance zwischen diesen beiden Faktoren zu finden.</p>
<h3>Konzeptionsprozess</h3>
<p>Besonders schwierig ist hierbei der Konzeptions/Wireframing Prozess, da es schwer ist diese Interactionspattern nur in Wireframes und Scribbles darzustellen. Hier sind vorhandene After Effects (o.ä.) Kenntnisse von Vorteil, weil man hier schnell solche UX Effekte simulieren kann und die fertigen GIF’s auch zur Präsentation ausschicken kann ohne lange Erklärungen. Es gibt auch einige Onlinetools, die zur Unterstützung dienen können, wie z.B. <a href="https://popapp.in/">PopApp</a>, hier kann man schnell Papierprototypen interaktiv machen. Hier kann man nur empfehlen, schon vor der Implementierung mit solchen Prototypen Usability Tests zu machen, um herauszufinden ob die angedachten Gesten und Interaktionen auch wirklich Sinn machen.</p>
<h3>Fazit</h3>
<p>Jedes noch so kleine Interaction Pattern kann die User Experience um ein Vielfaches erhöhen. Man muss sich nur im Vorhinein überlegen, welche man sinnvoll anwenden kann und welche Overkill in einem Projekt wären. Besonders wichtig finden wir, dass man sich für ein Interaction Pattern entscheidet, weil es dem User eine bessere Experience bringen würde und nicht weil es einfach nur „fancy“ wirkt. Wer sich eingehend mit Touch Gesten beschäftigen will, sollte sich unbedingt den <a href="http://www.lukew.com/ff/entry.asp?1071">Touch Gesture Reference Guide </a>von Luke Wroblewski näher ansehen.</p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/smart-interaction-patterns/">Smart Interaction Patterns</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mobile.fhstp.ac.at/allgemein/smart-interaction-patterns/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Arduino Yun</title>
		<link>https://mobile.fhstp.ac.at/allgemein/arduino-yun/</link>
		
		<dc:creator><![CDATA[Michael Emberger]]></dc:creator>
		<pubDate>Wed, 30 Oct 2013 11:33:55 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Arduino]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=3303</guid>

					<description><![CDATA[<p>Mit dem Arduino Yun ist im September 2013 ein weiterer Microcontroller zur Arduino Produktfamilie gestoßen. So wie das Vorgängermodell der Arduino Leornado arbeitet auch der Arduino YUN mit einem ATmega32u4 und verfügt über 20 digitale I/O Pins wovon 12 auch als analoge Eingänge verwendet werden können. Arduino Yun goes Cloud Der Arduino Yun verfügt standartmäßig <a class="read-more" href="https://mobile.fhstp.ac.at/allgemein/arduino-yun/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/arduino-yun/">Arduino Yun</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Mit dem Arduino Yun ist im September 2013 ein weiterer Microcontroller zur Arduino Produktfamilie gestoßen. So wie das Vorgängermodell der Arduino Leornado arbeitet auch der Arduino YUN mit einem ATmega32u4 und verfügt über 20 digitale I/O Pins wovon 12 auch als analoge Eingänge verwendet werden können.</p>
<p><span id="more-3303"></span></p>
<p><strong>Arduino Yun goes Cloud</strong></p>
<p>Der Arduino Yun verfügt standartmäßig über einen WLAN Chip und Ethernet. Dies ermöglicht eine permanente Verbindung zum Internet. Weiters kann der Yun erstmals über WLAN programmiert werden. Vorgängermodelle mussten bislang via USB  programmiert werden.</p>
<p>Neben dem ATmega32u4 bekam der Arduino Yun einen Linino AR 9331 Mikroprozessor auf welchem eine MIPS Linux Distribution basierend auf Open WRT läuft. Diese Linux Distribution läuft unabhängig vom ATmega32u4 und regelt unter anderem den Zugriff zum on Board WLAN Chip und zum integrierten SD Card Modul. Da die alt bekannte Arduino Komponente des Boards unabhängig von der Yun spezifischen Linux Komponente arbeitet wird durch die Bridge, eine Kommunikationen zwischen diesen Komponenten ermöglicht. Die Bridge ermöglicht beispielsweise das Erstellen von umfangreichen API’s mit reinem Arduino Code, welche auf Features der Linux Komponente zugreifen können. Ebenso können durch die Integration von Temboo zahlreiche Informationen von öffentliche API’s ausgelesen werden und direkt im Arduino Sketch verwendet werden.</p>
<p>Durch den Yun wird die Arduino Welt mit der Linux Welt kombiniert. Ein klein wenig erinnert der Yun an den RasperryPi, welcher etwa 40€ kostet und somit im Vergleich zum Yun um rund 20€ günstiger ist. Der Arduino Yun kann aber durchaus bei Usern mit wenig Erfahrung im Umgang mit Linux Systemen punkten. Weiters kann der Arduino Yun als eigenständiger WLAN Hotspot verwendet werden. Dadurch wird beispielsweise eine direkte Kommunikation zwischen mobilen Devices und dem Arduino Yun über WLAN ermöglicht.</p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/arduino-yun/">Arduino Yun</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
