<?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 Wilhelm Pfersmann - Mobile USTP MKL</title>
	<atom:link href="https://mobile.fhstp.ac.at/author/dm141554/feed/" rel="self" type="application/rss+xml" />
	<link>https://mobile.fhstp.ac.at/author/dm141554/</link>
	<description>Die &#34;Mobile Forschungsgruppe&#34; der USTP, sie  sammelt hier alles zu den Themen Design, UX und Entwicklung mobiler Applikationen</description>
	<lastBuildDate>Mon, 28 Mar 2016 15:24:01 +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 Wilhelm Pfersmann - Mobile USTP MKL</title>
	<link>https://mobile.fhstp.ac.at/author/dm141554/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Permission System &#8211; Android 6 Marshmallow</title>
		<link>https://mobile.fhstp.ac.at/development/permission-system-android-6/</link>
		
		<dc:creator><![CDATA[Wilhelm Pfersmann]]></dc:creator>
		<pubDate>Mon, 28 Mar 2016 15:24:01 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Native Development]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Android 6]]></category>
		<category><![CDATA[Marshmallow]]></category>
		<category><![CDATA[Permission]]></category>
		<category><![CDATA[Runtime]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=6178</guid>

					<description><![CDATA[<p>In allen Versionen vor Android 6 wurde nach der Erlaubnis, auf was die jeweilige App zugreifen darf, beim Herunterladen und Installieren vom AppStore gefragt. Das hat sich jetzt geändert. Der User wird nun bei jedem einzelnen Zugriff die eine App vorhat gefragt. Wie der User sich entscheidet, ob er ablehnt oder zusagt, kann auch in <a class="read-more" href="https://mobile.fhstp.ac.at/development/permission-system-android-6/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/development/permission-system-android-6/">Permission System &#8211; Android 6 Marshmallow</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>In allen Versionen vor Android 6 wurde nach der Erlaubnis, auf was die jeweilige App zugreifen darf, beim Herunterladen und Installieren vom AppStore gefragt. Das hat sich jetzt geändert. Der User wird nun bei jedem einzelnen Zugriff die eine App vorhat gefragt. Wie der User sich entscheidet, ob er ablehnt oder zusagt, kann auch in den Einstellungen gefunden werden. Im Prinzip gleicht das System dem von iOS, wer es kennt. Ein schönes System für den User also, aber eine mögliche Hürde für den Entwickler einer App, dessen Hauptfeature möglicherweise der Zugriff auf z.B. Kontaktdaten aus dem Adressbuch ist. Daher möchte ich hier das Thema kurz zusammenfassen.</p>
<p><span id="more-6178"></span></p>
<p>Die Erlaubnis wird für jeden Typ (z.B. Kontakte, Kalendar,&#8230;) zur Runtime (während die App läuft) einzeln eingeholt. Es wird jedoch kein automatischer Dialog angezeigt, dieser muss vom Entwickler explizit aufgerufen werden. Alles andere führt zu einem Absturz der App (SecurityException), falls es noch keine Zusage gab. Zusätzlich kann der User, wie bereits erwähnt, jederzeit eine Zusage in den Einstellungen wieder rückgängig machen.</p>
<p>Man muss also als Entwickler darauf gefasst sein jede betreffende Funktion in der App um diese Permission Abfrage zu erweitern. Dabei kann der User für einen Fall einmalig eine Zustimmung geben oder auf Dauer zustimmen, was in den System-Einstellungen gespeichert wird, die aber wiederum jederzeit vom User und außerhalb der eigenen App geändert werden können.</p>
<p>Betreffen tut dieser Mechanismus nur Apps die mit einer targetSDK 23 auf einem Android 6 Gerät gelauncht werden. Ältere Apps die auf einem Android 6 Gerät bereits installiert sind, werden mit dem alten System behandelt. Die Permission-Abfrage wird wie vor Android 6 bei der Installation durchgeführt. Dadurch werden alle Zusagen folglich automatisch in den System-Einstellungen gespeichert. Gefahr besteht dann, wenn der User dennoch seine Zusage in den System-Einstellungen zurücknimmt. Hier warnt das System den User jedoch selbstständig vor der Gefahr, dass die App dann zum Absturz gebracht werden kann. Hat man also seine aktuelle in Entwicklung befindliche App noch nicht Permission-sicher umgestellt, sollte man die tagetSdkVersion vorerst auf 22 belassen.</p>
<p>Nicht alle Permissions fallen in dieses neue Permission-System. Einige werden automatisch bei der Installation der App akzeptiert und scheinen in den System-Einstellungen nicht auf, womit sie auch nie zurückgenommen werden können. Daher braucht man sich um sie nicht kümmern:</p>
<p>android.permission.ACCESS_LOCATION_EXTRA_COMMANDS<br />
android.permission.ACCESS_NETWORK_STATE<br />
android.permission.ACCESS_NOTIFICATION_POLICY<br />
android.permission.ACCESS_WIFI_STATE<br />
android.permission.ACCESS_WIMAX_STATE<br />
android.permission.BLUETOOTH<br />
android.permission.BLUETOOTH_ADMIN<br />
android.permission.BROADCAST_STICKY<br />
android.permission.CHANGE_NETWORK_STATE<br />
android.permission.CHANGE_WIFI_MULTICAST_STATE<br />
android.permission.CHANGE_WIFI_STATE<br />
android.permission.CHANGE_WIMAX_STATE<br />
android.permission.DISABLE_KEYGUARD<br />
android.permission.EXPAND_STATUS_BAR<br />
android.permission.FLASHLIGHT<br />
android.permission.GET_ACCOUNTS<br />
android.permission.GET_PACKAGE_SIZE<br />
android.permission.INTERNET<br />
android.permission.KILL_BACKGROUND_PROCESSES<br />
android.permission.MODIFY_AUDIO_SETTINGS<br />
android.permission.NFC<br />
android.permission.READ_SYNC_SETTINGS<br />
android.permission.READ_SYNC_STATS<br />
android.permission.RECEIVE_BOOT_COMPLETED<br />
android.permission.REORDER_TASKS<br />
android.permission.REQUEST_INSTALL_PACKAGES<br />
android.permission.SET_TIME_ZONE<br />
android.permission.SET_WALLPAPER<br />
android.permission.SET_WALLPAPER_HINTS<br />
android.permission.SUBSCRIBED_FEEDS_READ<br />
android.permission.TRANSMIT_IR<br />
android.permission.USE_FINGERPRINT<br />
android.permission.VIBRATE<br />
android.permission.WAKE_LOCK<br />
android.permission.WRITE_SYNC_SETTINGS<br />
com.android.alarm.permission.SET_ALARM<br />
com.android.launcher.permission.INSTALL_SHORTCUT<br />
com.android.launcher.permission.UNINSTALL_SHORTCUT</p>
<p>Stellen wir uns also vor wir schreiben eine Funktion die alle Kontakte aus dem Adressbuch des Users auslesen soll. Nächster Schritt ist also nach diesem neuen System, dass wir eine zweite Funktion schreiben, die überprüft ob eine Erlaubnis für Kontakte bereits vorhanden ist. Wenn nicht, dann soll ein Dialog angezeigt werden, der den User fragt ob er diese Erlaubnis meiner App geben will. Interessanterweise reicht schon eine Zustimmung das Kontakte gelesen (android.permission.READ_CONTACTS) werden dürfen um auch Kontakte zu ändern/erstellen (android.permission.WRITE_CONTACTS) da dieses Permissions sich in der gleichen Gruppe (android.permission-group.CONTACTS) befinden.</p>
<p>Alle Details zur Implementierung finden sich hier: <a href="http://developer.android.com/training/permissions/requesting.html" target="_blank">http://developer.android.com/training/permissions/requesting.html</a></p>
<p>Funktionen für die Support-Libary sind vorhanden.</p>
<p>Wem die normale Vorgehensweise zu komplex ist, der kann sich auch eine 3rd Party Libary zur Hilfe nehmen. Diese arbeitet z.B. einfach mit dem Annotieren von Funktionen: <a href="http://hotchemi.github.io/PermissionsDispatcher/" target="_blank">http://hotchemi.github.io/PermissionsDispatcher/</a></p>
<p>Abschließender Gedanke: Greift man in seiner App auf mehr externe Resourcen als nur Kontakte zu, sollte man sich überlegen wie die App dennoch nützlich sein kann, wenn der User zwar die Erlaubnis für Kontakte gibt, aber nicht für Telefon.</p>
<p>The post <a href="https://mobile.fhstp.ac.at/development/permission-system-android-6/">Permission System &#8211; Android 6 Marshmallow</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Android &#8211; Wie bekomme ich Termine des Users in meine App?</title>
		<link>https://mobile.fhstp.ac.at/development/native-development/android-wie-bekomme-ich-termine-des-users-in-meine-app/</link>
		
		<dc:creator><![CDATA[Wilhelm Pfersmann]]></dc:creator>
		<pubDate>Fri, 25 Sep 2015 19:48:59 +0000</pubDate>
				<category><![CDATA[Native Development]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[App]]></category>
		<category><![CDATA[Calendar]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=5458</guid>

					<description><![CDATA[<p>Prinzipiell gibt es im Internet eine offizielle Dokumentation (http://developer.android.com/guide/topics/providers/calendar-provider.html) an die auch wir (Theres-Sophie Scheucher und ich) uns gehalten haben. Doch leider sind wir auf Probleme und falsche oder veraltete Informationen die die Doku betreffen gestoßen, was bei der Android Developers Doku normalerweise bei anderen Themen in so großem Maße nicht auffällt. Da wir aber <a class="read-more" href="https://mobile.fhstp.ac.at/development/native-development/android-wie-bekomme-ich-termine-des-users-in-meine-app/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/development/native-development/android-wie-bekomme-ich-termine-des-users-in-meine-app/">Android &#8211; Wie bekomme ich Termine des Users in meine App?</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Prinzipiell gibt es im Internet eine offizielle Dokumentation (<a href="http://developer.android.com/guide/topics/providers/calendar-provider.html" target="_blank">http://developer.android.com/guide/topics/providers/calendar-provider.html</a>) an die auch wir (Theres-Sophie Scheucher und ich) uns gehalten haben. Doch leider sind wir auf Probleme und falsche oder veraltete Informationen die die Doku betreffen gestoßen, was bei der Android Developers Doku normalerweise bei anderen Themen in so großem Maße nicht auffällt. Da wir aber eine Art verbesserte Todos &amp; Kalendar-App im Sinn hatten mussten wir uns dennoch durch die Doku beißen und präsentieren hier ein kleines Tutorial und ein paar Tipps.</p>
<p><span id="more-5458"></span></p>
<p>Wichtig für uns im ersten Schritt war es die Daten richtig auszulesen und in der App anzuzeigen. Doch dafür ist sehr viel Logik notwendig, die eher dürftig dokumentiert ist. Auch gibt es selten bis gar nicht Tutorials im Internet dazu zu finden. Eine Art Library die einem solche Dinge überhaupt abnimmt findet sich leider überhaupt nicht.</p>
<p>Grundlegend gibt es verschiedene ContentProvider, man kann auch eigene schreiben. Neben dem CalendarProvider gibt es auch z.B. den ContactsProvider, mit dem man das Telefonbuch des Users auslesen kann. Um nun den CalendarProvider auszulesen braucht es einen sogenannten ContentResolver über den eine Query gemacht wird, nämlich mit der URI der internen Calendar Datenbank am Gerät (speziell hier die URI zu der Tabelle mit den verfügbaren Kalendern) und weiteren SQL Parametern.</p>
<p><em>Uri uri = Calendars.CONTENT_URI;<br />
private static final String[] calendarsColumns = new String[] {<br />
Calendars._ID,<br />
Calendars.CALENDAR_DISPLAY_NAME,<br />
Calendars.CALENDAR_COLOR,<br />
Calendars.VISIBLE<br />
};<br />
Cursor cursorCalendars = getApplicationContext().getContentResolver.query(uri, calendarsColumns, null, null, null);</em></p>
<p>Als Rückgabeobjekt bekommt man einen Cursor, den man auch von anderen Programmiersprachen kennt. Mit diesem kann man die Daten Zeile für Zeile durchgehen und die jeweiligen Felder auslesen. Das String Array <em>calendarsColumns </em>enthält die gewünschten Spaltennamen, die weiteren Parameter sind bei diesem Beispiel null, hier könnte man bspsw. Sortierung angeben. Würde man den SQL String ausgeben können, würde er wahrscheinlich so aussehen: &#8220;SELECT _ID, <em>CALENDAR_DISPLAY_NAME,</em> <em>CALENDAR_COLOR</em> , <em>VISIBLE </em> FROM CALENDARS&#8221;</p>
<p><em>ArrayList&lt;WTCalendar&gt; arrayList = new ArrayList&lt;&gt;();<br />
while (cursorCalendars.moveToNext()) {<br />
WTCalendar calendar = new WTCalendar(<br />
cursorCalendars.getLong(cursorCalendars.getColumnIndex(Calendars._ID)),<br />
cursorCalendars.getString(cursorCalendars.getColumnIndex(Calendars.CALENDAR_DISPLAY_NAME)),<br />
cursorCalendars.getLong(cursorCalendars.getColumnIndex(Calendars.CALENDAR_COLOR)),<br />
cursorCalendars.getString(cursorCalendars.getColumnIndex(Calendars.VISIBLE)).equals(&#8220;1&#8221;) //boolean<br />
);<br />
arrayList.add(calendar);<br />
}<br />
cursorCalendars.close();</em></p>
<p>Als nächstes machen wir uns eine leere ArrayList aus eigenen Calendar Objekten die wir mit den bestimmten Daten aus der Tabelle befüllen wollen. In einer while Schleife die prüft ob es eine (weitere) Zeile (Row) im Ergebnis gibt, erstellen und befüllen wir ein Custom Object (WTCalendar) und fügen es danach der ArrayList hinzu.</p>
<p>Schauen wir uns diesen Codeausdruck aus dem oberen Codesnippet genauer an:</p>
<p><em>cursorCalendars.getString(cursorCalendars.getColumnIndex(Calendars.CALENDAR_DISPLAY_NAME))</em></p>
<p>Mit der Methode <em>getString</em> des Cursor Objekts bekommen wir einen String eines Feldes. Wichtig hier ist natürlich das dieses Feld auch einen String beinhaltet, ansonsten würde das zu einem Fehler führen. Dieser Methode <em>getString</em> muss ein Index der Spalte/des Feldes als int übergeben werden. Diesen Index bekommen wir über die Methode <em>getColumnIndex</em> des Cursor Objekts, der wir die Konstante Index <em>Calendars.CALENDAR_DISPLAY_NAME </em>übergeben, diese entält den Index der Spalte/des Feldes. Diese Variante schützt davor einen Fehler zu bekommen, falls Android auf einem anderen Gerät die Spalten-Anordnung in der Tabelle geändert hat.</p>
<p>Besonders wichtig ist noch die Zeile <em>cursorCalendars.close();</em> , damit wird der Cursor auch wieder freigegeben und bleibt damit nicht im Speicher, was u.a. die Batterielaufzeit des Geräts beeinträchtigen würde.</p>
<p>Wollen wir nun Events (Termine) auslesen wäre das Verfahren dasselbe wie im gerade gezeigten Snippet. Nur die Definition des Cursors unterscheidet sich durch eine andere Uri, andere Spalten und mögliche Parameter.</p>
<p><em>Uri uri = Events.CONTENT_URI;<br />
private static final String[] eventsColumns = new String[] {<br />
Events._ID,<br />
Events.TITLE,<br />
Events.DESCRIPTION,<br />
Events.EVENT_LOCATION,<br />
Events.DTSTART,<br />
Events.DTEND,<br />
Events.ALL_DAY,<br />
Events.RRULE,<br />
Events.CALENDAR_ID<br />
};<br />
Cursor cursorEvents = WTApplication.contentResolver.query(<br />
uri,<br />
eventsColumns,<br />
Events.CALENDAR_ID + &#8221; = 1&#8243;,<br />
null,<br />
Events.DTSTART + &#8221; ASC&#8221;);</em></p>
<p>Die ersten beiden Paramter der query Methode sind ja schon bekannt. Der dritte Parameter ist bei SQL als WHERE zu verstehen, also eine Einschränkung des Suchergebnisses. Hier sollen nur Termine zurückgegeben werden, die zum Kalendar mit der ID &#8220;1&#8221; gehören. Der nächste Parameter, der hier null gesetzt ist, kann dazu verwendet werden den Ausdruck &#8221; = 1&#8243; in einem Array an Parametern zu übergeben, auf dies wurde hier verzichtet, da es nur einen WHERE Parameter gibt. Der letzte Parameter in der query Methode lässt einen die Ergebnisse vorsortieren. Würde man also den SQL String wieder ausgeben können, würde er wahrscheinlich so aussehen: &#8220;SELECT _ID, TITLE, DESCRIPTION, EVENT_LOCATION, DTSTART, DTEND, ALL_DAY, RRULE, CALENDAR_ID FROM EVENTS WHERE _ID=1 ORDER BY DTSTART ASC&#8221;</p>
<p>Es gibt natürlich auch Methoden für INSERT und UPDATE/DELETE, doch soweit sind wir in unserer App noch gar nicht gekommen diese zu verwenden.</p>
<p>Die Doku zeigt dass es also eine Tabelle &#8220;Calendars&#8221; und eine Tabelle &#8220;Events&#8221; gibt. Nun führt sie aber auch eine Tabelle &#8220;Instances&#8221; an, dort heißt es:</p>
<p><em>&#8220;This table holds the start and end time for each occurrence of an event. Each row in this table represents a single event occurrence. For one-time events there is a 1:1 mapping of instances to events. For recurring events, multiple rows are automatically generated that correspond to multiple occurrences of that event.&#8221;</em></p>
<p>Nachdem ich mir die Events und Instances mal geloggt habe um zu sehen was überhaupt für Daten in diesen Tabellen vorhanden sind, habe ich entdeckt dass diese Aussage ziemlich gewagt ist. Zu den sich nicht wiederholenden Events gibt es keinerlei 1:1 Instances und zu den sich wiederholenden Events scheint es sehr buggy zu sein. So gibt es teilweise Instances und teilweise einfach nicht, obwohl die Regel (für die Wiederholung des Termins) im Event gespeichert ist. Man kann sich also leider nicht darauf verlassen sich nur die Instances auszulesen, sondern muss eigentlich wie folgt vorgehen:</p>
<p>&#8211; Auslesen der Events<br />
&#8211; Überprüfen ob das Event sich wiederholt<br />
&#8211; Überprüfen ob es eine oder mehrere Instances zum Event gibt<br />
&#8211; Wenn nicht -&gt; Regeln für sich wiederholende Events selbst interpretieren und Instanzen anlegen<br />
&#8211; Eigene(s) Event Objekt(e) selbstständig befüllen und mit eigenenen Daten erweitern, falls nicht in Tabelle vorhanden<br />
&#8211; Darauf achten, dass bei der Erstellung keine ungewünschten Duplikate entstehen</p>
<p>Man sieht also an diesem Punkt ist plötzlich viele manuelle Logik nötig, was das Programmieren einer solchen App ziemlich komplex macht. Vielleicht ist das der Grund warum es nur wenige Kalendar Apps und noch weniger Tutorials oder Dokumentationen gibt.</p>
<p>The post <a href="https://mobile.fhstp.ac.at/development/native-development/android-wie-bekomme-ich-termine-des-users-in-meine-app/">Android &#8211; Wie bekomme ich Termine des Users in meine App?</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Todo-Apps im Test</title>
		<link>https://mobile.fhstp.ac.at/tests/5033/</link>
		
		<dc:creator><![CDATA[Wilhelm Pfersmann]]></dc:creator>
		<pubDate>Fri, 02 Jan 2015 16:21:11 +0000</pubDate>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Tests]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=5033</guid>

					<description><![CDATA[<p>Todo-Apps im Test: Astrid, Todoist oder Remember the milk &#8211; Welche überzeugt? mfg-Magazin 01/2015 Wer kennt das als Student nicht: Die nächste Abgabe einer Arbeit steht an, für die Prüfung nächste Woche muss noch gelernt werden, die Wohnung könnte auch mal wieder geputzt werden und wer geht eigentlich einkaufen? Also schrieb man sich früher ganz <a class="read-more" href="https://mobile.fhstp.ac.at/tests/5033/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/tests/5033/">Todo-Apps im Test</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1><strong>Todo-Apps im Test: Astrid, Todoist oder Remember the milk &#8211; Welche überzeugt?</strong></h1>
<h6>mfg-Magazin 01/2015</h6>
<p><strong>Wer kennt das als Student nicht: Die nächste Abgabe einer Arbeit steht an, für die Prüfung nächste Woche muss noch gelernt werden, die Wohnung könnte auch mal wieder geputzt werden und wer geht eigentlich einkaufen? Also schrieb man sich früher ganz altmodisch Notizzettel. Auch heute tun das wohl noch Menschen, aber Studenten die ein Smartphone besitzen, haben wahrscheinlich auch eine Todo-App oder wollen sich eine anschaffen.</strong></p>
<p><span id="more-5033"></span></p>
<hr />
<p>Das Chaos braucht endlich eine Ordnung, doch welche Todo-App soll es sein? Wir haben uns in der Redaktion drei unterschiedlich umfangreiche Todo-Apps gesucht und nach bestimmten Kriterien getestet. Die Übersicht der Testergebnisse findet sich am Ende dieses Artikels. Getestet wurde dabei auf einem HTC One-V mit einer Bildschirm-Diagonale von 3,7 Zoll.</p>
<p><strong>Astrid Tasks</strong></p>
<p>Beim Starten der App fällt schon mal auf, im Vergleich zu den anderen Apps: Man muss sich nicht einloggen um eine einfache Todo-Liste zu erstellen. Die App funktioniert also auch jederzeit offline, nur das man dann natürlich auf die Spracheingabe verzichten muss. Diese bietet nämlich eine Erstellung eines Todos auf Knopfdruck und folgender Spracheingabe. Damit wird jedoch nur der Name des Todos festgesetzt. Danach wird man weitergeleitet auf einen Screen, der eine Menge Einstellungen enthält. So kann man ein Fälligkeitsdatum setzen und was sehr schön ist auch gleich zusätzlich einen Kalendereintrag erstellen. Weiters ist es möglich eine Prioriät auszuwählen und eine Kategorie und eine Beschreibung einzutragen. Auch kann man ein Todo verbergen lassen bis zu einem bestimmten Datum, also z.B. eine Woche vor dem Fälligkeitsdatum. Natürlich gibt es für die Erinnerung an das Todo diverse Erinnerungsfunktionen. Zusätzlich können auch noch Audiovisuelle Dateien angehängt werden und nachträgliche Kommentare hinzugefügt werden.</p>
<p>Astrid zeigt also eine simple Herangehensweise an das Thema Todo-Listen und ist bei der Bedienung möglicherweise doch schon ein wenig zu komplex, so ist z.B. fraglich ob wirklich so viele zusätzliche Einstellungen und hinzufügbare Daten wirklich gebraucht werden. Ansonsten bietet das Design eine schöne Android typische Umgebung in der der geübte Android-User sich schnell mit bekannten Komponenten zurechtfinden wird. Weniger geübte User werden aufgrund der Optionsvielfalt möglicherweise abgeschreckt sein oder einfach Einstellungen nie zu Gesicht bekommen.</p>
<p><strong>Todoist</strong></p>
<p>Todoist nennt sich selbst die &#8220;Beste Todo-App&#8221;, daher haben wir auf sie ein besonderes Auge geworfen und wollten herausfinden ob das wirklich stimmen kann. Zu einem Massenvergleich führt dieser Artikel nicht und von einem Vergleich mit dem zweiten Platzhirsch &#8220;Wunderlist&#8221; wurde abgesehen, da sich die Apps zu ähnlich sind.</p>
<p>Das Design gleich zu Beginn des ersten Appstarts kann sich schon mal sehen lassen und zeigt eine sehr professionelle und elegante Herangehensweise an das Thema. Hier muss aber auch gesagt werden, dass diese App schon im Vorfeld bestimmte Erwartungen setzt, so gibt es eine Premium Version mit weiteren Funktionen und eine Business Version für Unternehmen. Die Todo-Daten laufen dabei über eine Cloud, werden dort also gespeichert und können dadurch von überall, also von jedem Gerät und jedem Betriebssystem aus gelesen werden. Dazu steht jeweils eine eigene App auf allen Systemen zur Verfügung.</p>
<p>Jetzt wollen wir uns also mal die Android App genauer ansehen. Doch bevor wir loslegen können unsere Todos anzulegen, müssen wir uns anmelden bzw. registrieren, da wir noch kein Benutzer-Konto haben. Trotz der schönen Optik des animierten Startscreens, fällt uns gleich ein erster Fehler auf, der zur Verwirrung führt: Es gibt zwei Buttons, die beide Anmelden heißen. Erst durch Trail &amp; Error finden wir heraus, dass sich hinter dem zweiten Button die Registrierungsmaske befindet.</p>
<p>Der Startbildschirm nach dem erfolgreichen Anmeldens unterscheidet sich auf den ersten Blick nicht groß von dem der Astrid-App. Mit dem &#8220;+&#8221;-Button können wir ein neues Todo hinzufügen. Der Einstellungsscreen der jetzt folgt sieht sehr abgespeckt aus. Neben dem Titel, wir sehen enttäuschenderweise keine Möglichkeit für eine Spracheingabe, gibt es eine Kategorieauswahl und die Eingabemaske für das Fälligkeitsdatum. Was jedoch positiv auffällt ist die Kontexthilfe, so scheint bei jedem Eingabefeld ein Sprechblase auf, die beschreibt was hier zu tun ist und beim Fälligkeitsdatum werden vorgefertigte Optionen wie &#8220;Heute&#8221;, &#8220;Morgen&#8221;, &#8220;In einer Woche&#8221; angezeigt, die direkt wählbar sind und scheinbar als fixe Schlüsselwörter dienen, die dem System wissen lassen welches Datum gemeint ist.</p>
<p>Wurde das Todo angelegt werden wir darauf aufmerksam gemacht, dass es nun weitere Optionen gibt, wenn wir das Todo in der Liste antippen. Da sind also die weiteren Einstellungen versteckt worden. Anders als bei Astrid und eindeutig schöner gelöst befinden sich nun die gewohnten Einstellungen nicht in einem Screen sondern versteckt hinter mehreren Toolbar Buttons. So kann das Todo nun mit einer Priorität oder mit weiteren Etiketten und Levels erweitert werden. Notizen können nur in der Premium Version hinzugefügt werden, was uns ein wenig wundert, ist es doch keine wirklich starke Funktion, die wir jetzt unbedingt vermissen würden. Auch Erinnerungen sind eine Premiumfunktion. Angesichts der Astrid-App, die wir im Vorfeld getestet haben und die all diese Funktionen kostenlos enthielt, kommen uns diese Premiumfunktionen nun etwas unverständlich vor und führen für uns persönlich sicher nicht zum Titel &#8220;Beste Todo-App&#8221;, sie hat noch eher Chancen auf &#8220;Best Design&#8221;. Da hilft auch keine nett gemeinte Statistik über das Todo-Verhalten des Users, die die Todoist-App weiters bietet. Interessant zu erwähnen für WG-Bewohner ist die &#8220;Share&#8221;-Funktion, die es zulässt Todo-Listen mit anderen App-Besitzer zu teilen.</p>
<p><strong>Remember the milk</strong></p>
<p>Der Titel der App führt schon mal zum Thema Todos und Einkaufslisten, doch was bietet die App wirklich? Kann sie sich durch spezielle Funktionen oder durch eine intuitive Bedienung hervorheben? Nachdem wir uns auch hier registriert und angemeldet haben kommen wir ohne jegliche Starthilfe auf den Startscreen der App. Hier wird uns aber keine leere Liste präsentiert sondern das Hauptmenü. Hier gibt es die Wahlmöglichkeiten für &#8220;Heute&#8221;, &#8220;Morgen&#8221; und weitere folgende Wochentage, dabei zeigt uns eine rote &#8220;1&#8221;, dass &#8220;Heute&#8221; bereits ein Todo vorhanden ist. Am rechten Bildschirmrand fällt uns nun auf, dass dort ein anderer Screen ins Bild ragt. Intuitiv ziehen wir den Screen nach links um ihn im Ganzen zu sehen. Da haben wir ja die Liste gefunden und die Ersteller der App haben uns bereits ein Todo erstellt, mit der Bezeichnung &#8220;Probieren Sie Remember The Milk&#8221;.</p>
<p>Keine weitere Hilfe? Na dann probieren wir die App eben selbstständig aus. Das typische &#8220;+&#8221; ist auch hier als Button zu finden. Das Design des folgenden Einstellungsscreens ist bescheiden, ähnlich wie in der Astrid-App sehr systemnah gehalten. Der Umfang der Einstellungen eines Todos gleicht dem der Todoist-App. Optional können Felder hinzugefügt werden, jedoch ist der Button dazu zu unscheinbar und erklärt nicht die Funktion dahinter, also ein typischer Fall von zu viel Komplexität für den User. Befindet sich das Todo nun in der Liste, kann es wie in den anderen Apps angewählt werden wodurch Details und Optionen aufscheinen. Hier passiert das über einen eigenen Screen und da fällt uns etwas ungutes auf: Es gibt keinen Back-Button in der Actionbar, wie ihn jeder Android-User automatisch erwarten würde. Das problematische dabei zeigt sich als wir immer wieder statt dem Back-Button den vorhanden &#8220;Häkchen&#8221;-Button tippen, der das Todo jedes Mal erledigt, was wir ja gar nicht wollen. Immerhin gibt es eine &#8220;Rückgängig machen&#8221;-Funktion, aber ehrlich gesagt ist das schon ein schwerer Eingriff in die Appgestaltung. Das schreckt wohl auch einige User nach dem ersten Benutzen schon mal ab. Mehr gibt es dazu wohl nicht zu sagen, außer dass man hoffentlich die Milch auch auf einen altmodischen Notizzettel geschrieben hat, falls man das Todo selbst unabsichtlich erledigt bevor man noch einkaufen war.</p>
<p><strong>Testergebnisse<br />
</strong></p>
<p>Bitte auf das Vorschaubild klicken um zu vergrößern</p>
<p><a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/kriterienkatalog.png"><img fetchpriority="high" decoding="async" class="alignnone wp-image-5036 size-medium" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/kriterienkatalog-300x212.png" alt="kriterienkatalog" width="300" height="212" /></a></p>
<p><strong>Fazit: Mit welcher App bringen Sie Ordnung ins Chaos?</strong></p>
<p>Astrid Tasks, Todoist, Remember the milk. Mit keiner der getesteten Todo-Apps machen Sie als Student etwas falsch, denn die Unterschiede liegen im Detail. Sie legen Wert auf Design und gute Bedienung? Dann sollten Sie einen Blick auf Todoist oder Astrid Tasks werfen. In puncto Funktionalität ist Astrid Tasks dank cloudloser Speicherung und vieler kostenloser Funktionen sicher der unangefochtene Spitzenreiter. Wollen Sie etwas riskieren oder gefällt Ihnen einfach nur der witzige Name, dann probieren Sie Remember the milk aus. Und sollten Sie sich nicht entscheiden können, installieren Sie einfach zwei oder mehr Todo-Apps und vergleichen selbst.</p>
<p>The post <a href="https://mobile.fhstp.ac.at/tests/5033/">Todo-Apps im Test</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Augmented Reality im Web &#8211; Teil 1</title>
		<link>https://mobile.fhstp.ac.at/development/webdevelopment/augmented-reality-im-web-teil-1/</link>
					<comments>https://mobile.fhstp.ac.at/development/webdevelopment/augmented-reality-im-web-teil-1/#comments</comments>
		
		<dc:creator><![CDATA[Wilhelm Pfersmann]]></dc:creator>
		<pubDate>Sun, 02 Nov 2014 11:38:20 +0000</pubDate>
				<category><![CDATA[Webdevelopment]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=4779</guid>

					<description><![CDATA[<p>Bevor ich mein Initialprojekt codeKnacker gemacht habe kam ich bei meiner langen Recherche auch auf das Thema &#8220;Augmented Reality&#8221;. Es folgt eine Überblickspräsentation meiner Recherche. Mein erstes Konzept für das Initialprojekt war nämlich eine Art &#8220;Augmented Reality Station&#8221; in jedem Stockwerk der FH, dass mir eine Art von Interface präsentiert sobald ich auf einen Marker <a class="read-more" href="https://mobile.fhstp.ac.at/development/webdevelopment/augmented-reality-im-web-teil-1/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/development/webdevelopment/augmented-reality-im-web-teil-1/">Augmented Reality im Web &#8211; Teil 1</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Bevor ich mein Initialprojekt codeKnacker gemacht habe kam ich bei meiner langen Recherche auch auf das Thema &#8220;Augmented Reality&#8221;. Es folgt eine Überblickspräsentation meiner Recherche.</p>
<p><span id="more-4779"></span></p>
<p>Mein erstes Konzept für das Initialprojekt war nämlich eine Art &#8220;Augmented Reality Station&#8221; in jedem Stockwerk der FH, dass mir eine Art von Interface präsentiert sobald ich auf einen Marker zeige. In diesem Interface kann ich sofort eine Art 3D Karte des Stockwerks mit meiner derzeitigen Position sehen und kann natürlich nach einem Ziel suchen, dass mir dann über eine Führungslinie auf der Karte angezeigt wird.</p>
<p>Das Konzept wäre sogar auf die Raum-/Stundenpläne, die jetzt in Papierform neben jeder Raumtür aufgehängt werden, erweiterbar. Erstens würde man Papier sparen, die Pläne müssten bei Änderungen nicht ausgetauscht werden und man könnte ohne mühsam ins Web-CIS zu gehen direkt sich anzeigen lassen wie es mit dem Raumzeiten aussieht. Natürlich wäre der Zugriff auf den FH-Server von Nöten <img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Da unser Initialprojekt eine Web-App sein sollte, musste ich also herausfinden ob &#8220;Augmented Reality&#8221; überhaupt im Web-Browser möglich ist und was es da eigentlich für Möglichkeiten gibt. Wie ihr euch vorstellen könnt, wurde ich nicht fündig, aber was ich gefunden habe, möchte ich hier präsentieren. Dieser Artikel ist aber kein Tutorial zu &#8220;Augmented Reality&#8221;.</p>
<p><strong>Augmented Reality im Web?</strong></p>
<p>Nach meinem bisherigen Wissen über Augmented Reality, funktioniert das Ganze ja über die Kamera des Smartphones. Erst mal platziert man einen sogenannten &#8220;Marker&#8221; im Blickfeld der Kamera. Im nativen Code greift man dann auf die Kamera zu und liest sich die Live-Frames aus. Diese werden durch einen Algorithmus gejagt und der Marker wird in den Daten identifiziert. Nun kann man an der Position des Markers ein beliebiges 2D oder 3D Objekt über die Kamera-Frames legen.</p>
<p>Das größte Problem beim Web-Browser liegt natürlich darin, dass man (noch?) keinen direkten Zugriff auf die Kamera aus dem Browser heraus hat. Indirekt kann man ja bereits mit JS in der Hybrid- und Web-App-Entwicklung ein Foto von der Kamera &#8220;anfordern&#8221; lassen. Das ist also der ausschlaggebende Schritt, der mein Projekt scheitern ließ.</p>
<p>Ich gab mich aber damit nicht zufrieden und wollte mehr recherchieren und zwar in die experimentelle Richtung. Vielleicht gab es dort Information. Was tut man also, wenn man nach experimentellen Geschichten sucht und keine wissenschaftlichen Artikel lesen will? Richtig, man geht auf Youtube <img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Und nach nur kurzer Zeit fand ich dieses Video hier:</p>
<p><iframe title="WebRTC, JSARToolKit and Three.js" width="500" height="281" src="https://www.youtube.com/embed/BIFo1przLY4?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></p>
<p>Auf den ersten Blick dachte ich mir: Ja, das ist es doch was ich suche! Und tatsächlich ist es schon nahe dran, aber eben nicht ganz.</p>
<p><strong>Was ist JSARToolkit &amp; Three.js?</strong></p>
<p>Nun, ich zitiere mal direkt aus github wo wir die JSAToolkit Libary finden: &#8220;This is a JavaScript port of FLARToolKit, operating on canvas images and video element contents. And hopefully one day on device elements with webcam input.&#8221; ( https://github.com/kig/JSARToolKit )</p>
<p>Also zuerst mal: FLARToolKit (was wiederum ein AS3 Port von NyARToolkit (Java) ist, der wiederum ein Port von ARToolkit (das Original, glaube ich) ist) ist eine Libary, die Marker in Bildern findet und deren Position und Ausrichtung im 3D Raum ausgibt. JSAToolkit ist damit der JS Port von FLARToolKit. Jetzt kann aber (wie im Zitat lesbar) das JSAToolkit diese Informationen nur in einem Video- oder einem Canvas-Element herausfinden, nicht in einer Webcam und damit klarerweise auch nicht in einer Kamera eines Smartphones.</p>
<p>Three.js ist eine Libary, die uns auf einfache Weise WebGL-3D Objekte erstellen und zeichnen lässt.</p>
<p><strong>Wie funktioniert nun der Ansatz JSAToolkit &amp; Three.js?</strong></p>
<p>Genauso wie im nativen Ansatz findet uns das JSAToolkit in zum Beispiel Frames einer abspielenden Videodatei (wie man es auch in dem Video sieht) den Marker und gibt uns Informationen darüber aus. Mit diesen können wir dann über Three.js ein Objekt an dessen Position zeichnen lassen.</p>
<p>Doch dass diese Funktion im Browser schon möglich ist und noch dazu mit JavaScript, ist beachtlich.</p>
<p><strong>Fazit</strong></p>
<p>Es war also in diesem Fall doch nur ein kleiner großer Schritt, dann hätte mein Projekt umgesetzt werden können. Ob diese JSAToolkit Libary nur wegen dem fehlendem Zugriff auf Webcam und Smartphone-Kamera nicht weiterentwickelt wird oder sonstige Probleme sie daran hindern, kann ich natürlich nicht beantworten.</p>
<p>Mal sehen was meine weiteren Recherchen ergeben werden.</p>
<p><strong>Quellen:</strong></p>
<p>Video JSARToolKit &amp; Three.js &#8211; <a title="http://www.youtube.com/watch?v=BIFo1przLY4" href="http://www.youtube.com/watch?v=BIFo1przLY4" target="_blank">http://www.youtube.com/watch?v=BIFo1przLY4</a><br />
Weitere ähnliche Videos &#8211; <a title="http://www.youtube.com/results?search_query=JSARToolKit+android" href="http://www.youtube.com/results?search_query=JSARToolKit+android" target="_blank">http://www.youtube.com/results?search_query=JSARToolKit+android</a></p>
<p>JSARToolKit &#8211; <a title="https://github.com/kig/JSARToolKit" href="https://github.com/kig/JSARToolKit" target="_blank">https://github.com/kig/JSARToolKit</a><br />
ThreeJS &#8211; <a title="http://threejs.org/" href="http://threejs.org/" target="_blank">http://threejs.org/</a></p>
<p>FLARToolKit &#8211; <a title="http://www.libspark.org/wiki/saqoosha/FLARToolKit/en" href="http://www.libspark.org/wiki/saqoosha/FLARToolKit/en" target="_blank">http://www.libspark.org/wiki/saqoosha/FLARToolKit/en</a><br />
ARToolkit &#8211; <a title="http://www.hitl.washington.edu/artoolkit/" href="http://www.hitl.washington.edu/artoolkit/" target="_blank">http://www.hitl.washington.edu/artoolkit/</a><br />
NyARTookkit &#8211; <a title="http://nyatla.jp/nyartoolkit/wp/" href="http://nyatla.jp/nyartoolkit/wp/" target="_blank">http://nyatla.jp/nyartoolkit/wp/</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/development/webdevelopment/augmented-reality-im-web-teil-1/">Augmented Reality im Web &#8211; Teil 1</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/webdevelopment/augmented-reality-im-web-teil-1/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Initialprojekt: codeKnacker</title>
		<link>https://mobile.fhstp.ac.at/allgemein/initialprojekt-codeknacker/</link>
		
		<dc:creator><![CDATA[Wilhelm Pfersmann]]></dc:creator>
		<pubDate>Mon, 27 Oct 2014 16:25:52 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Projekte]]></category>
		<category><![CDATA[Studium]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=4730</guid>

					<description><![CDATA[<p>IDEE Bei meiner Ideenfindung für das Initialprojekt in MOBAW fand ich eine mir noch nicht bekannte Vibration API für den Browser. Kurz gesagt man kann auf die Vibrationsfunktion des Smartphones über den Webbrowser zugreifen. Leider nur begrenzt, denn die Funktion bietet nur die Vibration einzuschalten, für beliebige ms vibrieren zu lassen und dann wieder auszuschalten <a class="read-more" href="https://mobile.fhstp.ac.at/allgemein/initialprojekt-codeknacker/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/initialprojekt-codeknacker/">Initialprojekt: codeKnacker</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><strong>IDEE</strong></p>
<p>Bei meiner Ideenfindung für das Initialprojekt in MOBAW fand ich eine mir noch nicht bekannte Vibration API für den Browser. Kurz gesagt man kann auf die Vibrationsfunktion des Smartphones über den Webbrowser zugreifen. Leider nur begrenzt, denn die Funktion bietet nur die Vibration einzuschalten, für beliebige ms vibrieren zu lassen und dann wieder auszuschalten oder eine Pause einzulegen, dazu wird einfach ein Array mit Vibrierzeiten und Pausen übergeben.</p>
<p>Also hier nochmal die API in Codeform:</p>
<p><a title="davidwalsh.name/vibration-api" href="http://davidwalsh.name/vibration-api" target="_blank">http://davidwalsh.name/vibration-api</a></p>
<p><strong>DAS SPIEL</strong></p>
<p>Das Spielprinzip des Games CodeKnacker ist denkbar einfach: Ein Random-Code soll erraten werden. Zusätzlich hast du als Spieler eine besondere Fähigkeit, du kannst durch &#8220;scannen&#8221; der Tasten herausfinden welche Ziffer/Zeichen im Code an nächster Stelle kommt. Hier kommt die API zur Unterstützung, aber nur wenn dein Smartphone kein iPhone ist und du möglichst im Chrome spielst.<br />
Du tapst also auf eine beliebige Taste und wenn dein Smartphone dabei vibriert weißt du das die Ziffer als nächstes im Code vorkommen muss.</p>
<p><span id="more-4730"></span></p>
<p>Um aber jetzt diese Ziffer ins &#8220;System&#8221; einzugeben und damit den ganzen Code nach der Reihe herauszufinden, musst du nochmal auf die gleiche Taste, die vibriert hat, tappen. Du siehst jetzt im Eingabefeld die eingegebene Ziffer und alle weiteren. Gibst du eine falsche Ziffer ein oder läuft die Zeit ab (du wirst vom System beim Hacken entdeckt), wird die Eingabe zurückgesetzt und du musst neu beginnen den gleichen Code einzugeben. Wenn du dir ihn gemerkt hast geht es natürlich leichter.<br />
Mit jedem richtig eingegeben Code, wird die Codelänge vergrößert und die Zeit zum Herausfinden kürzer.</p>
<p><strong>TECHNOLOGIEN</strong></p>
<p>Verwendet habe ich Standard JS, die &#8220;normale&#8221; jQuery-Libary (Spiel-Logik, Animationen) und zwei jQueryUI Elemente (Progressbar, ModalDialog).</p>
<p><strong>WEBLINK</strong></p>
<p>Wers anspielen will oder sehen will wie weit er kommt (irgendwann läuft einem wohl die Zeit davon <img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> ):</p>
<p><a title="http://dm141554.students.fhstp.ac.at/mfg" href="http://dm141554.students.fhstp.ac.at/mfg" target="_blank">http://dm141554.students.fhstp.ac.at/mfg</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/initialprojekt-codeknacker/">Initialprojekt: codeKnacker</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
