<?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>Blogisticon &#187; Technologie</title>
	<atom:link href="http://blog.holisticon.de/category/technologie/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.holisticon.de</link>
	<description>Das Holisticon-Blog</description>
	<lastBuildDate>Fri, 18 May 2012 08:23:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Mac OS X &#8211; Tipps &amp; Tricks für Entwickler: Hidden Files</title>
		<link>http://blog.holisticon.de/2012/05/mac-os-tipps-tricks-fur-entwickler-hidden-files/</link>
		<comments>http://blog.holisticon.de/2012/05/mac-os-tipps-tricks-fur-entwickler-hidden-files/#comments</comments>
		<pubDate>Tue, 15 May 2012 08:24:04 +0000</pubDate>
		<dc:creator>Jo Ehm</dc:creator>
				<category><![CDATA[Rundumsichtig]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[OS X Development Tricks]]></category>
		<category><![CDATA[Show Hidden Files]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Versteckte Dateien anzeigen]]></category>

		<guid isPermaLink="false">http://blog.holisticon.de/?p=5389</guid>
		<description><![CDATA[Die Benutzerfreundlichkeit eines Mac ist unumstritten. Begibt man sich jedoch als Software-Entwickler auf OS X, kommt einem diese Benutzerfreundlichkeit u.U. zunächst ein wenig hinderlich vor, da man einige kleine Details vermisst, die man  z.B. von Windows her kennt (oder dort leicht einstellen kann). So zum Beispiel, dass im Finder per Default keine versteckten Dateien angezeigt [...]]]></description>
			<content:encoded><![CDATA[<p>Die Benutzerfreundlichkeit eines Mac ist unumstritten. Begibt man sich jedoch als Software-Entwickler auf OS X, kommt einem diese Benutzerfreundlichkeit u.U. zunächst ein wenig hinderlich vor, da man einige kleine Details vermisst, die man  z.B. von Windows her kennt (oder dort leicht einstellen kann). So zum Beispiel, dass im Finder per Default keine versteckten Dateien angezeigt werden oder dass man einen Ordner nicht direkt im Terminal öffnen kann. Diese und andere Kleinigkeiten lassen sich aber auch unter OS X recht leicht einrichten oder konfigurieren. Beginnen möchte ich diese Serie von Blog-Beiträgen zu rudimentären Tipps &amp; Tricks für den Entwicklungsalltag heute mit dem Thema versteckte Dateien:<span id="more-5389"></span></p>
<h3>Hidden Files</h3>
<p>Die komfortabelste Lösung, versteckte Dateien in Finder ein- und auszublenden ist, sich jeweils eine einfache Automator-Aktion zu schreiben. Hierzu einfach das Programm <em>Automator</em> starten, als Vorlage &#8220;Dienst&#8221; auswählen und eine neue Aktion &#8220;Shell-Skript ausführen&#8230;&#8221; wie folgt anlegen (click to enlarge):</p>
<p><a href="http://blog.holisticon.de/wp-content/uploads/2012/05/show_hidden_files.png"><img class="wp-image-5392 alignnone colorbox-5389" style="margin-top: 5px; margin-bottom: 15px;" src="http://blog.holisticon.de/wp-content/uploads/2012/05/show_hidden_files.png" alt="" width="643" height="197" /></a></p>
<p>Nun einfach &#8220;Speichern unter&#8230;&#8221;, einen sprechenden Namen vergeben unter dem die Aktion dann als Dienst auftauchen soll (z.B. &#8220;Show Hidden Files&#8221;) und fertig. Nach dem gleichen Verfahren eine zweite Aktion &#8220;Hide Hidden Files&#8221; erstellen, wobei die erste Zeile des Skripts dann entsprechend wie folgt lautet:</p>
<p><tt>defaults write com.apple.finder AppleShowAllFiles FALSE</tt></p>
<p>Gespeichert sind diese Automator-Aktionen unter <tt>~/Library/Services</tt> (nur für den Fall, dass man sie irgendwann mal wieder entfernen möchte). Aufrufen lassen sich diese Dienste jetzt über das Finder-Menü:</p>
<p><a href="http://blog.holisticon.de/wp-content/uploads/2012/05/hidden_files_usage.png"><img class="size-full wp-image-5408 alignnone colorbox-5389" style="margin-top: 5px; margin-bottom: 15px;" src="http://blog.holisticon.de/wp-content/uploads/2012/05/hidden_files_usage.png" alt="" width="580" height="207" /></a></p>
<p>Damit aber nicht genug: richtig komfortabel wird es erst, wenn wir diesen Diensten noch Tastaturkürzel zuweisen. Hierzu einfach wie oben zu sehen auf &#8220;Dienste-Einstellungen&#8230;&#8221; gehen und dort jeweils rechts neben dem gewünschten Dienst einmal doppelklicken (sodass das Eingabefeld erscheint) und dann die gewünschte Tastenkombination drücken &#8211; schon wieder fertig.</p>
<p><a href="http://blog.holisticon.de/wp-content/uploads/2012/05/services-shortcuts.png"><img class="alignnone size-full wp-image-5417 colorbox-5389" style="margin-top: 5px; margin-bottom: 15px;" src="http://blog.holisticon.de/wp-content/uploads/2012/05/services-shortcuts.png" alt="" width="594" height="238" /></a></p>
<p>Wem das Erstellen dieser Automationen noch zu aufwändig ist, der kann auch einfach die nachfolgende ZIP-Datei herunter laden, entpacken und die beiden enthaltenen Dateien einfach nach <tt>~/Library/Services</tt> kopieren <img src='http://blog.holisticon.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley colorbox-5389' /> </p>
<p><a href="http://blog.holisticon.de/wp-content/uploads/2012/05/hidden-files-services.zip">hidden-files-services.zip</a></p>
<p>Stay tuned&#8230;</p>
<div style="height:33px; padding-top:2px; padding-bottom:2px; clear:both;" class="zare366"><div style="float:left; width:90px; " class="zare366_google1"> 
				<g:plusone size="medium" href="http://blog.holisticon.de/2012/05/mac-os-tipps-tricks-fur-entwickler-hidden-files/" ></g:plusone>
			</div><div style="float:left; width:110px; padding-left:10px;" class="zare366_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="Mac OS X &#8211; Tipps &amp; Tricks für Entwickler: Hidden Files" data-url="http://blog.holisticon.de/2012/05/mac-os-tipps-tricks-fur-entwickler-hidden-files/">Tweet</a> 
			</div></div>
		<div style="display:none;"><a href="http://www.news365live.com">news and informations</a>&nbsp;<a href="http://news365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a><a href="http://worldnews365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a></div><div style="clear:both;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.holisticon.de/2012/05/mac-os-tipps-tricks-fur-entwickler-hidden-files/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Drittes Hamburg Web Performance Meetup</title>
		<link>http://blog.holisticon.de/2012/05/drittes-hamburg-web-performance-meetup-2/</link>
		<comments>http://blog.holisticon.de/2012/05/drittes-hamburg-web-performance-meetup-2/#comments</comments>
		<pubDate>Tue, 08 May 2012 08:13:30 +0000</pubDate>
		<dc:creator>Jan Weinschenker</dc:creator>
				<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Rundumsichtig]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[kundenzufriedenheit]]></category>
		<category><![CDATA[Metriken]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[webperf]]></category>

		<guid isPermaLink="false">http://blog.holisticon.de/?p=5323</guid>
		<description><![CDATA[Das dritte Hamburg Web Performance Meetup fand am 25. April in den Räumlichkeiten von Telefónica in der City Nord statt. Den fast vierzig Teilnehmern, die sich trotz eines zeitgleich laufenden, hochkarätigen Champions-League-Spiels nicht vor den Fernseher gesetzt hatten, wurden zwei interessante Vorträge geboten. Den Anfang machten Jan Vogel (DI UNTERNEHMER) und Uwe Beßle (Iteratec) mit [...]]]></description>
			<content:encoded><![CDATA[<p><img class="colorbox-5323"  style="margin-left: 1em;" src="http://photos1.meetupstatic.com/photos/event/6/3/1/c/highres_71725372.jpeg" alt="Web Performance HH" align="right" /></p>
<p>Das dritte <a title="Drittes Hamburg Web Performance Meetup bei meetup.com" href="http://www.meetup.com/Hamburg-Web-Performance-Group/events/57384682/" rel="external">Hamburg Web Performance Meetup</a> fand am 25. April in den Räumlichkeiten von Telefónica in der City Nord statt. Den fast vierzig Teilnehmern, die sich trotz eines zeitgleich laufenden, hochkarätigen Champions-League-Spiels nicht vor den Fernseher gesetzt hatten, wurden zwei interessante Vorträge geboten.</p>
<p>Den Anfang machten <a href="https://www.xing.com/profile/Jan_Vogel" target="_blank">Jan Vogel</a> (<a href="http://www.di-unternehmer.com/" target="_blank">DI UNTERNEHMER</a>) und <a href="https://www.xing.com/profile/Uwe_Bessle" target="_blank">Uwe Beßle</a> (<a href="http://iteratec.de/" target="_blank">Iteratec</a>) mit dem Thema &#8220;Optimierung der gefühlten Performance &#8211; Web Performance Management für Fortgeschrittene&#8221;. Die beiden präsentierten ihre Erfahrungen, die sie im Umfeld einer der weltweit größten eCommerce-Sites gemacht haben. Vorgestellt wurden u.a. eigene Metriken für Performance und Kundenzufriedenheit.</p>
<p>Im Rahmen des Projekts wurden End-User-Tests mit etwa 1.500 Probanden sowie automatisierte Tests mit dem Tool <a href="http://www.webpagetest.org" target="_blank">WebPagetest</a> (WPT) durchgeführt. Mit Best-Practise-Beispielen zu WPT und einem regen und ausführlichen Frage-und-Antwort-Teil endete dieser Vortrag.</p>
<p>Der zweite Teil des Abends bestritten <a href="https://www.xing.com/profile/Oliver_Ochs" target="_blank">Oliver Ochs</a> und <a href="https://www.xing.com/profile/Jan_Weinschenker" target="_blank">meine Wenigkeit</a> mit unserer Präsentation &#8220;Building Performance, ein Frontend-Build-Prozess&#8221;.</p>
<p>Wir haben einen auf Maven basierenden Build-Prozess vorgestellt, mit dem die Frontent-Komponente des <a href="http://dsl.o2online.de" target="_blank">DSL-Portals</a> von Telefónica O<sub>2</sub> erstellt wird. In mehreren Schritten sorgt dieser Build-Prozess automatisiert dafür, dass HTML, CSS, JavaScript und Bildelemente hinsichtlich der Web Performance optimiert werden. Dabei kommen unter anderem Werkzeuge wie OptiPng, Web Ressource Optimizer, JSLint, CSSLint und der Google Closure Optimizer zum Einsatz, die als Maven-Plugins ohne großen Aufwand in den Prozess integriert werden.</p>
<p>Der Abend endete mit einer Verlosung von Fachbüchern des Sponsors unseres Web Performance Meetups in Hamburg, dem <a href="http://www.oreilly.de/" rel="external">O&#8217;Reilly</a> Verlag.</p>
<p>Unser Vortrag zum Frontend-Build-Prozess ist bei SlideShare verfügbar:</p>
<ul>
<li>
<div style="margin-top: 1em;"><strong><a title="Building Performance - ein Frontend-Build-Prozess für Java mit Maven" href="http://www.slideshare.net/oliverochs/building-performance-ein-frontendbuildprozess-fr-java-mit-maven">Building Performance &#8211; ein Frontend-Build-Prozess für Java mit Maven</a></strong></div>
</li>
</ul>
<div style="height:33px; padding-top:2px; padding-bottom:2px; clear:both;" class="zare366"><div style="float:left; width:90px; " class="zare366_google1"> 
				<g:plusone size="medium" href="http://blog.holisticon.de/2012/05/drittes-hamburg-web-performance-meetup-2/" ></g:plusone>
			</div><div style="float:left; width:110px; padding-left:10px;" class="zare366_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="Drittes Hamburg Web Performance Meetup" data-url="http://blog.holisticon.de/2012/05/drittes-hamburg-web-performance-meetup-2/">Tweet</a> 
			</div></div>
		<div style="display:none;"><a href="http://www.news365live.com">news and informations</a>&nbsp;<a href="http://news365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a><a href="http://worldnews365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a></div><div style="clear:both;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.holisticon.de/2012/05/drittes-hamburg-web-performance-meetup-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Drittes Hamburg Web Performance Meetup</title>
		<link>http://blog.holisticon.de/2012/04/drittes-hamburg-web-performance-meetup/</link>
		<comments>http://blog.holisticon.de/2012/04/drittes-hamburg-web-performance-meetup/#comments</comments>
		<pubDate>Mon, 23 Apr 2012 12:28:14 +0000</pubDate>
		<dc:creator>Oliver Ochs</dc:creator>
				<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Technologie]]></category>

		<guid isPermaLink="false">http://blog.holisticon.de/?p=5040</guid>
		<description><![CDATA[Das Hamburg Web Performance Meetup geht in die dritte Runde. Wir treffen uns am kommenden Mittwoch um 19:00 Uhr bei Telefonica (Überseering 33a, Hamburg). Geplant sind wieder zwei Talks: Jan Vogel (DI UNTERNEHMER) und Uwe Beßle (Iteratec) &#8211; Optimierung der &#8220;gefühlten&#8221; Performance &#8211; Web Performance Management für Fortgeschrittene Anhand konkreter Erfahrungen im Umfeld einer der [...]]]></description>
			<content:encoded><![CDATA[<p>Das Hamburg Web Performance Meetup geht in die dritte Runde. Wir treffen uns am kommenden Mittwoch um 19:00 Uhr bei Telefonica (Überseering 33a, Hamburg).</p>
<p><img class="colorbox-5040"  src="http://photos1.meetupstatic.com/photos/event/6/3/1/c/highres_71725372.jpeg" alt="Hamburg Web Performance Group" /></p>
<p>Geplant sind wieder zwei Talks:</p>
<p><strong><a href="https://www.xing.com/profile/Jan_Vogel" target="_blank">Jan Vogel</a> (<a href="http://di-unternehmer.com/" target="_blank">DI UNTERNEHMER</a>) und <a href="https://www.xing.com/profile/Uwe_Bessle" target="_blank">Uwe Beßle</a> (<a href="http://iteratec.de/" target="_blank">Iteratec</a>) &#8211; Optimierung der &#8220;gefühlten&#8221; Performance &#8211; Web Performance Management für Fortgeschrittene</strong></p>
<p>Anhand konkreter Erfahrungen im Umfeld einer der größten eCommerce Sites wird vorgestellt, wie es gelingt, das subjektive Kundenempfinden zum Maßstab für das kontinuierliche Web-Performance-Management der komplexen Anwendungslandschaft einer großen eCommerce-Site zu machen. Dabei wird die Entwicklung und Definition von Ladezeit-Indikatoren und deren Messung mit dem Open Source-Tool WebPagetest beleuchtet. Es wird vorgestellt, wie die Auswirkung von Ladezeiten auf die Kundenzufriedenheit mittels einer Remote-Studie abgeleitet werden kann. Abgerundet wird der Vortrag mit einer Darstellung von Best-Practise-Beispielen bei der Arbeit mit WPT und WPT-Monitor.</p>
<p><strong><a href="https://www.xing.com/profile/Jan_Weinschenker" target="_blank">Jan Weinschenker</a> und <a href="https://www.xing.com/profile/Oliver_Ochs" target="_blank">Oliver Ochs</a> (<a href="http://holisticon.de/" target="_blank">Holisticon AG</a>) &#8211; Building Performance, ein Frontend-Build-Prozess</strong></p>
<p>In diesem Vortrag geht es um eine konkrete Website. Im ersten Teil des Vortrags stellen wir die wichtigsten Optimierungsmaßnahmen vor, die außerhalb eines Builds durchgeführt wurden. Für eine dauerhafte, nachhaltige Performance-Optimierung müssen die Maßnahmen automatisiert bzw. in den Build-Prozess integriert werden. Im zweiten Teil des Vortrags zeigen wir einen beispielhaften Build-Prozess für Java-Webanwendungen, der Teile der Optimierungsmaßnahmen durchführt. Andere Teile müssen durch eine geeignete Architektur sichergestellt werden, wofür wir ebenfalls Ideen liefern.</p>
<p>Das Event ist leider sowohl bei <a href="http://www.meetup.com/Hamburg-Web-Performance-Group/" target="_blank">Meetup.com</a> als auch in der <a href="https://www.xing.com/events/hamburg-web-performance-meetup-1005326" target="_blank">XING-Gruppe</a> bereits ausgebucht.</p>
<div style="height:33px; padding-top:2px; padding-bottom:2px; clear:both;" class="zare366"><div style="float:left; width:90px; " class="zare366_google1"> 
				<g:plusone size="medium" href="http://blog.holisticon.de/2012/04/drittes-hamburg-web-performance-meetup/" ></g:plusone>
			</div><div style="float:left; width:110px; padding-left:10px;" class="zare366_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="Drittes Hamburg Web Performance Meetup" data-url="http://blog.holisticon.de/2012/04/drittes-hamburg-web-performance-meetup/">Tweet</a> 
			</div></div>
		<div style="display:none;"><a href="http://www.news365live.com">news and informations</a>&nbsp;<a href="http://news365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a><a href="http://worldnews365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a></div><div style="clear:both;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.holisticon.de/2012/04/drittes-hamburg-web-performance-meetup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mobile Apps erstellen mit PhoneGap, Titanium &amp; Co.</title>
		<link>http://blog.holisticon.de/2012/04/mobile-apps-erstellen-mit-phonegap-titanium/</link>
		<comments>http://blog.holisticon.de/2012/04/mobile-apps-erstellen-mit-phonegap-titanium/#comments</comments>
		<pubDate>Tue, 17 Apr 2012 08:15:42 +0000</pubDate>
		<dc:creator>Jan Weinschenker</dc:creator>
				<category><![CDATA[Technologie]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[latenz]]></category>
		<category><![CDATA[phonegap]]></category>
		<category><![CDATA[Qualität]]></category>
		<category><![CDATA[titanium]]></category>
		<category><![CDATA[xcode]]></category>

		<guid isPermaLink="false">http://blog.holisticon.de/?p=4976</guid>
		<description><![CDATA[Die Zeiten, in denen man Anwendungen ausschließlich mit Oberflächen ausstattet, die über einen Monitor betrachtet und über Tastatur und Maus bedient werden, sind vorbei. Mittlerweile ist es keine Besonderheit mehr, als Endgerät auch Smartphones und Tablets berücksichtigen zu müssen. Diese Geräte sind heutzutage vollgepackt mit vielfältigen technischen Gimmicks: GPS-Modul, Beschleunigungssensor, Kontaktverwaltung, Kamera uws. gehören bei [...]]]></description>
			<content:encoded><![CDATA[<p>Die Zeiten, in denen man Anwendungen ausschließlich mit Oberflächen ausstattet, die über einen Monitor betrachtet und über Tastatur und Maus bedient werden, sind vorbei. Mittlerweile ist es keine Besonderheit mehr, als Endgerät auch Smartphones und Tablets berücksichtigen zu müssen.</p>
<p>Diese Geräte sind heutzutage vollgepackt mit vielfältigen technischen Gimmicks: GPS-Modul, Beschleunigungssensor, Kontaktverwaltung, Kamera uws. gehören bei iPhone, Android &amp; Co. zum Standard. Eine für mobile Geräte optimierte Webseite hat oft nur eingeschränkten Zugriff auf diese Funktionen.</p>
<p>Für den vollen Zugriff benötigt man eine App, die direkt auf dem mobilen Gerät installiert wird. Als Entwickler muss man sich dann vor seinen Rechner setzen und die App für das iPhone oder für Android entwickeln. Die entsprechenden Entwicklungswerkzeuge sind für sich genommen sehr komfortabel. Nur ist man zunächst einmal an eine der SmartPhone-Welten gebunden.</p>
<p>Das ist natürlich sehr unbefriedigend, wenn man einen großen Anwenderkreis ansprechen will.</p>
<p>Doch wie kommt man zu einer brauchbaren App, die auf vielen mobilen Geräten läuft, ohne sich allzu tief in die speziellen Niederungen der Android- oder iOS-Entwicklung hinab begeben zu müssen?</p>
<p><span id="more-4976"></span></p>
<h2>Hybride Apps</h2>
<p>Die Antwort auf diese Frage sind hybride Entwicklungs-Frameworks wie z.B. PhoneGap oder Titanium.</p>
<p>Diese Werkzeuge bieten eine einheitliche Programmiersprache, mit der Apps für unterschiedliche Zielplattformen entwickelt werden können.</p>
<p>Die Frameworks werden als Hybride bezeichnet, weil sie zum einen die Funktionalitäten nativer Apps anbieten können. Mit vollem Zugriff auf die Hardware können sie die Kamera, GPS-Modul usw. nutzen. Zum anderen werden sie jedoch nicht in der nativen iPhone- oder Android-Programmiersprache, also Objective-C oder Java geschrieben. Bei den genannten Frameworks arbeitet man mit JavaScript, CSS und HTML5.</p>
<p>Mit diesem Ansatz erreicht man recht schnell brauchbare Ergebnisse, ohne sich in die Besonderheiten einzelner mobiler Plattformen einarbeiten zu müssen.</p>
<p>Diesen Vorteil erkauft man sich jedoch damit, dass sich die App später nicht genau wie eine native App &#8220;anfühlt&#8221;.</p>
<p>Womit wir zu den Nachteilen hybrider Apps kommen.</p>
<h2>Nachteile</h2>
<p>PhoneGap bildet die echten Bedienelemente von iOS und Android lediglich nach. Es verwendet eine WebKit-Engine, die JavaScript, HTML und CSS auf den mobilen Geräten zur Laufzeit interpretiert. Im Vergleich zu kompilierten, nativen Apps hat man also einen Geschwindigkeits-Nachteil. Das macht sich direkt bei der Bedienung bemerkbar. Zwischen dem Antippen des Touch-Screens und der Reaktion der App gibt es meist merkbare Latenzen. Titanium verwendet zumindest native Bedienelemente, die Implementierung der Anwendungslogik erfolgt aber auch hier mittels JavaScript.</p>
<p>Dazu kommt, dass viele Programmierfehler bei interpretiertem Code erst zur Laufzeit, also während der Benutzung, zutage treten.</p>
<p>Der Build-Prozess gestaltet sich ebenfalls etwas komplizierter. Wird eine PhoneGap-App für Android entwickelt, kann dies mit der <abbr title="IDE: Integrated Development Environment - auch bekannt als Entwicklungsumgebung">IDE</abbr> Eclipse erfolgen. Eclipse erzeugt eine <abbr title="Android application package - Eine Datei, welche die App enthält und die auf dem Android-Gerät installiert wird.">APK</abbr>-Datei, die mit eine Android-SmartPhone direkt verwendet werden kann. Soll die gleiche App jetzt auf das iPhone gebracht werden, benötigt man entweder die dazu gehörige IDE Xcode oder einen kostenpflichtigen, Cloud-basierten Dienst von PhoneGap. Das gleiche gilt auch für Titanium.</p>
<p>Mehr Entwicklungsaufwand fällt an, wenn die App trotz der Verwendung eines hybriden Frameworks nativ aussehen soll &#8211; also, wenn sie auf einem iPhone genauso aussehen soll wie eine native iPhone-App und auf einem Android genau so wie eine native Android-App. In diesem Fall muss sie für jede unterstützte Plattform eine eigene Benutzeroberfläche zur Verfügung stellen.</p>
<h2>Auf die Software-Qualität kommt es an</h2>
<p>Diese Nachteile sind jedoch beherrschbar, wenn die Entwickler sorgfältig arbeiten und hinreichender Aufwand ins Qualitätsmanagement gesteckt wird. Dies ist gerade bei mobilen Apps besonders kritisch, da es über die Rating-Funktionen in den App-Stores und -Markets sehr schnell und für die ganze Welt sichtbar, gnadenloses Feedback der Anwender gibt.</p>
<p>Insofern gelten bei der App-Entwicklung dieselben Anforderungen an qualitativ hochwertige Software, die auch bei der Entwicklung von Nicht-App-Software schon immer gegolten haben.</p>
<h2>Weblinks</h2>
<ul>
<li><a href="http://www.phonegap.com" target="_blank">PhoneGap Webseite</a></li>
<li><a href="http://www.appcelerator.com/" target="_blank">Titanium Webseite</a></li>
</ul>
<div style="height:33px; padding-top:2px; padding-bottom:2px; clear:both;" class="zare366"><div style="float:left; width:90px; " class="zare366_google1"> 
				<g:plusone size="medium" href="http://blog.holisticon.de/2012/04/mobile-apps-erstellen-mit-phonegap-titanium/" ></g:plusone>
			</div><div style="float:left; width:110px; padding-left:10px;" class="zare366_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="Mobile Apps erstellen mit PhoneGap, Titanium &amp; Co." data-url="http://blog.holisticon.de/2012/04/mobile-apps-erstellen-mit-phonegap-titanium/">Tweet</a> 
			</div></div>
		<div style="display:none;"><a href="http://www.news365live.com">news and informations</a>&nbsp;<a href="http://news365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a><a href="http://worldnews365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a></div><div style="clear:both;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.holisticon.de/2012/04/mobile-apps-erstellen-mit-phonegap-titanium/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Das reine Vergnügen &#8211; RIA mit Vaadin und Guice</title>
		<link>http://blog.holisticon.de/2012/04/das-reine-vergnugen-ria-mit-vaadin-und-guice/</link>
		<comments>http://blog.holisticon.de/2012/04/das-reine-vergnugen-ria-mit-vaadin-und-guice/#comments</comments>
		<pubDate>Thu, 12 Apr 2012 08:18:39 +0000</pubDate>
		<dc:creator>Jan Galinski</dc:creator>
				<category><![CDATA[Technologie]]></category>
		<category><![CDATA[Dependency Injection]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Guice]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[ria]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[vaadin]]></category>

		<guid isPermaLink="false">http://blog.holisticon.de/?p=4883</guid>
		<description><![CDATA[Vorweg: Vaadin ist cool. Das auf dem Google Web Toolkit basierende Framework erlaubt die komponenten-orientierte Entwicklung hochqualitativer Rich Internet Applications. Dabei wird weitestgehend vom HTML/Servlet Code abstrahiert &#8211; das Programmiermodell erinnert somit stark an die vom Desktop gewohnte Entwicklung mit Swing oder RCP. JSP-Taglibs, XML-Wüsten und Platzhalter-Replacements sucht man vergebens, und man vermisst sie auch [...]]]></description>
			<content:encoded><![CDATA[<p>Vorweg: <a href="https://vaadin.com/home" target="_blank">Vaadin</a> ist cool. Das auf dem Google Web Toolkit basierende Framework erlaubt die komponenten-orientierte Entwicklung hochqualitativer Rich Internet Applications. Dabei wird weitestgehend vom HTML/Servlet Code abstrahiert &#8211; das Programmiermodell erinnert somit stark an die vom Desktop gewohnte Entwicklung mit Swing oder RCP. JSP-Taglibs, XML-Wüsten und Platzhalter-Replacements sucht man vergebens, und man vermisst sie auch nicht.</p>
<p>Eine typische Vaadin-Applikation (aus Book of Vaadin, <a href="https://vaadin.com/book/-/page/getting-started.first-project.html" target="_blank">Getting started</a>):</p>
<pre class="brush: java; title: ; notranslate">
public void init() {
   final Window mainWindow =
      new Window(&quot;Myproject Application&quot;);

   Label label = new Label(&quot;Hello Vaadin user&quot;);
   mainWindow.addComponent(label);

   mainWindow.addComponent(
      new Button(&quot;What is the time?&quot;,
         new Button.ClickListener() {
         public void buttonClick(ClickEvent event) {
            mainWindow.showNotification(
               &quot;The time is &quot; + new Date());
         }
      }));

 setMainWindow(mainWindow);
}
</pre>
<p>Sobald die Anwendung etwas größer wird, bekommt man jedoch zwangsläufig die klassischen Stand-Alone-Anwendungsprobleme: verschachtelte Komponenten, ausgelagerte Handler, implementierte Listener, gekapselte Service-Facaden &#8230; ein Haufen Instanzen will erzeugt und verwaltet werden. Nebenbei arbeitet man auf 3 Scopes (Application, Session, Request), bemüht sich um <em>Separation of Concern</em> und achtet auf maximale Testbarkeit.<br />
Das wird &#8220;per Hand&#8221; schnell unübersichtlich. Naheliegend ist, sich bei der Verwaltung der Instanzen helfen zu lassen. Wenn man das Pech hat, nicht auf JEE6 und CDI zurückgreifen zu können (konkret arbeiten wir nach wie vor auf JBoss 5.1), ist die Frage:</p>
<p><em>Wie?</em><br />
Oder anders formuliert: Spring oder Guice?</p>
<p><span id="more-4883"></span></p>
<p>Wir haben uns gegen Spring und für Guice entschieden. Ausschlaggebend waren die leichtgewichtige Integration (wenige Jars ins WEB-INF/lib &#8211; und fertig) und die Tatsache, dass wir ohnehin die Geschäftslogik mit EJB3 entwickeln, also für die diversen Spring-Erweiterungen in dem Bereich keinen Bedarf haben.</p>
<p>Die Kombination von Guice und Vaadin ist mit der guice-servlet-Extension eigentlich schnell gemacht. Der Teufel steckt dann natürlich wie so oft im Detail, weshalb wir mit diesem Blog etwas Licht ins Dunkel bringen wollen.</p>
<h3>Grundgerüst</h3>
<p>Wir verwenden Eclipse mit dem Vaadin Plugin und Maven. Ein neues Projekt lässt sich dann einfach mit &#8220;new Maven Project&#8221; und dem Archetype &#8220;vaadin-clean&#8221; erstellen. Wenn dieser noch nicht installiert ist, kann er wie folgt hinzugefügt werden:</p>
<p><img class="colorbox-4883"  src="http://blog.holisticon.de/wp-content/uploads/2012/03/screenshot-vaadin-archetype.png" alt="Vaadin Archetype" /></p>
<p>Der Archetype ist leider, was die Versionsnummern angeht, etwas veraltet. im Beispielprojekt, das am Ende des Artikels heruntergeladen werden kann, sind die Einstellungen für das aktuelle Vaadin 6.7.6 angepasst.</p>
<h3>Guicify</h3>
<p>Guice benötigt einen Bootstrapper, der den Injector erzeugt, welcher dann die Erzeugung weiterer Instanzen übernimmt. Es wäre zwar möglich, diesen in der init()-Methode der Vaadin-Applikation aufzubauen und anschließend die Members der Application-Klasse injizieren zu lassen. Wesentlich eleganter und praktikabler ist es jedoch, bereits die Applikation selbst und somit <strong>alle</strong> Instanzen von Anfang an von Guice verwalten zu lassen.</p>
<p>Dazu muss ein Guice-Filter in der <code>web.xml</code> registriert werden und auf einen <code>ServletContextListener</code> umgeleitet werden.</p>
<p><code>web.xml</code></p>
<pre class="brush: xml; title: ; notranslate">
&lt;display-name&gt;vaadin-guice&lt;/display-name&gt;

	&lt;context-param&gt;
		&lt;description&gt;Vaadin production mode&lt;/description&gt;
		&lt;param-name&gt;productionMode&lt;/param-name&gt;
		&lt;param-value&gt;false&lt;/param-value&gt;
	&lt;/context-param&gt;

	&lt;filter&gt;
		&lt;filter-name&gt;guice.filter&lt;/filter-name&gt;
		&lt;filter-class&gt;com.google.inject.servlet.GuiceFilter&lt;/filter-class&gt;
	&lt;/filter&gt;

	&lt;filter-mapping&gt;
		&lt;filter-name&gt;guice.filter&lt;/filter-name&gt;
		&lt;url-pattern&gt;/*&lt;/url-pattern&gt;
	&lt;/filter-mapping&gt;

	&lt;listener&gt;
		&lt;listener-class&gt;de.holisticon.blog.vaadin.configuration.ApplicationServletContextListener&lt;/listener-class&gt;
	&lt;/listener&gt;
</pre>
<p><code>ApplicationServletContextListener.java und ApplicationModule.java</code></p>
<pre class="brush: java; title: ; notranslate">
public class ApplicationServletContextListener extends GuiceServletContextListener {

    @Override
    protected Injector getInjector() {
        return Guice.createInjector(new ApplicationModule());
    }

}
public class ApplicationModule extends AbstractModule {
    private Properties properties = new Properties();
    public ApplicationModule() {
        properties.put(&quot;window.caption&quot;, &quot;Main Application&quot;);
        properties.put(&quot;label.text&quot;, &quot;Hello Vaadin user&quot;);
    }

    protected void configure() {
        install(new ServletModule() {
            protected void configureServlets() {
                serve(&quot;/*&quot;).with(ApplicationServlet.class);
                bind(Application.class).to(MainApplication.class).in(ServletScopes.SESSION);
            }
        });
        Names.bindProperties(binder(), properties);
    }

    @Provides
    @Named(&quot;MainWindow&quot;)
    public Window provideMainWindow(@Named(&quot;window.caption&quot;) String windowCaption) {
        return new Window(windowCaption); // liefert das MainWindow mit konfiguriertem Titel
    }
}
</pre>
<p>Nun wird jeder Zugriff auf &#8220;vaadin-guice/*&#8221; von Guice verwaltet und an eine Instanz der <code>MainApplication</code> geroutet. Die <code>MainApplication</code> liegt im Scope &#8220;Session&#8221;, jeder User bekommt also eine eigene Instanz erzeugt. Nun können wir die Beispiel-Anwendung auf Injektion umstellen:</p>
<p><code>MainApplication.java</code></p>
<pre class="brush: java; title: ; notranslate">
public class MainApplication extends Application {
    @Inject @Named(&quot;MainWindow&quot;)
    private Window mainWindow; // Window mit konfigurierter Caption

    @Inject @Named(&quot;label.text&quot;)
    private String labelText;

    @Inject
    private Provider&lt;Date&gt; date;

    @Override
    public void init() {
        setMainWindow(mainWindow);
        mainWindow.addComponent(new Label(labelText));

        mainWindow.addComponent(
                new Button(&quot;What is the time?&quot;,
                        new Button.ClickListener() {
                            public void buttonClick(ClickEvent event) {
                                mainWindow.showNotification(&quot;The time is &quot; + date.get());
                            }
                        }));
    }
}
</pre>
<p>Nach Start der Anwendung mit <code>mvn jetty:run</code> können wir das Ergebnis im Browser begutachten:</p>
<p><img class="colorbox-4883"  src="http://blog.holisticon.de/wp-content/uploads/2012/03/screenshot-vaadin-guice.png" alt="Screenshot Beispielanwendung vaadin-guice" /></p>
<p>Wird der Einsatz von <code>@Inject</code> auf allen verwendeten Komponenten und Handlern konsequent durchgezogen, kann mit einfachen Mitteln eine transparente, lose gekoppelte Rich Internet Application aufgebaut werden, bei der jede Instanz genau die Dependencies erhält, die sie benötigt.</p>
<h3>Fazit</h3>
<p>Vaadin und Guice kooperieren hervorragend. Das Injection-Verhalten ist transparent und programmatisch durch Erweiterung der Modules konfigurierbar.<br />
Zu beachten bleibt: Da die Applikation im <code>Session Scope</code> läuft, ist bei Zugriff auf Request-spezifische Daten (etwa die Request-Parameter) besondere Vorsicht angeraten: auf keinen Fall dürfen solche Elemente als Instanzfelder der Applikation gespeichert werden. <a href="http://code.google.com/p/google-guice/wiki/ProviderBindings">Guice-Provider</a> können jedoch eingesetzt werden, um diese Scope-Grenze zu umgehen.<br />
Im Gegensatz zu CDI werden keine Anforderungen an den Servlet-Container gestellt, so dass die Entwicklung leicht mit Tomcat oder Jetty erfolgen kann.<br />
Werden die (seit Guice 3.0 unterstützten) JSR330 Annotationen verwendet, ist sogar ein späterer Umzug in einen CDI bzw. Spring Container möglich.</p>
<p>Das komplette Maven-Beispielprojekt kann <a href="http://blog.holisticon.de/wp-content/uploads/2012/03/vaadin-guice.zip">hier</a> heruntergeladen werden</p>
<div style="height:33px; padding-top:2px; padding-bottom:2px; clear:both;" class="zare366"><div style="float:left; width:90px; " class="zare366_google1"> 
				<g:plusone size="medium" href="http://blog.holisticon.de/2012/04/das-reine-vergnugen-ria-mit-vaadin-und-guice/" ></g:plusone>
			</div><div style="float:left; width:110px; padding-left:10px;" class="zare366_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="Das reine Vergnügen &#8211; RIA mit Vaadin und Guice" data-url="http://blog.holisticon.de/2012/04/das-reine-vergnugen-ria-mit-vaadin-und-guice/">Tweet</a> 
			</div></div>
		<div style="display:none;"><a href="http://www.news365live.com">news and informations</a>&nbsp;<a href="http://news365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a><a href="http://worldnews365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a></div><div style="clear:both;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.holisticon.de/2012/04/das-reine-vergnugen-ria-mit-vaadin-und-guice/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MobileTech Conference 2012 &#8211; Tag 2</title>
		<link>http://blog.holisticon.de/2012/04/mobiletech-conference-2012-tag-2/</link>
		<comments>http://blog.holisticon.de/2012/04/mobiletech-conference-2012-tag-2/#comments</comments>
		<pubDate>Thu, 05 Apr 2012 08:15:47 +0000</pubDate>
		<dc:creator>Norman Erck</dc:creator>
				<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Rundumsichtig]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[App]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Social Media]]></category>
		<category><![CDATA[UX]]></category>

		<guid isPermaLink="false">http://blog.holisticon.de/?p=4880</guid>
		<description><![CDATA[Wie mein Kollege Oliver Ochs im Beitrag zum ersten Konferenz-Tag erwähnt hat, waren wir gemeinsam auf der MobileTech Conference 2012 in München und haben uns neuen Input rund um das Thema Mobile aus Sicht der Entwicklungs- und Marketingabteilungen abgeholt. Den ganzen zweiten Tag lang besuchten wir den Business-Track. Darüber, ob das an dem beeindruckenden Vortrag [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.holisticon.de/wp-content/uploads/2012/04/logo_MTC12.png"><img class="alignleft size-full wp-image-5002 colorbox-4880" title="logo_MTC12" src="http://blog.holisticon.de/wp-content/uploads/2012/04/logo_MTC12.png" alt="" width="180" height="180" /></a><br />
Wie mein Kollege <a title="Leitung Geschäftsfeld Architektur Olli Ochs" href="https://www.xing.com/profile/Oliver_Ochs">Oliver Ochs</a> im Beitrag zum ersten Konferenz-Tag erwähnt hat, waren wir gemeinsam auf der MobileTech Conference 2012 in München und haben uns neuen Input rund um das Thema Mobile aus Sicht der Entwicklungs- und Marketingabteilungen abgeholt.</p>
<p>Den ganzen zweiten Tag lang besuchten wir den Business-Track. Darüber, ob das an dem beeindruckenden Vortrag von Herrn Konjovic über die Paid-mobile-Content-Strategie von Axel Springer am Vortag lag, lässt sich streiten.<span id="more-4880"></span></p>
<h3>&#8220;Es ist ja nur eine App&#8221; – oder vielleicht doch nicht?</h3>
<p>Der zweite Tag startete für uns mit einem Vortrag von Dr. Ralf Carbon vom Fraunhofer Institut. Neben einem Ausblick in die unterschiedlichen Arten von Apps (Consumer / Business) stellte er die Konzepte zweier vom Fraunhofer Institut betreuten Mobile-Projekte vor.</p>
<p>Beeindruckend war der Nutzen, der im Bereich der Landwirtschaft durch verschiedene Apps für John Deere erzielt werden konnte. So gibt es Apps für die Wartung und den Service der Maschinen, eine App für den Landwirt, der auf seinem iPad die Task-Planung vornimmt und eine für den Arbeiter auf dem Feld, der durch eine iPhone-App diese Tasks bekommt und bei der Umsetzung, durch Standortermittlung (bin ich auf dem richtigen Feld?) etc. unterstützt wird. Hier fällt auf, dass für jeden individuellen Anwendungsfall eine eigenständige App gebaut wurde, die nur auf den Nutzen des jeweiligen Anwenders reduziert ist. Ergo kommt es bei Apps stets auf den Kontext an.</p>
<p>Ebenfalls spannend war der Exkurs zu Lufthansa Systems. Hier wurde eine App realisiert, die Piloten das Leben dahingehend erleichtert, dass sie ihre Karten nicht mehr in riesigen Aktenordnern in ihren Pilotenkoffern hinter sich herziehen und bei jeder Änderung neu in ihre Ordner einpflegen müssen. Eine App verwaltet dieses Kartenmaterial automatisch, stellt es dar und übernimmt auch die Aktualisierung des Kartenmaterials bei Änderungen.</p>
<p>Neben der Vorstellung der beiden realisierten Projekte wurde der Prozess namens &#8220;mConcAppt&#8221;, den das Fraunhofer Institut für die App-Entwicklung erstellt hat (und selbstverständlich auch jedem vorschlägt), vorgestellt.</p>
<p>Er soll helfen, eine Antwort auf die zentralen Fragen der App-Entwicklung zu finden.</p>
<ul>
<li>Welche Anforderungen habe ich an das Testen?</li>
<li>Welche an die User Experience?</li>
<li>Welche an das Variantenmanagement (Apps für spezifische Kontexte, verschiedene Plattformen)?</li>
<li>Gibt es ein Mobilitätspotential für den Workflow, den Geschäftsprozess, die Aufgaben etc?</li>
<li>Ist es die &#8220;richtige&#8221; App für den Score?</li>
<li>Ist das Backend für den mobilen Anwendungsfall geeignet?<br />
Interessant ist hier das erwähnte Verhältnis von 80 zu 20, wenn es um den Arbeitsaufwand von Backend-Entwicklung und Frontend-Entwicklung geht. Dieses Verhältnis können wir nur bestätigen.</li>
<li>Welche Architektur ist die richtige für meine App (Nativ, Hybrid oder Web)?</li>
<li>Welche Anforderung stelle ich an die Interaktion (UI, UX etc.)?</li>
</ul>
<p>Der &#8220;mConcAppt&#8221;-Prozess beginnt dabei mit einem eintägigen Workshop zur Anforderungserfassung mit Kunde, Anwender, Fachabteilung etc., um in den folgenden zwei bis drei Wochen ein komplettes Konzept für die App zu erarbeiten.</p>
<p>Sehr große Erfolge haben sie dabei mit einfachen Prototypen in Form von Bleistiftzeichnungen und Wireframetools wie <a title="Balsamiq" href="http://www.balsamiq.com/">Balsamiq</a> erzielt.</p>
<p>Klingt für uns alles sehr stark nach Wasserfall, auch wenn Herr Dr. Carbon erwähnte, dass es mehrere Zyklen in den einzelnen Schritten von &#8220;mConcAppt&#8221; gibt. Interessant wäre, wie sich das Ganze mit agilen Methoden in Einklang bringen ließe.</p>
<h3>Die Mobile-Plattform der Zukunft: Facebook</h3>
<p>Martin Szugat gab uns einen Einblick die App-Welt von Facebook und nannte dabei viele interessante Fakten zu Facebook.</p>
<ul>
<li>In den USA verbringen die Leute 16% ihrer Online-Zeit auf Facebook</li>
<li>57% der Smartphone User sind bei Facebook</li>
<li>47% der Zeit verbringen die Amerikaner mit Spiele- und 32% mit Soziale-Netzwerke-Apps</li>
<li>Als Nutzer zählt Facebook nur Nutzer, die innerhalb der letzten drei Tage online waren</li>
<li>7.000.000 Webseiten sind mit Facebook verbunden</li>
<li>Jeden Tag kommen 10.000 hinzu</li>
<li>20 Millionen Facebook-Apps werden pro Tag installiert</li>
</ul>
<p>All diese Fakten unterstreichen, dass über Facebook sehr viele Menschen erreicht werden können und dass Facebook sehr tief im Web &#8220;verankert&#8221; ist.</p>
<p>Ebenfalls erklärte er das neue Marketing-Buzzword &#8220;SoLoMo&#8221;. Die Leute wollen sich vernetzen (Social), wollen zeigen, wo sie sind bzw. sagen, was um sie herum los ist (Local) und wollen das auch noch alles mobil machen (Mobile). Als Beispiele, die &#8220;SoLoMo&#8221; sehr gut umsetzen, nannte er <a title="Glancee" href="http://www.glancee.com/">Glancee</a> und <a title="Badoo" href="http://badoo.com/de/">Badoo</a>. Einen Dienst, der eine &#8220;neue Ebene&#8221; in Facebook einführt, indem er Leute mit gleichen Interessen zusammenführt und eine etwas andere Dating-Plattform. Gemeinsam haben beide, dass sie in Verbindung mit Facebook extrem geringe <a title="Customer Acquisition Costs" href="http://www.tellja.de/empfehlungsmarketing-glossar/customer-acquisition-cost.html">Customer Acquisition Costs</a> haben.</p>
<p>Nach einem Exkurs ins Marketing wurden die Technik von Facebook Apps und die Zukunft von Facebook thematisiert.</p>
<p>Facebook Apps könnnen bei Facebook einfach via iFrame eingebunden werden, d.h., der App-Anbieter muss sich selbst um das Hosting etc. kümmern. Jeder Nutzer muss die Daten, die eine App nutzen darf, explizit freigeben, es macht also den Eindruck, als ob ordentlich mit den Daten umgegangen wird.</p>
<p>Werden Apps für mobile Endgeräte erstellt, so können diese via HTML5 oder Nativ realisiert werden. Als Vorteil von HTML5 wurde erwähnt, dass eine APP nur einmal geschrieben werden muss und so für Desktop und für Mobile eingesetzt werden kann. Vorteilhaft ist auch, dass der Nutzer seine Daten nur einmal freigeben muss.</p>
<p>Interessant ist, dass Facebook die Anforderung &#8220;Social by Design&#8221; an Apps stellt, es Kampagnen-Apps somit schwer haben.</p>
<p>Am Ende gab Herr Szugat noch einen Ausblick in zukünftige, neue Features von Facebook. Da wären der Open Graph, welcher den App Entwicklern ermöglicht, einen Nutzer mit einer Aktion zu einem Objekt in Beziehung zu setzen (z.B. Frau Wunderlich hört Little Dragon), da ein &#8220;Like&#8221; nicht mehr aussagekräftig genug für gezielte Marketingaktionen ist. Auch auf die neue Online-Währung <em>Credits</em>, die Facebook etablieren möchte, wurde eingegangen. Auch hier ist interessant, dass, wann immer bei Facebook gezahlt werden soll, auch diese Credits als Zahlungsvariante angegeben werden müssen. Dabei verdient Facebook ganz nebenbei 30% mit.</p>
<p>Facebook stellt folglich eine echte Alternative zu App Stores bzw. zu einer eigenen mobilen Webseite dar, da viele Nutzer erreicht und auf mehreren Kanälen z.B. durch nur eine HTML5-App angesprochen werden können. Wenn <em>Facebook Credits</em> von den Nutzern angenommen wird, gibt es zusätzlich eine neue Internet-Währung.</p>
<h3>Werbung auf mobilen Plattformen &#8211; mehr Relevanz für nachhaltig erfolgreiche Geschäftsmodelle</h3>
<p>Herr Markus Breuer startete mit der Aussage &#8220;advertising sucks&#8221; und variierte diese Aussage noch zu &#8220;too much advertising sucks&#8221;, &#8220;stupid advertising sucks&#8221; und &#8220;irrelevant advertising sucks&#8221;.</p>
<p>Er ging auf eine Statistik ein, die wir auf der Konferenz schon mehrfach gesehen hatten: Ab 2014 werden mehr mobile Endgeräte als &#8220;klassische&#8221; Rechner genutzt werden. Diese Zahl ist umso bedeutender, wenn man bedenkt, dass Apps und mobile Webseiten derzeit nahezu werbefrei sind. &#8220;Mobile &#8211; It&#8217;s a wonderful world?&#8221; Wir als Nutzer würden selbstverständlich sagen: ja, aber &#8220;kostenfreier&#8221; Content wird in der Regel durch Werbung finanziert. Die schöne neue Welt wird folglich leider nicht so bleiben.</p>
<p>Nach einem Exkurs, dass sich mit Android schwerer Geld verdienen lässt als mit iOS (3% Paid Apps vs. 17%), stellte er das Werbekonzept vor, das <a title="nugg.ad" href="http://www.nugg.ad/">nugg.ad</a> anbietet.</p>
<p>Um das &#8220;sucks&#8221; in &#8220;advertising sucks&#8221; zu entkräften, müsse Werbung effektiv gemacht werden. Dies soll durch Targeting erreicht werden. Das Verhalten des Nutzers wird durch Cookies und andere Technologien, &#8220;die jeder Entwickler kennt&#8221;, beobachtet und analysiert; ab und zu werden Nutzer zusätzlich durch Umfragen um weitere Informationen gebeten. Ziel ist es, dem Nutzer Werbung zu zeigen, die zu Ihm passt bzw. die die Marketingabteilungen als zur Zielgruppe passend definieren.</p>
<p>Neue Herausforderungen zum Thema Mobil sind jetzt natürlich, wie dieses Beobachten des Nutzers auf mobilen Endgeräten geschehen kann. Konkrete Lösungsansätze wurde aber leider noch nicht vorgestellt. Es bleibt spannend.</p>
<h3>UX-Webdesign für Tablets. Eine Anleitung</h3>
<p>Christian Kuhn legte den Teilnehmern User Experience durch Unterstützung zahlreicher Werbevideos nahe. Nach der Viedeoshow gab er Hinweise auf Dokumente, Tools und Links, die helfen, um eine User Experience, die diesen Namen auch verdient, umzusetzen:</p>
<ul>
<li><a href="http://tablet-screendesign.info/">Tablet-screendesign.info/</a> &#8211; eine Liste aller gängigen Tablets mit Auflösung, Betriebssystem etc.</li>
<li><a title="iMockups" href="http://www.endloop.ca/imockups/">iMockups</a> &#8211; eine Software, um Wireframes für Apps und Webseiten zu erstellen</li>
<li>Die User Experience Design Guidelines von <a title="User Experience Design Guidelines for Windows Phone" href="http://msdn.microsoft.com/en-us/library/hh202915(v=vs.92).aspx">Windows Phone 7</a> und <a title="iOS User Experience Guidelines" href="http://developer.apple.com/library/ios/#DOCUMENTATION/UserExperience/Conceptual/MobileHIG/UEBestPractices/UEBestPractices.html">iOS</a></li>
<li><a title="Onswipe" href="http://www.onswipe.com/">Onswipe</a> &#8211; ein Tool zur Realisierung der Tablet-Unterstützung von Webinhalten</li>
<li><a title="Loadtimer" href="http://loadtimer.org/">Loadtimer</a> &#8211; für das Testen der Ladezeiten auf mobilen Endgeräten</li>
<li><a title="aside" href="http://asidemag.com/">Aside</a> &#8211; ein in HTML5 umgesetztes Magazin als gelungenes Beispiel</li>
</ul>
<p>Für das Gelingen von User Experience in der Praxis gab es folgende Tipps:</p>
<ul>
<li>unterschiedliche mobile Betriebsysteme unterstützen unterschiedliche Anzahl an Gesten &#8211; es gibt dafür leider noch keinen Standard</li>
<li>UX der Hardware, des Betriebsystems und der Webseite sind von Bedeutung</li>
<li>Um Bereitstellung der Schriftart kümmern &#8211; einige mobile Betriebsysteme nehmen sonst eigene</li>
<li>Informationen weglassen &#8211; Tablet first</li>
<li>1 cm Platz um Navigationselemente</li>
<li>Responsive Design &#8211; evtl. jedoch nicht für mobile Version</li>
<li>Einsatz Adaptive Images</li>
<li>Minimalistisches &amp; helles Design</li>
</ul>
<h3>Interactive TV &#8211; mit HTML5 auf den 2nd Screen</h3>
<p>Andreas Lohmann gab uns einen Einblick in die Welt des interaktiven TVs. Neben den Anfängen von Interactive TV durch Text, Home Shopping und der Gameshow <em>Hugo</em> zeigte er uns, wohin die Reise geht. Zu 2nd Screens, die wir in Form von Smartphones oder Tablets in Zukunft nutzen können, um uns am Geschehen im TV zu beteiligen.</p>
<h2>Fazit</h2>
<p>Betrachte ich den zweiten Tag der Konferenz in Summe, nehme ich mit, dass es bei Apps stets auf den <em>Kontext</em> ankommt, das Thema Facebook Apps in Zukunft auch für uns spannend wird, &#8220;advertising sucks&#8221;, auf Tablets <em>Content + Context = King</em> gilt und beim interaktiven Fernsehen <em>Context King</em> ist.</p>
<p>Selbstverständlich bedanken wir uns bei den Sprechern, Ausstellern und Organisatoren für eine gelungene Konferenz.</p>
<div style="height:33px; padding-top:2px; padding-bottom:2px; clear:both;" class="zare366"><div style="float:left; width:90px; " class="zare366_google1"> 
				<g:plusone size="medium" href="http://blog.holisticon.de/2012/04/mobiletech-conference-2012-tag-2/" ></g:plusone>
			</div><div style="float:left; width:110px; padding-left:10px;" class="zare366_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="MobileTech Conference 2012 &#8211; Tag 2" data-url="http://blog.holisticon.de/2012/04/mobiletech-conference-2012-tag-2/">Tweet</a> 
			</div></div>
		<div style="display:none;"><a href="http://www.news365live.com">news and informations</a>&nbsp;<a href="http://news365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a><a href="http://worldnews365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a></div><div style="clear:both;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.holisticon.de/2012/04/mobiletech-conference-2012-tag-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MobileTech Conference 2012 &#8211; Tag 1</title>
		<link>http://blog.holisticon.de/2012/04/mobiletech-conference-2012-tag-1/</link>
		<comments>http://blog.holisticon.de/2012/04/mobiletech-conference-2012-tag-1/#comments</comments>
		<pubDate>Tue, 03 Apr 2012 08:11:10 +0000</pubDate>
		<dc:creator>Oliver Ochs</dc:creator>
				<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Rundumsichtig]]></category>
		<category><![CDATA[Technologie]]></category>

		<guid isPermaLink="false">http://blog.holisticon.de/?p=4911</guid>
		<description><![CDATA[Ich habe mit meinem Kollegen Norman Erck die MobileTech Conference 2012 in München besucht. Wir haben die Eindrücke, die wir auf der zweitägigen Messe gesammelt haben, in zwei Blog-Beiträgen zusammengetragen. Dies hier sind die Impressionen der verschiedenen Vorträges und Präsentationen des ersten Tages. Die Konferenz wurde durch Sebastian Meyen vom Software&#38;Support-Verlag eröffnet. Er übergab die Session [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;"><a href="https://www.xing.com/profile/Oliver_Ochs">Ich</a> habe mit meinem Kollegen <a href="https://www.xing.com/profile/Norman_Erck">Norman Erck</a> die <a href="http://mobiletechcon.de/2012spring/">MobileTech Conference 2012</a> in München besucht. Wir haben die Eindrücke, die wir auf der zweitägigen Messe gesammelt haben, in zwei Blog-Beiträgen zusammengetragen. Dies hier sind die Impressionen der verschiedenen Vorträges und Präsentationen des ersten Tages.</p>
<div id="attachment_4915" class="wp-caption alignnone" style="width: 310px"><a href="http://blog.holisticon.de/wp-content/uploads/2012/03/2012-03-27-09.45.12.jpg"><img class="size-medium wp-image-4915 colorbox-4911" src="http://blog.holisticon.de/wp-content/uploads/2012/03/2012-03-27-09.45.12-300x224.jpg" alt="Die Eröffnung der MobileTechCon 2012" width="300" height="224" /></a><p class="wp-caption-text">Die Eröffnung der MobileTechCon 2012</p></div>
<p><span id="more-4911"></span></p>
<p style="text-align: left;">Die Konferenz wurde durch <a href="https://www.xing.com/profile/Sebastian_Meyen">Sebastian Meyen</a> vom <a href="http://sandsmedia.com/">Software&amp;Support-Verlag</a> eröffnet. Er übergab die Session an <a href="http://www.nunatak.com/company/founding-partners/">Maks Giordano</a> von <a href="http://www.nunatak.com/">Nunatak</a>. Wer vom Design mobiler Applikationen spricht, meint dabei meist das Design von grafischen Oberflächen. Dass Audio genauso wichtig sein kann, liegt schon in der Historie der Telekommunikation begründet. Mobile Anwendungen laufen auf modernen Telefonen. Telefone wurden erfunden, um Sprache zu übertragen.</p>
<p style="text-align: left;">Manfred Lutzky von <a href="http://www.iis.fraunhofer.de/">Fraunhofer IIS</a> stellte den <a href="http://www.iis.fraunhofer.de/bf/amm/produkte/audiocodec/audiocodecs/aaceld/">AAC-ELD-Codec</a> vor. Dieser Codec ist ein Full HD Voice-Codec, der heute schon in <a href="http://www.apple.com/de/mac/facetime/">Apple Facetime</a> verwendet wird und in iOS 5 auch Entwicklern von Apps zur Verfügung steht. Der AAC-ELD-Codec ähnelt dem AAC-Codec, ist aber auf geringe Verzögerungen optimiert, was wichtig für die Real-Time-Kommunikation ist.</p>
<p style="text-align: left;"><a href="https://www.xing.com/profile/Philipp_Eibach">Philipp Eibach</a> stellte sein neues Startup <a href="http://wahwah.fm/">wahwah.fm</a> vor. Eibach war schon an der Gründung von <a href="http://www.lastfm.de/home">last.fm</a> beteiligt und ist schon lange im Bereich Social Music unterwegs. Auf dem Smartphone hört jeder Musik für sich allein. Das Ziel von wahwah.fm ist, dass Musik wieder gemeinsam und zusammen gehört wird. So lässt sich Musik von Bekannten und Unbekannten entdecken. In wahwah.fm kann jeder Nutzer mit seiner Playlist auf Sendung gehen. Jeder Nutzer ist damit ein eigener, kleiner Radiosender. Andere Nutzer können sich in diese Sendung einklinken und mithören. Hörer einer laufenden Sendung können über Chats etc. interagieren. Die Location eines Senders lässt sich bei der Suche nach Sendern berücksichtigen. wahwah.fm ist eine prima Möglichkeit, Musik neu zu entdecken.</p>
<p style="text-align: left;"><a href="https://twitter.com/#!/byzo">Michael Breidenbrücker</a> von <a href="http://blog.rjdj.me/pages/contact">Reality Jockey Ltd.</a> zeigte <a href="http://rjdj.me/">RjDj</a>. RjDj lässt einen Nutzer selbst Musik erschaffen. Dabei verwendet RjDj nicht ein klassisches User Interface, sondern bezieht das komplette Sensor-Netzwerk des Smartphones ein. Musik wird also durch die Location, die Bewegung des Nutzers und sein Umfeld erschaffen. Der Nutzer taucht so in eine audiovisuelle Umgebung ein, in der die Intensität der Immersion sehr hoch ist. Auf Basis von RjDj wurden bereits weitere Apps entwickelt &#8211; wie die Audio-App zum Film <a href="http://www.imdb.de/title/tt1375666/">Inception</a>, die in Zusammenarbeit mit dem Soundtrack-Komponisten <a href="http://www.imdb.de/name/nm0001877/">Hans Zimmer</a> und dem Regisseur <a href="http://www.imdb.de/name/nm0634240/">Christopher Nolan</a> entstanden sind.</p>
<p style="text-align: left;"><a href="http://mobile-knowledge.de/referentin.html">Anika Brinkmann</a>, die als Kommunikationsdesigner <a href="http://Mobile-Knowledge.de">Mobile-Knowledge.de</a> verantwortet, eröffnete den Mobile Web-Track. Sie gab einen allgemeinen Überblick über die Themen des Tracks: Was bedeutet „Always on“? Hat always online nur gute oder auch unangenehme Seiten wie die allzeitige Bereitschaft von Arbeitnehmern, die mit modernen Kommunikationsendgeräten ausgestattet werden? Ist „Always on“ nur ein Versprechen oder schon heute Realität? Gibt es immer noch die Schere zwischen Stadt und Land, was die Netzabdeckung von UMTS und LTE angeht? Der Footprint (die Größe) der Seiten wächst im Moment noch stärker als die verfügbare mobile Bandbreite. Was nutzt die Cloud, wenn gerade keine Verbindung zum Internet hergestellt werden kann? Wie muss mit Nutzerdaten umgegangen werden &#8211; besonders im Spannungsfeld zwischen den Wünschen des Marketings und den Anforderungen des Datenschutzes? Wie befreie ich Daten aus Datensilos wie SAP oder gängigen CRM-Systemen? Content (sprich: Daten) muss in unterschiedlichen Kontexten unterschiedlich genutzt werden können. Daher muss er in offenen Formaten (kein Flash) und in unterschiedlichen Ausprägungen (z.B. auch in hoher Auflösung für Retina-Displays) vorliegen, um genutzt werden zu können. Um all diese Fragen zu beantworten, sollte zunächst eine Strategie erarbeitet werden, aus der wiederum Konzepte entwickelt werden können. Content sollte sowohl für’s Web als auch für mobile Anwendungen verwendet werden können. Dabei sollte man auf offene, zukunftssichere Plattformen statt auf proprietäre Technologien setzen. Wir sind hier und jetzt dabei, ein neues Level der Kommunikation zu erreichen. Zu den Technologien, mit dem dies umgesetzt werden wird, gehören sicherlich HTML5 und CSS3.</p>
<p style="text-align: left;"><a href="https://www.xing.com/profile/Ulrich_Schmidt3">Ulrich Schmidt</a> von <a href="http://www.sevenval.com/">sevenval</a> zeigte die Offlinemöglichkeiten von HTML5-Webapplikationen. Der Grund, warum man überhaupt Offline-fähige Applikationen braucht, ist die unvollständige Netzabdeckung. Gerade wenn man beispielsweise in der Bahn unterwegs oder im Ausland-Urlaub ist, dann hat man oft kein Netz. Offline zu sein ist ein temporäres Problem, das durch HTML5 gelöst werden kann. Konzeptionell ist zwischen Daten und Funktionen zu trennen: Entweder man kann nur Daten oder nur Funktionen offline vorhalten. Oder man kann eine komplett Offline-fähige Webapplikation erstellen. Technologien für ein „Aktives Offline“ für Daten sind Local Storage, das als Cookie-Ersatz in allen Browsern läuft, WebSQL, das inzwischen deprecated ist aber zumindest auf iOS und Android zur Verfügung steht, und IndexDB, die in neueren Browsern (allerdings noch nicht in mobilen Browsern) als Weiterentwicklung von Local Storage und WebSQL angesehen werden kann. Als Bleeding Edge kann die FileSystem API angesehen werden, die ab Chrome 13 einen direkten Zugriff aufs Filesystem zur Ablage von Binärdaten erlaubt. „Passives Offline“ für Funktionalität (JavaScript) und Ressourcen (HTML, CSS, Bilder) bietet der Application Cache. Die Herausforderung bei der Verwendung des Application Caches ist es, diesen „aktuell“ zu halten und das Update-Verhalten sinnvoll zu implementieren. Der Application Cache schlägt HTTP-Header (außer beim Firefox). Die Schritte zur Erstellung einer Offline-fähigen Webapplikation sind laut Schmidt zuerst das Erstellen von Layout und Struktur (analog zu einer normalen Webapplikation), danach das Einführen von Local Storage zur Speicherung der Daten und anschließend die Verwendung des Application Caches zur Speicherung des bereits erstellten Layouts und der Struktur. Der Vortrag schloss mit Empfehlungen aus der Praxis zum Umgehen von Fallstricken.</p>
<p style="text-align: left;"><a href="https://www.xing.com/profile/Sven_Guenther6">Sven Günther</a> von <a href="http://www.it-agile.de/">it-agile</a> stellte die API des Zeitungskiosks in iOS 5 vor. Zeitschriften-Apps lassen sich mit NewsstandKit implementieren. Dieses bietet Features wie Push Notificiation und Background Downloads. Außerdem lässt sich programmatisch das Programm-Icon verändern, so dass das Cover der aktuellen Ausgabe als Icon verwendet werden kann. Payments lassen sich über das StoreKit abwickeln. Zur Anzeige von Content sind WebViews ungeeignet, da sich mit WebViews nur schwer die Anmutung einer Zeitung oder eines Magazins nachahmen lässt. Besser geeignet dazu sind CoreText und der UIPageViewController.</p>
<p style="text-align: left;"><a href="https://www.xing.com/profile/Torsten_Drees">Torsten Drees</a> präsentierte die MEAP (Mobile Enterprise Application Plattform), die mit einer Multi-Channel-Architektur die Herausforderung aktueller Enterprise Mobility Trends lösen soll. Eine Implementierung der MEAP ist die Magic Integration Plattform von <a href="http://www.magicsoftware.com/">Magic Software</a>. Diese Präsentation kann als reiner Marketing-Vortrag bewertet werden.</p>
<p style="text-align: left;"><a href="https://www.xing.com/profile/Georg_Konjovic">Georg Konjovic</a>, der als Director Premium Content die Konzern-weite Paid Content-Stratgie bei <a href="http://www.axelspringer.de/">Axel Springer</a> verantwortet, präsentierte die Ziele des Verlags. ASV sieht sinkende Print-Reichweiten nicht als Gefahr, sondern als neue Chance für den Qualitätsjournalismus. Die Paid Content-Stragie vom Axel Springer Verlag äußert sich in ca. 70 Apps (teilweise HD-Apps für das iPad), der Plattform iKiosk (ePapers im Portable Document Format, der iKiosk steht für andere Verlagshäuser offen), einem News-Aggregator (myEdition), der sich zurzeit in einer Closed Beta befindet, und zahlreichen News-Sites. Die größte Herausforderung ist die Schaffung neuer Abo-Modelle bzw. die Migration der Nutzer von kostenlosen Web-Diensten zu Nutzern kostenpflichtiger Dienste. Anders als in den USA entwickelt sich der Markt für Qualitätsjournalismus in Deutschland positiv. Vor allem Nutzer des iPads haben eine hohe Zahlungsbereitschaft. Alle zukünftigen Angebote bei Axels Springer sollen ein Preisschild bzw. einen Abo-Preis haben.</p>
<p style="text-align: left;"><a href="http://www.linkedin.com/pub/rosemarie-wirthmueller/7/10b/250">Rosemarie Wirtsmüller</a> von <a href="http://www.antennainternational.com/">Antenna International</a> zeige Apps für Museumsbesucher. Diese Apps sind viel mehr als reine eGuides. Sie informieren den Nutzer schon vor dem Besuch des Museums (Pre-Visit-Kontakt) und unterstützen in bei der Nachbereitung (Post-Visit-Kontakt). Dies äußert sich auch in den Download-Zahlen. Diese Apps werden sogar von Nutzern verwendet, die gar nicht das Museum besuchen, sondern sich mit der App über das Thema einer Ausstellung selbst lange nach der eigentlichen Ausstellung informieren möchen.</p>
<div style="height:33px; padding-top:2px; padding-bottom:2px; clear:both;" class="zare366"><div style="float:left; width:90px; " class="zare366_google1"> 
				<g:plusone size="medium" href="http://blog.holisticon.de/2012/04/mobiletech-conference-2012-tag-1/" ></g:plusone>
			</div><div style="float:left; width:110px; padding-left:10px;" class="zare366_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="MobileTech Conference 2012 &#8211; Tag 1" data-url="http://blog.holisticon.de/2012/04/mobiletech-conference-2012-tag-1/">Tweet</a> 
			</div></div>
		<div style="display:none;"><a href="http://www.news365live.com">news and informations</a>&nbsp;<a href="http://news365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a><a href="http://worldnews365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a></div><div style="clear:both;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.holisticon.de/2012/04/mobiletech-conference-2012-tag-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Auch Prozesse haben ihre Last zu tragen</title>
		<link>http://blog.holisticon.de/2012/03/auch-prozesse-haben-ihre-zu-tragen/</link>
		<comments>http://blog.holisticon.de/2012/03/auch-prozesse-haben-ihre-zu-tragen/#comments</comments>
		<pubDate>Mon, 26 Mar 2012 08:10:42 +0000</pubDate>
		<dc:creator>Stefan Zilske</dc:creator>
				<category><![CDATA[Architektur]]></category>
		<category><![CDATA[BPM/SOA]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[BPM]]></category>
		<category><![CDATA[Payload]]></category>
		<category><![CDATA[Prozess]]></category>
		<category><![CDATA[SOA]]></category>

		<guid isPermaLink="false">http://blog.holisticon.de/?p=4838</guid>
		<description><![CDATA[Wenn Sie sich mit der Automatisierung von Prozessen in einer Business Process Engine (BPE) beschäftigen, stehen oder standen Sie vielleicht auch schon vor der Frage, welche Daten Sie als Payload durch den Prozess schleusen. Dass diese Frage alles andere als trivial und doch manchmal ganz leicht zu beantworten ist, haben wir kürzlich im Projekt erfahren. [...]]]></description>
			<content:encoded><![CDATA[<p>Wenn Sie sich mit der Automatisierung von Prozessen in einer Business Process Engine (BPE) beschäftigen, stehen oder standen Sie vielleicht auch schon vor der Frage, welche Daten Sie als Payload durch den Prozess schleusen.</p>
<p>Dass diese Frage alles andere als trivial und doch manchmal ganz leicht zu beantworten ist, haben wir kürzlich im Projekt erfahren.</p>
<p><span id="more-4838"></span></p>
<p>Als Payload (engl. für „Nutzlast“) bezeichnet man üblicherweise die Daten, die in einem Prozess von Aktivität zu Aktivität transportiert werden. In vielen Fällen ist die Payload eine XML-Struktur, die den Transport beliebiger Daten zulässt. Eine Aktivität nimmt die Payload, führt darauf eine Operation aus (dies kann alles sein: von einer lokalen XSL-Transformation bis zum Aufruf eines Webservices) und schreibt das Ergebnis zurück in die Payload, worauf die nächste Aktivität dann ihrerseits operiert.</p>
<h2>Extrem 1: Payload mit IDs</h2>
<p>In unserem Projekt ist die BPE, in unserem Fall die <a title="inubit Suite" href="http://www.inubit.com/inubit-suite.html" target="_blank">inubit Suite</a>, aufgesetzt auf einer serviceorientierten, mit EJB3 realisierten Architektur, die in einem JBoss Application Server läuft. Geschäftslogik findet nur in der Business Service-Schicht statt, die BPE übernimmt ausschließlich die Prozesssteuerung und orchestriert im Wesentlichen die Business Services, die sie über Webservices aufruft. Die Tatsache, dass die zugrunde liegende SOA in Hinblick auf ihre Schnittstellen sehr homogen ist, hat dazu geführt, dass die Prozesse mit einer sehr schlanken Payload auskommen. Wir schleusen in den meisten Fällen nur die IDs von Fachobjekten durch den Prozess, die dann an die Services gereicht werden.</p>
<p>Dieses Vorgehen stellt gewisse Anforderungen an die Business-Service-Schicht. Diese muss nämlich alle Daten, die sie benötigt, anhand der IDs, die sie vom Prozess bekommt, über Domain Services aus der Datenbank beschaffen und die Änderungen nach der Verarbeitung über Domain Services auch wieder persistieren.</p>
<h2>Extrem 2: Payload mit Fachobjekten</h2>
<p>Das andere Extrem ist es, komplette Fachobjekte am Beginn des Prozesses einmal über einen Service in den Prozess zu laden und dann in der Payload mitzuführen. Die Objekte werden dann an die Services gereicht, die dann nur noch die Änderungen durchführen und das manipulierte Objekt an den Prozess zurückgeben müssen. Der Prozess muss dann an geeigneter Stelle die Objekte persistieren. In einer heterogenen Welt könnte der Prozess so auch Schnittstellen bedienen, die unterschiedliche Strukturen erwarten, indem die Fachobjekte ggf. in die jeweilige Zielstruktur gemapped werden.</p>
<p>Auf der Service-Schicht würde dieses Vorgehen einerseits Datenbankzugriffe, andererseits remote calls auf die Domain Service-Schicht sparen.</p>
<h2>And the winner is…?</h2>
<p>Wir haben kürzlich beide Varianten auf ihr Laufzeitverhalten untersucht. Das Ergebnis war eindeutig: Die Ersparnis an Datenbankzugriffen und remote calls wird durch die Verwaltung der Payload in der BPE, bei der große XML-Strukturen häufig in das Filesystem geschrieben und wieder geladen werden, bei weitem neutralisiert. Die Variante mit Fachobjekten war in unseren Tests bis zu fünf Mal langsamer als die Variante mit IDs. Die Ergebnisse bei der Laufzeit waren so eindeutig, dass wir weiterführende Untersuchungen, z.B. in Richtung Netzlast, gar nicht mehr angestellt haben.</p>
<h2>Was wir daraus lernen können</h2>
<p>Mindestens genauso interessant wie das eigentliche Ergebnis der Untersuchung waren aber die Erkenntnisse, die ich als Nebenprodukt gewinnen konnte. Die eine wie die andere Variante hätte nämlich erheblichen Einfluss auf die gesamte Architektur und das Prozessdesign.</p>
<p>Persistiert jeder Service immer alle Änderungen sofort, braucht man sich keine Gedanken darüber zu machen, zu welcher Zeit man welchen Datenzustand benötigt und wann manuelle Synchpoints aus dem Prozess heraus nötig sind. Möglicherweise reicht es dabei gar nicht aus, am Anfang des Prozesses zu laden und am Ende zu speichern. Gibt es im Prozess manuelle Rückkopplungen mit Mitarbeitern, so muss vor diesen gespeichert werden, damit der Mitarbeiter auf dem aktuellen Stand aufsetzt.</p>
<p>Dazu kommt, dass die Fachobjekte in der BPE, z.B. als XSD, modelliert werden müssen. Existiert in der SOA ein Versionskonzept, das den parallelen Betrieb verschiedener Versionen eines Services erlaubt, so muss dieses in der BPE entsprechend nachgebildet werden. Außerdem wird ein Konzept für den Transport von Fachobjekten über die (Web-)Service-Schnittstellen hinaus notwendig. Setzt man auf abstrakte DTOs (seit EJB3 manchmal als Anti-Patterns verschrien), entsteht zusätzliches Mapping auf der Service-Schicht, das sowohl zur Entwicklungs- als auch Laufzeit Aufwand bereitet. Werden echte JPA-Entitäten verwendet, verliert man die lose Kopplung, die den Charme einer SOA ausmacht, da die (Web-)Service-Consumer direkt von Änderungen an den Entitäten abhängig sind.</p>
<p>Auf der anderen Seite muss man sagen, dass eine Payload, die nur auf IDs operiert, eine homogene Servicelandschaft voraussetzt, in der alle Services mit diesen IDs auch umgehen können und Zugriff auf die Daten haben. Werden Dritt- oder Legacysysteme angebunden, so müssen möglicherweise Fachobjekte durch den Prozess geschleust werden, um diese Systeme zu bedienen.</p>
<h2>Fazit</h2>
<p>Eine eindeutige Empfehlung für den einen oder anderen Weg kann es an dieser Stelle nicht geben. Ich möchte aber die Sinne dafür schärfen, dass diese Entscheidung durchaus weitreichende Folgen haben kann und gründliche Überlegungen erfordert.</p>
<div style="height:33px; padding-top:2px; padding-bottom:2px; clear:both;" class="zare366"><div style="float:left; width:90px; " class="zare366_google1"> 
				<g:plusone size="medium" href="http://blog.holisticon.de/2012/03/auch-prozesse-haben-ihre-zu-tragen/" ></g:plusone>
			</div><div style="float:left; width:110px; padding-left:10px;" class="zare366_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="Auch Prozesse haben ihre Last zu tragen" data-url="http://blog.holisticon.de/2012/03/auch-prozesse-haben-ihre-zu-tragen/">Tweet</a> 
			</div></div>
		<div style="display:none;"><a href="http://www.news365live.com">news and informations</a>&nbsp;<a href="http://news365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a><a href="http://worldnews365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a></div><div style="clear:both;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.holisticon.de/2012/03/auch-prozesse-haben-ihre-zu-tragen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Parallele Mehrfachausführung von Sub-Prozessen mit Bonita Open Solution</title>
		<link>http://blog.holisticon.de/2012/03/parallele-mehrfachausfuhrung-von-sub-prozessen-mit-bonita-open-solution/</link>
		<comments>http://blog.holisticon.de/2012/03/parallele-mehrfachausfuhrung-von-sub-prozessen-mit-bonita-open-solution/#comments</comments>
		<pubDate>Tue, 20 Mar 2012 08:29:50 +0000</pubDate>
		<dc:creator>Sven Bunge</dc:creator>
				<category><![CDATA[BPM/SOA]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[Bonita]]></category>
		<category><![CDATA[BPM]]></category>

		<guid isPermaLink="false">http://blog.holisticon.de/?p=4749</guid>
		<description><![CDATA[In einem unserer Kundenprojekte setzen wir die BPM-Lösung Bonita Open Solution (Version 5.6.1) ein. Die Software-Suite stellt einen BPMN-Editor wie auch eine BPE zur Verfügung, um die Prozesse zu designen und auszuführen. Leider ist die Dokumentation etwas dürftig, wenn es darum geht, einen Sub-Prozess mehrfach parallel auszuführen. Während manche Aufgaben (Activities) mit der kompletten Liste von [...]]]></description>
			<content:encoded><![CDATA[<p>In einem unserer Kundenprojekte setzen wir die BPM-Lösung <a title="Bonitasoft" href="http://www.bonitasoft.com/" target="_blank">Bonita Open Solution</a> (Version 5.6.1) ein. Die Software-Suite stellt einen BPMN-Editor wie auch eine <a title="Business Process Engine" href="http://de.wikipedia.org/wiki/Business_Process_Engine" target="_blank">BPE</a> zur Verfügung, um die Prozesse zu designen und auszuführen. Leider ist die Dokumentation etwas dürftig, wenn es darum geht, einen Sub-Prozess mehrfach parallel auszuführen. Während manche Aufgaben (Activities) mit der kompletten Liste von Elementen arbeiten, muss für andere Tätigkeiten jeweils eine Aufgaben-Instanz mit einem Element der Liste gestartet werden. Man spricht auch von einer (parallelen) Mehrfachausführung.</p>
<p>Beispiele für das Szenario gibt es viele. Es ist z.B. denkbar, dass eine Loop-Activity Bewerbungen für einen Zeitraum entgegennimmt und in einer Liste sammelt. Diese werden dann zusammen in der HRM-Abteilung bearbeitet und später einzeln auf die Fachbereiche verteilt. In unserem rein technischen Beispiel warten wir auf die Eingabe von fünf Namen, die wir in einer einfachen Parallel-Ausführung und dann in einem parallelen Sub-Prozess einzeln anzeigen.</p>
<p><a href="http://blog.holisticon.de/wp-content/uploads/2012/03/Bonita-Multi-Instantiated-Example-Process-.png"><img class="aligncenter size-large wp-image-4770 colorbox-4749" style="border-style: initial; border-color: initial;" src="http://blog.holisticon.de/wp-content/uploads/2012/03/Bonita-Multi-Instantiated-Example-Process--1024x264.png" alt="Beispiel: Parallele Mehrachausführung von Sub-Prozessen in Bonita" width="450" height="116" /></a></p>
<p><span id="more-4749"></span></p>
<p style="text-align: left;">Unser Prozess beinhaltet eine Liste von Namen, die in der ersten Loop-Aufgabe abgefragt und über einen Connector der Namens-Liste hinzugefügt werden. Der zweite Schritt besteht aus einer einfachen Nutzer-Aufgabe, die für jeden Namen aufgerufen wird und diesen dann ausgibt. Hierzu wählt man die Aufgabe aus und selektiert unter &#8220;Advanced&#8221; die Einstellung &#8220;is Multi-Instantiated&#8221;. Es erscheinen zwei Felder, die das Instantiieren und das Zusammenführen von den Aufgaben-Instanzen organisieren. Der &#8220;Instantiator&#8221; ermittelt die Anzahl und Parameter für die Aufgaben-Instanzen, während der &#8220;Join Checker&#8221; überprüft, ob alle Aufgaben abgeschlossen wurden, die für die Fortführung des Prozesses nötig sind. Demnach läuft der <em>Instantiator</em> auch vor allen <em>Enter</em>-Methoden, und wir erzeugen uns für unser Beispiel einen &#8221;Variable number von instances&#8221;-Connector. Wichtig ist, dass die lokalen Variablen in der <em>Instantiator</em>-Phase noch nicht zur Verfügung stehen.</p>
<div id="attachment_4755" class="wp-caption alignright" style="width: 204px"><a href="http://blog.holisticon.de/wp-content/uploads/2012/03/Bonita-Mehrfachausführung-Zuweisung.png"><img class="wp-image-4755  colorbox-4749" style="border-style: initial; border-color: initial;" src="http://blog.holisticon.de/wp-content/uploads/2012/03/Bonita-Mehrfachausführung-Zuweisung.png" alt="Bonita: Mit &quot;Variable number von instances&quot; eine Liste auf eine lokale Variable mappen" width="194" height="182" /></a><p class="wp-caption-text">Bonita: Mit &quot;Variable number von instances&quot; eine Liste auf eine lokale Variable mappen</p></div>
<p>Im Wizard-Verlauf müssen nun der Name einer lokalen Aufgaben-Variablen und die Liste der Werte angegeben werden. Die Variable können wir im Drop-Down über &#8220;Create data &#8230;&#8221; wie gewohnt erzeugen. Wichtig ist, dass unter &#8220;Name&#8221; <strong>kein</strong> <a href="http://groovy.codehaus.org/Strings+and+GString">GString</a> angegeben wird, wie ihn Bonita fälschlich automatisch dort einfügt. Das heißt, der Name muss ohne Dollar und geschweifte Klammern in dem Feld stehen. Um die Werte nun zuzuweisen, muss man auf den Link &#8220;Set value as expression&#8221; klicken, um in eine Ansicht zu kommen, die nur eine Liste erwartet. Hier geben wir unsere Liste als <em>GString</em> an.</p>
<p>Über den <em>Join Checker</em> stellt Bonita fest, ob alle Aufgaben-Instanzen beendet wurden, und fährt dann mit dem Prozess fort. Hier kann ein einfacher &#8220;Percentage of completed instances&#8221;-Connector ausgewählt werden, den wir mit &#8220;1.00&#8243; für 100% versehen. Dies soll schon genügen: Wir teilen über den <em>Instantiator</em> Anzahl und Werte der BPE mit, und diese Werte werden bei der Aufgaben-Instanziierung den lokalen Variablen zugewiesen. Wenn alle Aufgaben abgeschlossen, sprich alle Namen angezeigt wurden, führen wir die Arbeit fort.</p>
<p>Bei einem mehrfach ausgeführten Sub-Prozess kann man das Vorgehen fast analog anwenden. Es muss zusätzlich die lokale Variable der Aufgabe auf eine Variable des Sub-Prozesses gemapped werden, mit der dieser dann arbeiten kann.</p>
<p>Wir hatten nun die Anforderung, dass wir an der Aktivität die eigentliche Liste der Daten erst ermitteln mussten, um den Sub-Prozess mit mehreren Daten aufzurufen. Man könnte dies mit einer Java-Klasse lösen, die die <a href="http://www.bonitasoft.org/docs/javadoc/bpm_engine/5.6/org/ow2/bonita/connector/core/MultiInstantiator.html" target="_blank">MultiInstantiator</a>-Klasse der Bonita-API erweitert. Um eine schon bestehende Methode nutzen zu können, entschieden wir uns für die Groovy/Java-Lösung. In diesem Fall muss man ein Groovy/Java-Code-Snippet schreiben, das eine Liste von Aufgaben-Variablen zurückgibt. Konkret: <em>List&lt;Map&lt;String, Object&gt;&gt;.</em> Für jeden Listen-Eintrag wird eine Instanz gestartet, und die lokalen Variablen der Aufgabe werden durch Einträge aus der Map gefüllt. Für unser Namens-Beispiel sieht unser Java-Snippet so aus:</p>
<pre class="brush: plain; title: ; notranslate">
List&lt;Map&lt;String, Object&gt;&gt; initParams = new ArrayList&lt;Map&lt;String, Object&gt;&gt;(); // Liste aus Parametern.

for (Object processVar : listOfNames) {
  Map&lt;String, Object&gt; entry = new HashMap&lt;String, Object&gt;();
  entry.put(&quot;name&quot;, processVar);
  initParams.add(entry);
}
return initParams;
</pre>
<div id="attachment_4765" class="wp-caption alignright" style="width: 220px"><a href="http://blog.holisticon.de/wp-content/uploads/2012/03/Groovy-und-Java-in-Bonita1.png"><img class=" wp-image-4765 colorbox-4749" src="http://blog.holisticon.de/wp-content/uploads/2012/03/Groovy-und-Java-in-Bonita1-300x261.png" alt="Bonita: Groovy-Instantiator mit einem Java-Snipplet befüllen" width="210" height="183" /></a><p class="wp-caption-text">Bonita: Groovy-Instantiator mit einem Java-Snippet befüllen</p></div>
<p>Für Groovy und Java-Code wählt man den &#8220;Groovy&#8221;-Connector unter Instantiator. Hier erwartet Bonita ein Code-Snippet, das dann ausgeführt wird. Sehr tückisch ist auch hier, dass Bonita gern <em>GStrings</em> bei der Verwendung des Expression-Editors einfügt. So wird der komplette Code nach dem Verlassen des Expression-Editors, der  auch Code-Highlighting und Hilfe beim Import von Klassen bietet, in einen <em>GString</em> gewrapped. Dieser kann dann nicht ausgeführt werden &#8211; es müssen manuell alle <em>GStrings</em> entfernt werden. (Dies gilt auch für Variablen im Snippet, da der Inhalt ansonsten später als Groovy-Code ausgewertet wird). Sollte man dies mal übersehen, wird der Prozess an der Stelle abbrechen. Man erhält in der<em> engine.log</em> eine Fehlermeldung wie:</p>
<pre class="brush: plain; title: ; notranslate">
org.ow2.bonita.util.BonitaRuntimeException: Unable to find a method with name: setScript and parameters: [classjava.util.ArrayList=[{a=1, b=1}, {a=2, b=2}, {c=3, c=3}, {d=4, d=4}],] in connector: class org.bonitasoft.connectors.bonita.instantiators.GroovyInstantiator
    at org.ow2.bonita.definition.activity.AbstractActivity.instantiateMultiInstanceActivity(SourceFile:225)
    at org.ow2.bonita.definition.activity.AbstractActivity.execute(SourceFile:168)
</pre>
<div id="attachment_4797" class="wp-caption alignright" style="width: 219px"><a href="http://blog.holisticon.de/wp-content/uploads/2012/03/BonitaLokale-Variablen-auf-SubProcess-mappen.png"><img class=" wp-image-4797 colorbox-4749" src="http://blog.holisticon.de/wp-content/uploads/2012/03/BonitaLokale-Variablen-auf-SubProcess-mappen-300x155.png" alt="Bonita: Lokale Variablen auf SubProcess mappen" width="209" height="109" /></a><p class="wp-caption-text">Bonita: Lokale Variablen auf SubProcess mappen</p></div>
<div>Wie erwähnt, setzt die jeweils zurückgegebene Map die Parameter auf die lokalen Aufgaben-Variablen. Somit darf man nicht vergessen, diese gleichlautend anzulegen und auf den Sub-Prozess über den entsprechenden Reiter zu mappen. Zu beachten ist, dass eine Variable der Aufgabe nicht transient definiert werden darf, da sie sonst nicht für das Mapping verwendet werden kann.</div>
<p>Das ganze Beispiel kann als Bonita-Prozess <a href="http://blog.holisticon.de/wp-content/uploads/2012/03/Bonita-ParalleleMehrfachausfuehrung.zip">herunter geladen</a> werden.</p>
<div style="height:33px; padding-top:2px; padding-bottom:2px; clear:both;" class="zare366"><div style="float:left; width:90px; " class="zare366_google1"> 
				<g:plusone size="medium" href="http://blog.holisticon.de/2012/03/parallele-mehrfachausfuhrung-von-sub-prozessen-mit-bonita-open-solution/" ></g:plusone>
			</div><div style="float:left; width:110px; padding-left:10px;" class="zare366_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="Parallele Mehrfachausführung von Sub-Prozessen mit Bonita Open Solution" data-url="http://blog.holisticon.de/2012/03/parallele-mehrfachausfuhrung-von-sub-prozessen-mit-bonita-open-solution/">Tweet</a> 
			</div></div>
		<div style="display:none;"><a href="http://www.news365live.com">news and informations</a>&nbsp;<a href="http://news365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a><a href="http://worldnews365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a></div><div style="clear:both;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.holisticon.de/2012/03/parallele-mehrfachausfuhrung-von-sub-prozessen-mit-bonita-open-solution/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sencha Touch: Lokale JSON-Datei in Store laden (Ext.data.JsonStore)</title>
		<link>http://blog.holisticon.de/2012/03/sencha-touch-lokale-json-datei-store-laden-ext-data-jsonstore/</link>
		<comments>http://blog.holisticon.de/2012/03/sencha-touch-lokale-json-datei-store-laden-ext-data-jsonstore/#comments</comments>
		<pubDate>Tue, 13 Mar 2012 08:19:19 +0000</pubDate>
		<dc:creator>Norman Erck</dc:creator>
				<category><![CDATA[Technologie]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[JsonStore]]></category>
		<category><![CDATA[Sencha Touch]]></category>

		<guid isPermaLink="false">http://blog.holisticon.de/?p=4652</guid>
		<description><![CDATA[Für ein aktuelles Mobile-Projekt evaluierten wir Mobile-Entwicklungs-Tools und entsprechende Charting Libraries. Dabei sind wir auch auf Sencha Touch gestoßen. Für einen Prototyp wollten wir JSON-Daten in einem Chart darstellen und hatten einige Hürden zu überwinden, bis wir in der Lage waren, diese JSON-Daten mit Sencha zu lesen. Da ich kein direkt lauffähiges Beispiel dazu im [...]]]></description>
			<content:encoded><![CDATA[<p>Für ein aktuelles Mobile-Projekt evaluierten wir Mobile-Entwicklungs-Tools und entsprechende Charting Libraries. Dabei sind wir auch auf <em>Sencha Touch</em> gestoßen. Für einen Prototyp wollten wir JSON-Daten in einem Chart darstellen und hatten einige Hürden zu überwinden, bis wir in der Lage waren, diese JSON-Daten mit Sencha zu lesen. Da ich kein direkt lauffähiges Beispiel dazu im Netz gefunden habe, soll der Blogbeitrag dieses jetzt allen anderen bieten, die auch mit den Ext.Data.JsonStore Daten lesen möchten.<span id="more-4652"></span></p>
<h3>Das Original-Beispiel</h3>
<p>Ist man ganz naiv und denkt, man schaut sich einfach das Beispiel der <a title="Ext.data.JsonStore" href="http://docs.sencha.com/ext-js/4-0/#!/api/Ext.data.JsonStore">Sencha Touch Dokumentation</a> an, bringt es in den eigenen Kontext und kann dieses direkt ausführen, fällt man erst einmal auf die Nase und bekommt bei der Ausführung den folgenden Fehler:</p>
<pre class="brush: bash; title: ; notranslate">
Ext.data.JsonReader.getResponseData: Unable to parse JSON returned by Server.
</pre>
<p>Der JavaScript-Code, der den Store aufbauen sollte:</p>
<pre class="brush: jscript; title: ; notranslate">
var store1 = new Ext.data.JsonStore({
    // store configs
    autoDestroy: true,
    storeId: 'myStore',

    proxy: {
        type: 'ajax',
        url: 'jsonTest.json',
        reader: {
            type: 'json',
            root: 'images',
            idProperty: 'name'
        }
    },

    //alternatively, a Ext.data.Model name can be given
    fields : ['name', &quot;url&quot;, {
				name : 'size',
				type : 'float'
			}, {
				name : 'lastmod',
				type : 'date'
    }]
});

		store1.load();
</pre>
<p>Die JSON-Datei, die geladen werden sollte:</p>
<pre class="brush: plain; title: ; notranslate">
{
    images: [
        {name: 'Image one', url:'/GetImage.php?id=1', size:46.5,
            lastmod: new Date(2007, 10, 29)},
        {name: 'Image Two', url:'/GetImage.php?id=2', size:43.2,
            lastmod: new Date(2007, 10, 30)}
    ]
}
</pre>
<p>Nach ein wenig Googeln ließ sich ermitteln, dass man sich strikt an den JSON-Syntax halten muss: Die Attributnamen, die Attribute bei Strings und die Wurzel des dictionary müssen folglich in Hochkommata gesetzt werden. Da ich kein PHP-Skript ausführen möchte, sondern nur eine JSON-Datei laden möchte, muss ich auch das Datum als String darstellen.</p>
<h3>Das laufende Beispiel</h3>
<p>Die neue JSON-Datei sieht also wie folgt aus:</p>
<pre class="brush: plain; title: ; notranslate">
{
    &quot;images&quot;: [
        {&quot;name&quot;: &quot;Image one&quot;, &quot;url&quot;:&quot;/GetImage.php?id=1&quot;, &quot;size&quot;:46.5,
            &quot;lastmod&quot;: &quot;2007-10-29&quot;},
        {&quot;name&quot;: &quot;Image Two&quot;, &quot;url&quot;:&quot;/GetImage.php?id=2&quot;, &quot;size&quot;:43.2,
           &quot;lastmod&quot;: &quot;2007-10-30&quot;}
    ]
}
</pre>
<p>Im JavaScript-Code muss lediglich angegeben werden, in welchem Format das Datum interpretiert werden soll.</p>
<pre class="brush: jscript; title: ; notranslate">
  fields: ['name', &quot;url&quot;,  {name:'size', type: 'float'},
    {name:'lastmod', type:'date', dateFormat:'Y-m-d'}]
</pre>
<p>Und schon läuft der Code.</p>
<h3>Das Problem mit dem Proxy</h3>
<p>Ein zweiter Fehler, auf den wir häufig bei unseren ersten Gehversuchen gestoßen sind, war auf einen nicht konfigurierten Proxy zurückzuführen:</p>
<pre class="brush: bash; title: ; notranslate">
Error: You are using a ServerProxy but have not supplied it with a url.
</pre>
<p>Man findet im Netz auch Codeschnipsel wie den folgenden <strong>falschen</strong>, der den oben genannten Fehler provoziert:</p>
<pre class="brush: jscript; title: ; notranslate">
window.store1 = new Ext.data.JsonStore({
  // store configs
  autoDestroy : true,
  storeId : 'myStore',
  url : 'jsonTest.json',
  root : 'images',
  //alternatively, a Ext.data.Model name can be given
  fields : ['name', &quot;url&quot;, {
    name : 'size',
    type : 'float'
    }, {
	name : 'lastmod',
	type : 'date',
	dateFormat : 'Y-m-d'
  }]
});
</pre>
<p>Ergo ist es wichtig, einen entsprechenden Proxy zu definieren.</p>
<h3>Zusammenfassung und Beispielcode</h3>
<p>Um mit Sencha Touch JSON-Dateien zu laden, ist streng die JSON-Syntax einzuhalten und gegebenenfalls muss ein Proxy definiert werden. Ein lauffähiges Beispiel, bestehend aus den Dateien jsonTest.html, jsonTest.js und jsonTest.json, kann <a title="jsonTest Beispiel" href="http://blog.holisticon.de/wp-content/uploads/2012/03/jsonTest.zip">hier</a> heruntergeladen werden. Um das Beispiel auszuführen, benötigt man natürlich zusätzlich <a title="Sencha Touch Download" href="http://www.sencha.com/products/touch/download/">Sencha Touch</a>.</p>
<div style="height:33px; padding-top:2px; padding-bottom:2px; clear:both;" class="zare366"><div style="float:left; width:90px; " class="zare366_google1"> 
				<g:plusone size="medium" href="http://blog.holisticon.de/2012/03/sencha-touch-lokale-json-datei-store-laden-ext-data-jsonstore/" ></g:plusone>
			</div><div style="float:left; width:110px; padding-left:10px;" class="zare366_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="Sencha Touch: Lokale JSON-Datei in Store laden (Ext.data.JsonStore)" data-url="http://blog.holisticon.de/2012/03/sencha-touch-lokale-json-datei-store-laden-ext-data-jsonstore/">Tweet</a> 
			</div></div>
		<div style="display:none;"><a href="http://www.news365live.com">news and informations</a>&nbsp;<a href="http://news365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a><a href="http://worldnews365online.com">automotive,business,crime,health,life,politics,science,technology,travel</a></div><div style="clear:both;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.holisticon.de/2012/03/sencha-touch-lokale-json-datei-store-laden-ext-data-jsonstore/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

