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.
Fabien Potencier — slides
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.io — edit 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.
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 Pineau — slides
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 Noback — slides
Build Awesome REST APIs With Symfony2
William Durand, Lukas Kahwe Smith — slides
Here William and Lukas showed us how to build a REST API using some Symfony bundles and PHP libraries:
- JMSSerializerBundle: a key component for serializing data into several formats
- FOSRestBundle: like the SensioExtraBundle, it provides some nice listeners to handle data serialization on kernel view event, and an automatic routing generation
- BazingaHateoasBundle: to handle hypermedia links in response
- NelmioApiBundle: to automatically generate a beautiful documentation from your code
- Negotiation: a content negociation library, to handle request format while not using the URI extension
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 Pasich — slides
Increase productivity with Doctrine2 extensions
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 La — slides
How Kris Writes Symfony Apps
Kris Wallsmith — slides
Kris told us how he writes a Symfony application.
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.
Kris is very pleasant to listen, and even won the best speaker award.
Symfony2 Content Management in 40 minutes
Cool like Frontend Developer: Grunt, RequireJS, Bower and other Tools
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 Theys — slides
Async PHP with React
Jeremy Mikola — slides
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 Schussek — slides
Drop ACE, use voters
Marie Minasyan — slides
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.
Proxy pattern in PHP
Marco Pivetta — slides
Mastering the Security component's authentication mechanism
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 Zalas — slides
Application monitoring with Heka and statsd
Jordi Boggiano — slides
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 Marshall — slides
Decouple your application with (Domain-)Events
Benjamin Eberlei — slides
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 Gomes — slides
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.