Work & Travel – Reisebericht

Gesagt, getan.

Verkehrsoptimiert ging die Reise Richtung Süden am Sonntag um 03:00 Uhr vom Mayflower Office aus los. 7 Stunden später kamen wir an unserem Ziel, dem Urlaubsresort Pra´ delle Torri in der Nähe von Caorle, an. Schon nachdem wir die Eingangsschranke passiert hatten, fiel uns der „Vergnügungspark“ des Resorts, besucht von sehr vielen jungen Familien, auf. Wir hatten noch einige Stunden bis zum eigentlichen Check-In im Hotel, darum machten wir uns auf den Weg um das Resort weiter zu erkunden. Die Anlage hatte insgesamt 8 Pools, worauf wir uns alle freuten. Als wir allerdings feststellten, dass die maximale Wassertiefe ca. 1,30m betrug, wurden wir stutzig. Wir, 4 junge Männer im besten Alter, schienen nicht zur Zielgruppe des Pra´ delle Torri zu gehören. Die Laune verderben ließen wir uns dadurch natürlich nicht. Das Meer ist überall nass und so hatten wir immerhin bessere Chancen uns auf die Arbeit zu konzentieren. Weiterlesen

Work & Travel – Remote arbeiten & bezahlter Urlaub

Auf der Rückfahrt vom Mayflower Barcamp nach München hatten einige Kollegen und ich die Idee, für eine Woche, abseits vom Alltag am Kundenprojekt zu arbeiten und nebenbei Urlaub zu machen. Das Ziel war dabei schon klar: möglichst in Richtung Strand, wo es warm ist, abends was los ist und man in einer entspannten Atmosphäre fokusiert arbeiten kann.

Der Trip sollte aus eigener Tasche bezahlt werden, damit es möglichst wenig Abhängigkeiten gibt. Die Kommunikation und Koordination mit unseren Teams und unseren Kunden wollten wir selbst erledigen. Damit unser Vorhaben nicht ins Wasser fällt, haben wir uns dazu entschlossen, das Ganze zeitnah umzusetzen. Die Planung wurde ausformuliert, ein passender Zielort recherchiert und ein gemeinsamer Termin definiert. Anschließend haben wir den Kostenplan aufgestellt und uns auch schon mit dem Hotel in Verbindung gesetzt. Parallel dazu haben wir begonnen, die Idee und die von uns davon erhofften Vorteile dem Kunden vorzustellen. Die Resonanz dafür war durchwegs positiv. Einer fand die Idee sogar so gut, dass er direkt einen seiner Entwickler mit uns auf die Reise geschickt hat.

Nachdem wir unseren Plan soweit vorbereitet hatten, involvierten wir die Geschäftsführer der Mayflower und stellten unsere Idee vor. Unter der Prämisse, alles selbst zu bezahlen und nur die offizielle Genehmigung zu erhalten, hatten wir nicht damit gerechnet, dass Mayflower unser Vorhaben prüft und passable Finanzierungsoptionen definiert. Warum? – Damit auch andere Kollegen mit ihren Teams solche Reisen unternehmen können. Da durch die Mitreise eines Kunden zusätzlich positive Faktoren entstehen, wie Kunden- und Teambindung, welche Mayflower unterstützen möchte, haben wir einen Zuschuss von einem Drittel der Reisekosten bekommen.

Es war klar das wir nicht planlos auf Reise gehen werden. Darum haben wir im Vorfeld passende Aufgabenpakete definiert. So wurden z.B. Refactoring-Tasks, die schnell und fokussiert durchgezogen werden sollten, gewählt. Auch die prototypische Implementierung einer REST-Api auf Basis von Spring REST und Cassandra Data stand an. Ideale Themen also für den Strand :)

Der eine oder andere mag jetzt an ein typisches Offsite Event denken, in dem ein Team sich gesammelt zurückzieht um weg vom Alltag gezielt an Spikes oder anderen offenen Aufgaben zu arbeiten. Unser Work & Travel war im Gegensatz dazu eine bunte Mischung. 4 Leute aus 4 verschiedenen Teams, Technologiebereiche von JS, PHP, Java bis hin zur Datenbank Cassandra sollten es nicht langweilig werden lassen. Über die Durchführung und unsere Erfahrungen mit dem Work & Travel möchten wir im Laufe der nächsten Woche einen weiteren Artikel veröffentlichen. Dort werdet ihr auch erfahren wohin es bei dem Trip ging :)

Einstieg in Zend Framework 2 mit Composer

Am 05.09.2012 wurde das Zend Framework 2 in seiner ersten Stable-Version veröffentlicht. Aktuell befindet sich das Framework nun in Version 2.0.5. Das neue Zend Framework 2 versucht gegenüber seinem Vorgänger vieles anders zu machen und sich stärker an aktuellen “Standards” aus der PHP-Welt zu orientieren.

Da das ZF2 (abgekürzt für Zend Framework 2) aktuell noch relativ selten und wenig verwendet wird, soll dieser Artikel einen einfachen Einstieg bieten, wie man schnell und unkompliziert die ersten Schritte auf dem Weg zu seiner eigenen Anwendung bewältigt.
Weiterlesen

02.12. PHP 5.3 Features in real life

Die Veröffentlichung von PHP 5.3 vor rund 2 Jahren brachte dem PHP-Entwickler sinnvolle Neuerungen und Verbesserungen. Dazu zählen in erster Linie Namespaces, Late static binding und Closures (anonyme Funktionen).
Viele Verbesserungen hat PHP 5.3 vor allem aber unter der Haube erfahren. Das neue /PHP/5.3 ersetzt libmysql mit der eigenen, nativen Implementierung mysqlnd und hat auch den Garbage Collector verbessert. 

Das sind nur einige wenige Dinge, die mit PHP 5.3 sinnvoll verbessert und erweitert wurden. Auch gibt es ein Feature, dem der OOP-Entwickler mit einer gewissen Hassliebe entgegen steht: Jump Labels, auch “goto” genannt. Die Verwendung von goto ist in der heutigen PHP-Community nicht gerade sehr beliebt. Die Ursache: Die klassische, objektorientierte Programmierung bringt gegenüber einer Strukturierung seiner Anwendung mittels goto wesentliche Vorteile, wie Sichtbarkeiten, Vererbung etc.

PHP 5.3 bringt insgesamt jedoch viele erfreuliche Neuigkeiten mit von denen sich einige bereits sehr bewährt haben und bei Neuentwicklungen oder Refactorings auf jeden Fall in Erwägung gezogen werden sollten.


Namespaces

Namespaces dienen dazu, verschiedene Funktionalitäten wie beispielsweise Klassen in so genannte Namensräume zu kapseln und diese somit zu gruppieren. Man stelle sich das anhand einer klassischen Verzeichnisstruktur vor. Seine Dateien (PHP-Klassen) legt man in verschiedenen Verzeichnissen (Namespaces) ab und kann diese später laden und einbinden.

Beispiel:

namespace MyProject/Car

class MyProject/Car {
// … 
}

use MyProject/Car as Car;
$car = new Car();

Mit dem Schlüsselwort use importiert man Namespaces in einen anderen um die enthaltenen Funktionen und Klassen nutzen zu können.

Doch was bringen Namespaces?
Der Vorteil in Namespaces ist vor allem die Flexibilität in der Verwendung (Alias) und der Wegfall von Namenskonflikten. Jede Datei sowie jede Klasse kann also den selben Namen haben, solange diese in verschiedenen Namespaces liegen. Die Verwendung von Namespaces verbessert die Lesbarkeit sowie die Organisation der eigenen Klassen, da diese analog zu Ordnerstrukturen definiert sind. Somit sind auch kürzere Namen für Klassen möglich, da die organisatorische Beschreibung bereits im Namespace erfolgt.


Late static binding

Mit der Einführung von Late static binding wird nun die Möglichkeit geboten, eine aufgerufene Klasse im Kontext statischer Vererbung zu referenzieren. Das hört sich auf zu Beginn erstmal kompliziert an, lässt sich aber folgendermaßen erklären:

class A {
  public static function who() {
    echo __CLASS__;
  }
  public static function test() {
    echo self::who();
  }
}
class B extends A {
  public static function who() {
    echo __CLASS__;
  }
}
B::test(); // Output: A

Die Methode self::who() referenziert auf seine eigene Methode who(). Das Schlüsselwort self referenziert also nicht den Kontext bei statischer Vererbung. Es gibt somit keine Möglichkeit, auf die Methode who()der Klasse B zuzugreifen, ohne die Methode test() ebenfalls zu überschreiben.
Um diesen Umstand zu korrigieren, wurde mit PHP 5.3 Late static binding mit dem Schlüsselwort static eingeführt, welches den Kontext berücksichtigt.

Die Methode test() wird verändert:

public static function test() {
  echo static::who();
}
B::test(); // Output: B

 

Zur Erläuterung: selfbindet sich bereits beim interpretieren des Codes an die Klasse, static erst bei der Ausführung.
Die Verwendung von Late static binding hilft dabei, Quellcode zu sparen, da Funktionalität bereits in eine Basis-Implementierung (abstract class) geschrieben werden kann.

namespace DatabaseEditor;

interface EditorInterface {
  public function getTableName();
}

abstract class Table implements EditorInterface {

  public function delete($id) {
    $sql = ‘DELETE FROM ‘ . static::getTableName() . ’ 
           WHERE id=’ . $id;

    $stmt = $this->getDb()->execute($sql);
    return $stmt;
  }
}

class User extends Table {
  public function getTableName() {
    return ‘user’;
  }
}

$table = new User();
$table->delete(12 /* user id */);

 


Abschließend

PHP 5.3 bringt auch “unter der Haube” viele Verbesserungen, Bugfixes und Performance improvements mit. Einige Bibliotheken wie phar (PHP Archive), fileinfo oder intl sind nun auch nativ mit dabei und müssen somit nicht mehr extern eingebunden werden.
Damit sei PHP 5.3 vor allem für neue Projekte sehr empfohlen.