<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Kau-Boys blog</title>
	
	<link>http://kau-boys.de</link>
	<description>Webdevelopment and more</description>
	<lastBuildDate>Tue, 09 Mar 2010 21:43:26 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Kau-boysBlog" /><feedburner:info uri="kau-boysblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>Kau-boysBlog</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Assoziatives Array als HTML Tabelle ausgeben</title>
		<link>http://feedproxy.google.com/~r/Kau-boysBlog/~3/sqPTHC6_qPU/assoziatives-array-als-html-tabelle-ausgeben</link>
		<comments>http://kau-boys.de/webentwicklung/assoziatives-array-als-html-tabelle-ausgeben#comments</comments>
		<pubDate>Tue, 09 Mar 2010 21:39:06 +0000</pubDate>
		<dc:creator>Bernhard</dc:creator>
				<category><![CDATA[Webentwicklung]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Snippet]]></category>

		<guid isPermaLink="false">http://kau-boys.de/?p=803</guid>
		<description><![CDATA[Sehr h&#228;ufig wird gefordert ein assoziatives Array als HTML Tabelle auszugeben. Ich nutze hier sehr oft die implode() Funktion, um dabei mit m&#246;glichst wenig Quellcode zu dem Gew&#252;nschten Ergebnis zu kommen. Da ich meine L&#246;sung wirklich sehr sch&#246;n und genial einfach finde, wollte ich euch kurz die Funktion pr&#228;sentieren. Als auszugebendes Array nehmen wir das [...]]]></description>
			<content:encoded><![CDATA[<p>Sehr h&#228;ufig wird gefordert ein assoziatives Array als HTML Tabelle auszugeben. Ich nutze hier sehr oft die <a href="http://de.php.net/manual/en/function.implode.php">implode() Funktion</a>, um dabei mit m&#246;glichst wenig Quellcode zu dem Gew&#252;nschten Ergebnis zu kommen. Da ich meine L&#246;sung wirklich sehr sch&#246;n und genial einfach finde, wollte ich euch kurz die Funktion pr&#228;sentieren. Als auszugebendes Array nehmen wir das MySQL-Debugging Array aus meinem vorherigen Artikel <a href="http://kau-boys.de/webentwicklung/mysql-unter-php-debuggen-mit-einer-eigenen-mysql-klasse">MySQL unter PHP debuggen mit einer eigenen MySQL Klasse</a>.</p>
<pre class="brush: php;">
function array_to_table($a){
	$t='&lt;table&gt;';
	$t.='&lt;tr&gt;&lt;th&gt;'.implode('&lt;/th&gt;&lt;th&gt;', array_keys($a[0])).'&lt;/th&gt;&lt;/tr&gt;';
	foreach($a as $row){
		$t.= '&lt;tr&gt;&lt;td&gt;'.implode('&lt;/td&gt;&lt;td&gt;', $row).'&lt;/td&gt;&lt;/tr&gt;';
	}
	return $t.='&lt;/table&gt;';
}

// Ausgabe der Tabelle
echo array_to_table($mysqli-&gt;queries);
</pre>
<p><span id="more-803"></span></p>
<p>In Zeile 3 werden die Schl&#252;ssel des assoziativen Array f&#252;r die &#220;berschriften der Spalten genutzt. Wir &#246;ffnen hier eine Zeile und eine Spalte und f&#252;gen dann mit Hilfe der implode() Funktion alle Schl&#252;ssel in diese Zeile ein. Die &#8220;Glue&#8221; f&#252;r die implode() Funktion ist hierbei ein schlie&#223;endes Tag f&#252;r die Spalte und ein weiteres &#246;ffnendes. Am Ende der Zeile schlie&#223;en wir noch die letzte Spalte und die Zeile. Die gleiche elegante Anwendung der implode() Funktion verwenden wir auch bei den einzelnen Spalten mit den Werten. Hier in einer foreach Schleife.</p>
<p>Mit dieser Funktion kann jedes assoziative Array sehr elegant ausgegeben werden. Dabei l&#228;sst sich die Funktion trefflich erweitern. So k&#246;nnte z.B. in einem Parameter ein Array mit Schl&#252;sselnamen &#252;bergeben werden, wenn die Schl&#252;ssel des Assoziativen Arrays nicht passend f&#252;r die Tabelle sind. Oder es k&#246;nnte jeder Zeile eine alternierende &#8220;gerade&#8221; und &#8220;ungerade&#8221; Klasse mitgegeben werden. Oder aber man vergibt Klassen um eine der vielen JavaScript Sortierungen auf die Tabelle anwenden zu k&#246;nnen.</p>
<p>Wir ihr also sehen k&#246;nnt ihr eure Fantasie bei der Erweiterbarkeit freien Lauf lassen. Ich vergebe meistens die Klassen f&#252;r Sortierung einer Tabelle mit der <a href="http://www.millstream.com.au/view/code/tablekit/">Tablekit Sortierung</a>.</p>
<p>Ich hoffe, dass euch die Funktion bei eurer t&#228;glichen Arbeit helfen kann. Ich liebe die implode() Funktion, da man mit ihr sehr elegant PHP Arrays in Strings umwandeln kann. Ich verwende sie auch h&#228;ufig beim Erstellen von SQL Statements in Verbindung mit dem <a href="http://dev.mysql.com/doc/refman/5.1/de/comparison-operators.html#id2785292">IN() Operator</a>.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/3FjSmYHFKQCC3mYYOAEqhYWmcLM/0/da"><img src="http://feedads.g.doubleclick.net/~a/3FjSmYHFKQCC3mYYOAEqhYWmcLM/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/3FjSmYHFKQCC3mYYOAEqhYWmcLM/1/da"><img src="http://feedads.g.doubleclick.net/~a/3FjSmYHFKQCC3mYYOAEqhYWmcLM/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/Kau-boysBlog/~4/sqPTHC6_qPU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kau-boys.de/webentwicklung/assoziatives-array-als-html-tabelle-ausgeben/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kau-boys.de/webentwicklung/assoziatives-array-als-html-tabelle-ausgeben</feedburner:origLink></item>
		<item>
		<title>MySQL unter PHP debuggen mit einer eigenen MySQL Klasse</title>
		<link>http://feedproxy.google.com/~r/Kau-boysBlog/~3/eIpQeqgfg1Q/mysql-unter-php-debuggen-mit-einer-eigenen-mysql-klasse</link>
		<comments>http://kau-boys.de/webentwicklung/mysql-unter-php-debuggen-mit-einer-eigenen-mysql-klasse#comments</comments>
		<pubDate>Thu, 04 Mar 2010 22:41:07 +0000</pubDate>
		<dc:creator>Bernhard</dc:creator>
				<category><![CDATA[Webentwicklung]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://kau-boys.de/?p=794</guid>
		<description><![CDATA[Bei einem meiner Projekte kam es zu ungew&#246;hnlich langen Ladezeiten eines Formulars. Da hier allerdings auch sehr viele Datenbankabfragen ausgef&#252;hrt werden m&#252;ssen und dabei auch noch die Werte per COUNT() gez&#228;hlt werden wunderten mich die Zeiten nicht wirklich.
Nun wollte ich nat&#252;rlich wissen, welche Abfrage dabei besonders viel Zeit in Anspruch nimmt um dann gezielt optimieren [...]]]></description>
			<content:encoded><![CDATA[<p>Bei einem meiner Projekte kam es zu ungew&#246;hnlich langen Ladezeiten eines Formulars. Da hier allerdings auch sehr viele Datenbankabfragen ausgef&#252;hrt werden m&#252;ssen und dabei auch noch die Werte per <a href="http://dev.mysql.com/doc/refman/5.1/en/group-by-functions.html#function_count">COUNT()</a> gez&#228;hlt werden wunderten mich die Zeiten nicht wirklich.</p>
<p>Nun wollte ich nat&#252;rlich wissen, welche Abfrage dabei besonders viel Zeit in Anspruch nimmt um dann gezielt optimieren zu k&#246;nnen. Ich setze in dem Projekt auf die <a href="http://de.php.net/manual/en/book.mysqli.php">MySQLi Klasse</a> von PHP. Da ich hierbei die Klasse objektorientiert nutze, war es sehr einfach m&#246;glich diese zu erweiterten. Eine M&#246;glichkeit w&#228;re es nat&#252;rlich gewesen eine eigene Funktion zu schreiben, aber in diesem Fall h&#228;tte ich auch alle Skript anpassen m&#252;ssen, in denen ich eine Query ausf&#252;hre. Daher habe ich mich dazu entschlossen einfach die <a href="http://de.php.net/manual/en/mysqli.query.php">query() Funktion</a> von MySQLi zu &#252;berschreiben. Hier ein stark vereinfachtes Beispiel, wie so etwas aussehen k&#246;nnte:</p>
<pre class="brush: php;">
&lt;?php

class mysqliDebugger extends mysqli {

	public $queries = array();
	public $queries_time = 0;

	function __construct($host, $user, $pass, $name, $port, $sock){
		parent::__construct($host, $user, $pass, $name, $port, $sock);
	}

	function __destruct(){
		parent::__destruct();
	}

	function query($query){
		$start = microtime(true);

		if(!$result = parent::query($query)){
				$error_message = $this-&gt;error;
		}

		$end = microtime(true);

		$this-&gt;queries[] = array(
			'number' =&gt; count($this-&gt;queries),
			'query' =&gt; $query,
			'error' =&gt; $error_message,
			'time' =&gt; $end - $start
		);

		$this-&gt;queries_time += $end - $start;

		return $result;
	}
}

$mysqli = new mysqliDebugger('host', 'user', 'pass', 'name');
if($result = $mysqli-&gt;query('SELECT * FROM tablename')){
	while($row = $result-&gt;fetch_assoc()){
		// Verarbeiten der Ergebniszeilen
	}
}

if($result = $mysqli-&gt;query('SELECT * FROM tablename2')){
	while($row = $result-&gt;fetch_assoc()){
		// Verarbeiten der Ergebniszeilen
	}
}

?&gt;
</pre>
<p>Sehen wir uns die wichtigsten Zeilen des Quellcodes an. Die Zeilen 8-10 zeigen den Konstruktor unserer neuen Klasse, die den Konstruktor der geerbten Klasse MySQLi aufruft. In den Zeilen 16-36 &#252;berschreiben wir die query() Funktion der MySQLi Klasse mit unserer Debugging-Klasse. Dort wird zuerst einmal zur Protokollierung der Ausf&#252;hrungszeit der Startzeitpunkt mit Hilfe der <a href="http://de.php.net/manual/en/function.microtime.php">microtime() Funktion</a> ermittelt. Anschlie&#223;end wird der Query mit dem Aufruf <code>parent::query($query)</code> an die query() Funktion der MySQLi Klasse &#252;bergeben. Einen eventuell auftretenden Fehler speichern wir dabei in einer Variablen ab.</p>
<p>In Zeile 23 speichern wir die Endzeit des Query. Anschlie&#223;end speichern wir alle Werte, die wir zur sp&#228;teren Auswertung ben&#246;tigen in einem Array gespeichert. Zus&#228;tzlich summieren wir noch alle Zeiten auf, um sp&#228;ter die Gesamtdauer aller Statements bestimmen zu k&#246;nnen. Die ab Zeile 38 wird eine einfache Instanziierung und Nutzung der Klasse aufgezeigt, wie man sie auch von MySQLi kennt. Wer also in seinen Skripten schon MySQLi verwendet kann einfach beim Instanziieren der Klasse die neue Debugging-Klasse verwenden und muss keine weiteren Zeilen im Quellcode &#228;ndern. Ich empfehle eine kleine Bedingung zu verwenden, die feststellt, ob der Debugging-Modus aktiv ist und nur dann die Debugging-Klasse zu verwenden, wenn sie auch ben&#246;tigt wird. Das spart im produktiven Einsatz etwas Rechenzeit. Eine m&#246;gliche Bedingung k&#246;nnte wie folgt aussehen:</p>
<pre class="brush: php; gutter: false;">
if($debug){
	$mysqli = new mysqliDebugger('host', 'user', 'pass', 'name');
} else {
	$mysqli = new mysqli('host', 'user', 'pass', 'name');
}
</pre>
<p>Anstelle der <code>$debug</code> Variablen k&#246;nntet ihr auch einen GET Parameter oder einen Session Parameter verwenden. Ich rate aber dringend davon ab einen einfach zu erratenden GET Parameter zu verwenden, da in solchen F&#228;llen eure SQL-Statements f&#252;r Unbefugte sichtbar werden k&#246;nnten, was unter Umst&#228;nden die Sicherheit eueres Systems gef&#228;hrden k&#246;nnte.</p>
<p>Nachdem wir die Daten gesammelt haben m&#246;chten wir sie nat&#252;rlich auch ausgeben. Das solltet ihr auch wieder die vorherige Bedingung verwenden. Dazu erstellen wir einfach eine Tabelle, die die gesammelten Daten enth&#228;lt:</p>
<pre class="brush: xml;">
&lt;table style=&quot;border: 1px solid #000;&quot; rules=&quot;all&quot;&gt;
	&lt;caption&gt;Gesamtdauer: &lt;?= $mysqli-&gt;queries_time ?&gt;&lt;/caption&gt;
	&lt;tr&gt;
		&lt;th&gt;Anzahl&lt;/th&gt;
		&lt;th&gt;Query&lt;/th&gt;
		&lt;th&gt;Fehler&lt;/th&gt;
		&lt;th&gt;Zeit&lt;/th&gt;
	&lt;/tr&gt;
&lt;? foreach($mysqli-&gt;queries as $query) : ?&gt;
	&lt;tr&gt;
		&lt;td&gt;&lt;?= $query['number'] ?&gt;&lt;/td&gt;
		&lt;td&gt;&lt;?= $query['query'] ?&gt;&lt;/td&gt;
		&lt;td&gt;&lt;?= $query['error'] ?&gt;&lt;/td&gt;
		&lt;td&gt;&lt;?= $query['time'] ?&gt;&lt;/td&gt;
	&lt;/tr&gt;
&lt;? endforeach ?&gt;
&lt;/table&gt;
</pre>
<p>Nehmen wir an, wir die Tabelle aus dem ersten Statement ist in der Datenbank nicht vorhanden. In diesem Fall w&#252;rden wir einen SQL-Fehler erhalten. In der Tabelle k&#246;nnen wir dann direkt den Fehler ermitteln und entsprechend das Statement korrigieren. Auch hier wird das Statement gespeichert und die Zeit gemessen.</p>
<table style="color: rgb(185, 189, 182); background-color: rgb(27, 36, 38); width: 100%; padding: 5px; border: 1px solid #000;" rules="all">
<caption style="background-color: rgb(27, 36, 38);">Gesamtdauer: 0.0025820732116699</caption>
<tr>
<th>Anzahl</th>
<th>Query</th>
<th>Fehler</th>
<th>Zeit</th>
</tr>
<tr>
<td>0</td>
<td>SELECT * FROM tablename</td>
<td>Table &#8216;name.tablename&#8217; doesn&#8217;t exist</td>
<td>0.00076198577880859</td>
</tr>
<tr>
<td>1</td>
<td>SELECT * FROM tablename2</td>
<td></td>
<td>0.0018200874328613</td>
</tr>
</table>
<p>Ihr habt mit dieser kleinen Beispiel-Klasse einen sehr einfachen Debugger zur Hand, mit dem ihr sehr schnell die langsamen Statements in eurem System finden k&#246;nnt. Ihr k&#246;nnt die Klasse nat&#252;rlich auch noch nach euren W&#252;nschen erweitern und auch andere Funktionen von MySQLi &#252;berschreiben. Wenn ihr, so wie ich, zentral an einer Stelle die Datenbankverbindung erzeugt k&#246;nnt ihr durch die Bedingung aus dem zweiten Quellcode eure gesamte Applikation debuggen.</p>
<p>Ich habe damit in meinem Projekt schon zwei &#252;berfl&#252;ssige Statements finden k&#246;nnen und einige andere Statements noch weiter optimieren k&#246;nnen. Ich hoffe, dass euch der Debugger auch bei eurer t&#228;glichen Arbeit unterst&#252;tzen kann. &#220;ber Anregungen und Kommentare Wrede ich mich wie immer freuen.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/UMnJEVU1ux67ga6fNhwFp7C2F0o/0/da"><img src="http://feedads.g.doubleclick.net/~a/UMnJEVU1ux67ga6fNhwFp7C2F0o/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/UMnJEVU1ux67ga6fNhwFp7C2F0o/1/da"><img src="http://feedads.g.doubleclick.net/~a/UMnJEVU1ux67ga6fNhwFp7C2F0o/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/Kau-boysBlog/~4/eIpQeqgfg1Q" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kau-boys.de/webentwicklung/mysql-unter-php-debuggen-mit-einer-eigenen-mysql-klasse/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://kau-boys.de/webentwicklung/mysql-unter-php-debuggen-mit-einer-eigenen-mysql-klasse</feedburner:origLink></item>
		<item>
		<title>Das Bermudadreieck des Internet Explorer – Oder: Wo zum Teufel ist mein Ordner hin?</title>
		<link>http://feedproxy.google.com/~r/Kau-boysBlog/~3/_dkHNFbq3SU/das-bermudadreieck-des-internet-explorer-oder-wo-zum-teufel-ist-mein-ordner-hin</link>
		<comments>http://kau-boys.de/webentwicklung/das-bermudadreieck-des-internet-explorer-oder-wo-zum-teufel-ist-mein-ordner-hin#comments</comments>
		<pubDate>Wed, 03 Mar 2010 17:10:12 +0000</pubDate>
		<dc:creator>Bernhard</dc:creator>
				<category><![CDATA[Webentwicklung]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://kau-boys.de/?p=790</guid>
		<description><![CDATA[Heute bin ich mal wieder auf ein sehr faszinierendes Problem mit dem Internet Explorer gesto&#223;en. Meine erste Vermutung war mal wieder ein Programmierfehler im vielgeliebten IE6, aber der Fehler trat auch im Internet Explorer 7 auf.
Ich nutze in einem Projekt absolute Pfade in allen Dateinamen, Links und Formularen. Nun hatte ich aber im einem Formular [...]]]></description>
			<content:encoded><![CDATA[<p>Heute bin ich mal wieder auf ein sehr faszinierendes Problem mit dem Internet Explorer gesto&#223;en. Meine erste Vermutung war mal wieder ein Programmierfehler im vielgeliebten IE6, aber der Fehler trat auch im Internet Explorer 7 auf.</p>
<p>Ich nutze in einem Projekt absolute Pfade in allen Dateinamen, Links und Formularen. Nun hatte ich aber im einem Formular dummerweise das Gleichheitszeichen nach dem Short Open Tag in PHP vergessen. Mein Formular sah also in verk&#252;rzter Form wie folgt aus: </p>
<pre class="brush: xml;">
&lt;form action=&quot;&lt;? ABSOLUTER_PFAD ?&gt;form.php&quot;&gt;
...
&lt;/form&gt;
</pre>
<p><span id="more-790"></span></p>
<p>Soweit so gut, aber im Grund durfte hierdurch kein Problem entstanden sein. Der absolute Pfad enthielt eine Angabe in der Form <code>http:/www.beispiel.de/formularordner</code>. Da nun dieser Pfad nicht zur Verf&#252;gung stand enthielt das <code>action</code> Attribut des Formulars nur den Wert <code>form.php</code>.</p>
<p>Das Formular wurde &#252;ber einen Link aufgerufen und somit befand sich der Nutzer innerhalb des &#8220;formularordner&#8221;. Wenn nun also der Pfad relativ angegeben wird, m&#252;sste das Formular in genau diesem Ordner gesucht werden. Einige Nutzer bekamen aber eine sch&#246;ne 404 Fehlermeldung. Da mir einer dieser Nutzer einen Screenshot des Dilemmas geschickt hat konnte ich feststellen, dass der Browser versuchte den Pfad <code>http./www.beispiel.de/form.php</code> zu &#246;ffnen. Hier war aber nat&#252;rlich kein Formular zu finden.</p>
<p>Ich konnte den Fehler dann beheben, indem ich das Gleichheitszeichen wieder an seine korrekte Stelle eingef&#252;gt habe. Dadurch kam es nicht mehr zu den falschen Aufrufen. Der Vollst&#228;ndigkeit halber hier noch der korrekte Quellcode:</p>
<pre class="brush: xml;">
&lt;form action=&quot;&lt;?= ABSOLUTER_PFAD ?&gt;form.php&quot;&gt;
...
&lt;/form&gt;
</pre>
<p>Was aber genau beim Internet Explorer dazu gef&#252;hrt hat, dass er den Ordner einfach &#8220;verschluckt&#8221; hat konnte ich bisher noch nicht feststellen. Mir ist es auch bisher nicht gelungen den Fehler auf einem meiner Rechner zu reproduzieren. Es liegt auch nicht an einem grunds&#228;tzlichen Problem bei einem der Nutzer, denn nachdem sie den Browser neu ge&#246;ffnet hatten funktionierte pl&#246;tzlich alles wieder wie gewohnt.</p>
<p>Das erstaunlichste ist aber, dass dieser Fehler schon vor 13 Monaten im Skript vorhanden ist und erst jetzt von drei Nutzern entdeckt wurde, obwohl das betreffende Formular wohl hunderte Male am Tag genutzt wird.</p>
<p>Sollte jemand von euch schon einmal dieses Problem selbst erlebt haben und vielleicht sogar eine Erkl&#228;rung oder L&#246;sung daf&#252;r kennen w&#252;rde es mich wirklich brennend interessieren. Mit dem absoluten Link funktioniert es aber soweit wieder und ich hoffe, dass der Internet Explorer nun den Ordner beibeh&#228;lt.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/Yj3svWywpPHouccxwJ-itafyZWU/0/da"><img src="http://feedads.g.doubleclick.net/~a/Yj3svWywpPHouccxwJ-itafyZWU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/Yj3svWywpPHouccxwJ-itafyZWU/1/da"><img src="http://feedads.g.doubleclick.net/~a/Yj3svWywpPHouccxwJ-itafyZWU/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/Kau-boysBlog/~4/_dkHNFbq3SU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kau-boys.de/webentwicklung/das-bermudadreieck-des-internet-explorer-oder-wo-zum-teufel-ist-mein-ordner-hin/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kau-boys.de/webentwicklung/das-bermudadreieck-des-internet-explorer-oder-wo-zum-teufel-ist-mein-ordner-hin</feedburner:origLink></item>
		<item>
		<title>Tutorial: Drag-and-Drop mit Scriptaculous – Teil 1: Draggable</title>
		<link>http://feedproxy.google.com/~r/Kau-boysBlog/~3/trtxPfLIFDk/tutorial-drag-and-drop-mit-scriptaculous-teil-1-draggable</link>
		<comments>http://kau-boys.de/webentwicklung/tutorial-drag-and-drop-mit-scriptaculous-teil-1-draggable#comments</comments>
		<pubDate>Tue, 02 Mar 2010 16:38:32 +0000</pubDate>
		<dc:creator>Bernhard</dc:creator>
				<category><![CDATA[Webentwicklung]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Prototype]]></category>
		<category><![CDATA[Scriptaculous]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://kau-boys.de/?p=785</guid>
		<description><![CDATA[Heute m&#246;chte ich mein angek&#252;ndigtes Tutorial &#252;ber Drag-and-Drop starten. Das Ziel dieses Tutorials ist der Nachbau einer dynamischen Newsseite, wie ich sie in meinen Artikel &#214;ffentlich-rechtlich und vorbildhaft – So muss eine Web 2.0 zu Olympia aussehen vorgestellt habe. Da eine solche Seite mit vielen verschiedenen Techniken zusammengesetzt ist, werden wir immer kleine Teile auf [...]]]></description>
			<content:encoded><![CDATA[<p>Heute m&#246;chte ich mein angek&#252;ndigtes Tutorial &#252;ber Drag-and-Drop starten. Das Ziel dieses Tutorials ist der Nachbau einer dynamischen Newsseite, wie ich sie in meinen Artikel <a href="http://kau-boys.de/webentwicklung/oeffentlich-rechtlich-und-vorbildhaft-so-muss-eine-web-2-0-zu-olympia-aussehen">&#214;ffentlich-rechtlich und vorbildhaft – So muss eine Web 2.0 zu Olympia aussehen</a> vorgestellt habe. Da eine solche Seite mit vielen verschiedenen Techniken zusammengesetzt ist, werden wir immer kleine Teile auf dem Schritt zur fertigen Seite nachvollziehen.</p>
<p>Im ersten Teil geht es um die Grundlage einer Seite mit Drag-and-Drop. Wir verwenden f&#252;r dieses Tutorial die Drag-and-Drop Funktionalit&#228;t von <a href="http://script.aculo.us">Scriptaculous</a>, welches eine Erweiterung des <a href="http://www.prototypejs.org">Prototype Frameworks</a> ist. Um die hier gezeigten Funktionen selbst nachprogrammieren zu k&#246;nnen ben&#246;tigt ihr also zuerst einmal die beiden Frameworks.</p>
<p><span id="more-785"></span></p>
<h2>Der Quellcode f&#252;r dieses Beispiel</h2>
<p>Beginnen wir also mit dem Beispiel. Zuerst einmal ben&#246;tigen wir etwas HTML in dem wir ein Element platzieren, welches wir dann aufnehmen m&#246;chten. F&#252;r das Element nehme ich exemplarisch ein DIV, aber ihr k&#246;nnt auch z.B. ein Bild verwenden:</p>
<pre class="brush: xml;">
&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; dir=&quot;ltr&quot; lang=&quot;de-DE&quot;&gt;
&lt;head&gt;
	&lt;head&gt;
		&lt;title&gt;Drag-and-Drop Teil 1&lt;/title&gt;
		&lt;script type=&quot;text/javascript&quot; src=&quot;prototype.js&quot;&gt;&lt;/script&gt;
		&lt;script type=&quot;text/javascript&quot; src=&quot;scriptaculous.js&quot;&gt;&lt;/script&gt;
		&lt;style type=&quot;text/css&quot;&gt;
			#draggable {
				width: 100px;
				height: 100px;
				padding: 30px;
				background-color: #39c;
				border: 1px solid #000;
				cursor: move;
			}
		&lt;/style&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;h1&gt;Drag-and-Drop&lt;/h1&gt;
		&lt;div id=&quot;draggable&quot;&gt;&lt;/div&gt;
		&lt;script type=&quot;text/javascript&quot;&gt;
			new Draggable('draggable');
		&lt;/script&gt;
	&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Wichtig f&#252;r das Aktivieren der Draggable Funktion auf ein Element ist eine ID f&#252;r das Element. Das DIV hat hier die ID &#8220;draggable&#8221;. Im Kopf werden die beiden JavaScript Dateien f&#252;r Prototype und Scriptaculous eingebunden. Wichtig ist hierbei, dass zuerst Prototype eingebunden wird. Zus&#228;tzlich ist noch etwas CSS angegeben um dem DIV einen Rahmen und eine Hintergrundfarbe zu verpassen. Alles was nun notwendig ist, um das DIV aufnehmbar zu machen ist eine einzige Zeile JavaScript:</p>
<pre class="brush: jscript; gutter: false;">
new Draggable('draggable');
</pre>
<p>Es wird hier eine neue Instanz des <a href="http://wiki.github.com/madrobby/scriptaculous/draggable">Draggable Objekts</a> erzeugt. Dem Konstruktor wird hierbei die ID des Elements &#252;bergeben, welches aufnehmbar sein soll.</p>
<h2>Ein Beispiel gef&#228;llig</h2>
<p>Da dieser Blog auch Prototype einsetzt, sollten wir es nicht bei einem Quellcode Auszug belassen, sondern einfach mal hier ein solches DIV einf&#252;gen. Also, hier kommt es:</p>
<div id="draggable" style="width: 100px; height: 100px; padding: 30px; background-color: #39c; border: 1px solid #000; cursor: move;"></div>
<p><script type="text/javascript">new Draggable('draggable')</script></p>
<p>Dieses DIV kann nun beliebig im Sichtbaren Bereich verschoben werden. Die Klasse bietet aber auch viele Optionen, die in einem Hash an die Funktion als zweiten Parameter &#252;bergeben werden k&#246;nnen. Wir k&#246;nnen z.B. die Bewegung eines Elements auf die horizontale beschr&#228;nken und zus&#228;tzlich das Element beim &#8220;Loslassen&#8221; des Elements wieder auf seine urspr&#252;ngliche Position zur&#252;cksetzen. Der JavaScript Befehl dazu sieht wie folgt aus:</p>
<pre class="brush: jscript; gutter: false;">
new Draggable('draggable2', {constraint: 'horizontal', revert: true});
</pre>
<p>Ich habe hier die ID um eine Zwei erweitert, damit ich auch dieses Beispiel hier vorf&#252;hren kann. Wichtig ist nat&#252;rlich immer, dass ihr f&#252;r die verschiedenen Elemente unterschiedliche IDs verwendet und niemals eine ID in zwei Instanzen verwendet. Das DIV verh&#228;lt sich dann wie folgt:</p>
<div id="draggable2" style="width: 100px; height: 100px; padding: 30px; background-color: #292; border: 1px solid #000; cursor: move;"></div>
<p><script type="text/javascript">new Draggable('draggable2', {constraint: 'horizontal', revert: true})</script></p>
<p>Da es hier in diesem Tutorial nicht darum geht alle m&#246;glichen Optionen zu erkl&#228;ren m&#246;chte ich euch gerne auf die <a href="http://wiki.github.com/madrobby/scriptaculous/draggable">API Referenz der Draggable Klasse</a> verweisen. Dort findet ihr eine Liste aller Optionen und einige weitere Beispiele.</p>
<p>Damit m&#246;chte ich auch schon den ersten Teil des Tutorials abschlie&#223;en. Ihr solltet einfach einmal die verschiedenen Optionen ausprobieren um zu sehen, wie sich das DIV dabei verh&#228;lt. Im zweiten Teil besch&#228;ftigen wir uns mit &#8220;dem Bruder&#8221; von Draggable. Dabei handelt es sich um die Droppables Klasse, die es erm&#246;glicht ein aufgenommenes Element &#8220;einzufangen&#8221; und auf das Element zu reagieren.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/_4rLYP-rxIZJ_vMON3F88XbbvLA/0/da"><img src="http://feedads.g.doubleclick.net/~a/_4rLYP-rxIZJ_vMON3F88XbbvLA/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/_4rLYP-rxIZJ_vMON3F88XbbvLA/1/da"><img src="http://feedads.g.doubleclick.net/~a/_4rLYP-rxIZJ_vMON3F88XbbvLA/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/Kau-boysBlog/~4/trtxPfLIFDk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kau-boys.de/webentwicklung/tutorial-drag-and-drop-mit-scriptaculous-teil-1-draggable/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kau-boys.de/webentwicklung/tutorial-drag-and-drop-mit-scriptaculous-teil-1-draggable</feedburner:origLink></item>
		<item>
		<title>Weitere Sicherheitslücken beim Internet Explorer 6 aufgetreten</title>
		<link>http://feedproxy.google.com/~r/Kau-boysBlog/~3/GoBpLzTxGak/weitere-sicherheitsluecken-beim-internet-explorer-6-aufgetreten</link>
		<comments>http://kau-boys.de/webentwicklung/weitere-sicherheitsluecken-beim-internet-explorer-6-aufgetreten#comments</comments>
		<pubDate>Mon, 01 Mar 2010 22:52:15 +0000</pubDate>
		<dc:creator>Bernhard</dc:creator>
				<category><![CDATA[Webentwicklung]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://kau-boys.de/?p=783</guid>
		<description><![CDATA[Es vergeht fast keine Woche, in dem nicht neue Sicherheitsl&#252;cken im Internet Explorer 6 bekannt werden. Dieses Mal sind die Versionen 6 und 7 f&#252;r Windows XP betroffen. User von Windows 7 sowie von Windows Server 2008 und Vista sind laut dem Blogartikel von Microsoft nicht betroffen.
Wie so oft wird den Nutzern geraten die Scripting [...]]]></description>
			<content:encoded><![CDATA[<p>Es vergeht fast keine Woche, in dem nicht neue Sicherheitsl&#252;cken im Internet Explorer 6 bekannt werden. Dieses Mal sind die Versionen 6 und 7 f&#252;r Windows XP betroffen. User von Windows 7 sowie von Windows Server 2008 und Vista sind laut <a href="http://blogs.technet.com/msrc/archive/2010/02/28/investigating-a-new-win32hlp-and-internet-explorer-issue.aspx">dem Blogartikel von Microsoft</a> nicht betroffen.</p>
<p>Wie so oft wird den Nutzern geraten die Scripting Funktionen ihres Browsers zu deaktivieren. Dies ist aber nicht immer f&#252;r den Benutzer m&#246;glich bzw. findet er oft die n&#246;tigen Einstellungen dazu nicht. Meiner Meinung nach wird durch diese Sicherheitsl&#252;cken zunehmend die Angst vor JavaScript und Co. gest&#228;rkt. Das macht es f&#252;r uns Webentwickler nat&#252;rlich teilweise sehr schwer den effektiven und wohl dosierten Einsatz von clientseitigen Skriptsprachen zu rechtfertigen.</p>
<p>Nun kann man zwar nicht dem Internet Explorer die Schuld daran geben, denn schlie&#223;lich tauchen bei jedem Browser mehrmals pro Jahr Sicherheitsl&#252;cken auf. Aber beim Internet Explorer 6 h&#228;ufen sich solche Fehler in letzter Zeit. Wenn das nat&#252;rlich dazu f&#252;hrt, dass er IE6 schneller von Unternehmensrechnern verschwindet und damit seine Hauptzielgruppe verliert umso besser. Doch leider findet er sich noch immer auf jeder Standardinstallation eines Windows XP System und auch die Service Packs zwingen den Benutzer nicht zum Update. Microsoft hat zwar angek&#252;ndigt den Support f&#252;r Windows XP ohne SP3 zum Juli einzustellen, aber auf ein Support Ende des IE6 warten wir bisher vergeblich.</p>
<p>Wenn ich mir zu meinem Geburtstag diesen Monat etwas von Microsoft w&#252;nschen d&#252;rfte, dann w&#228;re es nicht das neue Office 2010, was ja im Juni erscheinen soll, sondern das Ende einer &#196;ra im Browsermarkt.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/8Q54gcjVuwjr_KnL6VxJdD5MdUU/0/da"><img src="http://feedads.g.doubleclick.net/~a/8Q54gcjVuwjr_KnL6VxJdD5MdUU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/8Q54gcjVuwjr_KnL6VxJdD5MdUU/1/da"><img src="http://feedads.g.doubleclick.net/~a/8Q54gcjVuwjr_KnL6VxJdD5MdUU/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/Kau-boysBlog/~4/GoBpLzTxGak" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kau-boys.de/webentwicklung/weitere-sicherheitsluecken-beim-internet-explorer-6-aufgetreten/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kau-boys.de/webentwicklung/weitere-sicherheitsluecken-beim-internet-explorer-6-aufgetreten</feedburner:origLink></item>
		<item>
		<title>Programme als Administrator in eingeschränktem Profil starten</title>
		<link>http://feedproxy.google.com/~r/Kau-boysBlog/~3/S6Zgf_B6l7s/programme-als-administrator-in-eingeschraenktem-profil-starten</link>
		<comments>http://kau-boys.de/software/programme-als-administrator-in-eingeschraenktem-profil-starten#comments</comments>
		<pubDate>Fri, 26 Feb 2010 15:09:41 +0000</pubDate>
		<dc:creator>Bernhard</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Administration]]></category>
		<category><![CDATA[Betriebssystem]]></category>
		<category><![CDATA[Windows 7]]></category>

		<guid isPermaLink="false">http://kau-boys.de/?p=779</guid>
		<description><![CDATA[Ich bin ja eher ein Webentwickler als ein Administrator, aber ab und zu bleibt es einem nicht erspart sich auch um die Rechner der anderen Kollegen zu k&#252;mmern. Ein sehr h&#228;ufig auftretendes Problem ist dabei das Installieren von Programmen oder Updates. Da in unserem B&#252;ronetzwerk nat&#252;rlich nicht jeder Benutzer ein Hauptbenutzer und schon gar kein [...]]]></description>
			<content:encoded><![CDATA[<p>Ich bin ja eher ein Webentwickler als ein Administrator, aber ab und zu bleibt es einem nicht erspart sich auch um die Rechner der anderen Kollegen zu k&#252;mmern. Ein sehr h&#228;ufig auftretendes Problem ist dabei das Installieren von Programmen oder Updates. Da in unserem B&#252;ronetzwerk nat&#252;rlich nicht jeder Benutzer ein Hauptbenutzer und schon gar kein Administrator ist, muss man dort als Admin t&#228;tig werden.</p>
<p>Zu Beginn meiner Admint&#228;tigkeit habe ich oftmals den Benutzer abmelden m&#252;ssen aus Unwissenheit dar&#252;ber, wie man unter einem eingeschr&#228;nkten Profil ein Programm als Admin starten kann. Mittlerweile habe ich aber gelernt, dass man &#252;ber die Kombination &#8220;Rechte Maustaste -> Ausf&#252;hren als&#8230;&#8221;  sehr einfach eine Installation als Admin ausf&#252;hren kann. </p>
<p><span id="more-779"></span></p>
<p>Problematisch waren hierbei beispielsweise msi-Dateien, bei denen die Option &#8220;Ausf&#252;hren als&#8230;&#8221; im Kontextmen&#252; fehlte. Auch in der Systemsteuerung ist es nicht m&#246;glich eine der dort angebotenen Optionen als Admin auszuf&#252;hren. Zumindest nicht, wenn man den kleinen Trick nicht kennt, den ich gestern gelernt habe.</p>
<h2>Systemsteuerungs-Optionen als Admin ausf&#252;hren</h2>
<p>Der Trick ist denkbar einfach. Man muss lediglich bei gedr&#252;ckter SHIFT Taste mit der rechten Maustaste eine Option anklicken und schon wir einem im Kontextmen&#252; der Punkt &#8220;Ausf&#252;hren als&#8230;&#8221; angeboten. Hier kann man nun die Option mit einem beliebigen Benutzer ausf&#252;hren und somit auch als Administrator:</p>
<p><img src="http://kau-boys.de/wp-content/uploads/2010/02/SHIFT+RMT.png" alt="Systemsteuerungs-Option als Administrator ausf&#252;hren" title="Systemsteuerungs-Option als Administrator ausf&#252;hren" /></p>
<p>Manchmal sind es die kleinen Dinge &#252;ber die man sich am meisten freut. Und so ist auch dieser kleine Trick ein weiterer auf meine Liste, der die Arbeit erheblich erleichtern kann.</p>
<h2>Und was ist mit Windows Vista/7 Nutzern</h2>
<p>Wer Rechner mit Windows Vista/7 betreut, der kennt die Option zum Ausf&#252;hren von Programmen ganz selbstverst&#228;ndlich. Aber auch f&#252;r diese Nutzer habe ich einen neuen Shortcut, den ich erste gestern gelernt habe. Ich nutze sehr h&#228;ufig die Suchfunktion des Startmen&#252;s:</p>
<p><img src="http://kau-boys.de/wp-content/uploads/2010/02/Startmen&#252;-Suche.png" alt="Startmen&#252;-Suche nach cmd" title="Startmen&#252;-Suche nach cmd" /></p>
<p>Selbstverst&#228;ndlich kann man hier ein Programm aus der Liste oben mit der rechten Maustaste anklicken und es dann als Administrator starten. Aber ich m&#246;chte in der Regel nicht warten m&#252;ssen, bis das Programm gefunden wurde und es dann anklicken. Ich bin eben ein IT-Mensch, der Dinge gerne beschleunigt, wenn es m&#246;glich ist. Um das Programm, dass ganz oben angezeigt wird direkt als Admin starten zu k&#246;nnen ist folgender Shortcut notwendig: <strong>STRG + SHIFT + ENTER</strong>.</p>
<p>Und das Beste an diesen Shortcut ist, dass er auch auf Verkn&#252;pfungen auf dem Desktop ausgef&#252;hrt werden kann. Das einfach den Shortcut ausw&#228;hlen und die Tastenkombination bet&#228;tigen. Oder aber noch eleganter einfach <strong>STRG + SHIFT</strong> gedr&#252;ckt halten und dann die Verkn&#252;pfung mit einen Doppelklick als Admin starten. F&#252;r Programme die auf der Taskleiste abgelegt sind funktioniert es ebenfalls, aber hier reicht ein einfacher Klick mit der linken Maustaste.</p>
<p>Ich hoffe dass euch diese beiden Tipps bei eurer Arbeit als Administrator auch viel Zeit ersparen k&#246;nnen. Wenn ihr vielleicht auch einen tollen Shortcut f&#252;r Admins kennt, dann w&#252;rde ich mich &#252;ber einen Kommentar mit diesem sehr freuen.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/2De3_fxKOMipjNFTTPLep4vkGfA/0/da"><img src="http://feedads.g.doubleclick.net/~a/2De3_fxKOMipjNFTTPLep4vkGfA/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/2De3_fxKOMipjNFTTPLep4vkGfA/1/da"><img src="http://feedads.g.doubleclick.net/~a/2De3_fxKOMipjNFTTPLep4vkGfA/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/Kau-boysBlog/~4/S6Zgf_B6l7s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kau-boys.de/software/programme-als-administrator-in-eingeschraenktem-profil-starten/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kau-boys.de/software/programme-als-administrator-in-eingeschraenktem-profil-starten</feedburner:origLink></item>
		<item>
		<title>Der Internet Explorer ist tot! Lang lebe der Internet Explorer!</title>
		<link>http://feedproxy.google.com/~r/Kau-boysBlog/~3/xhQeR0iumvA/der-internet-explorer-ist-tot-lang-lebe-der-internet-explorer</link>
		<comments>http://kau-boys.de/webentwicklung/der-internet-explorer-ist-tot-lang-lebe-der-internet-explorer#comments</comments>
		<pubDate>Thu, 25 Feb 2010 16:01:50 +0000</pubDate>
		<dc:creator>Bernhard</dc:creator>
				<category><![CDATA[Webentwicklung]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[SVG]]></category>

		<guid isPermaLink="false">http://kau-boys.de/?p=768</guid>
		<description><![CDATA[Schon vor l&#228;ngerer Zeit hat Google angek&#252;ndigt den Support f&#252;r den Internet Explorer 6.0 f&#252;r die meisten seiner Dienste nicht mehr fortzusetzen. Zu dieser Aussage gibt es jetzt auch ein genaues Datum, ab wann der Support eingestellt werden soll. Der Stichtag ist demnach der 13. M&#228;rz 2010. Was anschlie&#223;end beim Aufruf der entsprechenden Dienste mit [...]]]></description>
			<content:encoded><![CDATA[<p>Schon vor l&#228;ngerer Zeit hat Google angek&#252;ndigt den Support f&#252;r den Internet Explorer 6.0 f&#252;r die meisten seiner Dienste nicht mehr fortzusetzen. Zu dieser Aussage gibt es jetzt auch ein genaues Datum, ab wann der Support eingestellt werden soll. Der Stichtag ist demnach der 13. M&#228;rz 2010. Was anschlie&#223;end beim Aufruf der entsprechenden Dienste mit dem Internet Explorer 6.0 zu sehen sein wird konnte ich noch nicht erfahren.</p>
<p>Da ich aber, wie in meinem Artikel <a href="http://kau-boys.de/webentwicklung/internet-explorer-6-unter-windows-7-nutzen-mit-dem-windows-xp-mode">Internet Explorer 6 unter Windows 7 nutzen mit dem Windows XP Mode</a> beschrieben habe, selbst noch eine Installation des IE6 auf meinem Laptop laufen habe, werde ich euch dann berichten, ob die Dienste noch nutzbar sind. Auf der Homepage von <a href="http://www.youtube.com/">YouTube</a> ist f&#252;r Nutzer des Internet Explorers schon l&#228;nger ein Hinweis zu sehen, der zum Update des Browsers auffordert:</p>
<p><span id="more-768"></span></p>
<p><a href="http://kau-boys.de/wp-content/uploads/2010/02/YouTube-IE6-Warnung.png" title="YouTube IE6 Warnung" class="thickbox"><img src="http://kau-boys.de/wp-content/uploads/2010/02/YouTube-IE6-Warnung-small.png" title="YouTube IE6 Warnung" alt="YouTube IE6 Warnung" /></a></p>
<p>Interessant ist hierbei auch, dass die Reihenfolge der vorgeschlagenen Browser bei jedem neuen Laden der Seite zuf&#228;llig neu verteil wird. Genau das hat man ja auch Microsoft bei der aufgezwungenen Browserauswahl f&#252;r Windows 7 gefordert.</p>
<p>Nachdem nun aber nicht nur Google dem IE6 abschw&#246;rt, sondern auch in letzter Zeit immer mehr Berichte &#252;ber Sicherheitsprobleme in fast allen Medien die Runde machen ist zu hoffen, dass der Internet Explorer 6 das Jahr 2010 nicht &#252;berleben wird. Es sollte mittlerweile auch dem letzten Admin klar sein, dass dieser in die Jahre gekommene Browser keine Zukunft mehr hat. Die vielen Unternehmen, die noch am Browser festhalten, weil es speziell angepasste Intranet-L&#246;sungen daf&#252;r gibt sollten sich ernsthaft fragen, wie seri&#246;s ein Anbieter solch einer Software noch sein kann, wenn es mittlerweile schon zwei Nachfolgeversionen des IE6 gegeben hat. Die Zeit zum umstellen der Software war also sehr wohl da. Jeder von euch, der schon einmal eine Website aus den IE6 Zeiten auf den IE7 portiert hat wird mir wohl zustimmen k&#246;nnen, dass die Anpassungen marginal waren. Das optimieren von Websites an den IE6 ist aber bis heute eine K&#246;nigsdiziplin f&#252;r Webdesigner und eine der sinnlosesten und zeitraubenden oberdrein.</p>
<p>Ich sehe im Internet Explorer 8 einen gro&#223;en Schritt von Microsoft in die richtige Richtung. Der Internet Explorer in Version 9 soll dann den anderen standardkonformen Browsern in nichts mehr nachstehen. Mal sehen, was aus dieser Ank&#252;ndigung am Ende wird. Aber da der Umstieg vom IE7 auf den IE8 und sp&#228;ter den IE9 keine gro&#223;en H&#252;rden darstellen sollte ist zu hoffen, dass wir Webentwickler dann mehr Zeit f&#252;r interessantere Dinge haben werden.</p>
<p>P.S. Bei all dem schlechten Gerede &#252;ber den IE6 wollte ich noch erw&#228;hnen, dass ich heute die Umarbeitung des Themes meines Blog f&#252;r den IE6 abgeschlossen habe. Alle transparenten PNGs sind nun in transparente GIFs konvertiert. Alle Nutzer die noch dazu gezwungen sind den IE6 zu nutzen k&#246;nnen meinen Blog nun auch in all seiner Pracht genie&#223;en.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/uAvuDloVS_xp-ax3wfsfCI4vDWs/0/da"><img src="http://feedads.g.doubleclick.net/~a/uAvuDloVS_xp-ax3wfsfCI4vDWs/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/uAvuDloVS_xp-ax3wfsfCI4vDWs/1/da"><img src="http://feedads.g.doubleclick.net/~a/uAvuDloVS_xp-ax3wfsfCI4vDWs/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/Kau-boysBlog/~4/xhQeR0iumvA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kau-boys.de/webentwicklung/der-internet-explorer-ist-tot-lang-lebe-der-internet-explorer/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://kau-boys.de/webentwicklung/der-internet-explorer-ist-tot-lang-lebe-der-internet-explorer</feedburner:origLink></item>
		<item>
		<title>Öffentlich-rechtlich und vorbildhaft – So muss eine Web 2.0 zu Olympia aussehen</title>
		<link>http://feedproxy.google.com/~r/Kau-boysBlog/~3/eBmM2_yz2Ho/oeffentlich-rechtlich-und-vorbildhaft-so-muss-eine-web-2-0-zu-olympia-aussehen</link>
		<comments>http://kau-boys.de/webentwicklung/oeffentlich-rechtlich-und-vorbildhaft-so-muss-eine-web-2-0-zu-olympia-aussehen#comments</comments>
		<pubDate>Tue, 23 Feb 2010 23:46:48 +0000</pubDate>
		<dc:creator>Bernhard</dc:creator>
				<category><![CDATA[Webentwicklung]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://kau-boys.de/?p=757</guid>
		<description><![CDATA[An dieser Stelle muss ich mal ein Lob loswerden. Zurzeit laufen ja die Olympischen Winterspiele in Vancouver und Whistler. Und nat&#252;rlich ist die Pr&#228;senz im Web auch extrem hoch. Im Fernsehen sind die Spiele vor allem in ARD und im ZDF im Free-TV und bei den digitalen Kan&#228;len der beiden &#214;ffentlich-rechtlichen zu sehen. Das erwartet [...]]]></description>
			<content:encoded><![CDATA[<p>An dieser Stelle muss ich mal ein Lob loswerden. Zurzeit laufen ja die Olympischen Winterspiele in Vancouver und Whistler. Und nat&#252;rlich ist die Pr&#228;senz im Web auch extrem hoch. Im Fernsehen sind die Spiele vor allem in ARD und im ZDF im Free-TV und bei den digitalen Kan&#228;len der beiden &#214;ffentlich-rechtlichen zu sehen. Das erwartet man auch, denn daf&#252;r zahlen wir ja auch brav unsere Geb&#252;hren.</p>
<p>Was man nicht unbedingt erwartet und was mich sehr &#252;berrascht hat ist der sehr gute Web 2.0 auftritt. Es ist immer sehr gut zu sehen, auf welchen Kan&#228;len gerade etwas live zu sehen ist und was gerade f&#252;r neue Entscheidungen gefallen sind. Au&#223;ergew&#246;hnlich ist allerdings, wie dynamisch sich die Seite an die eigenen Interessen anpassen l&#228;sst:</p>
<p><span id="more-757"></span></p>
<p><a href="http://kau-boys.de/wp-content/uploads/2010/02/olympia.ard_.de_.png" title="Startseite von olympia.ard.de" class="thickbox"><img src="http://kau-boys.de/wp-content/uploads/2010/02/olympia.ard_.de-small.png" title="Startseite von olympia.ard.de" alt="Startseite von olympia.ard.de" /></a><br />
<a href="http://olyampia.ard.de">Quelle: olympia.ard.de</a></p>
<p>Wie ihr auf dem ersten Screenshot sehen k&#246;nnt k&#246;nnen die verschiedenen Bereiche ausgelendet werden. Die Einstellungen werden hierbei in einem Cookie gespeichert, sodass die Einstellungen bei einem erneuten Besuch erhalten bleiben.</p>
<p>Eine andere M&#246;glichkeit die Seite anzupassen besteht darin die verschiedenen Elemente per Drag-and-Drop zu verschieben. Dies geht genauso fl&#252;ssig und unproblematisch wie man es auch von <a href="http://www.google.de/ig">iGoogle</a> oder &#228;hnlichen Seiten gewohnt ist. Auch hier werden die Anordnungen in demselben Cookie gespeichert:</p>
<p><a href="http://kau-boys.de/wp-content/uploads/2010/02/olympia.ard_.de-dd.png" title="Drag-and-Drop auf olympia.ard.de" class="thickbox"><img src="http://kau-boys.de/wp-content/uploads/2010/02/olympia.ard_.de-dd-small.png" title="Drag-and-Drop auf olympia.ard.de" alt="Drag-and-Drop auf olympia.ard.de" /></a><br />
<a href="http://olyampia.ard.de">Quelle: olympia.ard.de</a></p>
<p>Ebenfalls sehr nett gemacht ist die Mediabox, die sehr an die Steuerung von diversen MP3-Playern mit Albumansicht erinnert. Einige Inhalte seinen au&#223;erdem erst dann geladen zu werden, sobald der Benutzer an die entsprechende Stelle scrollt.</p>
<p>Einige von euch werden sich jetzt fragen wieso ich einen solchen Artikel geschrieben habe. Einerseits um wirklich mal ein Lob an einen sehr guten Internet Auftritt loszuwerden. Andererseits aber auch um einen kleinen &#220;berblick zu geben, was alles mit recht einfachen Mitteln m&#246;glich ist. Dem Quellcode konnte ich entnehmen, dass die ARD auf das <a href="http://mootools.net/">JavaScript-Framework MooTools</a> setzt.</p>
<p>Ich m&#246;chte diesen Artikel zum Einstieg f&#252;r eine kleine Reihe rund um Drag-and-Drop Funktionen und andere oft gesehene Techniken zu nehmen. Im ersten Teil dieser Reihe werde ich auf die Grundlagen von Drag-and-Drop eingehen und diese am Beispiel des <a href="http://script.aculo.us/">Scriptaculous Frameworks</a> zeigen. Anschlie&#223;end werden ich dann zeigen, wie man per Drag-and-Drop Elemente sortieren kann. In einem weiteren Teil geht es dann vermutlich um die Kombination der Sortierung mit AJAX.</p>
<p>Wer jetzt Lust bekommen hat sich das Ganze mal live anzusehen kann das auf der <a href="http://olympia.ard.de">Olympia Website der ARD</a> tun. Und das ZDF? Ja, das m&#246;chte ich nicht unerw&#228;hnt lassen. Auch hier gibt es viele Informationen rund um die WM und auch Livestreams. Aber die Seite ich nicht so dynamisch wie die der ARD. Besser gel&#246;st finde ich hier aber der Liveticker. Dieser bekommt zwar die gleichen Eintr&#228;ge wie der bei der ARD, aber er aktualisiert sich von selbst und stellt auch sehr sch&#246;n die aktuellen Zwischenergebnisse dar. Er l&#228;uft bei mir zurzeit fast st&#228;ndig im Hintergrund. Also auch hier solltet ihr auch mal die <a href="http://olympia.zdf.de/">Olympia Website des ZDF</a> ansehen.</p>
<p>Ich hoffe ihr freut euch auf die kleine Tutorialreihe. Ich w&#252;rde mich aber auch &#252;ber eure Kommentare zu den Websites freuen.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/HiHoRuqqVdSOh2CSBPDr4zdP_E0/0/da"><img src="http://feedads.g.doubleclick.net/~a/HiHoRuqqVdSOh2CSBPDr4zdP_E0/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/HiHoRuqqVdSOh2CSBPDr4zdP_E0/1/da"><img src="http://feedads.g.doubleclick.net/~a/HiHoRuqqVdSOh2CSBPDr4zdP_E0/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/Kau-boysBlog/~4/eBmM2_yz2Ho" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kau-boys.de/webentwicklung/oeffentlich-rechtlich-und-vorbildhaft-so-muss-eine-web-2-0-zu-olympia-aussehen/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://kau-boys.de/webentwicklung/oeffentlich-rechtlich-und-vorbildhaft-so-muss-eine-web-2-0-zu-olympia-aussehen</feedburner:origLink></item>
		<item>
		<title>Blog nativ an IE6 angepasst und neues Plugin installiert</title>
		<link>http://feedproxy.google.com/~r/Kau-boysBlog/~3/pxJKkfwcdiY/blog-nativ-an-ie6-angepasst-und-neues-plugin-installiert</link>
		<comments>http://kau-boys.de/allgemein/blog-nativ-an-ie6-angepasst-und-neues-plugin-installiert#comments</comments>
		<pubDate>Sun, 21 Feb 2010 15:07:16 +0000</pubDate>
		<dc:creator>Bernhard</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://kau-boys.de/?p=748</guid>
		<description><![CDATA[Da ich jetzt etwas mehr Zeit habe mich mit dem Finetuning des Themes zu befassen habe ich die CSS Dateien nun endlich an den IE6 angepasst, sodass der Chrome Frame, den ich in meinem Artikel Blog oder Website fit machen f&#252;r den IE6 vorgestellt habe, nicht mehr unbedingt notwendig ist. Allerdings muss ich noch die [...]]]></description>
			<content:encoded><![CDATA[<p>Da ich jetzt etwas mehr Zeit habe mich mit dem Finetuning des Themes zu befassen habe ich die CSS Dateien nun endlich an den IE6 angepasst, sodass der Chrome Frame, den ich in meinem Artikel <a href="http://kau-boys.de/webentwicklung/blog-oder-website-fit-machen-fuer-den-ie6">Blog oder Website fit machen f&#252;r den IE6</a> vorgestellt habe, nicht mehr unbedingt notwendig ist. Allerdings muss ich noch die transparenten PNGs durch transparente GIFs ersetzen, was ich wohl morgen noch nachholen werde. Ich hoffe mal, dass der Autor des Themes <a href="http://www.chris-wallace.com/2009/01/08/rusty-grunge-wordpress-theme/">Chris Wallace</a> dann meine &#252;berarbeitete und lokalisierte Version mal endlich ins WordPress Verzeichnis aktualisiert.</p>
<p>Au&#223;erdem habe ich mich dazu entschlossen ein Plugin zu installieren, mit dem man &#252;ber neue Kommentare zu einem Artikel per E-Mail benachrichtigt werden kann. Um dabei auch den deutschen Richtlinien zu entsprechen habe ich ein Plugin mit dem sogenannten <a href="http://de.wikipedia.org/wiki/Opt-in">Double-Opt-In Verfahren</a> gew&#228;hlt. Es hei&#223;t dann auch treffenderweise <a href="http://www.sjmp.de/internet/subscribe-to-comments-mit-double-opt-in-pruefung/">Subscribe To &#8220;Double-Opt-In&#8221; Comments</a>. Da es aber leider nicht in mehreren Sprachen vorliegt und auch nicht wirklich angepasst werden kann, habe ich &#252;berall sowohl den deutschen als auch den englischen Text angegeben.</p>
<p>Bisher habe ich aus genau dieser fehlenden Unterst&#252;tzung von Mehrsprachigkeit noch keines dieser Plugins eingesetzt. Aber <a href="http://www.schnaeppchentiger.de/">Tanja</a> hatte mich in einem Kommentar gebeten ein solches Plugin einzusetzen. Da ich solche Funktionen auch selbst auf vielen anderen Blogs nutze habe ich nun also f&#252;r euch alle diese neue Funktion im Angebot. Ihr k&#246;nnte aber nat&#252;rlich auch weiterhin einen RSS-Feed f&#252;r die Kommentare zu einem Artikel abonnieren.</p>
<p>Ich hoffe, dass euch die &#196;nderungen gefallen. Wenn ihr noch andere Plugins kennt, die die Nutzung des Blogs f&#252;r euch komfortabler machen w&#252;rde, dann k&#246;nnt ihr mir gerne diese Plugins vorschlagen.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/0wbwLyCYxKTZuDvvkIAvn0ms3vs/0/da"><img src="http://feedads.g.doubleclick.net/~a/0wbwLyCYxKTZuDvvkIAvn0ms3vs/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/0wbwLyCYxKTZuDvvkIAvn0ms3vs/1/da"><img src="http://feedads.g.doubleclick.net/~a/0wbwLyCYxKTZuDvvkIAvn0ms3vs/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/Kau-boysBlog/~4/pxJKkfwcdiY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kau-boys.de/allgemein/blog-nativ-an-ie6-angepasst-und-neues-plugin-installiert/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://kau-boys.de/allgemein/blog-nativ-an-ie6-angepasst-und-neues-plugin-installiert</feedburner:origLink></item>
		<item>
		<title>Kleinere Anpassungen am Theme des Blogs</title>
		<link>http://feedproxy.google.com/~r/Kau-boysBlog/~3/BiTuZxy3cbQ/kleinere-anpassungen-am-theme-des-blogs</link>
		<comments>http://kau-boys.de/allgemein/kleinere-anpassungen-am-theme-des-blogs#comments</comments>
		<pubDate>Fri, 19 Feb 2010 23:35:53 +0000</pubDate>
		<dc:creator>Bernhard</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://kau-boys.de/?p=744</guid>
		<description><![CDATA[Ich habe mir heute mal die Zeit genommen ein bisschen weiter am Theme des Blogs zu feilen. Zuerst einmal fand ich die &#220;bersichtsseiten nicht sehr &#252;bersichtlich. Es war nicht so einfach zu erkennen wo ein Post aufh&#246;rt. Daher habe ich dazu entschlossen jeweils nur den ersten Artikel komplett anzuzeigen und alle weiteren nur gek&#252;rzt. Dazu [...]]]></description>
			<content:encoded><![CDATA[<p>Ich habe mir heute mal die Zeit genommen ein bisschen weiter am Theme des Blogs zu feilen. Zuerst einmal fand ich die &#220;bersichtsseiten nicht sehr &#252;bersichtlich. Es war nicht so einfach zu erkennen wo ein Post aufh&#246;rt. Daher habe ich dazu entschlossen jeweils nur den ersten Artikel komplett anzuzeigen und alle weiteren nur gek&#252;rzt. Dazu musste ich aber auch erst einmal in allen Artikeln das &lt;!&#8211;more&#8211;&gt; Tag einf&#252;gen.</p>
<p>Dabei habe ich dann aber auch leider ein Problem festgestellt. Leider scheint das &lt;!&#8211;more&#8211;&gt; Tag nicht mit dem qTranslate zusammen zu funktionieren. Es kam dann zu dem Effekt, dass in der englischen Version der gesamte Artikeltext nicht mehr angezeigt wurde. Das war nat&#252;rlich kein Zustand und daher bekommen meine Leser der englischen Version erst einmal noch alles zu sehen.</p>
<p>Eine letzte &#196;nderung betraf einen &#220;bersetzungfehler. Ich habe das Theme selbst komplett lokalisiert und &#252;bersetzt und dabei die Texte &#8220;Neuere Artikel&#8221; und &#8220;&#196;ltere Artikel&#8221; vertauscht, was mich auch verwirrt hat.</p>
<p>Was haltet ihr von den Anpassungen? M&#246;chtet ihr lieber wieder alle Artikel immer komplett sehen? Oder findet ihr es auch besser erst einmal einen &#220;berblick zu bekommen? Ich w&#252;rde mich also freuen, wenn meine &#8220;Stammleser&#8221; mir dazu ein kurzes Feedback geben k&#246;nnten.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/N719OyoC3ZNXB9X7rCfE1RO6IY4/0/da"><img src="http://feedads.g.doubleclick.net/~a/N719OyoC3ZNXB9X7rCfE1RO6IY4/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/N719OyoC3ZNXB9X7rCfE1RO6IY4/1/da"><img src="http://feedads.g.doubleclick.net/~a/N719OyoC3ZNXB9X7rCfE1RO6IY4/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/Kau-boysBlog/~4/BiTuZxy3cbQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kau-boys.de/allgemein/kleinere-anpassungen-am-theme-des-blogs/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kau-boys.de/allgemein/kleinere-anpassungen-am-theme-des-blogs</feedburner:origLink></item>
		<item>
		<title>Zeilen-Duplizierer mit AutoComplete Felder nutzen</title>
		<link>http://feedproxy.google.com/~r/Kau-boysBlog/~3/Fgh35CTebNo/zeilen-duplizierer-mit-autocomplete-felder-nutzen</link>
		<comments>http://kau-boys.de/webentwicklung/zeilen-duplizierer-mit-autocomplete-felder-nutzen#comments</comments>
		<pubDate>Wed, 17 Feb 2010 13:18:55 +0000</pubDate>
		<dc:creator>Bernhard</dc:creator>
				<category><![CDATA[Webentwicklung]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Prototype]]></category>
		<category><![CDATA[Scriptaculous]]></category>

		<guid isPermaLink="false">http://kau-boys.de/?p=697</guid>
		<description><![CDATA[ich bekam heute in einem Kommentar die Frage gestellt, ob mein Zeilen-Duplizierer aus dem Beitrag: Einfacher Zeilen-Duplizierer mit Prototype auch auf Feldern funktioniert, die die Scriptaculous Ajax.AutoCompleter Funktion verwenden.
Ich nutze den Duplizierer selbst in einem Formular, das solche Felder enth&#228;lt. Meine erste Fassung entsprach dabei dem Einzeiler aus dem vorherigen Beitrag. Das Problem dabei ist [...]]]></description>
			<content:encoded><![CDATA[<p>ich bekam heute in einem Kommentar die Frage gestellt, ob mein Zeilen-Duplizierer aus dem Beitrag: <a href="http://kau-boys.de/webentwicklung/einfacher-zeilen-duplizierer-mit-prototype">Einfacher Zeilen-Duplizierer mit Prototype</a> auch auf Feldern funktioniert, die die <a href="http://wiki.github.com/madrobby/scriptaculous/ajax-autocompleter">Scriptaculous Ajax.AutoCompleter</a> Funktion verwenden.</p>
<p>Ich nutze den Duplizierer selbst in einem Formular, das solche Felder enth&#228;lt. Meine erste Fassung entsprach dabei dem Einzeiler aus dem vorherigen Beitrag. Das Problem dabei ist allerdings, dass die AutoCompleter Funktion beim Erzeugen mit dem Felder verkn&#252;pft wird, auf das sie angewendet werden soll. Wenn man nun dieses Feld kopiert wird nicht eine neue Instanz des Ajax.AutoCompleter erzeugt, sondern die Referenz auf das alte Feld mit kopiert. Ein Eintrag im neu erzeugten Feld aktiviert also die AutoCompleter Funktion des vorherigen Feldes.</p>
<p><span id="more-697"></span></p>
<p>Um dieses Problem zu l&#246;sen hatte ich die erweiterte Funktion mit den beiden Callback-Funktionen erstellt. Damit ist es m&#246;glich die Referenz zum vorherigen Feld zu l&#246;sen und eine neue Instanz des Ajax.AutoCompleter nach dem Erzeugen der Kopie zu erstellen. Hier aber zuerst noch einmal die Funktion selbst. Ich habe mittlerweile auch eine Option zum Fokussieren des ersten Feldes in der Kopie hinzugef&#252;gt:</p>
<pre class="brush: jscript;">
function addRow(selector, options){
	var lastRow = $$(selector).last();
	var newRow = lastRow.cloneNode(true);
	if (options.reset) {
		newRow.select('select', 'textarea', 'input').each(function(elm){
			elm.clear().checked = '';
		});
	}
	if(options.beforeInsert) options.beforeInsert(newRow);
	lastRow.insert({'after': newRow});
	if(options.afterInsert) options.afterInsert(newRow);

	if (options.focusFirst) {
		newRow.select('input', 'select', 'textarea').first().focus();
	}
}
</pre>
<p>Um die Ajax.Autocompleter Funktion nutzen zu k&#246;nnen ben&#246;tigt jedes Feld eine eindeutige ID. Nehmen wir also an, wir haben folgendes erstes Feld f&#252;r unser Formular (hier ein Beispiel aus dem Artikel: <a href="http://kau-boys.de/webentwicklung/google-maps-suggest-adress-autovervollstaendigung-mit-scriptaculous">Google Maps Suggest – Adress-Autovervollst&#228;ndigung mit Scriptaculous</a>):</p>
<pre class="brush: xml;">
&lt;form id=&quot;addressform&quot; action=&quot;address_save.php&quot; class=&quot;niceform&quot;&gt;
	&lt;fieldset&gt;
		&lt;legend&gt;Choose an address&lt;/legend&gt;
		&lt;dl&gt;
			&lt;dt&gt;&lt;label for=&quot;address&quot;&gt;Address:&lt;/label&gt;&lt;/dt&gt;
			&lt;dd&gt;&lt;input type=&quot;text&quot; id=&quot;address&quot; name=&quot;address[]&quot; style=&quot;width: 300px;&quot; /&gt;&lt;/dd&gt;
		&lt;/dl&gt;
	&lt;/fieldset&gt;
	&lt;fieldset&gt;
		&lt;input type=&quot;submit&quot; value=&quot;Send!&quot; /&gt;
	&lt;/fieldset&gt;
&lt;/form&gt;
&lt;div id=&quot;adresse_choices&quot; class=&quot;autocomplete&quot;&gt;&lt;/div&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
	new Ajax.Autocompleter('address', 'adresse_choices', 'get_addresses.php');
&lt;/script&gt;
</pre>
<p>Wichtig sind hierbei nat&#252;rlich die eckigen Klammern am Ende des Name Attributs, damit auch alle kopierten Werte mit&#252;bertragen werden. Damit wir einer Kopie dieses Feldes eine neue Instanz hinzuf&#252;gen k&#246;nnen, m&#252;ssen wir beim Kopieren auch die ID ver&#228;ndern. Dazu schreiben wir uns eine kleine Callback-Funktion, die genau das erledigt:</p>
<pre class="brush: jscript;">
function activateAutocomplete(newRow){
	var addressInput = $A(newRow.select('input')).first();
	addressInput.id += 1;
	addressInput.stopObserving();
	new Ajax.Autocompleter(addressInput.id, 'adresse_choices', 'get_addresses.php');
}
</pre>
<p>In der 2. Zeile selektieren wir das erste Element innerhalb der neuen Zeile (wir nehmen hier also an, dass es sich dabei um das AutoCompleter Feld handelt). Diesem f&#252;gen wir in der 3. Zeile zus&#228;tzlich zur ID eine 1 hinzu. Es entstehen also Felder nach dem Muster <code>"address1", "address11"</code> usw. Das reicht aus um die Felder genau zu referenzieren.<br />
In der 4. Zeile kommt die schon angesprochene Funktion zum Einsatz, die das Autocomplete f&#252;r das Feld deaktiviert. Zu guter Letzt erzeugen wir eine neue Instanz des Ajax.Autocompleter. Wir k&#246;nnen dabei als zweiten Parameter dasselbe DIV Element f&#252;r die Vorschl&#228;ge verwenden, da es ja nicht m&#246;glich ist, gleichzeitig in zwei Felder etwas einzutippen. Das DIV wird automatisch durch Scriptaculous unter das Feld positioniert, in dem es verwendet wird.</p>
<p>Damit das ganze nun auch dupliziert werden kann, f&#252;gen wir noch einen entsprechenden Link ein. Dieser muss dann die Callback-Funktion als zweiten Parameter in der Funktion erhalten. Ich verwende hier ein SPAN Element mit einem onclick Event. Es geht aber auch mit einem gew&#246;hnlichen Link:</p>
<pre class="brush: xml; gutter: false;">
&lt;span class=&quot;add&quot; onclick=&quot;addRow('#addressform dl', {reset : true, afterInsert: activateAutocomplete})&quot;&gt;Adresse hinzuf&#252;gen&lt;/span&gt;
</pre>
<p>Es wird durch den Selektor <code>"#addressform dl"</code> die gesamte Definition inklusive des Label kopiert. Ihr k&#246;nnt aber auch eine andere HTML Struktur wie z.B. eine unsortierte Liste verwenden.</p>
<p>Das war auch schon alles. Das Beispiel k&#246;nnt ihr euch hier ansehen und auch den Quellcode dazu runterladen:</p>
<p><a href="http://kau-boys.de/beispiele/google_maps_suggest/duplicate.html">Beispiel</a><br />
<a href="http://kau-boys.de/beispiele/google_maps_suggest/google_maps_suggest_duplicate.zip">Download</a></p>
<p>Ich hoffe, dass euch die erweiterte Anwendung gefallen hat und vielleicht auf neue Ideen gebracht hat. Wenn ihr eine andere Anwendung kennt, bei der Ihr nicht weiterkommt w&#252;rde ich mich wie immer &#252;ber einen Kommentar sehr freuen.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/FMgn_8dNHndAljg1moc3KMLSx-g/0/da"><img src="http://feedads.g.doubleclick.net/~a/FMgn_8dNHndAljg1moc3KMLSx-g/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/FMgn_8dNHndAljg1moc3KMLSx-g/1/da"><img src="http://feedads.g.doubleclick.net/~a/FMgn_8dNHndAljg1moc3KMLSx-g/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/Kau-boysBlog/~4/Fgh35CTebNo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kau-boys.de/webentwicklung/zeilen-duplizierer-mit-autocomplete-felder-nutzen/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kau-boys.de/webentwicklung/zeilen-duplizierer-mit-autocomplete-felder-nutzen</feedburner:origLink></item>
		<item>
		<title>Anzahl der Backups im Plesk Backup-Manager begrenzen</title>
		<link>http://feedproxy.google.com/~r/Kau-boysBlog/~3/YV8qR_4aLfg/anzahl-der-backups-im-plesk-backup-manager-begrenzen</link>
		<comments>http://kau-boys.de/webserver/anzahl-der-backups-im-plesk-backup-manager-begrenzen#comments</comments>
		<pubDate>Thu, 11 Feb 2010 15:53:04 +0000</pubDate>
		<dc:creator>Bernhard</dc:creator>
				<category><![CDATA[Webserver]]></category>
		<category><![CDATA[Administration]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Plesk]]></category>
		<category><![CDATA[Server]]></category>

		<guid isPermaLink="false">http://kau-boys.de/?p=692</guid>
		<description><![CDATA[In meinem Artikel Plesk Backup-Manager auf 1&#038;1 Linux Root Server einrichten habe ich bereits beschrieben was zu tun ist, um das Backup auf einem Server mit Plesk einzurichten. Beim Einsatz dieser Konfiguration bin ich allerdings sehr schnell auf ein folgenschweres Problem gesto&#223;en.
Da ein Backup der Domain mittlerweile eine Gr&#246;&#223;e von &#252;ber 20GB hat reichen die [...]]]></description>
			<content:encoded><![CDATA[<p>In meinem Artikel <a href="http://kau-boys.de/webserver/plesk-backup-manager-auf-1und1-linux-root-server-einrichten">Plesk Backup-Manager auf 1&#038;1 Linux Root Server einrichten</a> habe ich bereits beschrieben was zu tun ist, um das Backup auf einem Server mit Plesk einzurichten. Beim Einsatz dieser Konfiguration bin ich allerdings sehr schnell auf ein folgenschweres Problem gesto&#223;en.</p>
<p>Da ein Backup der Domain mittlerweile eine Gr&#246;&#223;e von &#252;ber 20GB hat reichen die 250GB des 1&#038;1 Backup FTP-Servers nur f&#252;r 10 Backups. Sobald dieser Speicherplatz verbraucht ist, werden die Daten auf dem Webserver abgelegt. Das fatale dabei ist, dass dadurch der gesamte Speicherplatz des Servers langsam aber sich aufgebraucht wird. Wenn der Speicherplatz belegt ist f&#252;hrt es im schlimmsten Fall dazu, dass MySQL keine tempor&#228;ren Tabellen mehr erzeugen kann und euer Server ist somit nicht mehr in der Lage die Anfragen zu bearbeiten. Also im Klartext: Euer Server funktioniert im schlimmsten Fall nicht mehr.</p>
<p><span id="more-692"></span></p>
<p>Daher solltet ihr die Anzahl der Backups begrenzen, wobei ihr am besten einen Wert nehmt, der der Gr&#246;&#223;e eures FTP Backup Servers geteilt durch die durchschnittliche Gr&#246;&#223;e eines Backups entspricht. In meinen Fall habe ich also einen Wert von 10 gew&#228;hlt, da hierbei noch etwas Luft nach oben ist, sollte doch mal ein Backup gr&#246;&#223;er ausfallen. Die Einstellung k&#246;nnt ihr in der &#8220;Einstellungen f&#252;r geplantes Backup&#8221; vornehmen:</p>
<p><img src="http://kau-boys.de/wp-content/uploads/2010/02/Maximale-Anzahl-von-Backups-im-Repository.png" alt="Maximale Anzahl von Backups im Repository begrenzen" title="Maximale Anzahl von Backups im Repository begrenzen" /></p>
<p>Ihr sollte zur Sicherheit von Zeit zu Zeit &#252;berpr&#252;fen, ob der gew&#228;hlte Wert noch der Gr&#246;&#223;e der Backups angemessen ist.</p>
<p>Sollte bei euch bereits ein Backup auf dem Webserver selbst gelandet sein, dann habt ihr leider &#252;ber Plesk keine M&#246;glichkeit die Backups auf den FTP Backup Server zu verschieben, es sei denn ihr traut euch zu das manuell &#252;ber die Konsole zu tun. Ich w&#252;rde euch einfach raten abzuwarten bis aktuellere Backups auf dem FTP Backup Server vorliegen und dann die alten Backups auf dem Server einfach zu l&#246;schen. Wenn wie bei mir aber schon der Speicher voll ist solltet ihr auf jeden Fall die &#228;ltesten Backups vom Webserver entfernen.</p>
<p>Ich hoffe, dass euch der Tipp weiterhelfen konnte. Unverst&#228;ndlich, dass der kleine Hinweis unter dem Textfeld kein Ausrufezeichen enth&#228;lt mit dem Hinweis was passiert, wenn man keine Begrenzung angibt. &#220;ber Anmerkungen w&#252;rde ich mich wie immer sehr freuen.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/PKDPpprrOrWqo7Zs4I_ZMpTw5fw/0/da"><img src="http://feedads.g.doubleclick.net/~a/PKDPpprrOrWqo7Zs4I_ZMpTw5fw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/PKDPpprrOrWqo7Zs4I_ZMpTw5fw/1/da"><img src="http://feedads.g.doubleclick.net/~a/PKDPpprrOrWqo7Zs4I_ZMpTw5fw/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/Kau-boysBlog/~4/YV8qR_4aLfg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kau-boys.de/webserver/anzahl-der-backups-im-plesk-backup-manager-begrenzen/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://kau-boys.de/webserver/anzahl-der-backups-im-plesk-backup-manager-begrenzen</feedburner:origLink></item>
		<item>
		<title>Backend Localization Plugin funktioniert nun auch mit PHP4</title>
		<link>http://feedproxy.google.com/~r/Kau-boysBlog/~3/-CTd6zdep4A/backend-localization-plugin-funktioniert-nun-auch-mit-php4</link>
		<comments>http://kau-boys.de/wordpress/backend-localization-plugin-funktioniert-nun-auch-mit-php4#comments</comments>
		<pubDate>Sun, 07 Feb 2010 14:40:31 +0000</pubDate>
		<dc:creator>Bernhard</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://kau-boys.de/?p=687</guid>
		<description><![CDATA[Anfang der Woche bekam ich einen Kommentar zu meinem Backend Localization Plugin mit dem Hinweis, dass es nicht mit PHP4 funktioniert. Da ich schon lange PHP5 nutze und auch versuche meinen Quellcode &#252;bersichtlich zu gestalten, habe ich in meinem Plugin einige Funktionen und Eigenschaften genutzt, die es f&#252;r PHP4 noch nicht gab.
Der Kommentator, der den [...]]]></description>
			<content:encoded><![CDATA[<p>Anfang der Woche bekam ich einen Kommentar zu meinem <a href="http://kau-boys.de/wordpress/kau-boys-backend-localization-plugin">Backend Localization Plugin</a> mit dem Hinweis, dass es nicht mit PHP4 funktioniert. Da ich schon lange PHP5 nutze und auch versuche meinen Quellcode &#252;bersichtlich zu gestalten, habe ich in meinem Plugin einige Funktionen und Eigenschaften genutzt, die es f&#252;r PHP4 noch nicht gab.</p>
<p>Der Kommentator, der den Fehler gefunden hat, konnte auch selbst am n&#228;chsten Tag schon eine L&#246;sung finden, die er <a href="http://www.est322.com/2010/02/kau-boys-backend-localization-plugin-wordpress/">auf seinem eigenen Blog</a> sowie als weiteres Kommentar hinterlassen hat. An dieser Stelle nochmals vielen Dank an David.</p>
<p>Ich versuche Fehler, die mir mitgeteilt werden immer innerhalb von wenigen Tagen zu beheben. Dazu bin ich nat&#252;rlich darauf angewiesen, dass mir diese auch mitgeteilt werden. Bei WordPress kann es sehr oft vorkommen, dass sich zwei Plugins nicht zusammen vertragen. Wenn ihr also mit einem meiner Plugins ein Problem feststellen solltet, dann scheut euch nicht mir das mitzuteilen. Ich werde gerne versuchen das Problem zu beheben.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/yPP2_k4eODj4JILLFk3cI3PDq7M/0/da"><img src="http://feedads.g.doubleclick.net/~a/yPP2_k4eODj4JILLFk3cI3PDq7M/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/yPP2_k4eODj4JILLFk3cI3PDq7M/1/da"><img src="http://feedads.g.doubleclick.net/~a/yPP2_k4eODj4JILLFk3cI3PDq7M/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/Kau-boysBlog/~4/-CTd6zdep4A" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kau-boys.de/wordpress/backend-localization-plugin-funktioniert-nun-auch-mit-php4/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kau-boys.de/wordpress/backend-localization-plugin-funktioniert-nun-auch-mit-php4</feedburner:origLink></item>
		<item>
		<title>Internet Explorer 6 unter Windows 7 nutzen mit dem Windows XP Mode</title>
		<link>http://feedproxy.google.com/~r/Kau-boysBlog/~3/OTrIAZyDOSc/internet-explorer-6-unter-windows-7-nutzen-mit-dem-windows-xp-mode</link>
		<comments>http://kau-boys.de/webentwicklung/internet-explorer-6-unter-windows-7-nutzen-mit-dem-windows-xp-mode#comments</comments>
		<pubDate>Mon, 01 Feb 2010 14:26:12 +0000</pubDate>
		<dc:creator>Bernhard</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Webentwicklung]]></category>
		<category><![CDATA[Administration]]></category>
		<category><![CDATA[Betriebssystem]]></category>
		<category><![CDATA[Windows 7]]></category>

		<guid isPermaLink="false">http://kau-boys.de/?p=674</guid>
		<description><![CDATA[Wer sich von euch jetzt fragen sollte &#8220;Wieso sollte ich den IE6 unter Windows 7 nutzen?&#8221; dem w&#252;rde ich gerne &#8220;Willst du nicht!&#8221; antworten. Aber diejenigen unter uns, die Webseiten entwickeln und auch mit dem IE6 eine Website testen m&#252;ssen, wird dieser Artikel wohl helfen.
Unter Windows kann ja bekannterma&#223;en immer nur eine Version des Internet [...]]]></description>
			<content:encoded><![CDATA[<p>Wer sich von euch jetzt fragen sollte &#8220;Wieso sollte ich den IE6 unter Windows 7 nutzen?&#8221; dem w&#252;rde ich gerne &#8220;Willst du nicht!&#8221; antworten. Aber diejenigen unter uns, die Webseiten entwickeln und auch mit dem IE6 eine Website testen m&#252;ssen, wird dieser Artikel wohl helfen.</p>
<p>Unter Windows kann ja bekannterma&#223;en immer nur eine Version des Internet Explorers installiert sein. Da der IE8 auch einen Kompatibilit&#228;tsmodus f&#252;r den IE7 besitzt hat man so schon mal zwei Fliegen mit einer Klappe geschlagen. Aber wie soll man unter Windows 7 einen IE6 installieren. Zum Gl&#252;ck gibt es hier eine sehr einfache und sehr benutzerfreundliche Methode. Zum Testen des Chrome Frame f&#252;r<a href="http://kau-boys.de/webentwicklung/blog-oder-website-fit-machen-fuer-den-ie6"> meinem letzen Artikel</a> habe ich noch eine virtuelle Maschine mit Windows XP unter <a href="http://www.virtualbox.org/">Suns VirtualBox</a> verwendet. Es geht aber sehr viel einfacher und erfordert keine Zeitaufw&#228;ndige Installation eines XP-Systems, f&#252;r das man auch noch eine Lizenz ben&#246;tigt. Wer also keine mehr rumliegen hat und nicht unbedingt eine XP-VM ben&#246;tigt, kann sich trotzdem den IE6 f&#252;r Win7 holen.</p>
<p><span id="more-674"></span></p>
<h2>Der Windows XP Modus</h2>
<p>Alles was ihr ben&#246;tigt ist der sogenannten Windows XP Mode. Dabei handelt es sich um eine spezielle Version von Microsofts Virtual PC. Alle Programme, die dort installiert sind, k&#246;nnen auch unter Windows 7 gestartet werden. Und nicht wie man es von VMs gewohnt, indem man die VM startet und dort die Programme ausf&#252;hrt, sondern indem man sie direkt aus dem Startmen&#252; von Windows 7 aufruft und auch direkt in Win7 nutzen kann.</p>
<p>Damit ihr den Windows XP Mode ben&#246;tigt ihr mindestens eine Windows 7 Professional Lizenz oder h&#246;her. Benutzer von Win7 Starter oder Home k&#246;nnen den Modus leider nicht nutzen. Zum installieren geht ihr einfach auf die <a href="http://www.microsoft.com/windows/virtual-pc/download.aspx">Download-Website f&#252;r den Windows XP Mode</a> w&#228;hlt eure Windows 7 Version und die gew&#252;nschte Sprache aus und installiert beide Dateien nacheinander. Anschlie&#223;end k&#246;nnt ihr die virtuelle Maschine &#252;ber das Startmen&#252; aufrufen und die n&#246;tigen Einstellungen f&#252;r Windows XP durchf&#252;hren. Ihr solltet in diesem Zusammenhang auch die Updates installieren aber auf KEINEN FALL das Update f&#252;r den Internet Explorer 7.</p>
<h2>Den Internet Explorer 6 unter Windows 7 nutzbar machen</h2>
<p>Damit ihr nun den IE6 auch unter Windows 7 nutzen k&#246;nnte ist ein sehr simpler Eingriff notwendig. Ihr m&#252;sst lediglich eine Verkn&#252;pfung zum IE6 in das Startmen&#252; f&#252;r &#8220;Alle Benutzer&#8221; kopieren. Dazu klickt ihr einfach mit der rechten Maustaste auf den &#8220;Start&#8221; Kopf und w&#228;hlt &#8220;&#214;ffnen &#8211; Alle Benutzer&#8221;:</p>
<p><img src="http://kau-boys.de/wp-content/uploads/2010/02/Windows-XP-Mode-Startmen&#252;-f&#252;r-alle-Benutzer.png" alt="Windows XP Mode - Startmen&#252; f&#252;r alle Benutzer" title="Windows XP Mode - Startmen&#252; f&#252;r alle Benutzer" /></p>
<p>Alle Verkn&#252;pfungen die hier zus&#228;tzlich zu den bereits abgelegten hinzugef&#252;gt werden sind anschlie&#223;end in Windows 7 aufrufbar. Ihr k&#246;nnt nun also hier eine Verkn&#252;pfung zum IE6 anlegen. Das geht wiederrum recht schnell, wenn ihr einfach die Verkn&#252;pfung auf dem Desktop per Drag-and-Drop hierher zieht:</p>
<p><img src="http://kau-boys.de/wp-content/uploads/2010/02/Windows-XP-Mode-Verkn&#252;pfung-f&#252;r-IE6-kopieren.png" alt="Windows XP Mode - Verkn&#252;pfung f&#252;r IE6 kopieren" title="Windows XP Mode - Verkn&#252;pfung f&#252;r IE6 kopieren" /></p>
<p>Nun solltet ihr zur Sicherheit die Virtuelle Maschine einmal neustarten. Es funktioniert vielleicht auch ohne Neustart, aber bei mir war er notwendig (eventuell wegen der installierten Updates).</p>
<h2>Den IE6 in Windows 7 aufrufen</h2>
<p>Wenn alles richtig eingerichtet wurde, solltet ihr im Startmen&#252; unter Windows 7 einen Unterordner in &#8220;Windows Virtual PC&#8221; mit der Bezeichnung &#8220;Windows XP Mode-Anwendungen&#8221; vorfinden. Dort sollte dann der Internet Explorer 6 aufrufbar sein:</p>
<p><img src="http://kau-boys.de/wp-content/uploads/2010/02/Windows-XP-Mode-IE6-in-Win7-starten.png" alt="Windows XP Mode - IE6 in Win7 starten" title="Windows XP Mode - IE6 in Win7 starten" /></p>
<p>Nachdem ihr den Internet Explorer gestartet habt k&#246;nnt ihr ihn so verwenden, als w&#228;re er direkt in Windows 7 installiert. Da aber nicht nur der IE6 sondern das gesamte System gestartet wird kommt es manchmal zu kuriosen Meldungen. So wird euch z.B. auch ab und zu auf Updates hingewiesen oder darauf, dass ihr keinen Virenscanner in der VM installiert habt. Wenn euch die Meldungen st&#246;ren, solltet ihr einfach die erforderlichen Schritte in der VM durchf&#252;hren. </p>
<p>Hier noch ein kleines &#8220;Beweisfoto&#8221; der Familienzusammenf&#252;hrung, f&#252;r alle, die daran Zweifel haben, dass es so einfach ist:</p>
<p><a href="http://kau-boys.de/wp-content/uploads/2010/02/Windows-XP-Mode-IE6-und-IE8-in-Windows-7.png" title="Windows XP Mode - IE6 und IE8 in Windows 7" class="thickbox"><br />
<img src="http://kau-boys.de/wp-content/uploads/2010/02/Windows-XP-Mode-IE6-und-IE8-in-Windows-7-small.png" alt="Windows XP Mode - IE6 und IE8 in Windows 7" title="Windows XP Mode - IE6 und IE8 in Windows 7" /><br />
</a></p>
<h2>Fazit</h2>
<p>Mit dem Windows XP Mode ist es sehr einfach alte Programme unter Windows 7 zu nutzen. Es ist dabei sogar m&#246;glich mit der erweiterten Version von Virtual PC mehr als eine virtuelle Maschine zu betreiben. Wenn auch eine der anderen VMs eine Windows Installation ist, k&#246;nnt ihr hier auch die Programme unter Win7 nutzbar machen. Wer also einen &#8220;echten Internet Explorer 7&#8243; haben m&#246;chte, k&#246;nnte z.B. eine weitere XP-VM aufsetzen oder eine Vista-VM nutzen. Ihr k&#246;nnte in den VMs dann z.B. auch &#228;ltere Version von anderen Browsern installieren um diese gleichzeitig unter Win7 nutzen zu k&#246;nnen. Zwar kann man viele andere Browser auch in mehreren Versionen auf einem System installieren, aber z.B. beim Firefox gibt es dabei immer mal wieder Probleme mit den Profilen.</p>
<p>Hat jemand von euch noch andere sinnvolle Anwendungen des Windows XP Mode gefunden? Vielleicht um ein paar Spieleklassiker zum Laufen zu bringen? &#220;ber Kommentare w&#252;rde ich mich wie immer sehr freuen.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/_C7xURbDJwVnUeJbTN8zchj1MUI/0/da"><img src="http://feedads.g.doubleclick.net/~a/_C7xURbDJwVnUeJbTN8zchj1MUI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/_C7xURbDJwVnUeJbTN8zchj1MUI/1/da"><img src="http://feedads.g.doubleclick.net/~a/_C7xURbDJwVnUeJbTN8zchj1MUI/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/Kau-boysBlog/~4/OTrIAZyDOSc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kau-boys.de/webentwicklung/internet-explorer-6-unter-windows-7-nutzen-mit-dem-windows-xp-mode/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://kau-boys.de/webentwicklung/internet-explorer-6-unter-windows-7-nutzen-mit-dem-windows-xp-mode</feedburner:origLink></item>
		<item>
		<title>Blog oder Website fit machen für den IE6</title>
		<link>http://feedproxy.google.com/~r/Kau-boysBlog/~3/bmf591gPCM0/blog-oder-website-fit-machen-fuer-den-ie6</link>
		<comments>http://kau-boys.de/webentwicklung/blog-oder-website-fit-machen-fuer-den-ie6#comments</comments>
		<pubDate>Sat, 30 Jan 2010 16:22:32 +0000</pubDate>
		<dc:creator>Bernhard</dc:creator>
				<category><![CDATA[Webentwicklung]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://kau-boys.de/?p=662</guid>
		<description><![CDATA[Wie auf vielen News-Seiten zu lesen ist stellt Google ab Mitte des Jahres offiziell den Support f&#252;r den Internet Explorer in der Version 6.0 ein. Unter den Besuchern meines Blog befindet sich zwar nur ein verschwindend geringer Prozentsatz an IE6 Nutzern, aber auch diese sollten meine Website einigerma&#223;en ansehnlich pr&#228;sentiert bekommen.
Das gr&#246;&#223;te Problem ist oft, [...]]]></description>
			<content:encoded><![CDATA[<p>Wie auf vielen News-Seiten zu lesen ist stellt Google ab Mitte des Jahres offiziell den Support f&#252;r den Internet Explorer in der Version 6.0 ein. Unter den Besuchern meines Blog befindet sich zwar nur ein verschwindend geringer Prozentsatz an IE6 Nutzern, aber auch diese sollten meine Website einigerma&#223;en ansehnlich pr&#228;sentiert bekommen.</p>
<p>Das gr&#246;&#223;te Problem ist oft, dass die sch&#246;nen Themes nicht auf den IE6 angepasst wurden und daher zu sehr unsch&#246;nen Darstellungen f&#252;hren. Ich habe in einer virtuellen Maschine noch eine Installation vom Internet Explorer 6 laufen und damit mal selbst meinen Blog getestet. Das Ergebnis sah leider wie folgt aus:</p>
<p><a href="http://kau-boys.de/wp-content/uploads/2010/01/vorher.png" class="thickbox" title="Blog vor der Installation des Plugins"><img src="http://kau-boys.de/wp-content/uploads/2010/01/vorher_small.png" alt="Blog vor der Installation des Plugins" title="Blog vor der Installation des Plugins" /></a></p>
<p><span id="more-662"></span></p>
<p>Wie ihr hier sehen k&#246;nnt sind die transparenten PNG Bilder im IE6 nicht transparent, da dieser nur transparente GIF Bilder unterst&#252;tzt. Viel schlimmer war aber, dass die Sidebar mit den Widgets komplett nach unten gerutscht war. Um das zu beheben h&#228;tte ich sehr viele Dinge im CSS Layout und vermutlich auch im HTML-Quellcode &#228;ndern m&#252;ssen. Daher habe ich &#252;berlegt, was man stattdessen tun k&#246;nnte.</p>
<h2>Die L&#246;sung: Google Chrome Frame</h2>
<p>Schon vor l&#228;ngerer Zeit hatte ich etwas vom <a href="http://code.google.com/intl/de-DE/chrome/chromeframe/">Google Chrome Frame</a> gelesen, der die Webkit Rendering Engine und die JavaScript Engine des Chrome Browsers in den Internet Explorer bringt. Dazu muss der Benutzer lediglich ein Plugin f&#252;r den Internet Explorer installieren und der Website-Betreiber muss dem Plugin mitteilen, dass der Inhalt automatisch damit gerendert werden soll.</p>
<h2>Den Browser zum Rendern mit dem Chrome Frame veranlassen</h2>
<p>Alles was der Website-Betreiber tun muss, ist folgenden Meta-Tag in seinen Quellcode einzuf&#252;gen:</p>
<pre class="brush: xml; gutter: false;">
&lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;chrome=1&quot; /&gt;
</pre>
<p>Das <code>X-UA-Compatible</code> Meta-Tag sorgt daf&#252;r, dass das Plugin aktiviert wird und der Benutzer den Inhalt richtig dargestellt bekommt, vorausgesetzt nat&#252;rlich er hat es auch installiert. Um einen Benutzer des Internet Explorers dazu zu bewegen das Plugin zu installieren, hat Google ein kleines JavaScript-Snippet bereitgestellt, mit dem der Benutzer einen Link zur Download-Seite des Plugins bekommt:</p>
<pre class="brush: xml;">
&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/chrome-frame/1/CFInstall.min.js&quot;&gt;&lt;/script&gt;
&lt;div id=&quot;placeholder&quot;&gt;&lt;/div&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
	CFInstall.check({
		node: &quot;placeholder&quot;,
		destination: &quot;http://www.waikiki.com&quot;
	});
&lt;/script&gt;
</pre>
<p>Damit die Aufforderung zum Download auch nur Benutzern des IE6 angezeigt wird, habe ich zus&#228;tzlich ein <a href="http://de.selfhtml.org/css/layouts/browserweichen.htm#alternative">Conditional Comment</a> benutzt, um das Snippet nur auf IE6 Benutzer anzuwenden, damit Benutzer des Internet Explorer 7 und h&#246;her keine Aufforderung bekommen. Au&#223;erdem m&#252;ssen damit auch alle Nutzer eines andern Browsers nicht die JavaScript-Datei vom Google Server laden.</p>
<h2>Der Blog nach der Installation des Plugins</h2>
<p>F&#252;r diejenigen von euch, die etwas skeptisch sind, ob der ganze Aufwand lohnt, habe ich hier nun das &#8220;nachher&#8221; Bild, damit ihr sehen k&#246;nnt, dass es wirklich funktioniert:</p>
<p><a href="http://kau-boys.de/wp-content/uploads/2010/01/nachher.png" class="thickbox" title="Blog nach der Installation des Plugins"><img src="http://kau-boys.de/wp-content/uploads/2010/01/nachher_small.png" alt="Blog nach der Installation des Plugins" title="Blog nach der Installation des Plugins" /></a></p>
<p>Wie ihr sehen k&#246;nnt, sieht der Blog nun wieder richtig aus. Als kleinen Bonus des Plugins k&#246;nnt ihr auch den Inspektor nutzen, wie man ihn von Chrome oder Safari gew&#246;hnt ist. Aber die Besucher eures Blog werden das wohl eher nicht nutzen.</p>
<p>Ich hoffe, dass euch dieser Tipp helfen konnte. Mich w&#252;rde interessieren, was ihr vom Google Chrome Frame haltet oder was f&#252;r euch dagegen spricht. Hat ihn vielleicht jemand auch im Einsatz und schon echte Probleme oder Nachteile damit feststellen k&#246;nnen? &#220;ber Kommentare w&#252;rde ich mich wie immer sehr freuen &#8230; &#252;ber ein baldiges Aussterben des IE6 aber noch viel mehr <img src='http://kau-boys.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>

<p><a href="http://feedads.g.doubleclick.net/~a/OQ-LIYBFT06qpQ-OABoFkRpDRUM/0/da"><img src="http://feedads.g.doubleclick.net/~a/OQ-LIYBFT06qpQ-OABoFkRpDRUM/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/OQ-LIYBFT06qpQ-OABoFkRpDRUM/1/da"><img src="http://feedads.g.doubleclick.net/~a/OQ-LIYBFT06qpQ-OABoFkRpDRUM/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/Kau-boysBlog/~4/bmf591gPCM0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kau-boys.de/webentwicklung/blog-oder-website-fit-machen-fuer-den-ie6/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://kau-boys.de/webentwicklung/blog-oder-website-fit-machen-fuer-den-ie6</feedburner:origLink></item>
		<item>
		<title>Kundenservice wie er sein sollte: Akkutausch bei Lenovo</title>
		<link>http://feedproxy.google.com/~r/Kau-boysBlog/~3/DaRMM32FlzI/kundenservice-wie-er-sein-sollte-akkutausch-bei-lenovo</link>
		<comments>http://kau-boys.de/allgemein/kundenservice-wie-er-sein-sollte-akkutausch-bei-lenovo#comments</comments>
		<pubDate>Wed, 27 Jan 2010 12:55:07 +0000</pubDate>
		<dc:creator>Bernhard</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Laptop]]></category>
		<category><![CDATA[ThinkPad]]></category>

		<guid isPermaLink="false">http://kau-boys.de/?p=654</guid>
		<description><![CDATA[Einige Modellreihen von ThinkPad Akkus weisen einen Defekt auf der dazu f&#252;hrt, dass die Akkus nach kurzen Zeit nur noch eine geringe verf&#252;gbare Kapazit&#228;t aufweisen. Bei dem Akku eines ThinkPads war genau so ein Akku verbaut und er wies nach nicht einmal einem Jahr nur noch 33% seiner urspr&#252;nglichen Kapazit&#228;t bei vollst&#228;ndiger Ladung auf.
Da ich [...]]]></description>
			<content:encoded><![CDATA[<p>Einige Modellreihen von ThinkPad Akkus weisen einen Defekt auf der dazu f&#252;hrt, dass die Akkus nach kurzen Zeit nur noch eine geringe verf&#252;gbare Kapazit&#228;t aufweisen. Bei dem Akku eines ThinkPads war genau so ein Akku verbaut und er wies nach nicht einmal einem Jahr nur noch 33% seiner urspr&#252;nglichen Kapazit&#228;t bei vollst&#228;ndiger Ladung auf.</p>
<p>Da ich in den letzten Wochen recht viel um die Ohren hatte fand ich keine Zeit mich mit dem Austausch zu besch&#228;ftigen, was ja in der Regel nicht so schnell von statten geht. Gestern habe ich mich dann aber doch einmal dazu durchgerungen das Thema anzugehen. Nach einer kurzen Suche bei Google &#252;ber die Typnummer des Akkus kam ich dann auch direkt auf die Seite von Lenovo, auf der der Austauschvorgang beschrieben wurde.</p>
<p><span id="more-654"></span></p>
<h2>Akkutausch in 2 Minuten</h2>
<p>Die ganze Sache hat dann ca. 2 Minuten gedauert. Auf der <a href="http://www-307.ibm.com/pc/support/site.wss/document.do?lndocid=BATT-082009">Website zum Akkutausch</a> konnte man sich ein kleines Diagnoseprogramm runterladen, das einem anzeigt, ob der Akku f&#252;r den kostenlosen Austausch in Frage kommt. Das Tool best&#228;tigte mir dann, dass mein Akku bei den defekten Modellen dabei ist und nach einem Klick auf einen Link kam ich direkt auf ein Formular, in das schon die Seriennummer und die Typnummer eingetragen waren. Nun musste ich nur schnell meinen Namen und die Adressdaten eintragen und das Formular absenden.</p>
<p>Ich bekam sofort die Meldung, dass der Akku mir schnellstm&#246;glich auf dem Postweg zugeschickt wird. Das hat mich erst einmal &#252;berrascht. Bei vielen anderen Herstellern bekommt man erst einmal eine RMA Nummer, mit der man dann, meist auf eigene Kosten (die aber manchmal erstattet werden), das defekte Ger&#228;t einschicken muss. Erst dann wird das neue Ger&#228;t zur&#252;ckgeschickt. Nicht so bei Lenovo, denn hier habe ich ein paar Stunden sp&#228;ter schon eine Mail mit dem Tracking-Code f&#252;r das UPS Paket bekommen. Ich kann mich also schon bald &#252;ber den neuen Akku freuen.</p>
<h2>Liste der betroffenen Akkutypen</h2>
<p>Hier eine kleine Liste der betroffenen Akkus. Wer also selbst ein ThinkPad besitzt sollte kontrollieren, ob der eigene Akku zu den betroffenen geh&#246;rt:</p>
<table rules="all" style="border: 1px solid black;">
<tbody>
<tr>
<th align="center"><strong>ThinkPad Modelle</strong></th>
<th align="center"><strong>Akku FRU Teilenummer</strong></th>
</tr>
<tr>
<td align="center">R60, R60e, R60i R61, R61e, R61i, T60, T60p, T61, T61p</td>
<td align="center">42T4546, 42T4566, 92P1141</td>
</tr>
<tr>
<td align="center">X60, X60s, X61, X61s</td>
<td align="center">42T4550, 42T4567, 42T4568, 92P1169, 92P1173, 93P5028, 93P5030</td>
</tr>
</tbody>
</table>
<p><a href="http://www-307.ibm.com/pc/support/site.wss/document.do?lndocid=BATT-082009">Quelle: ibm.com</a></p>
<h2>Fazit</h2>
<p>Es gibt also doch noch kundenfreundliche und unb&#252;rokratische Verfahren zum Austausch von defekten Komponenten. Andere Notebook Hersteller sollten sich daran ein Beispiel nehmen. Denn die unb&#252;rokratischen H&#252;rden sorgen einerseits bei Benutzter zu Frust &#252;ber den Hersteller, was zur Folge haben kann, dass der n&#228;chste Laptop bei einem anderen Hersteller gekauft wird. Andererseits kostet es denn Hersteller auch viel mehr, da in diesem Fall die Service-Mitarbeiter damit besch&#228;ftigt sind die Anfragen zu beantworten und die eingeschickten Teile selbst noch einmal zu testen.</p>
<p>Hattet ihr auch schon einmal ein so positives Erlebnis mit Herstellern? Oder seid ihr immer an den Garantiebedingungen und b&#252;rokratischen Abl&#228;ufen verzweifelt? &#220;ber Kommentare w&#252;rde ich mich wie immer sehr freuen.</p>
<p><strong>Update</strong>: Gestern war der Akku schon da. Das nenne ich mal wirklich eine z&#252;gige Zustellung. Dienstag Abend beauftragt und am Freitag schon da!</p>

<p><a href="http://feedads.g.doubleclick.net/~a/UtuRN-E5I3zmrBze2b6kK6ugMd4/0/da"><img src="http://feedads.g.doubleclick.net/~a/UtuRN-E5I3zmrBze2b6kK6ugMd4/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/UtuRN-E5I3zmrBze2b6kK6ugMd4/1/da"><img src="http://feedads.g.doubleclick.net/~a/UtuRN-E5I3zmrBze2b6kK6ugMd4/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/Kau-boysBlog/~4/DaRMM32FlzI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kau-boys.de/allgemein/kundenservice-wie-er-sein-sollte-akkutausch-bei-lenovo/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kau-boys.de/allgemein/kundenservice-wie-er-sein-sollte-akkutausch-bei-lenovo</feedburner:origLink></item>
		<item>
		<title>Arrays und andere komplexe Daten mit PHP in einer MySQL-Datenbank speichern</title>
		<link>http://feedproxy.google.com/~r/Kau-boysBlog/~3/8jBamF6zGeM/arrays-und-andere-komplexe-daten-mit-php-in-einer-mysql-datenbank-speichern</link>
		<comments>http://kau-boys.de/webentwicklung/arrays-und-andere-komplexe-daten-mit-php-in-einer-mysql-datenbank-speichern#comments</comments>
		<pubDate>Sun, 24 Jan 2010 00:11:06 +0000</pubDate>
		<dc:creator>Bernhard</dc:creator>
				<category><![CDATA[Webentwicklung]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://kau-boys.de/?p=643</guid>
		<description><![CDATA[Viele von euch werden wohl schon einmal vor dem Problem gestanden haben, dass sie ein Array oder ein Objekt in der Datenbank speichern mussten. Hier m&#246;chte ich ein paar Vorschl&#228;ge unterbreiten, wie man das Problem nicht l&#246;sen sollte und wie es besser gehen kann.
Der schlechte Weg
Die einfachste und gleichzeitig auch schlechteste Methode w&#228;re es, f&#252;r [...]]]></description>
			<content:encoded><![CDATA[<p>Viele von euch werden wohl schon einmal vor dem Problem gestanden haben, dass sie ein Array oder ein Objekt in der Datenbank speichern mussten. Hier m&#246;chte ich ein paar Vorschl&#228;ge unterbreiten, wie man das Problem nicht l&#246;sen sollte und wie es besser gehen kann.</p>
<h2>Der schlechte Weg</h2>
<p>Die einfachste und gleichzeitig auch schlechteste Methode w&#228;re es, f&#252;r jeden Index eines Arrays oder jede Eigenschaft eines Objekts eine neue Spalte zu erzeugen. Bei diesem Ansatz werden unter Umst&#228;nden viele Zeilen erzeugt, die nicht immer einen Wert enthalten. Das ist zwar nicht so gravierend, aber durch diesen Ansatz erh&#246;ht sich auch die Anzahl der Spalten schnell auf eine un&#252;bersichtliche Anzahl. Zuletzt ist es hierbei bei jeder &#196;nderung des Arrays oder Objekts notwendig die Datenbanktabelle anzupassen.</p>
<p><span id="more-643"></span></p>
<h2>Eine bessere L&#246;sung gef&#228;llig?</h2>
<p>Etwas besser L&#246;sung, die fast immer funktioniert aber nicht f&#252;r alle F&#228;lle optimal ist, w&#228;re eine Serialisierung des Arrays oder Objekts. Hierbei werden die Daten mit der <a href="http://de.php.net/manual/en/function.serialize.php">serialize()</a> Funktion in einen String konvertiert und k&#246;nnen somit direkt in eine <a href="http://dev.mysql.com/doc/refman/5.1/en/char.html">VARCHAR</a> oder <a href="http://dev.mysql.com/doc/refman/5.1/en/blob.html">TEXT</a> Spalte speichert werden. Dabei muss der String nat&#252;rlich noch durch die Funktion <a href="http://de.php.net/manual/en/mysqli.real-escape-string.php">real_escape_string()</a> (in diesem Beispiel von der MySQLi Klasse) &#8220;escaped&#8221; werden.</p>
<h3>Speichern der Daten</h3>
<pre class="brush: php;">
// Das zu speichernde Array
$array = array('vorname' =&gt; 'Max', 'name' =&gt; 'Mustermann');
// Serialisieren der Daten
$string = serialize($array);
// Speichern der Daten
$mysqli-&gt;query('INSERT INTO table_name (array) VALUES (&quot;'.$mysqli-&gt;real_escape_string($string).'&quot;)'))
</pre>
<p>Das Beispiel setzt nat&#252;rlich voraus, dass die Variable <code>$mysqli</code> eine Instanz der MySQLi Klasse mit einer g&#252;ltige Verbindung zu einer Datenbank enth&#228;lt. Wir haben hier ein einfaches assoziatives Array, das serialisiert wird und anscheinend gespeichert wird. Die serialisierten Daten sehn in diesem Beispiel wie folgt aus:</p>
<h3>Der zu speichernde String</h3>
<pre class="brush: plain; gutter: false;">
a:2:{s:7:&quot;vorname&quot;;s:3:&quot;Max&quot;;s:4:&quot;name&quot;;s:10:&quot;Mustermann&quot;;}
</pre>
<p>Das Auslesen der Daten wird mit der Funktion <a href="http://de.php.net/manual/en/function.unserialize.php">unserialize()</a> durchgef&#252;hrt, die aus dem String wieder ein assoziatives Array erzeugt. Dazu lesen wir zuerst die Daten mit einem gew&#246;hnlichen Query aus und konvertieren anschlie&#223;end die Daten:</p>
<h3>Auslesen der Daten</h3>
<pre class="brush: php;">
// Auslesen der Daten
$result = $mysqli-&gt;query('SELECT array FROM table_name');
$row = $result-&gt;fetch_assoc();
$string = $row['array'];
// Unserialisieren der Daten
$array = unserialize($string);
</pre>
<p>Diese Methode zum Speichern von komplexen Daten funktioniert recht gut, aber der serialisierte String ben&#246;tigt dabei mehr Speicherplatz als f&#252;r ein normales assoziatives Array eigentlich n&#246;tig w&#228;re. Wie es eleganter geht zeige ich euch im n&#228;chsten Beispiel.</p>
<h2>Die elegante L&#246;sung mit JSON</h2>
<p>Das Format <a href="http://de.wikipedia.org/wiki/JSON">JSON</a> entspringt zwar der Skriptsprache JavaScript, aber es wird zu Zeiten von AJAX sehr oft auch serverseitig verwendet und erzeugt. Da die meisten serverseitigen Sprachen also auch JSON unterst&#252;tzen bietet es sich auch f&#252;r die Speicherung von komplexeren Datenstrukturen an. Die Anpassung des vorherigen Quellcodes beschr&#228;nkt sich dabei auch auf eine einzige Zeile. Wir ersetzen lediglich die serialize() durch die <a href="http://de.php.net/manual/en/function.json-encode.php">json_encode()</a> Funktion. Die Zeile 6 aus dem vorherigen Quellcode sieht dann folgt aus:</p>
<h3>Speichern der Daten</h3>
<pre class="brush: php; first-line: 3;">
...
$string = serialize($array);
...
</pre>
<p>Hierbei werden die Datei des assoziativen Arrays in die JSON Notation konvertiert. Hierbei ist der resultierende String kompakter als bei der Serialisierung, da die L&#228;nge der einzelnen Arraywerte nicht und Datentypen nicht gespeichert werden:</p>
<h3>Der zu speichernde String</h3>
<pre class="brush: jscript; gutter: false;">
{&quot;vorname&quot;:&quot;Max&quot;,&quot;name&quot;:&quot;Mustermann&quot;}
</pre>
<p>Beim Lesen der Daten aus der Datenbank m&#252;ssen sie dann selbstverst&#228;ndlich auch wieder in das urspr&#252;ngliche Format zur&#252;ck konvertiert werden. Dabei kommt wie ihr schon vermutet die Funktion <a href="http://de.php.net/manual/en/function.json-decode.php">json_decode()</a> zum Einsatz. Diese erzeugt aber normalerweise ein Standard-Objekt. Um das in unserem Beispiel verwendete assoziative Array zu erhalten, wird als zweiter Paramater &#8220;true&#8221; &#252;bergeben. Der &#196;nderung am Quellcode aus dem vorherigen Beispiel sieht dann wie folgt aus:</p>
<h3>Auslesen der Daten</h3>
<pre class="brush: php; first-line: 5;">...
$array = json_decode($string, true);
</pre>
<p>Die Verwendung von JSON sichert nicht nur die Daten sondern auch die Schl&#252;ssel eines Arrays. Dabei spielt es keine Rolle, ob das Array assoziativ ist oder Zahlen als Schl&#252;ssel verwendet. Auch wird die Sortierung dabei nicht ver&#228;ndert. Wer lediglich die Werte eines Array speichern m&#246;chte, also keine Schl&#252;ssel ben&#246;tigt, kann auch einen noch einfacheren Weg gehen.</p>
<h2>Array in der Datenbank light</h2>
<p>Der einfachste Werte mehrere Daten eines Array in einer Datenbank zu speichern sind die Funktionen <a href="http://de.php.net/manual/en/function.explode.php">explode()</a> und <a href="http://de.php.net/manual/en/function.implode.php">implode()</a>. Hierbei werden die einzelnen Werte des Arrays durch den &#8220;Delimiter&#8221;, den man als ersten Parameter angibt voneinander getrennt bzw. miteinander verbunden. Auch bei dieser Variante m&#252;ssen in den beiden Beispiel-Quellcodes nur die Funktionen f&#252;r die Umwandlung ausgetauscht werden. Zu beachte ist hierbei, dass der &#8220;Delimiter&#8221; nicht in den Werten vorkommen darf. Wer also beispielsweise ein Array mit Datumsangaben im Format 2010-01-23 mit implode verbinden m&#246;chte, darf nicht den Bindestrich als &#8220;Delimiter&#8221; verwenden.</p>
<p>Die Werte k&#246;nnen wie auch zuvor in einer VARCHAR oder TEXT Spalte gespeichert werden. Sehr hilfreich sind die beiden Funktionen aber auch beim Speichern in einer Spalte mit dem Spaltentyp <a href="http://">SET</a>. Da hierbei aber die Werte zus&#228;tzlich von Anf&#252;hrungsstrichen umgeben sein m&#252;ssen, muss der &#8220;Delimiter&#8221; auch die Anf&#252;hrungsstriche enthalten. Die implode Funktion w&#252;rde in der Speicherfunktion dann wie folgt eingesetzt:</p>
<h3>Speichern der Daten in einer SET Spalte</h3>
<pre class="brush: php; first-line: 3;">
...
$string = implode('&quot;, &quot;', $array);
...
</pre>
<h2>Fazit</h2>
<p>Wie ihr also seht, gibt es viele Wege komplexere Daten in einer Datenbank zu speichern. Das Beispiel mit JSON als Repr&#228;sentation sollte in jeder serverseitigen Skriptsprache funktionieren, die JSON unterst&#252;tzt. Solltet ihr PHP verwenden m&#252;sst ihr nat&#252;rlich auch sicherstellen, dass JSON bei euch aktiviert ist. Am einfachsten geht das wie immer mit Hilfe der <a href="http://de.php.net/manual/en/function.phpinfo.php">phpinfo()</a> Funktion, die in der Ausgabe einen &#8220;json&#8221; Abschnitt haben sollte.</p>
<p>Diejenigen von euch, die einen WordPress Blog haben und sich schon einmal die Datenbanktabelle angesehen haben, werden vermutlich die JSON Strings schon gesehen haben. Den WordPress speichert z.B. Arrays eines Plugins automatisch in der JSON Notation in der &#8220;options&#8221; Tabelle ab. Das macht es einem Pluginentwickler sehr einfach das Array zu speichern.</p>
<p>Ich hoffe, dass euch das kleine Tutorial weiterhelfen oder auf neue Ideen bringen konnte. &#220;ber Anregungen w&#252;rde ich mich wie immer sehr freuen.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/bhBO6yROo1qtYDlgySztjzFjaiw/0/da"><img src="http://feedads.g.doubleclick.net/~a/bhBO6yROo1qtYDlgySztjzFjaiw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/bhBO6yROo1qtYDlgySztjzFjaiw/1/da"><img src="http://feedads.g.doubleclick.net/~a/bhBO6yROo1qtYDlgySztjzFjaiw/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/Kau-boysBlog/~4/8jBamF6zGeM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kau-boys.de/webentwicklung/arrays-und-andere-komplexe-daten-mit-php-in-einer-mysql-datenbank-speichern/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kau-boys.de/webentwicklung/arrays-und-andere-komplexe-daten-mit-php-in-einer-mysql-datenbank-speichern</feedburner:origLink></item>
		<item>
		<title>Spam oder kein Spam? Mit Akismet keine Frage!</title>
		<link>http://feedproxy.google.com/~r/Kau-boysBlog/~3/rlq8pm2NglE/spam-oder-kein-spam-mit-akismet-keine-frage</link>
		<comments>http://kau-boys.de/wordpress/spam-oder-kein-spam-mit-akismet-keine-frage#comments</comments>
		<pubDate>Mon, 18 Jan 2010 12:45:03 +0000</pubDate>
		<dc:creator>Bernhard</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://kau-boys.de/?p=638</guid>
		<description><![CDATA[Jeder der einen WordPress Blog installiert, bekommt automatisch das Akismet Plugin mitgeliefert. Dabei handelt es sich um ein Plugin zum Erkennen von Spam-Kommentaren. Wer es nutzen m&#246;chte, ben&#246;tigt allerdings einen API-Key, den jeder Benuzter von WordPress.com kostenlos bekommt. Wer so wie ich seinen Blog selbst hostet, sollte sich trotzdem bei WordPress.com anmelden um einen API [...]]]></description>
			<content:encoded><![CDATA[<p>Jeder der einen WordPress Blog installiert, bekommt automatisch das Akismet Plugin mitgeliefert. Dabei handelt es sich um ein Plugin zum Erkennen von Spam-Kommentaren. Wer es nutzen m&#246;chte, ben&#246;tigt allerdings einen API-Key, den jeder Benuzter von <a href="http://wordpress.com">WordPress.com</a> kostenlos bekommt. Wer so wie ich seinen Blog selbst hostet, sollte sich trotzdem bei WordPress.com anmelden um einen API Key zu bekommen.</p>
<p><span id="more-638"></span></p>
<p>Ich selbst habe Akismet nach ca. einer Woche aktiviert. Am Anfang gab es noch so gut wie keine Kommentare auf meinem Blog. Allm&#228;hlich sind dann aber diverse Spam-Bots auf meinen Blog aufmerksam geworden. Von Pflichangabe wie E-Mail wollte ich eigentlich absehen und auch ein Captcha finde ich pers&#246;nlich sehr nervig, wenn ich auf einem Blog oft einen Kommentar hinterlasse. Daher habe ich Akismet getestet uns bin seither sehr zufrieden damit. Alle Mails zu Medikamente, Casinos, Geld verdienen und so manch nicht jugendfreiem Thema werden dadurchz wirksam geblockt. F&#252;r den unwissenden Blogbetreiber ist es auch manchmal recht schwer die gut getarnten Kommentare zu entlavern, die z.B. den Blog loben, nur um damit einen <a href="http://de.wikipedia.org/wiki/R%C3%BCckverweis">Backlink</a> zu setzen und den Blogbesucher dann auf eine zweifelshafte Seite zu lenken.</p>
<p>Ich kontrolliere alle als Spam markierte Kommentare mit Hilfe meines <a href="http://kau-boys.de/webentwicklung/kau-boys-comment-notification-plugin">Kommentar-Feed Plugins</a> per Outlook. Das dauert pro Tag nur ein paar Sekunden und ich kann damit Kommentare finden, die von Akismet f&#228;lschlicherweise als Spam markiert wurden, was aber extrem selten passiert.</p>
<p>Mein Spam/Ham Verh&#228;ltnis, wie es die Akismet-Statistiken anzeigen ist zur Zeit bei ca. 1:22 was also bedeutet, dass auf einen guten Kommentar 22 Spam Kommentare kommen. Mein Aksimet &#8220;Yummy Pie&#8221; sieht also zur zeit wie folgt aus:</p>
<p class="aligncenter">
<img src="http://kau-boys.de/wp-content/uploads/2010/01/Akismet-Yummy-Pie.png" alt="Akismet Yummy Pie" title="Akismet Yummy Pie" />
</p>
<p>Wem dieser Kuchen genauso wenig schmeckt wie mir, der kann gerne etwas dagegen unternehmen, indem er mal das ein oder andere Kommentar hinterl&#228;sst. Die H&#252;rden dazu habe ich wie gesagt sehr niedrig gesetzt.</p>
<p>Allen Lesern, die selbst einen Blog betreiben und noch kein Akismet einsetzen, kann ich dies nur nochmals empfehlen. Es ben&#246;tigt keinen gro&#223;en Aufwand und erspart einem viel Zeit beim aussortieren des Spams. Die n&#228;chste Plugin Empfehlung wird wohl &#252;ber <a href="http://wordpress.org/extend/plugins/wptouch/">WPtouch</a> sein, dass ich seit Anfang des Jahres einsetze. Der ein oder andere Handy-Surfer wird es wohl schon bemerkt haben.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/PDD6MVeppDnmzlB_llIAyqqzacQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/PDD6MVeppDnmzlB_llIAyqqzacQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/PDD6MVeppDnmzlB_llIAyqqzacQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/PDD6MVeppDnmzlB_llIAyqqzacQ/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/Kau-boysBlog/~4/rlq8pm2NglE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kau-boys.de/wordpress/spam-oder-kein-spam-mit-akismet-keine-frage/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://kau-boys.de/wordpress/spam-oder-kein-spam-mit-akismet-keine-frage</feedburner:origLink></item>
		<item>
		<title>Spendenaufruf für Haiti mal anderes</title>
		<link>http://feedproxy.google.com/~r/Kau-boysBlog/~3/r_ZSsjq4fls/spendenaufruf-fuer-haiti-mal-anderes</link>
		<comments>http://kau-boys.de/allgemein/spendenaufruf-fuer-haiti-mal-anderes#comments</comments>
		<pubDate>Thu, 14 Jan 2010 17:02:42 +0000</pubDate>
		<dc:creator>Bernhard</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://kau-boys.de/?p=630</guid>
		<description><![CDATA[In meinem WordPress Dashboard (der Administrations-Startseite) war heute ein interessanter Artikel mit dem Titel Ich will euer Geld aufgef&#252;hrt. So ein Artikel macht mich nat&#252;rlich neugierig.
Es handelt sich um einen Spendenaufruf f&#252;r die Kindenothilfe, die sich auch um die Opfer der Erdbebenkatastrophe von Haiti k&#252;mmert. Frank B&#252;ltge, der Autor der Seite, spendet hierbei den zweifachen [...]]]></description>
			<content:encoded><![CDATA[<p>In meinem WordPress Dashboard (der Administrations-Startseite) war heute ein interessanter Artikel mit dem Titel <a href="http://bueltge.de/ich-will-euer-geld/1089/">Ich will euer Geld</a> aufgef&#252;hrt. So ein Artikel macht mich nat&#252;rlich neugierig.</p>
<p>Es handelt sich um einen Spendenaufruf f&#252;r die <a href="http://www.kindernothilfe.de/">Kindenothilfe</a>, die sich auch um die Opfer der Erdbebenkatastrophe von Haiti k&#252;mmert. Frank B&#252;ltge, der Autor der Seite, spendet hierbei den zweifachen Betrag aller seiner Paypal-Spenden des letzen Jahres an die Kindernothilfe. Ich finde die Idee richtig gut. Auch ich hatte vor einen Betrag zu spenden, aber da auf meinem Paypal-Account bisher noch nicht ein Cent an Spenden eingegangen ist, habe ich mich dazu entschieden meine AdSense Einnahmen zu verdoppeln und diese zu spenden.</p>
<p>Auch Google ruft auf seiner Startseite zum Spenden auf und jeder von uns wird ja noch den ein oder anderen Euro &#252;brig haben. Das Spenden per Paypal ist ja auch keine allzu gro&#223;e Sache und jeder Euro hilft.</p>
<p>Wenn hierdurch jemand zus&#228;tzlich dazu ermutigt wurde mir auch mal einen kleinen Betrag zu spenden, weil er z.B. mit einem meiner Plugins zufrieden ist, umso besser. Aber die Menschen auf Haiti ben&#246;tigen diese zur Zeit sehr viel dringender. <a href="http://www.tagesschau.de/spendenkonten/spendenhaiti100.html">Eine Liste mit Hilfsorganisationen</a>, die Spenden f&#252;r Haiti sammeln hat tagesschau.de zusammengestellt.</p>
<p>UPDATE: Habe soeben meine &#220;berweisung an <a href="http://www.plan-deutschland.de/">Plan International</a> vorgenommen. Dort bin ich zusammen mit meinen beiden Br&#252;dern schon seit &#252;ber 10 Jahren Pate. Wer sich auch daf&#252;r engagieren m&#246;chte, sollte sich einfach mal dort informieren.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/w2PZd3muD3BCdkQRAmYsHJuSrpc/0/da"><img src="http://feedads.g.doubleclick.net/~a/w2PZd3muD3BCdkQRAmYsHJuSrpc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/w2PZd3muD3BCdkQRAmYsHJuSrpc/1/da"><img src="http://feedads.g.doubleclick.net/~a/w2PZd3muD3BCdkQRAmYsHJuSrpc/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/Kau-boysBlog/~4/r_ZSsjq4fls" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kau-boys.de/allgemein/spendenaufruf-fuer-haiti-mal-anderes/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kau-boys.de/allgemein/spendenaufruf-fuer-haiti-mal-anderes</feedburner:origLink></item>
		<item>
		<title>Einen WordPress Blog mehrsprachig anbieten mit dem qTranslate Plugin</title>
		<link>http://feedproxy.google.com/~r/Kau-boysBlog/~3/FyrE67X4L7g/einen-wordpress-blog-mehrsprachig-anbieten-mit-dem-qtranslate-plugin</link>
		<comments>http://kau-boys.de/wordpress/einen-wordpress-blog-mehrsprachig-anbieten-mit-dem-qtranslate-plugin#comments</comments>
		<pubDate>Wed, 13 Jan 2010 13:11:09 +0000</pubDate>
		<dc:creator>Bernhard</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://kau-boys.de/?p=626</guid>
		<description><![CDATA[Wie bereits angek&#252;ndigt folgt hier nun ein weiterer Artikel &#252;ber eines der von mir verwendeten Plugins. Heute geht es um das Plugin qTranslate, das die Grundlage f&#252;r die Mehrsprachigkeit meines Blogs bildet. Ich habe im Vorfeld viele Plugins f&#252;r mehrsprachige WordPress Blogs getestet, aber keines war nur ann&#228;hernd so umfangreich und zuverl&#228;ssig wie qTranslate.
Installation und [...]]]></description>
			<content:encoded><![CDATA[<p>Wie bereits angek&#252;ndigt folgt hier nun ein weiterer Artikel &#252;ber eines der von mir verwendeten Plugins. Heute geht es um <a href="http://www.qianqin.de/qtranslate/">das Plugin qTranslate</a>, das die Grundlage f&#252;r die Mehrsprachigkeit meines Blogs bildet. Ich habe im Vorfeld viele Plugins f&#252;r mehrsprachige WordPress Blogs getestet, aber keines war nur ann&#228;hernd so umfangreich und zuverl&#228;ssig wie qTranslate.</p>
<h2>Installation und grundlegende Einstellungen des Plugins</h2>
<p>Das Plugin kann genauso einfach installiert werden wie jedes andere auch. Es ist prinzipiell auch keine Anpassung irgendwelcher Zugriffsrechte notwendig und es m&#252;ssen auch keine &#196;nderungen am Theme vorgenommen werden. Das hat mich zuerst etwas &#252;berrascht, aber es hat auf anhieb funktioniert.</p>
<p><span id="more-626"></span></p>
<p>Bevor ihr das Plugin verwendet, solltet ihr ein paar grundlegende Einstellungen &#252;ber das Adminmen&#252;, das ihr &#252;ber den Link &#8220;Sprachen&#8221; erreicht, vornehmen. Als erstes solltet ihr nat&#252;rlich festlegen, welche Sprachen ihr in eurem Blog anbieten m&#246;chtet und welche davon die Standardsprache ist. Die Sprache, die ihr hier einstellt wird aber nicht in jedem Fall verwendet. Nehmen wir z.B. an, dass einer eurer Besucher in seinem Browser Englisch als Standardsprache ausgew&#228;hlt hat. Dieser Besucher bekommt dann automatisch den Blog in englischer Sprache pr&#228;sentiert, vorasugesetzt, ihr bietet ihn auch in englisch an. Sollte aber ein Besucher z.B. Spanisch gew&#228;hlt haben, und ihr bietet die Sprache nicht an, dann wird die zuvor gew&#228;hlte Standardsprache pr&#228;sentiert.</p>
<p>Die zweite wichtige Option betrifft die Links, die f&#252;r die anderen Sprachversionen verwendet werden sollen. Diese Option findet ihr unter &#8220;Erweiterte Einstellungen&#8221;. Ich verwende f&#252;r meinen Blog den Query-Modus, da ich bei den beiden andern Modi Probleme mit verschiedenen Plugins hatte.</p>
<p>Zuletzt solltet ihr euch noch die &#252;brigen erweiterten Funktionen ansehen und &#252;berlegen, welche davon f&#252;r euch sinnvoll w&#228;re. Sehr wichtig k&#246;nnte hier die &#8220;Datum / Zeit Konvertierung&#8221; sein, da je nach verwendeter Datumfunktion in euerm Tempalte sonst keine korrekten Zeit- und Datumsangaben ausgegeben werden k&#246;nnen.</p>
<h2>Verwendung des Plugins</h2>
<p>Sobald ihr einen neuen Artikel verfassen m&#246;chtet, werden euch vermutlich zuerst die zus&#228;tzlichen Titel-Eingabefelder auffallen. Pro Sprache kann hier ein eigener Titel eingegeben werden. Wenn ihr den Blogtitel auch f&#252;r eure Permalinks verwendet, wird allerdings immer der Titel der Standardsprache f&#252;r den Permalink verwendet zzgl. Modifikation durch den zuvor eingestellen Modus.</p>
<p><img src="http://kau-boys.de/wp-content/uploads/2010/01/qTranslate-Neuer-Artikel.png" alt="qTranslate - Neuer Artikel" title="qTranslate - Neuer Artikel" /></p>
<p>Ebenfalls hinzugekommen ist ein Umschalter f&#252;r den Inhalt des Artikels, hier k&#246;nnte ihr jede Sprache in einem eigenen &#8220;Tab&#8221; bearbeiten. Ich erstelle in der Regel einen Artikel zuerst in deutsch und kopiere dann den gesamten Inhalt in den englischen Tab und ihn dort Absatz f&#252;r Absatz zu &#252;bersetzen. Somit kann ich Links, Bilder und Quelltexte an der Stelle direkt wiederverwenden. Einige der Bilder oder Quelltexte werden von mir aber auch in der englischen Version ausgetauscht bzw. ersetzt.</p>
<h2>&#220;bersetzung von Schlagw&#246;rtern und Kategorien</h2>
<p>Ein wenig versteckt ist die M&#246;glichkeit auch die Schlagw&#246;rter (Tags) und die Kategorien zu &#252;bersetzen. Wenn man beim Verfassen eines neuen Artikels ein neues Schlagwort oder eine neue Kategorie anlegt, dann wird erst einmal f&#252;r jede Sprache der Wert f&#252;r die Standardsprache verwendet. Ihr k&#246;nnt aber sehr einfach &#252;ber die Verwaltung der Schlagw&#246;rter und Kategorien im Adminmen&#252; alles f&#252;r die anderen Sprachen &#252;bersetzen. Diese &#220;bersetzung gilt dann f&#252;r denen Bereich, in dem die Schl&#228;gw&#246;rter eingesetzt werden. Auch Plugins f&#252;r Suchmaschinenoptimierung, die eventuell die Schlagw&#246;rter f&#252;r den META-Tag &#8220;keywords&#8221; verwenden, bekommen so den &#252;bersetzen Wert geliefert.</p>
<h2>Den Umschalter nicht vergessen</h2>
<p>Damit eure Benutzer auch zwischen den verschiedenen Sprachen hin- und herschalten k&#246;nnen, d&#252;rft ihr nat&#252;rlich den Umschalter nicht vergessen. Am einfachsten geht das mit dem von qTranslate bereitgestellten Widget, dass ihr in eine eurer Seitenleisten einbauen k&#246;nnt. Platziert es am besten sehr weit oben, damit ein Benutzer, der die Sprache eures Blogs nicht sofort versteht, direkt erkennen kann, dass es den Blog auch in anderen Sprachen gibt.</p>
<p>Ich w&#252;nsche euch nun viel Spa&#223; beim Testen von qTranslate. Wenn ihr Fragen oder Anmerkungen zum Artikel habt w&#252;rde ich mich wie immer &#252;ber einen Kommentar sehr freuen.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/YclMAbJ8GS81Ry-tDy2iYbvd5So/0/da"><img src="http://feedads.g.doubleclick.net/~a/YclMAbJ8GS81Ry-tDy2iYbvd5So/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/YclMAbJ8GS81Ry-tDy2iYbvd5So/1/da"><img src="http://feedads.g.doubleclick.net/~a/YclMAbJ8GS81Ry-tDy2iYbvd5So/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/Kau-boysBlog/~4/FyrE67X4L7g" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kau-boys.de/wordpress/einen-wordpress-blog-mehrsprachig-anbieten-mit-dem-qtranslate-plugin/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://kau-boys.de/wordpress/einen-wordpress-blog-mehrsprachig-anbieten-mit-dem-qtranslate-plugin</feedburner:origLink></item>
	</channel>
</rss>
