RSS Feed
Mär 11

Trefft mich auf dem WordCamp am 03.07.2010 in Berlin

Veröffentlich am Donnerstag, 11. Mär 2010 in WordPress

Mein Dashboard wurde heute von WordPress-Deutschland Nachrichten über das WordCamp 2010 überschüttet. Da wollte ich doch gleich mal nachsehen, wo es dieses Jahr stattfindet. Und was musste ich dort sehen? Es findet in Berlin statt und dazu noch an einem Samstag, genauer dem 03.07.2010.

Wer mich also schon immer mal persönlich treffen möchte hat dort die einmalige Gelegenheit dazu. Natürlich lohnt sich ein Besuch des WordCamp auch dann, wenn ihr etwas über die Macher hinter den ganzen Plugins und Themes erfahren möchtet und euch mit Gleichgesinnten austauschen möchtet. Es ist die Gelegenheit eure Fragen und Anregungen mit anderen Nutzern von WordPress zu diskutieren.

WordCamp 2010 Berlin Banner

Das Programm steht wie immer bei solchen Barcamps im Vorfeld noch nicht statt. Jeder kann auf der Website selbst eine Session zum Programm anmelden. Wenn ihr also ein tolles Thema rund um WordPress habt, dass ihr anderen vorstellen möchtet, dann meldet eure Session an.

Das WordCamp 2010 findet im betahaus statt. Ich finde das die perfekte Location dafür. Es basiert auf dem Prinzip des Coworking. Jeder arbeitet hier zwar für sich, aber anstelle ein eigenes kleines Büro zu mieten und dort alleine und verlassen zu arbeiten, trifft man sich hier mit vielen anderen kreativen Köpfen. Da ich schon immer mal das betahaus besuchen wollte trifft sich das also ganz gut.

Also, wer von euch jetzt Lust bekommen hat auch am WordCamp teilzunehmen sollte sich schnell auf der Website anmelden, da die Teilnehmerzahl auf 200 begrenzt ist. Die Schutzgebühr für das WordCamp beträgt 10€, die aber vollständig an eine gemeinnützige Organisation gespendet werden. Vermutlich ist die Anmeldung nicht kostenlos, damit sich auch nur diejenigen Anmelden, die wirklich kommen möchten. Es wäre doch schade, wenn am Ende wie im letzten Jahr ein Viertel von den 200 Angemeldeten nicht kommen.

In diesem Sinne, bis Juli auf dem WordCamp! Und wer mich dann wirklich treffen möchte kann gerne vorher mit mir Kontakt aufnehmen. Am besten hinterlasst ihr hier einen Kommentar :)

  • Twitter
  • email
  • RSS
  • Facebook
  • MySpace
  • Google Bookmarks
  • MisterWong.DE
  • del.icio.us
  • LinkArena
  • Digg
  • Sphinn
  • Mixx
  • Reddit
  • Slashdot
  • Yigg
  • Technorati
Mär 9

Assoziatives Array als HTML Tabelle ausgeben

Veröffentlich am Dienstag, 9. Mär 2010 in Webentwicklung

Sehr häufig wird gefordert ein assoziatives Array als HTML Tabelle auszugeben. Ich nutze hier sehr oft die implode() Funktion, um dabei mit möglichst wenig Quellcode zu dem Gewünschten Ergebnis zu kommen. Da ich meine Lösung wirklich sehr schön und genial einfach finde, wollte ich euch kurz die Funktion präsentieren. Als auszugebendes Array nehmen wir das MySQL-Debugging Array aus meinem vorherigen Artikel MySQL unter PHP debuggen mit einer eigenen MySQL Klasse.

function array_to_table($a){
	$t='<table>';
	$t.='<tr><th>'.implode('</th><th>', array_keys($a[0])).'</th></tr>';
	foreach($a as $row){
		$t.= '<tr><td>'.implode('</td><td>', $row).'</td></tr>';
	}
	return $t.='</table>';
}

// Ausgabe der Tabelle
echo array_to_table($mysqli->queries);

(weiterlesen…)

  • Twitter
  • email
  • RSS
  • Facebook
  • MySpace
  • Google Bookmarks
  • MisterWong.DE
  • del.icio.us
  • LinkArena
  • Digg
  • Sphinn
  • Mixx
  • Reddit
  • Slashdot
  • Yigg
  • Technorati
Mär 4

MySQL unter PHP debuggen mit einer eigenen MySQL Klasse

Veröffentlich am Donnerstag, 4. Mär 2010 in Webentwicklung

Bei einem meiner Projekte kam es zu ungewöhnlich langen Ladezeiten eines Formulars. Da hier allerdings auch sehr viele Datenbankabfragen ausgeführt werden müssen und dabei auch noch die Werte per COUNT() gezählt werden wunderten mich die Zeiten nicht wirklich.

Nun wollte ich natürlich wissen, welche Abfrage dabei besonders viel Zeit in Anspruch nimmt um dann gezielt optimieren zu können. Ich setze in dem Projekt auf die MySQLi Klasse von PHP. Da ich hierbei die Klasse objektorientiert nutze, war es sehr einfach möglich diese zu erweiterten. Eine Möglichkeit wäre es natürlich gewesen eine eigene Funktion zu schreiben, aber in diesem Fall hätte ich auch alle Skript anpassen müssen, in denen ich eine Query ausführe. Daher habe ich mich dazu entschlossen einfach die query() Funktion von MySQLi zu überschreiben. Hier ein stark vereinfachtes Beispiel, wie so etwas aussehen könnte:

<?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->error;
		}

		$end = microtime(true);

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

		$this->queries_time += $end - $start;

		return $result;
	}
}

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

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

?>

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 überschreiben wir die query() Funktion der MySQLi Klasse mit unserer Debugging-Klasse. Dort wird zuerst einmal zur Protokollierung der Ausführungszeit der Startzeitpunkt mit Hilfe der microtime() Funktion ermittelt. Anschließend wird der Query mit dem Aufruf parent::query($query) an die query() Funktion der MySQLi Klasse übergeben. Einen eventuell auftretenden Fehler speichern wir dabei in einer Variablen ab.

In Zeile 23 speichern wir die Endzeit des Query. Anschließend speichern wir alle Werte, die wir zur späteren Auswertung benötigen in einem Array gespeichert. Zusätzlich summieren wir noch alle Zeiten auf, um später die Gesamtdauer aller Statements bestimmen zu kö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 ä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ötigt wird. Das spart im produktiven Einsatz etwas Rechenzeit. Eine mögliche Bedingung könnte wie folgt aussehen:

if($debug){
	$mysqli = new mysqliDebugger('host', 'user', 'pass', 'name');
} else {
	$mysqli = new mysqli('host', 'user', 'pass', 'name');
}

Anstelle der $debug Variablen kö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ällen eure SQL-Statements für Unbefugte sichtbar werden könnten, was unter Umständen die Sicherheit eueres Systems gefährden könnte.

Nachdem wir die Daten gesammelt haben möchten wir sie natürlich auch ausgeben. Das solltet ihr auch wieder die vorherige Bedingung verwenden. Dazu erstellen wir einfach eine Tabelle, die die gesammelten Daten enthält:

<table style="border: 1px solid #000;" rules="all">
	<caption>Gesamtdauer: <?= $mysqli->queries_time ?></caption>
	<tr>
		<th>Anzahl</th>
		<th>Query</th>
		<th>Fehler</th>
		<th>Zeit</th>
	</tr>
<? foreach($mysqli->queries as $query) : ?>
	<tr>
		<td><?= $query['number'] ?></td>
		<td><?= $query['query'] ?></td>
		<td><?= $query['error'] ?></td>
		<td><?= $query['time'] ?></td>
	</tr>
<? endforeach ?>
</table>

Nehmen wir an, wir die Tabelle aus dem ersten Statement ist in der Datenbank nicht vorhanden. In diesem Fall würden wir einen SQL-Fehler erhalten. In der Tabelle können wir dann direkt den Fehler ermitteln und entsprechend das Statement korrigieren. Auch hier wird das Statement gespeichert und die Zeit gemessen.

Gesamtdauer: 0.0025820732116699
Anzahl Query Fehler Zeit
0 SELECT * FROM tablename Table ‘name.tablename’ doesn’t exist 0.00076198577880859
1 SELECT * FROM tablename2 0.0018200874328613

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önnt. Ihr könnt die Klasse natürlich auch noch nach euren Wünschen erweitern und auch andere Funktionen von MySQLi überschreiben. Wenn ihr, so wie ich, zentral an einer Stelle die Datenbankverbindung erzeugt könnt ihr durch die Bedingung aus dem zweiten Quellcode eure gesamte Applikation debuggen.

Ich habe damit in meinem Projekt schon zwei überflüssige Statements finden können und einige andere Statements noch weiter optimieren können. Ich hoffe, dass euch der Debugger auch bei eurer täglichen Arbeit unterstützen kann. Über Anregungen und Kommentare Wrede ich mich wie immer freuen.

  • Twitter
  • email
  • RSS
  • Facebook
  • MySpace
  • Google Bookmarks
  • MisterWong.DE
  • del.icio.us
  • LinkArena
  • Digg
  • Sphinn
  • Mixx
  • Reddit
  • Slashdot
  • Yigg
  • Technorati
Mär 3

Das Bermudadreieck des Internet Explorer – Oder: Wo zum Teufel ist mein Ordner hin?

Veröffentlich am Mittwoch, 3. Mär 2010 in Webentwicklung

Heute bin ich mal wieder auf ein sehr faszinierendes Problem mit dem Internet Explorer gestoß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 dummerweise das Gleichheitszeichen nach dem Short Open Tag in PHP vergessen. Mein Formular sah also in verkürzter Form wie folgt aus:

<form action="<? ABSOLUTER_PFAD ?>form.php">
...
</form>

(weiterlesen…)

  • Twitter
  • email
  • RSS
  • Facebook
  • MySpace
  • Google Bookmarks
  • MisterWong.DE
  • del.icio.us
  • LinkArena
  • Digg
  • Sphinn
  • Mixx
  • Reddit
  • Slashdot
  • Yigg
  • Technorati
Mär 2

Tutorial: Drag-and-Drop mit Scriptaculous – Teil 1: Draggable

Veröffentlich am Dienstag, 2. Mär 2010 in Webentwicklung

Heute möchte ich mein angekündigtes Tutorial über Drag-and-Drop starten. Das Ziel dieses Tutorials ist der Nachbau einer dynamischen Newsseite, wie ich sie in meinen Artikel Ö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 dem Schritt zur fertigen Seite nachvollziehen.

Im ersten Teil geht es um die Grundlage einer Seite mit Drag-and-Drop. Wir verwenden für dieses Tutorial die Drag-and-Drop Funktionalität von Scriptaculous, welches eine Erweiterung des Prototype Frameworks ist. Um die hier gezeigten Funktionen selbst nachprogrammieren zu können benötigt ihr also zuerst einmal die beiden Frameworks.

(weiterlesen…)

  • Twitter
  • email
  • RSS
  • Facebook
  • MySpace
  • Google Bookmarks
  • MisterWong.DE
  • del.icio.us
  • LinkArena
  • Digg
  • Sphinn
  • Mixx
  • Reddit
  • Slashdot
  • Yigg
  • Technorati
Mär 1

Weitere Sicherheitslücken beim Internet Explorer 6 aufgetreten

Veröffentlich am Montag, 1. Mär 2010 in Webentwicklung

Es vergeht fast keine Woche, in dem nicht neue Sicherheitslücken im Internet Explorer 6 bekannt werden. Dieses Mal sind die Versionen 6 und 7 fü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 Funktionen ihres Browsers zu deaktivieren. Dies ist aber nicht immer für den Benutzer möglich bzw. findet er oft die nötigen Einstellungen dazu nicht. Meiner Meinung nach wird durch diese Sicherheitslücken zunehmend die Angst vor JavaScript und Co. gestärkt. Das macht es für uns Webentwickler natürlich teilweise sehr schwer den effektiven und wohl dosierten Einsatz von clientseitigen Skriptsprachen zu rechtfertigen.

Nun kann man zwar nicht dem Internet Explorer die Schuld daran geben, denn schließlich tauchen bei jedem Browser mehrmals pro Jahr Sicherheitslücken auf. Aber beim Internet Explorer 6 häufen sich solche Fehler in letzter Zeit. Wenn das natürlich dazu fü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ündigt den Support für Windows XP ohne SP3 zum Juli einzustellen, aber auf ein Support Ende des IE6 warten wir bisher vergeblich.

Wenn ich mir zu meinem Geburtstag diesen Monat etwas von Microsoft wünschen dürfte, dann wäre es nicht das neue Office 2010, was ja im Juni erscheinen soll, sondern das Ende einer Ära im Browsermarkt.

  • Twitter
  • email
  • RSS
  • Facebook
  • MySpace
  • Google Bookmarks
  • MisterWong.DE
  • del.icio.us
  • LinkArena
  • Digg
  • Sphinn
  • Mixx
  • Reddit
  • Slashdot
  • Yigg
  • Technorati
Feb 26

Programme als Administrator in eingeschränktem Profil starten

Veröffentlich am Freitag, 26. Feb 2010 in Software

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ümmern. Ein sehr häufig auftretendes Problem ist dabei das Installieren von Programmen oder Updates. Da in unserem Büronetzwerk natürlich nicht jeder Benutzer ein Hauptbenutzer und schon gar kein Administrator ist, muss man dort als Admin tätig werden.

Zu Beginn meiner Admintätigkeit habe ich oftmals den Benutzer abmelden müssen aus Unwissenheit darüber, wie man unter einem eingeschränkten Profil ein Programm als Admin starten kann. Mittlerweile habe ich aber gelernt, dass man über die Kombination “Rechte Maustaste -> Ausführen als…” sehr einfach eine Installation als Admin ausführen kann.

(weiterlesen…)

  • Twitter
  • email
  • RSS
  • Facebook
  • MySpace
  • Google Bookmarks
  • MisterWong.DE
  • del.icio.us
  • LinkArena
  • Digg
  • Sphinn
  • Mixx
  • Reddit
  • Slashdot
  • Yigg
  • Technorati
Feb 25

Der Internet Explorer ist tot! Lang lebe der Internet Explorer!

Veröffentlich am Donnerstag, 25. Feb 2010 in Webentwicklung

Schon vor längerer Zeit hat Google angekündigt den Support für den Internet Explorer 6.0 fü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ärz 2010. Was anschließend beim Aufruf der entsprechenden Dienste mit dem Internet Explorer 6.0 zu sehen sein wird konnte ich noch nicht erfahren.

Da ich aber, wie in meinem Artikel Internet Explorer 6 unter Windows 7 nutzen mit dem Windows XP Mode 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 YouTube ist für Nutzer des Internet Explorers schon länger ein Hinweis zu sehen, der zum Update des Browsers auffordert:

(weiterlesen…)

  • Twitter
  • email
  • RSS
  • Facebook
  • MySpace
  • Google Bookmarks
  • MisterWong.DE
  • del.icio.us
  • LinkArena
  • Digg
  • Sphinn
  • Mixx
  • Reddit
  • Slashdot
  • Yigg
  • Technorati
Feb 24

Öffentlich-rechtlich und vorbildhaft – So muss eine Web 2.0 zu Olympia aussehen

Veröffentlich am Mittwoch, 24. Feb 2010 in Webentwicklung

An dieser Stelle muss ich mal ein Lob loswerden. Zurzeit laufen ja die Olympischen Winterspiele in Vancouver und Whistler. Und natürlich ist die Prä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älen der beiden Öffentlich-rechtlichen zu sehen. Das erwartet man auch, denn dafür zahlen wir ja auch brav unsere Gebühren.

Was man nicht unbedingt erwartet und was mich sehr überrascht hat ist der sehr gute Web 2.0 auftritt. Es ist immer sehr gut zu sehen, auf welchen Kanälen gerade etwas live zu sehen ist und was gerade für neue Entscheidungen gefallen sind. Außergewöhnlich ist allerdings, wie dynamisch sich die Seite an die eigenen Interessen anpassen lässt:

(weiterlesen…)

  • Twitter
  • email
  • RSS
  • Facebook
  • MySpace
  • Google Bookmarks
  • MisterWong.DE
  • del.icio.us
  • LinkArena
  • Digg
  • Sphinn
  • Mixx
  • Reddit
  • Slashdot
  • Yigg
  • Technorati
Feb 21

Blog nativ an IE6 angepasst und neues Plugin installiert

Veröffentlich am Sonntag, 21. Feb 2010 in Allgemein

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ür den IE6 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 Chris Wallace dann meine überarbeitete und lokalisierte Version mal endlich ins WordPress Verzeichnis aktualisiert.

Außerdem habe ich mich dazu entschlossen ein Plugin zu installieren, mit dem man ü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 Double-Opt-In Verfahren gewählt. Es heißt dann auch treffenderweise Subscribe To “Double-Opt-In” Comments. Da es aber leider nicht in mehreren Sprachen vorliegt und auch nicht wirklich angepasst werden kann, habe ich überall sowohl den deutschen als auch den englischen Text angegeben.

Bisher habe ich aus genau dieser fehlenden Unterstützung von Mehrsprachigkeit noch keines dieser Plugins eingesetzt. Aber Tanja 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ür euch alle diese neue Funktion im Angebot. Ihr könnte aber natürlich auch weiterhin einen RSS-Feed für die Kommentare zu einem Artikel abonnieren.

Ich hoffe, dass euch die Änderungen gefallen. Wenn ihr noch andere Plugins kennt, die die Nutzung des Blogs für euch komfortabler machen würde, dann könnt ihr mir gerne diese Plugins vorschlagen.

  • Twitter
  • email
  • RSS
  • Facebook
  • MySpace
  • Google Bookmarks
  • MisterWong.DE
  • del.icio.us
  • LinkArena
  • Digg
  • Sphinn
  • Mixx
  • Reddit
  • Slashdot
  • Yigg
  • Technorati