Tag 2 in Amsterdam: Dutch PHP Conference 2012!
Nicht wirklich ausgeschlafen, aber direkt wach und gespannt auf den Tag verlasse ich so schnell wie möglich das kleine Hotelzimmer und bin bereits vor 9 Uhr im RAI. Mit Plätzchen als Frühstück und das Lesen des Twitterstreams #dpc12 der letzten Stunden überbrücken wir die Zeit bis zum Start der Opening-Session und der darauf folgenden Keynote von Rasmus Lerdorf.
Rasmus fragte die Konferenzteilnehmer ob sie Dinge mit PHP erstellen die wichtig sind. Er zeigte ein Projekt das Leben rettet und in Katastrophensituationen Menschen finden und vernetzen kann. Bauen wir wichtige Seiten? Farmville, Foto-Webseiten etc? Alles relativ unwichtig. Wir haben bald keine Dinge mehr die wir nur mit dem Keyboard lösen können, wichtig ist es nach draußen zu gehen und zu schauen wo die wirklichen Probleme des Lebens und der Welt liegen die es zu lösen gilt. Die Vernetzung mit der Außenwelt außerhalb von Computern fehlt.
Danach folgte der etwas technischere Teil, mit einer kurzen Vorstellung von PHP 5.4 und der ausdrücklichen Bitte doch endlich auf 5.3 umzusteigen. Er zeigte kurz wie man neue RC-Releases testet und selbst bei PHP mithelfen kann zum Beispiel bei der Dokumentation oder der Diskussion in den Mailinglisten. NodePHP.org, Fast Machine Learning/Support Vector Machine sowie die Zukunft von PHP (Wir brauchen: Improved Unicode, junges neues Blut etc) waren weitere Themen. Zum Schluss zeigte er noch einige lustige Bugs aus dem Bugtracker. Am ersten Tag hatte keiner der Speaker Zeit für Fragen, Rasmus hat es als einziger geschafft ein paar Minuten für Fragen übrig zu lassen, und es kamen einige interessante aus dem Publikum.
Stephan Hochdörfer hat den für mich auf der Konferenz interessantesten Vortrag gehalten über „The state of DI in PHP“. Nach der grundsätzlichen Einführung in die Welt der Dependency Injection zeigte er die Vorteile auf. Abhängigkeiten sind nicht generell schlecht, aber hardcodierte Abhängigkeiten sind schlecht! Also braucht man flexible Abhängigkeiten die man via Konstruktor-Injection, Setter-Injection, Property-Injection oder Interface Injection an ein Objekt übergibt. Das resultiert in Wiederverwendbarkeit, Wartbarkeit, Testbarkeit.
Möchte man diese Abhängigkeiten an zentralen Stellen definieren und nicht immer manuell alle Abhängigkeiten übergeben, tut man dies mit DI-Containern. Stephan zeigt verschiedene Umsetzungen, angefangen bei einfachen Containern wie Pimple hin zu Symfony2, Flow3 und Zend Framework 2. Insgesamt eine tolle Session für jeden der mit DI arbeiten möchte, und auf kurz oder lang wird das jeder professionelle Framework-Nutzer sein.
Die zweite Session an diesem Tag war „Coupling Cohesion and more SUDO science“ von Sebastian Schürmann. Sebastian ging auch auf das Thema Abhängigkeiten ein, und zwar wie man Module entwickelt die möglichst „lose“ untereinander und auch innerlich gekoppelt sind. Es gibt ein dutzend verschiedener Arten der Kopplung (Stichworte: content coupling, external coupling, control coupling, stamp coupling, data coupling, message coupling), und er zeigte anhand von Codebeispielen wie diese jeweils aussehen. Interessant fand ich die Info über die anti-if-initiative: Der Programmablauf sollte möglichst nicht über if/switch gesteuert werden.
Normalerweise zeigen includes und requires an wie abhängig keine Klasse von anderen Klassen ist. In Zeiten von Autoloadern wird das ein wenig versteckt und man muss etwas mühsamer suchen um das herauszufinden. Interessant war auch noch seine Frage an die Hörer: Wer hat so etwas wie eine „utils.php“ wo er alles reinpackt was sonst nirgends hingehört? Über die Hälfte der Leute zeigten auf. Meistens sind genau solche Klassen ein Beispiel für Coincidental Cohesion, darin sind auch immer gute Kandidaten für Refactorings. Zum Schluss ging er genau auf solche Dinge ein: Abhängigkeiten innerhalb einer Klasse, Stichpunkte: Temporal Cohesion, Procedural Cohesion, Communicational Cohesion.
Vormittags erkundige ich mich bei den Veranstaltern ob ich den Teilnehmern einige ElePHPanten anbieten könnte die ich mitgenommen hatte. Joni war direkt einverstanden und bot mir sogar an extra einen Tisch hinzustellen, auf dem ich die Tiere präsentieren konnte, Danke dafür! Leider habe ich durch die Aktion das Mittagessen komplett übergangen, aber die vielen glücklichen Gesichter waren es wert. Bei dieser Aktion treffe ich auch Andrej, der letztes Jahr bei der Geburtstagsverlosung das Ticket für die Konferenz gewonnen hat. Leider habe ich zu wenig Zeit bzw. werde von ElePHPanten-Anfragern abgelenkt, und plötzlich ist er wieder weg. Ich finde ihn auch nicht wieder am Nachmittag ;-(
Die Session nach dem Mittagessen handelte von der Erstellung eines Parsers und wurde von Boy Baukema gehalten. Leider konnte ich dem Talk nicht viel abgewinnen. Es ging zwar langsam los mit regulären Ausdrücken und BNF (kennt man aus RFCs oder aus dem Studium), und ging dann in die Tiefen von Parser-Generatoren wie php-peg, es waren auch viele Beispiele dabei, aber mir wurde dann doch klar dass ich das (hoffentlich) nie brauchen würde. Guter technischer Talk, aber für mich uninteressant.
Der letzte Vortrag den ich besuchte wurde von Nils Adermann gehalten und behandelte das Projekt Composer. Dieses Projekt sollte jeder kennen der Projekte erstellt mit externen Abhängigkeiten, und das dürfte nahezu jedes Projekt sein. Sobald ein Framework genutzt wird oder irgendeine Fremdbibliothek, muss man sich Gedanken darüber machen wie man sie einbindet. Es gibt natürlich immer die Möglichkeit den Fremdcode einfach in das Projekt zu kopieren und mit in das eigene Projektrepository einzuchecken. Das nimmt einem aber die Möglichkeit diese externen Bibliotheken leicht upzudaten, das Repository wird extrem groß, und es ist schlechter Stil ein solches Projekt beispielsweise auf Github hochzuladen, besser ist es dort nur Verweise auf die anderen Projekte zu setzen (Submodules, SVN Externals). Composer ist ein sehr aufgebohrtes PEAR. Man kann mit einfachen Befehlen Bibliotheken installieren, updaten, Versionen verwalten, Abhängigkeiten auflösen und so weiter. Viele moderne Bibliotheken und Frameworks nutzen das noch junge Projekt Composer bereits und stellen ihre Arbeiten auf der Seite packagist.org zur Nutzung bereit. Auf jeden Fall ein nützliches Projekt das in der Zukunft sehr oft eingesetzt werden wird, und das man als Nutzer oder auch als Ersteller von Bibliotheken kennen und nutzen sollte.
Die Closing Keynote von Joe Stump hatte ein zentrales Thema: MOBILE. Mit einigen großen Zahlen sagt er der mobilen Entwicklung die große Zukunft voraus. Mehr Nutzung von Apps als „das Web im Browser“ und die rasante Verbreitung von Handys weltweit zeigen dass mobile Entwicklung die Zukunft ist. Mobile Webseiten sind dabei nicht ganz so wichtig wie (native) Apps. Entwickler sollten sich also an die mobile Entwicklung gewöhnen, und im Backend wird bald nichts mehr ohne APIs gehen, denn Apps wollen die Funktionalität eines Projektes nutzen.
Während der ganzen Konferenz lief auch eine Unconference. Jeder konnte dort einen Talk halten oder ein Projekt starten, Themen am zweiten Tag waren beispielsweise „Cryptography in Zend Framework“, „REST-APIs in practice“ oder auch ein Ganz-Tags-PHP-TestFest!
Ein großer Dank geht an iBuildings und die ganzen Helfer die die Konferenz möglich gemacht haben! Leider habe ich vom zweiten Tag nicht so viele Fotos, da bin ich etwas nachlässig geworden und habe es teilweise einfach vergessen 😉 Die Konferenz war insgesamt deutlich internationaler als die Konferenzen auf denen ich bisher war, alle Sessions in Englisch und ich durfte auch einige bekannte Persönlichkeiten aus fernen Ländern kennenlernen, wie Matthew Weier O’Phinney (Zend Framework Lead), Rasmus Lerdorf (father of PHP), Douglas Crockford (JSLint), Lorna Jane Mitchell (er kennt Lorna Jane nicht?), Chris Cornutt (phpdeveloper.org), Cal Evans (DevZone, Zend Framework, Voices of the elepHPant), Davey Shafik (Autor), Andrei Zmievski (Core-Entwickler, @a) und viele viele mehr. Werde auf jeden Fall versuchen nächstes Jahr wieder dabei zu sein!
Hier noch ein paar weitere Fotos:
Hört sich ja einer wirklich spannenden Konferenz an! Eine Frage: Was für Fragen wurden den an unseren PHP-Vater Rasmus gestellt?
David
11 Jun 12 at 19:21
Deine Frage bzgl. Performance Vergleich der einzelnen Implementierungen lässt sich, glaube ich, nicht ganz so einfach beantworten. Während Zend\Di recht losgelöst verwendet werden kann, hast du z.B. bei Flow3 den DI Part recht tief im Framework drin, es werden bei jedem Request (im Development Modus) alle geänderten Dateien geprüft neue gecachte Klassen mit etwas AOP Magic generiert. Zum Testen müsste man also wohl eine App schreiben und diese auf alle Frameworks portieren, was dann wiederum keine sinnvolle Aussage liefert da alle Frameworks irgendwo anders funktionieren.
Grundsätzlich kann man sagen, dass man auf jeden Fall auf eine PHP Konfiguration setzen sollte wenn man auf Performance wert legt 🙂 Externe Konfigurationen im Zusammenspiel mit der Reflection API funktionieren zwar, aber im Vergleich zur „nativen“ Konfiguration ist das ein größerer Unterschied. In meinen Tests mit unserem Framework gab es eine Steigerung von mehr als 100% bei der Verwendung von einer PHP Konfiguration im Vergleich zu XML + Reflection Magic. Wenn das ganze dann noch am Ende im APC landet ist noch deutlich mehr drin 😉
Stephan Hochdörfer
12 Jun 12 at 11:12
@David Da muss ich mal grad überlegen… Eine Frage war „Geben große Firmen wie Facebook, die ihren Erfolg auf PHP aufbauen, etwas an PHP zurück und tragen z.B. Code bei?“ Rasmus antwortete damit dass es natürlich deutlich mehr sein könnte, die Contributions halten sich sehr in Grenzen. Eigentlich sollte jede größere Firma mindestens einen Entwickler für PHP + Umfeld bereitstellen und etwas zurückgeben.
Eine weitere Frage bezog sich auf den Ton in der Mailingliste, Rasmus antwortet damit dass die Liste unmoderiert sei und auch bleiben solle, und dann einige Nicht-Zend/Nicht-PHP-Code Personen da gern auch mal etwas rüde Antworten gäben. Damit müsse man einfach leben, das Problem gebe es seit Jahren.
Mehr fällt mir gerade adhoc nicht ein, es wird aber Videos geben, vielleicht sind da auch die Fragen drauf.
Michael Kliewe
13 Jun 12 at 10:19
„[…] es wird aber Videos geben […]“
Das wollte ich gerade fragen 😛 Weißt du, ob es von allen Vorträgen ein Video oder immerhin Slides geben wird?
Sven
14 Jun 12 at 08:49
@Sven Die Info war leider falsch, es gibt auch dieses Jahr leider nur Audio (immerhin!). Man sollte also das TechPortal im Auge behalten:
http://techportal.inviqa.com/
Slides gibt es von fast allen Vorträgen, werde ich morgen hier posten.
Michael Kliewe
14 Jun 12 at 11:20
Schade, aber Audio + Slides sind ja schon mal was!
Sven
14 Jun 12 at 13:56
Die „Ist unsere Arbeit überhaupt wichtig ?“-Passage finde ich sehr interessant! Das ist ne Sache die ich mich desöfteren frage… Als PHPler macht man ja zwangsläufig „nur“ Sites und Apps, also nie Maschinensteuerung oder Hubschraubersoftware oder wasweissich. Aber so gesehen ist jeder Job, der auf dem Arbeitsmarkt verfügbar ist sinnvoll, obwohl ja nur wenige Prozent der Gesellschaft in direkt „wichtigen“ Berufen wie Medizin, Polizei etc arbeiten. Wir erschaffen immerhin „Technik“, die viele Tausende Menschen benutzen, bzw. ohne die ganze Firmen nicht existieren könnten, also hat das schon alles seine Daseinsberechtigung.
Und Coder sind – im Vergleich zum extrem vielen anderen Berufen – sehr gut bezahlt, von daher also volkswirtschaftlich also ein großer Nutzen, gemessen am Endergebnis.
Übrigens: Ich finde Rasmus Lerdorf verblüffend cool, sympathisch und total unnerdig. Ich hätte einen dicken bärtigen Typen erwartet. Sehr lässig!
Chris
24 Aug 12 at 13:42