… geek and proud of it

geek!

phpUnit und Klassen mit __call

without comments

Nutzt man phpUnit mit Klassen die MagicMethods wie z.B. __call() enthalten ist Vorsicht geboten. Ich habe gerade recht lange gebraucht um herauszufinden, warum folgender Test nicht funktioniert.

Zunächst zwei Klassen, eine davon definieren wir als abstract class:

<?php
    class AnotherRealObject {
    
        public function __call($method, $args) {
            return 'AnotherRealObject->'.$method.'()'; 
        }
    
    }

    abstract class SomeAbstractClassWithConcreteMethods {

        private $anotherObject;
    
        abstract public function abstractMethod();
    
       public function concreteMethodToSetObject($o) {
            $this->anotherObject = $o;
        }

        public function concreteMethod() {
            return $this->anotherObject->aMethod();
        }
    
    }        
?>   

Read the rest of this entry »

Written by dennis

December 8th, 2011 at 8:34 pm

Posted in coding,php,tdd

Tagged with , ,

Mockito und Maps

without comments

Ich schreibe gerade einige Tests für das Java Projekt meiner Master Arbeit. Dabei arbeite ich auch zum ersten Mal mit dem Mocking Framework Mockito. Im Zusammenhang mit Mockito musste ich eben einen wichtigen Unterschied zwischen einer HashMap und einer TreeMap lernen.

Read the rest of this entry »

Written by dennis

April 14th, 2011 at 4:21 pm

Posted in Java,coding,tdd

Tagged with , , , , ,

#gddde Mitbringsel: Spring Roo + GWT

without comments

Ich war gestern zusammen mit @marcwerner auf dem Google Developer Day in München. Sehr nette Veranstaltung von Google, auf der Vorträge zu Google Technologien gehalten werden und es lecker Essen gibt :) . Im ersten Vortrag den ich mir angehört habe ging es um Spring Roo und das Google Web Toolkit. Sehr spannende Sache, da ich zur Entwicklung von WebApps sowieso vorhatte von PHP auf Java zu wechseln. Den Vortrag hielt Christian Dupuis von SpringSource. In seiner Demo zeigte er, wie man mit Spring Roo in unter 3 Minuten eine lauffähige WebApp zusammenbaut. Grund genug für mich mir das heute mal selbst anzuschauen und auszuprobieren.

Read the rest of this entry »

Written by dennis

November 10th, 2010 at 7:20 pm

Posted in GWT,Java,Spring Roo,coding

Tagged with , ,

PHP Getter/Setter Generator

with 3 comments

Ich benutze seit kurzem die PHP Development Tools von Eclipse zum Entwickeln von PHP Code. Eclipse selbst ist eine sehr gute IDE, allerdings hat das PDT Plugin hier und da doch noch einige Schwächen. Zum Beispiel war ich gerade dabei, eine neue Klasse für das IRD Bogenoffset Tool zu schreiben, die insgesamt auf 52 Felder kam. Jetzt bin ich es von Java natürlich gewohnt, dass die IDE mir für diese Felder automatisch Getter und Setter generiert – leider geht das mit den PDT nicht :( .

Nach einer kurzen Google Recherche musste ich feststellen, dass im Netz auch kein brauchbarer PHP Getter/Setter Generator aufzutreiben ist. Also, nicht lange rumdümpeln, schreibe ich mir halt schnell selbst einen – sowieso die Gelegenheit sich mal die PHP Reflection API anzuschauen. Hier das Ergebnis nach 10 Minuten Arbeit:

#!/usr/bin/php
<?php

    if (!is_file($argv[2])) 
        die('Use this way: '.$argv[0].' <class_name> <path_to_your_class`s_php_file>'."\n");

    require_once($argv[2]);

    $class = new $argv[1]();
    $reflection = new ReflectionClass($argv[1]);
    $fields = $reflection->getProperties(
        ReflectionProperty::IS_PRIVATE
        | ReflectionProperty::IS_PROTECTED
    );

    foreach ($fields AS $f) {

        // getter
        echo 'public function get'.ucfirst($f->getName()).'() {'."\n";
        echo "\t".'return $this->'.$f->getName().';'."\n";
        echo '}'."\n";
        // setter
        echo 'public function set'.ucfirst($f->getName()).'($val) {'."\n";
        echo "\t".'$this->'.$f->getName().' = $val;'."\n";
        echo '}'."\n\n";

    }
    echo 'Generated Getter and Setter for '.count($fields).' fields'."\n\n";
?>   

Das ganze ist ein PHP-Konsolenscript. Als Parameter den Namen eurer Klasse und den Pfad zur PHP Datei mitgeben in der die Klasse deklariert ist. Als Ausgabe erhält man die Getter- und Setter-Methoden für alle Felder, die als private oder protected deklariert sind. Vielleicht hat ja noch jemand anders Verwendung dafür – mir hats eine Menge Zeit gespart ;)

Written by dennis

October 30th, 2010 at 3:10 pm

Posted in coding,php

Tagged with , ,

server move finished. well, kind of.

without comments

Nachdem ich meinen Server nun umgezogen habe und etwas mit Apache/PHP 5.3 zu kämpfen hatte ist der Blog nun wieder online. Das PHP Probleme werde ich in den nächsten Tage noch verbloggen, denn gelöst ist es bis jetzt nicht. Habe nur vorübergehend PHP 5.2 installiert, um den Blog erstmal wieder online zu stellen. Das Theme hat noch ein paar kleine Schönheitsfehler, aber die repariere ich dann in den nächsten Tagen.

Und weil ich gerade nicht mehr zu erzählen habe, ein kleines Video das ich sehr cool fand (via @seb):

Written by dennis

October 22nd, 2010 at 10:30 am

Posted in blog,common

Musik vom iPod in iTunes hören

without comments

iTunes

Folgendes Szenario: Ich habe Zuhause einen Mac an dem ich mein iPhone und meinen iPod synchronisiere. Mit anderen Worten: meine komplette Musik befindet sich auf meiner Festplatte Zuhause. Was aber nun wenn ich unterwegs (in der Uni, auf der Arbeit) Musik hören möchte? Bisher habe ich aus diesem Grund meine iTunes Bibliothek regelmäßig über rsync auf mein MacBook kopiert.

Read the rest of this entry »

Written by dennis

July 9th, 2010 at 10:22 pm

WakeOnLan beim Starten/Aufwachen

without comments

Wir haben in unserem Netzwerk einen Rechner mit Linux der als Router, Firewall, Fileserver und ein paar andere Dinge dient. Der Rechner ist so konfiguriert, dass er ab 0.00 Uhr nachts alle 15 Minuten das lokale Netz überprüft und sich automatisch ausschaltet, sobald kein anderer PC mehr läuft.

Auf Client Seite ist unser Netzwerk bunt gemischt. Mit MacOSX, Linux und Windows sind alle nennenswerten Betriebsysteme vertreten. Nun möchten alle natürlich, dass der Router morgens anspringt sobald der eigene Rechner eine Internetverbindung benötigt. Dazu habe ich den Router so konfiguriert, dass er auf Wake-On-Lan Pakete reagiert.

Read the rest of this entry »

Written by dennis

June 13th, 2010 at 1:40 pm

Posted in linux,mac osx

Tagged with , , , ,

Bloggen mit Textmate

without comments

Textmate Logo

Ich habe vor einigen Wochen Textmate für mich entdeckt. Das ist wirklich eines der besten Tools für den Mac, ich weiß nicht wie ich die ganze Zeit ohne diesen genialen Editor ausgekommen bin.

Die wohl größte Stärke von Textmate ist seine Anpassbarkeit und die Möglichkeit die Funktionen des Editors über die so genannten Bundles fast beliebig zu erweitern. Zum Beispiel gibt es für Textmate auch ein Blogging-Bundle, mit dem ich gerade diesen Blog-Eintrag schreibe. Das Bundle unterstützt sogar das Hochladen von Bildern direkt über Textmate. Dazu ziehe ich das Bild vom Finder einfach in den Texteditor an die passende Stelle, vergebe einen Titel und den Rest übernimmt Textmate.

Bloggen mit Textmate

Einziger Wermutstropfen: Die Bilder werden von Textmate nur hochgeladen, es werden leider nicht automatisch Thumbnails erstellt. Aber Moment, ich habe doch gerade Textmate dafür gelobt wie flexibel es ist, also einfach selbst eine Lösung dafür basteln.

Read the rest of this entry »

Written by dennis

June 12th, 2010 at 2:14 am

Posted in apple,mac osx

Tagged with , ,

Ubuntu 10.04 in VMWare Fusion

without comments

Vmware Fusion

Nachdem ich vor ein paar Tagen ein Update meiner Ubuntu-VM auf 10.04 gemacht hatte konnte ich mich nicht mehr einloggen. Das Problem: Im Login-Screen von GDM funktionierte keine Tastatur mehr. Maus kein Problem, aber ohne Tastatur kann man halt schlecht ein Passwort eingeben.

Read the rest of this entry »

Written by dennis

June 10th, 2010 at 11:43 pm

Posted in linux,mac osx

Tagged with , ,

Serverumzug

with one comment

Ich habe seit Jahren zusammen mit einem Kumpel bei der Firma Hetzner einen dedizierten Root-Server. Auf diesem Server laufen diverse Webseiten (auch dieser Blog), ein paar Foren, ein paar Teamspeak-Server, ein SVN Repository und am allerwichtigsten: mein gesamter Email-Verkehr wird über diesen Server abgewickelt. Mein Kumpel möchte jetzt allerdings einiges an seiner Infrastruktur ändern und benötigt den Server deshalb in Zukunft nicht mehr. Da mir ein dedizierter Root-Server alleine etwas zu teuer ist, werde ich auf einen vServer umsteigen. Dieser hat natürlich nicht die Power wie ein eigener Server, aber da ich ihn dann nur noch alleine nutze wird das schon langen. Das kostenlose Hosting einiger Webseiten für ein paar Freunde werde ich dann allerdings einstellen müssen :/

Nach ein bisschen Recherche im Web habe ich mich für das Paket VS Linux L 4.0 von HostEurope entschieden. Eine Alternative wäre noch der vServer Pro X4 von Server4You gewesen. Letzterer ist bei vergleichbarer Leistung deutlich billiger, allerdings verbinde ich mit Server4You nur negative Nachrichten aus deren Anfangszeiten. Mag sein, dass sie mittlerweile dazugelernt haben, das negative Bild hat sich bei mir aber zu sehr eingebrannt. Meine Domains werde ich weiter über den DomainRobot von Hetzner verwalten, da gibt es für mich keine Alternative.

Demnächst steht also ein Umzug aller Dienste und Daten an. Nun habe ich mir überlegt, wenn ich schon alles umziehen und neumachen muss, dann kann ich das auch richtig machen. Deshalb werde ich im gleichen Schritt auch von MySQL auf LDAP als Datenbackend umsteigen. Natürlich ist ein LDAP Server für einen so kleinen Server mit rund 10 Domains und 20 Email-Konten etwas oversized, aber es ist die sauberste Lösung und ausprobieren wollte ich das schon länger mal. Ich habe mir für den neuen Server folgende Struktur überlegt:

vserver-plan

Postfix als MTA mit Amavis, Spamassassin und PolicyD als Content Filter – so bleibt das Email-Postfach sauber! Zum Senden/Relayen von Mails ist natürlich eine Authentifizierung erforderlich. Dazu wird Postfix über Cyrus-SASL an den LDAP angebunden. Darüberhinaus benutzt Postfix den LDAP um Domain/Mailbox Lookups zu machen (also sicherzustellen, dass die Emailadressen an die Mails gesendet werden sollen auch auf dem Server existieren).

Dovecot habe ich seit etwas mehr als einem Jahr im produktiven Einsatz und bin damit sehr zufrieden. Dovecot unterstützt eine direkte Anbindung an LDAP (zur Authentifizierung). Sowohl Postfix als auch Dovecot werden für MUAs nur per SSL/TLS erreichbar sein. Als Webmail Applikation bleibe ich bei RoundCube – ich find den Web2.0 Style von RoundCube einfach hübscher als SquirrelMail.

Auch den Apache möchte ich an das LDAP Backend anbinden. Sowohl zur Verwaltung von (Sub-)Domains als auch zur Authentifizierung beim SVN und WebDAV Dienst (ob das überhaupt möglich ist weiß ich aber noch nicht).

Zu guter letzt möchte ich meinen Router hier Zuhause als BackupMX konfigurieren. Falls der vServer einmal ausfällt soll unser heimische Router die Mails entgegennehmen. Dazu muss er natürlich auf die Domaindaten zugreifen können. Deshalb muss auf dem Router ein LDAP-Replica-Server laufen der alle Daten vorhält. Auch müssen hier alle Antispam und Antiviren Maßnahmen installiert sein, denn Spammer benutzen gerne den BackupMX um ihren Müll abzuladen. Inwieweit dies umsetzbar ist muss ich ebenfalls noch ausprobieren.

Ich stelle das ganze Vorhaben hier deshalb so ausführlich vor, weil ich mir vorgenommen habe zu allen Diensten und Konfigurationen hier im Blog Tutorials zu veröffentlichen. Falls ich diesem Vorsatz nachkommem kann ensteht hier nicht nur eine Dokumentation für mich selbst, sondern hoffentlich auch ein nützliches Nachschlagewerk für andere.

Written by dennis

March 22nd, 2010 at 4:14 am

Posted in linux

Tagged with , ,