<?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>lotterfriends.net</title>
	<atom:link href="http://lotterfriends.net/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://lotterfriends.net</link>
	<description>Kaffee und Kekse!!</description>
	<lastBuildDate>Thu, 16 Feb 2012 07:38:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Objektorientiertes JavaScript Spiel</title>
		<link>http://lotterfriends.net/index.php/2012/02/08/objektorientiertes-javascript-spiel/</link>
		<comments>http://lotterfriends.net/index.php/2012/02/08/objektorientiertes-javascript-spiel/#comments</comments>
		<pubDate>Wed, 08 Feb 2012 19:50:32 +0000</pubDate>
		<dc:creator>lotterfriends</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Snippets]]></category>
		<category><![CDATA[Game]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[Objektorientiert]]></category>
		<category><![CDATA[Spiel]]></category>

		<guid isPermaLink="false">http://lotterfriends.net/?p=514</guid>
		<description><![CDATA[Dieses kleine Spiel soll mit einfachen Mittel zeigen das man auch in JavaScript gutlesbaren, objektorientierten Code schreiben kann.
Als Unterstützung verwende ich die jQuery Bibilothekt um mir das arbeiten mit dem DOM und das Positionieren zu erleichtern.
Für das ganze Spiel werden nur 4 Objekte  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.lotterfriends.net/beta/BarrierGame/" target="_blank">Dieses kleine Spiel</a> soll mit einfachen Mittel zeigen das man auch in JavaScript gutlesbaren, objektorientierten Code schreiben kann.</p>
<p>Als Unterstützung verwende ich die <a href="http://jquery.com" target="_blank">jQuery Bibilothekt</a> um mir das arbeiten mit dem DOM und das Positionieren zu erleichtern.</p>
<p>Für das ganze Spiel werden nur 4 Objekte benötigt, wobei eines nur ein Containerobjekt für Tastencode-Zuweisungen ist. Ich habe für alle Objekte eine eigene Datei erstellt um eine gute Lesbarkeit zu erreichen. Immer wenn die Datei ein JavaScript-Objekt repräsentiert schreibe ich den Dateiname groß.</p>
<p>Unser Startpunkt ist die Datei Game.js. Als Erstes wird für jedes Element mit der Klasse &#8220;.game&#8221; eine Game-Objekt erzeugt, dadurch werden auch die im Konstruktor definierten Variablen zugewiesen und Methoden ausgeführt. Ich initialisiere einen KeyListener um auf Tastatureingaben zu reagieren. In der Datei &#8220;util.js&#8221; ist das Containerobjekt mit den Tastencode-Zuweisungen.</p>
<p>In der Methode &#8220;run()&#8221; wird das Spiel gestartet. Mit der setInerval Funktion des Window-Objekts erreichen wir eine dauerhafte Ausführung unseres Spiels. In jedem Durchlauf können wir die Hindernisse bewegen, Kollision zwischen Spieler und Gegenständen feststellen und gegeben Falls darauf reagieren.</p>
<p>Im Konstuktor des Game-Objektes wird außerdem für jedes Hinderniss und den Spieler jeweils Objekte erstellt. Diese sind dem Game-Objekt bekannt um in der &#8220;run()&#8221;<br />
Methode mit ihnen zu arbeiten.</p>
<pre class="brush: jscript; title: ; notranslate">
$(document).ready(function() {

	$('.game').each(function() {
		new Game($(this));
	});

});

function Game($game) {
	this.$board =  $game.find('.board');
	this.speed = 10;
	this.pause = false;
	this.gameOver = false;
	this.player = new Player(this.$board);
	this.$text = $game.find(&quot;.text&quot;);
	this.barriers = this.initBarrier();
	this.initKeyListener();
	this.run();
}

Game.prototype.run = function() {
	var game = this;
	var $player = game.player.$player;

	window.setInterval(function() {

		if (game.gameOver || game.pause) {
			return;
		}

		$.each(game.barriers, function(i) {

			this.move();

			if ($player.collidesWith(this.$barrier).length) {
				game.gameOver = true;
				game.$text.text(&quot;GAME OVER!&quot;);
			}

			if ($player.offset().top &gt; (game.$board.height() + $player.height())){
				game.pause = true;
				game.$text.text(&quot;WIN!&quot;);
			}

		});

	}, game.speed);
};

Game.prototype.initKeyListener = function() {
	var game = this;
	$(window).bind('keydown', function(e) {
		switch (e.keyCode) {

			// Reset
			case Keys.ESC:
				game.player.reset();
				game.pause = false;
				game.gameOver = false;
				game.$text.text(&quot;&quot;);
				break;

			// Pause
			case Keys.SPACE:
				game.pause = !game.pause;
				break;

			// Spieler zurücksetzen
			case Keys.POS1:
				if (!game.pause &amp;&amp; !game.gameOver) game.player.reset();
				break;

	    	case Keys.LEFT:
	    		if (!game.pause &amp;&amp; !game.gameOver) game.player.moveLeft();
	    		break;

	    	case Keys.UP:
	    		if (!game.pause &amp;&amp; !game.gameOver) game.player.moveUp();
	    		break;

	    	case Keys.RIGHT:
	    		if (!game.pause &amp;&amp; !game.gameOver) game.player.moveRight();
	    		break;

	    	case Keys.DOWN:
	    		if (!game.pause &amp;&amp; !game.gameOver) game.player.moveDown();
	    		break;

	    	default:
	    		break;
		}
	});
};

Game.prototype.initBarrier = function() {
	var $board = this.$board;
	var barriers = [];
	$board.find('.barrier').each(function(){
		barriers.push(new Barrier($board, $(this)));
	});
	return barriers;
};
</pre>
<p>Das Player-Objekt wird lediglich vom KeyListener angesprochen. Je nach Tastatureingabe wird das enthaltene HTML bzw. jQuery Objekt bewegt.</p>
<pre class="brush: jscript; title: ; notranslate">
function Player($board) {
	var p = this;
	p.speed = 5;
	p.$board = $board;
	p.$player = p.$board.find('.player:eq(0)');
}

Player.prototype.reset = function() {
	this.$player.css(&quot;margin&quot;,&quot;0&quot;);
};

Player.prototype.moveUp = function() {
	var p = this;
	if (p.$player.offset().top &gt; p.$board.offset().top) {
		p.$player.css(&quot;margin-top&quot;,&quot;-=&quot; + p.speed + &quot;px&quot;);
	}
};

Player.prototype.moveDown = function() {
	var p = this;
	if (p.$player.offset().top &lt; (p.$board.height() + p.$player.height())) {
		p.$player.css(&quot;margin-top&quot;,&quot;+=&quot; + p.speed + &quot;px&quot;);
	}
};

Player.prototype.moveLeft = function() {
	var p = this;
	if (p.$player.offset().left &gt; p.$board.offset().left) {
		p.$player.css(&quot;margin-left&quot;,&quot;-=&quot; + p.speed + &quot;px&quot;);
	}
};

Player.prototype.moveRight = function() {
	var p = this;
	if (p.$player.offset().left - p.speed &lt; p.$board.width()) {
		p.$player.css(&quot;margin-left&quot;,&quot;+=&quot; + p.speed + &quot;px&quot;);
	}
};
</pre>
<p>Die &#8220;move()&#8221; Methode des Barrier Objektes wird in jedem Durchlauf der &#8220;run()&#8221; Methode aufgerufen, dadurch bewegt es sich automatisch und wird so &#8220;animiert&#8221;.</p>
<pre class="brush: jscript; title: ; notranslate">
function Barrier($board, $barrier) {
	var b = this;
	b.$board = $board;
	b.$barrier = $barrier;
	b.moveLeft = false;
	b.sign = &quot;+&quot;;
	b.range = 1;
}

Barrier.prototype.move = function(){
	var b = this;

	// Move left
	if (b.nachLinks || (b.$barrier.offset().left + b.$board.position().left &gt;= b.$board.width())) {
		b.sign = &quot;-&quot;;
		b.nachLinks = true;
	}

	// Move right
	if (b.$barrier.offset().left &lt;= b.$board.offset().left) {
		b.sign = &quot;+&quot;;
		b.nachLinks = false;
	}

	b.$barrier.css(&quot;margin-left&quot;, b.sign + &quot;=&quot; + b.range + &quot;px&quot;);

};
</pre>
<p>Hier könnt ihr meine Sourcen Downloaden um sie euch genauer anzusehen und vielleicht selber noch ein bisschen damit rum zu spielen.</p>
<h3><a href="http://lotterfriends.net/wp-content/uploads/2012/02/BarrierGame.zip">Download</a></h3>
]]></content:encoded>
			<wfw:commentRss>http://lotterfriends.net/index.php/2012/02/08/objektorientiertes-javascript-spiel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>dü dü</title>
		<link>http://lotterfriends.net/index.php/2011/08/16/du-du/</link>
		<comments>http://lotterfriends.net/index.php/2011/08/16/du-du/#comments</comments>
		<pubDate>Tue, 16 Aug 2011 19:45:11 +0000</pubDate>
		<dc:creator>lotterfriends</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Nerd]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[zelda]]></category>

		<guid isPermaLink="false">http://lotterfriends.net/?p=475</guid>
		<description><![CDATA[Ich hab alles mal ein bisschen wieder auf einen aktuellen Stand gebracht.
Hier noch ein cooles nerdiges Video aus den tiefen des Netzes  

]]></description>
			<content:encoded><![CDATA[<p>Ich hab alles mal ein bisschen wieder auf einen aktuellen Stand gebracht.</p>
<p>Hier noch ein cooles nerdiges Video aus den tiefen des Netzes <img src='http://lotterfriends.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><object width="560" height="349" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube-nocookie.com/v/ENjmYTB1Ee0?version=3&amp;hl=de_DE&amp;rel=0" /><param name="allowfullscreen" value="true" /><embed width="560" height="349" type="application/x-shockwave-flash" src="http://www.youtube-nocookie.com/v/ENjmYTB1Ee0?version=3&amp;hl=de_DE&amp;rel=0" allowFullScreen="true" allowscriptaccess="always" allowfullscreen="true" /></object></p>
]]></content:encoded>
			<wfw:commentRss>http://lotterfriends.net/index.php/2011/08/16/du-du/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Snippet/Javascript] Div mitscrollen</title>
		<link>http://lotterfriends.net/index.php/2011/06/09/snippetjavascript-div-mitscrollen/</link>
		<comments>http://lotterfriends.net/index.php/2011/06/09/snippetjavascript-div-mitscrollen/#comments</comments>
		<pubDate>Thu, 09 Jun 2011 15:25:10 +0000</pubDate>
		<dc:creator>lotterfriends</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Snippets]]></category>

		<guid isPermaLink="false">http://lotterfriends.net/?p=464</guid>
		<description><![CDATA[Hier mal wieder ein Mini Snippet zu JavaScript. Mit jQuery ist es ziemlich einfach Scroll-Eigenschaften
auf ein anderes Element zu übertragen. Wenn also das obere Div gescrollt wird, scrollt das untere
automatisch mit. Anbei der Quelltext und hier eine Livedemo.
&#160;
]]></description>
			<content:encoded><![CDATA[<p>Hier mal wieder ein Mini Snippet zu JavaScript. Mit jQuery ist es ziemlich einfach Scroll-Eigenschaften</p>
<p>auf ein anderes Element zu übertragen. Wenn also das obere Div gescrollt wird, scrollt das untere</p>
<p>automatisch mit. Anbei der Quelltext und <a href="http://lotterfriends.net/wp-content/uploads/2011/06/test.html">hier</a> eine Livedemo.</p>
<p>&nbsp;</p>
<pre class="brush: xml; title: ; notranslate">
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;
 &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; lang=&quot;en&quot; xml:lang=&quot;en&quot;&gt;
&lt;head&gt;
&lt;title&gt;test&lt;/title&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js&quot;&gt;&lt;/script&gt;
&lt;style type='text/css'&gt;
div { font-size:200px; width:200px; height:100px; white-space:nowrap; overflow:scroll }
div + div { overflow:hidden }
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id=&quot;div1&quot;&gt;test test test test test test&lt;/div&gt;
&lt;div id=&quot;div2&quot;&gt;test test test test test test&lt;/div&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  $('#div1').scroll(function() {
    $('#div2').scrollLeft(this.scrollLeft);
    $('#div2').scrollTop(this.scrollTop);
  });
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://lotterfriends.net/index.php/2011/06/09/snippetjavascript-div-mitscrollen/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Stirb</title>
		<link>http://lotterfriends.net/index.php/2011/03/27/stirb/</link>
		<comments>http://lotterfriends.net/index.php/2011/03/27/stirb/#comments</comments>
		<pubDate>Sun, 27 Mar 2011 20:40:16 +0000</pubDate>
		<dc:creator>lotterfriends</dc:creator>
				<category><![CDATA[Multimedia]]></category>
		<category><![CDATA[Videos]]></category>
		<category><![CDATA[Youtube]]></category>

		<guid isPermaLink="false">http://lotterfriends.net/?p=459</guid>
		<description><![CDATA[
(via Amy an Pink)
]]></description>
			<content:encoded><![CDATA[<p><object style="height: 390px; width: 640px;" width="640" height="390" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://www.youtube.com/v/gJ6APKIjFQY?version=3" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><embed style="height: 390px; width: 640px;" width="640" height="390" type="application/x-shockwave-flash" src="http://www.youtube.com/v/gJ6APKIjFQY?version=3" allowFullScreen="true" allowScriptAccess="always" allowfullscreen="true" allowscriptaccess="always" /></object></p>
<p>(via <a href="http://www.amypink.com/2011/03/game-deaths/">Amy an Pink</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://lotterfriends.net/index.php/2011/03/27/stirb/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Antrag auf Wehrdienstbefreiung</title>
		<link>http://lotterfriends.net/index.php/2010/11/07/antrag-auf-wehrdienstbefreiung/</link>
		<comments>http://lotterfriends.net/index.php/2010/11/07/antrag-auf-wehrdienstbefreiung/#comments</comments>
		<pubDate>Sun, 07 Nov 2010 16:11:15 +0000</pubDate>
		<dc:creator>lotterfriends</dc:creator>
				<category><![CDATA[Leben]]></category>
		<category><![CDATA[Antrag]]></category>
		<category><![CDATA[Vorlage]]></category>
		<category><![CDATA[Wehrdienstbefreiung]]></category>
		<category><![CDATA[Wehrdienstgesetz]]></category>
		<category><![CDATA[Wehrdienstverweigerung]]></category>

		<guid isPermaLink="false">http://lotterfriends.net/?p=437</guid>
		<description><![CDATA[Falls ihr zwei ältere Brüder habt, die einen nach dem deutschen Wehrpflichtgesetzes angerechnet Dienst, geleistet haben, könnt ihr als dritter Sohn eine Wehrdienstbefreiung beantragen.
Ich habe einen solchen  Antrag gestellt, als mir die Einladung zur Musterung ins Haus geflattert ist. Ihr könnt  [...]]]></description>
			<content:encoded><![CDATA[<p>Falls ihr zwei ältere Brüder habt, die einen nach dem deutschen Wehrpflichtgesetzes angerechnet Dienst, geleistet haben, könnt ihr als dritter Sohn eine Wehrdienstbefreiung beantragen.</p>
<p>Ich habe einen solchen  Antrag gestellt, als mir die Einladung zur Musterung ins Haus geflattert ist. Ihr könnt ihn aber auch schon vorher z.B. bei eurer Erfassung stellen.</p>
<p>Mein Antrag wurde ohne Murren angenommen und ich empfehle jedem dritten Sohn es mir gleich zu tun. Wichtig ist das der Dienst <strong>komplett </strong>abgeleistet wurden. Üblich sind z.B. Wehr- oder Zivildienst. Im <a href="http://www.gesetze-im-internet.de/wehrpflg/__11.html">im Gesetz</a> kann genau nachgelesen werden welche Dienste anerkannt wird.</p>
<p>An euer Kreiswehrersatzamt muss geschickt werden:</p>
<ul>
<li>der <strong>Antrag</strong> in Form eines Formellen Schreibens</li>
<li>die <strong>Bescheinigungen</strong>, das eure Brüder einen Dienst geleistet haben (Wehrdienstzeitbescheinigung bei Wehrdienst und Dienstzeitbescheinigung bei Zivildienst)</li>
<li>die <strong>Abstammungsurkunden</strong> der drei betreffenden Personen</li>
</ul>
<p>Das ganze solltet ihr als Einschreiben verschicken! Falls eine Bescheinigung verloren gegangen ist kann sie bei der entsprechenden Behörde neu angefordert werden.</p>
<p>Für das schreiben könnt ihr gerne meine Vorlage verwenden:</p>
<p><a href="http://lotterfriends.net/wp-content/uploads/2010/10/antrag_auf_wehrdienstbefreiung.doc">Antrag auf Wehrdienstbefreiung</a></p>
]]></content:encoded>
			<wfw:commentRss>http://lotterfriends.net/index.php/2010/11/07/antrag-auf-wehrdienstbefreiung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Snippet/Javascript] divAusblenden – Animation</title>
		<link>http://lotterfriends.net/index.php/2010/11/07/snippetjavascript-divausblenden-animation/</link>
		<comments>http://lotterfriends.net/index.php/2010/11/07/snippetjavascript-divausblenden-animation/#comments</comments>
		<pubDate>Sun, 07 Nov 2010 14:59:35 +0000</pubDate>
		<dc:creator>lotterfriends</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Snippets]]></category>
		<category><![CDATA[animation]]></category>
		<category><![CDATA[dhtml]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[ohne Framework]]></category>
		<category><![CDATA[ohne jQuery]]></category>

		<guid isPermaLink="false">http://lotterfriends.net/?p=447</guid>
		<description><![CDATA[Hier ein kleines Beispiel wie &#8220;Animation&#8221; ohne ein Javascript Framework realisieren werden kann.
In diesem Fall wird ein Div nach 3 Sekunden immer kleiner und dann ausgeblendet.
Das ganze passiert rekursiv. 
]]></description>
			<content:encoded><![CDATA[<p>Hier ein kleines Beispiel wie &#8220;Animation&#8221; ohne ein Javascript Framework realisieren werden kann.<br />
In diesem Fall wird ein Div nach 3 Sekunden immer kleiner und dann ausgeblendet.<br />
Das ganze passiert rekursiv. </p>
<pre class="brush: jscript; title: ; notranslate">
// Meldung nach 3 Sekunden wieder ausblenden
var meldung = document.getElementById(&quot;meldung&quot;);
if (meldung) {
	window.setTimeout( function() { divAusblenden(&quot;meldung&quot;,meldung.offsetWidth-10,meldung.offsetHeight-10);}, 3000);
}
</pre>
<pre class="brush: jscript; title: ; notranslate">
// Meldungen langsam kleiner werden lassen und dann ausblenden
function divAusblenden(id, breite, hoehe) {
	var reentrant = 0;
	if( ! reentrant ) {
		reentrant = 1;
		var move = 0, element = document.getElementById(id);

		if(hoehe &gt; 0 ){ hoehe -= 1; move++; }
		if(breite &gt; 0 ){ breite -= 1; move++; }
		element.style.visibility = (breite &gt; 0 &amp;&amp; hoehe &gt; 0) ? 'visible' : 'hidden';

		if( move ) {
			element.style.height = hoehe + 'px';
			element.style.width = breite + 'px';
			if (hoehe &gt;= 1 &amp;&amp; hoehe &lt;=12) {
				element.style.fontSize = hoehe-1 + 'px';
			}
			window.setTimeout( function(){ divAusblenden(id,breite,hoehe); }, 30 );
		}
		reentrant = 0;
	}
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://lotterfriends.net/index.php/2010/11/07/snippetjavascript-divausblenden-animation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Developers Shame Day &#8211; Mein Beitrag</title>
		<link>http://lotterfriends.net/index.php/2010/11/03/developers-shame-day-mein-beitrag/</link>
		<comments>http://lotterfriends.net/index.php/2010/11/03/developers-shame-day-mein-beitrag/#comments</comments>
		<pubDate>Wed, 03 Nov 2010 21:00:16 +0000</pubDate>
		<dc:creator>lotterfriends</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[Programmieren]]></category>

		<guid isPermaLink="false">http://lotterfriends.net/?p=443</guid>
		<description><![CDATA[Dies ist mein Beitrag zum Developer Shame Day (DSD). Dieser Schnipsel kommt noch aus der der Zeit in der ich gerade mit PHP begonnen habe und ich jede Funktion googlen musst. Die Schnipsel stammen aus meinem Newssystem was irgendwie immer meinen aktuellen PHP-Wissenstand wiederspielte. Immer wenn  [...]]]></description>
			<content:encoded><![CDATA[<p>Dies ist mein Beitrag zum <a href="http://phphacker.net/2010/10/26/der-developers-shame-day/">Developer Shame Day</a> (DSD). Dieser Schnipsel kommt noch aus der der Zeit in der ich gerade mit PHP begonnen habe und ich jede Funktion googlen musst. Die Schnipsel stammen aus <a href="http://code.google.com/p/lfnews/">meinem Newssystem</a> was irgendwie immer meinen aktuellen PHP-Wissenstand wiederspielte. Immer wenn ich etwas neues gelernt habe, habe ich es dort umgesetzt und eingebaut. So wächst es noch heute und ein Ende ist nicht in Sicht <img src='http://lotterfriends.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
session_start();
if (isset ($_GET[logout])) {
	$logout = $_GET[logout];
	if ($logout == &quot;ja&quot;) {
		if (isset($_COOKIE[session_name()])) {
    		setcookie(session_name(), '', time()-42000, '/');
			echo (&quot;Erfolgreich Ausgelogt&lt;br /&gt;
				   &lt;a href='../'&gt;&amp;lt;-zu&amp;uuml;ck zur Startseite&lt;/a&gt;&quot;);
			session_unset();
			die();
			}
	}
}

$base_url = dirname(__FILE__);
if (file_exists($base_url.&quot;/news_config.php&quot;)) {
	include &quot;&quot;.$base_url.&quot;/news_config.php&quot;;
}

if (!isset ($_SESSION[name])) {
	$_SESSION[pass] = md5($_POST['passwort']);
	$_SESSION[name] = $_POST['user'];
}
if ($_SESSION[name] != $adminname){
	echo &quot;Falscher Benutzername&quot;;
	session_destroy();
} else {
	if ($_SESSION[pass] != $admin_password){
		echo &quot;Passwor falsch&quot;;
		session_destroy();
	} else {
		$recht= &quot;ja&quot;;
		include 'news_funktionen.php';
		news_speichern();
		news_loeschen();
		kommentare_loeschen();
?&gt;
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
&lt;title&gt;News Admin&lt;/title&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/pruefefelder.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/prototype.lite.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/moo.fx.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/moo.fx.pack.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
function init(){
	var stretchers = document.getElementsByClassName('box');
	var toggles = document.getElementsByClassName('tab');
	var myAccordion = new fx.Accordion(
		toggles, stretchers, {opacity: false, height: true, duration: 100}
	);
	//hash functions
	var found = false;
	toggles.each(function(h3, i){
		var div = Element.find(h3, 'nextSibling');
			if (window.location.href.indexOf(h3.title) &gt; 0) {
				myAccordion.showThisHideOpen(div);
				found = true;
			}
		});
		if (!found) myAccordion.showThisHideOpen(stretchers[0]);
}
&lt;/script&gt;
&lt;link href=&quot;css/newsadmin.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; /&gt;
&lt;/head&gt;

&lt;body&gt;

&lt;div id=&quot;wrapper&quot;&gt;
	&lt;div id=&quot;content&quot;&gt;
	&lt;h3 class=&quot;tab&quot; title=&quot;first&quot;&gt;&lt;div class=&quot;tabtxt&quot;&gt;&lt;a href=&quot;#&quot;&gt;zeigen&lt;/a&gt;&lt;/div&gt;&lt;/h3&gt;
   	&lt;div class=&quot;tab&quot;&gt;&lt;h3 class=&quot;tabtxt&quot; title=&quot;schreiben&quot;&gt;&lt;a href=&quot;#&quot;&gt;schreiben&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
	&lt;div class=&quot;tab&quot;&gt;&lt;h3 class=&quot;tabtxt&quot; title=&quot;loeschen&quot;&gt;&lt;a href=&quot;#&quot;&gt;l&amp;ouml;schen&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
	&lt;div class=&quot;tab&quot;&gt;&lt;h3 class=&quot;tabtxt&quot; title=&quot;Kommentare&quot;&gt;&lt;a href=&quot;#&quot;&gt;Kommentare&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;
   	&lt;h3 class=&quot;tabtxt&quot; title=&quot;Kommentare&quot;&gt;&lt;a id=&quot;logout&quot; href=&quot;?logout=ja&quot;&gt;Logout&lt;/a&gt;&lt;/h3&gt;
	&lt;div class=&quot;boxholder&quot;&gt;
		&lt;div class=&quot;box&quot;&gt;
			&lt;?php news_zeigen($a); ?&gt;
        &lt;/div&gt;
		&lt;div class=&quot;box&quot;&gt;
			&lt;?php news_schreiben() ?&gt;
		&lt;/div&gt;

		&lt;div class=&quot;box&quot;&gt;
			&lt;?php news_loeschen_anzeigen()  ?&gt;
		&lt;/div&gt;

		&lt;div class=&quot;box&quot;&gt;
	        &lt;?php
			news_zeigen_admin($a);
			?&gt;
            &lt;iframe name=&quot;komadmin&quot; src=&quot;news_admin_kommentare.php?&lt;?php echo SID ?&gt;&quot; height=&quot;300&quot; width=&quot;590&quot;&gt;&lt;/iframe&gt;
		&lt;/div&gt;
	&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
	Element.cleanWhitespace('content');
	init();
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
&lt;?
	}
}
?&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://lotterfriends.net/index.php/2010/11/03/developers-shame-day-mein-beitrag/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>[Snippet/Javascript] sendeAnfrage &#8211; Ajax leicht gemacht</title>
		<link>http://lotterfriends.net/index.php/2010/10/22/425/</link>
		<comments>http://lotterfriends.net/index.php/2010/10/22/425/#comments</comments>
		<pubDate>Fri, 22 Oct 2010 10:06:25 +0000</pubDate>
		<dc:creator>lotterfriends</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Snippets]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[get]]></category>
		<category><![CDATA[HTTPRequestObject]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[post]]></category>
		<category><![CDATA[snippet]]></category>

		<guid isPermaLink="false">http://lotterfriends.net/?p=425</guid>
		<description><![CDATA[Hier ist eine Beispielhafte, minimale Implementierung des HTTPRequestObjects.
Die Funktion kann schnell eingebunden werden um Inhalte nachzuladen oder
allgemein Ajax zu ermöglichen. Zusammen mit meiner Funktion sammleDaten()
steht dem Eisatz von Ajax nichts mehr im Weg und hat sich in Zahlreichen  [...]]]></description>
			<content:encoded><![CDATA[<p>Hier ist eine Beispielhafte, minimale Implementierung des HTTPRequestObjects.<br />
Die Funktion kann schnell eingebunden werden um Inhalte nachzuladen oder<br />
allgemein Ajax zu ermöglichen. Zusammen mit <a href="http://lotterfriends.net/?p=422">meiner Funktion sammleDaten()</a><br />
steht dem Eisatz von Ajax nichts mehr im Weg und hat sich in Zahlreichen Projekten<br />
bewert.</p>
<pre class="brush: jscript; title: ; notranslate">
/**
 *
 * Sendet eine Ajax-Anfrage an einen Server
 *
 * @param  methode String POST oder GET / Wird etwas anderes übergeben wird GET verwendet
 * @param  zielUrl String An Was die Anfrage geschickt werden soll (z.B. ein Skript auf dem Server)
 * @param  verarbeiter CallBack Function JS-Funktion die die Rückgabe
 *         des Servers verarbeitet und die Rückgabe als Parameter bekommt
 *         (optional)
 * @param  parameter String / Array Parameter die an den Server geschickt
 *         werden sollen. Entweder einer als String Bsp.: &quot;kekse=true&quot; oder
 *         mehrere als Array Bsp.: [&quot;kekse=true&quot;,&quot;kuchen=false&quot;]
 *         (optional)
 * @return Rückgabe des verarbeiters, falls kein Verarbeiter gesetzt ist true
 *         bei Erfolg und false bei Fehlschlag
 *
 */
function sendeAnfrage(methode,zielUrl,parameter,verarbeiter) {
  if (parameter &amp;&amp; parameter.constructor == Function) {
    verarbeiter = parameter;
    parameter = undefined;
  }

  methode = methode.toUpperCase();
  if (methode != &quot;POST&quot; &amp;&amp; methode != &quot;GET&quot;) methode = &quot;GET&quot;;

  var request = null;
  if (window.XMLHttpRequest) request = new window.XMLHttpRequest();
  if (window.ActiveXObject) request = new window.ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);
  if (request == null) return false;

  request.onreadystatechange = function() {
    if (request.readyState == 4) {
      var rueckgabe = request.responseText;
      if (request.status == 200) {
        if (verarbeiter != null) return verarbeiter(rueckgabe);
        return true;
      } return false;
    }
  }

  var uebertraeger = null;
  if(parameter!==undefined) {
    if (parameter.constructor == Array) {
      for (var i in parameter)  {
        if (i &gt; 0) uebertraeger = uebertraeger + parameter[i] + &quot;&amp;&quot;;
        else uebertraeger = parameter[i] + &quot;&amp;&quot;;
      }
    } else uebertraeger = parameter;
  }

  if (methode == &quot;GET&quot; &amp;&amp; uebertraeger != null) zielUrl = zielUrl + &quot;?&quot; + uebertraeger;
  request.open(methode, zielUrl, true);
  if (methode == &quot;POST&quot;) request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  request.send(uebertraeger);

}
</pre>
<p>Beispiel für die Verwendung:</p>
<pre class="brush: jscript; title: ; notranslate">

// Initialisieren
var initialisirenFunktionen = [];
onload = function() {
  for (var i in initialisirenFunktionen) initialisirenFunktionen[i]();
}

// Erstelle LoadBereich
initialisirenFunktionen.push(function () {
    var loadContent = document.createElement(&quot;DIV&quot;);
    loadContent.id = &quot;loadContent&quot;;
    document.body.appendChild(loadContent);
});

// Reichere AjaxButton um Anfrage-Event an
initialisirenFunktionen.push(function () {
    var sendenButton = document.getElementById(&quot;senden&quot;);
    sendenButton.onclick = function () {
      sendeAnfrage(&quot;POST&quot;,&quot;MeinServlet&quot;,sammleDaten(document.meinForm),schreibeResponseInLoadBox);
    };
});

// CallbackFunktion für die Ajax-Anfrage (Ergebniss verarbeiten)
function schreibeResponseInLoadBox(r) {
  var loadContent = document.getElementById(&quot;loadContent&quot;);
  loadContent.innerHTML = r;
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://lotterfriends.net/index.php/2010/10/22/425/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Snippet/Javascript] sammleDaten</title>
		<link>http://lotterfriends.net/index.php/2010/10/22/snippetjavascript-sammledaten/</link>
		<comments>http://lotterfriends.net/index.php/2010/10/22/snippetjavascript-sammledaten/#comments</comments>
		<pubDate>Fri, 22 Oct 2010 11:49:01 +0000</pubDate>
		<dc:creator>lotterfriends</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Snippets]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[form]]></category>
		<category><![CDATA[Formular]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[snippet]]></category>

		<guid isPermaLink="false">http://lotterfriends.net/?p=422</guid>
		<description><![CDATA[Wenn man ein Formular mit Ajax abschicken will kommt man schnell in die Situation,
dass man sich die Daten oder einen Datensatz selbst zusammenbauen muss.
Mit jQuery ist das kein Problem, ohne sieht die Sache da aber schon ganz anders aus.
Meine Funktion geht Rekursive das übergebene HTMLElement  [...]]]></description>
			<content:encoded><![CDATA[<p>Wenn man ein Formular mit Ajax abschicken will kommt man schnell in die Situation,<br />
dass man sich die Daten oder einen Datensatz selbst zusammenbauen muss.<br />
Mit jQuery ist das kein Problem, ohne sieht die Sache da aber schon ganz anders aus.</p>
<p>Meine Funktion geht Rekursive das übergebene HTMLElement durch und guckt ob es ein<br />
Typisches Formular Element ist (Textarea, Input und Selextbox). Ist das der Fall wird der<br />
Value mit dem Namen in einem Array gespeichert und am Ende zurückgegeben.</p>
<pre class="brush: jscript; title: ; notranslate">
/**
*
* Liefert alle Daten aus einem Formular in einem Array
*
* @param formular HTMLElement Formular in dem nach Daten gesucht werden soll
* @return Array Im Format [&quot;key=value&quot;,&quot;key=value&quot;]
*
*/
function sammleDaten(formular) {
	var daten = [];
	var ue = formular.childNodes;
	for (var i in ue) {
		if (ue[i].tagName &amp;&amp; ue[i].name &amp;&amp;
		(ue[i].tagName == &quot;INPUT&quot; || ue[i].tagName == &quot;TEXTAREA&quot;
		|| ue[i].tagName == &quot;SELECT&quot;)){
			var inhalt = null;
			if (ue[i].value) {
        		inhalt = ue[i].value;
    		}
			daten.push(ue[i].name+&quot;=&quot;+inhalt);
		}
		daten = daten.concat(sammleDaten(ue[i]));
	}
	return daten;
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://lotterfriends.net/index.php/2010/10/22/snippetjavascript-sammledaten/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>[Snippet/Javascript] toggleClass ohne jQuery</title>
		<link>http://lotterfriends.net/index.php/2010/10/11/snippetjavascript-toggleclass/</link>
		<comments>http://lotterfriends.net/index.php/2010/10/11/snippetjavascript-toggleclass/#comments</comments>
		<pubDate>Mon, 11 Oct 2010 08:31:52 +0000</pubDate>
		<dc:creator>lotterfriends</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Snippets]]></category>
		<category><![CDATA[class switch]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[ohne jQuery]]></category>
		<category><![CDATA[snippet]]></category>
		<category><![CDATA[toggleClass]]></category>

		<guid isPermaLink="false">http://lotterfriends.net/?p=415</guid>
		<description><![CDATA[Ich habe vor kurzem eine Javascript Funktion gebracht um schnell CSS KLassen zu Tauschen. In jQuery gibt es dafür die Funktion &#8220;toggleClass&#8221;. Leider stand mir in dieser Situation das Framework nicht zur Verfügung also habe ich mir die Funktion kurzerhand selber geschrieben.
Das Problem bei der  [...]]]></description>
			<content:encoded><![CDATA[<p>Ich habe vor kurzem eine Javascript Funktion gebracht um schnell CSS KLassen zu Tauschen. In jQuery gibt es dafür die Funktion &#8220;toggleClass&#8221;. Leider stand mir in dieser Situation das Framework nicht zur Verfügung also habe ich mir die Funktion kurzerhand selber geschrieben.</p>
<p>Das Problem bei der Sache ist das man nicht einfach den Attribut Classname ersetzen darf da das HTML-Element vielleicht noch andere Klassen besitzt. In meiner Funktion können entweder zwei oder eine CSS-Klasse übergeben werden.<br />
Bei zwei werden sie, falls vorhanden, getauscht, wenn noch keine von beiden vorhanden ist, wird die erste angefügt.<br />
Bei dem Fall das nur eine Klasse übergeben wurde, wird zuerst geguckt ob die diese schon gesetzt ist. Falls ja wird sie mit nichts ersetzt andernfalls wird sie angefügt. Meine Funtion müsste sich also genauso wie das <a href="http://api.jquery.com/toggleClass/" target="_blank">jQuery Pendant </a>verhalten.</p>
<pre class="brush: jscript; title: ; notranslate">
/**
*
* Wechselt die CSS-Klasse eines übergebenen Elements
*
* @param HTMLElement Element dessen Klasse gewechselt wird
* @param cls1 Klasse die gesetzt oder weg gemacht wird
* @param cls2 Klasse mit der getauscht wird. Falls dieser Parameter
*             nicht gesetzt ist wird cls1 durch nichts ersetzt
*/
function toggleClass(elm,cls1,cls2) {
    if (!cls2) cls2 = &quot;&quot;;
    elm.ersetzeKlasse = function(haystack,needle) {
        var re = new RegExp(haystack,&quot;g&quot;);
        this.className = this.className.replace(haystack,needle);
    }

    if (elm.className.indexOf(cls1) &gt; -1) elm.ersetzeKlasse(cls1,cls2);
    else if (elm.className.indexOf(cls2) &gt; -1) elm.ersetzeKlasse(cls2,cls1);
    else elm.className += &quot; &quot;+cls1;
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://lotterfriends.net/index.php/2010/10/11/snippetjavascript-toggleclass/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

