<?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>Multigesture.net &#187; Application</title> <atom:link href="http://www.multigesture.net/category/application/feed/" rel="self" type="application/rss+xml" /><link>http://www.multigesture.net</link> <description>A multitouch and HCI research blog</description> <lastBuildDate>Thu, 29 Dec 2011 12:10:44 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.1</generator> <item><title>NodeBeat, openFrameworks and Android</title><link>http://www.multigesture.net/2011/11/19/nodebeat-openframeworks-and-android/</link> <comments>http://www.multigesture.net/2011/11/19/nodebeat-openframeworks-and-android/#comments</comments> <pubDate>Sat, 19 Nov 2011 20:52:49 +0000</pubDate> <dc:creator>Laurence Muller</dc:creator> <category><![CDATA[Android]]></category> <category><![CDATA[Application]]></category> <category><![CDATA[Featured]]></category> <category><![CDATA[Howto]]></category> <category><![CDATA[Multitouch]]></category> <category><![CDATA[application]]></category> <category><![CDATA[multitouch]]></category> <category><![CDATA[technology]]></category><guid isPermaLink="false">http://www.multigesture.net/?p=2095</guid> <description><![CDATA[Last month we (Seth Sandler and yours truly) released the Android port of the popular iPhone/iPad music application NodeBeat. NodeBeat was created by Seth Sandler and Justin Windle earlier this year and released in April for the iOS platform. It is an experimental node-based audio sequencer and generative music application. By combining music and playful exploration, NodeBeat [...]]]></description> <content:encoded><![CDATA[<p>Last month we (<a href="http://www.sethsandler.com/">Seth Sandler</a> and yours truly) released the Android port of the popular iPhone/iPad music application <a href="http://nodebeat.com/">NodeBeat</a>.</p><p>NodeBeat was created by <strong>Seth Sandler</strong> and <strong>Justin Windle</strong> earlier this year and released in April for the iOS platform. It is an experimental node-based audio sequencer and generative music application. By combining music and playful exploration, NodeBeat allows anyone to create an exciting variety of rhythmic sequences and ambient melodies in a fun and intuitive fashion.</p><p><iframe src="http://player.vimeo.com/video/30325679" width="500" height="281" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe></p><h2>How Does it Work?</h2><p>Octaves and Notes make up the two types of nodes. Octaves pulse and send messages to Notes within proximity. Each Octave is assigned a random octave and each Note, a random note; therefore, a Note will play in several octaves depending on the Octave it’s connected to. Pause nodes to create your own beats or let them roam free to have them generate their own.</p><p><iframe src="http://player.vimeo.com/video/27323966" width="500" height="375" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe></p><h2>Cross platform development</h2><p>Because NodeBeat was developed using the C++ based open source framework <a href="http://www.openframeworks.cc/">openFrameworks</a>, I did not expected a lot of trouble getting the core to work on Android. However, since the Android port of openFarmworks is still pretty new (we&#8217;re using the <a href="https://github.com/openframeworks/openFrameworks/tree/develop">development branch</a>) and officially only supported on the <a href="http://www.openframeworks.cc/setup/android-eclipse">Mac and Linux platforms</a>, I decided to put some effort into making it work on Windows as well. I&#8217;m a Windows user and developer, so if I can avoid dualbooting, I will <img src='http://www.multigesture.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> .</p><h2>Native Development Kit</h2><p>As soon as you want to use C or C++ in your Android projects, you will have to install the <a href="http://developer.android.com/sdk/ndk/index.html">Native Development Kit</a> (NDK). It basically allows you to compile your code into a library which you can access using <a href="http://en.wikipedia.org/wiki/Java_Native_Interface">JNI calls</a>. While in general it is recommend to code using the <a href="http://developer.android.com/sdk/index.html">SDK in Java</a> for your Android projects (the Dalvik VM with JIT show really good performance), lazy coders (like me <img src='http://www.multigesture.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ) are always trying to find ways to reuse existing code. Instead of having a native codebase for iOS (in Objective-C) and Android (in Java), it is nicer to have a shared core in C++ with a thin layer (Obj-C or Java) to interface with it. Sure the NDK might sound intimidating at first sight and Google doesnt recommend it unless you know what you&#8217;re doing, but honestly I don&#8217;t think its rocket science either. After downloading the NDK, you will need to setup a unix like environment such as <a href="http://www.mingw.org/">MinGW</a> or <a href="http://www.cygwin.com/">Cygwin</a>.</p><p>For my previous projects I already had MinGW installed (you could use Cygwin, but in general I don&#8217;t like their approach). I did a fresh <a href="https://github.com/openframeworks/openFrameworks/tree/develop">checkout from Github</a> and started to mess around with the Makefiles to see if it would compile.</p><p>It turned out that all I had to do is replacing a few IF statements (the ones that are checking the build platform) and make them point to the NDK location on my Windows computer. I&#8217;ve <a href="http://www.multigesture.net/articles/how-to-setup-openframeworks-for-android-on-windows/">created a tutorial</a> that explains the steps if you want to try it out yourself. However, if you want to use openFrameworks for your own Android applications, I would highly recommend just using my <a href="https://github.com/falcon4ever/openFrameworks">openFrameworks fork</a> instead (until they accept my pull request). It includes all the patches from the tutorial and it should be compatibly with the latest NDK. The <a href="http://www.multigesture.net/articles/how-to-setup-openframeworks-for-android-on-windows/">tutorial</a> actually also explains how to run one of the examples so be sure to check that out.</p><h2>Porting the GUI</h2><p>For the UI I wanted to stay as close to the iOS version as possible. As I don&#8217;t own an iOS device, Seth gave me some screenshots of NodeBeat running on iOS which I used as a reference.</p><p>Since the iOS and Android framework are quite distinct, there are cases where I had to do an alternative implementation. For example, on Android most devices have the following buttons:</p><ul><li>Back</li><li>Menu</li><li>Home</li><li>Search</li></ul><div>The iOS devices only have one button which brings you back to the home screen. In the original implementation of NodeBeat on iOS, there is a shortcut on the canvas that popup a menubar allowing you to access different option menus. On Android however we can use the <strong>options menu</strong> which allows us to control the flow of the application.</p><h3>Example: Menu bar</h3><p>So instead of writing the menu code in C++, I only had to create a <a href="http://developer.android.com/guide/topics/ui/menus.html#options-menu">XML file for the option menu</a>. It looks like this:</div><div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;utf-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;menu</span> <span style="color: #000066;">xmlns:android</span>=<span style="color: #ff0000;">&quot;http://schemas.android.com/apk/res/android&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;item</span> <span style="color: #000066;">android:id</span>=<span style="color: #ff0000;">&quot;@+id/node&quot;</span></span>
<span style="color: #009900;">          <span style="color: #000066;">android:icon</span>=<span style="color: #ff0000;">&quot;@drawable/node_icon&quot;</span></span>
<span style="color: #009900;">          <span style="color: #000066;">android:title</span>=<span style="color: #ff0000;">&quot;Node&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;item</span> <span style="color: #000066;">android:id</span>=<span style="color: #ff0000;">&quot;@+id/audio&quot;</span></span>
<span style="color: #009900;">          <span style="color: #000066;">android:icon</span>=<span style="color: #ff0000;">&quot;@drawable/audio_icon&quot;</span></span>
<span style="color: #009900;">          <span style="color: #000066;">android:title</span>=<span style="color: #ff0000;">&quot;Audio&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
          ...
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/menu<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div><div>Basically you define a unique id (this allows you to reference it in the Java source code), tell it which icon to use and give it a title. You need to do this for every entry, but apart from that, the Android framework will handle how to display it (depending on orientation and the number of menu items)</p><p>After the user touches the menu button on Android, it will popup the option menu:</p></div><p><img title="menu-ios" src="http://www.multigesture.net/wp-content/uploads/2011/11/menu-ios-152x300.png" alt="" width="152" height="300" /> <a href="http://www.multigesture.net/wp-content/uploads/2011/11/Arrow1.png"><img title="Arrow" src="http://www.multigesture.net/wp-content/uploads/2011/11/Arrow1.png" alt="" width="100" height="300" /></a> <img title="menu-android" src="http://www.multigesture.net/wp-content/uploads/2011/11/menu-android-180x300.png" alt="" width="180" height="300" /></p><h3>Example: Audio menu</h3><div>Other menu elements such as the popup menu for the Audio, Rhythm and Settings menu required a different approach. I could&#8217;ve switched Views on Android, but in my opinion that would be a bad UI design decision. The problem with this is that the user would be taken away from the NodeBeat activty. Instead I much more prefer to use the <a href="http://developer.android.com/guide/topics/ui/menus.html#context-menu">context menu</a> that the Android framework provides. This menu popups up and is placed over your current Activity.</p><p>While it is on the foreground, the activity in the background is still visible and continues running. Another benefit of this approach is that the user will get immediate feedback when adjusting the audio settings. As like the menu, this <a href="http://developer.android.com/guide/topics/ui/layout-objects.html">UI layout</a> is created entirely in XML.</div><p><img class="alignnone size-medium wp-image-2110" title="audiomenu-ios" src="http://www.multigesture.net/wp-content/uploads/2011/11/audiomenu-ios-153x300.png" alt="" width="153" height="300" /> <a href="http://www.multigesture.net/wp-content/uploads/2011/11/Arrow1.png"><img title="Arrow" src="http://www.multigesture.net/wp-content/uploads/2011/11/Arrow1.png" alt="" width="100" height="300" /></a> <img class="alignnone size-medium wp-image-2108" title="audiomenu-android" src="http://www.multigesture.net/wp-content/uploads/2011/11/audiomenu-android-180x300.png" alt="" width="180" height="300" /></p><h3>Example: Recording dialog</h3><div>In some cases the context menu might be a bit of overkill if you want to let the user decide on a question. For example, in the example below we want to inform the user how to record his NodeBeat creation. All we need is a simple dialog that either lets the user confirm the action or decline it. In such cases Android provides dialogs which can be build with an <a href="http://developer.android.com/guide/topics/ui/dialogs.html">AlertDialog.Builder</a></div><div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">AlertDialog.<span style="color: #006633;">Builder</span> builder <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> AlertDialog.<span style="color: #006633;">Builder</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
builder.<span style="color: #006633;">setMessage</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;You can stop recording by pressing the record button in the menu again&quot;</span><span style="color: #009900;">&#41;</span>
       .<span style="color: #006633;">setCancelable</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span>
       .<span style="color: #006633;">setPositiveButton</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Yes&quot;</span>, <span style="color: #000000; font-weight: bold;">new</span> DialogInterface.<span style="color: #006633;">OnClickListener</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
           <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onClick<span style="color: #009900;">&#40;</span>DialogInterface dialog, <span style="color: #000066; font-weight: bold;">int</span> id<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #666666; font-style: italic;">// Start recording</span>
           <span style="color: #009900;">&#125;</span>
       <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>
       .<span style="color: #006633;">setNegativeButton</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;No&quot;</span>, <span style="color: #000000; font-weight: bold;">new</span> DialogInterface.<span style="color: #006633;">OnClickListener</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
           <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onClick<span style="color: #009900;">&#40;</span>DialogInterface dialog, <span style="color: #000066; font-weight: bold;">int</span> id<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                dialog.<span style="color: #006633;">cancel</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Cancel dialog</span>
           <span style="color: #009900;">&#125;</span>
       <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
AlertDialog alert <span style="color: #339933;">=</span> builder.<span style="color: #006633;">create</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
alert.<span style="color: #006633;">setTitle</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Start recording&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div><p><a href="http://www.multigesture.net/wp-content/uploads/2011/11/recording-ios.png"><img class="alignnone size-medium wp-image-2122" title="recording-ios" src="http://www.multigesture.net/wp-content/uploads/2011/11/recording-ios-152x300.png" alt="" width="152" height="300" /></a> <a href="http://www.multigesture.net/wp-content/uploads/2011/11/Arrow1.png"><img class="alignnone size-full wp-image-2119" title="Arrow" src="http://www.multigesture.net/wp-content/uploads/2011/11/Arrow1.png" alt="" width="100" height="300" /></a> <img class="alignnone size-medium wp-image-2123" style="border-style: initial; border-color: initial;" title="recording-android" src="http://www.multigesture.net/wp-content/uploads/2011/11/recording-android-180x300.png" alt="" width="180" height="300" /></p><h2>Using JNI Callbacks</h2><p>After we&#8217;ve ported the UI, we still need to pass on our settings to the core application. Fortunately we can use JNI callbacks to get and set NodeBeat&#8217;s properties. It is good to know that you should minimize the number of JNI callbacks for performance reasons (so don&#8217;t go mental and call tons of JNI methods each time you render a frame).</p><p>Let say we would like to pass a value from one of the sliders from the Audio context menu to our NodeBeat core. In such case we first create a new static method in our Java source file:</p><h3>OFActivity.java</h3><div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">native</span> <span style="color: #000066; font-weight: bold;">void</span> sliderChanged<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">float</span> v<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div><p>It is important to use the <code>static</code> and <code>native</code> keyword when you define your method. This is all we need to do in our java code and this method can be used anywhere in our java class.</p><p>Now the tricky part is how to implement the function on the C++ side of your application. It&#8217;s not exactly complex, but you will have to pay attention to a few details. Three things are important here:</p><ol><li>The namespace (in Java)</li><li>The class name</li><li>The method name</li></ol><p>If we assume we&#8217;re implementing this callback in one of the openFrameworks examples, this means:</p><ol><li>The namespace (in Java): cc.openframeworks.androidEmptyExample</li><li>The class name: OFActivity</li><li>The method name: sliderChanged</li></ol><h3>main.cpp</h3><p>Here is the code you implement in C++</p><div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &lt;jni.h&gt;</span>
<span style="color: #0000ff;">extern</span> <span style="color: #FF0000;">&quot;C&quot;</span><span style="color: #008000;">&#123;</span>
<span style="color: #0000ff;">void</span> Java_cc_openframeworks_androidEmptyExample_OFActivity_sliderChanged <span style="color: #008000;">&#40;</span>JNIEnv<span style="color: #000040;">*</span>  env, jclass  thiz, jfloat value<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
<span style="color: #666666;">// Do smth here</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div><p>As ugly as this method looks like, take a brief look at how it is constructed. It starts with the return type (which is void just like how we specified it in Java). Next it starts with <code>Java_</code> and is succeeded by <code>the namespace</code>, <code>classname </code>, <code>method name</code>. All dots from the namespace are replaced by underscores and between each element we place an underscore as well.</p><p>In the arguments list, the &#8220;JNIEnv*  env, jclass  thiz&#8221; part is mandatory (so if you have a something like this: <code>public static native void methodname()</code>, it would <code>be void methodname(JNIEnv*  env, jclass  thiz)</code>). For our method we want to pass a float as argument. For some reasons you can&#8217;t just pass a float, you will need to use <a href="http://en.wikipedia.org/wiki/Java_Native_Interface#Mapping_types">JNI mapping types</a>. The float becomes a jfloat.<br /> Note: for booleans you need to compare the value to <strong>JNI_TRUE</strong> or <strong>JNI_FALSE</strong> and not to <strong>true</strong> or <strong>false</strong>.</p><h2>Honeycomb Tablets</h2><p>Unlike the iOS devices from Apple, Android devices run at so many <a href="http://developer.android.com/guide/practices/screens_support.html">different configurations</a> and API levels, it can be a bit tricky to support all of them. For NodeBeat we decided to create two versions: A phone version and tablet version. We basically distinguish between phones who are running Eclair or Gingerbread (2.2+) and tablets running Honeycomb (3.0). On the Android Market it seems like we only provide one version, but depending on what device you&#8217;re using to download the app, it will give you a <a href="http://developer.android.com/guide/practices/screens-distribution.html#MultiApks">certain version</a>.</p><p>In order to maximize the use of the display, I&#8217;m using this line in the AndroidManifest.xml file:</p><div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="xml" style="font-family:monospace;">android:theme=&quot;@android:style/Theme.NoTitleBar.Fullscreen&quot;</pre></td></tr></table></div><p>On phones it sets the application to fullscreen. While this works for anything running Android 2.2+, it is a problem on Honeycomb devices. Honeycomb tablets don&#8217;t have any physical buttons and when the application is running in fullscreen mode, there is no shortcut to the menu button. This shortcut is normally placed in the top right corner.</p><p><a class="thickbox" title="Honeycomb's menu in the top right corner" href="http://www.multigesture.net/wp-content/uploads/2011/11/P20111010235419.png"><img class="alignnone size-medium wp-image-2102" title="P20111010235419" src="http://www.multigesture.net/wp-content/uploads/2011/11/P20111010235419-300x187.png" alt="" width="300" height="187" /></a></p><p>This means that for the tablet version, we run the application in regular display mode.<br /> Other than that, NodeBeat provides a rich user experience on tablet devices such as the XOOM or Asus transfomer.</p><p>Earbleeding masterpiece created by <a href="http://sharathpatali.wordpress.com/">Sharath Patali</a> (professional coder, horrific musician)<br /> <a class="thickbox" title="Earbleeding masterpiece created by Sharath Patali (professional coder, horrific musician)" href="http://www.multigesture.net/wp-content/uploads/2011/11/P20111011000238.png"><img class="alignnone size-medium wp-image-2101" title="P20111011000238" src="http://www.multigesture.net/wp-content/uploads/2011/11/P20111011000238-300x187.png" alt="" width="300" height="187" /></a></p><h2>Android Market</h2><p>Publishing the app to the Android market is no hassle at all (we were just a bit <a href="http://createdigitalmusic.com/2011/10/nodebeat-visual-sequencer-for-ios-android-built-with-free-tools-back-on-android-market/">unfortunate</a> and had our app pulled down by accident). There is no annual fee (just a one time 25$) and apps are approved instantly. The dev guide provides a <a href="http://developer.android.com/guide/publishing/publishing_overview.html">comprehensive overview</a> on how to build your project in release mode and how to sign it.</p><h2>Go get it!</h2><p><strong>NodeBeat is available on the Android market</strong>:<br /> <a href="https://market.android.com/details?id=com.AffinityBlue.NodeBeat">https://market.android.com/details?id=com.AffinityBlue.NodeBeat</a></p><p><strong>Try it out! It&#8217;s just a dollar</strong> <img src='http://www.multigesture.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p><p>Website: <a href="http://nodebeat.com/">http://nodebeat.com/</a><br /> Twitter: <a href="http://twitter.com/NodeBeat">http://twitter.com/NodeBeat</a></p> ]]></content:encoded> <wfw:commentRss>http://www.multigesture.net/2011/11/19/nodebeat-openframeworks-and-android/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>An introduction to emulation</title><link>http://www.multigesture.net/2011/03/29/an-introduction-to-emulation/</link> <comments>http://www.multigesture.net/2011/03/29/an-introduction-to-emulation/#comments</comments> <pubDate>Mon, 28 Mar 2011 22:35:32 +0000</pubDate> <dc:creator>Laurence Muller</dc:creator> <category><![CDATA[Application]]></category> <category><![CDATA[Blogroll]]></category> <category><![CDATA[Featured]]></category> <category><![CDATA[Howto]]></category> <category><![CDATA[application]]></category> <category><![CDATA[diy]]></category> <category><![CDATA[emulation]]></category> <category><![CDATA[hacking]]></category> <category><![CDATA[technology]]></category> <category><![CDATA[tutorial]]></category><guid isPermaLink="false">http://www.multigesture.net/?p=1847</guid> <description><![CDATA[In the early 90s I primarly used my Commodore 64 (C64) for gaming. As Santa never gave us a Nintendo, I probably used my C64 until the late 90s. At that point I was introduced to the concept of emulators. Emulators are computer programs that allow you to run software that wasn&#8217;t designed for your [...]]]></description> <content:encoded><![CDATA[<p>In the early 90s I primarly used my <a href="http://www.youtube.com/watch?v=eY2gK1MPgh8">Commodore 64 (C64) for gaming</a>. As <a href="http://www.youtube.com/watch?v=a8q-elxC6gU">Santa never gave us a Nintendo</a>, I probably used my C64 until the late 90s. At that point I was introduced to the concept of emulators. Emulators are computer programs that allow you to run software that wasn&#8217;t designed for your computer platform. For example, with emulators you could run games from the NES or Sega Master System on PCs. Nowadays computers have enough resources to run games from modern consoles such as the <a href="http://www.dolphin-emulator.com/">Nintendo Gamecube/Wii</a> and <a href="http://pcsx2.net/">Playstation 2</a>.</p><p>Of course, there is always the debate whether it is legal to build an emulator. Console manufacturers will <a href="http://www.nintendo.com/corp/legal.jsp#emulator">always forbid</a> any type of emulation of their systems. Although its a rather grey area as most documents on the chip design are publicly available (e.g. MIPS / ARM instruction sets).</p><p><a class="thickbox" title="Space Invaders" href="http://www.multigesture.net/wp-content/uploads/2011/03/spaceinvaders.jpg"><img class="size-medium wp-image-1702 aligncenter" title="Space Invaders" src="http://www.multigesture.net/wp-content/uploads/2011/03/spaceinvaders-300x150.jpg" alt="" width="300" height="150" /></a></p><p>Since I got excited about emulation in general, I started to do some research on how to build one myself. As I didn&#8217;t want to spend days or even weeks to get some results, I looked for a simple system. A friend introduced me to a small system called the <a href="http://en.wikipedia.org/wiki/CHIP-8">Chip 8</a>.<br /> The Chip 8 itself didn&#8217;t existed as a hardware system, but was implemented in software. Due to the small instruction set (<a href="http://en.wikipedia.org/wiki/CHIP-8#Opcode_table">~30 opcodes</a>), it was a very good candidate to work on as a first emulation project. The instruction set defines the functionality of the CPU. It for example contains instructions that allow the CPU to load or store data, but also perform mathematical tasks such as multiplications.</p><p>Having worked on a couple of emulation projects (and emulator plugins), I started to write a guide that will hopefully help out aspiring emulator authors and inspire emulation enthusiast. The guide explains how emulators work and provides a detailed overview on how to write a Chip 8 interpreter from scratch.</p><p>Writing a Chip 8 emulator shouldn&#8217;t be too time consuming. On average people tend to finish such project in one or two days. It&#8217;s a fun project to test out your programming skills and of course quite educational (and it isn&#8217;t just for CS majors <img src='http://www.multigesture.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> )</p><p>If you&#8217;re ready to take up the challenge, click the link below! Have fun!</p><ul><li><a href="http://www.multigesture.net/articles/how-to-write-an-emulator-chip-8-interpreter/">How to write an emulator (CHIP-8 interpreter)</a></li></ul><p><a class="thickbox" title="Brix: a Breakout clone" href="http://www.multigesture.net/wp-content/uploads/2011/03/brix.jpg"><img class="size-medium wp-image-1699 aligncenter" title="Brix" src="http://www.multigesture.net/wp-content/uploads/2011/03/brix-300x150.jpg" alt="" width="300" height="150" /></a></p> ]]></content:encoded> <wfw:commentRss>http://www.multigesture.net/2011/03/29/an-introduction-to-emulation/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Earth Friends, a social network visualization</title><link>http://www.multigesture.net/2010/12/31/earth-friends-a-social-network-visualization/</link> <comments>http://www.multigesture.net/2010/12/31/earth-friends-a-social-network-visualization/#comments</comments> <pubDate>Fri, 31 Dec 2010 01:59:33 +0000</pubDate> <dc:creator>Laurence Muller</dc:creator> <category><![CDATA[Application]]></category> <category><![CDATA[Featured]]></category> <category><![CDATA[Infovis]]></category> <category><![CDATA[application]]></category> <category><![CDATA[facebook]]></category> <category><![CDATA[google earth]]></category> <category><![CDATA[hacking]]></category> <category><![CDATA[hci]]></category> <category><![CDATA[infovis]]></category> <category><![CDATA[technology]]></category><guid isPermaLink="false">http://www.multigesture.net/?p=1385</guid> <description><![CDATA[Last week I blogged about a new project I was working on. For the past few days I went through the code again and decided to clean it up a bit for the release. It is pretty much completed now, therefor I have made it available on Facebook. Summary: &#8220;Earth Friends is a free Facebook [...]]]></description> <content:encoded><![CDATA[<p>Last week I blogged about <a href="http://www.multigesture.net/2010/12/21/where-are-you/">a new project</a> I was working on. For the past few days I went through the code again and decided to clean it up a bit for the release. It is pretty much completed now, therefor I have made it available on Facebook.</p><p>Summary:<br /> <em>&#8220;Earth Friends is a free Facebook application to visualize your social network on Google Earth. Locate your friends by using the Google Earth Webplugin or download your personal datafile for use with the Desktop version of Google Earth.&#8221;</em></p><p><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><fb:like-box href="http://www.facebook.com/apps/application.php?id=131267463599595" width="400" show_faces="true" stream="false" header="true"></fb:like-box></p><p><a href="http://www.facebook.com/apps/application.php?id=131267463599595&#038;v=info" target="_blank"><img class="aligncenter size-full wp-image-1390" src="http://www.multigesture.net/wp-content/uploads/2010/12/earthfriends1.jpg" alt="" width="520" height="164" /></a></p><h2>Rewriting&#8230;</h2><p>While my code from last week was running fine, there was a lot of room for improvement. Basically three major parts changed:</p><ol><li>The database structure</li><li>Using a template engine</li><li>File compression</li></ol><h3>MySQL</h3><p>The first thing I worked on was the database itself. The local database is primarily used for converting a location (defined by a city, state and country name) to a latitude and longitude.<br /> Each time we need a location, we query the database, simple as that.</p><p>So let&#8217;s look at the following example:<br /> First assume you have about 100 friends on Facebook. Probably most of them share their current location, but some of them might not want to share their location with Facebook apps or simply did not filled out the location at all.<br /> If 75 friends filled this field with their current location, the old code would query the database 76 times (75 times for your friends + 1 time for your location).</p><p>While this looks like a lot of queries, the time for a query to complete also depends on the design of the database. As I was using <a href="http://www.maxmind.com/app/worldcities">MaxMind cities database</a>, I initially imported all the data into one MySQL table. Just because it was convient to work with. However, the dataset has about 2.699.356 entries (cities).<br /> Doing a search 75 times within this table was not going to be fast&#8230;</p><p><img class="aligncenter size-full wp-image-1399" src="http://www.multigesture.net/wp-content/uploads/2010/12/database.jpg" alt="" width="520" height="164" /></p><p>Besides the users&#8217; patience, I am also limited by PHP&#8217;s execution time limit. I think that scripts are often allowed to run for 30 or 60 seconds, although I can&#8217;t stand a website that is taking longer than 10 seconds to show up.</p><p>So what to do next? Can we find a way to split the database into multiple small tables? Just limiting the number of entries to a fixed number (e.g. 100.000) wasn&#8217;t going to work as I would need some kind of lookup system in order to figure out where I could find my city.</p><p><strong>Improvement one</strong><br /> The easiest solution I found for it (not saying its perfect) was by splitting the database by country. In my case I have 231 countries in the database, thus 231 tables are created.</p><p>Taking a look at the top 3 countries in our database reveals the following:</p><ul><li>Russia &#8211; 176.934 cities</li><li>USA &#8211; 141.989 cities</li><li>China &#8211; 117.508 cities</li></ul><p>The average number per country is around the 20.000 cities. While the top 3 shows a significant higher quantity than the average, look ups are performed <em>much</em> faster than before.</p><p><strong>Improvement two</strong><br /> We could&#8217;ve stopped here with improving the database part as the results were reasonable. However, it is a small effort to tweak it a bit more.</p><p>In our example, we query 76 locations from the database. But wait&#8230; <strong>what</strong> did we query? The <strong>location</strong> of <strong>friends</strong>! And what do a lot of friends have in common? Right, they share the <strong>same location</strong>. So by first creating a list of cities we need to look up, we can reduce the number of queries required to collect our data.</p><h3>Smarty Template Engine</h3><p>While PHP provides a nice environment for rapid prototyping, it can also become a mess easily. Using print or echo statements is fine for testing purposes but it is better to <a href="http://www.smarty.net/why_use">keep code separated from HTML</a>.</p><p>This is why you need to use template engines. When using a template engine, you first collect data from your database and then parse your variables and arrays to the template engine. In your templates you specify where this data need to be placed. (Summary: PHP is used for data collection and prepared into arrays, Template engines use these arrays and are used for the actual design of the website).<br /> Fortunately, there are free open source template engines such as <strong><a href="http://www.smarty.net/">Smarty</a></strong>.</p><p>Take a look at the following code:</p><div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="smarty" style="font-family:monospace;"><span style="color: #008080; font-style: italic;">{* Add placemark for friends *}</span>
<span style="color: #D36900;">&#123;</span><span style="color: #0600FF;">foreach</span> <span style="color: #00aaff;">$friendlist</span> as <span style="color: #00aaff;">$friend</span><span style="color: #D36900;">&#125;</span>
  <span style="color: #009000;">&lt;Placemark&gt;</span>
    <span style="color: #009000;">&lt;name&gt;</span><span style="color: #D36900;">&#123;</span><span style="color: #00aaff;">$friend</span>.<span style="color: #6A0A0A;">name</span><span style="color: #D36900;">&#125;</span><span style="color: #009000;">&lt;/name&gt;</span>
    <span style="color: #009000;">&lt;styleUrl&gt;</span>#<span style="color: #D36900;">&#123;</span><span style="color: #00aaff;">$friend</span>.<span style="color: #006600;">uid</span><span style="color: #D36900;">&#125;</span><span style="color: #009000;">&lt;/styleUrl&gt;</span>
    <span style="color: #009000;">&lt;Point&gt;</span>	
      <span style="color: #009000;">&lt;coordinates&gt;</span><span style="color: #D36900;">&#123;</span><span style="color: #00aaff;">$friend</span>.<span style="color: #006600;">lon</span><span style="color: #D36900;">&#125;</span>,<span style="color: #D36900;">&#123;</span><span style="color: #00aaff;">$friend</span>.<span style="color: #006600;">lat</span><span style="color: #D36900;">&#125;</span>,0<span style="color: #009000;">&lt;/coordinates&gt;</span>
    <span style="color: #009000;">&lt;/Point&gt;</span>
  <span style="color: #009000;">&lt;Placemark&gt;</span>
<span style="color: #D36900;">&#123;</span><span style="color: #D36900;">/</span><span style="color: #0600FF;">foreach</span><span style="color: #D36900;">&#125;</span></pre></td></tr></table></div><p>This is an actual code snippet from the template responsible for generating the KML. This particular section is used to display your friends icon on Google Earth.</p><p>Within the template I can specify a block (in the example its a Placemark) that will be looped. After <a href="http://www.smarty.net/crash_course">setting up Smarty</a> and collecting data from the database, I pass the result (<strong>$friendlist</strong>) to Smarty. In the template engine, it will now perform loop through this foreach loop and place the variables in the correct location.</p><p>A few more benefits of using a template engine is that you can store the results in a cache. By caching the results we can skip &#8216;expensive&#8217; MySQL queries if we know the page hasn&#8217;t changed. By specifying the cache lifetime (for example 30 minutes), we can make sure that Smarty will regenerate the page if the cached page is older than 30 minutes.</p><h3>ZIP</h3><p>In the previous version of Earth Friends, I embedded the KML file into the header of the website (in Javascript). While this method works fine for small data sets, it has a large impact on page loading and render times when data sets are growing.</p><p>KML files are plain text files formatted in XML. Besides KML files, Google Earth also accept compressed KML files which have the extension KMZ. KMZ files are basically KML files compressed with <a href="http://en.wikipedia.org/wiki/ZIP_(file_format)">ZIP</a>.<br /> Tests show noticeable differences in loading times when using KMZ. For example, my test data set in KML was about 693 KB. After compressing this file using zip (max. compression), the size was reduced to 92 KB. That&#8217;s around 13% of the original file size! As a result, loading times were reduced significantly.</p><h2>Where can I find the application?</h2><p>Ready to try out this application on facebook? Just click the following link to open up Earth Friends: <a href="http://apps.facebook.com/earthfriends/" target="_blank">Earth Friends application on Facebook</a>.</p><p>After authorizing Earth Friends to access your profile data, it will reload the page and launch the Google Earth browser plugin. If the plugin is not installed, please follow the instructions that are displayed instead. The plugin should work in Windows and Mac OS X.</p><p><strong>Important</strong>: Make sure you set your own location (with the correct privacy settings) or the curves will not appear!</p><p>More information can be found on <a href="http://www.facebook.com/apps/application.php?id=131267463599595&amp;v=wall" target="_blank">Earth Friends profile page on Facebook</a>.</p><h2>How to use this?</h2><p>To help you get started with Earth Friends, I have created two screencasts which demonstrate you how to add Earth Friends to your Facebook account and use the application.</p><p>Tutorial 1: How to use Earth Friends (View in 720p HD)</p><p><object width="500" height="306"><param name="movie" value="http://www.youtube.com/e/oz61wN5vqt0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/e/oz61wN5vqt0" type="application/x-shockwave-flash" width="500" height="306" allowscriptaccess="always" allowfullscreen="true"></embed></object></p><p>Tutorial 2: How to download the KMZ file for Google Earth Desktop (View in 720p HD)</p><p><object width="500" height="306"><param name="movie" value="http://www.youtube.com/e/Q5gvVePJOqg"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/e/Q5gvVePJOqg" type="application/x-shockwave-flash" width="500" height="306" allowscriptaccess="always" allowfullscreen="true"></embed></object></p> ]]></content:encoded> <wfw:commentRss>http://www.multigesture.net/2010/12/31/earth-friends-a-social-network-visualization/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Where are you?</title><link>http://www.multigesture.net/2010/12/21/where-are-you/</link> <comments>http://www.multigesture.net/2010/12/21/where-are-you/#comments</comments> <pubDate>Tue, 21 Dec 2010 16:06:59 +0000</pubDate> <dc:creator>Laurence Muller</dc:creator> <category><![CDATA[Application]]></category> <category><![CDATA[Featured]]></category> <category><![CDATA[Infovis]]></category> <category><![CDATA[application]]></category> <category><![CDATA[facebook]]></category> <category><![CDATA[google earth]]></category> <category><![CDATA[hacking]]></category> <category><![CDATA[hci]]></category> <category><![CDATA[infovis]]></category> <category><![CDATA[technology]]></category><guid isPermaLink="false">http://www.multigesture.net/?p=1304</guid> <description><![CDATA[Last weekend I&#8217;ve been working on a new project. Since I already had some experience  generating KML files for use with Google Earth (wikileaks projects!) I started to think of something else that I could visualize&#8230; perhaps see where my friends are? Because I&#8217;m using Facebook to connect with my friends, I decided to dig into the [...]]]></description> <content:encoded><![CDATA[<p>Last weekend I&#8217;ve been working on a new project. Since I already had some experience  generating <a href="http://code.google.com/apis/kml/documentation/">KML files</a> for use with <a href="http://www.google.com/earth/index.html">Google Earth</a> (wikileaks projects!) I started to think of something else that I could visualize&#8230; perhaps see where my friends are?</p><p>Because I&#8217;m using Facebook to connect with my friends, I decided to dig into the documentation of the facebook APIs. Apparently there are multiple ways to get hold of your and your friends information. The most commonly used APIs are: <a href="http://developers.facebook.com/docs/api">Graph API</a> / <a href="http://developers.facebook.com/docs/reference/fql/">FQL</a> . The first one lets you retrieve information about a friend or page by loading a specific URL, the second one lets you actually send a SQL query to retrieve the  information.</p><p>Since I want to make this a hassle free experience, I decided to make a Facebook application which would use the <a href="http://code.google.com/apis/earth/">Google Earth Web plugin</a>. This way, users only need to download the plugin, but everything works just in the browser.</p><p><img src="http://www.multigesture.net/wp-content/uploads/2010/12/fbbanner.jpg" alt="Finding friends on Google Earth" title="Finding friends on Google Earth" width="520" height="196" class="aligncenter size-full wp-image-1361" /></p><h2>How does it work?</h2><p>Basically a Facebook app is just a website running on some server. In my case, I&#8217;m hosting my application on the same domain as my blog. Since the application is embedded into the Facebook website, normal users won&#8217;t notice. The app itself can be written in all kinds of languages but <a href="https://github.com/facebook/php-sdk/">for the sake of simplicity I used PHP</a>.</p><p>First we need to connect to Facebook using an <a href="https://github.com/facebook/php-sdk/">API/SDK</a>. This allows us to authenticate and securely connect to the Facebook servers. After enstablishing a connection, we use FQL to query: Our friendslist and the location of our friends. Unfortunately the friendslist only contains the name of the location and not the geospatial coordinates.</p><p>Therefor I had to create a lookup database that would translate a City/State/Country name into a geospatial coordinate (latitude and longitude). This was done by downloading a free database from <a href="http://www.maxmind.com/app/worldcities">Maxmind.com</a>.</p><p>Now we should have all data available to create our KML file on the fly. For now I embed the KML result into the javascript header which seems to work fine for ~200 friends. I still need to do some benchmarks to see how well this scales. A demonstration video of the result can be found below:</p><h2>Video</h2><p><object width="500" height="306"><param name="movie" value="http://www.youtube.com/v/LpAFybFQVVE?fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/LpAFybFQVVE?fs=1" type="application/x-shockwave-flash" width="500" height="306" allowscriptaccess="always" allowfullscreen="true"></embed></object></p><h2>Can I try?</h2><p>Since this project is still WIP, it is not available yet in the Facebook Application Directory. I&#8217;m planning to release this application for free soon.</p> ]]></content:encoded> <wfw:commentRss>http://www.multigesture.net/2010/12/21/where-are-you/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Wikileaks mirror spread</title><link>http://www.multigesture.net/2010/12/17/wikileaks-mirror-spread/</link> <comments>http://www.multigesture.net/2010/12/17/wikileaks-mirror-spread/#comments</comments> <pubDate>Fri, 17 Dec 2010 02:13:37 +0000</pubDate> <dc:creator>Laurence Muller</dc:creator> <category><![CDATA[Application]]></category> <category><![CDATA[Featured]]></category> <category><![CDATA[Infovis]]></category> <category><![CDATA[application]]></category> <category><![CDATA[google earth]]></category> <category><![CDATA[hacking]]></category> <category><![CDATA[hci]]></category> <category><![CDATA[infovis]]></category> <category><![CDATA[showcase]]></category> <category><![CDATA[technology]]></category><guid isPermaLink="false">http://www.multigesture.net/?p=1264</guid> <description><![CDATA[In my previous post I presented a visualization of the Wikileaks mirrors spread of December 8th. While it is interesting to see the spread of a certain day, it is even more interesting to see how the spread is evolving over time. By keeping track of updates of the mirror page on Wikileaks, I was [...]]]></description> <content:encoded><![CDATA[<h3><span style="font-weight: normal; font-size: 13px;">In my <a href="http://www.multigesture.net/2010/12/09/visualizing-wikileaks-mirrors/">previous post</a> I presented a visualization of the</span><span style="font-weight: normal; font-size: 13px;"> Wikileaks mirrors spread of December 8th.</span></h3><p><span style="font-weight: normal; font-size: 13px;">While it is interesting to see the spread of a certain day, it is even more interesting to see how </span>the spread is evolving over time. By keeping track of updates of the mirror page on <a href="http://46.59.1.2/">Wikileaks</a>, I was able to collect enough data for an animated version of the spread. My current dataset contains a 7 day period covering December 5th to December 12th.</p><p><img src="http://www.multigesture.net/wp-content/uploads/2010/12/wikileaks-v2-1a.jpg" alt="Wikileaks mirror spread" title="Wikileaks mirror spread" width="520" height="196" class="aligncenter size-full wp-image-1336" /></p><p>As some of the commenters pointed out, the edges (curves) in the previous dataset didn&#8217;t always followed the shortest path. This was due to the (simple &amp; stupid) algorithm I was using to draw the path between two points (basically just the mathematical shortest distance). In the latest dataset (download link is at the bottom) this is corrected. In particular this website: <a href="http://www.movable-type.co.uk/scripts/latlong.html">http://www.movable-type.co.uk</a> was very useful for figuring out the <a href="http://en.wikipedia.org/wiki/Great-circle_distance">the correct path</a>.</p><p><strong>* update 21-12-2010 11pm CET *</strong><br /> - Got featured on <a href="http://www.readwriteweb.com/archives/watch_how_wikileaks_mirrors_spread_around_the_worl.php">ReadWriteWeb</a>, Thanks!</p><p><strong>* update 23-12-2010 10pm CET * </strong><br /> - Embedded Google Earth web plugin in <a href="#demo">demo section</a></p><h2>Mirror spread</h2><p>The result of plotting the spread in a line chart:</p><p><img title="Growth of the number of mirrors" src="http://www.multigesture.net/wp-content/uploads/2010/12/wikileakschart1.png" alt="Growth of the number of mirrors" width="440" height="220" class="aligncenter"/></p><h2>Top 10 locations</h2><p>An overview of the spread based on country:</p><p><img title="Mirrors spread around the world" src="http://www.multigesture.net/wp-content/uploads/2010/12/wikileakschart2.png" alt="Mirrors spread around the world" width="480" height="320" class="aligncenter"/></p><ol><li>Germany: <strong>498</strong></li><li>United States: <strong>394</strong></li><li>France: <strong>194</strong></li><li>Netherlands: <strong>152</strong></li><li>United Kingdom: <strong>72</strong></li><li>Sweden: <strong>67</strong></li><li>Canada: <strong>49</strong></li><li>Spain: <strong>47</strong></li><li>Switzerland: <strong>36</strong></li><li>Russian Federation: <strong>32</strong></li></ol><h2>Screencast / Video</h2><p>Short screencast (Watch it in <strong>HD 720p</strong>, in fullscreen mode)</p><p><object width="500" height="306"><param name="movie" value="http://www.youtube.com/v/jx54EkNeGR4?fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/jx54EkNeGR4?fs=1" type="application/x-shockwave-flash" width="500" height="306" allowscriptaccess="always" allowfullscreen="true"></embed></object></p><h2 id="demo">﻿Online Demo</h2><p>To view this demo you will need to install the <a href="http://www.google.com/earth/explore/products/plugin.html">Google Earth Browser Plug-in</a></p><div id="map3d" style="height: 450px; width: 520px;"></div><p><strong>Note: You need to move <a href="http://earth.google.com/userguide/v5/ug_gps.html">the range marker</a> all the way to the left to make the timeline work:</strong></p><ul><li>Move the time slider all the way to the right<br /> <img src="http://www.multigesture.net/wp-content/uploads/2010/12/slider1.jpg" alt="" title="slider" width="341" height="65" class="aligncenter size-full wp-image-1352" /></li><li>Move the range marker (the small attachment on the left of the time slider) all the way to the left<br /> <img src="http://www.multigesture.net/wp-content/uploads/2010/12/slider2.jpg" alt="" title="slider" width="341" height="65" class="aligncenter size-full wp-image-1352" /></li><li>Now you can move the time slider as you want<br /> <img src="http://www.multigesture.net/wp-content/uploads/2010/12/slider3.jpg" alt="" title="slider" width="341" height="65" class="aligncenter size-full wp-image-1352" /></li></ul><h2>KML source</h2><p>If the online demo doesn&#8217;t work for you, you can also try it in Google Earth!</p><ul><li>Make sure you’ve installed <a href="http://www.google.com/intl/en/earth/index.html">Google Earth</a>.</li><li>Next download and unzip the file following file:</li><li><a class="downloadlink" href="http://www.multigesture.net/wp-content/plugins/download-monitor/download.php?id=34" title=" downloaded 222 times" >Wikileaks Google Earth KML files (Animated) (222)</a></li><li>Open up the KMZ file.</li><li>Enjoy!</li></ul> ]]></content:encoded> <wfw:commentRss>http://www.multigesture.net/2010/12/17/wikileaks-mirror-spread/feed/</wfw:commentRss> <slash:comments>6</slash:comments> </item> <item><title>Visualizing Wikileaks mirrors</title><link>http://www.multigesture.net/2010/12/09/visualizing-wikileaks-mirrors/</link> <comments>http://www.multigesture.net/2010/12/09/visualizing-wikileaks-mirrors/#comments</comments> <pubDate>Thu, 09 Dec 2010 03:17:44 +0000</pubDate> <dc:creator>Laurence Muller</dc:creator> <category><![CDATA[Application]]></category> <category><![CDATA[Featured]]></category> <category><![CDATA[Infovis]]></category> <category><![CDATA[application]]></category> <category><![CDATA[google earth]]></category> <category><![CDATA[hacking]]></category> <category><![CDATA[hci]]></category> <category><![CDATA[infovis]]></category> <category><![CDATA[showcase]]></category> <category><![CDATA[technology]]></category><guid isPermaLink="false">http://www.multigesture.net/?p=1214</guid> <description><![CDATA[For the past few weeks, Wikileaks has drawn a lot of attention from the media. Mostly because of the Cablegate. Whether Julian Assange should be considered as a Hero (by publishing information) or Terrorist is an open question. Because of threats from governments, companies in the USA started to ban payment, hosting and dns services to [...]]]></description> <content:encoded><![CDATA[<p>For the past few weeks, <a href="http://en.wikipedia.org/wiki/WikiLeaks">Wikileaks</a> has drawn a lot of attention from the media. Mostly because of the <a href="http://en.wikipedia.org/wiki/United_States_diplomatic_cables_leak">Cablegate</a>.</p><p>Whether <a href="http://en.wikipedia.org/wiki/Julian_Assange">Julian Assange</a> should be considered as a Hero (by publishing information) or Terrorist is an open question. Because of threats from governments, companies in the USA started to ban <a href="http://techcrunch.com/2010/12/08/paypal-wikileaks/">payment</a>, <a href="http://www.cbsnews.com/stories/2010/12/01/tech/main7107461.shtml">hosting and dns</a> services to Wikileaks. Soon Wikileaks moved from servers based in the USA to Sweden/Switzerland.</p><p>For now Wikileaks seem to be safe, however, they also started a call for <a href="http://en.wikipedia.org/wiki/Mirror_(computing)">mirrors</a>.</p><p>Interested to see which people in the world are supporting Wikileaks, I had the idea to visualize the Wikileaks mirrors on <a href="http://www.google.com/intl/en/earth/index.html">Google Earth</a>.</p><p><img src="http://www.multigesture.net/wp-content/uploads/2010/12/wikileaks-mirrors1a.jpg" alt="Visualizing Wikileaks mirrors" title="Visualizing Wikileaks mirrors" width="520" height="196" class="aligncenter size-full wp-image-1349" /></p><p><strong>* update 09-12-2010 8pm CET * </strong><br /> - Added Google Earth web plugin links</p><p><strong>* update 10-12-2010 10am CET *</strong><br /> - Got featured on <a href="http://www.readwriteweb.com/archives/where_in_the_world_is_wikileaks_mirrored_google_ea.php">ReadWriteWeb</a> / <a href="http://www.nytimes.com/external/readwriteweb/2010/12/10/10readwriteweb-where-in-the-world-is-wikileaks-mirrored-go-46485.html?ref=technology">NY Times</a>, thanks guys!<br /> - Stay tuned for more updates!</p><p><strong>* update 23-12-2010 10pm CET * </strong><br /> - Embedded Google Earth web plugin in <a href="#demo">demo section</a></p><h2>Data mining</h2><p>In order to get the data, I went to the official Wikileaks website which had all mirrors listed on this page: <a href="http://46.59.1.2/mirrors.html">mirrors</a>. I wrote a small PHP script that would open up the mirror page and scanned the document for URLs. If a mirror was found, it would be stored in a file. At this moment there are about 1334 mirrors on the website.</p><h2>Data manipulation</h2><p>At this point I only have the URLs of the mirrors, but how do I know where these servers are located?</p><p>In order to know where the server is located, I used <a href="http://www.maxmind.com/app/geolitecity">GeoLite City</a> which is a service from <a href="http://www.maxmind.com">MaxMind</a>. GeoLite City allows you to resolve most IPs to a geospatial location. Of course it doesn&#8217;t gives the exact location, but usually it is able to show in which City the server is located, which is good enough for my purpose.</p><p>After obtaining the GeoLite City database (there is a free version!) I used PHP to write a script that would first resolve the URL to an IP address (PHP function: gethostbyname() ) and then use this IP address to look up the longtitude and latitude.</p><p>The last step was converting the data into the <a href="http://en.wikipedia.org/wiki/Keyhole_Markup_Language">KML</a> format (and adding some artificial altitude information) for use with Google Earth.</p><h2>Data visualization</h2><p>Below are some of the early results.</p><p>Currently the main server (<a href="http://46.59.1.2/">http://46.59.1.2</a>) seem to be located in Sweden, when we view the data in Google Earth we can see that a lot of mirrors are actually located in Europe.<br /> <a href="http://www.multigesture.net/wp-content/uploads/2010/12/wikileaks-mirrors1.jpg"><img class="aligncenter size-medium wp-image-1220" title="Visualizing Wikileaks mirrors" src="http://www.multigesture.net/wp-content/uploads/2010/12/wikileaks-mirrors1-300x278.jpg" alt="Visualizing Wikileaks mirrors" width="300" height="278" /></a></p><p><strong>Europe<br /> </strong>Red pin: Wikileaks server<br /> Yellow pins: Wikileaks mirrors<br /> Greenlines: Connections from the Wikileaks server to a Wikileaks mirror</p><p><a href="http://www.multigesture.net/wp-content/uploads/2010/12/wiki1.jpg"><img class="aligncenter size-medium wp-image-1216" title="Mirrors in Europe" src="http://www.multigesture.net/wp-content/uploads/2010/12/wiki1-300x210.jpg" alt="Mirrors in Europe" width="300" height="210" /></a></p><p><strong>USA</strong><br /> Wikileaks mirrors in the USA<br /> <a href="http://www.multigesture.net/wp-content/uploads/2010/12/wiki2.jpg"><img class="aligncenter size-medium wp-image-1218" title="Mirrors in the USA" src="http://www.multigesture.net/wp-content/uploads/2010/12/wiki2-300x208.jpg" alt="Mirrors in the USA" width="300" height="208" /></a></p><p><strong>Sweden</strong><br /> Since some of the servers are at the same location (probably sharing the same data center), we can click on a pin and it will expand to show all mirrors located at this data center.</p><p><a href="http://www.multigesture.net/wp-content/uploads/2010/12/wiki3.jpg"><img class="aligncenter size-medium wp-image-1219" title="Mirrors in Sweden" src="http://www.multigesture.net/wp-content/uploads/2010/12/wiki3-300x210.jpg" alt="Mirrors in Sweden" width="300" height="210" /></a></p><h2>Screencast / Video</h2><p>Short screencast (Watch it in <strong>HD 720p,</strong> in fullscreen mode)</p><p><object width="500" height="306"><param name="movie" value="http://www.youtube.com/v/26xsWTNYPxg?fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/26xsWTNYPxg?fs=1" type="application/x-shockwave-flash" width="500" height="306" allowscriptaccess="always" allowfullscreen="true"></embed></object></p><h2 id="demo">Online Demo</h2><p>To view this demo you will need to install the <a href="http://www.google.com/earth/explore/products/plugin.html">Google Earth Browser Plug-in</a></p><div id="map3d" style="height: 450px; width: 520px;"></div><p><br/></p><h2>KML source</h2><p>Want to try it out locally on your computer?</p><p>No problem! Here is how:</p><ul><li>Make sure you&#8217;ve installed <a href="http://www.google.com/intl/en/earth/index.html">Google Earth</a>.</li><li>Next download and unzip the file following file<br /> <a class="downloadlink" href="http://www.multigesture.net/wp-content/plugins/download-monitor/download.php?id=33" title=" downloaded 2942 times" >Wikileaks Google Earth KML files (2942)</a></li><li>Open the KML files one by one.</li><li>Enjoy!</li></ul> ]]></content:encoded> <wfw:commentRss>http://www.multigesture.net/2010/12/09/visualizing-wikileaks-mirrors/feed/</wfw:commentRss> <slash:comments>33</slash:comments> </item> <item><title>Research projects</title><link>http://www.multigesture.net/2010/11/25/research-projects/</link> <comments>http://www.multigesture.net/2010/11/25/research-projects/#comments</comments> <pubDate>Thu, 25 Nov 2010 21:45:35 +0000</pubDate> <dc:creator>Laurence Muller</dc:creator> <category><![CDATA[Application]]></category> <category><![CDATA[Infovis]]></category> <category><![CDATA[Multitouch]]></category> <category><![CDATA[application]]></category> <category><![CDATA[hacking]]></category> <category><![CDATA[hci]]></category> <category><![CDATA[infovis]]></category> <category><![CDATA[multitouch]]></category> <category><![CDATA[projects]]></category> <category><![CDATA[showcase]]></category> <category><![CDATA[technology]]></category><guid isPermaLink="false">http://www.multigesture.net/?p=1169</guid> <description><![CDATA[Since my graduation back in 2008, I have been working on different research projects at universities. Some of them got published, others never left the &#8216;prototype&#8217; stage. Recently I started to organize the footage I made and collected over the years and decided to put some of it online. To maintain the overview, a new [...]]]></description> <content:encoded><![CDATA[<p>Since my graduation back in 2008, I have been working on different research projects at universities. Some of them got published, others never left the &#8216;prototype&#8217; stage.</p><p>Recently I started to organize the footage I made and collected over the years and decided to put some of it online. To maintain the overview, a new section has been added to the site: <a href="http://www.multigesture.net/research-projects/"><strong>Research Projects</strong></a>. It includes <em>most</em> of the projects I have been working on at the University of Amsterdam (UvA) and Harvard University.</p><p>Each project includes a short description, pictures and a video. Enjoy!</p><p>(Click the project title for more information)</p><h2><a href="http://www.multigesture.net/research-projects/interactive-networks/">Interactive Networks</a></h2><p>This project introduces the Interactive Network concept and describes the design and implementation of the first prototype.</p><p><object width="500" height="306"><param name="movie" value="http://www.youtube.com/v/o6YPK60DevA?fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/o6YPK60DevA?fs=1" type="application/x-shockwave-flash" width="500" height="306" allowscriptaccess="always" allowfullscreen="true"></embed></object></p><h2><a href="http://www.multigesture.net/research-projects/twilight-graph-visualization/">Twilight</a></h2><p>Twilight is an interactive graph exploration tool for multi-touch systems. Twilight provides a flexible environment that can be used to visualize and analyse graphs and networks found in the computational science.</p><p><object width="500" height="400"><param name="movie" value="http://www.youtube.com/v/3BP-aAcmXas?fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/3BP-aAcmXas?fs=1" type="application/x-shockwave-flash" width="500" height="400" allowscriptaccess="always" allowfullscreen="true"></embed></object></p><h2><a href="http://www.multigesture.net/research-projects/treepanorama-tree-visualization/">Treepanorama</a></h2><p>This projects involves the visualization of large phylogenetic tree structures such as the ones found in the Tree of Life. By combining high performance computer graphics with multi-touch input interaction methods, his project will create an interactive exploration environment that allows us to view the data interactively and in different representations. This research will lead into a better understanding of the evolutionary tree.</p><p><a class="thickbox" title="Treepanorama / MS Surface (WPF/C#)" href="http://multigesture.net/wp-content/uploads/harvard/treepanorama/IMG_2814.JPG"><img src="http://multigesture.net/wp-content/uploads/harvard/treepanorama/IMG_2814t.JPG" alt="" /></a> <a class="thickbox" title="Treepanorama / MS Surface (WPF/C#)" href="http://multigesture.net/wp-content/uploads/harvard/treepanorama/IMG_2815.JPG"><img src="http://multigesture.net/wp-content/uploads/harvard/treepanorama/IMG_2815t.JPG" alt="" /></a></p><h2><a href="http://www.multigesture.net/research-projects/involv/">Involv</a></h2><p>INVOLV is a research project that combines cutting-edge interactive technology with emerging information visualization techniques to create innovative explorations for large hierarchical data sets</p><p><a class="thickbox" title="Modified datawall application (in this picture: Bertrand Schneider, Laurence Muller and Alan Dunne)" href="http://www.multigesture.net/wp-content/uploads/harvard/involv/involv_4_f.jpg"><img src="http://www.multigesture.net/wp-content/uploads/harvard/involv/involv_4_t.jpg" alt="" /></a> <a class="thickbox" title="Involv (Michael Horn)" href="http://www.multigesture.net/wp-content/uploads/harvard/involv/involv_3_f.jpg"><img src="http://www.multigesture.net/wp-content/uploads/harvard/involv/involv_3_t.jpg" alt="" /></a></p><p><object width="500" height="400"><param name="movie" value="http://www.youtube.com/v/XAvtNJxSFpU?fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/XAvtNJxSFpU?fs=1" type="application/x-shockwave-flash" width="500" height="400" allowscriptaccess="always" allowfullscreen="true"></embed></object></p><h2><a href="http://www.multigesture.net/research-projects/phylogenie/">Phylogenie</a></h2><p>This application is designed to be a collaborative activity to teach undergraduate students about phylogeny and to prevent misconceptions about evolution. The system guides the students through a set of steps required to construct a phylogenetic tree based on morphological and DNA sequence data.</p><p>Since this project is still active, more media content will be released in future!</p><p><img src="http://www.multigesture.net/wp-content/uploads/harvard/phylogenie/phylogenie.jpg" alt="" /></p><h1>* update: 27 November 2010 *</h1><p>Old footage from personal projects: Touch tracer and Real time fluid dynamics running on the UvA-MTT</p><h2><a href="http://www.multigesture.net/projects/touch-tracer/">Touch Tracer v0.3</a></h2><p><object width="500" height="306"><param name="movie" value="http://www.youtube.com/v/GaJuwDzs3mY?fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/GaJuwDzs3mY?fs=1" type="application/x-shockwave-flash" width="500" height="306" allowscriptaccess="always" allowfullscreen="true"></embed></object></p><h2><a href="http://www.multigesture.net/projects/real-time-fluid-dynamics/">Real time fluid dynamics</a></h2><p><object width="500" height="306"><param name="movie" value="http://www.youtube.com/v/ZyeFvkJ8cFE?fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/ZyeFvkJ8cFE?fs=1" type="application/x-shockwave-flash" width="500" height="306" allowscriptaccess="always" allowfullscreen="true"></embed></object></p> ]]></content:encoded> <wfw:commentRss>http://www.multigesture.net/2010/11/25/research-projects/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>Kinect</title><link>http://www.multigesture.net/2010/11/15/kinect/</link> <comments>http://www.multigesture.net/2010/11/15/kinect/#comments</comments> <pubDate>Mon, 15 Nov 2010 20:47:46 +0000</pubDate> <dc:creator>Laurence Muller</dc:creator> <category><![CDATA[Application]]></category> <category><![CDATA[diy]]></category> <category><![CDATA[hacking]]></category> <category><![CDATA[hci]]></category> <category><![CDATA[kinect]]></category> <category><![CDATA[multitouch]]></category><guid isPermaLink="false">http://www.multigesture.net/?p=1032</guid> <description><![CDATA[Earlier this month Adafruit started a contest for the first person to hack the Kinect, Microsoft&#8217;s latest gadget for the XBOX 360. The contest was won by Spanish hacker Héctor Martín Cantero who published his proof of concept only 3 hours after the European launch (last week). So what exactly is the Kinect? Is it [...]]]></description> <content:encoded><![CDATA[<p>Earlier this month <a href="http://www.adafruit.com/blog/2010/11/04/the-open-kinect-project-the-ok-prize-get-1000-bounty-for-kinect-for-xbox-360-open-source-drivers/">Adafruit started a contest</a> for the first person to hack the Kinect, Microsoft&#8217;s latest gadget for the XBOX 360. The contest was won by Spanish hacker <a href="http://marcansoft.com/blog/">Héctor Martín Cantero</a> who published his <a href="http://www.youtube.com/watch?v=rKhW-cvpkks">proof of concept</a> only 3 hours after the European launch (last week).</p><p>So what exactly is the Kinect? Is it similar to the PS2 eyetoy?</p><p>Actually it is much more advanced than the PS2 eyetoy. Unlike the eyetoy, the Kinect contains 2 cameras. One RGB camera which is used for &#8216;normal&#8217; images and a depth camera is used to figure out the position of objects in its view. A nice explaination (and an overview of the components) can be found at <a href="http://www.ifixit.com/Teardown/Microsoft-Kinect-Teardown/4066/1">ifixit</a>.</p><p>Because Adafruit required the contest winner to open source his source code, this means that others can now enjoy hacking their Kinect as well! Currently the code is available at github and renamed to libfreenect (irc: #openkinect @ freenode): <a href="https://github.com/OpenKinect/libfreenect/">https://github.com/OpenKinect/libfreenect/</a></p><p>Getting the code to compile might be a bit tricky and it involves CMake to create the project files. Running it on Linux is very trivial (just make sure you&#8217;ve installed all dependencies), on Windows and Max OS X there are some extra steps involved to compile the library and demo application.</p><p>For the windows version you will need <a href="http://www.multigesture.net/wp-content/uploads/3rdparty-libs.zip">libusb, glut and pthreads</a>. Also, don&#8217;t forget to select the win32 branch when you do a checkout from git. After creating the visual studio project files you will need to manually fix the path to the include and lib directories (The current CMake file is broken).</p><p>If you can&#8217;t be bothered, I have compiled a windows binary (vs2k8): <a href="http://www.multigesture.net/wp-content/uploads/Kinect-VC9-Release.zip">Kinect-VC9-Release.zip</a></p><p>Before running the binary, make sure you&#8217;ve installed the drivers from github (First the XBOX motor, then camera and audio). To control the motor in the Kinect, you can use this code:<a href="http://www.multigesture.net/wp-content/uploads/NUI_Motor.cpp"> NUI_Motor.cpp</a></p><h3>My experiments</h3><p>Last Friday I actually bought myself a Kinect. In the video below you can see me running the Kinect on my machine. For now it is just retrieving both camera streams and putting it on display.<br /> Basically the library (libfreenect) is providing you with two images through a callback. One depth image and one RGB image. The depth image actually maps a depth to a certain color. In this video for example, the color red/white means something is really close to the camera and green/blue is further away.</p><p><object width="500" height="400"><param name="movie" value="http://www.youtube.com/v/OK2f_ByzwjM?fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/OK2f_ByzwjM?fs=1" type="application/x-shockwave-flash" width="500" height="400" allowscriptaccess="always" allowfullscreen="true"></embed></object></p><p>Hopefully I will have some nice apps later this month <img src='http://www.multigesture.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p><h3>Kinect hacks by others</h3><p>3D mapping by <a href="http://idav.ucdavis.edu/~okreylos/index.html">Oliver Kreylos</a></p><p><object width="500" height="400"><param name="movie" value="http://www.youtube.com/v/7QrnwoO1-8A?fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/7QrnwoO1-8A?fs=1" type="application/x-shockwave-flash" width="500" height="400" allowscriptaccess="always" allowfullscreen="true"></embed></object></p><p>ofxKinect 3D draw by <a href="http://www.msavisuals.com/">Memo</a></p><p><iframe src="http://player.vimeo.com/video/16818988" width="500" height="313" frameborder="0"></iframe></p><p>Multitouch hack by <a href="http://campar.in.tum.de/Main/FlorianEchtler">Florian Echtler</a></p><p><object width="500" height="400"><param name="movie" value="http://www.youtube.com/v/ho6Yhz21BJI?fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/ho6Yhz21BJI?fs=1" type="application/x-shockwave-flash" width="500" height="400" allowscriptaccess="always" allowfullscreen="true"></embed></object></p><p>Kinect Point Cloud by <a href="http://labs.laan.com/">cc laan</a></p><p><iframe src="http://player.vimeo.com/video/16788233" width="338" height="600" frameborder="0"></iframe></p><h3>Contest</h3><p><strong>P.s.: Before I forget, Matt Cutts (Google) started another contest. Check it out at: <a href="http://www.mattcutts.com/blog/open-kinect-contest/">http://www.mattcutts.com/blog/open-kinect-contest/</a></strong></p> ]]></content:encoded> <wfw:commentRss>http://www.multigesture.net/2010/11/15/kinect/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Multitouch Media Application Pro v3</title><link>http://www.multigesture.net/2009/07/10/multitouch-media-application-pro-v3/</link> <comments>http://www.multigesture.net/2009/07/10/multitouch-media-application-pro-v3/#comments</comments> <pubDate>Fri, 10 Jul 2009 20:41:40 +0000</pubDate> <dc:creator>Laurence Muller</dc:creator> <category><![CDATA[Application]]></category> <category><![CDATA[Multitouch]]></category> <category><![CDATA[adobe air]]></category> <category><![CDATA[application]]></category> <category><![CDATA[flash]]></category> <category><![CDATA[mma]]></category> <category><![CDATA[multitouch]]></category><guid isPermaLink="false">http://www.multigesture.net/?p=521</guid> <description><![CDATA[Watch it in HD on Youtube or Vimeo! Changelog for v3: Fixed compatibility issue with Adobe AIR 1.5 (Fullscreen bug) This version should autodetect your screensize to support any screen resolution. Added a Google Maps object Added support for adding pictures on the fly (for example if you want send a picture from your cellphone [...]]]></description> <content:encoded><![CDATA[<p><object width="500" height="306"><param name="movie" value="http://www.youtube.com/v/H1pNJfR_hno?fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/H1pNJfR_hno?fs=1" type="application/x-shockwave-flash" width="500" height="306" allowscriptaccess="always" allowfullscreen="true"></embed></object></p><p>Watch it in <strong>HD</strong> on <a href="http://www.youtube.com/watch?v=H1pNJfR_hno">Youtube</a> or <a href="http://vimeo.com/5536193">Vimeo</a>!</p><p>Changelog for v3:</p><ul><li>Fixed compatibility issue with Adobe AIR 1.5 (Fullscreen bug)</li><li>This version should autodetect your screensize to support any screen resolution.</li><li>Added a Google Maps object</li><li>Added support for adding pictures on the fly (for example if you want send a picture from your cellphone with bluetooth, read the readme.txt for the instructions)</li><li>Added a exit-button, reset view-button, canvaslock and displaylock buttons.</li><li>Temporary removed DCIM support due to slowdowns</li></ul><p>Want to try it out yourself?<br /> Download it now: <a class="downloadlink" href="http://www.multigesture.net/wp-content/plugins/download-monitor/download.php?id=20" title="Version v3 downloaded 12186 times" >Multitouch Media Application Pro v3 (12186) - 2.25 MB</a></p><p>Please read the install instructions in <strong>readme.txt</strong> (and download the latest <a href="http://www.adobe.com/products/air/">Adobe AIR 1.5.x</a>).</p><p>note: If you want to try out the bluetooth feature, I recommend installing <a href="http://www.bluesoleil.com/">BlueSoleil</a> to handle the pairing of the devices and file transfers.</p> ]]></content:encoded> <wfw:commentRss>http://www.multigesture.net/2009/07/10/multitouch-media-application-pro-v3/feed/</wfw:commentRss> <slash:comments>16</slash:comments> </item> <item><title>Multi-touch video puzzle game</title><link>http://www.multigesture.net/2008/05/17/multi-touch-video-puzzle-game/</link> <comments>http://www.multigesture.net/2008/05/17/multi-touch-video-puzzle-game/#comments</comments> <pubDate>Sat, 17 May 2008 15:03:25 +0000</pubDate> <dc:creator>Laurence Muller</dc:creator> <category><![CDATA[Application]]></category> <category><![CDATA[Multitouch]]></category> <category><![CDATA[adobe air]]></category> <category><![CDATA[application]]></category> <category><![CDATA[games]]></category> <category><![CDATA[mma]]></category> <category><![CDATA[multitouch]]></category><guid isPermaLink="false">http://www.multigesture.net/?p=72</guid> <description><![CDATA[The same game I have showed here but this time played on the multi-touch table. p.s. Sorry for the ending it wasn&#8217;t me!]]></description> <content:encoded><![CDATA[<p>The same game I have showed <a href="http://www.multigesture.net/2008/03/01/real-time-fluid-dynamics-on-a-multi-touch-table/">here</a> but this time played on the multi-touch table.</p><p><object width="500" height="400"><param name="movie" value="http://www.youtube.com/v/XGDubj8s6aU?fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/XGDubj8s6aU?fs=1" type="application/x-shockwave-flash" width="500" height="400" allowscriptaccess="always" allowfullscreen="true"></embed></object></p><p><em>p.s. Sorry for the ending <img src='http://www.multigesture.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> it wasn&#8217;t me!</em></p> ]]></content:encoded> <wfw:commentRss>http://www.multigesture.net/2008/05/17/multi-touch-video-puzzle-game/feed/</wfw:commentRss> <slash:comments>6</slash:comments> </item> <item><title>tDesk released!</title><link>http://www.multigesture.net/2008/05/05/tdesk-released/</link> <comments>http://www.multigesture.net/2008/05/05/tdesk-released/#comments</comments> <pubDate>Mon, 05 May 2008 19:55:24 +0000</pubDate> <dc:creator>Laurence Muller</dc:creator> <category><![CDATA[Application]]></category> <category><![CDATA[Multitouch]]></category> <category><![CDATA[application]]></category> <category><![CDATA[multitouch]]></category> <category><![CDATA[showcase]]></category><guid isPermaLink="false">http://www.multigesture.net/?p=68</guid> <description><![CDATA[Last year I demonstrated how Windows XP could be (ab)used with multi-touch interaction. A few weeks ago I made some adjustments to make it compatible with the latest touchlib and this is the result: tDesk v2 allows the user to move and resize multiple windows at the same time by using multi-touch gestures. Because Windows [...]]]></description> <content:encoded><![CDATA[<p>Last year I demonstrated how Windows XP could be (ab)used with <a href="http://www.multigesture.net/2007/05/21/multitouch-windows-xp/">multi-touch interaction</a>.</p><p>A few weeks ago I made some adjustments to make it compatible with the latest touchlib and this is the result:</p><p><object width="500" height="400"><param name="movie" value="http://www.youtube.com/v/tw4bDQhwxu0?fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/tw4bDQhwxu0?fs=1" type="application/x-shockwave-flash" width="500" height="400" allowscriptaccess="always" allowfullscreen="true"></embed></object></p><p>tDesk v2 allows the user to move and resize multiple windows at the same time by using multi-touch gestures. Because Windows XP/Vista was not designed for multi-touch there are some issues with this type of input. In multi-touch mode it is not possible to do a mouse click, therefor I added an option to switch between multi-touch and mouse simulation mode.</p><p>Please keep in mind that when the mouse simulation mode is activated only single touch input is allowed. Do not use this software on unstable multi-touch systems.</p><p>Finally, use this software at own risk <img src='http://www.multigesture.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p><p>Install instructions are in: <strong><em>readme.txt !</em></strong></p><p><em>Downloads:</em><br /> <a class="downloadlink" href="http://www.multigesture.net/wp-content/plugins/download-monitor/download.php?id=17" title="Version v2 downloaded 2596 times" >tDesk v2 (2596) - 13.32 kB</a><br /> <a class="downloadlink" href="http://www.multigesture.net/wp-content/plugins/download-monitor/download.php?id=2" title="Version rev393 (speedfix) downloaded 3162 times" >Touchlib (speedfix) (3162) - 785.69 kB</a> &#8211; rev393</p><p>Any tips or problems can be posted in the comment section.</p><p><em><strong>* update *</strong><br /> In some cases tDesk does not seem to work properly with touchlib. Try downloading rev393 and overwrite your current touchlib dll files.</em></p> ]]></content:encoded> <wfw:commentRss>http://www.multigesture.net/2008/05/05/tdesk-released/feed/</wfw:commentRss> <slash:comments>18</slash:comments> </item> <item><title>Touchlib Speedfix and MMA Pro update</title><link>http://www.multigesture.net/2008/05/01/touchlib-speedfix-and-mma-pro-update/</link> <comments>http://www.multigesture.net/2008/05/01/touchlib-speedfix-and-mma-pro-update/#comments</comments> <pubDate>Thu, 01 May 2008 20:34:44 +0000</pubDate> <dc:creator>Laurence Muller</dc:creator> <category><![CDATA[Application]]></category> <category><![CDATA[Multitouch]]></category> <category><![CDATA[application]]></category> <category><![CDATA[mma]]></category> <category><![CDATA[multitouch]]></category> <category><![CDATA[touchlib]]></category><guid isPermaLink="false">http://www.multigesture.net/2008/05/01/touchlib-speedfix-and-mma-pro-update/</guid> <description><![CDATA[Touchlib A few weeks ago I was busy tweaking the Touchlib sourcecode and noticed a bug/feature in the code which caused the image processing pipeline to stall for 32 milliseconds. This might not sound like a big issue however on our system it caused the system to be less responsive. I have compiled a version [...]]]></description> <content:encoded><![CDATA[<h3>Touchlib</h3><p>A few weeks ago I was busy tweaking the Touchlib sourcecode and noticed a bug/feature in the code which caused the image processing pipeline to stall for 32 milliseconds. This might not sound like a big issue however on our system it caused the system to be less responsive.</p><p>I have compiled a version without this &#8216;sleep&#8217; function. This version might not be safe for single core cpu&#8217;s (I could not test it out myself, hopefully someone could check it out). Because the sleep function is removed, the videoplayback (using cvcapture + *.avi) is not working properly.</p><p>Check out this version of touchlib and report any problems in the comment section <img src='http://www.multigesture.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> !</p><p><em>Download:</em><br /> <a class="downloadlink" href="http://www.multigesture.net/wp-content/plugins/download-monitor/download.php?id=2" title="Version rev393 (speedfix) downloaded 3162 times" >Touchlib (speedfix) (3162) - 785.69 kB</a> compiled libraries, revision 393 speedfix (21 apr 2008)</p><h3>MMA Pro v2d</h3><p>Changelist:<br /> - Added smoothing, scaled images should look a lot better<br /> - Added an View Reset and Exit button<br /> - Increased the size of the canvas<br /> - Compatible with Adobe Air v1.0</p><p>Install instructions are in: <strong><em>readme_pro.txt !</em></strong></p><p><em>Download:</em><br /> <a class="downloadlink" href="http://www.multigesture.net/wp-content/plugins/download-monitor/download.php?id=7" title="Version v2d downloaded 3155 times" >Multitouch Media Application Pro v2d (3155) - 2.22 MB</a><br /> <a href="http://get.adobe.com/air/" title="AIR"> Adobe AIR</a> &#8211; <strong>required</strong></p><p>Example video showing how to load photos dynamicly into MMA Pro</p><p><object width="500" height="400"><param name="movie" value="http://www.youtube.com/v/4doK3nCnayA?fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/4doK3nCnayA?fs=1" type="application/x-shockwave-flash" width="500" height="400" allowscriptaccess="always" allowfullscreen="true"></embed></object></p><h3>Wong!</h3><p>Wong is a game based on pong which uses the multitouch input to create dynamicly sized paddles.</p><p>A game of Wong on our multitouch table:</p><p><object width="500" height="400"><param name="movie" value="http://www.youtube.com/v/wYucu11ntOk?fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/wYucu11ntOk?fs=1" type="application/x-shockwave-flash" width="500" height="400" allowscriptaccess="always" allowfullscreen="true"></embed></object></p><p>The game is made by <a href="http://ssandler.wordpress.com/" title="Multi-touch musical interface">Seth Sandler</a> and is part of the audiotouch application suite: <a href="http://code.google.com/p/audiotouch/">http://code.google.com/p/audiotouch/ </a></p> ]]></content:encoded> <wfw:commentRss>http://www.multigesture.net/2008/05/01/touchlib-speedfix-and-mma-pro-update/feed/</wfw:commentRss> <slash:comments>5</slash:comments> </item> <item><title>Real-Time Fluid Dynamics on a Multi-touch Table</title><link>http://www.multigesture.net/2008/03/01/real-time-fluid-dynamics-on-a-multi-touch-table/</link> <comments>http://www.multigesture.net/2008/03/01/real-time-fluid-dynamics-on-a-multi-touch-table/#comments</comments> <pubDate>Sat, 01 Mar 2008 20:22:44 +0000</pubDate> <dc:creator>Laurence Muller</dc:creator> <category><![CDATA[Application]]></category> <category><![CDATA[Multitouch]]></category> <category><![CDATA[application]]></category> <category><![CDATA[multitouch]]></category> <category><![CDATA[uva]]></category><guid isPermaLink="false">http://www.multigesture.net/2008/03/01/real-time-fluid-dynamics-on-a-multi-touch-table/</guid> <description><![CDATA[Smoke improved&#8230; One of the demo applications which comes with Touchlib is Smoke. The technique which is used to create &#8216;smoke&#8217; is based on the algorithm presented by Jos Stam in his paper Real-Time Fluid Dynamics for Games. Often multi-touch enthusiast use this application to demonstrate their multi-touch displays. Some time ago I modified the [...]]]></description> <content:encoded><![CDATA[<h3>Smoke improved&#8230;</h3><p>One of the demo applications which comes with Touchlib is <strong>Smoke</strong>. The technique which is used to create &#8216;smoke&#8217; is based on the algorithm presented by <a href="http://www.dgp.toronto.edu/people/stam/reality/index.html" title="Jos Stam">Jos Stam</a> in his paper <a href="http://www.dgp.toronto.edu/people/stam/reality/Research/pdf/GDC03.pdf" title="Real-Time Fluid Dynamics for Games">Real-Time Fluid Dynamics for Games</a>.</p><p>Often <a href="http://www.youtube.com/results?search_query=smoke+touchlib&amp;search_type=">multi-touch enthusiast</a> use this application to demonstrate their multi-touch displays.</p><p>Some time ago I modified the Smoke application which allows users to draw objects into the scene. The application is extended to have a new drawing mode which is allow (multiple) users to draw objects/boundaries into the scene. This can be done while the simulation is running. If sources are placed in the scene this means you can view in real-time how flow will behave on a particular shaped object.</p><p>In the demonstration video I have added 3 different coloured sources and the logo of my university is used as an object to perform the simulation on.</p><p><object width="500" height="400"><param name="movie" value="http://www.youtube.com/v/hC8RM2cGGYM?fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/hC8RM2cGGYM?fs=1" type="application/x-shockwave-flash" width="500" height="400" allowscriptaccess="always" allowfullscreen="true"></embed></object></p><p>A higher quality wmv can be downloaded here:<br /> <a href="http://www.multigesture.net/downloads/RTFD.wmv">RTFD.wmv</a></p><h3>Multi-touch video puzzle game</h3><p>I had this idea for a while and even the basic puzzle game framework (using photo&#8217;s) was already finished. After messing around with <a href="http://ffmpeg.mplayerhq.hu/" title="FFmpeg">FFmpeg</a> I managed to export the video frames from an mpeg2 (.vob) file and convert them to an OpenGL texture. The only problems left were the synchronization and the audio stream. Because FFmpeg is really horrible coded (you need special hacks to get it even to <a href="http://arrozcru.no-ip.org/ffmpeg_builds/">compile under windows</a>), I never managed to get those working. For those who are interested, this site: <a href="http://www.dranger.com/ffmpeg/">dranger.com</a> has helped me a lot.</p><p>After searching around for an alternative I decided to drop the cross platform support for this application and use <a href="http://msdn2.microsoft.com/en-us/library/ms783323(VS.85).aspx">MS DirectShow</a>. Usually I do not like the DirectX due its &#8216;clean&#8217; coding style. But after giving DirectShow a try I was surprised how easy it was to get a basic demo working which played a mpeg2 file without any problems. The audio and video streams where synchronized automatically.<br /> With some help of a friend I merged the video player code into the puzzle application.</p><p>This is the result (recorded with Fraps):</p><p><object width="500" height="400"><param name="movie" value="http://www.youtube.com/v/y7pi0EqARXg?fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/y7pi0EqARXg?fs=1" type="application/x-shockwave-flash" width="500" height="400" allowscriptaccess="always" allowfullscreen="true"></embed></object></p><p>In the video I used the mouse as input device, but the application works with the multi-touch table as well.</p> ]]></content:encoded> <wfw:commentRss>http://www.multigesture.net/2008/03/01/real-time-fluid-dynamics-on-a-multi-touch-table/feed/</wfw:commentRss> <slash:comments>1</slash:comments> <enclosure url="http://www.multigesture.net/downloads/RTFD.wmv" length="9902335" type="video/x-ms-wmv" /> </item> <item><title>MMA Pro update</title><link>http://www.multigesture.net/2008/02/09/mma-pro-update/</link> <comments>http://www.multigesture.net/2008/02/09/mma-pro-update/#comments</comments> <pubDate>Fri, 08 Feb 2008 22:01:12 +0000</pubDate> <dc:creator>Laurence Muller</dc:creator> <category><![CDATA[Application]]></category> <category><![CDATA[Multitouch]]></category> <category><![CDATA[adobe air]]></category> <category><![CDATA[application]]></category> <category><![CDATA[games]]></category> <category><![CDATA[mma]]></category> <category><![CDATA[multitouch]]></category><guid isPermaLink="false">http://www.multigesture.net/2008/02/09/mma-pro-update/</guid> <description><![CDATA[Minor fixes: - Fullscreen should be working now - It is should be possible to use any screen resolution now (previous version used 1024 x 768, hardcoded) - Keyboard can be locked on the stage (prevents the keyboard from jumping around while you&#8217;re typing ) And as usual: Don&#8217;t forget to read the readme_pro.txt ! [...]]]></description> <content:encoded><![CDATA[<p>Minor fixes:<br /> - Fullscreen should be working now<br /> - It is should be possible to use any screen resolution now (previous version used 1024 x 768, hardcoded)<br /> - Keyboard can be locked on the stage (prevents the keyboard from jumping around while you&#8217;re typing <img src='http://www.multigesture.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> )</p><p><strong><em>And as usual: Don&#8217;t forget to read the readme_pro.txt !</em></strong></p><p><em>Download:</em><br /> <a href="http://www.multigesture.net/wp-content/uploads/2008/02/mma-pro-v2c.zip" title="Multitouch Media Application Pro v2c">Multitouch Media Application Pro v2c</a><br /> <a href="http://labs.adobe.com/downloads/air.html" title="AIR"> Adobe AIR</a> &#8211; <strong>required</strong></p> ]]></content:encoded> <wfw:commentRss>http://www.multigesture.net/2008/02/09/mma-pro-update/feed/</wfw:commentRss> <slash:comments>12</slash:comments> </item> <item><title>Multitouch @ SOCO Amsterdam</title><link>http://www.multigesture.net/2008/01/22/multitouch-soco-amsterdam/</link> <comments>http://www.multigesture.net/2008/01/22/multitouch-soco-amsterdam/#comments</comments> <pubDate>Mon, 21 Jan 2008 22:48:37 +0000</pubDate> <dc:creator>Laurence Muller</dc:creator> <category><![CDATA[Application]]></category> <category><![CDATA[Multitouch]]></category> <category><![CDATA[multitouch]]></category> <category><![CDATA[showcase]]></category> <category><![CDATA[tv]]></category><guid isPermaLink="false">http://www.multigesture.net/2008/01/22/multitouch-soco-amsterdam/</guid> <description><![CDATA[My 2 minutes of fame&#8230; Last saturday MMA Pro was presented on national television (NED3, VPRO) in the show called &#8220;In de ban van &#8216;t ding&#8221;. The documentary created by Dahl TV and Bright Magazine is about the (new) technologies which have an impact on our daily lives. In this weeks episode Erwin visits SOCO [...]]]></description> <content:encoded><![CDATA[<h3>My 2 minutes of fame&#8230;</h3><p>Last saturday MMA Pro was presented on national television (NED3, <a href="http://www.vpro.nl/">VPRO</a>) in the show called &#8220;In de ban van &#8216;t ding&#8221;. The documentary created by <a href="http://www.dahl.nl/">Dahl TV</a> and <a href="http://www.bright.nl/">Bright Magazine</a> is about the (new) technologies which have an impact on our daily lives.</p><p>In this weeks episode Erwin visits <a href="http://www.socoamsterdam.nl/">SOCO Amsterdam</a>. SOCO (Social Contemporary Center for the Arts) is a new exhibition/project space in Amsterdam. Peter Distol and Ralph Das are giving a demonstration of the table we have build together at the SOCO. The table uses front illumination and touchlib for touch detection and processing.</p><p>A part of the episode can be viewed here (it is in Dutch):</p><p><object width="500" height="400"><param name="movie" value="http://www.youtube.com/v/UtRY5MIrg1U?fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/UtRY5MIrg1U?fs=1" type="application/x-shockwave-flash" width="500" height="400" allowscriptaccess="always" allowfullscreen="true"></embed></object></p><p>The whole episode can be viewed here:<br /> <a href="http://player.omroep.nl/?aflID=6366562">Uitzending gemist<br /> </a></p><p>The applications which have been demonstrated:<br /> - Smoke (basic demo from touchlib)<br /> - Newswell (Ralph Das)<br /> - Multitouch Media Application (showing Jimi Hendrix!) (Laurence Muller)</p><p>Currently there are two multi-touch tables available to the general public.</p><h3>Multitouch Media Application Pro Update</h3><p>The previous release of MMA Pro only worked with Adobe AIR beta1. A few users have contacted me about the troubles when installing MMA Pro v2a with Adobe AIR beta3 installed.</p><p>I have updated the application to make it compatible with Adobe AIR beta3 (<span style="text-decoration: underline;">Thank You Adobe!</span> for renaming zillion functions).</p><p>The application requires <a href="http://labs.adobe.com/downloads/air.html">Adobe AIR beta3 runtimes</a>, so do not forget to install them first. Besides the fixes, there is nothing new.<br /> Ofcourse this version also supports adding images on-fly. Just connect your digital camera (or memorycard) and all your images will be downloaded to the desktop. Your camera should be using the <a title="DCIM" href="http://en.wikipedia.org/wiki/Design_rule_for_Camera_File_system">DCIM</a> standard).</p><p><strong><em>Don&#8217;t forget to read the readme_pro.txt !</em></strong></p><p><em>Download:</em><br /> <a title="Multitouch Media Application Pro v2b" href="http://www.multigesture.net/wp-content/uploads/2008/01/mma-pro-v2b.zip">Multitouch Media Application Pro v2b</a><br /> <a title="AIR" href="http://labs.adobe.com/downloads/air.html"> Adobe AIR</a> &#8211; <strong>required</strong></p> ]]></content:encoded> <wfw:commentRss>http://www.multigesture.net/2008/01/22/multitouch-soco-amsterdam/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching 10/22 queries in 0.104 seconds using disk: basic
Object Caching 1408/1426 objects using disk: basic

Served from: www.multigesture.net @ 2012-02-04 06:41:43 -->
