<?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>Software Programming Blog</title>
	<atom:link href="http://robofan.de/wordpress/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://robofan.de/wordpress</link>
	<description>A weblog about software programming and my life.</description>
	<lastBuildDate>Tue, 17 Apr 2012 18:32:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Spambog.com Sicherheitslücke (XSS-Injection)</title>
		<link>http://robofan.de/wordpress/?p=266</link>
		<comments>http://robofan.de/wordpress/?p=266#comments</comments>
		<pubDate>Thu, 12 Apr 2012 17:41:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[German]]></category>
		<category><![CDATA[E-Mail]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[Spambog]]></category>
		<category><![CDATA[XSS]]></category>

		<guid isPermaLink="false">http://robofan.de/wordpress/?p=266</guid>
		<description><![CDATA[Seit einiger Zeit verwende ich den Dienst Spambog.com, welcher Wegwerf-E-Mail-Adressen zur Verfügung stellt. Dort habe ich eine Sicherheitslücke entdeckt (XSS-Injection), die das Sperren fremder Konten möglich machte und dem Angreifer Zugriff zu passwortgeschützten Mailboxen verschaffen konnte. Nachdem die Sicherheitslücke mittlerweile behoben wurde, folgt hier ein Video mit näheren Informationen:]]></description>
			<content:encoded><![CDATA[<p>Seit einiger Zeit verwende ich den Dienst Spambog.com, welcher Wegwerf-E-Mail-Adressen zur Verfügung stellt. Dort habe ich eine Sicherheitslücke entdeckt (XSS-Injection), die das Sperren fremder Konten möglich machte und dem Angreifer Zugriff zu passwortgeschützten Mailboxen verschaffen konnte. Nachdem die <strong>Sicherheitslücke mittlerweile behoben</strong> wurde, folgt hier ein Video mit näheren Informationen:<br />
<iframe src="http://www.youtube.com/embed/X7YToJ5QNRU" frameborder="0" width="560" height="315"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://robofan.de/wordpress/?feed=rss2&#038;p=266</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Das Affenpuzzle-Problem</title>
		<link>http://robofan.de/wordpress/?p=257</link>
		<comments>http://robofan.de/wordpress/?p=257#comments</comments>
		<pubDate>Sun, 26 Feb 2012 12:28:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[German]]></category>
		<category><![CDATA[Affenpuzzle]]></category>
		<category><![CDATA[Backtracking]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[programmieren]]></category>

		<guid isPermaLink="false">http://robofan.de/wordpress/?p=257</guid>
		<description><![CDATA[Da wir vor einiger Zeit im Informatikunterricht mit Backtracking-Algorithmen befasst und uns auch das Affenpuzzle angesehen haben, hatte ich mich entschlossen, ein kleines C++-Programm zu schreiben, welches selbiges löst. Unter http://www.swisseduc.ch/informatik/120-lektionen/principles/computation/kara/docs/affenpuzzle_bastelbogen_unprotected.pdf kann man sich die Bastelvorlage des Affenpuzzles herunterladen. Das Affenrätsel ist ein Puzzle, welches aus einem Quadrat aus mit einer bestimmten Kantenlänge (2, 3, [...]]]></description>
			<content:encoded><![CDATA[<p>Da wir vor einiger Zeit im Informatikunterricht mit <a title="Mehr zu Backtracking auf Wikipedia" href="http://de.wikipedia.org/wiki/Backtracking" target="_blank">Backtracking-Algorithmen</a> befasst und uns auch das Affenpuzzle angesehen haben, hatte ich mich entschlossen, ein kleines C++-Programm zu schreiben, welches selbiges löst.<br />
Unter <a title="Affenpuzzle-Vorlage [PDF]" href="http://www.swisseduc.ch/informatik/120-lektionen/principles/computation/kara/docs/affenpuzzle_bastelbogen_unprotected.pdf" target="_blank">http://www.swisseduc.ch/informatik/120-lektionen/principles/computation/kara/docs/affenpuzzle_bastelbogen_unprotected.pdf</a> kann man sich die Bastelvorlage des Affenpuzzles herunterladen.</p>
<p>Das Affenrätsel ist ein Puzzle, welches aus einem Quadrat aus mit einer bestimmten Kantenlänge (2, 3, 4, 5 oder mehr) Karten besteht. Jede Karte muss passend an die andere angelegt werden, sodass ein beispielsweise gelber Affenkopf nur an einem gelben Affenkörper anliegt. Dabei gibt es nur eine begrenzte Anzahl an Lösungen, welche ausschließlich durch ein sogenanntes <a title="Mehr zu Backtracking auf Wikipedia" href="http://de.wikipedia.org/wiki/Backtracking" target="_blank">Backtracking-Verfahren</a> herauszufinden sind.</p>
<div class="coloredCode" style="font-family: Consolas;">
<pre style="white-space: pre-wrap;"><span style="color: green;">// Affenpuzzle.cpp: Birk Blechschmidt, 14 November 2011</span>
<span style="color: green;">// Dieser Kommentar muss erhalten bleiben.</span>

<span style="color: blue;">#include</span> <span style="color: #a31515;">"iostream"</span>
<span style="color: blue;">#include</span> <span style="color: #a31515;">"string"</span>
<span style="color: blue;">#include</span> <span style="color: #a31515;">"time.h"</span>
<span style="color: blue;">using</span> <span style="color: blue;">namespace</span> std;

<span style="color: blue;">const</span> <span style="color: blue;">char</span> greenhead=1;
<span style="color: blue;">const</span> <span style="color: blue;">char</span> greenbody=2;
<span style="color: blue;">const</span> <span style="color: blue;">char</span> redhead=4;
<span style="color: blue;">const</span> <span style="color: blue;">char</span> redbody=5;
<span style="color: blue;">const</span> <span style="color: blue;">char</span> bluehead=7;
<span style="color: blue;">const</span> <span style="color: blue;">char</span> bluebody=8;
<span style="color: blue;">const</span> <span style="color: blue;">char</span> yellowhead=10;
<span style="color: blue;">const</span> <span style="color: blue;">char</span> yellowbody=11;
time_t beginning, ending;
<span style="color: blue;">double</span> timespan;

<span style="color: blue;">long</span> solutioncount=0;

<span style="color: blue;">long</span> iterationcount=0;

<span style="color: blue;">const</span> <span style="color: blue;">char</span> rowcount=4;

<span style="color: blue;">const</span> <span style="color: blue;">char</span> fieldcount=rowcount*rowcount;
<span style="color: blue;">char</span> cards[fieldcount][4];
<span style="color: blue;">char</span> rotations[fieldcount];
<span style="color: blue;">char</span> table[fieldcount];
<span style="color: blue;">bool</span> set[fieldcount];
<span style="color: blue;">char</span>* solutions=<span style="color: blue;">new</span> <span style="color: blue;">char</span>[0];

<span style="color: blue;">char</span> modulus(<span style="color: blue;">char</span> input)
{
	<span style="color: blue;">char</span> output=input;
	<span style="color: blue;">if</span>(output &lt; 0)
	{
		output*=-1;
	}
	<span style="color: blue;">return</span> output;
}

string getReadableName(<span style="color: blue;">char</span> input)
{
	string name=<span style="color: #a31515;">""</span>;
	<span style="color: blue;">if</span>(input==greenhead)
	{
		name=<span style="color: #a31515;">"gh"</span>;
	}
	<span style="color: blue;">if</span>(input==greenbody)
	{
		name=<span style="color: #a31515;">"gb"</span>;
	}
	<span style="color: blue;">if</span>(input==redhead)
	{
		name=<span style="color: #a31515;">"rh"</span>;
	}
	<span style="color: blue;">if</span>(input==redbody)
	{
		name=<span style="color: #a31515;">"rb"</span>;
	}
	<span style="color: blue;">if</span>(input==bluehead)
	{
		name=<span style="color: #a31515;">"bh"</span>;
	}
	<span style="color: blue;">if</span>(input==bluebody)
	{
		name=<span style="color: #a31515;">"bb"</span>;
	}
	<span style="color: blue;">if</span>(input==yellowhead)
	{
		name=<span style="color: #a31515;">"yh"</span>;
	}
	<span style="color: blue;">if</span>(input==yellowbody)
	{
		name=<span style="color: #a31515;">"yb"</span>;
	}
	<span style="color: blue;">return</span> name;
}

<span style="color: blue;">void</span> rotateCard(<span style="color: blue;">char</span> cardnumber, <span style="color: blue;">char</span> rotationcount) <span style="color: green;">//Uhrzeigersinn</span>
{
	<span style="color: blue;">if</span>(rotationcount !=0)
	{
		<span style="color: blue;">char</span> tempCard[4];
		<span style="color: blue;">for</span>(<span style="color: blue;">char</span> i=0; i &lt; 4; i++)
		{
			tempCard[i]=cards[cardnumber][i];
		}
		<span style="color: blue;">for</span>(<span style="color: blue;">char</span> i=0; i &lt; 4; i++)
		{
			<span style="color: blue;">char</span> newindex=i-rotationcount;
			<span style="color: blue;">while</span>(newindex &lt; 0)
			{
				newindex+=4;
			}
			<span style="color: blue;">while</span>(newindex &gt; 3)
			{
				newindex-=4;
			}
			cards[cardnumber][i]=tempCard[newindex];
		}
		rotations[cardnumber]+=rotationcount;
		<span style="color: blue;">while</span>(rotations[cardnumber] &lt; 0)
		{
			rotations[cardnumber]+=4;
		}
		<span style="color: blue;">while</span>(rotations[cardnumber] &gt; 3)
		{
			rotations[cardnumber]-=4;
		}
	}
}

<span style="color: blue;">bool</span> validNeighbours(<span style="color: blue;">char</span> cardnumber, <span style="color: blue;">bool</span> debug=<span style="color: blue;">false</span>)
{
	<span style="color: blue;">bool</span> valid=<span style="color: blue;">true</span>;
	<span style="color: blue;">if</span>(cardnumber % rowcount &gt; 0)
	{
		<span style="color: blue;">if</span>(table[cardnumber-1]!=-1)
		{
			<span style="color: blue;">if</span>(modulus(cards[table[cardnumber]][3]-cards[table[cardnumber-1]][1])!=1)
			{
				valid=<span style="color: blue;">false</span>;
			}
		}
	}

	<span style="color: blue;">if</span>(cardnumber % rowcount &lt; rowcount-1)
	{
		<span style="color: blue;">if</span>(modulus(cards[table[cardnumber]][1]-cards[table[cardnumber+1]][3])!=1)
		{
			<span style="color: blue;">if</span>(table[cardnumber+1]!=-1)
			{
				valid=<span style="color: blue;">false</span>;
			}
		}
	}

	<span style="color: blue;">if</span>(cardnumber &gt;= rowcount)
	{
		<span style="color: blue;">if</span>(modulus(cards[table[cardnumber]][0]-cards[table[cardnumber-rowcount]][2])!=1)
		{
			<span style="color: blue;">if</span>(table[cardnumber-rowcount]!=-1)
			{
				valid=<span style="color: blue;">false</span>;
			}
		}
	}

	<span style="color: blue;">if</span>(cardnumber &lt; fieldcount-rowcount)
	{
		<span style="color: blue;">if</span>(modulus(cards[table[cardnumber]][2]-cards[table[cardnumber+rowcount]][0])!=1)
		{
			<span style="color: blue;">if</span>(table[cardnumber+rowcount]!=-1)
			{
				valid=<span style="color: blue;">false</span>;
			}
		}
	}

	<span style="color: blue;">return</span> valid;
}

<span style="color: blue;">void</span> printCards()
{
	<span style="color: blue;">for</span>(<span style="color: blue;">char</span> yC=0; yC &lt; rowcount; yC++)
	{
		<span style="color: blue;">for</span>(<span style="color: blue;">char</span> xC=0; xC &lt; rowcount; xC++)
		{
			cout &lt;&lt; <span style="color: #a31515;">" |"</span>;
			cout &lt;&lt; getReadableName(cards[table[yC*rowcount+xC]][0]) &lt;&lt; <span style="color: #a31515;">"| "</span>;
		}
		cout &lt;&lt; endl;
		<span style="color: blue;">for</span>(<span style="color: blue;">char</span> xC=0; xC &lt; rowcount; xC++)
		{
			cout &lt;&lt; getReadableName(cards[table[yC*rowcount+xC]][3]) &lt;&lt; <span style="color: #a31515;">"| |"</span>;
			cout &lt;&lt; getReadableName(cards[table[yC*rowcount+xC]][1]) &lt;&lt;<span style="color: #a31515;">" "</span>;
		}
		cout &lt;&lt; endl;
		<span style="color: blue;">for</span>(<span style="color: blue;">char</span> xC=0; xC &lt; rowcount; xC++)
		{

			cout &lt;&lt; <span style="color: #a31515;">" |"</span>;
			cout &lt;&lt; getReadableName(cards[table[yC*rowcount+xC]][2]) &lt;&lt; <span style="color: #a31515;">"| "</span>;
		}
		cout &lt;&lt; endl&lt;&lt;endl;
	}
}

<span style="color: blue;">void</span> solve(<span style="color: blue;">char</span> fieldnumber)
{
	<span style="color: blue;">for</span>(<span style="color: blue;">char</span> card=0; card &lt; fieldcount; card++)
	{
		<span style="color: blue;">if</span>(!set[card])
		{
			table[fieldnumber]=card;
			set[card]=<span style="color: blue;">true</span>;
			<span style="color: blue;">for</span>(<span style="color: blue;">char</span> r=0; r&lt;4; r++)
			{
				iterationcount++;
				<span style="color: blue;">if</span>(validNeighbours(fieldnumber))
				{
					<span style="color: blue;">if</span>(fieldnumber == fieldcount-1)
					{

						<span style="color: blue;">if</span>(rotations[0]==0)
						{
							solutioncount++;
							cout &lt;&lt; <span style="color: #a31515;">"Solution:"</span>&lt;&lt;endl&lt;&lt;endl;
							<span style="color: blue;">char</span>* temparr=<span style="color: blue;">new</span> <span style="color: blue;">char</span>[solutioncount*fieldcount*2];
							<span style="color: blue;">for</span>(<span style="color: blue;">int</span> i=0; i &lt; solutioncount-1; i++)
							{
								<span style="color: blue;">for</span>(<span style="color: blue;">int</span> j=0; j &lt; fieldcount; j++)
								{
									temparr[i*fieldcount*2+j*2]=solutions[i*fieldcount*2+j*2];
									temparr[i*fieldcount*2+j*2+1]=solutions[i*fieldcount*2+j*2+1];
								}
							}
							<span style="color: blue;">for</span>(<span style="color: blue;">int</span> i=0; i &lt; fieldcount; i++)
							{
								temparr[(solutioncount-1)*fieldcount*2+i*2]=table[i];
								temparr[(solutioncount-1)*fieldcount*2+i*2+1]=rotations[table[i]];
							}
							solutions=<span style="color: blue;">new</span> <span style="color: blue;">char</span>[solutioncount*fieldcount*2];
							<span style="color: blue;">for</span>(<span style="color: blue;">int</span> i=0; i &lt; solutioncount; i++)
							{
								<span style="color: blue;">for</span>(<span style="color: blue;">int</span> j=0; j &lt; fieldcount; j++)
								{
									solutions[i*fieldcount*2+j*2]=temparr[i*fieldcount*2+j*2];
									solutions[i*fieldcount*2+j*2+1]=temparr[i*fieldcount*2+j*2+1];
								}
							}

								printCards();

							cout &lt;&lt; endl&lt;&lt;endl;
						}
					}

					solve(fieldnumber+1);
				}
				rotateCard(card, 1);
			}
			table[fieldnumber]=-1;
			set[card]=<span style="color: blue;">false</span>;
		}
	}
}

<span style="color: blue;">int</span> main()
{

	<span style="color: green;">//Kartendefinition 2*2</span>
	<span style="color: green;">/*cards[0][0]=greenbody;</span>
<span style="color: green;"> cards[0][1]=redhead;</span>
<span style="color: green;"> cards[0][2]=greenbody;</span>
<span style="color: green;"> cards[0][3]=bluehead;</span>

<span style="color: green;"> cards[1][0]=bluebody;</span>
<span style="color: green;"> cards[1][1]=greenhead;</span>
<span style="color: green;"> cards[1][2]=yellowhead;</span>
<span style="color: green;"> cards[1][3]=redbody;</span>

<span style="color: green;"> cards[2][0]=yellowbody;</span>
<span style="color: green;"> cards[2][1]=bluebody;</span>
<span style="color: green;"> cards[2][2]=redbody;</span>
<span style="color: green;"> cards[2][3]=bluehead;</span>

<span style="color: green;"> cards[3][0]=greenhead;</span>
<span style="color: green;"> cards[3][1]=bluebody;</span>
<span style="color: green;"> cards[3][2]=bluehead;</span>
<span style="color: green;"> cards[3][3]=yellowbody;*/</span>

	<span style="color: green;">//Kartendefinition 4*4</span>
	cards[0][0]=redhead;
	cards[0][1]=bluehead;
	cards[0][2]=yellowhead;
	cards[0][3]=yellowhead;

	cards[1][0]=yellowbody;
	cards[1][1]=redhead;
	cards[1][2]=greenhead;
	cards[1][3]=redhead;

	cards[2][0]=redbody;
	cards[2][1]=bluehead;
	cards[2][2]=yellowbody;
	cards[2][3]=bluebody;

	cards[3][0]=bluebody;
	cards[3][1]=bluehead;
	cards[3][2]=yellowbody;
	cards[3][3]=greenhead;

	cards[4][0]=redbody;
	cards[4][1]=bluebody;
	cards[4][2]=greenhead;
	cards[4][3]=yellowhead;

	cards[5][0]=bluebody;
	cards[5][1]=redbody;
	cards[5][2]=bluehead;
	cards[5][3]=redbody;

	cards[6][0]=bluehead;
	cards[6][1]=bluehead;
	cards[6][2]=yellowbody;
	cards[6][3]=greenbody;

	cards[7][0]=redhead;
	cards[7][1]=greenhead;
	cards[7][2]=yellowhead;
	cards[7][3]=greenhead;

	cards[8][0]=redhead;
	cards[8][1]=greenbody;
	cards[8][2]=bluehead;
	cards[8][3]=greenbody;

	cards[9][0]=bluebody;
	cards[9][1]=greenhead;
	cards[9][2]=yellowbody;
	cards[9][3]=yellowbody;

	cards[10][0]=greenbody;
	cards[10][1]=bluehead;
	cards[10][2]=yellowhead;
	cards[10][3]=redbody;

	cards[11][0]=yellowbody;
	cards[11][1]=greenhead;
	cards[11][2]=greenbody;
	cards[11][3]=bluebody;

	cards[12][0]=greenbody;
	cards[12][1]=yellowhead;
	cards[12][2]=bluehead;
	cards[12][3]=bluehead;

	cards[13][0]=greenbody;
	cards[13][1]=yellowhead;
	cards[13][2]=redhead;
	cards[13][3]=redhead;

	cards[14][0]=yellowbody;
	cards[14][1]=greenhead;
	cards[14][2]=redhead;
	cards[14][3]=bluebody;

	cards[15][0]=redbody;
	cards[15][1]=yellowhead;
	cards[15][2]=redbody;
	cards[15][3]=greenhead;

	<span style="color: green;">//Kartendefinition 6*6</span>
	<span style="color: green;">/*cards[0][0]=redbody;</span>
<span style="color: green;"> cards[0][1]=redhead;</span>
<span style="color: green;"> cards[0][2]=yellowhead;</span>
<span style="color: green;"> cards[0][3]=bluebody;</span>

<span style="color: green;"> cards[1][0]=redhead;</span>
<span style="color: green;"> cards[1][1]=redbody;</span>
<span style="color: green;"> cards[1][2]=yellowbody;</span>
<span style="color: green;"> cards[1][3]=bluehead;</span>

<span style="color: green;"> cards[2][0]=yellowhead;</span>
<span style="color: green;"> cards[2][1]=greenbody;</span>
<span style="color: green;"> cards[2][2]=greenbody;</span>
<span style="color: green;"> cards[2][3]=bluehead;</span>

<span style="color: green;"> cards[3][0]=greenhead;</span>
<span style="color: green;"> cards[3][1]=bluebody;</span>
<span style="color: green;"> cards[3][2]=yellowhead;</span>
<span style="color: green;"> cards[3][3]=yellowbody;</span>

<span style="color: green;"> cards[4][0]=redhead;</span>
<span style="color: green;"> cards[4][1]=greenhead;</span>
<span style="color: green;"> cards[4][2]=bluebody;</span>
<span style="color: green;"> cards[4][3]=bluebody;</span>

<span style="color: green;"> cards[5][0]=yellowhead,</span>
<span style="color: green;"> cards[5][1]=yellowhead;</span>
<span style="color: green;"> cards[5][2]=redbody;</span>
<span style="color: green;"> cards[5][3]=greenbody;</span>

<span style="color: green;"> cards[6][0]=redbody;</span>
<span style="color: green;"> cards[6][1]=redbody;</span>
<span style="color: green;"> cards[6][2]=redhead;</span>
<span style="color: green;"> cards[6][3]=bluehead;</span>

<span style="color: green;"> cards[7][0]=bluebody;</span>
<span style="color: green;"> cards[7][1]=redbody;</span>
<span style="color: green;"> cards[7][2]=redhead;</span>
<span style="color: green;"> cards[7][3]=bluehead;</span>

<span style="color: green;"> cards[8][0]=yellowbody;</span>
<span style="color: green;"> cards[8][1]=redhead;</span>
<span style="color: green;"> cards[8][2]=bluehead;</span>
<span style="color: green;"> cards[8][3]=greenbody;</span>

<span style="color: green;"> cards[9][0]=redhead;</span>
<span style="color: green;"> cards[9][1]=yellowbody;</span>
<span style="color: green;"> cards[9][2]=redhead;</span>
<span style="color: green;"> cards[9][3]=greenhead;</span>

<span style="color: green;"> cards[10][0]=bluehead;</span>
<span style="color: green;"> cards[10][1]=bluebody;</span>
<span style="color: green;"> cards[10][2]=redhead;</span>
<span style="color: green;"> cards[10][3]=redhead;</span>

<span style="color: green;"> cards[11][0]=greenhead;</span>
<span style="color: green;"> cards[11][1]=bluebody;</span>
<span style="color: green;"> cards[11][2]=bluebody;</span>
<span style="color: green;"> cards[11][3]=greenhead;</span>

<span style="color: green;"> cards[12][0]=greenhead;</span>
<span style="color: green;"> cards[12][1]=greenhead;</span>
<span style="color: green;"> cards[12][2]=bluehead;</span>
<span style="color: green;"> cards[12][3]=yellowbody;</span>

<span style="color: green;"> cards[13][0]=yellowbody;</span>
<span style="color: green;"> cards[13][1]=greenbody;</span>
<span style="color: green;"> cards[13][2]=redbody;</span>
<span style="color: green;"> cards[13][3]=greenbody;</span>

<span style="color: green;"> cards[14][0]=yellowhead;</span>
<span style="color: green;"> cards[14][1]=redhead;</span>
<span style="color: green;"> cards[14][2]=greenhead;</span>
<span style="color: green;"> cards[14][3]=bluebody;</span>

<span style="color: green;"> cards[15][0]=bluehead;</span>
<span style="color: green;"> cards[15][1]=yellowbody;</span>
<span style="color: green;"> cards[15][2]=greenbody;</span>
<span style="color: green;"> cards[15][3]=redhead;</span>

<span style="color: green;"> cards[16][0]=yellowbody;</span>
<span style="color: green;"> cards[16][1]=greenhead;</span>
<span style="color: green;"> cards[16][2]=redhead;</span>
<span style="color: green;"> cards[16][3]=redbody;</span>

<span style="color: green;"> cards[17][0]=yellowhead;</span>
<span style="color: green;"> cards[17][1]=bluehead;</span>
<span style="color: green;"> cards[17][2]=yellowhead;</span>
<span style="color: green;"> cards[17][3]=redhead;</span>

<span style="color: green;"> cards[18][0]=bluehead;</span>
<span style="color: green;"> cards[18][1]=bluebody;</span>
<span style="color: green;"> cards[18][2]=greenbody;</span>
<span style="color: green;"> cards[18][3]=greenhead;</span>

<span style="color: green;"> cards[19][0]=bluebody;</span>
<span style="color: green;"> cards[19][1]=yellowhead;</span>
<span style="color: green;"> cards[19][2]=greenhead;</span>
<span style="color: green;"> cards[19][3]=redhead;</span>

<span style="color: green;"> cards[20][0]=redbody;</span>
<span style="color: green;"> cards[20][1]=greenhead;</span>
<span style="color: green;"> cards[20][2]=yellowhead;</span>
<span style="color: green;"> cards[20][3]=bluebody;</span>

<span style="color: green;"> cards[21][0]=greenhead;</span>
<span style="color: green;"> cards[21][1]=greenhead;</span>
<span style="color: green;"> cards[21][2]=bluehead;</span>
<span style="color: green;"> cards[21][3]=redhead;</span>

<span style="color: green;"> cards[22][0]=redhead;</span>
<span style="color: green;"> cards[22][1]=redhead;</span>
<span style="color: green;"> cards[22][2]=bluebody;</span>
<span style="color: green;"> cards[22][3]=yellowhead;</span>

<span style="color: green;"> cards[23][0]=greenhead;</span>
<span style="color: green;"> cards[23][1]=yellowbody;</span>
<span style="color: green;"> cards[23][2]=redhead;</span>
<span style="color: green;"> cards[23][3]=yellowhead;</span>

<span style="color: green;"> cards[24][0]=redbody;</span>
<span style="color: green;"> cards[24][1]=yellowhead;</span>
<span style="color: green;"> cards[24][2]=bluehead;</span>
<span style="color: green;"> cards[24][3]=yellowbody;</span>

<span style="color: green;"> cards[25][0]=redhead;</span>
<span style="color: green;"> cards[25][1]=redbody;</span>
<span style="color: green;"> cards[25][2]=bluebody;</span>
<span style="color: green;"> cards[25][3]=bluehead;</span>

<span style="color: green;"> cards[26][0]=greenhead;</span>
<span style="color: green;"> cards[26][1]=redbody;</span>
<span style="color: green;"> cards[26][2]=yellowbody;</span>
<span style="color: green;"> cards[26][3]=yellowhead;</span>

<span style="color: green;"> cards[27][0]=greenbody;</span>
<span style="color: green;"> cards[27][1]=bluehead;</span>
<span style="color: green;"> cards[27][2]=greenhead;</span>
<span style="color: green;"> cards[27][3]=greenhead;</span>

<span style="color: green;"> cards[28][0]=bluehead;</span>
<span style="color: green;"> cards[28][1]=bluebody;</span>
<span style="color: green;"> cards[28][2]=bluehead;</span>
<span style="color: green;"> cards[28][3]=greenbody;</span>

<span style="color: green;"> cards[29][0]=yellowbody;</span>
<span style="color: green;"> cards[29][1]=bluehead;</span>
<span style="color: green;"> cards[29][2]=redbody;</span>
<span style="color: green;"> cards[29][3]=redbody;</span>

<span style="color: green;"> cards[30][0]=yellowhead;</span>
<span style="color: green;"> cards[30][1]=redbody;</span>
<span style="color: green;"> cards[30][2]=greenbody;</span>
<span style="color: green;"> cards[30][3]=redhead;</span>

<span style="color: green;"> cards[31][0]=redbody;</span>
<span style="color: green;"> cards[31][1]=bluehead;</span>
<span style="color: green;"> cards[31][2]=redbody;</span>
<span style="color: green;"> cards[31][3]=yellowhead;</span>

<span style="color: green;"> cards[32][0]=redhead;</span>
<span style="color: green;"> cards[32][1]=bluehead;</span>
<span style="color: green;"> cards[32][2]=yellowbody;</span>
<span style="color: green;"> cards[32][3]=yellowhead;</span>

<span style="color: green;"> cards[33][0]=bluehead;</span>
<span style="color: green;"> cards[33][1]=yellowhead;</span>
<span style="color: green;"> cards[33][2]=redhead;</span>
<span style="color: green;"> cards[33][3]=yellowbody;</span>

<span style="color: green;"> cards[34][0]=bluehead;</span>
<span style="color: green;"> cards[34][1]=yellowhead;</span>
<span style="color: green;"> cards[34][2]=yellowbody;</span>
<span style="color: green;"> cards[34][3]=redhead;</span>

<span style="color: green;"> cards[35][0]=greenbody;</span>
<span style="color: green;"> cards[35][1]=yellowhead;</span>
<span style="color: green;"> cards[35][2]=bluebody;</span>
<span style="color: green;"> cards[35][3]=bluehead;*/</span>

	cout &lt;&lt; <span style="color: #a31515;">"Monkey Puzzle Solver by Birk Blechschmidt, 14 November 2011"</span>&lt;&lt;endl&lt;&lt;endl;
	cout &lt;&lt; <span style="color: #a31515;">"Puzzle size: "</span>&lt;&lt;(<span style="color: blue;">short</span>)rowcount&lt;&lt;<span style="color: #a31515;">"*"</span>&lt;&lt;(<span style="color: blue;">short</span>)rowcount&lt;&lt;<span style="color: #a31515;">"="</span>&lt;&lt;(<span style="color: blue;">short</span>)fieldcount&lt;&lt;endl&lt;&lt;endl;
	cout &lt;&lt; <span style="color: #a31515;">"Initial cards: "</span>&lt;&lt;endl&lt;&lt;endl;
	<span style="color: blue;">for</span>(<span style="color: blue;">int</span> i=0; i &lt; fieldcount; i++)
	{
		table[i]=i;
	}
	printCards();
	cout &lt;&lt; endl&lt;&lt;endl;
	<span style="color: blue;">for</span>(<span style="color: blue;">int</span> i=0; i &lt; fieldcount; i++)
	{
		rotations[i]=0;
		table[i]=-1;
		set[i]=<span style="color: blue;">false</span>;
	}
	cout &lt;&lt; <span style="color: #a31515;">"Press ENTER key to start..."</span>&lt;&lt;endl&lt;&lt;endl;
	fflush(stdin);
	getchar();
	time(&amp;beginning);
	solve(0);
	time(&amp;ending);
	timespan=difftime(ending, beginning);
	cout &lt;&lt; <span style="color: #a31515;">"In total "</span>&lt;&lt;solutioncount&lt;&lt;<span style="color: #a31515;">" solutions were found in "</span>&lt;&lt;timespan&lt;&lt;<span style="color: #a31515;">" seconds and "</span>&lt;&lt;iterationcount&lt;&lt;<span style="color: #a31515;">" iterations."</span>&lt;&lt;endl &lt;&lt; endl;
	cout &lt;&lt; endl &lt;&lt; <span style="color: #a31515;">"Press ENTER key to quit..."</span>&lt;&lt;endl&lt;&lt;endl;
	fflush(stdin);
	getchar();
	<span style="color: blue;">return</span> 0;
}</pre>
</div>
<p>Die Ausgabe:</p>
<pre>Monkey Puzzle Solver by Birk Blechschmidt, 14 November 2011

Puzzle size: 4*4=16

Initial cards:

  |rh|      |yb|      |rb|      |bb|
yh|  |bh  rh|  |rh  bb|  |bh  gh|  |bh
  |yh|      |gh|      |yb|      |yb|

  |rb|      |bb|      |bh|      |rh|
yh|  |bb  rb|  |rb  gb|  |bh  gh|  |gh
  |gh|      |bh|      |yb|      |yh|

  |rh|      |bb|      |gb|      |yb|
gb|  |gb  yb|  |gh  rb|  |bh  bb|  |gh
  |bh|      |yb|      |yh|      |gb|

  |gb|      |gb|      |yb|      |rb|
bh|  |yh  rh|  |yh  bb|  |gh  gh|  |yh
  |bh|      |rh|      |rh|      |rb|

Press ENTER key to start...

Solution:

  |rh|      |gh|      |gh|      |gb|
yh|  |bh  bb|  |yb  yh|  |rh  rb|  |bh
  |yh|      |yb|      |gh|      |yh|

  |yb|      |yh|      |gb|      |yb|
rh|  |rh  rb|  |rb  rh|  |bh  bb|  |gh
  |gh|      |gh|      |gb|      |gb|

  |gb|      |gb|      |gh|      |gh|
bh|  |yh  yb|  |bh  bb|  |yh  yb|  |bb
  |bh|      |bh|      |rb|      |bh|

  |bb|      |bb|      |rh|      |bb|
yb|  |rb  rh|  |yb  yh|  |rh  rb|  |rb
  |bh|      |gh|      |gb|      |bh|

Solution:

  |rh|      |yb|      |bh|      |yb|
yh|  |bh  bb|  |gh  gb|  |bh  bb|  |gh
  |yh|      |rh|      |yb|      |gb|

  |yb|      |rb|      |yh|      |gh|
gh|  |yb  yh|  |bb  bh|  |rb  rh|  |yh
  |bb|      |gh|      |gb|      |gh|

  |bh|      |gb|      |gh|      |gb|
rb|  |rb  rh|  |yh  yb|  |bb  bh|  |rh
  |bb|      |rh|      |bh|      |gb|

  |bh|      |rb|      |bb|      |gh|
bh|  |gb  gh|  |yh  yb|  |rb  rh|  |rh
  |yh|      |rb|      |bh|      |yb|

Solution:

  |gh|      |yh|      |gb|      |rb|
rh|  |rh  rb|  |rb  rh|  |bh  bb|  |bh
  |yb|      |gh|      |gb|      |yb|

  |yh|      |gb|      |gh|      |yh|
bh|  |rb  rh|  |yh  yb|  |gb  gh|  |rb
  |gb|      |rh|      |bb|      |bb|

  |gh|      |rb|      |bh|      |bh|
yb|  |bb  bh|  |bb  bh|  |yb  yh|  |bh
  |bh|      |rb|      |gb|      |gb|

  |bb|      |rh|      |gh|      |gh|
rh|  |yb  yh|  |bh  bb|  |yb  yh|  |rh
  |gh|      |yh|      |yb|      |gh|

Solution:

  |rb|      |bh|      |rh|      |gh|
bb|  |bh  bb|  |yb  yh|  |bh  bb|  |yb
  |yb|      |gh|      |yh|      |yb|

  |yh|      |gb|      |yb|      |yh|
bh|  |rb  rh|  |bh  bb|  |gh  gb|  |bh
  |gb|      |gb|      |gb|      |bh|

  |gh|      |gh|      |gh|      |bb|
yh|  |rh  rb|  |rb  rh|  |rh  rb|  |rb
  |gh|      |yh|      |yb|      |bh|

  |gb|      |yb|      |yh|      |bb|
yb|  |bh  bb|  |gh  gb|  |rh  rb|  |gh
  |bh|      |rh|      |rh|      |yh|

Solution:

  |rb|      |gh|      |rh|      |bh|
bb|  |bh  bb|  |yb  yh|  |bh  bb|  |yb
  |yb|      |yb|      |yh|      |gh|

  |yh|      |yh|      |yb|      |gb|
gb|  |rh  rb|  |rb  rh|  |rh  rb|  |bh
  |rh|      |gh|      |gh|      |yh|

  |rb|      |gb|      |gb|      |yb|
yh|  |bb  bh|  |yh  yb|  |bh  bb|  |gh
  |gh|      |bh|      |bh|      |gb|

  |gb|      |bb|      |bb|      |gh|
bh|  |rh  rb|  |rb  rh|  |yb  yh|  |rh
  |gb|      |bh|      |gh|      |gh|

Solution:

  |yb|      |yb|      |bh|      |rh|
bh|  |bb  bh|  |gh  gb|  |gb  gh|  |gh
  |rb|      |bb|      |rh|      |yh|

  |rh|      |bh|      |rb|      |yb|
yb|  |gh  gb|  |bh  bb|  |bh  bb|  |gh
  |rh|      |yb|      |rb|      |rh|

  |rb|      |yh|      |rh|      |rb|
yh|  |bb  bh|  |rb  rh|  |gb  gh|  |yh
  |gh|      |gb|      |yh|      |rb|

  |gb|      |gh|      |yb|      |rh|
bh|  |yh  yb|  |gb  gh|  |yb  yh|  |bh
  |bh|      |bb|      |bb|      |yh|

Solution:

  |bh|      |rh|      |gh|      |gb|
rb|  |yb  yh|  |bh  bb|  |yh  yb|  |bh
  |bb|      |yh|      |rb|      |bh|

  |bh|      |yb|      |rh|      |bb|
bh|  |gb  gh|  |yb  yh|  |rh  rb|  |rb
  |yh|      |bb|      |gb|      |bh|

  |yb|      |bh|      |gh|      |bb|
bb|  |gh  gb|  |yh  yb|  |gb  gh|  |bh
  |rh|      |rb|      |bb|      |yb|

  |rb|      |rh|      |bh|      |yh|
gh|  |yh  yb|  |gh  gb|  |gb  gh|  |gh
  |rb|      |rh|      |rh|      |rh|

Solution:

  |bh|      |rh|      |rb|      |rb|
bb|  |yb  yh|  |bh  bb|  |bh  bb|  |bh
  |gh|      |yh|      |rb|      |yb|

  |gb|      |yb|      |rh|      |yh|
rb|  |bh  bb|  |gh  gb|  |gb  gh|  |gh
  |yh|      |gb|      |bh|      |rh|

  |yb|      |gh|      |bb|      |rb|
rh|  |rh  rb|  |rb  rh|  |yb  yh|  |bb
  |gh|      |yh|      |gh|      |gh|

  |gb|      |yb|      |gb|      |gb|
rh|  |yh  yb|  |bb  bh|  |yh  yb|  |bh
  |rh|      |gh|      |bh|      |bh|

Solution:

  |rh|      |rh|      |rb|      |rh|
gh|  |gh  gb|  |gb  gh|  |yh  yb|  |gh
  |yh|      |bh|      |rb|      |rh|

  |yb|      |bb|      |rh|      |rb|
bh|  |gh  gb|  |yb  yh|  |bh  bb|  |bh
  |bb|      |gh|      |yh|      |yb|

  |bh|      |gb|      |yb|      |yh|
rb|  |rb  rh|  |yh  yb|  |bb  bh|  |rb
  |bb|      |rh|      |gh|      |gb|

  |bh|      |rb|      |gb|      |gh|
bh|  |yb  yh|  |bb  bh|  |yh  yb|  |rh
  |gb|      |gh|      |bh|      |bb|

Solution:

  |rh|      |yh|      |gh|      |rh|
gh|  |gh  gb|  |bh  bb|  |yh  yb|  |gh
  |yh|      |bh|      |rb|      |rh|

  |yb|      |bb|      |rh|      |rb|
bh|  |gh  gb|  |yb  yh|  |bh  bb|  |bh
  |bb|      |gh|      |yh|      |yb|

  |bh|      |gb|      |yb|      |yh|
rb|  |rb  rh|  |bh  bb|  |gh  gb|  |rh
  |bb|      |gb|      |rh|      |rh|

  |bh|      |gh|      |rb|      |rb|
gb|  |bh  bb|  |yb  yh|  |gb  gh|  |yh
  |yb|      |yb|      |bh|      |rb|

Solution:

  |rh|      |yh|      |bh|      |bh|
gh|  |gh  gb|  |rh  rb|  |yb  yh|  |bh
  |yh|      |rh|      |bb|      |gb|

  |yb|      |rb|      |bh|      |gh|
gh|  |yb  yh|  |gh  gb|  |yh  yb|  |rh
  |bb|      |rb|      |rb|      |bb|

  |bh|      |rh|      |rh|      |bh|
gb|  |gb  gh|  |yb  yh|  |bh  bb|  |yb
  |rh|      |rh|      |yh|      |gh|

  |rb|      |rb|      |yb|      |gb|
yh|  |bb  bh|  |bb  bh|  |gb  gh|  |bb
  |gh|      |rb|      |bh|      |yb|

Solution:

  |gb|      |rb|      |gh|      |rh|
rh|  |bh  bb|  |bh  bb|  |yb  yh|  |bh
  |gb|      |rb|      |yb|      |yh|

  |gh|      |rh|      |yh|      |yb|
rb|  |rb  rh|  |gb  gh|  |rb  rh|  |rh
  |yh|      |yh|      |bb|      |gh|

  |yb|      |yb|      |bh|      |gb|
bh|  |bb  bh|  |gh  gb|  |yh  yb|  |bh
  |rb|      |bb|      |rb|      |bh|

  |rh|      |bh|      |rh|      |bb|
gh|  |bb  bh|  |gb  gh|  |gh  gb|  |yb
  |yb|      |yh|      |yh|      |gh|

Solution:

  |gh|      |rh|      |bh|      |rh|
bb|  |yb  yh|  |bh  bb|  |yb  yh|  |rh
  |yb|      |yh|      |gh|      |gb|

  |yh|      |yb|      |gb|      |gh|
rb|  |rb  rh|  |rh  rb|  |bh  bb|  |yh
  |gh|      |gh|      |yh|      |rb|

  |gb|      |gb|      |yb|      |rh|
bh|  |yh  yb|  |bh  bb|  |gh  gb|  |gb
  |bh|      |bh|      |gb|      |bh|

  |bb|      |bb|      |gh|      |bb|
yb|  |rb  rh|  |yb  yh|  |rh  rb|  |rb
  |bh|      |gh|      |gh|      |bh|

Solution:

  |rb|      |rh|      |rh|      |rb|
yh|  |gb  gh|  |yb  yh|  |bh  bb|  |bh
  |bh|      |rh|      |yh|      |yb|

  |bb|      |rb|      |yb|      |yh|
gh|  |bh  bb|  |bh  bb|  |gh  gb|  |bh
  |yb|      |rb|      |rh|      |bh|

  |yh|      |rh|      |rb|      |bb|
gh|  |rb  rh|  |gb  gh|  |yh  yb|  |gh
  |bb|      |yh|      |rb|      |yb|

  |bh|      |yb|      |rh|      |yh|
gb|  |bh  bb|  |gh  gb|  |gb  gh|  |gh
  |yb|      |gb|      |bh|      |rh|

Solution:

  |bh|      |yh|      |gb|      |yb|
bh|  |gb  gh|  |rb  rh|  |bh  bb|  |gh
  |yh|      |bb|      |gb|      |rh|

  |yb|      |bh|      |gh|      |rb|
bh|  |gh  gb|  |yh  yb|  |gb  gh|  |yh
  |bb|      |rb|      |bb|      |rb|

  |bh|      |rh|      |bh|      |rh|
bh|  |yb  yh|  |rh  rb|  |yb  yh|  |bh
  |gb|      |gb|      |bb|      |yh|

  |gh|      |gh|      |bh|      |yb|
bb|  |yb  yh|  |rh  rb|  |rb  rh|  |rh
  |yb|      |gh|      |bb|      |gh|

Solution:

  |bh|      |yh|      |bh|      |bb|
bh|  |gb  gh|  |gh  gb|  |yh  yb|  |gh
  |yh|      |rh|      |rb|      |yb|

  |yb|      |rb|      |rh|      |yh|
bh|  |gb  gh|  |yh  yb|  |gh  gb|  |rh
  |bh|      |rb|      |rh|      |rh|

  |bb|      |rh|      |rb|      |rb|
rh|  |yb  yh|  |bh  bb|  |bh  bb|  |bh
  |gh|      |yh|      |rb|      |yb|

  |gb|      |yb|      |rh|      |yh|
gh|  |bb  bh|  |gh  gb|  |gb  gh|  |rb
  |yb|      |bb|      |bh|      |bb|

Solution:

  |bh|      |rb|      |gh|      |rh|
yh|  |bh  bb|  |bh  bb|  |yb  yh|  |bh
  |gb|      |rb|      |yb|      |yh|

  |gh|      |rh|      |yh|      |yb|
rb|  |rb  rh|  |gb  gh|  |rb  rh|  |rh
  |yh|      |yh|      |bb|      |gh|

  |yb|      |yb|      |bh|      |gb|
bh|  |bb  bh|  |gh  gb|  |gb  gh|  |bb
  |rb|      |bb|      |rh|      |yb|

  |rh|      |bh|      |rb|      |yh|
gh|  |bb  bh|  |yb  yh|  |gb  gh|  |gh
  |yb|      |gb|      |bh|      |rh|

Solution:

  |rh|      |rb|      |gh|      |bh|
rh|  |gb  gh|  |yh  yb|  |rh  rb|  |yb
  |yh|      |rb|      |bb|      |bb|

  |yb|      |rh|      |bh|      |bh|
gh|  |yb  yh|  |bh  bb|  |yb  yh|  |bh
  |bb|      |yh|      |gh|      |gb|

  |bh|      |yb|      |gb|      |gh|
rb|  |rb  rh|  |rh  rb|  |bh  bb|  |yh
  |bb|      |gh|      |yh|      |rb|

  |bh|      |gb|      |yb|      |rh|
gb|  |gb  gh|  |bb  bh|  |gb  gh|  |gh
  |rh|      |yb|      |bh|      |yh|

Solution:

  |yb|      |rh|      |rh|      |rh|
bb|  |gh  gb|  |gb  gh|  |yb  yh|  |bh
  |rh|      |bh|      |rh|      |yh|

  |rb|      |bb|      |rb|      |yb|
yh|  |gb  gh|  |bh  bb|  |bh  bb|  |gh
  |bh|      |yb|      |yb|      |gb|

  |bb|      |yh|      |yh|      |gh|
rb|  |gh  gb|  |rh  rb|  |rb  rh|  |yh
  |yh|      |rh|      |gh|      |gh|

  |yb|      |rb|      |gb|      |gb|
yb|  |bb  bh|  |bb  bh|  |yh  yb|  |bh
  |gh|      |rb|      |bh|      |bh|

Solution:

  |rh|      |yb|      |bh|      |rh|
gh|  |bb  bh|  |gh  gb|  |yh  yb|  |gh
  |yb|      |bb|      |rb|      |rh|

  |yh|      |bh|      |rh|      |rb|
gb|  |rh  rb|  |yb  yh|  |bh  bb|  |bh
  |rh|      |bb|      |yh|      |rb|

  |rb|      |bh|      |yb|      |rh|
yh|  |gh  gb|  |bh  bb|  |gh  gb|  |gb
  |rb|      |yb|      |gb|      |bh|

  |rh|      |yh|      |gh|      |bb|
gh|  |gh  gb|  |bh  bb|  |yh  yb|  |gh
  |yh|      |bh|      |rb|      |yb|

Solution:

  |rh|      |yb|      |rb|      |rh|
gh|  |bb  bh|  |gb  gh|  |yh  yb|  |gh
  |yb|      |bh|      |rb|      |rh|

  |yh|      |bb|      |rh|      |rb|
gh|  |gh  gb|  |yb  yh|  |bh  bb|  |bh
  |rh|      |gh|      |yh|      |yb|

  |rb|      |gb|      |yb|      |yh|
yh|  |bb  bh|  |yh  yb|  |bb  bh|  |rb
  |gh|      |bh|      |gh|      |gb|

  |gb|      |bb|      |gb|      |gh|
bh|  |rh  rb|  |rb  rh|  |yh  yb|  |bb
  |gb|      |bh|      |rh|      |bh|

Solution:

  |gh|      |gb|      |bh|      |rh|
rb|  |rb  rh|  |bh  bb|  |yb  yh|  |bh
  |yh|      |gb|      |gh|      |yh|

  |yb|      |gh|      |gb|      |yb|
gh|  |yb  yh|  |rh  rb|  |bh  bb|  |gh
  |bb|      |gh|      |yh|      |rh|

  |bh|      |gb|      |yb|      |rb|
bh|  |gb  gh|  |bb  bh|  |bb  bh|  |bb
  |yh|      |yb|      |rb|      |rb|

  |yb|      |yh|      |rh|      |rh|
bh|  |gb  gh|  |rb  rh|  |gb  gh|  |yb
  |bh|      |bb|      |yh|      |rh|

Solution:

  |gh|      |rh|      |yb|      |rh|
rb|  |rb  rh|  |gb  gh|  |yb  yh|  |bh
  |yh|      |yh|      |bb|      |yh|

  |yb|      |yb|      |bh|      |yb|
bh|  |bb  bh|  |gh  gb|  |bh  bb|  |gh
  |rb|      |bb|      |yb|      |gb|

  |rh|      |bh|      |yh|      |gh|
gh|  |bb  bh|  |gb  gh|  |rb  rh|  |yh
  |yb|      |yh|      |bb|      |gh|

  |yh|      |yb|      |bh|      |gb|
bh|  |rb  rh|  |rh  rb|  |rb  rh|  |bh
  |gb|      |gh|      |bb|      |gb|

In total 23 solutions were found in 1 seconds and 26026288 iterations.

Press ENTER key to quit...</pre>
<p>Mein Programm löst das Puzzle rekursiv, daher kann es zu Stapelüberläufen (Stackoverflows) kommen. Es empfiehlt sich daher das Heraufsetzen der maximalen Stapelgröße.</p>
]]></content:encoded>
			<wfw:commentRss>http://robofan.de/wordpress/?feed=rss2&#038;p=257</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Das ACTA-Gedicht</title>
		<link>http://robofan.de/wordpress/?p=245</link>
		<comments>http://robofan.de/wordpress/?p=245#comments</comments>
		<pubDate>Sat, 11 Feb 2012 21:43:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[German]]></category>
		<category><![CDATA[ACTA]]></category>
		<category><![CDATA[Freiheit]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Recht]]></category>

		<guid isPermaLink="false">http://robofan.de/wordpress/?p=245</guid>
		<description><![CDATA[Heute war ich mal lyrisch aktiv und habe mir aufgrund der heutigen Demonstrationen folgendes Gedicht zusammengereimt zum Thema ACTA. ACTA soll das Netz zensieren. uns&#8217;re Freiheit limitieren. Unser Will&#8217; wird nicht erhört und das Internet zerstört. Megaupload ist schon weg, Kinox soll noch nachzieh&#8217;n. Nutzer, gezogen in den Dreck, jetzt schon absolut verschrien. Für Grooveshark, [...]]]></description>
			<content:encoded><![CDATA[<p>Heute war ich mal lyrisch aktiv und habe mir aufgrund der heutigen Demonstrationen folgendes Gedicht zusammengereimt zum Thema ACTA.</p>
<blockquote><p>ACTA soll das Netz zensieren.<br />
uns&#8217;re Freiheit limitieren.<br />
Unser Will&#8217; wird nicht erhört<br />
und das Internet zerstört.</p>
<p>Megaupload ist schon weg,<br />
Kinox soll noch nachzieh&#8217;n.<br />
Nutzer, gezogen in den Dreck,<br />
jetzt schon absolut verschrien.</p>
<p>Für Grooveshark, YouTube und auch Twitter<br />
ist das Abkommen sehr bitter.<br />
Denn für User, die es wagen,<br />
geschützte Inhalte zu laden,<br />
werden sie in Zukunft haften,<br />
werden&#8217;s jedoch nicht verkraften.</p>
<p>An erster Stelle steht das Geld,<br />
durch Internetdownloads geprellt.<br />
Für die Online-Industrie<br />
ist der Vertrag DIE Strategie.</p>
<p>Was ich allerdings nicht weiß:<br />
Was soll überhaupt der <span style="background-color: black; color: red;">[durch ACTA zensiert]</span>?</p></blockquote>
<p>Der Text darf gerne übernommen werden, er soll sogar weiterverbreitet werden. Gerne auch unter Angabe der Quelle <img src='http://robofan.de/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://robofan.de/wordpress/?feed=rss2&#038;p=245</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RoboNight 2011 &#8211; Erster Platz für die RoboGuards</title>
		<link>http://robofan.de/wordpress/?p=207</link>
		<comments>http://robofan.de/wordpress/?p=207#comments</comments>
		<pubDate>Sun, 20 Nov 2011 19:53:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[German]]></category>
		<category><![CDATA[Lego]]></category>
		<category><![CDATA[Mindstorms NXT]]></category>
		<category><![CDATA[RoboNight]]></category>
		<category><![CDATA[Roboter]]></category>

		<guid isPermaLink="false">http://robofan.de/wordpress/?p=207</guid>
		<description><![CDATA[Auch dieses Jahr haben wir wieder an der RoboNight teilgenommen, welche einmal jährlich von der Saarbrücker HTW (Hochschule für Technik und Wirtschaft) gemeinsam mit der Telekom-Tochter T-Systems veranstaltet wird. Bereits vorletztes und letztes Jahr nahmen wir an dem saarländischen Robotik-Wettbewerb teil, 2009 errichten wir den dritten Platz, letztes Jahr den zweiten. Gestern haben wir den [...]]]></description>
			<content:encoded><![CDATA[<p>Auch dieses Jahr haben wir wieder an der RoboNight teilgenommen, welche einmal jährlich von der Saarbrücker <a title="HTW des Saarlandes" href="http://www.htw-saarland.de/schulprojekte/RoboNight" target="_blank">HTW</a> (Hochschule für Technik und Wirtschaft) gemeinsam mit der Telekom-Tochter <a title="T-Systems Deutschland" href="http://t-systems.de" target="_blank">T-Systems</a> veranstaltet wird. Bereits vorletztes und letztes Jahr nahmen wir an dem saarländischen Robotik-Wettbewerb teil, 2009 errichten wir den dritten Platz, letztes Jahr den zweiten. Gestern haben wir den ersten Preis gewonnen.</p>
<p>Bereits um 9.00 Uhr begann die RoboNight, nach einer Einführung in die Aufgaben und Regeln, konnten wir gegen 10.00 Uhr anfangen die LEGO Mindstorms NXT-Roboter zusammenzubauen und zu programmieren. Um 16:30 sollte Abgabeschluss sein, dieser wurde jedoch &#8220;völlig überraschend&#8221; um 20 Minuten verlängert. Wie jedes Jahr gab es drei Aufgaben, die zu bewältigen waren:</p>
<p>Die erste Aufgabe bestand darin, eine Zahlenfolge über Bluetooth zu empfangen und je nach Kombination entsprechende Schalter anzufahren. Bei optimaler Lösung waren 50 Punkte zu erreichen, wir haben nur 30 erreicht, da sich unser Roboter mit einem Zahnrad verfing und den letzten Schalter nicht betätigte. Auch die Zeit wurde bewertet. Der schnellste Roboter Roboter hat zehn Punkte bekommen, der zweite neun und so weiter, immer absteigend.</p>
<p>In der zweiten Aufgabe ging es um ein Umspannwerk, in dem man Hindernisse von einer Linie räumen und wieder darauf ablegen musste. Allerdings durfte dabei das angrenzende Hochspannungsfeld nicht vom Roboter befahren werden. Auch hier wurde die Zeit genau wie bei der ersten Aufgabe bewertet. Unser Roboter war ziemlich schnell und wir waren die Einzigen, die die Aufgabe vollständig lösen konnten und haben 50 oder 49 Punkte erreicht.</p>
<p>&#8220;Netzaufbau&#8221; war der Name der letzten Herausforderung, man musste an einer Linie entlangfahren und dreimal jeweils zur Rechten drei &#8220;Strommasten&#8221; (an Scharnieren befestigte, kleine Bretter mit Schnappmechanismus) aufstellen. Am Ende der Linie musste man einen Schalter betätigen, um eine Glühbirne (Symbol für das Land der Ideen) zum Leuchten zu bringen. Zu unserem Schrecken schlug unser erster Versuch fehl, jedoch klappte es beim zweiten Mal einwandfrei. Wie auch bei den anderen Aufgaben wurde auch hier die Zeit mit in die Bewertung einbezogen. Wir haben bei dieser Aufgabe 50 Punkte plus unsere Zeitpunkte erhalten.</p>
<p>Am Ende fand die die Preisverleihung mehr oder weniger spannend statt, denn bereits vor der Verleihung haben uns einige Leute zum bevorstehenden Sieg gratuliert, obwohl ich mir da doch noch nicht allzu sicher sein wollte. Knapp hinter uns auf dem zweiten Platz landeten &#8220;Die Relativen&#8221;, ein Team vom Albert-Einstein-Gymnasium in Völklingen.</p>
<p>Genauere Informationen befinden sich in der HTW-Online-Ausgabe Nr. 87 unter <a title="HTW Online-Ausgabe Nr. 87" href="https://www.htw-saarland.de/organisation/htwonline/2011/87/9-t-systems-htw-robonight-in-saarbrucken-roboter-im-bereich-erneuerbarer-energien" target="_blank">https://www.htw-saarland.de/organisation/htwonline/2011/87/9-t-systems-htw-robonight-in-saarbrucken-roboter-im-bereich-erneuerbarer-energien</a></p>
<p><iframe src="http://www.youtube.com/embed/AIYPGqQgNgM?rel=0" frameborder="0" width="560" height="315"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://robofan.de/wordpress/?feed=rss2&#038;p=207</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Download YouTube Videos using any programming language</title>
		<link>http://robofan.de/wordpress/?p=160</link>
		<comments>http://robofan.de/wordpress/?p=160#comments</comments>
		<pubDate>Sun, 02 Oct 2011 19:50:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[YouTube]]></category>

		<guid isPermaLink="false">http://robofan.de/wordpress/?p=160</guid>
		<description><![CDATA[Dear reader, in this article I will show you how to write an application for downloading videos from the online platform YouTube using any programming language like C# .Net, JavaScript or any other language. I think this topic is quite interesting because I implemented a download function in my YouTube Gadget and I did not [...]]]></description>
			<content:encoded><![CDATA[<p>Dear reader,</p>
<p>in this article I will show you how to write an application for downloading videos from the online platform YouTube using any programming language like C# .Net, JavaScript or any other language. I think this topic is quite interesting because I implemented a download function in my <a href="http://youtube-gadget.com" target="_blank">YouTube Gadget</a> and I did not find any helpful resources on the internet.</p>
<p>Let&#8217;s imagine following situation: You found</p>
<p>a cool video on YouTube, now you want to download it (for playing it on your PC, mobile phone or iPod&#8230;).<br />
What we do have is the URL of the YouTube interface similar to &#8220;http://www.youtube.com/watch?v=M1wbceaOwfg&#8221; containing the swf-file that plays our video.<br />
What we do not have is the URL of the video file our browser is loading. I used <a href="http://getfirebug.com/" target="_blank">Firebug</a>, a useful extension for developers, to get the video file.</p>
<div id="attachment_161" class="wp-caption alignnone" style="width: 310px"><a href="http://robofan.de/wordpress/wp-content/uploads/2011/10/Firebug.png" target="_blank"><img class="size-medium wp-image-161  " title="Firebug - Getting the video URL" src="http://robofan.de/wordpress/wp-content/uploads/2011/10/Firebug-300x179.png" alt="" width="300" height="179" /></a><p class="wp-caption-text">Firebug - Getting the video URL</p></div>
<p>As you can see, I activated the &#8220;Netzwerk/Network&#8221; module and selected &#8220;Flash&#8221; contents. You notice that the request which is shown is the request for the video because of the &#8220;Content-Type&#8221; field of the response header (&#8220;Antwort-Header&#8221;) which is set to &#8220;video/x-flv&#8221;, the mimetype of flv-<strong>fl</strong>ash-<strong>v</strong>ideos. If you copy the requested URL to the address bar of our browser,  a download dialog will be shown and ask you to open or save &#8220;videoplayback&#8221;. Well, if this file is opened with <a href="http://www.adobe.com/products/mediaplayer/" target="_blank"><em>Adobe Media Player</em></a> or any other program being able to play flv-videos, you will see that you can watch the downloaded video.</p>
<p>I think this is clear, but more interesting is to automate this process and to download/convert the videos to a more common format. Which mobile phone or iPod can play flv-files? So the next step to do is to search the source code of the YouTube video page for our urls. And &#8211; to put it in a nutshell &#8211; it can be found in the flashvars of the embed-tag or the object (using Firefox, YouTube&#8217;s sourcecode is using an embed-tag while YouTube&#8217;s sourcecode for Internet Explorer is using an object-tag).<br />
And this is the quite long code my sourcecode contains:</p>
<pre>&lt;embed type="application/x-shockwave-flash"     src="http://s.ytimg.com/yt/swfbin/watch_as3-vfl3Eh29q.swf"     width="640" id="movie_player" height="390"    flashvars="fexp=903104%2C907702&amp;amp;url_encoded_fmt_stream_map=url%3Dhttp%253A%252F%252Fo-o.preferred.fra02s03.v11.lscache4.c.youtube.com%252Fvideoplayback%253Fsparams%253Did%25252Cexpire%25252Cip%25252Cipbits%25252Citag%25252Cratebypass%25252Ccp%2526fexp%253D903104%25252C907702%2526itag%253D43%2526ip%253D87.0.0.0%2526signature%253D30417352A65E14163FB6746AE6C6A871517A5FC9.0C91E36B690A5C885AAE0B7F43FE564444C00AD0%2526sver%253D3%2526ratebypass%253Dyes%2526expire%253D1317600000%2526key%253Dyt1%2526ipbits%253D8%2526cp%253DU0hQTFZLTl9FSkNOMF9ORVJBOms0SXNQbnhxVEI4%2526id%253D335c1b71e68ec1f8%26quality%3Dmedium%26fallback_host%3Dtc.v11.cache4.c.youtube.com%26type%3Dvideo%252Fwebm%253B%2Bcodecs%253D%2522vp8.0%252C%2Bvorbis%2522%26itag%3D43%2Curl%3Dhttp%253A%252F%252Fo-o.preferred.fra02s03.v21.lscache2.c.youtube.com%252Fvideoplayback%253Fsparams%253Did%25252Cexpire%25252Cip%25252Cipbits%25252Citag%25252Calgorithm%25252Cburst%25252Cfactor%25252Ccp%2526fexp%253D903104%25252C907702%2526algorithm%253Dthrottle-factor%2526itag%253D34%2526ip%253D87.0.0.0%2526burst%253D40%2526sver%253D3%2526signature%253DBC4BD5E7A48929985F533325AE046E5812B24D45.E599953DFB49361BD0CCDAE3A1FD06C4C7ED5A%2526expire%253D1317600000%2526key%253Dyt1%2526ipbits%253D8%2526factor%253D1.25%2526cp%253DU0hQTFZLTl9FSkNOMF9ORVJBOms0SXNQbnhxVEI4%2526id%253D335c1b71e68ec1f8%26quality%3Dmedium%26fallback_host%3Dtc.v21.cache2.c.youtube.com%26type%3Dvideo%252Fx-flv%26itag%3D34%2Curl%3Dhttp%253A%252F%252Fo-o.preferred.fra02s03.v22.lscache3.c.youtube.com%252Fvideoplayback%253Fsparams%253Did%25252Cexpire%25252Cip%25252Cipbits%25252Citag%25252Cratebypass%25252Ccp%2526fexp%253D903104%25252C907702%2526itag%253D18%2526ip%253D87.0.0.0%2526signature%253D81FDB64A4A19D55942C6C05CE4752A209C75C00D.D45F795019B8E8214EA20037660EF2B534C817F7%2526sver%253D3%2526ratebypass%253Dyes%2526expire%253D1317600000%2526key%253Dyt1%2526ipbits%253D8%2526cp%253DU0hQTFZLTl9FSkNOMF9ORVJBOms0SXNQbnhxVEI4%2526id%253D335c1b71e68ec1f8%26quality%3Dmedium%26fallback_host%3Dtc.v22.cache3.c.youtube.com%26type%3Dvideo%252Fmp4%253B%2Bcodecs%253D%2522avc1.42001E%252C%2Bmp4a.40.2%2522%26itag%3D18%2Curl%3Dhttp%253A%252F%252Fo-o.preferred.fra02s03.v22.lscache3.c.youtube.com%252Fvideoplayback%253Fsparams%253Did%25252Cexpire%25252Cip%25252Cipbits%25252Citag%25252Calgorithm%25252Cburst%25252Cfactor%25252Ccp%2526fexp%253D903104%25252C907702%2526algorithm%253Dthrottle-factor%2526itag%253D5%2526ip%253D87.0.0.0%2526burst%253D40%2526sver%253D3%2526signature%253DAB1BAAB6AEB36AA5449436B3B70DAEAC6CF4A309.BFF1F8A5C9179CF25B9121968EA70A0A31DE0088%2526expire%253D1317600000%2526key%253Dyt1%2526ipbits%253D8%2526factor%253D1.25%2526cp%253DU0hQTFZLTl9FSkNOMF9ORVJBOms0SXNQbnhxVEI4%2526id%253D335c1b71e68ec1f8%26quality%3Dsmall%26fallback_host%3Dtc.v22.cache3.c.youtube.com%26type%3Dvideo%252Fx-flv%26itag%3D5&amp;amp;enablecsi=1&amp;amp;watermark=http%3A%2F%2Fs.ytimg.com%2Fyt%2Fswf%2Flogo-vfl_bP6ud.swf%2Chttp%3A%2F%2Fs.ytimg.com%2Fyt%2Fswf%2Fhdlogo-vfloR6wva.swf&amp;amp;timestamp=1317576346&amp;amp;plid=AASuVCYX1Hr0FlbH&amp;amp;allow_embed=1&amp;amp;watch_ajax_token=CzZGESebg7W8TR9XdtjYvm5lj4J8MTMxNzY2Mjc0NkAxMzE3NTc2MzQ2&amp;amp;vq=auto&amp;amp;showpopout=1&amp;amp;autohide=2&amp;amp;hl=en_US&amp;amp;csi_page_type=watch5&amp;amp;keywords=music%2Cyoutube%2Cgadget%2Cprogram%2Capp%2Capplication%2Csoftware%2Cwindows%2Cvista%2Cplayer%2Cplaylists%2Clisten%2Csidebar%2Cdesktop%2Cwidgets%2Centertainment%2Ccomputer&amp;amp;cr=DE&amp;amp;rvs=view_count%3D407%26author%3DRoboFan1406%26length_seconds%3D%2528104%252C%2529%26id%3D8q9RJ1wZQ5E%26title%3DLord%2Bof%2Bthe%2BRings%2B-%2BLord%2Bof%2Bthe%2BRings%2B-%2BShire%2BMusic%2Cview_count%3D162%26author%3DRoboFan1406%26length_seconds%3D%2528168%252C%2529%26id%3DyXnxYgUA2IA%26title%3DClimbing%2BNXT%2Cview_count%3D288%26author%3DRoboFan1406%26length_seconds%3D%2528109%252C%2529%26id%3DTRtIuqiBh50%26title%3DLEGO%2BMindstorms%2BNXT%2BGabelstapler%2Cview_count%3D4318143%26author%3DElektraRecords%26length_seconds%3D%2528257%252C%2529%26id%3Dfwr1hm_oBxE%26title%3DBruno%2BMars%2B-%2BIt%2BWill%2BRain%2B%255BNew%2BMusic%255D%2Cview_count%3D2724048%26author%3DkellyclarksonVEVO%26length_seconds%3D%2528235%252C%2529%26id%3D0C_oNMH0GTk%26title%3DKelly%2BClarkson%2B-%2BMr.%2BKnow%2BIt%2BAll%2Cview_count%3D2980984%26author%3DSMTOWN%26length_seconds%3D%2528203%252C%2529%26id%3DGvTaLTTanJc%26title%3DSuper%2BJunior%2B%25EC%258A%2588%25ED%258D%25BC%25EC%25A3%25BC%25EB%258B%2588%25EC%2596%25B4_A-CHA_Music%2BVideo%2Cview_count%3D1815682%26author%3DYourfavoritemartian%26length_seconds%3D%2528209%252C%2529%26id%3DTUmJDVRDRTQ%26title%3DWHIP%2BYO%2BKIDS%2Bfeaturing%2BNice%2BPeter%2Cview_count%3D953666%26author%3Drecklessswaggg%26length_seconds%3D%2528241%252C%2529%26id%3DPQocCi6j_mk%26title%3DHOW%2BTO%2BLOVE%2B%2528REMIX%2529%2B-%2BJUSTIN%2BBIEBER&amp;amp;endscreen_module=http%3A%2F%2Fs.ytimg.com%2Fyt%2Fswfbin%2Fendscreen-vflNhEga_.swf&amp;amp;fmt_list=43%2F320x240%2F99%2F0%2F0%2C34%2F320x240%2F9%2F0%2F115%2C18%2F320x240%2F9%2F0%2F115%2C5%2F320x240%2F7%2F0%2F0&amp;amp;referrer=None&amp;amp;user_gender=m&amp;amp;logwatch=1&amp;amp;length_seconds=25&amp;amp;sendtmp=1&amp;amp;enablejsapi=1&amp;amp;sk=764YjHpjrC6O1ctvYaH35ppV7Bd9b6mnR&amp;amp;theme=dark&amp;amp;t=vjVQa1PpcFM-sb-PCui5mX1jKwIXdE1yWObSxWPQFp8%3D&amp;amp;video_id=M1wbceaOwfg&amp;amp;p_w=P-KpDhgwPVs&amp;amp;tk=SVN8E4f4bLdCNRlCrLgJIJlnzby7tCDb5dJjT08JFAX6-DLCnnC5rQ%3D%3D&amp;amp;user_age=33"     allowscriptaccess="always" allowfullscreen="true" bgcolor="#000000"&gt;</pre>
<p>To make our flashvars more readable and accessible I decrypted the html-entities: (The following only shows the decoded flash parameters/flashvars, the other code is not too interesting.)</p>
<pre>fexp=903104%2C907702
&amp;url_encoded_fmt_stream_map=url%3Dhttp%253A%252F%252Fo-o.preferred.fra02s03.v11.lscache4.c.youtube.com%252Fvideoplayback%253Fsparams%253Did%25252Cexpire%25252Cip%25252Cipbits%25252Citag%25252Cratebypass%25252Ccp%2526fexp%253D903104%25252C907702%2526itag%253D43%2526ip%253D87.0.0.0%2526signature%253D30417352A65E14163FB6746AE6C6A871517A5FC9.0C91E36B690A5C885AAE0B7F43FE564444C00AD0%2526sver%253D3%2526ratebypass%253Dyes%2526expire%253D1317600000%2526key%253Dyt1%2526ipbits%253D8%2526cp%253DU0hQTFZLTl9FSkNOMF9ORVJBOms0SXNQbnhxVEI4%2526id%253D335c1b71e68ec1f8%26quality%3Dmedium%26fallback_host%3Dtc.v11.cache4.c.youtube.com%26type%3Dvideo%252Fwebm%253B%2Bcodecs%253D%2522vp8.0%252C%2Bvorbis%2522%26itag%3D43%2Curl%3Dhttp%253A%252F%252Fo-o.preferred.fra02s03.v21.lscache2.c.youtube.com%252Fvideoplayback%253Fsparams%253Did%25252Cexpire%25252Cip%25252Cipbits%25252Citag%25252Calgorithm%25252Cburst%25252Cfactor%25252Ccp%2526fexp%253D903104%25252C907702%2526algorithm%253Dthrottle-factor%2526itag%253D34%2526ip%253D87.0.0.0%2526burst%253D40%2526sver%253D3%2526signature%253DBC4BD5E7A48929985F533325AE046E5812B24D45.E599953DFB49361BD0CCDAE3A1FD06C4C7ED5A%2526expire%253D1317600000%2526key%253Dyt1%2526ipbits%253D8%2526factor%253D1.25%2526cp%253DU0hQTFZLTl9FSkNOMF9ORVJBOms0SXNQbnhxVEI4%2526id%253D335c1b71e68ec1f8%26quality%3Dmedium%26fallback_host%3Dtc.v21.cache2.c.youtube.com%26type%3Dvideo%252Fx-flv%26itag%3D34%2Curl%3Dhttp%253A%252F%252Fo-o.preferred.fra02s03.v22.lscache3.c.youtube.com%252Fvideoplayback%253Fsparams%253Did%25252Cexpire%25252Cip%25252Cipbits%25252Citag%25252Cratebypass%25252Ccp%2526fexp%253D903104%25252C907702%2526itag%253D18%2526ip%253D87.0.0.0%2526signature%253D81FDB64A4A19D55942C6C05CE4752A209C75C00D.D45F795019B8E8214EA20037660EF2B534C817F7%2526sver%253D3%2526ratebypass%253Dyes%2526expire%253D1317600000%2526key%253Dyt1%2526ipbits%253D8%2526cp%253DU0hQTFZLTl9FSkNOMF9ORVJBOms0SXNQbnhxVEI4%2526id%253D335c1b71e68ec1f8%26quality%3Dmedium%26fallback_host%3Dtc.v22.cache3.c.youtube.com%26type%3Dvideo%252Fmp4%253B%2Bcodecs%253D%2522avc1.42001E%252C%2Bmp4a.40.2%2522%26itag%3D18%2Curl%3Dhttp%253A%252F%252Fo-o.preferred.fra02s03.v22.lscache3.c.youtube.com%252Fvideoplayback%253Fsparams%253Did%25252Cexpire%25252Cip%25252Cipbits%25252Citag%25252Calgorithm%25252Cburst%25252Cfactor%25252Ccp%2526fexp%253D903104%25252C907702%2526algorithm%253Dthrottle-factor%2526itag%253D5%2526ip%253D87.0.0.0%2526burst%253D40%2526sver%253D3%2526signature%253DAB1BAAB6AEB36AA5449436B3B70DAEAC6CF4A309.BFF1F8A5C9179CF25B9121968EA70A0A31DE0088%2526expire%253D1317600000%2526key%253Dyt1%2526ipbits%253D8%2526factor%253D1.25%2526cp%253DU0hQTFZLTl9FSkNOMF9ORVJBOms0SXNQbnhxVEI4%2526id%253D335c1b71e68ec1f8%26quality%3Dsmall%26fallback_host%3Dtc.v22.cache3.c.youtube.com%26type%3Dvideo%252Fx-flv%26itag%3D5
&amp;enablecsi=1
&amp;watermark=http%3A%2F%2Fs.ytimg.com%2Fyt%2Fswf%2Flogo-vfl_bP6ud.swf%2Chttp%3A%2F%2Fs.ytimg.com%2Fyt%2Fswf%2Fhdlogo-vfloR6wva.swf
&amp;timestamp=1317576346
&amp;plid=AASuVCYX1Hr0FlbH
&amp;allow_embed=1
&amp;watch_ajax_token=CzZGESebg7W8TR9XdtjYvm5lj4J8MTMxNzY2Mjc0NkAxMzE3NTc2MzQ2
&amp;vq=auto
&amp;showpopout=1
&amp;autohide=2
&amp;hl=en_US
&amp;csi_page_type=watch5
&amp;keywords=music%2Cyoutube%2Cgadget%2Cprogram%2Capp%2Capplication%2Csoftware%2Cwindows%2Cvista%2Cplayer%2Cplaylists%2Clisten%2Csidebar%2Cdesktop%2Cwidgets%2Centertainment%2Ccomputer
&amp;cr=DE
&amp;rvs=view_count%3D407%26author%3DRoboFan1406%26length_seconds%3D%2528104%252C%2529%26id%3D8q9RJ1wZQ5E%26title%3DLord%2Bof%2Bthe%2BRings%2B-%2BLord%2Bof%2Bthe%2BRings%2B-%2BShire%2BMusic%2Cview_count%3D162%26author%3DRoboFan1406%26length_seconds%3D%2528168%252C%2529%26id%3DyXnxYgUA2IA%26title%3DClimbing%2BNXT%2Cview_count%3D288%26author%3DRoboFan1406%26length_seconds%3D%2528109%252C%2529%26id%3DTRtIuqiBh50%26title%3DLEGO%2BMindstorms%2BNXT%2BGabelstapler%2Cview_count%3D4318143%26author%3DElektraRecords%26length_seconds%3D%2528257%252C%2529%26id%3Dfwr1hm_oBxE%26title%3DBruno%2BMars%2B-%2BIt%2BWill%2BRain%2B%255BNew%2BMusic%255D%2Cview_count%3D2724048%26author%3DkellyclarksonVEVO%26length_seconds%3D%2528235%252C%2529%26id%3D0C_oNMH0GTk%26title%3DKelly%2BClarkson%2B-%2BMr.%2BKnow%2BIt%2BAll%2Cview_count%3D2980984%26author%3DSMTOWN%26length_seconds%3D%2528203%252C%2529%26id%3DGvTaLTTanJc%26title%3DSuper%2BJunior%2B%25EC%258A%2588%25ED%258D%25BC%25EC%25A3%25BC%25EB%258B%2588%25EC%2596%25B4_A-CHA_Music%2BVideo%2Cview_count%3D1815682%26author%3DYourfavoritemartian%26length_seconds%3D%2528209%252C%2529%26id%3DTUmJDVRDRTQ%26title%3DWHIP%2BYO%2BKIDS%2Bfeaturing%2BNice%2BPeter%2Cview_count%3D953666%26author%3Drecklessswaggg%26length_seconds%3D%2528241%252C%2529%26id%3DPQocCi6j_mk%26title%3DHOW%2BTO%2BLOVE%2B%2528REMIX%2529%2B-%2BJUSTIN%2BBIEBER
&amp;endscreen_module=http%3A%2F%2Fs.ytimg.com%2Fyt%2Fswfbin%2Fendscreen-vflNhEga_.swf
&amp;fmt_list=43%2F320x240%2F99%2F0%2F0%2C34%2F320x240%2F9%2F0%2F115%2C18%2F320x240%2F9%2F0%2F115%2C5%2F320x240%2F7%2F0%2F0
&amp;referrer=None
&amp;user_gender=m
&amp;logwatch=1
&amp;length_seconds=25
&amp;sendtmp=1
&amp;enablejsapi=1
&amp;sk=764YjHpjrC6O1ctvYaH35ppV7Bd9b6mnR
&amp;theme=dark
&amp;t=vjVQa1PpcFM-sb-PCui5mX1jKwIXdE1yWObSxWPQFp8%3D
&amp;video_id=M1wbceaOwfg
&amp;p_w=P-KpDhgwPVs
&amp;tk=SVN8E4f4bLdCNRlCrLgJIJlnzby7tCDb5dJjT08JFAX6-DLCnnC5rQ%3D%3D
&amp;user_age=20</pre>
<p>The information sent to the Shockwave flash video is pretty interesting. My gender and age&#8230; For us, the interesting parameter is &#8220;<em>url_encoded_fmt_stream_map</em>&#8220;. This parameter is URL-encoded, here it it decoded.</p>
<pre>url=http%3A%2F%2Fo-o.preferred.fra02s03.v11.lscache4.c.youtube.com%2Fvideoplayback%3Fsparams%3Did%252Cexpire%252Cip%252Cipbits%252Citag%252Cratebypass%252Ccp%26fexp%3D903104%252C907702%26itag%3D43%26ip%3D87.0.0.0%26signature%3D30417352A65E14163FB6746AE6C6A871517A5FC9.0C91E36B690A5C885AAE0B7F43FE564444C00AD0%26sver%3D3%26ratebypass%3Dyes%26expire%3D1317600000%26key%3Dyt1%26ipbits%3D8%26cp%3DU0hQTFZLTl9FSkNOMF9ORVJBOms0SXNQbnhxVEI4%26id%3D335c1b71e68ec1f8&amp;quality=medium&amp;fallback_host=tc.v11.cache4.c.youtube.com&amp;type=video%2Fwebm%3B+codecs%3D%22vp8.0%2C+vorbis%22&amp;itag=43
,url=http%3A%2F%2Fo-o.preferred.fra02s03.v21.lscache2.c.youtube.com%2Fvideoplayback%3Fsparams%3Did%252Cexpire%252Cip%252Cipbits%252Citag%252Calgorithm%252Cburst%252Cfactor%252Ccp%26fexp%3D903104%252C907702%26algorithm%3Dthrottle-factor%26itag%3D34%26ip%3D87.0.0.0%26burst%3D40%26sver%3D3%26signature%3DBC4BD5E7A48929985F533325AE046E5812B24D45.E599953DFB49361BD0CCDAE3A1FD06C4C7ED5A%26expire%3D1317600000%26key%3Dyt1%26ipbits%3D8%26factor%3D1.25%26cp%3DU0hQTFZLTl9FSkNOMF9ORVJBOms0SXNQbnhxVEI4%26id%3D335c1b71e68ec1f8&amp;quality=medium&amp;fallback_host=tc.v21.cache2.c.youtube.com&amp;type=video%2Fx-flv&amp;itag=34
,url=http%3A%2F%2Fo-o.preferred.fra02s03.v22.lscache3.c.youtube.com%2Fvideoplayback%3Fsparams%3Did%252Cexpire%252Cip%252Cipbits%252Citag%252Cratebypass%252Ccp%26fexp%3D903104%252C907702%26itag%3D18%26ip%3D87.0.0.0%26signature%3D81FDB64A4A19D55942C6C05CE4752A209C75C00D.D45F795019B8E8214EA20037660EF2B534C817F7%26sver%3D3%26ratebypass%3Dyes%26expire%3D1317600000%26key%3Dyt1%26ipbits%3D8%26cp%3DU0hQTFZLTl9FSkNOMF9ORVJBOms0SXNQbnhxVEI4%26id%3D335c1b71e68ec1f8&amp;quality=medium&amp;fallback_host=tc.v22.cache3.c.youtube.com&amp;type=video%2Fmp4%3B+codecs%3D%22avc1.42001E%2C+mp4a.40.2%22&amp;itag=18
,url=http%3A%2F%2Fo-o.preferred.fra02s03.v22.lscache3.c.youtube.com%2Fvideoplayback%3Fsparams%3Did%252Cexpire%252Cip%252Cipbits%252Citag%252Calgorithm%252Cburst%252Cfactor%252Ccp%26fexp%3D903104%252C907702%26algorithm%3Dthrottle-factor%26itag%3D5%26ip%3D87.0.0.0%26burst%3D40%26sver%3D3%26signature%3DAB1BAAB6AEB36AA5449436B3B70DAEAC6CF4A309.BFF1F8A5C9179CF25B9121968EA70A0A31DE0088%26expire%3D1317600000%26key%3Dyt1%26ipbits%3D8%26factor%3D1.25%26cp%3DU0hQTFZLTl9FSkNOMF9ORVJBOms0SXNQbnhxVEI4%26id%3D335c1b71e68ec1f8&amp;quality=small&amp;fallback_host=tc.v22.cache3.c.youtube.com&amp;type=video%2Fx-flv&amp;itag=5</pre>
<p>Conspicious is that the parameter is not completely decoded, but the rest is very readable. All related parameter collections are separated by a comma, their parameters with values are separated by an &#8220;&amp;&#8221;-character but the values are URL-encoded again &#8211; here is the completely decoded version:</p>
<pre>url=http://o-o.preferred.fra02s03.v11.lscache4.c.youtube.com/videoplayback?sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Cratebypass%2Ccp
&amp;fexp=903104%2C907702
&amp;itag=43
&amp;ip=87.0.0.0
&amp;signature=30417352A65E14163FB6746AE6C6A871517A5FC9.0C91E36B690A5C885AAE0B7F43FE564444C00AD0
&amp;sver=3
&amp;ratebypass=yes
&amp;expire=1317600000
&amp;key=yt1
&amp;ipbits=8
&amp;cp=U0hQTFZLTl9FSkNOMF9ORVJBOms0SXNQbnhxVEI4
&amp;id=335c1b71e68ec1f8
&amp;quality=medium
&amp;fallback_host=tc.v11.cache4.c.youtube.com
&amp;type=video/webm;+codecs="vp8.0,+vorbis"
&amp;itag=43

,url=http://o-o.preferred.fra02s03.v21.lscache2.c.youtube.com/videoplayback?sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Calgorithm%2Cburst%2Cfactor%2Ccp
&amp;fexp=903104%2C907702
&amp;algorithm=throttle-factor
&amp;itag=34
&amp;ip=87.0.0.0
&amp;burst=40
&amp;sver=3
&amp;signature=BC4BD5E7A48929985F533325AE046E5812B24D45.E599953DFB49361BD0CCDAE3A1FD06C4C7ED5A
&amp;expire=1317600000
&amp;key=yt1
&amp;ipbits=8
&amp;factor=1.25
&amp;cp=U0hQTFZLTl9FSkNOMF9ORVJBOms0SXNQbnhxVEI4
&amp;id=335c1b71e68ec1f8
&amp;quality=medium
&amp;fallback_host=tc.v21.cache2.c.youtube.com
&amp;type=video/x-flv
&amp;itag=34

,url=http://o-o.preferred.fra02s03.v22.lscache3.c.youtube.com/videoplayback?sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Cratebypass%2Ccp
&amp;fexp=903104%2C907702
&amp;itag=18
&amp;ip=87.0.0.0
&amp;signature=81FDB64A4A19D55942C6C05CE4752A209C75C00D.D45F795019B8E8214EA20037660EF2B534C817F7
&amp;sver=3
&amp;ratebypass=yes
&amp;expire=1317600000
&amp;key=yt1
&amp;ipbits=8
&amp;cp=U0hQTFZLTl9FSkNOMF9ORVJBOms0SXNQbnhxVEI4
&amp;id=335c1b71e68ec1f8
&amp;quality=medium
&amp;fallback_host=tc.v22.cache3.c.youtube.com
&amp;type=video/mp4;+codecs="avc1.42001E,+mp4a.40.2"
&amp;itag=18

,url=http://o-o.preferred.fra02s03.v22.lscache3.c.youtube.com/videoplayback?sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Calgorithm%2Cburst%2Cfactor%2Ccp
&amp;fexp=903104%2C907702
&amp;algorithm=throttle-factor
&amp;itag=5
&amp;ip=87.0.0.0
&amp;burst=40
&amp;sver=3
&amp;signature=AB1BAAB6AEB36AA5449436B3B70DAEAC6CF4A309.BFF1F8A5C9179CF25B9121968EA70A0A31DE0088
&amp;expire=1317600000
&amp;key=yt1
&amp;ipbits=8
&amp;factor=1.25
&amp;cp=U0hQTFZLTl9FSkNOMF9ORVJBOms0SXNQbnhxVEI4
&amp;id=335c1b71e68ec1f8
&amp;quality=small
&amp;fallback_host=tc.v22.cache3.c.youtube.com
&amp;type=video/x-flv
&amp;itag=5</pre>
<p>Now we have got our data. There are four possible downloads (withdrawable from the <em>type</em>-parameter):</p>
<ol>
<li>The first download is a <a href="http://en.wikipedia.org/wiki/WebM" target="_blank">WebM video</a> (a video format developed by Google) with a medium quality.</li>
<li>The second download is a flash video with medium quality.</li>
<li>The third download is a mp4-video with medium quality.</li>
<li>The fourth download is a flash video with small quality.</li>
</ol>
<p>Please note that every whole paragraph displayed in the box above is one single video url, i. e. the download url for the first video type is:</p>
<pre>http://o-o.preferred.fra02s03.v11.lscache4.c.youtube.com/videoplayback?sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Cratebypass%2Ccp&amp;fexp=903104%2C907702&amp;itag=43&amp;ip=87.0.0.0&amp;signature=30417352A65E14163FB6746AE6C6A871517A5FC9.0C91E36B690A5C885AAE0B7F43FE564444C00AD0&amp;sver=3&amp;ratebypass=yes&amp;expire=1317600000&amp;key=yt1&amp;ipbits=8&amp;cp=U0hQTFZLTl9FSkNOMF9ORVJBOms0SXNQbnhxVEI4&amp;id=335c1b71e68ec1f8&amp;quality=medium&amp;fallback_host=tc.v11.cache4.c.youtube.com&amp;type=video/webm;+codecs="vp8.0,+vorbis"&amp;itag=43</pre>
<p>Now, to download this video, just download the file from this URL and you are done.</p>
<p>Note: It is not possible to demonstrate this function online because we need to send a request to YouTube first to retreive this URL. This is not possible because cross-domain-scripting (XSS) is not allowed by most common browsers.</p>
<p>In my YouTube Gadget I use the following code to download videos:</p>
<pre>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;
&lt;title&gt;Video Downloader&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;AJAX YouTube Video Downloader&lt;/h1&gt;
&lt;h2&gt;Demo by &lt;a href="http://robofan.de"&gt;robofan.de&lt;/a&gt;&lt;/h2&gt;
&lt;form onsubmit="javascript:DownloadFormats(document.getElementById('VideoURL').value); return false;"&gt;
&lt;table cellspacing="3" border="0" cellpadding="0"&gt;
&lt;tr&gt;&lt;td&gt;Video URL:&lt;/td&gt;&lt;td&gt;&lt;input type="text" id="VideoURL" style="width: 245px;" /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Video format:&lt;/td&gt;&lt;td&gt;&lt;select id="downloadformat" disabled="disabled" style="width: 250px;"&gt;&lt;option&gt;Enter the URL of a video first&lt;/option&gt;&lt;/select&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;input type="submit" value="Retreive video formats" id="downloadbutton" style="width: 250px;" /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;/form&gt;
&lt;script type="text/javascript"&gt;
var Status=0;
function exactTags(text, start, end, number) //this function allows to retreive a string between to tags - example: 'tag("&lt;tag&gt;any text&lt;/tag&gt;", "&lt;tag&gt;", "&lt;/tag&gt;", 0);' returns "any text"
{
    var first=text.split(start);
    if(first.length &gt; number+1)
    {
        var second=first[number+1];
        first=second.split(end);
        second=first[0];
        return second;
    }
    else
    {
        return "";
    }
}
function DownloadFormats(VideoURL)
{
    if(Status==0)
    {
        var FormatRequest = new ActiveXObject("Microsoft.XMLHTTP");
        FormatRequest.open("GET", VideoURL, true); //initialize request to retreive video URLs
        FormatRequest.onreadystatechange = function()
        {
            if(FormatRequest.readyState === 4)
            {
                if(FormatRequest.status === 200)
                {
                    document.getElementById("downloadformat").disabled=false;
                    document.getElementById("downloadformat").options.length=0;
                    document.getElementById("downloadbutton").value="Download/Show";
                    var DownloadData=decodeURIComponent(exactTags(exactTags(FormatRequest.responseText, '&lt;param name="flashvars" value="', '"', 0), "url_encoded_fmt_stream_map=", "&amp;", 0)).split(",");
                    for(i=0; i &lt; DownloadData.length; i++)
                    {
                        if(decodeURIComponent(exactTags(DownloadData[i], "type=", "&amp;", 0)).split(";")[0]!="video/webm") //If a video is not a Google WebM video
                        {
                            document.getElementById("downloadformat").options[document.getElementById("downloadformat").options.length]=new Option(decodeURIComponent(exactTags(DownloadData[i], "type=", "&amp;", 0)).split(";")[0]+" ("+decodeURIComponent(exactTags(DownloadData[i], "quality=", "&amp;", 0))+")", decodeURIComponent(exactTags(DownloadData[i], "url=", "&amp;", 0))); //Annex the URL to a select-list
                           �
                        }
                    }
                    Status=1;
                }
            }
        }
        FormatRequest.send(null); //Send the request
    }
    else
    {
        window.open(document.getElementById("downloadformat").value);
        Status=0;
        document.getElementById("downloadbutton").value="Retreive video formats";
        document.getElementById("downloadformat").options.length=0;
        document.getElementById("downloadformat").options[0]=new Option("Select a video first");
        document.getElementById("downloadformat").disabled=true;
    }
}
&lt;/script&gt;
This is a downloader for YouTube videos. Originally it was programmed for &lt;a href="http://youtube.com"&gt;youtube-gadget.com&lt;/a&gt;.
&lt;p&gt;Please note that you may - depending on your location - violate laws by downloading videos which are protected by copyright.&lt;br/&gt;The author does not take over responsibility for any kind of abuse of this function or these terms.&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>This works fine for downloading any video except those which are not available in Germany. To use this function in your Internet Explorer (it will not work with other browsers) you can download the document <a href="http://robofan.de/wordpress/wp-content/uploads/2011/10/VideoDownload.html">here</a>. (Right click -&gt; <em>Save as&#8230;</em>) Please be aware that the document has to be stored in your local file system because otherwise cross domain requests to YouTube are not allowed and it will not work. For the same reason you should allow blocked running scripts or ActiveX controls.</p>
<p>After downloading a video you can several conversion tools to convert the videos to any format.</p>
<p>Thank you for reading this long article, I hope I could inspire you. Please comment.</p>
<p>Best Regards<br />
Birk</p>
<p>Please note that you may &#8211; depending on your location &#8211; violate laws by downloading videos which are protected by copyright.<br />
The author does not take over responsibility for any kind of abuse of this function or these terms.</p>
]]></content:encoded>
			<wfw:commentRss>http://robofan.de/wordpress/?feed=rss2&#038;p=160</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Gallery.Live.com offline &#8211; Retired because of Windows 8?</title>
		<link>http://robofan.de/wordpress/?p=144</link>
		<comments>http://robofan.de/wordpress/?p=144#comments</comments>
		<pubDate>Sat, 01 Oct 2011 11:48:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[Gadgets]]></category>
		<category><![CDATA[Sidebar]]></category>
		<category><![CDATA[Windows 7]]></category>
		<category><![CDATA[Windows 8]]></category>
		<category><![CDATA[WIndows Sidebar]]></category>
		<category><![CDATA[Windows Vista]]></category>

		<guid isPermaLink="false">http://robofan.de/wordpress/?p=144</guid>
		<description><![CDATA[Yesterday I was very shocked when I saw that Microsoft retired &#8220;gallery.live.com&#8220;. It has always been a suitable platform for submitting my gadgets which got more than 380,000 downloads (the rest of the counted 54,000 downloads came from a similar German Microsoft platform &#8211; apps.msn.de &#8211; which is luckily not offline &#8211; but new contents [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_153" class="wp-caption alignleft" style="width: 79px"><a href="http://robofan.de/wordpress/wp-content/uploads/2011/10/CyberBoy.png"><img class="size-medium wp-image-153  " title="My gadgets" src="http://robofan.de/wordpress/wp-content/uploads/2011/10/CyberBoy-69x300.png" alt="My gadgets on gallery.live.com" width="69" height="300" /></a><p class="wp-caption-text">My gadgets</p></div>
<p>Yesterday I was very shocked when I saw that Microsoft retired &#8220;<a href="http://galelry.live.com" target="_blank">gallery.live.com</a>&#8220;. It has always been a suitable platform for submitting my gadgets which got more than 380,000 downloads (the rest of the counted 54,000 downloads came from a similar German Microsoft platform &#8211; <a>apps.msn.de</a> &#8211; which is luckily not offline &#8211; but new contents cannot be submitted either). Another point is that my &#8220;Gallery Gadget&#8221;, which searched for gadgets on the site, does not work anymore, users are now redirected to this page.<br />
The page that is shown instead of the gadget platform shows following message:</p>
<blockquote><p>The Windows Live Gallery has been retired. In order to focus support on the much richer set of opportunities available for the newest version of Windows, Microsoft is no longer supporting development or uploading of new Gadgets. However, some of the most popular and highest-rated gadgets are still available on the <a href="http://windows.microsoft.com/en-US/windows/downloads/personalize/gadgets">Gadgets</a> page of the <a href="http://windows.microsoft.com/en-US/windows/downloads/personalize">Windows Personalization Gallery</a>.</p>
<p>With Windows Developer Preview, developers can create rich app experiences where customers focus on their important tasks. Apps are at the center of the Windows Developer Preview experience and are alive with activity and vibrant content. Users immerse themselves in your full-screen app while Windows gracefully gets out of the way.</p>
<p>Windows Developer Preview allows you to leverage your existing skills and code assets so you can create great experiences for your customers. Gadget and web developers can now use their HTML5 and CSS3 skills to build native Windows apps. .NET Developers can use XAML, C#, and Visual Basic to build beautiful Metro-style apps. Game developers can use the power of DirectX 11.1 to build amazing, immersive gaming experiences. Driver developers benefit from increased productivity with the new, integrated Visual Studio development environment.</p></blockquote>
<p><small>(Source: <a href="http://gallery.live.com" target="_blank">gallery.live.com</a> &#8211; October 1, 2011)</small></p>
<p>Note the third paragraph! Windows Vista and Windows 7 are both still available at the markets and they do not support gadgets anymore while XP is still supported?! Therefore I can now build metro apps for an operating system which has not even reached beta status.<br />
Unfortunately I am not a big fan of the new metro style, I think metro style is more regress than progress. I do not want to use a computer which is not distinguishable from a mobile phone.</p>
<p><strong>UPDATE</strong> (January 5, 2012):</p>
<p>If you are searching the gadgets which were available in the gadget gallery, you will find them <strong>all</strong> at <a title="Windows Sidebar Gadget Gallery" href="http://gallery-live.com" target="_blank">gallery-live.com</a>. Note the difference of the domain name, the new site contains a minus (&#8220;-&#8221;) which replaces the dot (&#8220;.&#8221;) in gallery.live.com. This service is operated by myself and not by Microsoft.</p>
]]></content:encoded>
			<wfw:commentRss>http://robofan.de/wordpress/?feed=rss2&#038;p=144</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>&#8220;This is not a valid Gadget Package.&#8221; &#8211; Zipping a Windows Sidebar Gadget</title>
		<link>http://robofan.de/wordpress/?p=141</link>
		<comments>http://robofan.de/wordpress/?p=141#comments</comments>
		<pubDate>Sat, 06 Aug 2011 19:52:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[fso]]></category>
		<category><![CDATA[Gadget]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Windows Vista]]></category>
		<category><![CDATA[windows7]]></category>

		<guid isPermaLink="false">http://robofan.de/wordpress/?p=141</guid>
		<description><![CDATA[Some days ago I got a mail from a user who told me that my new YouTube Gadget could not be installed. This user got the following error: &#8220;This is not a valid gadget package.&#8221; First I thought it was en error because some files were not ready for archiving because the attribute for archiving [...]]]></description>
			<content:encoded><![CDATA[<p>Some days ago I got a mail from a user who told me that my new YouTube Gadget could not be installed. This user got the following error: &#8220;This is not a valid gadget package.&#8221; First I thought it was en error because some files were not ready for archiving because the attribute for archiving was missing. I tried to zip the gadget completely but it did not work, neither with WinZip nor with WinRar. I read some topics on the internet but I did not found any solution. So I removed files from the archive step by step until it worked. The last file I removed was an empty file which was preserved for storing settings. So the problem was this empty file. Gadget Packages may not contain empty files or folders. I came to the result that I could create empty folders and files automatically with the file system object (FSO). Here you get some information on the MSDN: <a href="http://msdn.microsoft.com/en-us/library/z9ty6h50%28v=vs.85%29.aspx">http://msdn.microsoft.com/en-us/library/z9ty6h50%28v=vs.85%29.aspx</a>. I hope I could help you.</p>
]]></content:encoded>
			<wfw:commentRss>http://robofan.de/wordpress/?feed=rss2&#038;p=141</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>JavaScript &#8211; Htmlentities or htmlspecialchars</title>
		<link>http://robofan.de/wordpress/?p=125</link>
		<comments>http://robofan.de/wordpress/?p=125#comments</comments>
		<pubDate>Fri, 05 Aug 2011 00:39:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[htmlentities]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://robofan.de/wordpress/?p=125</guid>
		<description><![CDATA[Today I wanted to use the htmlentities-function in JavaScript. This useful function is available for PHP but it&#8217;s not for JavaScript. The reason why I needed the htmlentities-function was the use of the element property innerHTML. I wanted to insert contents into a div container and output some JavaScript variables. The problem: As soon as [...]]]></description>
			<content:encoded><![CDATA[<p><script type="text/javascript">// <![CDATA[
function htmlentities(input)
{
    var code="";
    for(i=0; i < input.length; i++)
    {
        code=code+"&#"+input.charCodeAt(i)+";";
    }
    return code;
}
// ]]&gt;</script><br />
Today I wanted to use the htmlentities-function in JavaScript. This useful function is available for PHP but it&#8217;s not for JavaScript. The reason why I needed the htmlentities-function was the use of the element property <em>innerHTML</em>. I wanted to insert contents into a div container and output some JavaScript variables. The problem: As soon as any user inserts a special character, like &#8216;, &#8220;, &gt;, &lt; or &amp; and so on, the operation fails of course. First I thought of encoding the variables by the server with an ajax request but I did not want to use up so much traffic. So I came up with this tiny function that works similar to htmlentities but encodes <strong>every</strong> character, also normal ASCII characters. It does not really encode the characters to html entites but to xml entities which is fine for its use in HTML.<br />
Here is the function:</p>
<div class="coloredCode" style="font-family: Consolas; background-color: black;">
<pre style="white-space: pre-wrap;"><span style="color: blue;">&lt;</span><span style="color: maroon;">script</span> <span style="color: red;">type</span><span style="color: blue;">="text/javascript"&gt;</span>
<span style="color: blue;">function</span> htmlentities(input)
{
    <span style="color: blue;">var</span> code=<span style="color: maroon;">""</span>;
    <span style="color: blue;">for</span>(i=0; i &lt; input.length; i++)
    {
        code=code+<span style="color: maroon;">"&amp;#"</span>+input.charCodeAt(i)+<span style="color: maroon;">";"</span>;
    }
    <span style="color: blue;">return</span> code;
}
<span style="color: blue;">&lt;/</span><span style="color: maroon;">script</span>&gt;</pre>
</div>
<p>If you want to test it, you can do it here:</p>
<p>Input<br />
<textarea id="input" rows="3" cols="60">&#115;&#112;&#101;&#99;&#105;&#97;&#108;&#32;&#99;&#104;&#97;&#114;&#97;&#99;&#116;&#101;&#114;&#115;&#58;&#32;&#60;&#62;&#8221;&#38;&#8217;&#32;&#109;&#111;&#114;&#101;&#32;&#115;&#112;&#101;&#99;&#105;&#97;&#108;&#32;&#99;&#104;&#97;&#114;&#97;&#99;&#116;&#101;&#114;&#115;&#58;&#32;&#9835;&#9834;&#32;&#9660;&#9650;&#9660;&#9650;&#32;&#110;&#111;&#114;&#109;&#97;&#108;&#32;&#99;&#104;&#97;&#114;&#97;&#99;&#116;&#101;&#114;&#115;&#58;&#32;&#97;&#98;&#99;&#49;&#50;&#51;</textarea></p>
<input onclick="javascript:document.getElementById('output').value=htmlentities(document.getElementById('input').value);document.getElementById('enc_output').innerHTML=htmlentities(document.getElementById('input').value);" type="button" value="Run htmlentities()" />
Raw Output<br />
<textarea id="output" rows="3" cols="60"></textarea><br />
Output with encoded entities (you will not see any change compared to the input)<br />
<textarea id="enc_output" rows="3" cols="60"></textarea><br />
<br/><br/>This is the code for the code playground above. As you can see it is very simple.</p>
<div class="coloredCode" style="font-family: Consolas; background-color: black;">
<pre style="white-space: pre-wrap;">Input
<span style="color: Blue;">&lt;</span><span style="color: Maroon;">textarea</span> <span style="color: Red;">id</span><span style="color: Blue;">=&quot;input&quot;</span> <span style="color: Red;">rows</span><span style="color: Blue;">=&quot;3&quot;</span> <span style="color: Red;">cols</span><span style="color: Blue;">=&quot;60&quot;&gt;</span><span style="color: Red;">&amp;#115;&amp;#112;&amp;#101;&amp;#99;&amp;#105;&amp;#97;&amp;#108;&amp;#32;&amp;#99;&amp;#104;&amp;#97;&amp;#114;&amp;#97;&amp;#99;&amp;#116;&amp;#101;&amp;#114;&amp;#115;&amp;#58;&amp;#32;&amp;#60;&amp;#62;&amp;#8221;&amp;#38;&amp;#8217;&amp;#32;&amp;#109;&amp;#111;&amp;#114;&amp;#101;&amp;#32;&amp;#115;&amp;#112;&amp;#101;&amp;#99;&amp;#105;&amp;#97;&amp;#108;&amp;#32;&amp;#99;&amp;#104;&amp;#97;&amp;#114;&amp;#97;&amp;#99;&amp;#116;&amp;#101;&amp;#114;&amp;#115;&amp;#58;&amp;#32;&amp;#9835;&amp;#9834;&amp;#32;&amp;#9660;&amp;#9650;&amp;#9660;&amp;#9650;&amp;#32;&amp;#110;&amp;#111;&amp;#114;&amp;#109;&amp;#97;&amp;#108;&amp;#32;&amp;#99;&amp;#104;&amp;#97;&amp;#114;&amp;#97;&amp;#99;&amp;#116;&amp;#101;&amp;#114;&amp;#115;&amp;#58;&amp;#32;&amp;#97;&amp;#98;&amp;#99;&amp;#49;&amp;#50;&amp;#51;</span><span style="color: Blue;">&lt;/</span><span style="color: Maroon;">textarea</span><span style="color: Blue;">&gt;</span>
<span style="color: Blue;">&lt;</span><span style="color: Maroon;">input</span> <span style="color: Red;">onclick</span><span style="color: Blue;">=&quot;javascript:document.getElementById('output').value=htmlentities(document.getElementById('input').value); document.getElementById('enc_output').innerHTML=htmlentities(document.getElementById('input').value);&quot;</span> <span style="color: Red;">type</span><span style="color: Blue;">=&quot;button&quot;</span> <span style="color: Red;">value</span><span style="color: Blue;">=&quot;Run htmlentities()&quot;</span> <span style="color: Blue;">/&gt;</span>
Raw Output
<span style="color: Blue;">&lt;</span><span style="color: Maroon;">textarea</span> <span style="color: Red;">id</span><span style="color: Blue;">=&quot;output&quot;</span> <span style="color: Red;">rows</span><span style="color: Blue;">=&quot;3&quot;</span> <span style="color: Red;">cols</span><span style="color: Blue;">=&quot;60&quot;&gt;&lt;/</span><span style="color: Maroon;">textarea</span><span style="color: Blue;">&gt;</span>
Output with encoded entities (you will not see any change compared to the input)
<span style="color: Blue;">&lt;</span><span style="color: Maroon;">textarea</span> <span style="color: Red;">id</span><span style="color: Blue;">=&quot;enc_output&quot;</span> <span style="color: Red;">rows</span><span style="color: Blue;">=&quot;3&quot;</span> <span style="color: Red;">cols</span><span style="color: Blue;">=&quot;60&quot;&gt;&lt;/</span><span style="color: Maroon;">textarea</span>&gt;</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://robofan.de/wordpress/?feed=rss2&#038;p=125</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>HTML code box for formatted code</title>
		<link>http://robofan.de/wordpress/?p=113</link>
		<comments>http://robofan.de/wordpress/?p=113#comments</comments>
		<pubDate>Mon, 11 Jul 2011 17:19:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Format]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Style]]></category>

		<guid isPermaLink="false">http://robofan.de/wordpress/?p=113</guid>
		<description><![CDATA[I just thought that unformatted code does not look so nice in my wordpress posts and because I am a self-maker and did not want to install any syntax highlighter I just wrote a little C# program which generates HTML code out of richText code. So I can simply paste code from Visual Studio and [...]]]></description>
			<content:encoded><![CDATA[<p>I just thought that unformatted code does not look so nice in my wordpress posts and because I am a self-maker and did not want to install any syntax highlighter I just wrote a little C# program which generates HTML code out of richText code. So I can simply paste code from Visual Studio and then I receive the HTML code to display my code from Visual Studio on any HTML page.<br/>Here you can see the source code of this little tool as an example:</p>
<div class="coloredCode" style="font-family: Consolas;">
<pre style="white-space: pre-wrap;"><span style="color: Green;">//C# Program that generates HTML-Code out of any programming code</span>
<span style="color: Blue;">using</span> System;
<span style="color: Blue;">using</span> System.Collections.Generic;
<span style="color: Blue;">using</span> System.ComponentModel;
<span style="color: Blue;">using</span> System.Data;
<span style="color: Blue;">using</span> System.Drawing;
<span style="color: Blue;">using</span> System.Text;
<span style="color: Blue;">using</span> System.Windows.Forms;

<span style="color: Blue;">namespace</span> WindowsFormsApplication1
{
    <span style="color: Blue;">public</span> <span style="color: Blue;">partial</span> <span style="color: Blue;">class</span> <span style="color: #2B91AF;">Form1</span> : <span style="color: #2B91AF;">Form</span>
    {
        <span style="color: Blue;">public</span> Form1()
        {
            InitializeComponent();
        }
        <span style="color: Blue;">string</span> Code;
        <span style="color: Blue;">private</span> <span style="color: Blue;">void</span> button1_Click(<span style="color: Blue;">object</span> sender, <span style="color: #2B91AF;">EventArgs</span> e)
        {
            Code = <span style="color: #A31515;">&quot;&quot;</span>;
            Code += <span style="color: #A31515;">&quot;&lt;div class=\&quot;coloredCode\&quot;&quot;</span>;
            Code += <span style="color: #A31515;">&quot; style=\&quot;font-family: &quot;</span>+richTextBox1.SelectionFont.FontFamily.Name+<span style="color: #A31515;">&quot;;\&quot;&quot;</span>;
            Code += <span style="color: #A31515;">&quot;&gt;&lt;pre style=\&quot;white-space: pre-wrap;\&quot;&gt;&quot;</span>;
            System.Drawing.<span style="color: #2B91AF;">Color</span> oldColor = System.Drawing.<span style="color: #2B91AF;">Color</span>.Black;
            <span style="color: Blue;">bool</span> opened = <span style="color: Blue;">false</span>;
            <span style="color: Blue;">for</span> (<span style="color: Blue;">int</span> i = 0; i &lt; richTextBox1.TextLength; i++)
            {
                richTextBox1.Select(i, 1);
                <span style="color: Blue;">if</span> (richTextBox1.SelectionColor != oldColor)
                {
                    <span style="color: Blue;">if</span> (i != 0 &amp;&amp; opened)
                    {
                        Code += <span style="color: #A31515;">&quot;&lt;/span&gt;&quot;</span>;
                        opened = <span style="color: Blue;">false</span>;
                    }
                    <span style="color: Blue;">if</span> (i != richTextBox1.TextLength - 1 &amp;&amp; richTextBox1.SelectionColor!=System.Drawing.<span style="color: #2B91AF;">Color</span>.Black)
                    {
                        Code += <span style="color: #A31515;">&quot;&lt;span style=\&quot;color: &quot;</span> + System.Drawing.<span style="color: #2B91AF;">ColorTranslator</span>.ToHtml(richTextBox1.SelectionColor) + <span style="color: #A31515;">&quot;;\&quot;&gt;&quot;</span>;
                        opened = <span style="color: Blue;">true</span>;
                    }
                }
                Code += System.Web.<span style="color: #2B91AF;">HttpUtility</span>.HtmlEncode(richTextBox1.SelectedText);
                oldColor = richTextBox1.SelectionColor;
            }
            <span style="color: Blue;">if</span> (opened)
            {
                Code += <span style="color: #A31515;">&quot;&lt;/span&gt;&quot;</span>;
            }
            Code += <span style="color: #A31515;">&quot;&lt;/pre&gt;&lt;/div&gt;&quot;</span>;
            System.Windows.Forms.<span style="color: #2B91AF;">TextBox</span> textbox=<span style="color: Blue;">new</span> System.Windows.Forms.<span style="color: #2B91AF;">TextBox</span>();
            textbox.Text = Code;
            textbox.SelectAll();
            textbox.Copy();
            <span style="color: #2B91AF;">MessageBox</span>.Show(<span style="color: #A31515;">&quot;Your HTML-Code was copied to the clipboard&quot;</span>, <span style="color: #A31515;">&quot;Copied&quot;</span>, <span style="color: #2B91AF;">MessageBoxButtons</span>.OK, <span style="color: #2B91AF;">MessageBoxIcon</span>.Information);
        }
    }
}</pre>
</div>
<p>The program can be downloaded <a href="/Programme/CodeFormat.exe">here</a></p>
]]></content:encoded>
			<wfw:commentRss>http://robofan.de/wordpress/?feed=rss2&#038;p=113</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript Progress Bar in Windows Style</title>
		<link>http://robofan.de/wordpress/?p=94</link>
		<comments>http://robofan.de/wordpress/?p=94#comments</comments>
		<pubDate>Mon, 11 Jul 2011 15:01:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[ProgressBar]]></category>
		<category><![CDATA[Style]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://robofan.de/wordpress/?p=94</guid>
		<description><![CDATA[Here is a progress bar for JavaScript in Windows Style. I was annoyed of the fact that there is no element for a progress bar like there is in C# or C++, I found some progress bars that looked good but they were just gif animations where the percentage could not be set using javascript. [...]]]></description>
			<content:encoded><![CDATA[<p>Here is a progress bar for JavaScript in Windows Style. I was annoyed of the fact that there is no element for a progress bar like there is in C# or C++, I found some progress bars that looked good but they were just gif animations where the percentage could not be set using javascript. So I copied some graphics of the Windows progress bar using C# and used them in HTML/JavaScript for my bar.<br />
Here is an example of the bar:<br />
<script type="text/javascript" language="javascript" src="/Bilder/progressBar/progressBar.js"></script><script type="text/javascript" language="javascript">// <![CDATA[
function updateBar(){if(progress < 300){progress++;setBar('Bar', progress);setBarText('Bar', 'Processing:  '+Math.round(getPercentageFromWidth(300, progress))+'%');}}newBar("Bar", 300, "/Bilder/progressBar");setBarText("Bar", "Initializing...");var progress=0;setTimeout('setInterval(updateBar, 10);', 5000);
// ]]&gt;</script><br />
This is my code:</p>
<div class="coloredCode">
<pre style="white-space: pre-wrap;"><span style="color: blue;">&lt;</span><span style="color: #a31515;">script</span> <span style="color: red;">type</span><span style="color: blue;">="text/javascript"</span> <span style="color: red;">language</span><span style="color: blue;">="javascript"</span> <span style="color: red;">src</span><span style="color: blue;">="/Bilder/progressBar/progressBar.js"&gt;&lt;/</span><span style="color: #a31515;">script</span><span style="color: blue;">&gt; &lt;</span><span style="color: #a31515;">script</span> <span style="color: red;">type</span><span style="color: blue;">="text/javascript"&gt;</span>
<span style="color: blue;">function</span> updateBar()
{
	<span style="color: blue;">if</span>(progress &lt; 300)
	{
		progress++;
		setBar(<span style="color: #a31515;">'Bar'</span>, progress);
		setBarText(<span style="color: #a31515;">'Bar'</span>, <span style="color: #a31515;">'Processing: '</span>+Math.round(getPercentageFromWidth(300, progress))+<span style="color: #a31515;">'%'</span>);
	}

}
newBar(<span style="color: #a31515;">"Bar"</span>, 300, <span style="color: #a31515;">""</span>);
setBarText(<span style="color: #a31515;">"Bar"</span>, <span style="color: #a31515;">"Initializing..."</span>);
<span style="color: blue;">var</span> progress=0;
setTimeout(<span style="color: #a31515;">'setInterval(updateBar, 10);'</span>, 5000);
<span style="color: blue;">&lt;/</span><span style="color: #a31515;">script</span>&gt;</pre>
</div>
<p>while this is the content of the <strong>progressBar.js</strong> file which is included:</p>
<div class="coloredCode">
<pre style="white-space: pre-wrap;"><span style="background-color: grey;">/* JavaScript Progress Bar - Windows Style Code written by Birk Blechschmidt, 2011 http://robofan.de This notice has to stay and may not be modified. */</span>
<span style="color: blue;">function</span> setBar(bar, pixels)
{
	document.getElementById(bar).style.width=pixels+<span style="color: #a31515;">"px"</span>;
}
<span style="color: blue;">function</span> setBarText(bar, text)
{
	document.getElementById(bar+<span style="color: #a31515;">"_text"</span>).innerHTML=text;
}
<span style="color: blue;">function</span> getWidthFromPercentage(barWidth, percentage)
{
	<span style="color: blue;">return</span> Math.round(130*percentage/100);
}
<span style="color: blue;">function</span> getPercentageFromWidth(barWidth, width)
{
	<span style="color: blue;">return</span> width/barWidth*100;
}
<span style="color: blue;">function</span> newBar(id, width, imagePath)
{
	<span style="color: blue;">if</span>(imagePath.length &gt; 0)
	{
		<span style="color: blue;">if</span>(imagePath.substr(imagePath.length-1, 1)!=<span style="color: #a31515;">"/"</span>)
		{
			imagePath=imagePath+<span style="color: #a31515;">"/"</span>;
		}
	}
	<span style="color: blue;">var</span> Code=<span style="color: #a31515;">'&lt;div class="progressBarContainer" style="border: none; border-spacing: 0; width: '</span>+width+<span style="color: #a31515;">'px; height: 23px; margin: 0; padding: 0; position: relative; top: 0; left: 0;"&gt;&lt;div style="border: none; border-spacing: 0; margin: 0; padding: 0;"&gt;&lt;img src="'</span>+imagePath+<span style="color: #a31515;">'left.png" style="border: none; border-spacing: 0; margin: 0; padding: 0;" /&gt;&lt;img src="'</span>+imagePath+<span style="color: #a31515;">'middle.png" style="border: none; border-spacing: 0; width: '</span>+eval(width-4)+<span style="color: #a31515;">'px; height: 23px; margin: 0; padding: 0;" /&gt;&lt;img src="'</span>+imagePath+<span style="color: #a31515;">'right.png" style="border: none; border-spacing: 0; margin: 0; padding: 0;" /&gt;&lt;/div&gt;&lt;div class="greenBar" style="border: none; border-spacing: 0; position: absolute; top: 0px; left: 0px; overflow: hidden; height: 23px; white-space: nowrap; margin: 0; padding: 0; width: 0px;" id="'</span>+id+<span style="color: #a31515;">'"&gt;&lt;img src="'</span>+imagePath+<span style="color: #a31515;">'left_green.png" style="border: none; border-spacing: 0; margin: 0; padding: 0;" /&gt;&lt;img src="'</span>+imagePath+<span style="color: #a31515;">'middle_green.png" style="border: none; border-spacing: 0; width: '</span>+eval(width-4)+<span style="color: #a31515;">'px; height: 23px; margin: 0; padding: 0;" /&gt;&lt;img src="'</span>+imagePath+<span style="color: #a31515;">'right_green.png" style="border: none; border-spacing: 0; margin: 0; padding: 0;" /&gt;&lt;/div&gt;&lt;div id="'</span>+id+<span style="color: #a31515;">'_text" style="position: absolute; top: 1px; left: 0; overflow: hidden; width: '</span>+width+<span style="color: #a31515;">'px; height: 23px; white-space: nowrap; text-align: center; color: black; z-index: 1; font-size: 13px;"&gt;&lt;/div&gt;&lt;/div&gt;'</span>;
	document.write(Code);
}</pre>
</div>
<p>I do not think this code needs an explanation.</p>
<p><a href="/Bilder/progressBar/progressBar.zip">Here</a> you can download the zip-archive containing the images of the progress bar.</p>
]]></content:encoded>
			<wfw:commentRss>http://robofan.de/wordpress/?feed=rss2&#038;p=94</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

