<?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>ghost23 blog</title>
	<atom:link href="http://www.ghost23.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ghost23.de</link>
	<description>A blog about UI development.</description>
	<lastBuildDate>Mon, 22 Apr 2013 12:50:21 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.5.4</generator>
	<item>
		<title>Android app &#8211; Hafengeburtstag</title>
		<link>http://www.ghost23.de/2013/04/android-app-hafengeburtstag/</link>
		<comments>http://www.ghost23.de/2013/04/android-app-hafengeburtstag/#comments</comments>
		<pubDate>Mon, 22 Apr 2013 12:50:21 +0000</pubDate>
		<dc:creator><![CDATA[Sven Busse]]></dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://www.ghost23.de/?p=613</guid>
		<description><![CDATA[I just finished my first Android project for the city of Hamburg, through the agency tallence GmbH. It is a quite simple content-driven application for an upcoming event in Hamburg, the Hafengeburtstag.]]></description>
				<content:encoded><![CDATA[<p>Juten Tach,</p>
<p>i just finished my first Android project for the <a title="hamburg,de" href="http://www.hamburg.de" target="_blank">city of Hamburg</a>, through the agency <a title="tallence GmbH" href="http://www.tallence.com" target="_blank">tallence GmbH</a>. It is a quite simple content-driven application for an upcoming event in Hamburg, the Hafengeburtstag. You can access all important information around the different locations, news, hotels and so on.</p>
<p> [<a href="http://www.ghost23.de/2013/04/android-app-hafengeburtstag/">See image gallery at www.ghost23.de</a>] </p>
<p>&nbsp;</p>
<p>The app is built for android 4, but is backwards compatible down to 2.3. It features offline content with a cache sync mechanism, built with a little sqlite database. I also use the greenDAO database layer, which is a nice little library for accessing data in a no-sql like way.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ghost23.de/2013/04/android-app-hafengeburtstag/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>onething.com &#8211; client work</title>
		<link>http://www.ghost23.de/2012/10/onething-com-client-work/</link>
		<comments>http://www.ghost23.de/2012/10/onething-com-client-work/#respond</comments>
		<pubDate>Tue, 30 Oct 2012 10:25:51 +0000</pubDate>
		<dc:creator><![CDATA[Sven Busse]]></dc:creator>
				<category><![CDATA[HTML/CSS/JavaScript]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://www.ghost23.de/?p=597</guid>
		<description><![CDATA[Juten Tach, a little post about some client work, i just finished a couple of weeks ago. With a nice team at t8y we developed the onething.com website for a major German car maker. I was responsible for the JavaScript architecture and built many of the sites components, like charts, auto-resizing type-components, dynamic headers, various content-boxes and so on. [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Juten Tach,</p>
<p>a little post about some client work, i just finished a couple of weeks ago. With a nice team at t8y we developed the onething.com website for a major German car maker.</p>
<p>I was responsible for the JavaScript architecture and built many of the sites components, like charts, auto-resizing type-components, dynamic headers, various content-boxes and so on.</p>
<p>The site uses backbone.js together with require.js, which i have come to like quite a lot.</p>
<p>The project took 3 months, including prototyping.</p>
<p>What did I learn? Well, i learned about backbone.js. For example, that backbones has this nice shim feature, where you can let backbone correctly load JavaScript libraries, which are not compatible with the <a title="AMD Principle" href="http://requirejs.org/docs/whyamd.html" target="_blank">AMD principle</a>. Very handy. I also learned about Raphael.js and that it&#8217;s a pity  that raphael does not support real groups, makes scaling a tedious job. And finally i once again confirmed my belief, that you should carefully assess a library, that you want to use. If there is little to no activity on googlecode or github, that&#8217;s a bad sign.</p>
<p> [<a href="http://www.ghost23.de/2012/10/onething-com-client-work/">See image gallery at www.ghost23.de</a>] </p>
]]></content:encoded>
			<wfw:commentRss>http://www.ghost23.de/2012/10/onething-com-client-work/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript and the use of class-like paraphrases</title>
		<link>http://www.ghost23.de/2012/03/javascript-and-the-use-of-class-like-paraphrases/</link>
		<comments>http://www.ghost23.de/2012/03/javascript-and-the-use-of-class-like-paraphrases/#respond</comments>
		<pubDate>Sat, 24 Mar 2012 14:49:49 +0000</pubDate>
		<dc:creator><![CDATA[Sven Busse]]></dc:creator>
				<category><![CDATA[HTML/CSS/JavaScript]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[language]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.ghost23.de/?p=586</guid>
		<description><![CDATA[Juten Tach, this post will be about language and thus i have to send out a word of warning first, because i am not writing in my mother language, so i am not 100% sure, if I always use the right words. Anyway, let&#8217;s give it a try. There are many hot debates about a [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Juten Tach,</p>
<p>this post will be about language and thus i have to send out a word of warning first, because i am not writing in my mother language, so i am not 100% sure, if I always use the right words. Anyway, let&#8217;s give it a try.</p>
<p>There are many hot debates about a variety of aspects of JavaScript. One of them is the question, if it is a wise thing to emulate classes, knowing that it does not support them natively. I want to give you my perspective on this subject.</p>
<p>Let&#8217;s look at human languages first. With human languages, we find, that some languages are very good a describing certain things than others. You have probably heard of the Inuit having dozens of different words for different types of ice and snow. That of course also means, that some languages lack the words to describe things. Sometimes this makes people use the respective words from other languages (I believe in English you also say &#8220;Gesundheit&#8221;) and sometimes people start to paraphrase, what they want to say. Let&#8217;s take GDP, for example: Gross domestic product. There is no word, that directly defines the concept behind GDP, that&#8217;s why we use this combination of three words to paraphrase it (in German, it is even weirder, literally translated we say &#8220;gross social product&#8221;).</p>
<p>If one has never paid attention to the subject of macro economics in school or has never read any newspapers and so on, she or he will have problems understanding, what it means. So in order to understand certain paraphrases, you have to have some kind of understanding of the underlying concepts. Now the good thing is, that after a while, some of those paraphrases really catch on and get used by a majority of people. So today, we normally understand, what is meant by GDP, not because the paraphrase is very elegant, but because it is used so widely, that a majority of people knows, what it stands for. Of course, other paraphrases do not get adopted and thus almost nobody knows, what it means.</p>
<p>Now back to programming languages. I think, we have similar mechanisms here. There are programming languages, which are able to say things, which other languages cannot directly say. For instance, C# in my opinion is a language, that has a pretty extensive vocabulary, so it can describe quite a lot of concepts. Of course, the downside is, you have to learn all this vocabulary. JavaScript&#8217;s vocabulary is simpler (i hear, it was developed in 10 days, so no wonder). So things, that can be said directly in C# cannot be said directly in JavaScript. So, that&#8217;s where paraphrasing comes into play. Although we cannot say some things in JavaScript directly, we can still paraphrase, what we mean. So for example, JavaScript has no word for the concept of a class. The best thing we can do is to paraphrase it. Some of those paraphrases are more elegant than others. And the deeper we go with this, the more complicated the paraphrases get. For example, JavaScript also doesn&#8217;t have words for &#8220;private&#8221; and &#8220;public&#8221;. So people come up with more or less elegant paraphrases, that try to describe these concepts.</p>
<p>And again, if you are not familiar with these concepts and the paraphrases, you will probably have a hard time understanding the code, same with understanding, what GDP is. But over time, some of those paraphrases get adopted by a growing community. And then suddenly you don&#8217;t have to think about them anymore. They appear as being a natural part of the language. Think of it. If you hear GDP nowadays, you don&#8217;t really think of it as a paraphrase anymore, because it used so widely and naturally, as if it was a concrete word on its own.</p>
<p>The same will happen with some paraphrases in programming languages over time. After some years, developers talk about them so fluently, as if they would be a natural part of the language, although they never were. And the ones, which are too clunky and complex, simply will not get adopted and be forgotten after a little while.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ghost23.de/2012/03/javascript-and-the-use-of-class-like-paraphrases/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The gap between web technology and tools</title>
		<link>http://www.ghost23.de/2012/02/web-technology/</link>
		<comments>http://www.ghost23.de/2012/02/web-technology/#comments</comments>
		<pubDate>Sat, 25 Feb 2012 20:15:14 +0000</pubDate>
		<dc:creator><![CDATA[Sven Busse]]></dc:creator>
				<category><![CDATA[Flash in general]]></category>
		<category><![CDATA[HTML/CSS/JavaScript]]></category>
		<category><![CDATA[Stuff]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://www.ghost23.de/?p=583</guid>
		<description><![CDATA[Juten Tach, caution: rant ahead! I am currently sitting in the middle of an emotional triangle of being in the midst of developing a website having seen this talk from Bret Victor about &#8220;having an immediate connection to your creation&#8221; having seen this talk from Ethan Marcotte about Responsive Web Design And the sum of [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Juten Tach,</p>
<p>caution: rant ahead!</p>
<p>I am currently sitting in the middle of an emotional triangle of</p>
<ol>
<li>being in the midst of developing a website</li>
<li>having seen this <a href="http://www.vimeo.com/36579366" target="_blank">talk from Bret Victor</a> about &#8220;having an immediate connection to your creation&#8221;</li>
<li>having seen this <a href="http://vimeo.com/34662135" target="_blank">talk from Ethan Marcotte</a> about Responsive Web Design</li>
</ol>
<p>And the sum of these impressions for me is frustration.</p>
<p>For the last decades we have seen technologies in the broad field of multimedia (including the web) explode. Nowadays we have HTML5, CSS3, WebGL, Flash, Native Apps, Native Desktop Apps, Sandboxed Desktop Apps and a bunch of more stuff at our fingertips. The limitations on what we can build are getting narrower and narrower. Of course, we have to look on performance here and there, of course we have to deal with limitations some environments put on us, but if you compare the current possibilities to what we had 10 years ago, it&#8217;s like we&#8217;re in multimedia heaven. Or isn&#8217;t it?</p>
<p>Problem is, on a creation level, for me it still feels like 10 years ago or even more. Of course, we have fancy editors now with syntax highlighting, for some parts, we even have refactoring tools. But all these editors make the problem even more apparent in my view. We are having a huge gap between our creative ideas and the real result. And it is growing every year, it feels. Just look at how many technologies todays web developers can choose from or even have to master at the same time. It is not just HTML, CSS, Javascript. It is also the browsers, it is the various javascript libraries, the css frameworks, minifiers, boilerplates, grid systems, the build scripts, the CSS enhancer languages, languages that build on top of javascript or compile into javascript. Not to mention the new kids like WebGL, Web Workers (and the new paradigm this introduces) and so on.</p>
<p>Don&#8217;t get me wrong, i love all of this. It is exciting and if you start to dream about what incredible things we can build with these, it is taking my breath away. But this complexity has a bad side effect: It is not possible to master all of these fields (except for some few geniuses who do, but unfortunately the most of us are pretty much average, aren&#8217;t we?!). Which is OK you might say, so there can be experts in every field. But every expert introduces another layer between the original creator (or author or thinker, etc.) and the actual result. And every layer most naturally always also functions as some kind of filter, taking just some tiny bit of idea away from the original, even if it is unintentional. Still the result can be stunning and innovative. But in too many cases it is not, because too much of the idea gets lost along the way of briefings, meetings, static photoshop layouts, concept documents and false or incomplete interpretations of the experts.</p>
<p>For an example, just have a look at the content industry, like magazines, news sites and so on. Go to their website or look at their tablet apps or mobile apps. The majority of their content is text, some images and sometimes a video. Every once in a while they feature an &#8220;interactive experience&#8221;, which gets promoted highly then. But most of the time, they have some standard templates with text and images. And who would want to blame them for it? It is extremely costly to produce highly interactive and dynamic pieces of content. Many work-hours have to be put into such a thing. Many people from various fields are needed. It is simply no possible to do that for every piece of content.</p>
<p>And why? Because we are lacking the tools to do it. Heck, the web is 20 years old and we&#8217;re still hacking html code into text editors. In order to build some piece of web content, we have to mentally compile at least three languages (HTML,CSS, Javascript) and imagine, what it will look like, then type everything into the editor and then look at the result. Of course this is nerdy and cool and we feel like we&#8217;re in total control, but let me tell you: It is bullshit. It is a massive waste of time. The computer should be doing most of this and let us concentrate on thinking and articulating, how we want things to look and behave in the easiest and fastest way.</p>
<p>Instead we&#8217;re seeing an ever increasing gap between an explosion of new technologies and features and a just moderately evolving field of tools, that should help us using those technologies. Just think about it: What is the biggest innovation in tools, that you have seen in the last 10 years, when it comes to developing websites? And i am not talking about libraries, frameworks and the like, i am talking about tools! Here are some, that come to my mind:</p>
<ul>
<li>firebug (and the respective tools in the other browsers)</li>
<li>sort-of-sometimes-working code completion for HTML, CSS and Javascript</li>
<li>REPL</li>
</ul>
<p>You probably know some more, but the fact is, it still pretty much comes down to manually hacking code into a text editor and then testing, what comes out of it. I remember, that sometime in the 90s, there where these WYSIWIG editors, like Frontpage, Dreamweaver and so on. But they produced ugly code and even today everyone i know, wouldn&#8217;t think of using these tools.</p>
<p>I think, if we really want to move forward with all these new possibilities, we need better tools for creating multimedia user experiences. As hard as it might sound to some of the experts, i think we need to get rid at least of some of the layers between the creator and the result to come closer to the creative ideas again and to be able to spend less time and money on the creation itself. Only better tools can make that happen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ghost23.de/2012/02/web-technology/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Using CSS for custom JavaScript components</title>
		<link>http://www.ghost23.de/2012/01/using-css-for-custom-javascript-components/</link>
		<comments>http://www.ghost23.de/2012/01/using-css-for-custom-javascript-components/#comments</comments>
		<pubDate>Tue, 03 Jan 2012 14:06:06 +0000</pubDate>
		<dc:creator><![CDATA[Sven Busse]]></dc:creator>
				<category><![CDATA[HTML/CSS/JavaScript]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.ghost23.de/?p=573</guid>
		<description><![CDATA[You can read CSS declarations from your HTML (or external files) and use them programmatically in your own JavaScript components. I show a little example.]]></description>
				<content:encoded><![CDATA[<p>Juten Tach,</p>
<p>I&#8217;m working quite a lot with HTML / CSS / JavaScript these days (wonder why &#8230;). Sometimes, you want to build a component completely through JavaScript. For example, you might want to build a component, that uses the canvas, where you draw things. That component has a JavaScript function object (some sort of class) and the canvas element.</p>
<p>Now, I thought, I would like to style this component with CSS. Problem is, since I am using a JavaScript / Canvas component, CSS cannot affect my drawing on the canvas, since this is done through JavaScript. Still, I would like to define things in CSS.</p>
<p>After digging a little bit, here is my solution (in a little example):</p>
<p>First, in my HTML page I have a simple canvas element with an id &#8220;myCanvas&#8221;. Since I am using jquery I use this little on ready function:</p>
<pre>&lt;script&gt;
 $(document).ready(function(){
  var myComponent = new CanvasComponent($("myCanvas"));
 });
&lt;/script&gt;</pre>
<p>OK, so this instantiates my JavaScript component object an passes it a reference to the respective canvas DOM element.</p>
<p>Next, I define the CSS, that I would like to have for my component. Note, I do not necessarily define css for the canvas element itself, but rather css for what I will do on the canvas. Sounds weird? Bear with me.</p>
<pre>canvas-component {
 background-color: #cacaca;
 line-height: 2px;
}</pre>
<p>Ok, let&#8217;s see. First of all, you notice, that the selector says &#8220;canvas-component&#8221;, which is not a known HTML tag. But that&#8217;s OK, because HTML5 allows for custom tags officially. Second, the style attributes are not meant to affect the canvas directly, as I already said. I declare styles, that I want to use later in my drawings on the canvas. There is a little downside: unfortunately you cannot define your own custom style attributes here, because the browsers will ignore them, so you have to use the best next existing attribute, that comes close semantically. For this little example, I just choose a background-color and a line-height.</p>
<p>Now all we have to do, is bring my JavaScript component and the style declaration together. I do this in the constructor of my JavaScript component object:</p>
<pre>function CanvasComponent(canvas) {
 this.canvasElement = canvas;
 this.styleClass = null;

 // Some IE use 'rules', other browsers mainly use 'cssRules', which is official
 var allCSSRules =
      document.styleSheets[0].cssRules
   || document.styleSheets[0].rules;
 for(var i = 0; i &lt; allCSSRules.length; i++) {
  if(allCSSRules[i].selectorText == "canvas-component")
   this.styleClass = allCSSRules[i].style;
 }
 alert("line-height: " + this.styleClass.getPropertyValue("line-height"));
}</pre>
<p>So, as we can see, in document.styleSheets we have an Array of all the different embedded or loaded stylesheets. In my example, I have only one stylesheet declaration as an external file, that&#8217;s why I can use document.styleSheets[0]. Within the stylesheet, there a many rules, of which one is the rule, i have printed above. We have to find it manually, since the DOM API does not provide any functionality for that. So i go through all the rules and search for the selector &#8220;canvas-component&#8221;. If I find it, I save it. And now I can access the declarations via &lt;code&gt;getPropertyValue()&lt;/code&gt;, for example. There are other functions as well, but this one is probably the most useful one.</p>
<p>Now that I can access the declaration, I can use them in my canvas drawings. For example, when drawing a line, I can now set the thickness of the line according to the line-height from my CSS, or if I draw some big background rectangle, I can use the background-color from CSS.</p>
<p>Well, that&#8217;s it, perhaps that comes in handy for you some time.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ghost23.de/2012/01/using-css-for-custom-javascript-components/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>DOM Event listener in GWT</title>
		<link>http://www.ghost23.de/2011/07/dom-event-listener-in-gwt/</link>
		<comments>http://www.ghost23.de/2011/07/dom-event-listener-in-gwt/#respond</comments>
		<pubDate>Wed, 13 Jul 2011 13:52:19 +0000</pubDate>
		<dc:creator><![CDATA[Sven Busse]]></dc:creator>
				<category><![CDATA[Stuff]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://www.ghost23.de/?p=551</guid>
		<description><![CDATA[Juten Tach, should you be scratching your head like i did, when trying to understand, how you would add an event listener to simple DOM elements in GWT, here&#8217;s how i do it currently: Element myDOMElement = Document.get&#40;&#41;.getElementById&#40;&#34;someDOMElement&#34;&#41;; Event.setEventListener&#40;myDOMElement, new EventListener&#40;&#41; &#123; &#160; @Override public void onBrowserEvent&#40;Event event&#41; &#123; // TODO Do crazy stuff here [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Juten Tach,</p>
<p>should you be scratching your head like i did, when trying to understand, how you would add an event listener to simple DOM elements in GWT, here&#8217;s how i do it currently:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #003399;">Element</span> myDOMElement <span style="color: #339933;">=</span> <span style="color: #003399;">Document</span>.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;someDOMElement&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003399;">Event</span>.<span style="color: #006633;">setEventListener</span><span style="color: #009900;">&#40;</span>myDOMElement, <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">EventListener</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
	@Override
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onBrowserEvent<span style="color: #009900;">&#40;</span><span style="color: #003399;">Event</span> event<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// TODO Do crazy stuff here</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003399;">Event</span>.<span style="color: #006633;">sinkEvents</span><span style="color: #009900;">&#40;</span>myDOMElement, <span style="color: #003399;">Event</span>.<span style="color: #006633;">ONCLICK</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Note the last line here. Only once you&#8217;ve called sinkEvents(), do you really get the events for the particular event type(s).</p>
<p>I find this much more usable, than the nasty Event.addNativePreviewHandler() method, that they talk about in the GWT documentation, because you only get the event, you&#8217;re interested in.</p>
<p>In general it appears to me, that GWT is more geared towards using their components (or widgets), than working with the DOM directly.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ghost23.de/2011/07/dom-event-listener-in-gwt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mercedes Facebook game &#8211; flash</title>
		<link>http://www.ghost23.de/2011/07/mercedes-facebook-game-flash/</link>
		<comments>http://www.ghost23.de/2011/07/mercedes-facebook-game-flash/#respond</comments>
		<pubDate>Sun, 03 Jul 2011 08:31:22 +0000</pubDate>
		<dc:creator><![CDATA[Sven Busse]]></dc:creator>
				<category><![CDATA[AS3 / Flex]]></category>
		<category><![CDATA[Flash in general]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.ghost23.de/?p=538</guid>
		<description><![CDATA[Juten Tach, another project just went online this week, in which i was involved: Drive and Seek &#8211; The Prologue. Together with Harald, who was the lead here, we were responsible for the development. I took special care of the interface to facebook and the customization features of the end video, in which you can [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Juten Tach,</p>
<p>another project just went online this week, in which i was involved: <a title="Drive and Seek - The Prologue" href="http://www.facebook.com/MercedesBenz?sk=app_214093555274968" target="_blank">Drive and Seek &#8211; The Prologue</a>. Together with <a title="Harald Tobler" href="http://www.seriouscircus.com/" target="_blank">Harald</a>, who was the lead here, we were responsible for the development. I took special care of the interface to facebook and the customization features of the end video, in which you can put your own picture either by uploading one or via webcam.</p>
<p>It was a fun project, going for a about a month.</p>
<p>What did i learn? First of all, i have mixed feelings about robotlegs. I like the DI part, but i cannot get used to these top-down mvc structures, which seem to put too much emphasis on infrastructure and too little on conceptual entities. I have to admit, that robotlegs technically does not tell you how to structure your application, but the best practices documentation does promote the approach of using mediators, commands and so on and tying it all together via bunch of events. This sounds all nice in theory, in practice for me, it is too technical and does not reflect the individual, conceptual relations of the components and modules i like to build. But this is stuff for another post.</p>
<p>I do like the Facebook API, although its documentation leaves a lot to be desired. The JavaScript SDK is nice and after fighting with the Facebook ActionScript library initially (couldn&#8217;t get it to initialize reliably), i soon abandoned it and used the JavaScript SDK directly via ExternalInterface.</p>
<p> [<a href="http://www.ghost23.de/2011/07/mercedes-facebook-game-flash/">See image gallery at www.ghost23.de</a>] </p>
]]></content:encoded>
			<wfw:commentRss>http://www.ghost23.de/2011/07/mercedes-facebook-game-flash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Brainbattle &#8211; emotiv, flash, union server</title>
		<link>http://www.ghost23.de/2011/05/brainbattle-emotiv-flash-union-server/</link>
		<comments>http://www.ghost23.de/2011/05/brainbattle-emotiv-flash-union-server/#comments</comments>
		<pubDate>Fri, 20 May 2011 10:13:14 +0000</pubDate>
		<dc:creator><![CDATA[Sven Busse]]></dc:creator>
				<category><![CDATA[AS3 / Flex]]></category>
		<category><![CDATA[Stuff]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.ghost23.de/?p=513</guid>
		<description><![CDATA[Tug-of-war type of game, using neuro-sensors from emotiv. Measures brain activity and calculates score points for two opponents.
Technologies involved: emotiv sdk, Unity Multiuser Server (Java), Flash / ActionScript3
This project took 2 days.]]></description>
				<content:encoded><![CDATA[<p>Juten Tach,</p>
<p>i was once again lucky enough to be able to build a fun little project. Brainbattle!</p>
<p><a href="http://www.ghost23.de/wp-content/gallery/brainbattle/brainbattle.jpg"><img class="alignnone size-full wp-image-518" title="Brainbattle" src="http://www.ghost23.de/wp-content/gallery/brainbattle/brainbattle.jpg" alt="The game Brainbattle in action" srcset="http://www.ghost23.de/wp-content/uploads/brainbattle.jpg 600w, http://www.ghost23.de/wp-content/uploads/brainbattle-300x173.jpg 300w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>
<h3>But how did it all start?</h3>
<p>So, i occasionally give talks at the <a title="GoodSchool" href="http://good-school.de/" target="_blank">GoodSchool</a> about technology, internet and so on. The GoodSchool is a school for new ways of communication. All things digital, social, web, etc. and it is targeted at people in the marketing world. They have lots of different events all over the year. One is &#8220;camp digital&#8221;. Seven days packed full of information, inspiration and, of course, fun things.</p>
<p>So, Christian from the GoodSchool this time gave me two brain sensor headsets from <a title="Emotiv" href="http://www.emotiv.com/" target="_blank">emotiv</a> and asked me to build a little game with it. We decided to do a simple tug-of-war type of game.</p>
<h3>So, how does it work?</h3>
<p>So the setup is:</p>
<ul>
<li>Two emotiv epoc neuroheadsets (and their SDKs)</li>
<li>Two PCs connected via a twisted Ethernet cable</li>
<li>One <a title="Union Platform" href="http://www.unionplatform.com/" target="_blank">Union Platform server</a> (and the game control module build in Java)</li>
<li>Two little client flash apps, which take the converted signals from the emotiv SDKs and send it to the server (along with game controls)</li>
<li>One flash central Display app (seen in the pic above), that shows the game state.</li>
</ul>
<p>OK, the headsets connect two their respective PC over the air via a dongle. These headsets basically read the electric signals from your brain. As you can see in the picture below, the headset has a bunch of sensors, which need to be wet (using a saline solution). The tricky part is, that the sensors ideally touch the skin, which means, you have to fight a bit with the hair of the user to get out of the way.</p>
<p>These signals are read from a software SDK. Part of that SDK is a &#8220;training&#8221; program. There you can basically train &#8220;actions&#8221;. Like pull, push, up, down, vanish, show and lots of others. So you train a certain action, like &#8220;pull&#8221;. For 8 seconds you think about &#8220;pull&#8221; and the programm records the signals of your brain during that time. Then if you think that thought again later, the software recognizes the pattern and knows, that you think &#8220;pull&#8221;.</p>
<p><a href="http://www.ghost23.de/wp-content/gallery/brainbattle/emotiv-headset.jpg"><img class="alignnone size-full wp-image-515" title="emotiv-headset" src="http://www.ghost23.de/wp-content/gallery/brainbattle/emotiv-headset.jpg" alt="Emotiv Epoc neuroheadset close-up" srcset="http://www.ghost23.de/wp-content/uploads/emotiv-headset.jpg 600w, http://www.ghost23.de/wp-content/uploads/emotiv-headset-300x179.jpg 300w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>
<p>Then there is a second little tool, called EmoKey. It is a simple converter. It converts an &#8220;action&#8221; into native Windows key events. So you define, that when the user thinks &#8220;pull&#8221;, it should emit a key event of the key &#8220;p&#8221;, for example. It can also do this continuously, lots of settings there.</p>
<p>So then i have a build a little client, which let&#8217;s you connect to the union server i have built, let the user click ready and also read those native key events. It then counts those incoming events per second and sends the result to server (every 500 ms).</p>
<p>The server (java) module takes those numbers from the two clients and calculates a force from it, being either positive or negative (depending on the numbers from client1 and client2). The server module of course also controls the various stages of the game, like client registering, game start, winning, and so on. The server is based on the union multiuser server, which is some nice piece of software and well documented. Its concept is around rooms and clients being in one or more rooms. The clients can send messages, set attributes on themselves or the rooms and so on. So i have created such a room, which has the game logic.</p>
<p>That game state is continuously send to the central flash display app, which is connected to the server as well (but only as an observer). It gets the force number and the game states and displays it.</p>
<p>So, that&#8217;s basically it. It took me about two and a half days to build it (and test it roughly). You can see a <a title="Brainbattle at goodschool" href="http://www.facebook.com/video/video.php?v=1764578721200" target="_blank">video of the game in action at facebook</a>.</p> [<a href="http://www.ghost23.de/2011/05/brainbattle-emotiv-flash-union-server/">See image gallery at www.ghost23.de</a>] ]]></content:encoded>
			<wfw:commentRss>http://www.ghost23.de/2011/05/brainbattle-emotiv-flash-union-server/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Jump &#8216;n run &#8211; Lego builders of infinity</title>
		<link>http://www.ghost23.de/2011/05/jump-n-run-lego-builders-of-infinity/</link>
		<comments>http://www.ghost23.de/2011/05/jump-n-run-lego-builders-of-infinity/#respond</comments>
		<pubDate>Mon, 09 May 2011 10:06:53 +0000</pubDate>
		<dc:creator><![CDATA[Sven Busse]]></dc:creator>
				<category><![CDATA[Flash in general]]></category>
		<category><![CDATA[Stuff]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[box2d]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[project]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://www.ghost23.de/?p=506</guid>
		<description><![CDATA[Jump 'n Run game for Lego, produced by plan.net. This game consists of standalone game app and a microsite, where you can build levels with lego bricks and publish them.
Technologies involved: Flash / ActionScript3, Box2D
I was responsible for the development of the game. It took roughly about 1.5 months. This one won a silver lion in Cannes.]]></description>
				<content:encoded><![CDATA[<p>Juten Tach,</p>
<p>it doesn&#8217;t happen that often, that you work on a project for some time and finish it as smoothly as you started it. That happened to me while developing the jump &#8216;n run game <a title="Lego - builders of infinity" href="http://www.buildersofinfinity.com" target="_blank">Lego &#8211; builders of infinity</a>. Working with the nice people at Plan.net here in hamburg, we just finished this project together (If you like it, you might want to express that with a <a title="Lego - builders of infinity at FWA" href="http://thefwa.com/submissions/lego-builders-of-infinity" target="_blank">vote</a>?).</p>
<p><strong>Update:</strong> Nice: Just got notified, that the project won a <a title="Silver lion in Cannes" href="http://www.canneslions.com/work/direct/entry.cfm?entryid=23379&amp;award=3" target="_blank">silver lion in Cannes</a>!</p>
<p><strong>Update 2</strong>: Double nice: <a title="Site of the day at FWA." href="http://thefwa.com/site/lego-builders-of-infinity" target="_blank">FWA site of the day</a>.</p>
<p><strong>Update 3:</strong> Triple nice: <a title="Dope Award" href="http://www.dopeawards.com/?winner=2255&amp;cat=0" target="_blank">Dope Award</a></p>
<p><a href="http://www.ghost23.de/wp-content/uploads/lego-boi-1.jpg"><img class="size-full wp-image-507 alignnone" title="Lego - builders of infinity" src="http://www.ghost23.de/wp-content/gallery/legojump/lego-boi-1.jpg" alt="" srcset="http://www.ghost23.de/wp-content/uploads/lego-boi-1.jpg 556w, http://www.ghost23.de/wp-content/uploads/lego-boi-1-300x203.jpg 300w" sizes="(max-width: 556px) 100vw, 556px" /></a></p>
<p>This took roughly two months. It&#8217;s based on Flash Player 10 and uses the Box2d wck alchemy port. Its basically two apps: the game and the microsite. You can embed the game in your own website or blog, if you like.</p>
<p>The whole project consists of 103 ActionScript files (mostly classes) and around 6640 lines of code (no comments, no blanks, no libs).</p>
<p><a href="http://www.ghost23.de/wp-content/uploads/lego-boi-2.jpg"><img class="alignnone size-full wp-image-508" title="Lego - builders of infinity" src="http://www.ghost23.de/wp-content/gallery/legojump/lego-boi-2.jpg" alt="" srcset="http://www.ghost23.de/wp-content/uploads/lego-boi-2.jpg 556w, http://www.ghost23.de/wp-content/uploads/lego-boi-2-300x203.jpg 300w" sizes="(max-width: 556px) 100vw, 556px" /></a></p>
<p>The most challenging thing was, that Box2D has issues with letting boxes slide over a set of other boxes. From time to time, the box sticks at the edge from one underlying box to another, even if they are perfectly aligned. I first used the &#8220;normal&#8221; Box2D Flash port, but as it seems, there has not been a lot of development going on there, lately. So i switched to the Box2D wck alchemy port, which requires Flash Player 10. That port is more up to date with the original C implementation and thus can take advantage of some changes, which help fix the sliding issue. You can now cut off the corners of your boxes and thus let it slide over the corners of two adjacent boxes (which actually don&#8217;t exist, but as i said, box2d thinks they do exist). This trick does not work in the old &#8220;normal&#8221; Box2D Flash port.</p>
<p>Hope you enjoy the game.</p> [<a href="http://www.ghost23.de/2011/05/jump-n-run-lego-builders-of-infinity/">See image gallery at www.ghost23.de</a>] ]]></content:encoded>
			<wfw:commentRss>http://www.ghost23.de/2011/05/jump-n-run-lego-builders-of-infinity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Box2D wck together with ND2D</title>
		<link>http://www.ghost23.de/2011/04/box2d-wck-together-with-nd2d/</link>
		<comments>http://www.ghost23.de/2011/04/box2d-wck-together-with-nd2d/#comments</comments>
		<pubDate>Wed, 27 Apr 2011 17:59:54 +0000</pubDate>
		<dc:creator><![CDATA[Sven Busse]]></dc:creator>
				<category><![CDATA[AS3 / Flex]]></category>
		<category><![CDATA[Stuff]]></category>
		<category><![CDATA[box2d]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[molehill]]></category>
		<category><![CDATA[nd2d]]></category>

		<guid isPermaLink="false">http://www.ghost23.de/?p=501</guid>
		<description><![CDATA[Juten Tach, since i a) was working quite a lot with Box2D lately b) am sitting next to Lars (aka nulldesign) today we had the idea to combine the Box2D alchemy port with Lars&#8217; ND2D graphics engine. The result involved lots of basketballs 🙂 Caution: You need the Flash Player incubator build for this to [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Juten Tach,</p>
<p>since i</p>
<p>a) was working quite a lot with Box2D lately</p>
<p>b) am sitting next to Lars (aka <a href="http://www.nulldesign.de" target="_blank">nulldesign</a>)</p>
<p>today we had the idea to combine the Box2D alchemy port with Lars&#8217; ND2D graphics engine. The result involved lots of basketballs <img src="https://s.w.org/images/core/emoji/72x72/1f642.png" alt="&#x1f642;" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p><em>Caution: You need the Flash Player incubator build for this to run:</em></p>
<p><strong>[Update]</strong>: As commenters have already pointed out, the app below doesn&#8217;t work with the current flash player anymore. I would have to update Lars&#8217; ND2D engine to make it work again, but i currently simply feel to lazy to do it <img src="https://s.w.org/images/core/emoji/72x72/1f610.png" alt="&#x1f610;" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p><a href="http://ghost23.de/nd2dbox2d_demo/main.html" target="_blank">http://ghost23.de/nd2dbox2d_demo/main.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ghost23.de/2011/04/box2d-wck-together-with-nd2d/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>
