Image may be NSFW.
Clik here to view.Wer hätte das gedacht. Die Jungs von Ideato kannte ich ja schon zum Teil, dass dann aber das gemeinsame Essengehen in einer Gruppe von 14 Personen endet und ich so gleichzeitig Gast bei einem Meetup der Italienischen PHP User Group sein würde, kam unerwartet. Hat aber gut Spass gemacht und in der Nähe von Notre Dame gab es viel leckeres zu Essen. Image may be NSFW.
Clik here to view.
Heute ist der mit Spannung erwartete Tag, an dem Symfony 2 das erste mal vorgestellt wird. Gegen Ende der Woche sollen dann auch die Quellen veröffentlicht werden.
Vorher allerdings gibt es auch ein paar spannende Themen.
Okapi meet symfony, symfony meet Okapi mit Lukas Kahwe Smith
Clik here to view.

Lukas und Jordi
OkAPI ist yet another PHP Framework. Aber Lukas und Jordi von der schweitzer Agentur Liip stellten nicht wirklich ihr Framework OkAPI in den Vordergrund, sondern sprachen über ihre Erfahrungen mit der Integration der Symfony Components.
Um weniger Maintenance Aufwände zu haben, haben sie angefangen die Components eines nach dem anderen einzubauen.
Als erste Component haben sie sfYaml eingebunden. Interessant hier ist, dass aus ihren Anforderungen das Feature des Full merge key support gewachsen ist. Leider ist es bisher nicht wirklich gut dokumentiert, aber in den Slides der beiden waren sehr interessante Beispiele. Key Merges sind im Grunde genommen Verweise zu teilen der Konfiguration auf die man in anderen Teilen der Konfiguration zugreifen kann. Sehr gut, um Dopplungen zu vermeiden.
Was sie ebenfalls eingebunden haben ist der Dependency Injection Container, der es ihnen ermöglicht wesentlich flexibler zu Programmieren, vor allem beim Testen, wo es oft notwendig ist, Teile der Applikation auszutauschen oder zu mocken.
Bevor OkAPI die Components eingesetzt hat, basierte eine Menge auf einer Filter Chain, welche sich im Betrieb als starr und unflexibel erwiesen hat. Die logische Konsequenz war, die Filter Chain gegen den sfEventDispatcher einzutauschen, der eine losere Koppelung erlaubt und die einzelnen Funktionalitäten sauber voneinander trennt. Hier wird es ja später noch eine Session zu Events und wie sie zu sauberen Schnittstellen führen können.
Auch, wenn es (bisher?) keine eigenständige Component ist, haben sie auch das sfRouting eingesetzt. Das Ganze hat erstaunlicherweise nicht mal einen Tag gedauert, was vermutlich positive Rückschlüsse auf die Code Qualität von OkAPI zulässt.
Als Resumee haben sie es geschafft ihre Maintenance Aufwände drastisch zu verringern. Allerdings nutzt OkAPI noch PHP 5.2 während die Symfony Components auf PHP 5.3 basieren. Im Ergebnis sind sie jetzt die Maintainer der PHP 5.2 Versionen der Components. Image may be NSFW.
Clik here to view. Aber auch das ist weniger Aufwand, als ganz alleine für den eigenen proprietären Code zuständig zu sein, ohne Feedback einer Community.
Die beiden arbeiten noch an anderen Open Source Projekten. Interessant klingt vor allem Arbit Tracker, ein Issue Tracker mit Continuous Integration. Den werd ich mir wohl mal näher anschauen.
PHP Code optimieren mit Xavier de Cock
Clik here to view.

Xavier de Cock
Xavier hat einen interessanten Einblick in die Internas der Zend Engine gegeben. Es ging darum, was mit dem Speicher passiert, wenn man mit Variablen hantiert.
Erstes Aha! Erlebnis war, das Speicher Sparen durch Verwendung von Referenzen ($b = &$a) genau das nicht macht, sondern in der Tat mehr Speicher verbraucht.
Zweites Aha! war, dass echo “Hallo”, ” “, “Welt” billiger ist als echo “Hallo” . ” ” . “Welt”. Nicht, dass das wirklich bedeutenden Einfluss auf normale Applikationen hätte, dort liegen die Probleme meist woanders, aber für einige Fälle, in denen es um Millisekunden geht, ist das sicher gut zu wissen.
Es ging weiter mit einigen Ausführungen, wie unterschiedliche Implementierungen der selben Funktionalität unterschiedlich performanten Opcode erzeugt. Im Ergebnis gab es die Empfehlung Loops zu optimieren, weil diese je nach Argumenten den Opcode aufblasen. Vor allem aber sollte man oft seine eigene Applikation profilen mit Xdebug oder Zend Debug und mit dem Vulcan Logic Dumper (PECL vld) der den generierten Opcode ausgeben kann. Vom letzten hatte ich noch nie gehört, klingt aber echt gut für Situationen, in denen es auf Optimierungen ankommt. Opcode Caching ist empfohlen sowie das Verwenden von PHP Funktionen anstelle selbstgebauter Funktionalität (nie array_merge() von Hand).
Wenn das noch nicht reicht kann man seine eigenen PHP Extensions schreiben und Tools wie Facebook HipHop, phc, Quercus oder RoadSend PHP verwenden.
Eine Einführung in Git mit Scott Chacon
Clik here to view.

Scott Chacon
Scott arbeitet für GitHub und hat diverses über Git geschrieben. Man merkt ihm vor allem drei Dinge an, 1. er ist absolut enthusiastisch was Git angeht, 2. er kennt Git in- und auswendig und 3. er hat bereits oft über Git referiert. Sehr professionell, sehr schnell aber gut zu folgen.
Er hat einen sehr guten Überblick gegeben, gezeigt wie Git sich von anderen VCS unterscheidet, wie typische Git Workflows aussehen und welche Vorteile Git bietet.
Vor allem das Branchen und Mergen sieht immer wieder beeindruckend einfach aus.
Alles sehr interessant und definitiv auf meiner Todolist für Dinge, die ich mir genauer ansehen will. Aber ich will gar nicht viel weiter ausführen, da gibt es bessere Quellen.
Die Folien von Scott sollte man sich aber sicherlich anschauen, wenn man an dem Thema interessiert ist. Obwohl ich mir nicht sicher bin, ob diese Folien ohne Scott funktionieren, weil sie doch sehr auf seinen Vortrag abgestimmt waren.
Symfony und das Zend Framework mit Matthew Weier O’Phinney
Clik here to view.

Matthew Weier O'Phinney
Matthew ist der Lead Developer des Zend Frameworks. Mit zwei Fragen zum Einstieg positionierte er Zend Framework geschickt neben Symfony.
Ist das Zend Framework eine Component Library oder ein Full Stack Framework wie Symfony? Seine Antwort: A little bit of both.
Sollte man sich für Symfony oder Zend Framework entscheiden? Seine Antwort: Why bother?
Beim Zend Framework geht es vornehmlich um Wiederverwendung von erprobten Implementationen.
In seinen Folien hat er anschaulich gezeigt, wie man Zend in Symfony einbindet und sogar PEAR als Fallback. Seine Codebeispiele weichen dabei ein wenig vom Jobeet Tutorial ab, weswegen man auf jeden Fall nochmal in Matthews Folien schauen sollte.
Er hat eine ganze Menge Komponenten aus dem Zend Framework erwähnt, die sich sicher gut in symfony nutzen lassen, wie Zend_Gdata, Zend_Service_Amazon, Zend_Service_Akismet und die anderen Zend_Service_* Sachen, alle Zend_Feed_* Sachen inkl. dem Zend_Feed_Pubsubhubbub und Zend_Lucene, Zend_Pdf und vieles mehr. Es macht wirklich Sinn sich mal einen Überblick über die vorhandenen Komponenten zu verschaffen.
Implementieren eines symfony-basierten CMS in einem Verlagshaus mit Marcos Labad
Clik here to view.

Marcos Labad
Marcos arbeitet für eine Agentur in Madrid, die für ihren Kunden CondéNast ein CMS auf symfony Basis umgesetzt haben. Hier berichtete er von den Erfahrungen, die in diesem Projekt gesammelt werden konnten.
Im ersten Teil war er mir persönlich viel zu generisch. Marcos hat viel richtiges gesagt über Online Projekte im Allgemeinen, aber was genau das Besondere ist bei der CMS Entwicklung gerade für einen Verlag blieb leider anfangs auf der Strecke. Erst in der zweiten Hälfte wurde es dann interessanter.
Das entwickelte CMS (Symflex) bietet eine Admin Schnittstelle an, mit der Designer neue Layouts erstellen können mit HTML und einer eigenen Tag Library. Aus diesen Layouts werden dann Admin Formulare generiert, die genauso viele Widgets enthalten, wie der Designer an Tags aus der Tag Library verwendet hat. Über diese generierten Formulare können dann die Redakteure ihre Inhalte einpflegen.
Sehr interessanter Ansatz, der Design getrieben. Sicher hat es was für sich, wenn die Eingabemasken für die Redakteure genau auf das Design abgestimmt sind, aber Designern die Möglichkeit zu geben produktive Layouts zu erstellen und zu verändern stelle ich mir schwierig vor. Aber da werde ich wohl noch ein wenig drüber nachdenken müssen, um mir eine Meinung zu bilden.
symfony Events nutzen um saubere Klassen Schnittstellen zu erstellen mit Dennis Benkert
Clik here to view.

Dennis Benkert
Dennis’ zweite Session drehte sich um das Erreichen sauberer Schnittstellen durch Verwendung des symfony Even Dispatchers.
Der Event Dispatcher, der sowohl in symfony 1.x integriert ist, als auch als unabhängige Component vorliegt, implementiert den Observer Design Pattern.
Über ihn können unabhängige Komponenten miteinander kommunizieren ohne voneinander zu wissen. Reaktive Komponenten registrieren sich für einen bestimmten Event, während aktive Komponenten solche – frei definierbaren – Events an den Dispatcher melden. Dieser wiederum unterrichtet alle registrierten “Listener”.
Wenn ich beim bauen einer Komponente also an geeigneten Stellen entsprechende Events melde, muss ich mich innerhalb dieser Komponente nicht mehr darum kümmern, welche anderen Komponenten zu benachrichtigen sind.
Den Events können beliebige Parameter mitgegeben werden und ein besonderer Fall erlaubt es sogar, dass die Listener diese Parameter bearbeiten und eventuell modifiziert an die aktive Komponente zurückliefern. Die Logistik dahinter passiert dabei ausschliesslich im Event Dispatcher, die Komponenten müssen sich lediglich auf die Events einigen, nicht aber von der jeweiligen Implementation wissen.
Durch diese Art der Entkoppelung schafft man automatisch einen grossen Schritt in Richtung Separation of Concerns und damit sauberere Schnittstellen.
Dennis hat es natürlich nicht versäumt mit reichlich Code Beispielen zu zeigen, wie das Ganze implementiert wird, aber das muss ich hier nicht wiederholen, das werdet ihr wohl selbst finden. Image may be NSFW.
Clik here to view.
Deployen einer symfony Applikation in die Cloud mit Kris Wallsmith
Clik here to view.

Kris Wallsmith
Kris ist nicht nur ein Mitglied des symfony Core Teams sondern auch Entwickler bei nebul.us, einer amerikanischen Firma deren Online Service die Bewegungen eines Users und seiner Kontakte in verschiedenen Social Networks visualisiert.
Es geht aber vor allem darum, wie man mit symfony skalierbare Websites baut. Nebul.us verwended dazu Rackspace und Amazon S3.
Benutzt wird ein MySQL Master/Slave Setup. Dazu gibt es in symfony/doctrine drei Datenbank Connections, zwei für Slaves und eine für Schreibzugriffe auf den Master, der dann mittels MySQL Replcation die Slaves updated.gewinnen kann.
Um die Queries entsprechend Umzuleiten wurde die Doctrine Query Klasse überschrieben, so dass sie für SELECTs die Slave Connection nutzt während alle anderen Queries auf den Master geleitet werden. Testbarkeit in Entwicklungsumgebungen ohne Master/Slave Datenbank wird durch Connection Listener erreicht, die entsprechend aufpassen. Dankenswerterweise hat Kris dann das Ganze live als sfDoctrineMasterSlavePlugin veröffentlicht.
File Uploads sind ein weiteres Problem, denn die liegen in diesem Projekt in der Amazon Cloud. Die Lösung hierfür waren PHP StreamWrapper, um entsprechende Aufrufe weiterleiten zu können. Eine schöne Anwendung, für dieses Feature wie ich finde.
Neben ein paar weiteren netten Tipps zum Thema Deployment, gab es noch ein paar kurze Einblicke in die Nebul.us Codebase. Für alle, die sich mit Clouds und Skalierbarkeit beschäftigen wollen, werden die Folien sicher sehr interessante Tipps geben.
symfony Applikationen debuggen mit Alvaro Videla
Clik here to view.

Alvaro Videla
Alvaro hat eine Ganze Menge Möglichkeiten des Debuggens von symfony Applikationen gezeigt.
Der Vortag lässt sich grob in drei Teile aufteilen: Logs, Benchmarks und Metriken.
Logging Probleme in Produktiv Umgebungen gibt es viele. Eines ist sicherlich, dass bei mehreren Webservern die Schwierigkeit besteht immer nur einen Server lesen zu können. Mit einem zentralen Log für alle Server kann man da schon erste Vorkehrungen treffen. Hier bieten sich Datenbanken oder Syslog an. Alvaros Wahl fiel auf den Key/Value Store Redis. Ein weiterer interessanter Ansatz war das avAMQPPlugin zu nutzen, um die Logs auf verschiedene Log Stores aufzuteilen, um damit verschiedene Tools und Perspektiven zu ermöglichen.
Für das Benchmarking seltzt Alvaro neben den symfony eigenen Timern auch auf externe Tools wie das von Facebook stammende XHProf . In einem 5 Minuten HowTo zeigte er den Einsatz des Tools und was man an Informationen damit gewinnt. Aber Alvaro hatte n och ein paar mehr Tools auf Lager. Tsung (High Performance Benchmarking Framework) war mit beispielsweise komplett unbekannt.
Metriken kann man mit Graphite visualisieren, aber da war die Zeit des Vortrages eigentlich auch schon rum..
Mit symfony bei Yahoo! eine Plattform erstellen mit Dustin Whittle
Clik here to view.

Dustin Whittle
Dustins Vortag zu folgen ist nicht immer leicht. Er ist verdammt schnell und hat Folien voll mit Text. Das überfordert schon ein wenig. Nichtsdestotrotz war es sehr interessant ihm zuzuhören und einen kleinen Blick hinter die Kulissen von Yahoo! zu bekommen.
Besonders interessant fand ich, das Yahoo! scheinbar auch wirklich alles patcht, um auf ihre Bedürfnisse optimiert zu werden: yPHP, yMySQL, ySymfony und vieles mehr. Die Sinnfrage muss man aber glaub ich nicht stellen. Ich nehme an, dass die Kosten/Nutzenrechnung für Yahoo! aufgeht. Das heisst aber nicht, dass ich einen ähnlichen Weg einschlagen würde. Image may be NSFW.
Clik here to view.
Weiter interessant scheint das ysfDimensionsPlugin zu sein, welches für Applikationen, die in vielen Umgebungen laufen müssen einige Extras zur Configuration Cascade von symfony hinzufügt. Ausserdem gibt es ein eigenes I18n Feature namens R3, welches (wie fast alles andere auch) ebenfalls Open Source ist.
Witzigerweise verwendet man bei Yahoo! nur selten Doctrine und wenn dann nur in nicht-High Traffic Sites. Auf allen wirklich performancekritischen Sites nutzen sie einfach gar kein ORM! Stattdessen setzen sie ausschliesslich auf Webservices, die wiederum in Java, C++ oder Erlang umgesetzt sind.
Noch einige symfony spezifische Performance Tipps gab es zum Schluss, aber das waren so viele Kleinigkeiten, dass ich auf Dustins Präsentation verweisen muss, die sicher bald online bereitstehen wird.
Symfony 2 enthüllt von Fabien Potencier
*Trommelwirbel*
Ganz ehrlich, da gab es soviel neues zu erfahren und doch so viele Fragen offen, ich werde sicher nochmal ausführlicher über Symfony 2.0 berichten, aber für heute lasse ich ein paar Bilder sprechen.
Image may be NSFW.Clik here to view.

Clik here to view.

Clik here to view.

Clik here to view.

Clik here to view.

Clik here to view.

Clik here to view.

Clik here to view.

Clik here to view.

Clik here to view.

Clik here to view.

Clik here to view.

Und so ging Symfony Live 2010 zu Ende. Lohnenswert in vielerlei Hinsicht, ich bin das nächste mal sicher wieder dabei!
Image may be NSFW.
Clik here to view.