Nachdem mir gestern das – meiner Meinung nach äußerst sinnvolle – eclipse Plugin PHP Tools Integration (kurz PTI) begegnet ist, habe ich mich daran begeben es ein wenig zu testen. Schon deswegen weil es (für mich vor Allem anderen) in Sachen PHPUnit ein echter Fortschritt beim Arbeiten wäre. Einziges Problem dass ich bisher habe und was das Plugin für mich unbenutzbar macht: Wenn ich per Rechtsklick auf eine PHP-Datei “PHP Tools” -> “PHPUnit” -> “Create Test Case” klicke, behauptet eclipse (oder viel mehr das Plugin) “Project does not exist”. Angemerkt sollte noch sein, dass ich mit Mac OS X arbeite, mit Windows habe ich das Tool bisher noch nicht getestet, von daher weiß ich nicht ob das Problem dort ebenfalls auftritt.

Meine Versuche das Problem zu lösen sind bisher sämtlich wenig glamourös gescheitert. Dazu zählten unter anderem:

  1. Festlegen des Source Folders auf einen absoluten (und nicht zum projekt relativen Pfad)
  2. Anlegen eines neuen Projekts (für den Fall dass die Standardprojekt-Einstellungen nicht mehr funktionieren)
  3. Einbinden von PHPUnit als eigenes Projekt und “verknüpfen” des Testprojekts mit dem Projekt “PHPUnit”
  4. Die Tests sind sowohl mit der Entwickler- als auch der “normalen” Version gelaufen – beide Versionen lieferten die gleichen ausbleibenden Erfolge
  5. Google mit vielfältigen Suchanfragen zu meinem Problem quälen – außer Lobeshymnen (zumeist von Entwicklern, die (den Screenshots nach) mit Windows arbeiten nichts gefunden

Bisher hoffe ich noch das Problem so beheben zu können, evtl. auch mit Hilfe des einen oder anderen Kommentars. Ansonsten würde ich im Moment noch auf einen Bug des Plugins in Verbindung mit Mac OS X. Solange das Problem jedoch noch nicht behoben ist PTI bisher leider für mich unbenutzbar

Nachdem ich mich bereits seit längerer Zeit darüber geärgert habe, dass die SSL-Zertifikate meines Servers ständig aus zwei Gründen abgelehnt werden, habe ich mich daran gesetzt zumindest einen dieser Gründe zu beseitigen. Der Grund, den ich nicht beseitigen werde ist, dass das Zertifikat von mir selbst signiert wurde. Da ich im Moment weder das Geld habe noch die Lust dazu verspüre, mir ein CA-Zertifikat zu kaufen, werde ich das auch zunächst mal nicht ändern. Der andere Grund bezieht sich auf den Websitenamen selbst. Dieser ist laut Fehlermeldung nämlich auch ungültig – stimmt leider, da bisher nur das Zertifikat ausgestellt für die Domain “bytwo.de” verwendet wird.

Dazu sei gesagt, dass es sich bei meinem Webserver um einen lighty (lighttpd) in seiner aktuellen Version unter Debian Lenny handelt (Version: lighttpd-1.4.19). Leider habe ich bisher noch keinen Weg gefunden dieses Problem zu beheben. Klar – Zertifikate für unterschiedliche Domains einrichten ist kein Thema und auch schnell gemacht, ABER das ist auch nicht mein Problem, sondern die Tatsache, dass er scheinbar die Definition für die Zertifikate nicht anerkennt. Soll heißen ich habe eine globale Definition á la:

$SERVER["socket"] == "87.118.116.10:443" {
ssl.engine = "enable"
ssl.pemfile = "/pfad/zum/zertifikat.pem"

In der Host-Konfiguration (innerhalb des $SERVER["socket"]-Blocks) lässt sich dieser Pfad allerdings nicht mehr überschreiben. Zumindest hat sich der Lighty generell verweigert, das entsprechende Zerfikat zu verwenden und stattdessen immer wieder das “Standard”-Zertifikat verwendet. Ich weiß nicht ob es sich hierbei um einen Bug im Lighty handelt oder ich einfach nur zu doof bin die Konfiguration richtig hinzubiegen und da ich aktuell an dieser Stelle fest hänge wäre ich über jedwede Hilfe bei diesem Problem sehr dankbar.

JavaHL und Mac OS X

14.07.2009 | 13:39:15

Teilweise war es für mich ebenso ein Problem unter Mac OS X eclipse (eigentlich das subclipse-Plugin) zum Laufen zu bekommen, wie unter Windows. Dieses “Problem” ergab sich daraus, dass ich jedes mal wieder aufs Neue die entsprechenden Installationsquellen suchen musste. Gut, das könnte man auch damit begründen, dass ich einfach nur zu faul war die entsprechenden Seiten zu bookmarken ;-) (ist auch teilweise richtig). Inzwischen habe ich jedoch einen schöneren Weg gefunden – er heißt: MacPorts.

Die nötigen Binaries um Mac Ports zu installieren bekommt ihr hier: macports.org

Neben dem durchaus angenehmen Vorteil, über diese Quelle einige weitere Portierungen für Mac OS X aus der Linux-Welt zu bekommen (zum Beispiel wget) kann man sich hierüber auch die nötigen Pakete zur “reibungsfreien” Benutzung der JavaHL-Schnittstelle von subclipse installieren. Und zwar folgendermaßen:

sudo port install subversion subversion-javahlbindings

Nach Abschluss dieser Installation (und natürlich vorheriger Installation des subclipse-Plugins in eclipse) steht der Verwendung von JavaHL nun nichts mehr im Wege.

WordPress Update auf 2.7.1

15.02.2009 | 15:53:48

Nachdem ich heute (genauer gerade eben) auf Version 2.7.1 geupdated habe, meinte WordPress mir 90% aller Kommentare löschen zu müssen – genauer als Spam markieren zu wollen. Warum es das getan hat kann ich nicht sagen – nur dass es ziemlich nervig war. Nungut, Kommentare durch nen Backup von heute Nacht wieder hergestellt und gut war. Der Teil von heute war sowieso nur Spam – und der in nicht geringer Menge, was mich auch nicht sonderlich erfreut hat.

An die werten Spammer: Lasst diesen Blog in Ruhe, wenn ihr euren Müll loswerden wollt, dann doch bitte da wo er hingehört – in der Tonne.

subversion hairstyles

16.01.2009 | 10:01:09

Kann mir jemand verraten was genau das sein soll – ist in der persönlichen Readme (.subversion/README.txt) zu finden (unter Linux – Windows weiß ich im Moment nicht):

File locations
==============

Typically, Subversion uses two config directories, one for site-wide
configuration,

Unix:
/etc/subversion/servers
/etc/subversion/config
/etc/subversion/hairstyles
Windows:
%ALLUSERSPROFILE%\Application Data\Subversion\servers
%ALLUSERSPROFILE%\Application Data\Subversion\config
%ALLUSERSPROFILE%\Application Data\Subversion\hairstyles
REGISTRY:HKLM\Software\Tigris.org\Subversion\Servers
REGISTRY:HKLM\Software\Tigris.org\Subversion\Config
REGISTRY:HKLM\Software\Tigris.org\Subversion\Hairstyles

Wüsste zu gerne ob das nur ein Scherz ist ;-)

Loadbalancing für MySQL (-Slaves)

30.12.2008 | 17:04:38

Dieser Artikel im Blog eines Kollegen hat mich dazu veranlasst mir den verwendeten Algorithmus mal ein wenig näher anzusehen und zu überarbeiten – und ihn zumindest in Sachen Speicherbedarf zu verbessern. Heraus gekommen ist folgendes:

function getSlave($cluster)
{
        // gibt es nur einen Server im Array, wird dieser zurückgeliefert
        if(count($databaseClusters[$cluster]) == 1) {
                return "master";
        }
        else {
                $sum = 0;
                foreach($databaseClusters[$cluster] as $slave) {
                        $sum += $slave["prio"];
                }
                $randomVal = rand(0, $sum);
                if($randomVal < $sum / 2) {
                        $i = 0;
                        $tmpSum = 0;
                        while($tmpSum < $randomVal) {
                                  $tmpSum += $databaseClusters[$cluster]["slave$i"]["prio"];
                                  $i++;
                        }
                }
                else {
                        $i = count($databaseClusters[$cluster]);
                        $tmpSum = $sum;
                        while($tmpSum < $randomVal) {
                                $tmpSum -= $databaseClusters[$cluster]["slave$i"]["prio"];
                                $i--;
                        }
                }
 
                return "slave$i";
        }
}

Herausgekommen ist dadurch zwar eine längere aber im Allgemeinen speicherschonendere Methode um Datenbankqueries zu verteilen. Um weitere Informationen zu erhalten lest bitte bei meinem Kollegen weiter.

SVN mit JavaHL unter Windows

19.12.2008 | 17:55:41

Im Rahmen einiger privater, als auch in Projekten für meinen Arbeitgeber setze ich in eclipse Subclipse für die Versionsverwaltung ein. Bisher war das an meinem Windows-PC nur in Verbindung mit dem (viel zu langsamen) SVNKIT möglich. Um das schnellere JavaHL einzusetzen muss man leider ein klein wenig “tricksen”. Hier nun eine kurze Anleitung wie es dennoch möglich ist:

1. Installation von subclipse wie auf subclipse.tigris.org beschrieben

2. Herunterladen und installieren von tortoisesvn (zu finden hier: tortoisesvn.net)

3. Nach dem Systemneustart (tortoisesvn erfordert diesen leider scheinbar) die Datei [Laufwerk]:\Dokumente und Einstellungen\[Aktueller Benutzername]\Anwendungsdaten\Subversion\config bearbeiten (Achtung: die doppelten Backslashes sind wichtig!):

3.1 nach “[tunnels]” suchen
3.2 darunter einfügen (Mit public/private-key): ssh = [Laufwerk]:\\Programme\\TortoiseSVN\\bin\\TortoisePlink.exe -i "[Laufwerk]:\\[Pfad zum Keyfile]"
—-> sollte kein Key verfügbar sein, einfach den Parameter “-i” mit allem was danach kommt weg lassen
3.3 speichern und schließen ;-)

4. In eclipse in “Window” -> “Preferences” -> “Team” -> “SVN” unter “SVN Interface” JavaHL auswählen und darunter (“Configuration Location”) “Use Directory” auswählen. Dort dann den Pfad zur Subversion-Config eintragen (s. Punkt 2), abschließend auf “Apply” und/oder “Ok” klicken und fertig. Ab jetzt könnt ihr JavaHL verwenden.

Hinweise zur Erstellung des Key-Files:
Hierfür bietet sich insbesondere das Tool “PUTTYgen” das beim Putty dabei ist an – hat man bereits einen unter Linux erstellten Public/Private-Key kann man den hier in das unter Windows benötigte Format umwandeln. Putty gibt es unter anderem hier: PUTTY-Download

Diese Beschreibung sollte so auf allen eclipse-Plattformen (wie zum Beispiel auch Aptana Studio) ab eclipse-Version 3.2 funktionieren – wahrscheinlich auch schon früher.

You will find the english version below.

In einem Projekt, an dem ich für meine Firma im Moment arbeite, hatten wir das Problem, dass wir in einer AJAX-Anwednung den Zurück-Button benutzbar halten mussten. Die Varianten diese Funktionalität bereit zu stellen waren entweder eine eigene Lösung zu finden oder eine schon fertige (möglichst in allen gängigen Browsern lauffähige) Bibliothek zu verwenden. Die Wahl fiel, auf Grund unterschiedlicher Widrigkeiten – allen voran die mangelnde Erfahrung mit Projekten dieser Art, sehr schnell auf eine fertige Lösung. Ich wusste bereits von einer Variante, die das xajax-Framework verwendet, jedoch haben wir diese nicht verwendet – eine weitere Vorraussetzung war, dass die Bibliothek sich problemlos im Zusammenspiel mit dem “Prototype JavaScript Framework” integrieren lassen musste. Die Wahl fiel dann letztlich auf die “Real Simple History” RSH Bibliothek.

Aus dieser Wahl ergab sich jedoch, nach einigem Testen, ein Problem: sie ist in ihrer aktuell verfügbaren Version (0.6) nur bis Safari 3.0.x lauffähig. Da sich der Safari ab Version 3.1.x ähnlich verhält wie der Firefox, musste die “Browserweiche” in RSH ein wenig umgearbeitet werden. Letztlich habe ich also an der Stelle, an der die jeweiligen Browser heraus gefiltert werden, für den Safari ab Version 3.1 noch eine weitere Aufteilung geschaffen. Mit dieser Änderung war die Bibliothek dann voll für unsere Zwecke einsetzbar. Die Änderungen findet ihr direkt im Anschluss an die englische Version dieses Beitrages. Da ich nur die rsh.js angepasst habe, werde ich auch nur diese hier zum Download anbieten. Zur vollständigen Version gehts hier: http://code.google.com/p/reallysimplehistory/

English version:

Last week, as I was working for an actual project. We had to provide the back-button functionality also in an AJAX-based website. The 2 choices we had, were to develop everything ourselves or use an allready tested open source-library. We decided for the second one an at least found the “Really Simple History” (RSH) library.

The problem was, that this library only worked fine with Safari until version 3.0.x. So I had to change the browser-detection a little bit, after all, Safari works like Firefox since Version 3.1.0 and only this point had to be changed. Now the adapted version runs for Safari in all versions since 2.0.3. Because I only altered the rsh.js, I will only provide this file here. In the code snippet afterwards you will find my changes, too. For full version have a look at: http://code.google.com/p/reallysimplehistory/

/* original */
/*set user-agent flags*/
var UA = navigator.userAgent.toLowerCase();
var platform = navigator.platform.toLowerCase();
var vendor = navigator.vendor || "";
if (vendor === "KDE") {
	this.isKonqueror = true;
	this.isSupported = false;
} else if (typeof window.opera !== "undefined") {
	this.isOpera = true;
	this.isSupported = true;
} else if (typeof document.all !== "undefined") {
	this.isIE = true;
	this.isSupported = true;
} else if (vendor.indexOf("Apple Computer, Inc.") &gt; -1) {
	this.isSafari = true;
	this.isSupported = (platform.indexOf("mac") &gt; -1);
} else if (UA.indexOf("gecko") != -1) {
	this.isGecko = true;
	this.isSupported = true;
}
/* new version */
/*set user-agent flags*/
var UA = navigator.userAgent.toLowerCase();
var platform = navigator.platform.toLowerCase();
var vendor = navigator.vendor || "";
if (vendor === "KDE") {
	this.isKonqueror = true;
	this.isSupported = false;
} else if (typeof window.opera !== "undefined") {
	this.isOpera = true;
	this.isSupported = true;
} else if (typeof document.all !== "undefined") {
	this.isIE = true;
	this.isSupported = true;
} else if (vendor.indexOf("Apple Computer, Inc.") &gt; -1) {
	var safariVersion = navigator.appVersion.substr(navigator.appVersion.indexOf("Safari")-6, 3);
	if (safariVersion &lt; 3.1) {
		this.isSafari = true;
		this.isSupported = (platform.indexOf("mac") &gt; -1);
	}
	else
	{
		this.isGecko = true;
		this.isSupported = true;
	}
} else if (UA.indexOf("gecko") != -1) {
	this.isGecko = true;
	this.isSupported = true;
}

Die angepasste Version von rsh.js / The adapted version of rsh.js

CIFS – Der Ersatz von SMBFS

26.09.2008 | 20:59:25

Sicher, es ist schon eine Weile her, dass SMBFS ersetzt wurde, allerdings ist es mir erst gestern wirklich aufgefallen. Problem war (auf Grund verschiedener Widrigkeiten) ein “downgrade” von Debian Lenny (5.0) auf Debian Etch (4.0). Inzwischen liefen die zu bearbeitenden Webserver mit dem Kernel von Lenny, den wir (ein Kollege und ich) nicht mehr austauschen wollten. Nachdem wir einige fehlerhaft gemountete Netzlaufwerke ausgemacht hatten (allesamt SMBFS) versuchten wir dieses Problem zu beheben. Geäußert hatte sich dies mit der folgenden Meldung:

ERROR: smbfs filesystem not supported by the kernel
Please refer to the smbmnt( manual page
smbmnt failed: 255)

Verwirrt dabei hatte mich, dass SMBFS installiert war und im eigentlich “kein” Grund dafür bestand, dass dieses Problem überhaupt bestand. Nach ein bisschen googlen habe ich dann herrausgefunden, dass smbfs inzwischen “deprecated” ist und daher ein anderes – mindestens gleichwertiges – Dateisystem verwendet werden sollte. Die Lösung lautete einfach “cifs” statt “smbfs” in der Datei “/etc/fstab” zu verwenden. Schließlich ließen sich dann die zuvor mit smbfs gemounteten Verzeichnisse wieder anstandslos mounten.

Was lange wärt …

04.09.2008 | 21:09:36

… wird endlich gut. Das gilt auch für meine Bachelorarbeit die ich im Rahmen dieses Artikels nun endlich veröffentlichen möchte. Was, trotz schon lange erfolgter Freigabe, immer wieder hinaus geschoben wurde. Benotet wurde sie (insgesamt) mit einer 2,3.

Kurz zum Thema der Arbeit: es ging um die Usability von sogenannten Web2.0-Seiten. Im Rahmen der Arbeit habe ich geprüft, in wie weit die wichtigsten Richtlinien – hierzu zählen unter anderem 2 ISO-Normen und ein Bundesgesetz – mit dem JBoss Richfaces Framework umsetzbar sind. Interessant dürfte der Inhalt der Arbeit aber auch allgemein, wenn es um das Design und die Entwicklung von Internet- und Intranetanwendungen geht. Das genaue Thema lautete: “Umsetzbarkeit der Standards zur Dialoggestaltung und Barrierefreiheit mit
JBoss Richfaces”

Hier nun kurz zusammen gefasst der Inhalt der Arbeit:

1. Teil: Zusammenfassung und Erklärung der wichtigsten Begriffe in der Software-Ergonomie

2. Teil: Erklärung der Anforderungen aus den Normen und Gesetzen zur Software-Ergonomie und Barrierefreiheit, sowie die Umsetzbarkeitsstudie

3. Teil: Zusammenfassung der Ergebnisse aus Teil 3

4. Teil: Fazit und Ausblick

Für die Unterstützung auf meinem Weg bis hin zum abgeschlossenem Studium, möchte ich meinem (nunmehr) ehemaligen Arbeitgeber, der Deutschen Telekom AG (Telekom Training GmbH) und hier speziell meiner Betreuerin auf Seiten der TT sowie meinen Kollegen bei meinem Einsatzbetrieb (T-Systems) in Weinheim danken. Auch wenn es während dieser Zeit nicht immer schön war, möchte ich sie doch zum allergrößten Teil nicht missen. Weiterhin gilt mein Dank meinen Eltern und meiner Freundin, die mich während der ganzen Zeit nicht nur moralisch unterstützt haben.

Hier nun also der versprochene Download-Link! (klick hier)

Die Arbeit steht unter der Creative-Commons-Lizenz, es dürfen Veränderungen an ihr vorgenommen und sie darf weiterverbreitet werden. Einschränkungen:

1. Mein Name (als Urheber) darf nicht aus dem Text entfernt werden
2. Änderungen müssen veröffentlicht und ebenfalls unter der CC-Lizenz veröffentlicht werden, des weiteren würde ich mich freuen über Änderungen in Kenntnis gesetzt zu werden
3. Die kommerzielle Nutzung des Inhaltes dieser Arbeit ist nur unter den in 1. und 2. genannten Bedingungen gestattet