<?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>Goltergaul Development</title>
	<atom:link href="http://blog.goltergaul.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.goltergaul.de</link>
	<description>This is about my Work: C++, PHP, Flash ...</description>
	<lastBuildDate>Mon, 31 May 2010 22:29:26 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>WebGL Experiment</title>
		<link>http://blog.goltergaul.de/2010/06/webgl-experiment/</link>
		<comments>http://blog.goltergaul.de/2010/06/webgl-experiment/#comments</comments>
		<pubDate>Mon, 31 May 2010 22:19:57 +0000</pubDate>
		<dc:creator>Dominik Goltermann</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebGL]]></category>
		<category><![CDATA[3D]]></category>
		<category><![CDATA[Animation]]></category>
		<category><![CDATA[Dominik Goltermann]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[OpenGL]]></category>

		<guid isPermaLink="false">http://blog.goltergaul.de/?p=703</guid>
		<description><![CDATA[I did some experiments with WebGL during the development of my current semester project, a litte browsergame. As Engine I used the Copperlicht Engine which comes with a Editor. Using this editor one can easily build a scene and export it in a format that can be loaded by the WebGL engine. At this occasion [...]]]></description>
			<content:encoded><![CDATA[<p>I did some experiments with WebGL during the development of my current semester project, a litte browsergame. As Engine I used the <a href="http://www.ambiera.com/copperlicht/index.html">Copperlicht Engine</a> which comes with a Editor. Using this editor one can easily build a scene and export it in a format that can be loaded by the WebGL engine. At this occasion I also wrote my first Javascript class!</p>
<p>What i wrote is a configurator. This means the user sees a 3D model of the unit he selected and then he can equip it with different weapons and armors. In this experiments i used no cool models, only primitives and some things i found on my hard disk. Here is a Video of the result. Sometimes I had to use configurator.something instead of  this.something. I think this is wrong and I will soon check out some  tutorials on Javascript Classes <img src='http://blog.goltergaul.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<a href="http://blog.goltergaul.de/2010/06/webgl-experiment/"><em>Click here to view the embedded video.</em></a>
<pre class="brush: jscript;">

var configurator = {
	engine: null,
	armor: null,
	active_unit_name: null,
	active_unit_index: null,
	is_initialized: false,
	units: {},
	unit_count: 0,
	onLoad_conf: {},
	scene: null,

	// changes the weapon. (sets the selected one visible)
	weapon: function(i) {
		var unit = this.activeUnit();

		if(unit.active_weapon)
			unit.active_weapon.Visible = false;

		if(typeof(i) == &quot;undefined&quot;)
			return;

		unit.active_weapon = this.scene.getSceneNodeFromName(unit.weapons[i]);
		unit.active_weapon.Visible = true;
	},

	// changes armor
	armor: function(i) {
		var unit = this.activeUnit();

		if(unit.active_armor)
			unit.active_armor.Visible = false;

		if(typeof(i) == &quot;undefined&quot;)
			return;

		unit.active_armor = this.scene.getSceneNodeFromName(unit.armors[i]);
		unit.active_armor.Visible = true;
	},

	// switch to next unit in left direction
	left: function() {
		this.active_unit_index--;

		if(this.active_unit_index &lt; 0)
			this.active_unit_index = this.unit_count-1;

		this.reload();
	},

	// switch in right direction
	right: function() {
		this.active_unit_index++;

		if(this.active_unit_index &gt; this.unit_count-1)
			this.active_unit_index = 0;

		this.reload();
	},

	// displayes unit with index active_unit_index
	reload: function() {
		var counter=0;
		for(var key in this.units) {
			if(counter == this.active_unit_index) {
				this.showUnit(key);
				break;
			}
			counter++;
		}
	},

	// shows unit by name
	showUnit: function(unitname) {

		if (!this.is_initialized) {
			this.initialize(unitname);
			return;
		}

		this.scene.getSceneNodeFromName(this.active_unit_name).Visible = false;
		this.weapon();
		this.armor();
		this.active_unit_name = unitname;

		this.scene.getSceneNodeFromName(this.active_unit_name).Visible = true;
		this.weapon(this.activeUnit().weapon_index);
		this.armor(this.activeUnit().armor_index);
	},

	// returns the unit that is currently displayed
	activeUnit: function() {
		return this.units[this.active_unit_name];
	},

	// initialize scene
	onLoaded: function()
	{
		configurator.scene = configurator.engine.getScene();
		if (configurator.scene)
		{
			// initialize active_unit
			var unit = configurator.scene.getSceneNodeFromName(configurator.active_unit_name);
			unit.Visible = true;

			// also, force the 3d engine to update the scene every frame
			configurator.scene.setRedrawMode(Scene.REDRAW_WHEN_SCENE_CHANGED);

			// rotate scene
			configurator.scene.getSceneNodeFromName('root').addAnimator(new AnimatorRotation(new Vect3d(0, 0.2, 0)));

			// load first weapon
			configurator.weapon(configurator.activeUnit().weapon_index);
			configurator.armor(configurator.activeUnit().armor_index);
		}
	},

	// preinitialize. create canvas to draw in and load scene
	initialize: function(default_unit) {
		this.is_initialized = true;
		jQuery(&quot;#canvasContainer&quot;).prepend('&lt;canvas id=&quot;3darea&quot; width=&quot;730&quot; height=&quot;450&quot; style=&quot;background-color:#ffffff&quot;&gt;&lt;/canvas&gt;');
		jQuery(&quot;#configurator&quot;).fadeIn();

		this.active_unit_name = default_unit;
		var index=0;
		for(var key in this.units) {
			if(key == default_unit) break;
			index++;
		}
		this.active_unit_index = index;
		this.engine = startCopperLichtFromFile('3darea', 'copperlichtdata/configurator.ccbjs');
		this.engine.OnLoadingComplete = this.onLoaded;
	},

	// add a unit and its preconfiguartion to the configurator.
	// the last two arguments specify which items should be displayed initially
	// nodenames are the names to reference the corresponding nodes in the scene. (same as in coppercube editor)
	addUnit: function(nodeName, weaponNodeNames, armorNodeNames, weapon_index, armor_index) {
		this.units[nodeName] = {
			weapons: weaponNodeNames,
			armors: armorNodeNames,
			weapon_index: weapon_index,
			armor_index: armor_index
		};
		this.unit_count++;
	},

	destroy: function() {
		jQuery(&quot;#configurator&quot;).fadeOut();
		jQuery(&quot;#3darea&quot;).remove();
		this.is_initialized = false;
	}

};

jQuery(document).ready(function(){
	// add units to configurator
	configurator.addUnit(&quot;bird&quot;,[&quot;weapon&quot;,&quot;weapon2&quot;],[&quot;armor1&quot;,&quot;armor2&quot;],1,0);
	configurator.addUnit(&quot;ghoul&quot;,[&quot;ghoul_weapon1&quot;,&quot;ghoul_weapon2&quot;],[&quot;ghoul_armor1&quot;,&quot;ghoul_armor2&quot;],0,0);
});
</pre>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;">var configurator = {<br />
engine: null,<br />
armor: null,<br />
active_unit_name: null,<br />
active_unit_index: null,<br />
is_initialized: false,<br />
units: {},<br />
unit_count: 0,<br />
onLoad_conf: {},<br />
scene: null,</p>
<p>weapon: function(i) {<br />
var unit = this.activeUnit();</p>
<p>if(unit.active_weapon)<br />
unit.active_weapon.Visible = false;</p>
<p>if(typeof(i) == &#8220;undefined&#8221;)<br />
return;</p>
<p>unit.active_weapon = this.scene.getSceneNodeFromName(unit.weapons[i]);<br />
unit.active_weapon.Visible = true;<br />
},</p>
<p>armor: function(i) {<br />
var unit = this.activeUnit();</p>
<p>if(unit.active_armor)<br />
unit.active_armor.Visible = false;</p>
<p>if(typeof(i) == &#8220;undefined&#8221;)<br />
return;</p>
<p>unit.active_armor = this.scene.getSceneNodeFromName(unit.armors[i]);<br />
unit.active_armor.Visible = true;<br />
},</p>
<p>left: function() {<br />
this.active_unit_index&#8211;;</p>
<p>if(this.active_unit_index &lt; 0)<br />
this.active_unit_index = this.unit_count-1;</p>
<p>this.reload();<br />
},</p>
<p>right: function() {<br />
this.active_unit_index++;</p>
<p>if(this.active_unit_index &gt; this.unit_count-1)<br />
this.active_unit_index = 0;</p>
<p>this.reload();<br />
},</p>
<p>reload: function() {<br />
var counter=0;<br />
for(var key in this.units) {<br />
if(counter == this.active_unit_index) {<br />
this.showUnit(key);<br />
break;<br />
}<br />
counter++;<br />
}<br />
},</p>
<p>showUnit: function(unitname) {</p>
<p>if (!this.is_initialized) {<br />
this.initialize(unitname);<br />
return;<br />
}</p>
<p>this.scene.getSceneNodeFromName(this.active_unit_name).Visible = false;<br />
this.weapon();<br />
this.armor();<br />
this.active_unit_name = unitname;</p>
<p>this.scene.getSceneNodeFromName(this.active_unit_name).Visible = true;<br />
this.weapon(this.activeUnit().weapon_index);<br />
this.armor(this.activeUnit().armor_index);<br />
},</p>
<p>activeUnit: function() {<br />
return this.units[this.active_unit_name];<br />
},</p>
<p>onLoaded: function()<br />
{<br />
configurator.scene = configurator.engine.getScene();<br />
if (configurator.scene)<br />
{<br />
// initialize active_unit<br />
var unit = configurator.scene.getSceneNodeFromName(configurator.active_unit_name);<br />
unit.Visible = true;</p>
<p>// also, force the 3d engine to update the scene every frame<br />
configurator.scene.setRedrawMode(Scene.REDRAW_WHEN_SCENE_CHANGED);</p>
<p>// rotate scene<br />
configurator.scene.getSceneNodeFromName(&#8217;root&#8217;).addAnimator(new AnimatorRotation(new Vect3d(0, 0.2, 0)));</p>
<p>// load first weapon<br />
configurator.weapon(configurator.activeUnit().weapon_index);<br />
configurator.armor(configurator.activeUnit().armor_index);<br />
}<br />
},</p>
<p>initialize: function(default_unit) {<br />
this.is_initialized = true;<br />
jQuery(&#8221;#canvasContainer&#8221;).prepend(&#8217;&lt;canvas id=&#8221;3darea&#8221; width=&#8221;730&#8243; height=&#8221;450&#8243; style=&#8221;background-color:#ffffff&#8221;&gt;&lt;/canvas&gt;&#8217;);<br />
jQuery(&#8221;#configurator&#8221;).fadeIn();</p>
<p>this.active_unit_name = default_unit;<br />
var index=0;<br />
for(var key in this.units) {<br />
if(key == default_unit) break;<br />
index++;<br />
}<br />
this.active_unit_index = index;<br />
this.engine = startCopperLichtFromFile(&#8217;3darea&#8217;, &#8216;copperlichtdata/configurator.ccbjs&#8217;);<br />
this.engine.OnLoadingComplete = this.onLoaded;<br />
},</p>
<p>addUnit: function(nodeName, weaponNodeNames, armorNodeNames, weapon_index, armor_index) {<br />
this.units[nodeName] = {<br />
weapons: weaponNodeNames,<br />
armors: armorNodeNames,<br />
weapon_index: weapon_index,<br />
armor_index: armor_index<br />
};<br />
this.unit_count++;<br />
},</p>
<p>destroy: function() {<br />
jQuery(&#8221;#configurator&#8221;).fadeOut();<br />
jQuery(&#8221;#3darea&#8221;).remove();<br />
this.is_initialized = false;<br />
}</p>
<p>};</p>
<p>jQuery(document).ready(function(){<br />
// add units to configurator<br />
configurator.addUnit(&#8221;bird&#8221;,["weapon","weapon2"],["armor1","armor2"],1,0);<br />
configurator.addUnit(&#8221;ghoul&#8221;,["ghoul_weapon1","ghoul_weapon2"],["ghoul_armor1","ghoul_armor2"],0,0);<br />
});</p>
</div>
<div class="sexy-bookmarks sexy-bookmarks-expand sexy-bookmarks-bg-sexy"><ul class="socials"><li class="sexy-delicious"><a href="http://del.icio.us/post?url=http://blog.goltergaul.de/2010/06/webgl-experiment/&amp;title=WebGL+Experiment" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a></li><li class="sexy-facebook"><a href="http://www.facebook.com/share.php?u=http://blog.goltergaul.de/2010/06/webgl-experiment/&amp;t=WebGL+Experiment" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a></li><li class="sexy-myspace"><a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://blog.goltergaul.de/2010/06/webgl-experiment/&amp;t=WebGL+Experiment" rel="nofollow" class="external" title="Post this to MySpace">Post this to MySpace</a></li><li class="sexy-twitter"><a href="http://twitter.com/home?status=WebGL+Experiment+-+http://b2l.me/x8ctC+" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a></li><li class="sexy-friendfeed"><a href="http://www.friendfeed.com/share?title=WebGL+Experiment&amp;link=http://blog.goltergaul.de/2010/06/webgl-experiment/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a></li><li class="sexy-google"><a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://blog.goltergaul.de/2010/06/webgl-experiment/&amp;title=WebGL+Experiment" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a></li><li class="sexy-twittley"><a href="http://twittley.com/submit/?title=WebGL+Experiment&amp;url=http%3A%2F%2Fblog.goltergaul.de%2F2010%2F06%2Fwebgl-experiment%2F&amp;desc=I%20did%20some%20experiments%20with%20WebGL%20during%20the%20development%20of%20my%20current%20semester%20project%2C%20a%20litte%20browsergame.%20As%20Engine%20I%20used%20the%20Copperlicht%20Engine%20which%20comes%20with%20a%20Editor.%20Using%20this%20editor%20one%20can%20easily%20build%20a%20scene%20and%20export%20it%20in%20a%20format%20that%20can%20be%20loaded%20by%20the%20WebGL%20engine.%20At%20this%20oc&amp;pcat=Technology&amp;tags=" rel="nofollow" class="external" title="Submit this to Twittley">Submit this to Twittley</a></li><li class="sexy-digg"><a href="http://digg.com/submit?phase=2&amp;url=http://blog.goltergaul.de/2010/06/webgl-experiment/&amp;title=WebGL+Experiment" rel="nofollow" class="external" title="Digg this!">Digg this!</a></li><li class="sexy-yahoobuzz"><a href="http://buzz.yahoo.com/submit/?submitUrl=http://blog.goltergaul.de/2010/06/webgl-experiment/&amp;submitHeadline=WebGL+Experiment&amp;submitSummary=I%20did%20some%20experiments%20with%20WebGL%20during%20the%20development%20of%20my%20current%20semester%20project%2C%20a%20litte%20browsergame.%20As%20Engine%20I%20used%20the%20Copperlicht%20Engine%20which%20comes%20with%20a%20Editor.%20Using%20this%20editor%20one%20can%20easily%20build%20a%20scene%20and%20export%20it%20in%20a%20format%20that%20can%20be%20loaded%20by%20the%20WebGL%20engine.%20At%20this%20oc&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" class="external" title="Buzz up!">Buzz up!</a></li></ul><div style="clear:both;"></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.goltergaul.de/2010/06/webgl-experiment/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Does encrypting all I-Frames of a video make it unwatchable?</title>
		<link>http://blog.goltergaul.de/2010/05/does-encrypting-all-i-frames-of-a-video-make-it-unwatchable/</link>
		<comments>http://blog.goltergaul.de/2010/05/does-encrypting-all-i-frames-of-a-video-make-it-unwatchable/#comments</comments>
		<pubDate>Thu, 06 May 2010 11:33:53 +0000</pubDate>
		<dc:creator>Dominik Goltermann</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[bytestream]]></category>
		<category><![CDATA[Dominik Goltermann]]></category>
		<category><![CDATA[Matthias Schmidt]]></category>
		<category><![CDATA[video processing]]></category>

		<guid isPermaLink="false">http://blog.goltergaul.de/?p=690</guid>
		<description><![CDATA[For our multimedia security lesson Matthias Schmidt and I wrote a program that reads an MPEG-4 Simple Profile Byte stream and overwrites all I-Frames. The purpose of this program is to evaluate whether an encryption of I-Frames would be sufficient in order to make a video unwatchable. This technique could be used for example for [...]]]></description>
			<content:encoded><![CDATA[<p>For our multimedia security lesson Matthias Schmidt and I wrote a program that reads an MPEG-4 Simple Profile Byte stream and overwrites all I-Frames. The purpose of this program is to evaluate whether an encryption of I-Frames would be sufficient in order to make a video unwatchable. This technique could be used for example for Pay-TV.</p>
<h3>Results</h3>
<p>The first video shows an original and an encrypted video in comparison.</p>
<a href="http://blog.goltergaul.de/2010/05/does-encrypting-all-i-frames-of-a-video-make-it-unwatchable/"><em>Click here to view the embedded video.</em></a>
<p>The second video compares the same video using different GOP sizes (10 and 50)</p>
<a href="http://blog.goltergaul.de/2010/05/does-encrypting-all-i-frames-of-a-video-make-it-unwatchable/"><em>Click here to view the embedded video.</em></a>
<h3>Error Concealment</h3>
<p>We found out that some codecs (e.g. DirectShow) do a very good error concealment.<a href="http://blog.goltergaul.de/wp-content/uploads/2010/05/error_concealment.jpg"><img class="alignleft size-medium wp-image-701" title="error_concealment" src="http://blog.goltergaul.de/wp-content/uploads/2010/05/error_concealment-277x300.jpg" alt="error_concealment" width="277" height="300" /></a> The picture on the left shows two different videos played in two different players. As one can see, the second player reconstructs a slightly good image.</p>
<h3>How does it work?</h3>
<p>We are parsing the byte stream for VideoObjectPlanes which have the start code 0&#215;000001b6. If this code is followed by two bytes that are equal to 00 the we found an I-Frame. From here on we start overwriting thy byte stream until we reach the next start code 0&#215;000001.</p>
<h3>Code</h3>
<pre class="brush: cpp;">
#include &lt;iostream&gt;
#include &lt;fstream&gt;
using namespace std;

int main() {
	ifstream ifs(&quot;in.mp4&quot;, ios::in | ios::binary);
	ofstream ofs(&quot;output.mp4&quot;, ios::out | ios::binary);
	//initialize buffer to 0xffffffff
	unsigned char buffer[4] = {0xff, 0xff, 0xff, 0xff};
	bool write = false;
	int counter=0;
	unsigned long overallcount=0;
	unsigned long writecount=0;
	while(!ifs.eof())
	{
		//Shift to make space for new read.
		buffer[0] = buffer[1];
		buffer[1] = buffer[2];
		buffer[2] = buffer[3];

		//read next byte from file
		buffer[3] = ifs.get();

		//see if the current buffer contains the start code.
		if(buffer[0]==0x00 &amp;&amp; buffer[1]==0x00 &amp;&amp; buffer[2]==0x01) // 0x00 00 01 b6
		{
			write = false;
			if(buffer[3]==0xb6) {
				//cout &lt;&lt; &quot;VOP begin&quot; &lt;&lt;endl;
				//vop start code found
				//Test for I-frame
				unsigned char ch = ifs.get();
				ofs &lt;&lt; buffer[3];
				buffer[0] = buffer[1];
				buffer[1] = buffer[2];
				buffer[2] = buffer[3];

				//read next byte from file
				buffer[3] = ch;
				int vop_coding_type = (ch &amp; 0xc0) &gt;&gt; 6;   //masks out the first 2 bits and shifts them to the least significant bits of the uchar
				if(vop_coding_type == 0)
				{
					//It is an I-frame (hell yeah (: )
					write = true;
					cout &lt;&lt; ++counter &lt;&lt; &quot;. Iframe =)&quot; &lt;&lt; endl;
				}
			}
		}
		if(write) {
			ofs &lt;&lt; (char)0x0d;
			writecount++;
		}
		else {
			ofs &lt;&lt; buffer[3];
			overallcount++;
		}
	}

	cout &lt;&lt; &quot;Read : &quot; &lt;&lt; overallcount &lt;&lt; endl;
	cout &lt;&lt; &quot;Write: &quot; &lt;&lt; writecount &lt;&lt; endl;
	cout &lt;&lt; &quot;Percent overwritten: &quot; &lt;&lt; (float)writecount/(float)overallcount*100.0f &lt;&lt; endl;

	return 0;
}</pre>
<div class="sexy-bookmarks sexy-bookmarks-expand sexy-bookmarks-bg-sexy"><ul class="socials"><li class="sexy-delicious"><a href="http://del.icio.us/post?url=http://blog.goltergaul.de/2010/05/does-encrypting-all-i-frames-of-a-video-make-it-unwatchable/&amp;title=Does+encrypting+all+I-Frames+of+a+video+make+it+unwatchable%3F" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a></li><li class="sexy-facebook"><a href="http://www.facebook.com/share.php?u=http://blog.goltergaul.de/2010/05/does-encrypting-all-i-frames-of-a-video-make-it-unwatchable/&amp;t=Does+encrypting+all+I-Frames+of+a+video+make+it+unwatchable%3F" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a></li><li class="sexy-myspace"><a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://blog.goltergaul.de/2010/05/does-encrypting-all-i-frames-of-a-video-make-it-unwatchable/&amp;t=Does+encrypting+all+I-Frames+of+a+video+make+it+unwatchable%3F" rel="nofollow" class="external" title="Post this to MySpace">Post this to MySpace</a></li><li class="sexy-twitter"><a href="http://twitter.com/home?status=Does+encrypting+all+I-Frames+of+a+video+make+it+unwatchable%3F+-+http://b2l.me/s39vj+" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a></li><li class="sexy-friendfeed"><a href="http://www.friendfeed.com/share?title=Does+encrypting+all+I-Frames+of+a+video+make+it+unwatchable%3F&amp;link=http://blog.goltergaul.de/2010/05/does-encrypting-all-i-frames-of-a-video-make-it-unwatchable/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a></li><li class="sexy-google"><a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://blog.goltergaul.de/2010/05/does-encrypting-all-i-frames-of-a-video-make-it-unwatchable/&amp;title=Does+encrypting+all+I-Frames+of+a+video+make+it+unwatchable%3F" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a></li><li class="sexy-twittley"><a href="http://twittley.com/submit/?title=Does+encrypting+all+I-Frames+of+a+video+make+it+unwatchable%3F&amp;url=http%3A%2F%2Fblog.goltergaul.de%2F2010%2F05%2Fdoes-encrypting-all-i-frames-of-a-video-make-it-unwatchable%2F&amp;desc=For%20our%20multimedia%20security%20lesson%20Matthias%20Schmidt%20and%20I%20wrote%20a%20program%20that%20reads%20an%20MPEG-4%20Simple%20Profile%20Byte%20stream%20and%20overwrites%20all%20I-Frames.%20The%20purpose%20of%20this%20program%20is%20to%20evaluate%20whether%20an%20encryption%20of%20I-Frames%20would%20be%20sufficient%20in%20order%20to%20make%20a%20video%20unwatchable.%20This%20technique&amp;pcat=Technology&amp;tags=" rel="nofollow" class="external" title="Submit this to Twittley">Submit this to Twittley</a></li><li class="sexy-digg"><a href="http://digg.com/submit?phase=2&amp;url=http://blog.goltergaul.de/2010/05/does-encrypting-all-i-frames-of-a-video-make-it-unwatchable/&amp;title=Does+encrypting+all+I-Frames+of+a+video+make+it+unwatchable%3F" rel="nofollow" class="external" title="Digg this!">Digg this!</a></li><li class="sexy-yahoobuzz"><a href="http://buzz.yahoo.com/submit/?submitUrl=http://blog.goltergaul.de/2010/05/does-encrypting-all-i-frames-of-a-video-make-it-unwatchable/&amp;submitHeadline=Does+encrypting+all+I-Frames+of+a+video+make+it+unwatchable%3F&amp;submitSummary=For%20our%20multimedia%20security%20lesson%20Matthias%20Schmidt%20and%20I%20wrote%20a%20program%20that%20reads%20an%20MPEG-4%20Simple%20Profile%20Byte%20stream%20and%20overwrites%20all%20I-Frames.%20The%20purpose%20of%20this%20program%20is%20to%20evaluate%20whether%20an%20encryption%20of%20I-Frames%20would%20be%20sufficient%20in%20order%20to%20make%20a%20video%20unwatchable.%20This%20technique&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" class="external" title="Buzz up!">Buzz up!</a></li></ul><div style="clear:both;"></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.goltergaul.de/2010/05/does-encrypting-all-i-frames-of-a-video-make-it-unwatchable/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Musicbook won Netd@ys Award</title>
		<link>http://blog.goltergaul.de/2010/04/musicbook-won-netdys-award/</link>
		<comments>http://blog.goltergaul.de/2010/04/musicbook-won-netdys-award/#comments</comments>
		<pubDate>Fri, 30 Apr 2010 07:03:53 +0000</pubDate>
		<dc:creator>Dominik Goltermann</dc:creator>
				<category><![CDATA[Flash & Flex]]></category>
		<category><![CDATA[My Projects]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[Dominik Goltermann]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Fh Salzburg]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Project]]></category>
		<category><![CDATA[qpt]]></category>

		<guid isPermaLink="false">http://blog.goltergaul.de/?p=685</guid>
		<description><![CDATA[Musicbook won the first place at the Netd@ys Young Creativity Award!
Share this on del.icio.usShare this on FacebookPost this to MySpaceTweet This!Share this on FriendFeedAdd this to Google BookmarksSubmit this to TwittleyDigg this!Buzz up!]]></description>
			<content:encoded><![CDATA[<p><a href="http://facebook.com/musictuner">Musicbook </a>won the first place at the <a href="http://netdays.at">Netd@ys Young Creativity Award</a>!</p>
<div class="sexy-bookmarks sexy-bookmarks-expand sexy-bookmarks-bg-sexy"><ul class="socials"><li class="sexy-delicious"><a href="http://del.icio.us/post?url=http://blog.goltergaul.de/2010/04/musicbook-won-netdys-award/&amp;title=Musicbook+won+Netd%40ys+Award" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a></li><li class="sexy-facebook"><a href="http://www.facebook.com/share.php?u=http://blog.goltergaul.de/2010/04/musicbook-won-netdys-award/&amp;t=Musicbook+won+Netd%40ys+Award" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a></li><li class="sexy-myspace"><a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://blog.goltergaul.de/2010/04/musicbook-won-netdys-award/&amp;t=Musicbook+won+Netd%40ys+Award" rel="nofollow" class="external" title="Post this to MySpace">Post this to MySpace</a></li><li class="sexy-twitter"><a href="http://twitter.com/home?status=Musicbook+won+Netd%40ys+Award+-+http://b2l.me/r3cjv+" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a></li><li class="sexy-friendfeed"><a href="http://www.friendfeed.com/share?title=Musicbook+won+Netd%40ys+Award&amp;link=http://blog.goltergaul.de/2010/04/musicbook-won-netdys-award/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a></li><li class="sexy-google"><a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://blog.goltergaul.de/2010/04/musicbook-won-netdys-award/&amp;title=Musicbook+won+Netd%40ys+Award" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a></li><li class="sexy-twittley"><a href="http://twittley.com/submit/?title=Musicbook+won+Netd%40ys+Award&amp;url=http%3A%2F%2Fblog.goltergaul.de%2F2010%2F04%2Fmusicbook-won-netdys-award%2F&amp;desc=Musicbook%20won%20the%20first%20place%20at%20the%20Netd%40ys%20Young%20Creativity%20Award%21&amp;pcat=Technology&amp;tags=" rel="nofollow" class="external" title="Submit this to Twittley">Submit this to Twittley</a></li><li class="sexy-digg"><a href="http://digg.com/submit?phase=2&amp;url=http://blog.goltergaul.de/2010/04/musicbook-won-netdys-award/&amp;title=Musicbook+won+Netd%40ys+Award" rel="nofollow" class="external" title="Digg this!">Digg this!</a></li><li class="sexy-yahoobuzz"><a href="http://buzz.yahoo.com/submit/?submitUrl=http://blog.goltergaul.de/2010/04/musicbook-won-netdys-award/&amp;submitHeadline=Musicbook+won+Netd%40ys+Award&amp;submitSummary=Musicbook%20won%20the%20first%20place%20at%20the%20Netd%40ys%20Young%20Creativity%20Award%21&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" class="external" title="Buzz up!">Buzz up!</a></li></ul><div style="clear:both;"></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.goltergaul.de/2010/04/musicbook-won-netdys-award/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android Game Project &#8211; Basics of Threads and Canvas</title>
		<link>http://blog.goltergaul.de/2010/03/android-game-project-basics-of-threads-and-canvas/</link>
		<comments>http://blog.goltergaul.de/2010/03/android-game-project-basics-of-threads-and-canvas/#comments</comments>
		<pubDate>Thu, 04 Mar 2010 17:39:57 +0000</pubDate>
		<dc:creator>Dominik Goltermann</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[My Projects]]></category>
		<category><![CDATA[Dominik Goltermann]]></category>
		<category><![CDATA[Fh Salzburg]]></category>
		<category><![CDATA[Project]]></category>

		<guid isPermaLink="false">http://blog.goltergaul.de/?p=673</guid>
		<description><![CDATA[This semester Robert Sommeregger, Thomas Czernik and I will create an Android game   The goal of the game will be to get out of the way of obstacles using the Androids phone acceleration sensors. The setting will be under water.
In order to get into Android programming we wanted to test how fluid a [...]]]></description>
			<content:encoded><![CDATA[<p>This semester Robert Sommeregger, Thomas Czernik and I will create an Android game <img src='http://blog.goltergaul.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  The goal of the game will be to get out of the way of obstacles using the Androids phone acceleration sensors. The setting will be under water.</p>
<p>In order to get into Android programming we wanted to test how fluid a 4 megapixel image could be moved around the screen. To be able to move such an image we needed a thread to update the position and to redraw our Canvas view.</p>
<p>The first idea was to have a thread which updates the coordinates where the picture should be drawn on the screen and then call a redraw() function. We soon realized that a Canvas could only be forced to redraw itself by invalidating it. But there is a security feature of android that only allows Activities to invalidate Views if it is a children of the Activity. We had a Class UpdateThread which implements the Runnable interface: (Game extends Canvas and draws our Picture)<span id="more-673"></span></p>
<pre class="brush: java;">
public class main extends Activity {

private Game game;

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        game = new Game(this);
        setContentView(game);

        Thread myThread = new Thread(new UpdateThread());
        myThread.start();

    }

public class UpdateThread implements Runnable {

    	@Override
    	public void run() {
    		//... code to manipulate position
            }
    	}

    }

}
</pre>
<p>If you now try to call game.invalidate() from this run() function Android will throw an exception because game is not a child of UpdateThread. The solution is to implement a handler which can communicate with our thread &#8211; it is building a interface between our thread and the main class. We insert the following in the main class:</p>
<pre class="brush: java;">
    public Handler updateHandler = new Handler(){
    	/** Gets called on every message that is received */
        // @Override
        public void handleMessage(Message msg) {
        	game.update();
            game.invalidate();
            super.handleMessage(msg);
        }
    };
</pre>
<p>We fill our run() method with this code:</p>
<pre class="brush: java;">
while(true){
    main.this.updateHandler.sendEmptyMessage(0);
}
</pre>
<p>Now each thime main.this.updateHandler.sendEmptyMessage(0) is called the handler reacts. The point is that our handler now can call game.invalidate() because game is a child of main.</p>
<p>Here is the full code:</p>
<p>main.java</p>
<pre class="brush: java;">
package muhkuh.app;

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;

public class main extends Activity {

	private Game game;

    public Handler updateHandler = new Handler(){
    	/** Gets called on every message that is received */
        // @Override
        public void handleMessage(Message msg) {
        	game.update();
            game.invalidate();
            super.handleMessage(msg);
        }
    };

    /** Called when the activity is first created. */
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        game = new Game(this);
        setContentView(game);

        Thread myThread = new Thread(new UpdateThread());
        myThread.start();

    }

    public class UpdateThread implements Runnable {

    	@Override
    	public void run() {
    		 while(true){
                 main.this.updateHandler.sendEmptyMessage(0);
            }
    	}

    }

}
</pre>
<p>game.java</p>
<pre class="brush: java;">
package muhkuh.app;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.View;

public class Game extends View {

	private Bitmap image;
	private Paint paint;
	private int x=0;

	public Game(Context context) {
		super(context);
		image = Bitmap.createBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.test));
		paint = new Paint();
	}

	// called every Frame
	protected void onDraw(Canvas canvas) {
		canvas.drawBitmap(image, x, 0, paint);
	}

	// called by thread
	public void update() {
		if(x &lt; 200)
    		x++;
    	else
    		x=0;
	}

}
</pre>
<div class="sexy-bookmarks sexy-bookmarks-expand sexy-bookmarks-bg-sexy"><ul class="socials"><li class="sexy-delicious"><a href="http://del.icio.us/post?url=http://blog.goltergaul.de/2010/03/android-game-project-basics-of-threads-and-canvas/&amp;title=Android+Game+Project+-+Basics+of+Threads+and+Canvas" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a></li><li class="sexy-facebook"><a href="http://www.facebook.com/share.php?u=http://blog.goltergaul.de/2010/03/android-game-project-basics-of-threads-and-canvas/&amp;t=Android+Game+Project+-+Basics+of+Threads+and+Canvas" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a></li><li class="sexy-myspace"><a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://blog.goltergaul.de/2010/03/android-game-project-basics-of-threads-and-canvas/&amp;t=Android+Game+Project+-+Basics+of+Threads+and+Canvas" rel="nofollow" class="external" title="Post this to MySpace">Post this to MySpace</a></li><li class="sexy-twitter"><a href="http://twitter.com/home?status=Android+Game+Project+-+Basics+of+Threads+and+Canvas+-+http://b2l.me/h25jz+" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a></li><li class="sexy-friendfeed"><a href="http://www.friendfeed.com/share?title=Android+Game+Project+-+Basics+of+Threads+and+Canvas&amp;link=http://blog.goltergaul.de/2010/03/android-game-project-basics-of-threads-and-canvas/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a></li><li class="sexy-google"><a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://blog.goltergaul.de/2010/03/android-game-project-basics-of-threads-and-canvas/&amp;title=Android+Game+Project+-+Basics+of+Threads+and+Canvas" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a></li><li class="sexy-twittley"><a href="http://twittley.com/submit/?title=Android+Game+Project+-+Basics+of+Threads+and+Canvas&amp;url=http%3A%2F%2Fblog.goltergaul.de%2F2010%2F03%2Fandroid-game-project-basics-of-threads-and-canvas%2F&amp;desc=This%20semester%20Robert%20Sommeregger%2C%20Thomas%20Czernik%20and%20I%20will%20create%20an%20Android%20game%20%3A%29%20The%20goal%20of%20the%20game%20will%20be%20to%20get%20out%20of%20the%20way%20of%20obstacles%20using%20the%20Androids%20phone%20acceleration%20sensors.%20The%20setting%20will%20be%20under%20water.%0D%0A%0D%0AIn%20order%20to%20get%20into%20Android%20programming%20we%20wanted%20to%20test%20how%20flui&amp;pcat=Technology&amp;tags=" rel="nofollow" class="external" title="Submit this to Twittley">Submit this to Twittley</a></li><li class="sexy-digg"><a href="http://digg.com/submit?phase=2&amp;url=http://blog.goltergaul.de/2010/03/android-game-project-basics-of-threads-and-canvas/&amp;title=Android+Game+Project+-+Basics+of+Threads+and+Canvas" rel="nofollow" class="external" title="Digg this!">Digg this!</a></li><li class="sexy-yahoobuzz"><a href="http://buzz.yahoo.com/submit/?submitUrl=http://blog.goltergaul.de/2010/03/android-game-project-basics-of-threads-and-canvas/&amp;submitHeadline=Android+Game+Project+-+Basics+of+Threads+and+Canvas&amp;submitSummary=This%20semester%20Robert%20Sommeregger%2C%20Thomas%20Czernik%20and%20I%20will%20create%20an%20Android%20game%20%3A%29%20The%20goal%20of%20the%20game%20will%20be%20to%20get%20out%20of%20the%20way%20of%20obstacles%20using%20the%20Androids%20phone%20acceleration%20sensors.%20The%20setting%20will%20be%20under%20water.%0D%0A%0D%0AIn%20order%20to%20get%20into%20Android%20programming%20we%20wanted%20to%20test%20how%20flui&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" class="external" title="Buzz up!">Buzz up!</a></li></ul><div style="clear:both;"></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.goltergaul.de/2010/03/android-game-project-basics-of-threads-and-canvas/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>MusicBook in our local newspaper!</title>
		<link>http://blog.goltergaul.de/2010/02/musicbook-in-our-local-newspaper/</link>
		<comments>http://blog.goltergaul.de/2010/02/musicbook-in-our-local-newspaper/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 15:18:18 +0000</pubDate>
		<dc:creator>Dominik Goltermann</dc:creator>
				<category><![CDATA[Flash & Flex]]></category>
		<category><![CDATA[My Projects]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Dominik Goltermann]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Fh Salzburg]]></category>
		<category><![CDATA[Project]]></category>

		<guid isPermaLink="false">http://blog.goltergaul.de/?p=666</guid>
		<description><![CDATA[The Facebook application Thomas Czernik and I developed showed up in two of our local newspapers! You can read the article here.
Share this on del.icio.usShare this on FacebookPost this to MySpaceTweet This!Share this on FriendFeedAdd this to Google BookmarksSubmit this to TwittleyDigg this!Buzz up!]]></description>
			<content:encoded><![CDATA[<p>The Facebook application Thomas Czernik and I developed showed up in two of our local newspapers! You can read the article <a href="http://blog.goltergaul.de/wp-content/uploads/2010/02/MusicBook-Zeitungsartikel.jpg">here.</a></p>
<div class="sexy-bookmarks sexy-bookmarks-expand sexy-bookmarks-bg-sexy"><ul class="socials"><li class="sexy-delicious"><a href="http://del.icio.us/post?url=http://blog.goltergaul.de/2010/02/musicbook-in-our-local-newspaper/&amp;title=MusicBook+in+our+local+newspaper%21" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a></li><li class="sexy-facebook"><a href="http://www.facebook.com/share.php?u=http://blog.goltergaul.de/2010/02/musicbook-in-our-local-newspaper/&amp;t=MusicBook+in+our+local+newspaper%21" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a></li><li class="sexy-myspace"><a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://blog.goltergaul.de/2010/02/musicbook-in-our-local-newspaper/&amp;t=MusicBook+in+our+local+newspaper%21" rel="nofollow" class="external" title="Post this to MySpace">Post this to MySpace</a></li><li class="sexy-twitter"><a href="http://twitter.com/home?status=MusicBook+in+our+local+newspaper%21+-+http://b2l.me/hcfa8+" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a></li><li class="sexy-friendfeed"><a href="http://www.friendfeed.com/share?title=MusicBook+in+our+local+newspaper%21&amp;link=http://blog.goltergaul.de/2010/02/musicbook-in-our-local-newspaper/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a></li><li class="sexy-google"><a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://blog.goltergaul.de/2010/02/musicbook-in-our-local-newspaper/&amp;title=MusicBook+in+our+local+newspaper%21" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a></li><li class="sexy-twittley"><a href="http://twittley.com/submit/?title=MusicBook+in+our+local+newspaper%21&amp;url=http%3A%2F%2Fblog.goltergaul.de%2F2010%2F02%2Fmusicbook-in-our-local-newspaper%2F&amp;desc=The%20Facebook%20application%20Thomas%20Czernik%20and%20I%20developed%20showed%20up%20in%20two%20of%20our%20local%20newspapers%21%20You%20can%20read%20the%20article%20here.&amp;pcat=Technology&amp;tags=" rel="nofollow" class="external" title="Submit this to Twittley">Submit this to Twittley</a></li><li class="sexy-digg"><a href="http://digg.com/submit?phase=2&amp;url=http://blog.goltergaul.de/2010/02/musicbook-in-our-local-newspaper/&amp;title=MusicBook+in+our+local+newspaper%21" rel="nofollow" class="external" title="Digg this!">Digg this!</a></li><li class="sexy-yahoobuzz"><a href="http://buzz.yahoo.com/submit/?submitUrl=http://blog.goltergaul.de/2010/02/musicbook-in-our-local-newspaper/&amp;submitHeadline=MusicBook+in+our+local+newspaper%21&amp;submitSummary=The%20Facebook%20application%20Thomas%20Czernik%20and%20I%20developed%20showed%20up%20in%20two%20of%20our%20local%20newspapers%21%20You%20can%20read%20the%20article%20here.&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" class="external" title="Buzz up!">Buzz up!</a></li></ul><div style="clear:both;"></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.goltergaul.de/2010/02/musicbook-in-our-local-newspaper/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fractal Zoom with PureData</title>
		<link>http://blog.goltergaul.de/2010/01/fractal-zoom-with-puredata/</link>
		<comments>http://blog.goltergaul.de/2010/01/fractal-zoom-with-puredata/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 18:13:25 +0000</pubDate>
		<dc:creator>Dominik Goltermann</dc:creator>
				<category><![CDATA[My Projects]]></category>
		<category><![CDATA[puredata]]></category>

		<guid isPermaLink="false">http://blog.goltergaul.de/?p=661</guid>
		<description><![CDATA[I made a fractal zoom animation using the visual programming language PureData and a glsl shader for school. Here it is  
Share this on del.icio.usShare this on FacebookPost this to MySpaceTweet This!Share this on FriendFeedAdd this to Google BookmarksSubmit this to TwittleyDigg this!Buzz up!]]></description>
			<content:encoded><![CDATA[<p>I made a fractal zoom animation using the visual programming language PureData and a glsl shader for school. Here it is <img src='http://blog.goltergaul.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<a href="http://blog.goltergaul.de/2010/01/fractal-zoom-with-puredata/"><em>Click here to view the embedded video.</em></a>
<div class="sexy-bookmarks sexy-bookmarks-expand sexy-bookmarks-bg-sexy"><ul class="socials"><li class="sexy-delicious"><a href="http://del.icio.us/post?url=http://blog.goltergaul.de/2010/01/fractal-zoom-with-puredata/&amp;title=Fractal+Zoom+with+PureData" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a></li><li class="sexy-facebook"><a href="http://www.facebook.com/share.php?u=http://blog.goltergaul.de/2010/01/fractal-zoom-with-puredata/&amp;t=Fractal+Zoom+with+PureData" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a></li><li class="sexy-myspace"><a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://blog.goltergaul.de/2010/01/fractal-zoom-with-puredata/&amp;t=Fractal+Zoom+with+PureData" rel="nofollow" class="external" title="Post this to MySpace">Post this to MySpace</a></li><li class="sexy-twitter"><a href="http://twitter.com/home?status=Fractal+Zoom+with+PureData+-+http://b2l.me/d29md+" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a></li><li class="sexy-friendfeed"><a href="http://www.friendfeed.com/share?title=Fractal+Zoom+with+PureData&amp;link=http://blog.goltergaul.de/2010/01/fractal-zoom-with-puredata/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a></li><li class="sexy-google"><a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://blog.goltergaul.de/2010/01/fractal-zoom-with-puredata/&amp;title=Fractal+Zoom+with+PureData" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a></li><li class="sexy-twittley"><a href="http://twittley.com/submit/?title=Fractal+Zoom+with+PureData&amp;url=http%3A%2F%2Fblog.goltergaul.de%2F2010%2F01%2Ffractal-zoom-with-puredata%2F&amp;desc=I%20made%20a%20fractal%20zoom%20animation%20using%20the%20visual%20programming%20language%20PureData%20and%20a%20glsl%20shader%20for%20school.%20Here%20it%20is%20%3A%29%0D%0A%0D&amp;pcat=Technology&amp;tags=" rel="nofollow" class="external" title="Submit this to Twittley">Submit this to Twittley</a></li><li class="sexy-digg"><a href="http://digg.com/submit?phase=2&amp;url=http://blog.goltergaul.de/2010/01/fractal-zoom-with-puredata/&amp;title=Fractal+Zoom+with+PureData" rel="nofollow" class="external" title="Digg this!">Digg this!</a></li><li class="sexy-yahoobuzz"><a href="http://buzz.yahoo.com/submit/?submitUrl=http://blog.goltergaul.de/2010/01/fractal-zoom-with-puredata/&amp;submitHeadline=Fractal+Zoom+with+PureData&amp;submitSummary=I%20made%20a%20fractal%20zoom%20animation%20using%20the%20visual%20programming%20language%20PureData%20and%20a%20glsl%20shader%20for%20school.%20Here%20it%20is%20%3A%29%0D%0A%0D&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" class="external" title="Buzz up!">Buzz up!</a></li></ul><div style="clear:both;"></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.goltergaul.de/2010/01/fractal-zoom-with-puredata/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Second semester project project finished &#8211; Musicbook released</title>
		<link>http://blog.goltergaul.de/2010/01/second-semester-project-project-finished-musicbook-released/</link>
		<comments>http://blog.goltergaul.de/2010/01/second-semester-project-project-finished-musicbook-released/#comments</comments>
		<pubDate>Fri, 15 Jan 2010 16:27:24 +0000</pubDate>
		<dc:creator>Dominik Goltermann</dc:creator>
				<category><![CDATA[Flash & Flex]]></category>
		<category><![CDATA[My Projects]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[Dominik Goltermann]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Fh Salzburg]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Thomas Czernik]]></category>

		<guid isPermaLink="false">http://blog.goltergaul.de/?p=655</guid>
		<description><![CDATA[Thomas Czernik and I just finished our Facebook app &#8220;Musicbook&#8221;. It&#8217;s a Youtube video player, so one can organize music videos into playlists and share them with one&#8217;s friends. In order to use Musicbook you only need a Facebook account and you&#8217;ll be able to search music on Youtube and to insert as many search [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Thomas Czernik and I just finished our Facebook app &#8220;Musicbook&#8221;. It&#8217;s a Youtube video player, so one can organize music videos into playlists and share them with one&#8217;s friends. In order to use Musicbook you only need a Facebook account and you&#8217;ll be able to search music on Youtube and to insert as many search results into your playlists as you like. Musicbook automatically plays one track after another and videos can be added while playing. So it is a great possibility to play any music at parties or similar events. Of course it can be used to listen to your favorite music while surfing or working too <img src='http://blog.goltergaul.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> <a href="http://blog.goltergaul.de/wp-content/uploads/2010/01/musicbook_dia.png"><img class="aligncenter size-large wp-image-657" title="musicbook_dia" src="http://blog.goltergaul.de/wp-content/uploads/2010/01/musicbook_dia-1024x421.png" alt="musicbook_dia" width="502" height="207" /></a>The project was realised in Flex 4 beta 2 using Adobe Flash Builder and Adobe Catalyst. Our backend uses Ruby on Rails and a plugin called RubyAMF to communicate with our Flex application. MusicBrainz is used to retrive Metadata for Youtube videos.</p>
<h2>Check out the app on <a href="http://apps.facebook.com/musicplaylists/" target="_blank">Facebook!</a></h2>
<div class="sexy-bookmarks sexy-bookmarks-expand sexy-bookmarks-bg-sexy"><ul class="socials"><li class="sexy-delicious"><a href="http://del.icio.us/post?url=http://blog.goltergaul.de/2010/01/second-semester-project-project-finished-musicbook-released/&amp;title=Second+semester+project+project+finished+-+Musicbook+released+" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a></li><li class="sexy-facebook"><a href="http://www.facebook.com/share.php?u=http://blog.goltergaul.de/2010/01/second-semester-project-project-finished-musicbook-released/&amp;t=Second+semester+project+project+finished+-+Musicbook+released+" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a></li><li class="sexy-myspace"><a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://blog.goltergaul.de/2010/01/second-semester-project-project-finished-musicbook-released/&amp;t=Second+semester+project+project+finished+-+Musicbook+released+" rel="nofollow" class="external" title="Post this to MySpace">Post this to MySpace</a></li><li class="sexy-twitter"><a href="http://twitter.com/home?status=Second+semester+project+project+finished+-+Musicbook+released++-+http://b2l.me/ds5h9+" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a></li><li class="sexy-friendfeed"><a href="http://www.friendfeed.com/share?title=Second+semester+project+project+finished+-+Musicbook+released+&amp;link=http://blog.goltergaul.de/2010/01/second-semester-project-project-finished-musicbook-released/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a></li><li class="sexy-google"><a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://blog.goltergaul.de/2010/01/second-semester-project-project-finished-musicbook-released/&amp;title=Second+semester+project+project+finished+-+Musicbook+released+" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a></li><li class="sexy-twittley"><a href="http://twittley.com/submit/?title=Second+semester+project+project+finished+-+Musicbook+released+&amp;url=http%3A%2F%2Fblog.goltergaul.de%2F2010%2F01%2Fsecond-semester-project-project-finished-musicbook-released%2F&amp;desc=Thomas%20Czernik%20and%20I%20just%20finished%20our%20Facebook%20app%20%22Musicbook%22.%20It%27s%20a%20Youtube%20video%20player%2C%20so%20one%20can%20organize%20music%20videos%20into%20playlists%20and%20share%20them%20with%20one%27s%20friends.%20In%20order%20to%20use%20Musicbook%20you%20only%20need%20a%20Facebook%20account%20and%20you%27ll%20be%20able%20to%20search%20music%20on%20Youtube%20and%20to%20insert%20as%20m&amp;pcat=Technology&amp;tags=" rel="nofollow" class="external" title="Submit this to Twittley">Submit this to Twittley</a></li><li class="sexy-digg"><a href="http://digg.com/submit?phase=2&amp;url=http://blog.goltergaul.de/2010/01/second-semester-project-project-finished-musicbook-released/&amp;title=Second+semester+project+project+finished+-+Musicbook+released+" rel="nofollow" class="external" title="Digg this!">Digg this!</a></li><li class="sexy-yahoobuzz"><a href="http://buzz.yahoo.com/submit/?submitUrl=http://blog.goltergaul.de/2010/01/second-semester-project-project-finished-musicbook-released/&amp;submitHeadline=Second+semester+project+project+finished+-+Musicbook+released+&amp;submitSummary=Thomas%20Czernik%20and%20I%20just%20finished%20our%20Facebook%20app%20%22Musicbook%22.%20It%27s%20a%20Youtube%20video%20player%2C%20so%20one%20can%20organize%20music%20videos%20into%20playlists%20and%20share%20them%20with%20one%27s%20friends.%20In%20order%20to%20use%20Musicbook%20you%20only%20need%20a%20Facebook%20account%20and%20you%27ll%20be%20able%20to%20search%20music%20on%20Youtube%20and%20to%20insert%20as%20m&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" class="external" title="Buzz up!">Buzz up!</a></li></ul><div style="clear:both;"></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.goltergaul.de/2010/01/second-semester-project-project-finished-musicbook-released/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Facebook: Inviting people to your application from within actionscript</title>
		<link>http://blog.goltergaul.de/2009/12/facebook-inviting-people-to-your-application-from-within-actionscript/</link>
		<comments>http://blog.goltergaul.de/2009/12/facebook-inviting-people-to-your-application-from-within-actionscript/#comments</comments>
		<pubDate>Thu, 31 Dec 2009 18:45:12 +0000</pubDate>
		<dc:creator>Dominik Goltermann</dc:creator>
				<category><![CDATA[Useful things]]></category>
		<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.goltergaul.de/?p=643</guid>
		<description><![CDATA[I tried hard to figure this out and I found very little information on this topic on the Internet so this is why i wrote this article. Did you ever try to send someone an invitation to use your app? Like Farmville does with sending gifts? Then you probably stumbled upon the multi-friends-selector fbml tag. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.goltergaul.de/wp-content/uploads/2009/12/invite_popup1.png"><img class="alignleft size-medium wp-image-651" title="invite_popup1" src="http://blog.goltergaul.de/wp-content/uploads/2009/12/invite_popup1-300x89.png" alt="invite_popup1" width="300" height="89" /></a>I tried hard to figure this out and I found very little information on this topic on the Internet so this is why i wrote this article. Did you ever try to send someone an invitation to use your app? Like Farmville does with sending gifts? Then you probably stumbled upon the multi-friends-selector fbml tag. In my case i wanted to only invite one specific person via Actionscript. After much research on google i gave it up. There seems to be no way to do this from the API. But i found a good alternative which works as follows: You call a JavaScript function on your Canvas page from your Flash application. This JavaScript function pops up a dialog which includes a request from fbml tag. This dialog looks like the one in the picture on the left.</p>
<pre class="brush: xml;">&lt;fb:request-form action='index.php' method='POST' invite='true' type='Yor Application Name' content='Some comment here... &lt;?php echo htmlentities(&quot;&lt;fb:req-choice url=\&quot;http://apps.facebook.com/musicplaylists/\&quot; label=\&quot;Button Caption for Accept\&quot;&quot;) ?&gt;' &gt;

&lt;fb:request-form-submit uid='xxxxx' label='%n is not using YOUR APP NAME. Klick here to invite him/her'/&gt;

&lt;/fb:request-form&gt;</pre>
<p><a href="http://blog.goltergaul.de/wp-content/uploads/2009/12/invite_popup2.png"><img class="alignleft size-medium wp-image-652" title="invite_popup2" src="http://blog.goltergaul.de/wp-content/uploads/2009/12/invite_popup2-300x195.png" alt="invite_popup2" width="300" height="195" /></a>The code above  generates a Button. When the user clicks on it it opens a popup where one can enter a optional message and send the invitation. But how is this supposed to work in Actionscript? Actually it isn&#8217;t. But we can do a workaround. We can open a popup including this button. Its not the user-friendliest solution but it is a good one if you need to invite specific persons. (This person is specified by the uid attribute of the request-form-submit tag)</p>
<p>So we could write a JavaScript (FBJS) function to open such a dialog with the request-form in it. Unfortunately there is a problem: Because Facebook has hard restrictions for Javascript we are not able to change the value of the uid attribute of the request-form-submit tag <img src='http://blog.goltergaul.de/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  But there is a workaround: We can load the fbml tags per Ajax and fill them in our dialog:</p>
<pre class="brush: xml;">&lt;fb:js-string var=&quot;dialogInvite&quot;&gt;
	&lt;div id=&quot;dialog_content&quot;&gt;
		&lt;div class=&quot;dialog_loading&quot;&gt;Loading...&lt;/div&gt;
	&lt;/div&gt;
&lt;/fb:js-string&gt;

&lt;script type='text/javascript'&gt;
&lt;!--
	function onRequestComplete(result) {
            document.getElementById('dialog_content').setInnerFBML(result);
        }

        function do_adduser(uid) {
            var ajax = new Ajax();

            ajax.responseType = Ajax.FBML;
            ajax.ondone = onRequestComplete;

            ajax.requireLogin = true;
	    new Dialog(Dialog.DIALOG_POP).showMessage('Invite friends', dialogInvite,button_cancel='Cancel');
            ajax.post('http://URL TO YOUR SERVER.de/invite.php?uid='+uid);
        }
--&gt;
&lt;/script&gt;</pre>
<p>The code of invite.php looks like this:</p>
<pre class="brush: php;">&lt;fb:request-form action='index.php' method='POST' invite='true' type='Yor Application Name' content='Some comment here... &lt;?php echo htmlentities(&quot;&lt;fb:req-choice url=\&quot;http://apps.facebook.com/musicplaylists/\&quot; label=\&quot;Button Caption for Accept\&quot;&quot;) ?&gt;' &gt;

&lt;fb:request-form-submit uid='&lt;?php echo $_GET[&quot;uid&quot;]?&gt;' label='%n is not using YOUR APP NAME. Klick here to invite him/her'/&gt;

&lt;/fb:request-form&gt;</pre>
<p>When you call do_adduser(13234); it would open a popup asking you to invite the user with id 13234. In Order to call this JavaScript function from within your ActionScript program you have to insert a fbjs-bridge tag before your swf tag and an <strong>empty </strong>script tag with an <strong>empty </strong>comment in it:</p>
<pre class="brush: xml;">&lt;fb:fbjs-bridge/&gt;
&lt;fb:swf swfsrc=&quot;http://URL TO YOUR SERVER.de/flashapp.swf&quot;/&gt;
&lt;script&gt;&lt;!-- --&gt;&lt;/script&gt;
</pre>
<p>Now you can call do_adduser(123) from actionscript:</p>
<pre class="brush: as3;">var lconn:LocalConnection = new LocalConnection;

lconn.send(LoaderInfo(root.loaderInfo).parameters.fb_local_connection, &quot;callFBJS&quot;, &quot;do_adduser&quot;, [123]);
</pre>
<p>LoaderInfo(root.loaderInfo).parameters.fb_local_connection will need the fbjs-bridge working correctly.</p>
<p>I hope this post helped you <img src='http://blog.goltergaul.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 536px; width: 1px; height: 1px;">
<pre>&lt;fb:request-form action='index.php' method='POST' invite='true' type='Yor Application Name' content='Some comment here... &lt;?php echo htmlentities("&lt;fb:req-choice url="http://apps.facebook.com/musicplaylists/" label="Button Caption for Accept"") ?&gt;' &gt;

&lt;fb:request-form-submit uid='xxxxx' label='%n is not using YOUR APP NAME. Klick here to invite him/her'/&gt;

&lt;/fb:request-form&gt;</pre>
</div>
<div class="sexy-bookmarks sexy-bookmarks-expand sexy-bookmarks-bg-sexy"><ul class="socials"><li class="sexy-delicious"><a href="http://del.icio.us/post?url=http://blog.goltergaul.de/2009/12/facebook-inviting-people-to-your-application-from-within-actionscript/&amp;title=Facebook%3A+Inviting+people+to+your+application+from+within+actionscript" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a></li><li class="sexy-facebook"><a href="http://www.facebook.com/share.php?u=http://blog.goltergaul.de/2009/12/facebook-inviting-people-to-your-application-from-within-actionscript/&amp;t=Facebook%3A+Inviting+people+to+your+application+from+within+actionscript" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a></li><li class="sexy-myspace"><a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://blog.goltergaul.de/2009/12/facebook-inviting-people-to-your-application-from-within-actionscript/&amp;t=Facebook%3A+Inviting+people+to+your+application+from+within+actionscript" rel="nofollow" class="external" title="Post this to MySpace">Post this to MySpace</a></li><li class="sexy-twitter"><a href="http://twitter.com/home?status=Facebook%3A+Inviting+people+to+your+application+from+within+actionscript+-+http://b2l.me/cnfh8+" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a></li><li class="sexy-friendfeed"><a href="http://www.friendfeed.com/share?title=Facebook%3A+Inviting+people+to+your+application+from+within+actionscript&amp;link=http://blog.goltergaul.de/2009/12/facebook-inviting-people-to-your-application-from-within-actionscript/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a></li><li class="sexy-google"><a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://blog.goltergaul.de/2009/12/facebook-inviting-people-to-your-application-from-within-actionscript/&amp;title=Facebook%3A+Inviting+people+to+your+application+from+within+actionscript" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a></li><li class="sexy-twittley"><a href="http://twittley.com/submit/?title=Facebook%3A+Inviting+people+to+your+application+from+within+actionscript&amp;url=http%3A%2F%2Fblog.goltergaul.de%2F2009%2F12%2Ffacebook-inviting-people-to-your-application-from-within-actionscript%2F&amp;desc=I%20tried%20hard%20to%20figure%20this%20out%20and%20I%20found%20very%20little%20information%20on%20this%20topic%20on%20the%20Internet%20so%20this%20is%20why%20i%20wrote%20this%20article.%20Did%20you%20ever%20try%20to%20send%20someone%20an%20invitation%20to%20use%20your%20app%3F%20Like%20Farmville%20does%20with%20sending%20gifts%3F%20Then%20you%20probably%20stumbled%20upon%20the%20multi-friends-selector%20fb&amp;pcat=Technology&amp;tags=" rel="nofollow" class="external" title="Submit this to Twittley">Submit this to Twittley</a></li><li class="sexy-digg"><a href="http://digg.com/submit?phase=2&amp;url=http://blog.goltergaul.de/2009/12/facebook-inviting-people-to-your-application-from-within-actionscript/&amp;title=Facebook%3A+Inviting+people+to+your+application+from+within+actionscript" rel="nofollow" class="external" title="Digg this!">Digg this!</a></li><li class="sexy-yahoobuzz"><a href="http://buzz.yahoo.com/submit/?submitUrl=http://blog.goltergaul.de/2009/12/facebook-inviting-people-to-your-application-from-within-actionscript/&amp;submitHeadline=Facebook%3A+Inviting+people+to+your+application+from+within+actionscript&amp;submitSummary=I%20tried%20hard%20to%20figure%20this%20out%20and%20I%20found%20very%20little%20information%20on%20this%20topic%20on%20the%20Internet%20so%20this%20is%20why%20i%20wrote%20this%20article.%20Did%20you%20ever%20try%20to%20send%20someone%20an%20invitation%20to%20use%20your%20app%3F%20Like%20Farmville%20does%20with%20sending%20gifts%3F%20Then%20you%20probably%20stumbled%20upon%20the%20multi-friends-selector%20fb&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" class="external" title="Buzz up!">Buzz up!</a></li></ul><div style="clear:both;"></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.goltergaul.de/2009/12/facebook-inviting-people-to-your-application-from-within-actionscript/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>XNA DirectX C# Game Project finished</title>
		<link>http://blog.goltergaul.de/2009/12/xna-directx-c-game-project-finished/</link>
		<comments>http://blog.goltergaul.de/2009/12/xna-directx-c-game-project-finished/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 22:39:47 +0000</pubDate>
		<dc:creator>Dominik Goltermann</dc:creator>
				<category><![CDATA[C-Sharp]]></category>
		<category><![CDATA[DirectX]]></category>
		<category><![CDATA[My Projects]]></category>
		<category><![CDATA[Dominik Goltermann]]></category>
		<category><![CDATA[Fh Salzburg]]></category>
		<category><![CDATA[Fragment Shader]]></category>
		<category><![CDATA[Pixel Shader]]></category>
		<category><![CDATA[Project]]></category>
		<category><![CDATA[Robert Hallinger]]></category>
		<category><![CDATA[Vertex]]></category>
		<category><![CDATA[XNA]]></category>

		<guid isPermaLink="false">http://blog.goltergaul.de/?p=632</guid>
		<description><![CDATA[We finished our project! The final features include some physics: Our Vehicle can jump, it accelerates according to the actual fall, and steering isn&#8217;t possible if both front wheels leave the ground. Unfortunately we did not have time to refactor the code so there are some mistakes in it but overall it is relatively good. [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">We finished our project! The final features include some physics: Our Vehicle can jump, it accelerates according to the actual fall, and steering isn&#8217;t possible if both front wheels leave the ground. Unfortunately we did not have time to refactor the code so there are some mistakes in it but overall it is relatively good. Anyway our teacher was very impressed! <img src='http://blog.goltergaul.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p style="text-align: left;">Download the <a href="http://blog.goltergaul.de/wp-content/uploads/2009/12/cg2_project.zip">source</a>. It includes very much useful comments so that one can learn from it. The following is covered:</p>
<ul>
<li>Generating a terrain from a gray scale height map (bitmap) (including speed optimisation using graphic card buffers)
<ul>
<li>Vertices</li>
<li>Indices</li>
<li>Normals</li>
<li>Buffers</li>
</ul>
</li>
<li>Applying different textures for specific heights. Blending between these textures (includes shader programming)</li>
<li>Showing more detailed textures close-by and less detailed in the distance (includes shader programming)</li>
<li>Matrices and quaternions to rotate our vehicle and the camera</li>
<li>3D collision detection and handling
<ul>
<li>Plane &#8211; ray intersection</li>
</ul>
</li>
<li>Keyboard and mouse input</li>
<li>Loading 3D models</li>
<li>Basic physics</li>
</ul>
<p>Also have a look at these posts:</p>
<p><a href="http://blog.goltergaul.de/2009/10/xna-directx-c-game-project-making-a-vehicle-drive-on-a-generated-terrain/">http://blog.goltergaul.de/2009/10/xna-directx-c-game-project-making-a-vehicle-drive-on-a-generated-terrain/</a></p>
<p><a href="http://blog.goltergaul.de/2009/10/xna-directx-c-game-project-camera-class-and-first-terrain/">http://blog.goltergaul.de/2009/10/xna-directx-c-game-project-camera-class-and-first-terrain/</a></p>
<p><a href="http://blog.goltergaul.de/2009/10/xna-directx-c-game-project-%e2%80%93-depth-details/">http://blog.goltergaul.de/2009/10/xna-directx-c-game-project-%e2%80%93-depth-details/</a></p>
<p><a href="http://blog.goltergaul.de/2009/10/xna-directx-c-game-project-basic-collsion-detection/">http://blog.goltergaul.de/2009/10/xna-directx-c-game-project-basic-collsion-detection/</a></p>
<p style="text-align: center;"><a href="http://blog.goltergaul.de/2009/12/xna-directx-c-game-project-finished/"><em>Click here to view the embedded video.</em></a></p>
<div class="sexy-bookmarks sexy-bookmarks-expand sexy-bookmarks-bg-sexy"><ul class="socials"><li class="sexy-delicious"><a href="http://del.icio.us/post?url=http://blog.goltergaul.de/2009/12/xna-directx-c-game-project-finished/&amp;title=XNA+DirectX+C%23+Game+Project+finished" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a></li><li class="sexy-facebook"><a href="http://www.facebook.com/share.php?u=http://blog.goltergaul.de/2009/12/xna-directx-c-game-project-finished/&amp;t=XNA+DirectX+C%23+Game+Project+finished" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a></li><li class="sexy-myspace"><a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://blog.goltergaul.de/2009/12/xna-directx-c-game-project-finished/&amp;t=XNA+DirectX+C%23+Game+Project+finished" rel="nofollow" class="external" title="Post this to MySpace">Post this to MySpace</a></li><li class="sexy-twitter"><a href="http://twitter.com/home?status=XNA+DirectX+C%23+Game+Project+finished+-+http://b2l.me/brb4b+" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a></li><li class="sexy-friendfeed"><a href="http://www.friendfeed.com/share?title=XNA+DirectX+C%23+Game+Project+finished&amp;link=http://blog.goltergaul.de/2009/12/xna-directx-c-game-project-finished/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a></li><li class="sexy-google"><a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://blog.goltergaul.de/2009/12/xna-directx-c-game-project-finished/&amp;title=XNA+DirectX+C%23+Game+Project+finished" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a></li><li class="sexy-twittley"><a href="http://twittley.com/submit/?title=XNA+DirectX+C%23+Game+Project+finished&amp;url=http%3A%2F%2Fblog.goltergaul.de%2F2009%2F12%2Fxna-directx-c-game-project-finished%2F&amp;desc=We%20finished%20our%20project%21%20The%20final%20features%20include%20some%20physics%3A%20Our%20Vehicle%20can%20jump%2C%20it%20accelerates%20according%20to%20the%20actual%20fall%2C%20and%20steering%20isn%27t%20possible%20if%20both%20front%20wheels%20leave%20the%20ground.%20Unfortunately%20we%20did%20not%20have%20time%20to%20refactor%20the%20code%20so%20there%20are%20some%20mistakes%20in%20it%20but%20overall&amp;pcat=Technology&amp;tags=" rel="nofollow" class="external" title="Submit this to Twittley">Submit this to Twittley</a></li><li class="sexy-digg"><a href="http://digg.com/submit?phase=2&amp;url=http://blog.goltergaul.de/2009/12/xna-directx-c-game-project-finished/&amp;title=XNA+DirectX+C%23+Game+Project+finished" rel="nofollow" class="external" title="Digg this!">Digg this!</a></li><li class="sexy-yahoobuzz"><a href="http://buzz.yahoo.com/submit/?submitUrl=http://blog.goltergaul.de/2009/12/xna-directx-c-game-project-finished/&amp;submitHeadline=XNA+DirectX+C%23+Game+Project+finished&amp;submitSummary=We%20finished%20our%20project%21%20The%20final%20features%20include%20some%20physics%3A%20Our%20Vehicle%20can%20jump%2C%20it%20accelerates%20according%20to%20the%20actual%20fall%2C%20and%20steering%20isn%27t%20possible%20if%20both%20front%20wheels%20leave%20the%20ground.%20Unfortunately%20we%20did%20not%20have%20time%20to%20refactor%20the%20code%20so%20there%20are%20some%20mistakes%20in%20it%20but%20overall&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" class="external" title="Buzz up!">Buzz up!</a></li></ul><div style="clear:both;"></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.goltergaul.de/2009/12/xna-directx-c-game-project-finished/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Multiplayer Pong over TCP/IP</title>
		<link>http://blog.goltergaul.de/2009/12/multiplayer-pong-over-tcpip/</link>
		<comments>http://blog.goltergaul.de/2009/12/multiplayer-pong-over-tcpip/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 16:12:55 +0000</pubDate>
		<dc:creator>Dominik Goltermann</dc:creator>
				<category><![CDATA[Flash & Flex]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[Dominik Goltermann]]></category>
		<category><![CDATA[Fh Salzburg]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[socket]]></category>

		<guid isPermaLink="false">http://blog.goltergaul.de/?p=616</guid>
		<description><![CDATA[For our Interface Cultures Class Thomas Czernik, Matthias Frick, Daniela Dobler and I programmed a Multiplayer Pong game. We wrote a Server in Ruby which can accept connections from two clients, which are written in Flash. These clients track a certain user defined color from a webcam image, so the player can move his bar [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">For our Interface Cultures Class Thomas Czernik, Matthias Frick, Daniela Dobler and I programmed a Multiplayer Pong game. We wrote a Server in Ruby which can accept connections from two clients, which are written in Flash. These clients track a certain user defined color from a webcam image, so the player can move his bar using a green pen for example. The Server communicates with the Clients over TCP/IP using keywords and numbers like <em>POS;12;234;321;213;-3;4;</em> to send positions of the two bars, the ball and the direction of the ball.</p>
<p style="text-align: left;">You can download the Source <a href="http://blog.goltergaul.de/wp-content/uploads/2009/12/Multiplayer-Pong.zip">here.</a> Please consider that this code is only an experiment. So there are a lot of issues and some bugs left.</p>
<p style="text-align: center;"><a href="http://blog.goltergaul.de/2009/12/multiplayer-pong-over-tcpip/"><em>Click here to view the embedded video.</em></a></p>
<div class="mceTemp mceIEcenter" style="text-align: left;">
<dl id="attachment_620" class="wp-caption aligncenter" style="width: 310px;">
<dt class="wp-caption-dt"><a href="http://blog.goltergaul.de/wp-content/uploads/2009/12/Multipoing_3.png"><img class="size-medium wp-image-620 " title="Multipoing_3" src="http://blog.goltergaul.de/wp-content/uploads/2009/12/Multipoing_3-300x225.png" alt="Multipoing_3" width="300" height="225" /></a></dt>
<dd class="wp-caption-dd" style="text-align: center;">We playing the game</dd>
</dl>
</div>
<p style="text-align: left;">See also: Jop Wielens <a href="http://www.interactionfigure.nl/2009/colour-tracking-with-the-webcam-in-flash/">Color Tracking</a></p>
<div class="sexy-bookmarks sexy-bookmarks-expand sexy-bookmarks-bg-sexy"><ul class="socials"><li class="sexy-delicious"><a href="http://del.icio.us/post?url=http://blog.goltergaul.de/2009/12/multiplayer-pong-over-tcpip/&amp;title=Multiplayer+Pong+over+TCP%2FIP" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a></li><li class="sexy-facebook"><a href="http://www.facebook.com/share.php?u=http://blog.goltergaul.de/2009/12/multiplayer-pong-over-tcpip/&amp;t=Multiplayer+Pong+over+TCP%2FIP" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a></li><li class="sexy-myspace"><a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://blog.goltergaul.de/2009/12/multiplayer-pong-over-tcpip/&amp;t=Multiplayer+Pong+over+TCP%2FIP" rel="nofollow" class="external" title="Post this to MySpace">Post this to MySpace</a></li><li class="sexy-twitter"><a href="http://twitter.com/home?status=Multiplayer+Pong+over+TCP%2FIP+-+http://b2l.me/bqscx+" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a></li><li class="sexy-friendfeed"><a href="http://www.friendfeed.com/share?title=Multiplayer+Pong+over+TCP%2FIP&amp;link=http://blog.goltergaul.de/2009/12/multiplayer-pong-over-tcpip/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a></li><li class="sexy-google"><a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://blog.goltergaul.de/2009/12/multiplayer-pong-over-tcpip/&amp;title=Multiplayer+Pong+over+TCP%2FIP" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a></li><li class="sexy-twittley"><a href="http://twittley.com/submit/?title=Multiplayer+Pong+over+TCP%2FIP&amp;url=http%3A%2F%2Fblog.goltergaul.de%2F2009%2F12%2Fmultiplayer-pong-over-tcpip%2F&amp;desc=For%20our%20Interface%20Cultures%20Class%20Thomas%20Czernik%2C%20Matthias%20Frick%2C%20Daniela%20Dobler%20and%20I%20programmed%20a%20Multiplayer%20Pong%20game.%20We%20wrote%20a%20Server%20in%20Ruby%20which%20can%20accept%20connections%20from%20two%20clients%2C%20which%20are%20written%20in%20Flash.%20These%20clients%20track%20a%20certain%20user%20defined%20color%20from%20a%20webcam%20image%2C%20so%20the%20&amp;pcat=Technology&amp;tags=" rel="nofollow" class="external" title="Submit this to Twittley">Submit this to Twittley</a></li><li class="sexy-digg"><a href="http://digg.com/submit?phase=2&amp;url=http://blog.goltergaul.de/2009/12/multiplayer-pong-over-tcpip/&amp;title=Multiplayer+Pong+over+TCP%2FIP" rel="nofollow" class="external" title="Digg this!">Digg this!</a></li><li class="sexy-yahoobuzz"><a href="http://buzz.yahoo.com/submit/?submitUrl=http://blog.goltergaul.de/2009/12/multiplayer-pong-over-tcpip/&amp;submitHeadline=Multiplayer+Pong+over+TCP%2FIP&amp;submitSummary=For%20our%20Interface%20Cultures%20Class%20Thomas%20Czernik%2C%20Matthias%20Frick%2C%20Daniela%20Dobler%20and%20I%20programmed%20a%20Multiplayer%20Pong%20game.%20We%20wrote%20a%20Server%20in%20Ruby%20which%20can%20accept%20connections%20from%20two%20clients%2C%20which%20are%20written%20in%20Flash.%20These%20clients%20track%20a%20certain%20user%20defined%20color%20from%20a%20webcam%20image%2C%20so%20the%20&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" class="external" title="Buzz up!">Buzz up!</a></li></ul><div style="clear:both;"></div></div>]]></content:encoded>
			<wfw:commentRss>http://blog.goltergaul.de/2009/12/multiplayer-pong-over-tcpip/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
