Symfony is one of the most mature and rich frameworks that we can find on the market. Also, it has an extremely strong community. Once a year, its members meet at an event where they can share their experiences, gather new ideas and chat with the authors who have created the tools, libraries, and bundles that developers use on a daily basis. This event is called SymfonyCon. Oro products are built on top of Symfony, so we could not miss it!
In the fifth edition of SymfonyCon, almost 1000 community members showed up in Cluj, the 2nd largest city in Romania. The event was taken place in Grand Hotel Italia Cluj.
Recently Romania, and Cluj specifically, has become a well-known player in the Eastern European IT industry. With its high growth and stimulating economy, Romania has attracted many technology investments and outsourcing hires. It made sense that this year’s SymfonyCon event would be hosted in Cluj, Romania.
For an open-source project, having a large and vibrant community is critical to success. Learning the new advancements in the Symfony framework enables developers to be better at Oro product development. Moreover, many topics covered this year were about components and concepts that are used in Oro, so once again, this was a very good opportunity. As OroCommerce, OroCRM, and OroPlatform continue to gain momentum and popularity, Symfony developers will be in high demand.
Event Details and Speakers
The conference was a 5-day event: two-days of workshop, two-days of conference and one day of hackathon. The conference was split into 3 tracks: beginner, advanced and PHP track. It was great that every attendee could find something interesting at the show – no matter their level of Symfony experience.
Keynote, – Fabien Potencier
The first day started with a keynote from the well-known Fabien Potencier, founder of SensioLabs and Symfony. He was talking about the newest version of Symfony – Symfony4 which has been recently released, on November 30th. With the introduction into Symfony Flex – a new tool provided by Symfony that works as a composer plug-in to automate tasks – Fabien showed us how the approach of Symfony application development has changed. Whole monoliths need not be run for simple applications (eg. console app) and no more unwanted, coupled dependencies for all your Symfony framework codebase were some of the benefits. A point that was mentioned in the conference was when starting new projects, there will be nothing to remove as it would have just the bare minimum. If you need dependencies – you can simply add them.
The speaker also showed us a simple demo and one thing was apparent- Symfony4 is really easy to use and very developer-friendly. Last but not least, the newest version is really lightweight with around 70% fewer files and much fewer dependencies.
Decoupling an application with message queues, – David Buchmann
In this talk, David Buchmann described the general concept of MessageQueue and how to best take advantage of it. After showing a couple of implementations, he continued with patterns when dealing with asynchronous processing – which can be characterized by its “fast returns while delaying slow tasks”, “decoupled event listeners” and “high data processing”. The speaker finished with a couple of tips of how to deal with workers processes in PHP and possible issues that may arise when dealing with queues.
David’s slides can be accessed at this link.
Trend analysis and machine learning in PHP, – Michael Cullum
Cause and effect. Knowledge. Prediction of an effect. What these words have in common? Machine learning!
Michael Cullum took us into the world of learning processes and how to use them in real-life examples.
As a theoretical introduction, he described machine learning as a 4-step process. First, we need to (1) acquire data to be able to properly work on it. If we use different sources to gather data, don’t forget to clean it and have it structured, unified, and prepared. We can then start to (2) train our models in either a supervised (labeled data with known outputs) and unsupervised (only input data, without output; discover hidden patterns) form. The lasts steps are (3) to ask your question (what do we expect from the given algorithms) and (4) get a predicted answer, which is the final result.
After the introduction, Michael showed us a demo of how to use the popular machine learning library for PHP (https://github.com/php-ai/php-ml ) and provided a few real-life examples. Currently, the php-ml library supports a lot of useful features (eg. Algorithms, Cross Validation, Classification, Neural Network, Preprocessing, Feature Extraction and more). It was mentioned that this library is a nice starting point for discovering the key concepts behind Machine learning.
However, for complex use cases and production usage, we would recommend other tools and languages which probably could be used instead.
Discovering and solving performance issues, – Denis Brumann
There is no big application that has never struggled with performance issues. Such kinds of issues appear eventually. To solve them, we need to gather metrics and data on each stage of a product lifecycle. Denis presented a quick overview of couple popular tools that can be used to avoid such problems with performance.
First, we need to spot them at the early stages of development, and for that, we can use Symfony Web Profiler. In the “Performance” tab, we can see basic metrics and execution time. In “Twig”, there is a graph of the whole call rendering time. The “Doctrine” tab helps with gathering DB-related metrics like the number of queries and execution time. The Symfony Web Profiler is not just a dev-tool. All the information that it collects during a request can be used in functional tests. More information can be read here.
Another presented tool was the Apache JMeter, which can be used for load and stress testing. With very good documentation, JMeter is very easy to setup and use. The richness of features allows this tool to be used in many different use cases, eg. Web, SOAP / REST web-services, databases and more.
The last tool discussed was blackfire.io – the complete “Performance Management Solution” which basically can be used in all development, staging and production stages. More details: https://blackfire.io/docs/introduction
In summary, Brumann mentioned tips & tricks for performance optimizations including upgrading to php7, bytecode cache, doctrine caches and more.
Lessons learned building the Composer internals, – Jordi Boggiano
Jordi, in his humorous way, spoke about the history behind the Composer and his approach to open-source projects in general. During the speech, we could see how the development of such a big and widely used project like Composer incurred a lot of issues due to different environments, systems, machines, etc and all of them needed to be taken into account. Challenges that need to be overcome are not the same that developers face on a daily basis. Very interesting examples were about memory optimizations and the unusual use of the garbage collector.
In the second part of the presentation, he explained how to deal with responsibilities of open-source code and described his way from a total open-source model to one with commercial benefit – https://packagist.com.
Jordi’s slides can be accessed here.
Dependency Injection Component v4.0, – Nicolas Grekas
As the Dependency Injection component is basically the heart of any Symfony application, this talk was highly anticipated. Nicolas gave an interesting speech about the newest version of the component. The most interesting change is that all services will now be private by default. That significantly reduces container size and forces developers to use a cleaner approach (eg. no more containers as a dependency). At the same time, it increases the performance of Symfony applications. Other changes include FQCN service ids, autoconfiguration by interfaces, resettable services, simplified tags management in DI and more.
Full info can be found here.
A year of Symfony, – Sarah Khalil
In the last conference talk, Sarah Khalil reviewed what happened in last year’s Symfony community. It was a nicely aggregated review which included: form and validation component improvements (new form types, debug:form command, group validation in embedded objects and new panels in the Symfony profiler), prefixes to route names, debug:autowiring commands and much more. Sarah mentioned new workflow, weblink, and webpack components and also reviewed the changes made in Security components.
The last day of SymfonyCon event was planned for a hackday. More than 100 developers were working together as an open-source community. This year, during hackday, we made over 150 contributions to the most well-known bundles and libraries to support Symfony4. One more benefit that you could have this day is networking. Want to discuss a new idea for some bundle? Speak directly to the author. Want to use Composer in an unusual way and you’re not sure if it’s possible? Just go and ask Jordi himself. Want to have a Code Review from one of SensioLabs team members? Go and get it checked personally. In conclusion, Hackday was an amazing idea to connect all these people around an open source community.
This year’s SymfonyCon was a great way for any professional to increase knowledge and gain new experiences. The IT industry is very dynamic so we all need to be up to date with all the latest news. Even within the framework community, there are a lot of changes year-to-year, so attendees have that opportunity to be in the loop.
Such an event also gives our team a chance to talk about OroCRM and OroCommerce. We were happy to discuss and answer all the questions that the community had. We are very happy that our products are being more and more recognizable by Symfony developers.
The Oro Team is already starting to take this year’s information and apply it to our products. Stay tuned and see you in Lisbon next year!