Archive for the ‘coding’ Category
phpUnit und Klassen mit __call
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();
}
}
?>
Mockito und Maps
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.
#gddde Mitbringsel: Spring Roo + GWT
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.
PHP Getter/Setter Generator
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
WP: Email-Absender
Ich habe heute angefangen die Kundendatenbank des IRD an WordPress anzukoppeln damit sich unsere Kunden direkt auf unserer Webseite anmelden können und sich nicht extra über WordPress registrieren müssen. Beim Testen der Funktionen hat mich der Absender der Passwort-Erinnerungs-Mails extrem gestört. WordPress benutzt hier standardmäßig den Namen “WordPress” und die Email-Adresse “wordpress@domain.tld” (wobei domain.tld natürlich durch die Domain ersetzt wird auf der WordPress läuft).
Zum Glück muss man bei WordPress mit solchen Schönheitsfehlern nicht leben – ein kleines MiniPlugin genügt um seine eigene Email-Adresse und den Absendernamen festzulegen. Hier erstmal der Code:
<?php
/*
Plugin Name: myemail
Plugin URI: http://blog.kips-world.de
Description: Some wordpress hacks for my website
Version: 1.0
Author: Dennis Saenger
Author URI: http://blog.kips-world.de
*/
function kip_from_mail($f) {
$admin = get_userdata(1);
return $admin->user_email;
}
function kip_from_name($f) {
$admin = get_userdata(1);
return $admin->display_name;
}
add_filter('wp_mail_from', 'kip_from_mail', 0, 1);
add_filter('wp_mail_from_name', 'kip_from_name', 0, 1);
?>
Um den Absendernamen und die Emailadresse zu ändern benutze ich hier je einen WordPress-Filter. Immer wenn WordPress eine Email verschicken will, werden diese beiden Filter automatisch aufgerufen. Als Parameter übergibt WordPress die Default-Werte an die Funktionen. Bei kip_from_mail() übergibt WordPress “wordpress -ät- blog.kips-world.de”, bei kip_from_name() wird “WordPress” übergeben. Man könnte diese Werte jetzt modifizieren und zurückgeben, aber ich habe mich dafür entschieden einfach den Nickname und die Emailadresse des Admin als Absender zu nutzen. Ich ignoriere die Variablen ($f) in beiden Funktionen also einfach und hole mir mit der Funktion get_userdata() einfach die Werte des admin Users (der admin hat die User-ID 1).
Um das ganze selbst auszuprobieren erstellst du in deinem WordPress-Pluginordner einfach eine Datei “myemail.php” und kopierst den obigen PHP-Code dort hinein. Im Admin-Bereich von WordPress wird es dann ein neues Plugin “myemail” geben. Dieses noch schnell aktivieren und schon sendet WordPress Emails mit einem schönen Absender!
Wer jetzt Lust bekommen hat selbst kleine Modifikationen an WordPress vorzunehmen findet im WordPress-Codex alles was er wissen muss. In der Plugin-API gibt es eine Einführung zu Filtern und Actions (die beiden Plugin-Schnittstellen von WordPress). In der Function Reference werden alle WordPress-Funktionen inklusive Beschreibung aufgelistet. Und auf der Homepage von Adam findet man eine komplette Liste mit allen Filtern und Actions (sehr wichtig!).
batch rename unter mac osx
Ich hatte gerade das Problem, dass ich 94 Bilddateien umbenennen musste. Die Bilder hatten alle den Teilstring “bearb_#” oder “bearb_” im Namen und der sollte entfernt werden.
Unter MacOSX gibt es dafür natürlich einige grafische Tools, nicht zuletzt den Automator. Dieser bennent auf Wunsch beliebig viele Dateien um, allerdings mit festem Namen und einer laufenden Nummer. Ich wollte die Namen meiner Bilder allerdings behalten und nur den störenden Teilstring entfernen.
Hier zeigt sich mal wieder warum ich meinen Mac so mag: Geniales GUI – aber unter der Haube ein Unix mit all seinen nützlichen Tools! Einen Teilstring aus allen Dateinamen eines Ordners zu entfernen ist für ein Unix und die Bash keine Herausforderung – dazu braucht man nur eine einzige Befehlszeile:
der apfelplanet #1
Ich habe mir vor einiger Zeit die Domain “apfelplanet.de” gesichert. Ich würde auf der Domain gerne ein neues Projekt starten: Einen Planet für Apple bezogene Blogs. Was ist überhaupt ein Planet? Das sagt Wikipedia dazu:
Planet ist ein serverseitiger Feedreader für Aggregator-Dienste, der zur Zusammenfassung verschiedener Nachrichtenquellen auf Websites genutzt wird. [...] Im übertragenen Sinn wird der Begriff allgemein für Websites verwendet, die mittels eines Feed-Aggregators verschiedene Nachrichtenquellen, vor allem Blogs, zusammenfassen.
Der erste Schritt muss nun sein das ich mir ein Design überlege. Es soll etwas sehr einfaches sein, was aber andererseits auch an Apple erinnern darf. Ich denke ich werde mich an Me.com orientieren. In die graue Leiste oben muss ein schönes Logo (ein Planet der nach einem Apfel aussieht wäre genial oder?
).
Dannach muss ich mich auf die Suche nach ein paar Seiten machen die sich am Planet beteiligen möchten. Ich möchte keine Apple-News Seiten aufnehmen, es sollen rein private Blogs sein. In meinem Newsreader haben sich in letzter Zeit einige “Apple”-Blogs angesammelt. Wenn die Seite steht und der Feedreader auf dem Webserver läuft werde ich die Webmaster mal anschreiben.
Ich denke ich werde als Reader “das Original” einsetzen. Dafür brauche ich zwar Python auf dem Webserver, aber wenn man seinen eigenen Root-Server hat, ist das weniger ein Problem. Dann kann ich das nächste mal gleich über die Installation und Konfiguration des Planet bloggen …
Wer sich mal ein paar Beispiele anschauen möchte kann ich den planet.ubuntuusers.de, planet.gnome.org oder den planet-index empfehlen.
aptana – die web ide
Viele Entwickler von Webanwendungen sind der Meinung ein einfacher Text-Editor reicht für die tägliche Arbeit. Für kleine Projekte oder um mal schnell eine Änderung zu machen stimmt das sicherlich, aber wenn es an größere Projekte geht erleichtert eine gute IDE die Arbeit erheblich.

