Über Paul Seiffert

Paul ist seit Oktober 2010 ein Vollmatrose der Mayflower und arbeitet in einem Team von 6 Entwicklern als Lead-Architekt und stellvertretender Teamleiter. Zuvor studierte er an der TU München Informatik mit den Schwerpunkten Software-Engineering und Algorithmik. Sein Tech-Set umfasst sowohl PHP- als auch Javascript-Technologien wie Zend Framework 1, Symfony2, Node.js und Backbone.js. Paul ist immer an neuen Technologien und Vorgehensweisen interessiert und schreibt gerne über Neuerlerntes. Einige seiner Artikel sind hier auf http://blog.mayflower.de zu finden. Twitter: @SeiffertP Github: seiffert

Pimp my Backbone.View (by replacing it with React)

I’ve been using Backbone.js in a couple of projects now and my feelings about it are quite diverse. On the one hand, I like how it provides you with guidelines on how to structure your frontend code. Although splitting model and view is a very basic idea in software development, it also is very powerful. Backbone.js is of great help by providing collections which aggregate model instances and by being able to sync these models with a server via RESTful APIs. On the other hand, it always (and I hope that it’s not just me) seems to be a pain in the b*** to figure out the best way to implement a proper view lifecycle and to keep track of all registered event handlers. If you aren’t careful when removing or even just re-rendering views, you can seriously mess up event handling and prevent proper garbage collection. If you are just a little sloppy, this leads to a slow frontend with an always increasing memory footprint.
I’m not saying that Backbone.js is bad in handling UI events, just that you have to care about too many things that are common to most web applications. This article describes an alternative to the Backbone.View component.

Weiterlesen

Impressionen von der OOP 2013

In der letzten Woche konnte ich zwei Tage an der OOP 2013 teilnehmen. Die einwöchige IT-Konferenz bietet jährlich eine große Auswahl von Vorträgen in den unterschiedlichsten Bereichen.
Die Vorträge, an denen ich teilgenommen habe, waren von sehr guter Qualität – sowohl inhaltlich als auch didaktisch. In diesem Artikel möchte ich ein paar Worte zu drei der Vorträge verlieren, die ich besonders positiv wahrgenommen habe.

Weiterlesen

Development Environments with Vagrant and Puppet

Motivation

Setting up the infrastructure for new projects can be quite a pain in the ***. Even after the initial setup is done, adding new developers to the team requires a lot of time. Besides explaining the project to the new team member, the project’s development environment has to be installed on the new developer’s computer. This includes setting up virtual machines, web- and database-servers, updating libraries etc.

Many IT companies use the same technologies repeatedly which leaves them with multiple development environments that look very similar but have been set up separately. This problem can be solved by using a configuration management software and a smart tool for handling virtual machines.

Weiterlesen

Mayflower and Symfony2

Two weeks ago, I had the chance to attend Symfony Live 2012 in Berlin. At first, I tried to get a ticket by submitting several proposals for talks. This didn’t work out but the organizers were very kind and invited me to attend the conference for free!

A couple of days later, I read about the Symfony2 Framework Certification. I had passed some certifications before (namely Zend Certified Engineer PHP5.3, Oracle Certified Professional (OCP), MySQL 5 Developer, and Scrum Product Owner Certification) and thought this might be a good chance to deepen my Symfony2 knowledge. Mayflower’s reaction to my wish was very positive. In they end, Mayflower covered the certification fee and gave me the chance to be the company’s first Symfony2 Certified Developer.
Weiterlesen

ACLs and Symfony2

Like most larger PHP frameworks, Symfony2 contains a component that handles all kinds of security topics. Its main two capabilities are authentication and authorization. While making it easy to implement these concepts, the component separates them and executes one after the other. In the first step, the framework determines who the current user is or whether he is who he claims to be respectively (Authentication). Secondly, it evaluates whether he is allowed to perform a certain operation (Authorization).

This article focuses on authorization or – more accurately – Symfony2’s Access Control Lists (ACLs) and how they support the implementation of complex access right models.
Weiterlesen

Symfony2: Bundle your libraries!

In vielen Software-Projekten kommen Entwickler irgendwann an einen Punkt, an dem Funktionalität implementiert wird, die in anderen Projekten wiederverwendet werden können soll. Nachdem ich in der jüngeren Vergangenheit von mehreren Kollegen gefragt wurde, wie man dies in Symfony2-Projekten bewerkstelligen kann, wollte ich schriftlich eine Zusammenfassung der wichtigsten Punkte bereitstellen. Das Resultat ist dieser Blog-Artikel, der eine Schritt-für-Schritt-Anleitung enthält, wie man wiederverwendbaren Code kapselt und in einem eigenen Symfony2-Bundle bereitstellt.

Das Wissen, welches ich hier verpacke, habe ich teils aus der Symfony2-Dokumentation, teils aus der Erfahrung, welche ich in den letzten Jahren in Symfony2-Projekten gesammelt habe. Nachdem ich des Öfteren Library-Code aus Projekten ausgelagert hatte, konnte ich einige Patterns identifizieren und vor allem feststellen, dass diese Vorgehensweisen in Symfony2-Projekten (abgesehen von syntaktischen Eigenheiten) denen in beliebigen anderen Umgebungen sehr stark ähneln.

Die folgende Liste ist als Template zu verstehen, welches in einfachen Projekten genau so verwendet werden kann, in komplexeren jedoch wahrscheinlich erweitert werden muss. Weiterlesen

Content-Type Negotiation mit Symfony2

Die Mächtigkeit und Einfachheit des HTTP wird in vielerlei Hinsicht oft unterschätzt. Der folgende Artikel stellt einen Aspekt vor, bei dem genau dies der Fall ist: Die Aushandlung des Formats, in welchem Daten per HTTP transportiert werden. Leider wird in den allermeisten HTTP-Applikationen über das Format der Antwort nicht verhandelt. Es werden beispielsweise GET-Requests kategorisch mit HTML beantwortet, ob ein Newsfeed als Atom oder RSS geliefert wird, entscheidet ein URL-Parameter. Auch ist das Kriterium dafür, mit JSON oder XML zu antworten, nicht zu selten, ob auf die Ressource via XMLHTTPRequest zugegriffen wird. Hierbei halten sich selbst moderne HTTP-Applikationen kaum an den Standard.

Das Problem

Unser Anwendungsbeispiel ist eine Applikation, in der alle Daten sowohl in Form von HTML-Dokumenten als auch in JSON ausgeliefert werden können. Genau für solche Zwecke sieht das HTTP den Request-Header Accept vor. Ein HTTP-Client kann diesen nutzen, um dem Server mitzuteilen, welches Format er gerne in der Antwort vorfinden würde. Dabei kann er nicht nur ein einzelnes Format angeben, sondern auch mehrere und diese sogar priorisieren.

Weiterlesen

Dependency Management mit Composer

PHP befindet sich aktuell auf dem Weg, wieder eine angesehene Plattform für professionelle Webanwendungen zu werden. Dieses Ansehen muss sich erst wieder erkauft werden. Noch zu oft leidet die Sprache unter dem Bild, ihre Produkte bestünden nur aus schlecht strukturierten und unprofessionellen Scripts.
In vielen Fällen mag dies richtig sein und man muss zugeben, dass die Verwendung von PHP oft dazu verleitet, einen „Quick & Dirty“-Ansatz der sauberen Lösung vorzuziehen. Als professionelle Software-Entwickler müssen wir aber stets versuchen, mit unserer Arbeit hoch-qualitative und nachhaltige Software zu produzieren.

Ein Anspruch, den sich sicher jeder Entwickler stellen muss, ist, die Produkte seiner Arbeit wiederverwendbar zu halten. In diesem Kontext fallen oft die Begriffe Kapselung und Modularisierung. Um Module wiederverwendbar zu machen, müssen diese eine klare Schnittstelle besitzen und möglichst nur eine Aufgabe – und diese Aufgabe dafür richtig – erledigen. Beim Design modularer Applikationen merkt man schnell, dass bestimmte Module bereits an anderer Stelle entwickelt wurden und eventuell wiederverwendet werden können.
Dieser Artikel beschreibt eine Software, die das Wiederverwenden von PHP-Modulen automatisiert.

Weiterlesen

17.12. Zend Framework (1) vs. Symfony2

In this article, I want to highlight some differences between the two PHP frameworks that have been the most popular ones at the time of writing.
Zend Framework (ZF) is currently a quasi-standard in many PHP companies and Symony2’s popularity is constantly increasing. Symfony2 is pretty new now and many developers are thinking about if and when to make the switch from ZF to Symfony2 which is why I think we should spend time looking at the frameworks‘ differences.

I selected three topics that are implemented differently in these frameworks and will describe how each of them does it.

Weiterlesen

06.12. Doctrine 2 – Zend Framework Integration

In yesterday’s article of our advent calendar, we explained the concepts underlying Doctrine 2. In today’s article, we want to use that knowledge and create a simple Zend Framework (ZF) application that uses Doctrine 2 to persist its business objects.

While explaining how to integrate Doctrine 2 into Zend Framework, we will create a generic sandbox that can be used for future projects building up on these technologies.

Weiterlesen