Last friday, september 4th, the German city of Cologne was the host of a new symfony event: symfony Day. This new one-day event was organized by German web agency Interlutions. Before the event already, the excitement was building because of the interesting line up, and it looks like this excitement was very much justified.
As I came up to the 28th floor and came out into the main area, the first thing that happened was that I was blown away by the beautiful view of Cologne we had from up there in the Cologne Triangle tower, and I suspect many visitors of the conference will be able to confirm this feeling. The view was a full 360 degrees around if you walked around a bit, which was simply awesome.
The visitors themselves were all very nice people. I've spoken to quite a few people over the day and they were all very friendly. The organization of the event was also very good. Both the welcome, the lunch and the whole general organization of the event was well-done.
Since I gave the workshop and so did not attend any of the sessions, I've asked two attendees of the conference to give their opinion on the workshop and the sessions. Here's what they have to say:
Raphael Stolt attended the full-day workshop for symfony beginners:
After a fun evening at the pre-conference social the day before, on Friday 4th 2009 it was about time to dive into the realms of the symfony framework. As someone with a solid personal and commercial Zend Framework background I was pretty excited to take a 1000ft peek at this competitive framework. And given that the all-day workshop was hosted by Stefan Koopmanschap, who recently got promoted to the symfony community manager, the predestinated tour guide was literally available all day long.
The 'tour' project for the workshop was a minimalistic variation of a social link application like Digg or DZone. After setting up the development environment I was impressed how the bundled command line tool and it's available task ease common development steps like project creation, database initialization and seeding; definitive a feature where the growing Zend_Tool has to catch up. On the iterations from the initial application skeleton to the 'final' application Stefan made us glance at ways to hook in Propel based models, on how to install and use plugins i.e. sfGuardPlugin, since he didn't want us to commit a crime by reinventing the wheel, and other important practices like unit and functional testing or deployment. As the comma aggregation in the previous sentence indicates there was obviously some ground to cover and Stefan managed to use the available time and given circumstances (the workshop and talks where on the same floor, so there was sometimes a distracting background noise) to provide a solid symfony 101 workshop.
Sebastian Schulze decided to attend the second track, filled with sessions on more advanced symfony topics. Here is his report:
Jonathan H. Wage - Symfony 1.3 + Doctrine 1.2
A stone's throw away the leader of the Doctrine project Jonathan Wage drew the attention to the new features of symfony 1.3 and doctrine 1.2. Starting with the task system, which was extended to allow an
--installer- parameter to hand over custom deployment-scripts or the new
askAndValidate-method, which allows the task system to evaluate user input. Furthermore the form framework now has the possibility to include form elements via a simple
useFieldscall, rather than removing all other form fields. Good news, also for the TDD-Gurus: The test-output of symfony is now JUnit-compatible, making it possible to evaluate it directly in CI-tools like phpUnderControl or XINC. Also new where the parameters
-t, which outputs the whole stacktrace in case of an exception during a testrun and the option
--only-failed, which only takes care of the failed tests. Looking into the future, Jonathan promised a "doctrine extension repository" which should boundle doctrine extensions like the symfony plugin repository.
Bernhard Schussek - Best Practice Testing with Lime 2
Next one to take over the stage was Bernhard Schussek. The austrian symfony-machine is maintainer of the Lime 2 testing-framework and gave a comprehensive overview on the successor of 'lime.php'. Manifest of his session where the key aspects: "Write tests! Test frequently! Pay attention to performance, reliability and readability!" Bernhard enriched lime with the possibility to add java-style annotations like "@After" or "@Test" to the tests to control the execution flow. The new symfony-core member also gave tips on improving the performance of symfony testruns: Using mock-objects, SQLITE::MEMORY databases or stubs one can boost the performance of each single testrun significantly - which led to the main intent of his session: The tests should run smoothly and independent from each other. Or: "Leave the room how you entered it" and "Make it obvious what you are testing".
Nicolas Perriault - 30 Symfony Best Practices
Improving the communication between developers through standardization was the leitmotif of the following session, held by Nicolas Perriault, who brought his audience close to what he considered to be the symfony best practices. Next to - for experienced symfony developers somehow obvious exercises like - "the symfony core files should never be modified" or "only deploy your front-controller" he gave valuable tips for the correct use of redirects, the CSRF-protection or the caching-system. Nicolas also criticized common pitfalls like accessing the
sfContextfrom your model-layer or bloated helper classes - consisting of a bunch of static methods. Problems, probably known by every developer in the audience. Considering the oss-community, the release-manager of symfony 1.1 also encouraged to document code, give useful hints in your INSTALL or README files and share generic code by releasing own plugins. And: Don't write symfony with a capital 'S'...!
Xavier Lacot - Symfony vs. Integrating products, when to use a framework
After lunch, Xavier Lacot of Clever Age gave answers to the common question: 'symfony vs. integrating products, when to use a framework'. Following a short introduction he showed with simple examples how to integrate symfony with a existing CMS seamlessly - for example using clever rewrites and the
ob_flush()-method of php. Another possibility was the use of a database-synchronization class - possibly using phpSub - to sync both databases. A solution that would be - like Xavier said - 'huge work, but w00t!'. His mnemonics that should help deciding which method to use where:
CMS are good to make simple products, which are made to be looked at. Frameworks are good to make sites that are meant to interact with.
Jonathan H. Wage - Sympal a CMS Based on Symfony
Next one on the topics CMS / CMF was again Jonathan, wo gave an overview of the Sympal CMF. Sympal is a composition of 'symfony' and 'Drupal' and comes as a boundle of diferent plugins, all with the aim to give the same user-experience people know from Drupal but also supply a powerful MVC and ORM under the hood, to make your developers happy. Though the plugin is in an early state, Sympal has yete almost all features of a full fledged CMS, like different content-types, menus, breadcrumbs, inline- and backend-editing, an email-system and content-slots. All features come bundled through the YUI-Library in a clean and consistent user interface.
After a short Q/A Jon used the change to assure: 'The Sympal-framework is still alive, I've only had a lot of other things to do in the last weeks.' but also ask the community for help. Sympal is in need of a CSS/JS/YUI/Usability-wizard, that can support him in the frontend. (And by the way, there is also need for a 'sfSympalAutoSEOPlugin')
Dennis Benkert, Rob Bors - Symfony at Immobilienscout24.net
Head of the organization-team, Dennis Benkert himself took the mike for the last session of the day. Together with Rob Bors he gave an introduction how interlutions used symfony to implement the new marketplace search of the german real estate platform 'Immobilienscout24'. Main target was decoupling the app from the immobilienscout-backend. They've implemented a proxy who could talk to the backend using the existing XML-RPC api, retaining all features the developers knew of a symfony app.
One thing left to say: The symfony day cologne was a complete success - not only for the participants, but also for the symfony community. The organization left nothing to be desired: free wifi, power strips in the session-hall, a smokers room and the beloved coffee-flat rate. Only little downers where the speed in which some sessions had to be held: Most speakers had prepared large presentations for longer events like the symfony live conference and now had to crop their talks to little more than 45 minutes. Another thing that was a little distracting for the workshop participants was the missing structural seperation between the sessions and the workshop. To get some coffee or stroll around between the sessions, they had to cross the workshop.
As you can read, everyone seemed very satisfied. One personal note I want to add is that the lunch was perfect. Given I am a (pretty strict) vegetarian there was an awesome amount of vegetarian food for me which made my day.
All attendees were invited to also attend the 10 year anniversary party of Interlutions during the evening, however it seemed only a small amount of people actually made it back to the Cologne Triangle to celebrate. With those who were there, I had some interesting discussions on symfony, communities, typo3, and much more. The party was a perfect was to close off the day and even as I travelled back the next day, I still had this "buzz" in my head caused by this excellent conference.
Meanwhile, Interlutions has already announced that symfony Day will be repeated in 2010, so we will have something to look forward to. For now, if you want to look back at this year's event, this is possible. All slides are already available on a special archive page, which will soon also contain full video conference of the day. And of course, you can enjoy the pictures attendees made. See you next year!