<?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>uxebu » blog &#187; html5apps</title>
	<atom:link href="http://uxebu.com/category/html5apps/feed/" rel="self" type="application/rss+xml" />
	<link>http://uxebu.com/blog</link>
	<description></description>
	<lastBuildDate>Mon, 23 Apr 2012 19:10:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>State of &lt;audio&gt; in iOS5</title>
		<link>http://uxebu.com/blog/2011/11/29/state-of-html5-audio-in-ios-5/</link>
		<comments>http://uxebu.com/blog/2011/11/29/state-of-html5-audio-in-ios-5/#comments</comments>
		<pubDate>Tue, 29 Nov 2011 09:00:26 +0000</pubDate>
		<dc:creator>David Pfahler &#38; Stephan Bönnemann</dc:creator>
				<category><![CDATA[html5]]></category>
		<category><![CDATA[html5apps]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://uxebu.com/blog/?p=1977</guid>
		<description><![CDATA[<em>This is a guest post by <a href="http://twitter.com/davidpfahler">David Pfahler</a> and <a href="http://twitter.com/boennemann">Stephan Bönnemann</a>.</em>

<h2>Why you’d like to use HTML5 audio in iOS 5</h2>
It’s all about apps these days. The question is whether you want to make the commitment and investment (of learning a new language) to program natively for one platform or leverage the web dev skills you already have? HTML5 is the way to go if you sympathize with the latter.]]></description>
			<content:encoded><![CDATA[<p><em>This is a guest post by David Pfahler Stephan Bönnemann of <a href="http://keeplook.in" title="keeplook.in">keeplook.in</a>.</em></p>
<h2>Why you’d like to use HTML5 audio in iOS 5</h2>
<p>It’s all about apps these days. The question is whether you want to make the commitment and investment (of learning a new language) to program natively for one platform or leverage the web dev skills you already have? HTML5 is the way to go if you sympathize with the latter.<br />
<span id="more-1977"></span></p>
<p>Let&#8217;s face it: The main problem for web developers that want to make apps is to deliver a great <strong>user experience</strong>. Hence, you&#8217;d like to use as much of today&#8217;s web technologies as possible to enhance the UX. One profound way of doing this is audio feedback. For example, many twitter apps use sounds if new tweets come in and another sound if no new tweets could be found. This kind of response is intuitive to the user. This is what you should go for.</p>
<p>Also, imagine a game without sounds. Would be kind of boring, wouldn&#8217;t it?</p>
<h2>Naive Assumptions: What you’d expect</h2>
<p>Fortunately in iOS we have rich HTML5 support built into mobile Safari. Initially, Steve Jobs wanted all apps to be web apps! So what you&#8217;d assume regarding audio is the presence of the HTML5 audio tag. And guess what, there <em>is</em> an implementation of the audio tag in iOS. Hurray!</p>
<p>So what do you expect from an audio tag implementation:</p>
<ul>
<li>call .load(), .play(), .pause() and other methods via JavaScript</li>
<li>use remote files, dataURIs, cached files and other sources</li>
<li>play several audio files / tags at once</li>
<li>mix audio from several sources with different volumes, etc.</li>
</ul>
<h2>Reality checks: What should work but doesn’t</h2>
<p>It becomes clear pretty fast that it&#8217;s not that simple. With iOS it&#8217;s a disaster. The bad news first:</p>
<p><strong>It is not possible to load or play audio without user interaction.</strong></p>
<p>Sad, but true. <a title="Safari Developer Library" href="http://developer.apple.com/library/safari/#documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/ControllingMediaWithJavaScript/ControllingMediaWithJavaScript.html#//apple_ref/doc/uid/TP40009523-CH3-SW5">Apple deliberately decided</a> that a touch event is mandatory to load and play audio. There is no workaround for this.</p>
<p>If we accept the fact that we need a touch event to play the audio, is it possible to use the audio tag as expected? Hmm, no, not really. So what&#8217;s broken as well?</p>
<p><strong>Latency</strong>: Loading audio files on demand (after the touch event fired) is unusably slow. The desired user experience can not be achieved using this technique.</p>
<p><strong>One audio tag at a time:</strong> You can never play more than one audio tag at once. This makes it impossible to mix sounds on the fly which would be necessary for games that have a background music and must also play sounds dynamically (e.g. when the character jumps).</p>
<p><strong>Audio files only:</strong> You can not use anything as the source besides audio files (uncompressed WAV and AIF audio, MP3 audio, and AAC-LC or HE-AAC audio). If you could use dataURIs then it would be possible to preload the audio.</p>

<a href='http://uxebu.com/blog/2011/11/29/state-of-html5-audio-in-ios-5/mp3vsm4a/' title='mp3 vs m4a on average'><img width="150" height="150" src="http://uxebu.com/blog/wp-content/uploads/2011/11/mp3vsm4a-150x150.png" class="attachment-thumbnail" alt="mp3 vs m4a on average" title="mp3 vs m4a on average" /></a>
<a href='http://uxebu.com/blog/2011/11/29/state-of-html5-audio-in-ios-5/mp3_latency/' title='mp3 latency test results'><img width="150" height="150" src="http://uxebu.com/blog/wp-content/uploads/2011/11/mp3_latency-150x150.png" class="attachment-thumbnail" alt="mp3 latency test results" title="mp3 latency test results" /></a>
<a href='http://uxebu.com/blog/2011/11/29/state-of-html5-audio-in-ios-5/m4a_latency/' title='m4a latency test results'><img width="150" height="150" src="http://uxebu.com/blog/wp-content/uploads/2011/11/m4a_latency-150x150.png" class="attachment-thumbnail" alt="m4a latency test results" title="m4a latency test results" /></a>
<a href='http://uxebu.com/blog/2011/11/29/state-of-html5-audio-in-ios-5/dataurifail/' title='epic dataUri fail on iOS 5'><img width="150" height="150" src="http://uxebu.com/blog/wp-content/uploads/2011/11/dataUriFail-150x150.png" class="attachment-thumbnail" alt="epic dataUri fail on iOS 5" title="epic dataUri fail on iOS 5" /></a>

<h2>Workarounds: How to play anyways (at least somehow)</h2>
<p>We invested a lot of time researching the audio tag on iOS 5. If you want to know how we play audio, read on.</p>
<p>So what do you do with this crippled audio tag? Well, you trick it a little bit and use it as much as possible. Here are several ideas that work best for different scenarios:</p>
<p><strong>Bind touchstart event to body:</strong> As you have to play on a touch event, we bind a touchstart handler on the body. So wherever the user touches first, we can use this event to load the audio file. Even better, from now on, we can load and play different sources from this audio tag.</p>
<div class="codecolorer-container text twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">bodyEl.addEventListener(&quot;touchstart&quot;, function() {<br />
audioNode.load(); audioNode.play();<br />
}, false);</div></td></tr></tbody></table></div>
<p><strong>Hot swapping sources:</strong> We can now change the &#8220;activated&#8221; audio tag&#8217;s source on the fly. So it is now possible &#8211; without user interaction (!) &#8211; to load and play different sources. But you can only play one source at a time, of course.</p>
<div class="codecolorer-container text twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">audioNode.addEventListener(&quot;ended&quot;, function() {<br />
audioNode.src = &quot;newSource.mp3&quot;;<br />
audioNode.load(); audioNode.play();<br />
}, false);</div></td></tr></tbody></table></div>
<p><strong>Use audio sprites:</strong> The guys over at Zynga use audio sprites in their <a title="Zynga Jukebox on github" href="https://github.com/zynga/jukebox">Jukebox</a>. This means that you have a huge audio file containing one sound that you want to play, then one second of silence, then another sound and so on.</p>
<p>Example for a sound sprite structure:<br />
1 second silence<br />
First sound<br />
1 second silence<br />
Second sound<br />
1 second silence<br />
Third sound</p>
<p>In this file you include all the audio that you possibly want to play in your app. You only load the source once (as described above) and then jump to the relevant parts in the file. So the file is always playing but most of the time it just plays silence. When you need the sound, you can quickly jump to the part in the file that you need to play. This solution is quick (much faster than hot swapping!) but requires a long preloading phase before you can play the most sounds, because the file is bigger.</p>
<h2>tl;dr</h2>
<p>So audio in iOS is pretty much broken. If you are using a native wrapper like PhoneGap you could use native APIs via plugins like <a href="https://github.com/purplecabbage/phonegap-plugins/tree/master/iPhone/SoundPlug" title="SoundPlug on github">SoundPlug</a>. We&#8217;ll try what is possible in the upcoming versions of iOS. Please let us know your ideas and feedback in the comments.</p>
<h2>Update:</h2>
<p>Regarding Philip&#8217;s comment, this is how we think it could be.</p>
<p><img src="http://img577.imageshack.us/img577/516/audiopref.png" width="200" class="size-medium" alt="Settings" style="border: 2px solid #CFCFCF;float: left" /><img src="http://img259.imageshack.us/img259/2771/audioalert.png" width="200" class="size-medium" alt="Alert" style="border: 2px solid #CFCFCF;float: left" /></p>
<p></p>
]]></content:encoded>
			<wfw:commentRss>http://uxebu.com/blog/2011/11/29/state-of-html5-audio-in-ios-5/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>EmbedJS 0.2 and AMD</title>
		<link>http://uxebu.com/blog/2011/10/17/embedjs-0-2-and-amd/</link>
		<comments>http://uxebu.com/blog/2011/10/17/embedjs-0-2-and-amd/#comments</comments>
		<pubDate>Mon, 17 Oct 2011 15:43:16 +0000</pubDate>
		<dc:creator>Jens Arps</dc:creator>
				<category><![CDATA[development tools]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[html5apps]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[dojo]]></category>
		<category><![CDATA[embedjs]]></category>

		<guid isPermaLink="false">http://uxebu.com/blog/?p=1843</guid>
		<description><![CDATA[During JSConf.eu, we released EmbedJS 0.2. That release was mainly about a fundamental architectural change: the move to the AMD pattern for our features. Let me explain why we decided to do this, why we think this is a big step forward and what this means for the user. Modules AMD stands for &#8220;Asynchronous Module [...]]]></description>
			<content:encoded><![CDATA[<p>During JSConf.eu, we released EmbedJS 0.2. That release was mainly about a fundamental architectural change: the move to the AMD pattern for our features. Let me explain why we decided to do this, why we think this is a big step forward and what this means for the user.<br />
<span id="more-1843"></span></p>
<h2>Modules</h2>
<p>AMD stands for &#8220;Asynchronous Module Definition&#8221;. So, what are modules? I&#8217;ll quote the definition from the <a href="http://wiki.commonjs.org/wiki/Modules/1.1" target="_blank">CommonJS Module specification</a>, as it describes it very well:</p>
<blockquote><p>This specification addresses how modules should be written in order to be interoperable among a class of module systems that can be both client and server side, secure or insecure, implemented today or supported by future systems with syntax extensions. These modules are offered privacy of their top scope, facility for importing singleton objects from other modules, and exporting their own API.</p></blockquote>
<p>So, modules are isolated parts of code that live in their own scope and are kind of self-contained. Well, that is pretty much how we see the individual Features in EmbedJS – we made our feature implementations as small as possible and reduced dependencies as much as possible. Many of EmbedJS&#8217; features are also browser-independent, so why not make it possible to use some of the tools in a non-browser environment?</p>
<p>(If you want to learn more on modules and why we need them, I recommend <a href="http://twitter.com/briancavalier" target="_blank">@briancavalier</a>&#8216;s <a href="http://briancavalier.com/presentations/pgh-js-amd-10-2011/" target="_blank">presentation on modules</a>.)</p>
<h2>Features in EmbedJS</h2>
<p>So far, I didn&#8217;t really explain what I mean with &#8220;Features&#8221;, so let me do another quote, this time from the <a href="http://uxebu.github.com/embedjs/" target="_blank">Project Page</a>:</p>
<blockquote><p>EmbedJS uses the concept of features: Functionalities are split up into features, as fine-grained as possible, and each feature might have multiple implementations.</p></blockquote>
<p>Our Features are kinda small and contain only few methods, sometimes even just one. The asyc-promise feature, for example, will get you Promises, and the transport-jsonp feature will get you a method for pull in data via jsonp – and that&#8217;s it.  If multiple methods are contained within one feature, this is because they are too closely related to each other to split them up, like the html-class feature, which contains the <code class="codecolorer text mac-classic"><span class="text">addClass</span></code>, <code class="codecolorer text mac-classic"><span class="text">removeClass</span></code>, <code class="codecolorer text mac-classic"><span class="text">toggleClass</span></code> and <code class="codecolorer text mac-classic"><span class="text">hasClass</span></code> methods.</p>
<h2>AMD vs CommonJS Modules 1.1</h2>
<p>Now that we knew modules were the way to go, there was another, quite important question to solve: There are two common patterns for modules, so which one do we want to apply? One pattern is described in the above mentioned CommonJS Wiki, the other pattern is described in the <a href="https://github.com/amdjs/amdjs-api/wiki/AMD" target="_blank">AMD wiki</a>.</p>
<p>Well, there have been <a href="http://tagneto.blogspot.com/2011/04/on-inventing-js-module-formats-and.html" target="_blank">some</a> <a href="http://unscriptable.com/index.php/2011/09/30/amd-versus-cjs-whats-the-best-format/" target="_blank">blog</a> <a href="http://blog.millermedeiros.com/2011/09/amd-is-better-for-the-web-than-commonjs-modules/" target="_blank">posts</a> lately that compare the pros and cons of each of them, so I don&#8217;t want to repeat all of this – but I&#8217;m hiving a similar tendency towards AMD. Besides this, there was another big reason to go with AMD: Remember, EmbedJS is based on the <a href="http://dojotoolkit.org/" target="_blank">Dojo Toolkit</a>, and it&#8217;s a <a href="http://dojofoundation.org/" target="_blank">Dojo Foundation Project</a> – and we hope that the efforts that went into making EmbedJS might flow back into the Dojo Toolkit one day. And as the Dojo Toolkit uses the AMD approach, the decision was quickly made to do so as well.</p>
<h2>Implications for EmbedJS</h2>
<p>There are several huge benefits for EmbedJS in using the AMD approach. The most noteworthy surely is the ease-of-use for developers. In your code, when you find you want an EmbedJS method, you <a href="http://uxebu.github.com/embedjs/docs/" target="_blank">look up the feature name</a> that provides this method, add it to the require statement and there you go. Man, easy.</p>
<p>A second important thing is that EmbedJS now plays really nice with AMD based projects. In fact, you could see EmbedJS now as a collection of small useful modules, that can be easily integrated – and also easily extended.</p>
<p>The third major benefit is that we can now get rid of all the custom tools we built around EmbedJS – you can load features with any AMD loader (though we use and recommend RequireJS) and build it with any AMD optimizer/builder (we recommend r.js).</p>
<p>Let&#8217;s have an extra word on</p>
<p><strong>Building</strong></p>
<p>It was always possible with EmbedJS to create a custom build that would contain only the features you wanted/needed in your project. But, you had to use our build tool that we created. And learning &amp; using Yet-Another-Build-Tool™ is always… well, let&#8217;s just say it would be cool to avoid it (and, not to forget, so is maintaining it). We did a lot to improve that, we created a GUI that allowed you to just &#8220;click together&#8221; the features you wanted, and we worked on a dynamic loader that would ease development. But still, the situation was far from ideal, and people just ended up going for our ready-made &#8220;kitchensink&#8221; builds that contained <em>all</em> of the features.</p>
<p>Now, we still provide those ready-made builds that contain only the implementations for a given platform (and are stripped of require/define calls), but I really hope that using the AMD approach and using an AMD optimizer to deploy will become the more adopted style.</p>
<h2>Q: Cross-target? A: The Feature Plugin</h2>
<p>One goal of EmbedJS is to allow for easy cross-device development. We got rid of run-time branching but instead went for an approach that held the different implementations for a given feature in separate files, so that one only has to deploy the actually needed code to a given device – and not all the alternate implementations, that sit useless in the device&#8217;s memory and never get used. We needed to achieve that with &#8220;in-house&#8221; means provided by the AMD approach. Lucky us, there&#8217;s the concept of <a href="https://github.com/amdjs/amdjs-api/wiki/Loader-Plugins" target="_blank">loader-plugins</a>, and so I created a <a href="https://github.com/jensarps/AMD-feature" target="_blank">feature-plugin for AMD loaders</a>. The idea is simple yet effective: You create an implementation map that maps a feature name to an implementation, and if there are multiple implementations, you supply tests that tells the plugin which feature to use.</p>
<p>When you&#8217;re ready to deploy, you have two choices: I f you really don&#8217;t know on what target your code is going to end up, you can use the dynamic implementation map containing the tests for the optimizer, and you&#8217;ll get a build that contains all of the available implementations. Then, during runtime, the feature plugin will run the tests and load the specific implementation. But, if you <em>do</em> know what target your code will run on, you provide a specific implementation map that doesn&#8217;t contain tests but directly maps to the according implementations, and you will only have those in your built file.</p>
<h2>Synopsis</h2>
<p>AMD is exactly what we needed to make EmbedJS more what we want it to be – an easy to use JavaScript toolbox that is especially handy for cross-target scenarios such as cross-platform mobile development. So, please don&#8217;t hesitate and check it out on Github, read the project page and check out the examples!</p>
<p>&nbsp;</p>
<p><strong>Resources / Further Reading</strong></p>
<ul>
<li><a href="https://github.com/uxebu/embedjs" target="_blank">EmbedJS on GitHub</a></li>
<li><a href="http://uxebu.github.com/embedjs/" target="_blank">EmbedJS Project Page</a></li>
<li><a href="http://uxebu.github.com/embedjs/docs/" target="_blank">EmbedJS API Docs</a></li>
<li><a href="https://github.com/jensarps/AMD-feature" target="_blank">AMD-Feature plugin</a></li>
<li><a href="https://github.com/amdjs/amdjs-api/wiki" target="_blank">AMD Wiki</a></li>
<li><a href="http://wiki.commonjs.org/wiki/CommonJS" target="_blank">CommonJS Wiki</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://uxebu.com/blog/2011/10/17/embedjs-0-2-and-amd/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>JavaScript, HTML5, CSS3 workshop</title>
		<link>http://uxebu.com/blog/2011/06/10/javascript-html5-css3-workshop/</link>
		<comments>http://uxebu.com/blog/2011/06/10/javascript-html5-css3-workshop/#comments</comments>
		<pubDate>Fri, 10 Jun 2011 13:58:56 +0000</pubDate>
		<dc:creator>Wolfram Kriesing</dc:creator>
				<category><![CDATA[business]]></category>
		<category><![CDATA[frontend engineering]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[html5apps]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[uxebu]]></category>
		<category><![CDATA[workshop]]></category>

		<guid isPermaLink="false">http://uxebu.com/blog/?p=1554</guid>
		<description><![CDATA[Uxebu is spreading its knowledge, get some of it &#8211; for 699€ if you are an early bird (999€ later)! Uxebu is now operating it&#8217;s business purely in the JavaScript space for about three years (oh that reminds me we should have a party!). We are convinced that JavaScript is ramping up now and we [...]]]></description>
			<content:encoded><![CDATA[<h2>Uxebu is spreading its knowledge, get some of it &#8211; for 699€ if you are an early bird (999€ later)!</h2>
<p><span id="more-1554"></span></p>
<p>Uxebu is now operating it&#8217;s business purely in the JavaScript space for about three years (oh that reminds me we should have a party!). We are convinced that JavaScript is ramping up now and we see that there are more and more things done and possible with the language. The browser landscape is developing rapidly and changing every day. The mobile industry is pushing the limits and we are helping to do our part in it. We learned a lot and are still learning. As it is in the nature of our company to spread our knowledge to allow everyone to use the technology at it&#8217;s best and push the limits with us, we think now it&#8217;s the time that we share our knowledge and pass it on to those hungering for diving into JavaScript!</p>
<p>We really have <a href="http://twitter.com/void_0">gathered</a> <a href="http://twitter.com/jensarps">a lot</a> of <a href="http://twitter.com/tobeytailor">bright</a>, <a href="http://twitter.com/evilhackerdude">bleeding-edge</a> <a href="http://twitter.com/kuvos">people</a> and each of us is learning from another everyday. If you want to get some of the know how (at least as much as we can pass on in a two day workshop) you are invited to <a href="http://uxebu.com/html5-workshop/">join our workshops</a>. There will be one held in <a href="http://de.amiando.com/jsmunich.html"><strong>Munich 29th and 30th of June</strong></a> and another one in <a href="http://de.amiando.com/jsamsterdam.html"><strong>Amsterdam 11th and 12th of July</strong></a>. We will always have at least two uxebus teaching you the latest and hottest. We might even have some of the latest <a href="http://twitter.com/twtomcat/statuses/79157866954637313">bleeding-edge mobile devices</a> for you to run the app you will develop in the workshop.</p>
<hr style="margin: 4em 0;" />
<h2>Workshop Details</h2>
<p>In this course we will cover a broad spectrum from JavaScript essentials to the bleeding edge of cross platform HTML5 development. We start from the ground up and go step by step, depending on the level of the participants we accelerate to show you the deep and dark sides of JavaScript.</p>
<p>Each day of the course is split into an intensive “knowledge transfer” session in the morning and a hands on hacking workshop in the afternoon in which you will apply the contents learned during the morning. At the end you will have touched all contents not only through theory but also through intensive real life application and coding.</p>
<p><em>Note that this course will not explain you how to work with jQuery and also not how to work without jQuery. The course mainly focuses on JavaScript, mobile and HTML5.</em></p>
<h2>Day 1 (part 1) &#8211; JavaScript</h2>
<p>We start with a small overview of the history. We tackle the basic structure of the language and move on with <strong>statements</strong>, <strong>expressions</strong>, <strong>functions</strong> and <strong>objects</strong>. We touch the different <strong>operators</strong> and when semi colons are introduced.</p>
<p>We continue our way through the JavaScript landscape by taking a look at <strong>objects</strong>, <strong>properties</strong> and <strong>built-in functionality</strong>. At that point we’ll encounter our first major obstacles; <strong>scopes</strong> and <strong>closures</strong>. Once we conquer these we touch on the <strong>difference between functions and constructors</strong>. This is followed by our second major obstacle; <strong>prototype</strong> and the various values of the <strong>this keyword</strong>.</p>
<h2>Day 1 (part 2) &#8211; Hackday: HTML5, CSS3</h2>
<p>During the second part of day one, we will take what we have learned in the morning and mix it with a little shot of HTML5 fanciness. We will look at all those new APIs we can now access on our (mobile) devices to bring JavaScript to a new level. We will include cool APIs such as the <strong>Audio API, Video API, history, Canvas, SVG, File API, WebGL, DeviceMotion, WebWorkers, WebSocket, GPS</strong> &#8211; and if all ingredients fit well you might just end up with your first app written in JavaScript.</p>
<h2>Day 2 (part 1) &#8211; The App Day</h2>
<p>During the second day we willl continue with <strong>timers</strong>, <strong>callbacks</strong>, <strong>web workers</strong>, <strong>eval</strong> and the <strong>future of JavaScript</strong>. The speed of the course is matched with it’s participants. The important parts of the languages will be handled in the workshop. During the first part of day two we will also specifically look into topics which you want to cover after determining those during day one. This will give you the chance to get all your open questions answered so that you have your pockets full of knowledge after the workshop is over.</p>
<h2>Day 2 &#8211; part two (Mobile)</h2>
<p>JavaScript has grown strongly into the mobile space, so we will show you how to get the app you have started building during day one onto <strong>mobile devices</strong>. You will learn about <strong>media queries</strong>, some <strong>device sensors</strong>, <strong>performance</strong> and HTML5/CSS3/JavaScript tricks and how to optimize some parts for mobile and how to make a <strong>native app</strong> out of it, so you finally could even make get it into the <strong>app store</strong> and make money with it.</p>
<h2>Now you want to join our workshop?</h2>
<p>Join us either</p>
<ul>
<li>in <a href="http://de.amiando.com/jsmunich.html"><strong>Munich 29th and 30th of June</strong></a>or</li>
<li>in <a href="http://de.amiando.com/jsamsterdam.html"><strong>Amsterdam 11th and 12th of July</strong> </a></li>
</ul>
<p><a href="http://uxebu.com/html5-workshop/"><img style="position: fixed; left: 0; top: 0;" src="http://uxebu.com/html5-workshop/workshop-badge.png" alt="Workshop: " /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://uxebu.com/blog/2011/06/10/javascript-html5-css3-workshop/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>What is WAC and how it could help us</title>
		<link>http://uxebu.com/blog/2011/02/24/what-is-wac-and-how-it-could-help-us/</link>
		<comments>http://uxebu.com/blog/2011/02/24/what-is-wac-and-how-it-could-help-us/#comments</comments>
		<pubDate>Thu, 24 Feb 2011 16:53:08 +0000</pubDate>
		<dc:creator>Stephan</dc:creator>
				<category><![CDATA[business]]></category>
		<category><![CDATA[development tools]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[frontend engineering]]></category>
		<category><![CDATA[html5apps]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[w3c widgets]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[w3c]]></category>
		<category><![CDATA[wac]]></category>

		<guid isPermaLink="false">http://uxebu.com/blog/?p=1402</guid>
		<description><![CDATA[At Mobile World Congress 2011 in Barcelona, @uxebu attended the WAC event to catch up with the future of WAC. WAC, short for Wholesale Applications Community, is a group of global mobile operators. They provide, among other things, a spec for their correspondent web application runtime &#8220;WAC&#8221;. Recently the new WAC 2.0 Spec got out [...]]]></description>
			<content:encoded><![CDATA[<p>
At Mobile World Congress 2011 in Barcelona, @uxebu attended the WAC event to catch up with the future of WAC.<br />
WAC, short for Wholesale Applications Community, is a group of global mobile operators.<br />
They provide, among other things, a spec for their correspondent web application runtime &#8220;WAC&#8221;.
</p>
<p>
Recently the new WAC 2.0 Spec got out and it&#8217;s looking good.<br />
Compared to WAC 1.0, the WAC 2.0 Spec is a shift into the right direction:<br />
Instead of inventing new APIs, WAC 2.0 adheres to web standards like HTML5 and W3C Widget Packaging.
</p>
<p><span id="more-1402"></span></p>
<p>
Let&#8217;s compare the two major spec revisions in that repsect:
</p>
<p>
As said before, the WAC 1.0 Spec described distinct APIs, e.g., for audio, messaging (SMS &#038; email), camera and geo-location.
</p>
<p>
Taking photos, for example, involved assigning a callback to a global value inside the Camera object and invoking Camera&#8217;s captureImage method.
</p>
<p>
There&#8217;s a problem with that: What if two pieces of code both assign their own callback to that shared value?<br />
The one which assigned its callback last will be executed. The first callback is &#8220;dead code&#8221;.<br />
Of course this can be remedied by the app developer, but I believe it&#8217;s the library&#8217;s job to get something as essential as deferred execution right.<br />
All WAC 1.0 APIs use this global callback model and inherit the problem.<br />
There are better, more elegant ways to defer execution (e.g. dojo&#8217;s Deferred or node&#8217;s callback passing &#038; EventEmitter).<br />
And fortunately, WAC 2.0 replaced the old model with a callback passing approach.
</p>
<p>
If everything goes well, what could WAC provide developers with?
</p>
<ol>
<li>An easy way to package web apps &#8220;for home screens &#038; app stores&#8221; by wrapping web apps in native container apps.</li>
<li>An extension of browsers&#8217; capabilities to enable richer web apps. This includes APIs for camera and file access.</li>
<li>In contrast to alternatives WAC has a strong focus on carrier network APIs. This could enable purchase through carrier billing.</li>
<li>A security model to effectively protect user&#8217;s privacy and security.</li>
</ol>
<p>
So go ahead and look at what the new WAC 2.0 has to offer.<br />
I&#8217;m excited to build apps with it once it&#8217;s running on some major platforms!
</p>
<p>
To conclude I&#8217;d like to end this post with my personal opinion on what I believe WAC needs to focus on to succeed:
</p>
<ol>
<li>WAC runtimes have to run at least on iOS, Android and a few other major-marketshare platforms. There&#8217;s no point in developing cross-platform web apps if you ignore major platforms.</li>
<li>WAC&#8217;s marketing &#038; identity need to be more developer-centric. Different top-notch WAC runtimes need to be advertised by WAC. Ideally there would be an official runtime for each platform.</li>
<li>Apps built on top of WAC runtimes have to be compatible to major app stores. For example, imagine a developer is targeting Android and iOS. What if Apple rejected WAC-based apps because of, e.g., a bundled custom WebKit build? I&#8217;m pretty sure no sane developer would consider WAC if that effectively banned their app from ever going into the most profitable app store. And while there will be carrier-operated stores I am not overly confident in that. Human beings simply prefer one familiar store/market on their phone.</li>
<li>Web app developers want their code base functioning consistently across multiple platforms with little or no effort. This implies that different WAC runtimes should strictly respect the specification. If there are implementation differences it&#8217;ll result in multiple code branches in the app code to repair broken implementations. Well, if WAC wants to succeed this must not become an issue for the app developer! Most apps are going to need custom code to support physical device differences. So hey, it will be incredibly helpful if the basic APIs were consistently implemented! Please don&#8217;t screw this up, because I somehow doubt someone would develop a cross-WAC-platform JavaScript framework.</li>
<li>WAC 2.0 runtimes with the above properties should appear very soon. They also need to be advertised in an easy to understand manner.</li>
<li>WAC should stick to W3C specs &#038; drafts for APIs. If an API becomes part of a given platform it should be removed from that platform&#8217;s WAC runtime. Think back to when Google removed Gears support from their own browser to make way for standardized APIs.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://uxebu.com/blog/2011/02/24/what-is-wac-and-how-it-could-help-us/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Travel with uxebu &#8211; We are hiring!</title>
		<link>http://uxebu.com/blog/2011/02/10/travel-with-uxebu-we-are-hiring/</link>
		<comments>http://uxebu.com/blog/2011/02/10/travel-with-uxebu-we-are-hiring/#comments</comments>
		<pubDate>Thu, 10 Feb 2011 16:56:04 +0000</pubDate>
		<dc:creator>Wolfram Kriesing</dc:creator>
				<category><![CDATA[business]]></category>
		<category><![CDATA[frontend engineering]]></category>
		<category><![CDATA[html5apps]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[uxebu]]></category>

		<guid isPermaLink="false">http://uxebu.com/blog/?p=1377</guid>
		<description><![CDATA[Yesterday HP announced the new WebOS devices in San Francisco. Nikolai and Stephan had been there (and they are still there). MWC starts on Monday. Six out of seven of the uxebus will be there in Barcelona, all week, one apartment, sea view and fun. After JSConf in Portland (at least) three of us are [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday HP announced the new WebOS devices in <strong>San Francisco</strong>. Nikolai and Stephan had been there (and they are still there). MWC starts on Monday. Six out of seven of the uxebus will be there in <strong>Barcelona</strong>, all week, one apartment, sea view and fun. After JSConf in <strong>Portland</strong> (at least) three of us are going to <a href="http://nodeconf.com/">NodeConf</a> and <a href="http://www.google.com/events/io/2011/">Google IO</a> again in <strong>San Francisco</strong>. Right after it all of uxebu will be in <strong>Amsterdam</strong> for <a href="http://mobilism.nl/2011">mobilism</a>. We have also been in <strong><a href="http://skillsmatter.com/podcast/ajax-ria/the-mobile-web-the-future-today">London</a></strong>, <strong><a href="http://swdc-central.com/">Malmö</a></strong>, <strong><a href="http://www.developermarch.com/mods/2010/report/index.html">Bangalore</a></strong> and more &#8230; Yeah we are a travel company!<br />
<span id="more-1377"></span></p>
<p>You do not only get to travel in uxebu. First and foremost we want to give you the opportunity and platform to accelerate the things you can do, show it to the community and enable you to reach more than you could on your own.<br />
It doesn&#8217;t matter where you live! We are currently flirting with San Francisco too :).</p>
<p>But we are also a family company! We encourage you to have fun and put the priorities right. And family and health are top priorities at uxebu. As you can also see, as long as you like traveling and hanging out with the top geeks in our community you get to do that at uxebu, a lot. Because this is the bread and butter of high quality that we offer to our customers. And in order to become a top geek (which is one goal that we have for you at uxebu, if you aren&#8217;t one yet :)) you should be around those where you can suck know how and hopefully also give back and share yours as well.<br />
You get the hardware that you need to work as efficient as possible. You prefer working at home or in a co-working space? No problem, feel free! Once in a time we meet some place and hack together for a couple of days, talk about our roadmap, find out where each of us wants to head and we figure out the way how to achieve reaching the goal we determine together. We normally meet some nice place, like at a lake or in the mountains. The last times we had both :). And we take the families with us.</p>
<p><a href="http://twitter.com/jensarps">Jens Arps</a> joined uxebu in May 2010, he is the guy behind <a href="https://github.com/jensarps/StorageJS">StorageJS</a>, he is project lead for the just new dojo foundation member <a href="http://embedjs.org">embedJS</a> and is working on a really exciting HTML5 customer project that I can not link here :(. <a href="http://twitter.com/evilhackerdude">Stephan Seidt</a> has hacked the newest (still unreleased) <a href="http://apparat.io">apparatio</a> API, he is the one who does the <a href="http://nodejs.org/">node.js</a> stuff in our team and WebGL is what <a href="http://2011.jsconf.us/#/proposal/6f23fd600302403a9f53e11390179c4e">he is passionate</a> about, really passionate! I don&#8217;t have to say much about <a href="http://twitter.com/tobeytailor">Tobias Schneider</a> the guy behind <a href="https://github.com/tobeytailor/gordon">Gordon</a>, he has become famous over night, spoke at the last two JSConf&#8217;s and is our hard-core optimizer.  <a href="http://twitter.com/davidaurelio">David Aurelio</a> has created <a href="https://github.com/davidaurelio/TouchScroll">TouchScroll</a> and if you team him up with Tobias Schneider we have ALL JavaScript knowhow in da house, and they are currently hacking together on a really awesome project. <a href="http://twitter.com/nonken">Nikolai Onken</a> a co-founder of uxebu is our social community front man and the party goer number one and besides that he has created HumanAPI and knows all the JavaScript guys around! <a href="http://twitter.com/tklipstein">Tobias von Klipstein</a> is also guilty of founding uxebu and he is our Jack of all trades, he had created the first version of apparatio almost all alone.<br />
<a href="http://twitter.com/wolframkriesing">Me</a>, I write blog articles, sometimes. But I get to go to all parties anyway :).</p>
<p>If you are a JavaScript geek, love to walk along the edge of what is possible with web technologies and think that <a href="http://techcrunch.com/2011/02/09/html5-versus-native-apps/">HTML5 is the rocket ship</a> you should send us an <a href="mailto:job@uxebu.com?subject=Let%20me%20in!">email</a> with some links to some of your projects and a short, convincing reasoning why you would like to work with us. And if you think that you can&#8217;t work with us because you are not ready yet, shoot us an email anyways and let us talk first and decide later. We are made of talented individuals each. But working together as a team is what makes us really strong. Be ready for it!</p>
<p>And btw get ready to learn something new every day. And do also pass on your know how!</p>
]]></content:encoded>
			<wfw:commentRss>http://uxebu.com/blog/2011/02/10/travel-with-uxebu-we-are-hiring/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>BlackBerry6, WebKit, WebWorks, DevCon10, etc.</title>
		<link>http://uxebu.com/blog/2010/10/25/blackberry6-webkit-webworks-devcon10-etc/</link>
		<comments>http://uxebu.com/blog/2010/10/25/blackberry6-webkit-webworks-devcon10-etc/#comments</comments>
		<pubDate>Mon, 25 Oct 2010 08:59:59 +0000</pubDate>
		<dc:creator>Wolfram Kriesing</dc:creator>
				<category><![CDATA[development tools]]></category>
		<category><![CDATA[frontend engineering]]></category>
		<category><![CDATA[html5apps]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[w3c widgets]]></category>
		<category><![CDATA[blackberry6]]></category>
		<category><![CDATA[embedjs]]></category>
		<category><![CDATA[torch]]></category>

		<guid isPermaLink="false">http://uxebu.com/blog/?p=1311</guid>
		<description><![CDATA[The BlackBerry DevCon 2010 closed it&#8217;s doors a couple of days ago and to put the conclusion first, I have become a new evangelist for the BlackBerry6 platform. It supports W3C widgets, well &#8230; in a way ;). The core message I took away: web technologies have become first class citizens on the new BlackBerry [...]]]></description>
			<content:encoded><![CDATA[<p>The BlackBerry DevCon 2010 closed it&#8217;s doors a couple of days ago and to put the conclusion first, I have become a new evangelist for the BlackBerry6 platform. It supports W3C widgets, well &#8230; in a way ;). The core message I took away: web technologies have become first class citizens on the new BlackBerry platform. And we from uxebu really love this, as you can imagine.<br />
<span id="more-1311"></span></p>
<p><a href="http://hub.uxebu.com:33550/wp-content/uploads/2010/10/embedTests-Torch.jpg" style="float:right; margin:1em;"><img class="size-thumbnail wp-image-1320" title="embedTests-Torch" src="http://hub.uxebu.com:33550/wp-content/uploads/2010/10/embedTests-Torch-150x150.jpg" alt="" width="150" height="150" /></a>First I want to thank RIM for sending us two Torch devices. Right away I navigated to <a href="http://bit.ly/embed-tests">the embedJS tests</a> and I didn&#8217;t expect it differently, the tests passed without any problem, 100% passed tests. Actually I expected the tests to pass lightning fast, the time it took was ok, but not lightning fast, unfortunately. The test suite executed in about 14 seconds, on the iPhone4 it took about 10. To be fair the processor power and the system architectures are completely different and not really comparable, but the user experience counts in the end. We have heard that the RIM guys are hard working on improvements and speeding up the device, there is some cool stuff to come.</p>
<h2>WebKit and WebWorks</h2>
<p>The most impressive and revolutionary thing was definitely that BlackBerry brings an 100 points ACID compliant WebKit and runs W3C widgets using it. So there are by default two ways that are even fun to get content onto this platform. You can write mobile websites expecting an a-grade browser and you can write apps, for the so called WebWorks platform (which are W3C widgets inside). All we want. The browser supports CSS transitions and transforms, not 3D though, since there is no GPU in those devices, but you never know what might come next. There is SVG on it, WebSockets, Canvas and a lot more niceties, I just browsed the objects using <a href="http://bit.ly/object-browser">Object Browser</a>, go try it yourself, on your device.<br />
RIM renamed their widgets that existed already on BlackBerry5 to &#8220;WebWorks&#8221; and they got completely overhauled. The approach RIM went is pretty close to how PhoneGap works. WebWorks basically is a wrapper written in Java (the native language of BlackBerry) which internally instanciates a WebKit view and provides a bridge into JavaScript where the underlying native functionality is written in Java, of course. The cool thing about it is that this code is completely <a href="http://github.com/blackberry/WebWorks">open  source and on github</a>. Unfortunately the build scripts are still not on github, so you would still have to figure out yourself how to use the source from github to package your apps. RIM please push them soon! Currently <a href="http://na.blackberry.com/eng/developers/browserdev/widgetsdk.jsp">the executables</a> are the most comfortable way to build your widget.<br />
Back to the API, since the implementation is open source you can easily extend it and make functionality available into JavaScript which currently is not there. So <a href="http://jsconf.eu/2010/speaker/livingroombindmotion_function.html">Nikolai&#8217;s robotic JavaScript</a> will really become fun and reality on BlackBerry too. Why RIM went this way becomes very obvious when you understand the security concept on BlackBerry. Since all APIs are, in the end, provided by a Java implementation and only &#8220;piped&#8221; into JavaScript all security restrictions apply to the widget just as if it was a native app. That means if you access GPS in your widget (using JavaScript) the Java function will be called and will be secured the same way as if it would have been called from within a pure Java app. Of course this doesn&#8217;t make your widget secure by default, since you are using web technologies you have to take care of writing apps which are not vulnerable by XSS attacs or alike. But it offers really comfortable extendability for this platform and is no workaround to get web technologies onto BlackBerries, I think it&#8217;s a very clever approach, good job RIM.</p>
<h2>Security</h2>
<p><a href="http://hub.uxebu.com:33550/wp-content/uploads/2010/10/PermissionsBlackBerry.jpg" style="float:right; margin:1em;"><img src="http://hub.uxebu.com:33550/wp-content/uploads/2010/10/PermissionsBlackBerry-150x150.jpg" alt="" title="PermissionsBlackBerry" width="150" height="150" class="size-thumbnail wp-image-1321" /></a>Everybody knows the ridiculous installation dialogs on Android which show you the APIs the app wants to access and the final question if you want to allow the app to access this functionality or not. If you say &#8220;no&#8221;, the app won&#8217;t install. That doesn&#8217;t really make me feel that the security concept is very flexible. It&#8217;s not giving the user a lot of control. Working with Opera&#8217;s widget runtimes already for a while I thought of a concept that would allow a lot kore control for the user and make apps hopefully more successful.<br />
I will use a short example to explain it. Imagine a twitter app that you want to install and that has a lot of functionality but on the first install you only want it to be able to go online to read and send tweets. Functionality like GPS, searching my addressbook or taking pictures with the camera are built in into the app. But as long as i don&#8217;t trust the app i don&#8217;t want this functionality enabled. So I turn of access to certain APIs upon installation and enable them just when I feel secure and gained trust in the app or had been told by experts that the app is secure. But this is currently not possible on platforms like Android or iPhone. I talked about this idea and told <a href="http://supportforums.blackberry.com/t5/user/viewprofilepage/user-id/28983">RIM&#8217;s Tim Neil</a> about it, in the hope to meet open ears and confirm that this is a good idea. The answer I got surprised me big time: BlackBerry already has this for a while. We got out our Torch devices to look it up, and yes in the menu under &#8220;Device / Application Management&#8221; you can edit the permissions per app (see picture). Awesome and just right, I love this.<br />
So Opera this was my idea to improve your widget runtime and maybe to jump ahead of the crowd again, I would like it.</p>
<p>Overall the BlackBerry6 platform is very exciting and a lot of thought seem to have gone into it, especially with focus on the web, which is a really good thing. So, I will just step away and try to build the Object Browser as a WebWorks App.</p>
]]></content:encoded>
			<wfw:commentRss>http://uxebu.com/blog/2010/10/25/blackberry6-webkit-webworks-devcon10-etc/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>BarCamp Munich 2010 &#8211; seen through JavaScript and mobile eyes</title>
		<link>http://uxebu.com/blog/2010/10/16/barcamp-munich-2010-seen-through-javascript-and-mobile-eyes/</link>
		<comments>http://uxebu.com/blog/2010/10/16/barcamp-munich-2010-seen-through-javascript-and-mobile-eyes/#comments</comments>
		<pubDate>Sat, 16 Oct 2010 15:47:05 +0000</pubDate>
		<dc:creator>wolfram</dc:creator>
				<category><![CDATA[business]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[html5apps]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[uxebu]]></category>
		<category><![CDATA[w3c widgets]]></category>
		<category><![CDATA[barcamp]]></category>
		<category><![CDATA[conference]]></category>

		<guid isPermaLink="false">http://uxebu.com/blog/?p=1281</guid>
		<description><![CDATA[First and foremost big thanks to the organizers and sponsors of this awesome BarCamp. It almost seems as if BarCamps have already passed their tipping point, but still every time I discover new and interesting things, I meet people who attend for the first time and are excited about it, which makes it really awesome [...]]]></description>
			<content:encoded><![CDATA[<p>First and foremost big thanks to the organizers and sponsors of this awesome <a href="http://barcampmunich.mixxt.de/">BarCamp</a>. It almost seems as if BarCamps have already passed their tipping point, but still every time I discover new and interesting things, I meet people who attend for the first time and are excited about it, which makes it really awesome and fun. Maybe the tipping point had been reached but I guess the BarCamp is just on it&#8217;s way to become an integral part of the web culture and establishes itself as a standard event type besides the normal (mostly commercial) conferences. And as I always like to point out the people at BarCamps are those that want to go there, not those that have to be there (because their company had sent them or alike). We enjoyed it and have hopefully also brought value to it &#8211; that is what a BarCamp is all about: participate.<br />
Thank you!<br />
And let&#8217;s move on, which I do right this moment, sitting on the train going to the next (commercial) event the <a href="http://webtechcon.de">WebTechCon in Mainz</a> to bring the cross platform mobile web to it :).<br />
<span id="more-1281"></span></p>
<h2>&#8220;Modern Company&#8221; session &#8211; uxebu as the example</h2>
<p>But before I dive into the tech sessions I would like to mention that I really felt the need to hold a session which I had called &#8220;Modern Company&#8221; where I tried to show our philosophy at uxebu, how we work together, how we use the modern media, how it all came about and why we do it this way. First I didn&#8217;t know where to start. Then I started to talk about when and how the idea for uxebu came about, that we <a href="">decided online to found it</a> and really met some months later. Thanks to our open source background and our history we wanted to continue the same spirit inside the company, I tried to show how and based on what facts we grow our team (the word &#8220;hiring&#8221; seems such a one-sided process). I realize now that I forgot a lot of the good stuff, but maybe this is the chance to make this become a separate talk to hold at other events.<br />
I really loved the discussion and the questions that it had started, <a href="http://titanpad.com/izRqsSTAoT">notes had been taken</a>, a lot of critical questions came up and had been answered by <a href="http://twitter.com/tobeytailor">Tobias</a> and me. One interesting mentioning came up about <a href="http://www.faz.net/s/Rub8EC3C0841F934F3ABA0703761B67E9FA/Doc~E80113EC3EB3F48A5A14211D237BF109D~ATpl~Ecommon~Scontent.html">an article which mentioned a company that pays the same salary to all employees</a>. Thank you for all this input, I really enjoyed it and will definitely talk about this more and will prepare some more info next time.</p>
<h2>JavaScript &#8211; a topic of big interest</h2>
<p>We had founded uxebu purely for doing JavaScript consulting and pushing the limits and it is just really exciting to see how much interest this language is gaining in the last years. Not only <a href="http://jsconf.com">jsconf</a> the mother of all JavaScript events underlines this but also a lot of other conferences and events like <a href="http://2010.full-frontal.org/">fullfrontal</a>, <a href="http://fronteers.nl/">fronteers</a>, <a href="http://js1k.com/home">js1k</a>, <a href="http://10k.aneventapart.com/">10k Apart</a>, <a href="http://events.jquery.org/2010/boston/">jQueryConf</a> and so on which <a href="http://twitter.com/netzzwerg">Béla Varga</a> listed in his &#8220;<a href="http://www.slideshare.net/netzzwerg/javascript-rock-and-roll">JavaScript Rock&#8217;n Roll</a>&#8221; session.<br />
The &#8220;<a href="http://nodejs.org/">node.js</a>&#8221; session and &#8220;JavaScript Rock&#8217;n Roll&#8221; (by <a href="http://twitter.com/netzzwerg">Béla (@netzzwerg)</a> and <a href="http://twitter.com/tobeytailor">Tobias Schneider (@tobeytailor)</a>) made it very obvious that JavaScript is a hot topic, the BarCamp was not necessarily overcrowded with programmers, but still those two sessions had been very well filled and the discussions had been really fun. The conclusion of the &#8220;node.js&#8221; session that Tobias drew and evangelized was &#8220;node.js is currently very hyped and just not yet ready for production, so use at your own risk, it&#8217;s not even alpha yet&#8221;. Everybody also agreed that node.js is not the new saviour and a replacement for Apache, it&#8217;s another tool you should add to your tool belt, use it when it comes in handy and be sure to know how and when to use it. Final conclusion was, as usual, if you should use it depends on what you want to do :).<br />
Béla opened up the &#8220;JavaScript Rock&#8217;n Roll&#8221; session by giving a very good overview of what toolkits exist out there, who created them and what they are good for. He very well layed out some of the advantages and disadvantages, the rough corners and what is hard and what easy to learn. Shortly the discussion about the right JavaScript IDE came up but as usual there is no one-fits-all solution, choose yourself! Everybody was very carefully listening when <a href="http://twitter.com/tobeytailor">@tobeytailor</a> dove deep into the details of <a href="http://www.ecma-international.org/publications/standards/Ecma-262.htm">ECMAScript</a>, JavaScript, the differences, the latest specification, the changes, prototypes, <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/proto">__proto__</a> and so on. Other interesting topics in those sessions had been <a href="http://promotejs.com/">promotejs</a>, <a href="http://github.com/madrobby/vapor.js">vapor.js</a>, <a href="http://www.slideshare.net/jensarps/the-hitchhikers-guide-to-client-side-persistent-storage">details about storage mechanisms</a>, <a href="http://jquerymobile.com/">jQueryMobile</a>, <a href="http://embedjs.org/">embedJS</a>, <a href="http://apparat.io">apparat.io</a><br />
That was real &#8220;JavaScript Rock&#8217;n Roll&#8221;!</p>
<h2>Native vs. Web</h2>
<p>On Saturday, the first day of the BarCamp, I had offered a session &#8220;Mobile: Native vs. Web&#8221; but didn&#8217;t see too many hands raised, so I just didn&#8217;t put it in the schedule, later some people asked me when this session would take place and that I should hold it on Sunday, which I fortunately then did together with <a href="http://twitter.com/flowdi">Florian Detig</a>. And I have to say I am very glad we did so, because 1) we (at uxebu) have a lot of awesome stuff to talk about and 2) it was really fun interacting with the audience and passing on all this information. It is always amazing again how much there is to say about how to create an app which can also be submitted into any of the various app stores by just using web technologies (the <a href="http://www.yourappshop.com">adult industry proved that again</a>). HTML, CSS and JavaScript are just way to underestimated for being of good use in the mobile world. Florian first showed his <a href="http://prezi.com/otqop-_wynvl/">awesome slides</a> (I think they are really cool!). I continued the talk and dove a bit deeper into the mobile web topic, after my try of explaining the different movements in the native API space with players like W3C&#8217;s DAP, BONDI, JIL, WAC we deeply went into answering and discussing web technologies on mobile devices, I talked about our experiences, showed some projects we realized and answered a couple questions.<br />
Not really a surprise but still impressing was the positive feedback we got when I showed of <a href="http://apparat.io">apparat.io</a>, our soon to be launched service that will be able to convert a web app into a native app (You want to know about it first &#8211; follow <a href="http://twitter.com/apparatio">@apparatio</a>). The release date for the private beta will be the 25th October 2010, people who follow @apparatio will get accounts first. I also showed our project <a href="http://embedjs.org">embedJS</a> a toolkit (based on dojo) optimized for mobile usage.</p>
<p>All in all the BarCamp just made it obvious again that we are playing in an very interesting field and that we at uxebu are pushing the limits, that is fun, as much as the BarCamp was big fun, we will be back next time, for sure!<br />
Thanks again and keep up the good work!</p>
]]></content:encoded>
			<wfw:commentRss>http://uxebu.com/blog/2010/10/16/barcamp-munich-2010-seen-through-javascript-and-mobile-eyes/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>uxebu is hiring</title>
		<link>http://uxebu.com/blog/2010/09/18/uxebu-is-hiring/</link>
		<comments>http://uxebu.com/blog/2010/09/18/uxebu-is-hiring/#comments</comments>
		<pubDate>Sat, 18 Sep 2010 20:17:05 +0000</pubDate>
		<dc:creator>wolfram</dc:creator>
				<category><![CDATA[business]]></category>
		<category><![CDATA[frontend engineering]]></category>
		<category><![CDATA[html5apps]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[uxebu]]></category>
		<category><![CDATA[hiring]]></category>

		<guid isPermaLink="false">http://uxebu.com/blog/?p=1271</guid>
		<description><![CDATA[JSConf is just around the corner and all the JavaScript geeks are meeting there. We from uxebu are going there too, of course :). We are going to give four cool talks David Aurelio (of TouchScroll fame) &#8211; Interface Styling &#038; Scripting for WebKit Mobile Jens Arps (our storage expert) &#8211; The hitchhiker&#8217;s guide to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://jsconf.eu/2010/">JSConf</a> is just around the corner and all the JavaScript geeks are meeting there. We from uxebu are going there too, of course :). We are going to give <a href="http://jsconf.eu/2010/speakers.html">four cool talks</a></p>
<ul>
<li><a href="http://twitter.com/void_0">David Aurelio</a> (of <a href="http://static.uxebu.com/~david/touchscroll/">TouchScroll</a> fame) &#8211; Interface Styling &#038; Scripting for WebKit Mobile</li>
<li><a href="http://twitter.com/jensarps">Jens Arps</a> (our <a href="http://jensarps.de/">storage expert</a>) &#8211; The hitchhiker&#8217;s guide to client side persistent data storage</li>
<li><a href="http://twitter.com/tobeytailor">Tobias Schneider</a> (the uncomparable <a href="http://wiki.github.com/tobeytailor/gordon/">Gordon</a> author) &#8211; Not your Mother&#8217;s JavaScript!</li>
<li><a href="http://twitter.com/nonken">Nikolai Onken</a> (a Dojo senior) &#8211; Robotic JavaScript</li>
</ul>
<p>and if you think you have something as cool as what you will see at JSConf you should contact us and we should talk about working together. We at uxebu are putting fun in the job first, actually we are trying to have fun all day and just call that work. Family and health are the top priorities in our company and the absolute base for doing a great job &#8230; oh and JavaScript is what we love, currently we are hacking it only on mobile (or as we like to name it &#8220;embedded&#8221;) devices. &#8220;Embedded&#8221; because we think JavaScript is not only hot on mobiles, but on TV&#8217;s in car dashboards and maybe even in your washing machine :)!? You know where we are going &#8230; are you as enthusiastic as we are? Come and talk to us at the JSConf<span id="more-1271"></span>, or if you have no ticket for JSConf yet give us enough reason to invite you there and get to know your geekiness :).<br />
Let&#8217;s rock the mobile/embedded world &#8230;<br />
Write us to <a href="mailto:contact@uxebu.com">contact@uxebu.com</a> or find us on twitter <a href="http://twitter.com/uxebu">@uxebu</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://uxebu.com/blog/2010/09/18/uxebu-is-hiring/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SWDC 2010 Stockholm</title>
		<link>http://uxebu.com/blog/2010/06/07/swdc-2010-stockholm/</link>
		<comments>http://uxebu.com/blog/2010/06/07/swdc-2010-stockholm/#comments</comments>
		<pubDate>Sun, 06 Jun 2010 22:12:28 +0000</pubDate>
		<dc:creator>wolfram</dc:creator>
				<category><![CDATA[dojo]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[html5apps]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[uxebu]]></category>
		<category><![CDATA[w3c widgets]]></category>
		<category><![CDATA[swdc]]></category>

		<guid isPermaLink="false">http://uxebu.com/blog/?p=1217</guid>
		<description><![CDATA[Thanks to Peter Peter Svensson for organizing and making SWDC 2010 in Stockholm happen and especially thanks for inviting us to speak there. We had a blast. A crowd of about 100 people saw some very interesting talks, ranging from Node.js, YQL, Chrome extensions, HTML5 to PhoneGap, I guess everybody heard something new and interesting. [...]]]></description>
			<content:encoded><![CDATA[<p>Thanks to Peter Peter Svensson for organizing and making <a href="http://www.swdc-central.com/">SWDC 2010</a> in Stockholm happen and especially thanks for inviting us to speak there. We had a blast. A crowd of about 100 people saw some very interesting talks, ranging from Node.js, YQL, Chrome extensions, HTML5 to PhoneGap, I guess everybody heard something new and interesting.<br />
<span id="more-1217"></span></p>
<p><a href="http://twitter.com/cramforce/statuses/15327628835" target="_blank" style="float:right;"><img src="http://hub.uxebu.com:33550/wp-content/uploads/2010/06/Twitter-_-Malte-Ubl.jpg" alt="mobile rulez" title="Twitter _ Malte Ubl" width="305" height="154" class="aligncenter size-full wp-image-1221" /></a>The second day was mainly focused around mobile topics. Nikolai showed us how to think out of the box (which is your phone in this case) by talking about <a href="http://www.slideshare.net/nonken/human-apis" target="_blank">&#8220;Human APIs &#8211; expanding the mobile web&#8221;</a>. I tried to give an overview about how to use web technologies for mobile apps by talking about <a href="">&#8220;App vs. Widget &#8211; HTML5 Apps&#8221;</a>. And as it seems we had hit a sweet spot there as the tweet proves. It seems we had found our slots there. It was fun to see that.<br />
Find our slides below.</p>
<p><a href="http://picasaweb.google.com/psvensson/SWDC2010?feat=content_notification#5479008498447913298" target="_blank" style="float:left"><img src="http://hub.uxebu.com:33550/wp-content/uploads/2010/06/whatuxebudoes.jpg" alt="what uxebu does" title="whatuxebudoes" width="265" height="210" align="center" style="padding:0 5px 5px 0" /></a>It was great to see Sony Ericcson show their PhoneGap based strategy. Since that is also part of our direction it is very encouraging to see that there is company on going this route. They showed a webbased build tool, which allows for a simple creation of runnable apps based on PhoneGap and also interesting ideas around native APIs and the security concept. A lot of triggers that made a lot of people think. Great input.<br />
<a href="http://twitter.com/creationix">@creationix</a> showed a cool demo using node.js, where we could all interact with his app. <a href="http://twitter.com/divineprog">@divineprog</a> showed DroidScript, which basically was a Smalltalk inspired realtime Rhino-based JavaScript runtime, that allows using native Android resources. We learned a lot around geo data, their handling and optimization in use from <a href="http://twitter.com/tablackmore">@tablackmore</a>. Those are just some of the talks, they all were of high quality, so be sure to see them live next time.</p>
<p>At the mobile day we also heard talks about </p>
<ul>
<li>The New Mobile Web &#8211; A Web of Scripted Applications by <a href="http://twitter.com/divineprog">@divineprog</a></li>
<li>How to avoid the latency trap by <a href="http://twitter.com/sh1mmer">@sh1mmer</a></li>
<li>Handling spatial data on the web by <a href="http://twitter.com/tablackmore">@tablackmore</a></li>
<li>HTML5 gives you wings by <a href="http://twitter.com/mahemoff">@mahemoff</a></li>
<li>The phone in the cloud by Claes Nilsson and Thomas Bailey</li>
<li>node.JS powered mobile apps by <a href="http://twitter.com/creationix">@creationix</a></li>
</ul>
<p>All in all it was a great conference, I will look forward to be coming back next year.</p>
<div style="width:425px;" class="max" id="__ss_4401063"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/nonken/human-apis" title="Human APIs, the future of mobile">Nikolai Onken: Human APIs &#8211; expanding the mobile web</a></strong><object id="__sse4401063" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=humanapis-100603080239-phpapp01&#038;stripped_title=human-apis" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse4401063" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=humanapis-100603080239-phpapp01&#038;stripped_title=human-apis" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/nonken">Nikolai Onken</a>.</div>
</div>
<div style="width:425px;" class="max" id="__ss_4405271"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/wolframkriesing/html5-apps-cross-platform-swdc2010" title="Html5 apps   cross platform - SWDC2010">Wolfram Kriesing: HTML5 apps   cross platform &#8211; SWDC2010</a></strong><object id="__sse4405271" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=html5apps-crossplatform-swdc2010-100603192006-phpapp02&#038;stripped_title=html5-apps-cross-platform-swdc2010" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse4405271" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=html5apps-crossplatform-swdc2010-100603192006-phpapp02&#038;stripped_title=html5-apps-cross-platform-swdc2010" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/wolframkriesing">wolframkriesing</a>.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://uxebu.com/blog/2010/06/07/swdc-2010-stockholm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Forgotten tricks for iPhones Safari</title>
		<link>http://uxebu.com/blog/2010/04/28/forgotten-tricks-for-iphones-safari/</link>
		<comments>http://uxebu.com/blog/2010/04/28/forgotten-tricks-for-iphones-safari/#comments</comments>
		<pubDate>Wed, 28 Apr 2010 14:18:21 +0000</pubDate>
		<dc:creator>Nikolai Onken</dc:creator>
				<category><![CDATA[frontend engineering]]></category>
		<category><![CDATA[html5apps]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://uxebu.com/blog/?p=1171</guid>
		<description><![CDATA[Safari om the iPhone is an incredible powerful browser and comes with a whole bunch of features. Besides the amazing support for CSS3, a superfast rendering engine and great JavaScript support, there are a few hidden gems I want to explain in this (and maybe following) blogposts. If you are interested in mobile web development, [...]]]></description>
			<content:encoded><![CDATA[<p>Safari om the iPhone is an incredible powerful browser and comes with a whole bunch of features.<br />
Besides the amazing support for CSS3, a superfast rendering engine and great JavaScript support, there are a few hidden gems I want to explain in this (and maybe following) blogposts. If you are interested in mobile web development, maybe you will find a few features you haven&#8217;t seen before.</p>
<h2>Making your web app iPhone ready</h2>
<p>Note: <a href="http://static.uxebu.com/~nonken/a/safariGems">you can visit the example used in this blog post from your iPhone here.</a></p>
<p><object width="500" height="344"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=11241853&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=11241853&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="500" height="344"></embed></object><br />
<span id="more-1171"></span><br />
The most well-known and really most important meta tag you need to know about is the viewport meta-tag. It allows you to define the minimum and maximum zoom-level and whether or not the user is allowed to zoom into the view. You disable zooming by setting the minimum-scale to the same value as maximum-scale. At the same time you can define the viewport width and height by setting the &#8220;device-width&#8221; or &#8220;device-height&#8221; properties. If you have a website with a width of 960px and you want it to be zoomed in to fit exactly that width, all you need to do is to set width to 960. Since your website should run on several devices though with different resolutions it is not recommended to set an absolute width and instead use the predefined device-width and device-height values. This ensures that your viewport has exactly the size supported by the device.</p>
<div class="codecolorer-container javascript twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">&lt;</span>meta <span style="color: #000066;">name</span><span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;viewport&quot;</span> content<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;width=device-width,minimum-scale=1.0,maximum-scale=1.0&quot;</span><span style="color: #339933;">/&gt;</span></div></td></tr></tbody></table></div>
<p>Now lets get to the juicy part. When creating an HTML5 app for the iPhone you can define an icon which you will see on the start screen of your iPhone. Once you set this meta tag, the user won&#8217;t be able to see a difference between a native application and a web application on your iPhones homescreen.</p>
<div class="codecolorer-container javascript twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">&lt;</span>link rel<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;apple-touch-icon&quot;</span> href<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;/yourIcon.png&quot;</span><span style="color: #339933;">/&gt;</span></div></td></tr></tbody></table></div>
<p>To add even another level of detail you can define a startup screen for your application. This is especially useful when your application supports offline mode using cache manifests.</p>
<div class="codecolorer-container javascript twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">&lt;</span>link rel<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;apple-touch-startup-image&quot;</span> href<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;/startupImage.png&quot;</span><span style="color: #339933;">&gt;</span></div></td></tr></tbody></table></div>
<p>All of those features wouldn&#8217;t be complete if you couldn&#8217;t hide the browsers chrome once you start your application from the homescreen. To disable the chrome just insert following tag:</p>
<div class="codecolorer-container javascript twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">&lt;</span>meta <span style="color: #000066;">name</span><span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;apple-mobile-web-app-capable&quot;</span> content<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;yes&quot;</span><span style="color: #339933;">&gt;</span></div></td></tr></tbody></table></div>
<p>Now after you have added this meta tag you want to be able to differenciate between the user launching the app from the homescreen of the browser.</p>
<div class="codecolorer-container javascript twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #006600; font-style: italic;">// navigator.standalone</span><br />
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;standalone&quot;</span> <span style="color: #000066; font-weight: bold;">in</span> navigator<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>navigator.<span style="color: #660066;">standalone</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Started from homescreen&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #000066; font-weight: bold;">else</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Started in browser&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #000066; font-weight: bold;">else</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Not supporting standalone property&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>Last but not least you can even control the look and feel of the status bar on the top. You can either use the default status bar or a black status bar or a semi translucent status bar:</p>
<div class="codecolorer-container javascript twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">&lt;</span>meta <span style="color: #000066;">name</span><span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;apple-mobile-web-app-status-bar-style&quot;</span> content<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;black/default/black-translucent&quot;</span> <span style="color: #339933;">/&gt;</span></div></td></tr></tbody></table></div>
<p>These are the most important things you need to know to make a simple website be HTML5 app ready on your iPhone (note: this only works on the iPhone but won&#8217;t hurt other devices and platforms). A &#8220;normal&#8221; user won&#8217;t be able to differentiate between a native or a HTML5 app anymore. Do you know of similar features of other phones? Do you think we should standardize the discussed features? (Some are already). </p>
<p>If you need support getting your website or web application HTML5 app ready, feel free to <a href="http://uxebu.com/contact">contact us</a>.</p>
<p>Enjoy</p>
<h2>Dowload</h2>
<ul>
<li>
<a href="http://static.uxebu.com/~nonken/a/safariGems/safariGems.tgz">Source</a>
</li>
<li><a href="http://developer.apple.com/safari/library/documentation/AppleApplications/Reference/SafariWebContent/ConfiguringWebApplications/ConfiguringWebApplications.html">Docs</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://uxebu.com/blog/2010/04/28/forgotten-tricks-for-iphones-safari/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
	</channel>
</rss>

