SymfonyCon Warsaw 2013 in a nutshell

The first SymfonyCon in Warsaw has just finished, and I must admit that was great. Congrats to the SensioLabs team and especially Anne-Sophie for the organization. The venue was incredible with a big conference room, and more than 600 people were attending the main talks. First time a Symfony conference is sold out more than two weeks before the due date.

Here is an extract of the notes I took during those two days. As usual, talks were splitted into two tracks. So I have nothing to say for half ones, except a link to the slides.

By the way, if you find a typo, feel free to fork and edit this post, or ping me on Twitter. Thank you!

Opening keynote

Fabien Potencierslides

It's a ritual, every Symfony conference starts by fabpot's keynote. Fabien began with some statistics about famous PHP libraries around the Symfony ecosystem, and reminded us last features of the symfony.com website like the projects page, the easy way to edit page and the roapmap notifications.

Then, as the Symfony "lead merger", he spoke about his way to process pull-requests on GitHub. He wrote a gh command-line with nice features like the ability to change PRs' destination branch — you know, bug fixes must be done on the oldest maintained branch while new features on master —, squash git commits, update commit message with a label and add the full issue thread. This looks to be an amazing swiss knife and I hope it will be open-sourced shortly.

Lastly, he introduces the launch of a new tool called ubot.ioedit 2013-12-18: it has been renamed to fabbot.io. This is mainly an automatisation tool to detect typos and CS on pull-requests. Think of it as bot combining both stof and pborreli super powers.

Then two others speakers did a brief talk during the keynote: Javier Eguiluz and Julien Pauli who both joined SensioLabs recently.

Javier mainly spoted five ideas to improve the Symfony community via its website:

  • Improve the Symfony download experience
  • Unify conversations from GoogleGroup to GitHub
  • Merge all less known blogs (eg. Twig, Swiftmailer) into symfony.com/blog
  • Create new pages for communities, with members & events
  • Avoid having too much bundle for one thing — this is currently a (top-secret) project in progress and did not expand much on this topic

Julien, the release manager of PHP 5.5 and ex-collegue from BlaBlaCar, talked about the performance part he's going to focus on. He's actually working on a rewrite of the Pimple library. Some improvements had been made on the PHP code, but he's also working on C-extensions to handle the low level parts. This is not a total rewrite of the PHP library into a C library, but rather a hook of the slowest parts — like does the C-extension of Twig.

How to automatize your infrastructure with Chef

Grégoire Pineauslides

This was an interesting talk about the existing tools you can use to automatise your deployment workflow. There are many way to deploy an application, whether it is done from your laptop or a dedicated server. With such tools, you avoid human errors and better focus on business values. The keys are to deploy small changeset, deploy often, and use feature flags to deploy partially.

Several tools were mentionned: - Capistrano, plus Capifony to deploy easily - Fabric, usefull for repetitive tasks or one-shot batch command - Ansible - Chef and Puppet two (more or less equivalent) provisioning tools - Vagrant to provision virtual machines (don't forget this tip when using Symfony2)

Grégoire is currently using Chef to deploy at SensioLabs. I would like to have more concret examples but one talk wouldn't be enough.

Diving deep into Twig

Matthias Nobackslides

Build Awesome REST APIs With Symfony2

William Durand, Lukas Kahwe Smithslides

Here William and Lukas showed us how to build a REST API using some Symfony bundles and PHP libraries:

If you haven't already done it, I recomand you to read William's blog post about doing a REST API with Symfony.

Simplify your code with annotations

Piotr Pasichslides

Increase productivity with Doctrine2 extensions

Gediminas Morkevicius

Gediminas is the author of the DoctrineExtension library. Here he talked about some features of those extensions. Personally, I didn't really enjoy this talk. I don't know if he did not sleep for a week, but the intonation in his voice was quite insupportable and made me almost sleep. Also, as I already knew the library, I didn't learn that much.

Pitching Symfony to your Client

John Laslides

How Kris Writes Symfony Apps

Kris Wallsmithslides

Kris told us how he writes a Symfony application. From a composer create-project to the code in a controller, he shows all different steps he uses to do. What I can say is that Kris loves annotations, MongoDB, thin controllers, simple models, event listeners, and princesses.

He usually uses JMSDiExtraBundle for DIC configuration, require.js for handling sort of DIC in JavaScript, and prefers Voters than ACL (see also Marie's talk about that topic).

Kris is very pleasant to listen, and even won the best speaker award.

Symfony2 Content Management in 40 minutes

David Buchmannslides, code sample

Cool like Frontend Developer: Grunt, RequireJS, Bower and other Tools

Ryan Weaverslides, code sample

Today's tools for frontend guys are lots more evolved than 5 years ago. Here Ryan taught us — the backend guys — how powerful they can be. He did a great introduction to Bower, RequireJS, and Grunt, all powered by NodeJS.

A lot of (new) information has been explained in a few time. I think that may be a lot for people who never used it before, but even if the speech was fast, Ryan is a good teacher.

Personally, I was looking forward this talk in order to know how other people integrate such tools in a Symfony application. I must admit I'm getting rid of Assetic and I will spend a bit more time configuring correctly all the asset part in my applications. If you're curious too, look at Ryan's code example or even at this Symfony Grunt Edition made in the meantime by Kevin Bond.

Community Building with Mentoring: What makes people crazy happy to work on an open source project?

Cathy Theysslides

Async PHP with React

Jeremy Mikolaslides

Main purpose of this talk was to demonstrate how to build an event-driven PHP application. You may know how NodeJS works via its "Event Loop" to get non-blocking IO. Here Jeremy exposed the basic architecture of such asynchronous application and the way you can do it via processus.

PHP have the socket and stream APIs, but they're not very pleasant to use. That's where ReactPHP comes in. Keep in mind to always avoid blocking IO when using React — which is not the default of most operations.

This was really a nice talk about async and IO vs. CPU, but sometimes a bit hard to follow for a friday morning.

Symfony2 Forms: Past, Present, Future

Bernhard Schussekslides

Drop ACE, use voters

Marie Minasyanslides

Marie did a great job on teaching the different methods to implement a security access control in a standard Symfony app. She first showed us how the Access Control Engine can be complicated. Then she compared with a Voter implementation, which is much easier to code and test.

For French guys, I also recommend reading this blog post from Lexik team, or this one in English from Kris Wallsmith.

Proxy pattern in PHP

Marco Pivettaslides

Mastering the Security component's authentication mechanism

Joseph Rouffslides, code sample

Joseph made an excellent live tutorial on how to create your own security system. This talk is very educational if you haven't looked deeply into the security component. I strongly encourage you to view the (upcoming) video — or this existing one in French.

Symfony components in the wild

Jakub Zalasslides

Application monitoring with Heka and statsd

Jordi Boggianoslides

Jordi started quite recently to take an interest in application & architecture monitoring. Monitoring becomes more and more important when building complex apps with many "moving parts". Lead developer of Composer, he presented us the tool he chose to monitor packagist.org.

Actually there are many tools on the market. Each one serving a specific goal, for instance: - System: Collectd, Cacti, Nagios, Ganglia, Munin - Performance: Statsd, Sentry - Error reporting: NewRelic - Log aggregator: Graylog, Loggly, Splunk, Logstash, Syslog

It may be overkill to keep track of several tools. That's why he chose to look at Heka in order to have only one (nice) dashboard with all metrics.

Heka is like a generic middleware which will be able to read from many inputs (eg. syslog, nginx log, app log, etc.), apply some decoders and filters, and then write to any datastore. For instance all logs could be stored on elasticsearch and visualized via the Kibana UI. Note that Heka can also be put on a cluster.

This project is relativly young, but in active development by Mozilla. It worse keeping an eye on it.

Taming Runaway Silex Apps

Dave Marshallslides

Decouple your application with (Domain-)Events

Benjamin Eberleislides

This talk was about avoiding high coupling & legacy code. This is quite a common subject nowaday. Each developer try to find the best solution to write clean and decoupled code. So did Kris in his previous talk. Here Benjamin explained his approach using the event dispatcher.

The main difficulty is to find the right boundaries between the different parts of your application. You must extract the different events that can occur. Doing "event storming" with your team can help you a lot.

Also, avoid using services from other bundles, but prefer interfaces. Every action of your controller should have a dedicated event. Different approaches were suggested here, each with pros and cons.

How to build Console Applications

Daniel Gomesslides

Lighting Talks

Lighting talks are good way to encourage developers to present their work. There were a dizain of short speeches — less than 7 minutes each.

First talks were made par Sylius and Payum lead developers. We also have a speech about HTTP cache in ezPublish, and Magnus showed us a way to defer a process in your Symfony app with php-fpm using FervoDeferredEventBundle. Regarding fabpot, he spoiled us with futur improvements on the Console component (slides).

Second day of lighting talks has started with Sophie Beaupuis who made a demo of a Zend software to easily package and deploy any PHP application. Then Nicolas Grekas talked about the Patchwork-UTF8 library, Marc Morera introduced the GearmanBundle (slides), and David de Boer explained his strategy to invalidate HTTP cache using DriebitHttpCacheBundle. By the way, he started to work on a new FOS bundle to combine both DriebitHttpCacheBundle and LiipCacheControlBundle.

Liuggio talked about an important topic on avoiding the monolithic using a decoupled, flexible and tailored architecture (slides). I just looked over his website and saw several interessing posts. He's also author of Leaphly, a nice shopping cart for developer.

The lighting talks session has been closed by the amazing Jeremy Mikola who spoke about… lights! I can't describe his talk but that was very fun and very well played. I hope there will be a video.

I won't talk about the award ceremony, and the hacking days which will be covered on Symfony website. Thanks again for this huge event, and see you next year in Madrid.