phpCE, as the event aimed at a wide group of PHP programmers from Central Europe, leaves Poland for the first time. Stronger than before thanks to the organisers of Brno PHP Conference and volunteers from the Pehapkaři group. Together we have been working for the success of this year’s edition and we are inviting you to Prague. Our Special Guest this year will be Rasmus Lerdorf, the PHP Creator.

Friday 26th October 2018

10:00 Full-Text Search Internals
Workshop by Philipp Krenn in workshops (2 hour)

Today’s applications are expected to provide powerful full-text search. But how does that work in general and how do I implement it on my site or in my application? Actually, this is not as hard as it sounds at first. This talk covers: * How full-text search works in general and what the differences to databases are. * How the score or quality of a search result is calculated. * How to handle languages, search for terms and phrases, run boolean queries, add suggestions, work with ngrams, and more with Elasticsearch. We will run all the queries live and explore the possibilities for your use-case.

Building Symfony application with Ports and Adapters approach and BDD
Workshop by Michał Pipa, Dariusz Drobisz in workshops (4 hour)

Having code that is not coupled with any framework has a lot of profits. There is a small probability that you will be changing framework during your project lifecycle, but that kind of approach gives you easy way to reuse some of your functionalities across different styles of user interaction. GUI? API? Console command? Easy peasy with small effort. Everything with high understanding of domain you are working for. During this workshop Michał and Dariusz will show you how to work close with business can help you creating clean code, that you will love to work with in long term projects. Attendees will use Behat and PHPSpec to design how their system will communicate internally between their component and with the outside world. Next step will be integration of that framework agnostic application with Symfony 4. You will learn how to do that in loosely coupled way, where Symfony will be tool that helps you work faster, but don’t dictate you how your application should be written. In this part you will get familiar with bunch of Symfony components. We will start from the beginning and build application using components like: routing, Doctrine, Twig, forms, validation and more. And we will do that on top of domain code developed in first part of workshop. If you have never used Symfony, this workshop will get you started.

2
Tactical DDD Practices applied to Doctrine 2 Projects
Workshop by Ion Bazan in workshops (4 hour)

In this full day of hands-on coding we will approach development with Doctrine ORM from a tactical DDD perspective. We will start from a minimal specification, exploring yet-to-be-discovered business scenarios in a rich domain, how to plan features, how to isolate them into workable units, implement them in a framework-less environment and finally test them effectively. We'll freshen up some DB design done "domain-first", looking at the possible performance issues, how to mitigate them on the long run and how to provide an optimal data model for both writes and reads without sacrificing valuable abstractions in the domain logic. At the end of the day, you will have a good overview of how to attack relational DB abstractions, when to optimise for business interactions, and how to optimise for read interactions.

0
Event Sourcing For Real
Workshop by Stefan Priebsch in workshops (4 hour)

There has been much talk lately about Event-Driven architectures, Domain-Driven Design, CQRS, and Event Sourcing in particular. Even though those concepts are somehow related, understanding them does not get easier when mixing them up. In this workshop, we will go in-depth with Event Sourcing, briefly touching on related concepts to understand how they relate. Do you believe one could create a full-blown persistence solution with less than 400 lines of code? With Event Sourcing, we can. Come and see for yourself, we will code a working solution live in less than half a day. In the afternoon, it will be your turn to write code and put Event Sourcing to work yourself. While working on the exercise, you will be individually coached by the trainer. Every question will be answered! Make sure to bring a laptop with your favourite development environment (the current version of PHP, an IDE, and PHPUnit). Attendees should have a good working knowledge of PHP, decent OOP skills, and be familiar with the basics of PHPUnit. No frameworks or other third-party code will be needed.

12:00
1
Aspect-Oriented Paradigm in PHP with Go! AOP
Workshop by Alexander Lisachenko in workshops (2 hour)

Have you already mastered you object-oriented skills? Want to practice something new and interesting? I have a special tutorial for you and it will teach you new programming paradigm called AOP (Aspect-Oriented Programming)! In this tutorial we will review general terms and rules of this paradigm, then we continue with practical part and will use the Go! AOP framework for our demo application. We will learn different pointcut types for method interception, class initialization, property access and apply them to our code. Last hour we will use for learning AOP patterns like caching, logging and much more.

15:00
0
GraphQL Server in PHP with Symfony Flex
Workshop by Renato mefi in workshops (4 hour)

"GraphQL represents a massive leap forward for API development." says GitHub. What can we do with it in PHP? This workshop will show you from the basic setup of your GraphQL Server with Symfony, possibly teach you some tricks on Symfony Flex and then start exploring a lot of the powers of GraphQL, handling a more complex schema, treating performance, security and versioning (Schema deprecation), if in time we'll also check some cool tech using promises to fetch data and get a grasp on how to avoid the n+1 issue on APIs. If you're an API developer this workshop might change your way of thinking about it!

Saturday 27th October 2018

09:15
9
Keynote: 12 years in the life of elephpant
Keynote by Damien Seguy (45 minutes)

The last ones who told me I could learn from a plush toy were my daughters. Of course, I acknowledged. Yet, it dawned on me : after ten years of life, the PHP plush has achieved so much ! It went to the White House and Antarctica ; it spawned forty thousands offsprings and a jet-set generation of collectors ; it built bridges within and outside the community. Nowadays, it is alive and kicking. It still reviews my code, casting an odd look to me, once in while. No one can have enough elephpant.

10:00 Good Project From Scratch
Talk by Pawel Lewtak in Relaxing (1 hour)

Can you start a new project from scratch instead of maintaining legacy one? You're the lucky one! I want to talk how a good project should look like, from analysis phase till release and later maintenance. Talk will mostly about signaling important things to focus on like requirements analysis, code structure, code review, TDD, continuous integration, monitoring, performance tests etc. I don't want to go in-depth on every one of them but give you hints what is important and what to read more about and in which direction you should make research if you want to improve your skills, have a better project and be calm during next project release. During the talk I'll go through each phase of project lifetime and say what you as a developer should do on each of them to limit the possibility of ending up with legacy code.

5
How I learned to Stop Wiring and Love Autowiring Containers
Talk by Beau Simensen in Intermediate (1 hour)

Does managing YAML, XML or PHP container configurations make you sad? Do you dread making changes to your classes’ dependencies for fear of the inevitable container configuration wiring blues? Life doesn’t have to be this way! Not if your container supports autowiring, that is. Hear one developer’s journey into the wild world of containers, learn how autowiring works, and find out how using autowiring can free you from having to manually configure every dependency.

Image classification in PHP using neural networks
Talk by Karol Przybyszewski in Geek (1 hour)

Image processing using neural networks is one of the hottest topics related to artificial intelligence. During the lecture I will show the basics of neural networks on the example of recognizing hand-written numbers. In order to accurately show the mechanisms of neural networks, the code used is written in 'pure' PHP, without the use of external libraries.

11:15
6
From Helpers to Middleware
Talk by Marco Pivetta in Relaxing (1 hour)

Over the past decade, we've seen frameworks bloom, die, be replaced and re-born. We've seen good practices, anti-patterns and generally styles of coding come and go. What's the takeaway from the last decade of framework development? Where are we going? What should we explore next? We'll look at a brief history of frameworks, at which practices emerged from the various communities, and which of them survived and evolved, as well as recommendations to keep pushing forward.

Profiling PHP
Talk by Sebastian Grodzicki in Intermediate (1 hour)

You cannot improve what you cannot measure. That's why profiling applications should always be the first step before trying to improve its performance. Learn how to spot your applications' bottlenecks and how to adopt profiling into your developer pipeline.

Contributing to PHP's Core
Talk by Gabriel Caruso in Geek (45 minutes)

Even wanted to contribute to PHP's Core? This is your time! From tests to a new function, PHP is open for new contributors. Fixing bugs, document things, cleanups, refactorings, or even new small functions. In this talk, we're gonna see how the `is_countable` function was made, and what we can learn from that.

12:30
1
Get Rolling Fast with Symfony Flex
Talk by Beau Simensen in Relaxing (1 hour)

Unsure where to start with your next application? Are you sure you want full stack Symfony eventually but not sure you can commit to the extra work upfront? Afraid if you start with a micro-framework like Silex you’ll end up needing to migrate to full stack Symfony anyway? Enter Symfony Flex. Symfony flex brings all of the power of full stack Symfony with the upfront requirements of a micro-framework. Choosing Symfony upfront not longer commits you to the overhead you might expect from a traditional Symfony project. See how quickly a new project can be started and how it can evolve over time.

How Doctrine caching can skyrocket your application
Talk by Jachim Coudenys in Intermediate (1 hour)

When people talk about Doctrine (or any ORM for that matter), the performance issue always comes up fairly quickly. Besides the fact that Doctrine will help you develop faster, so a little overhead doesn’t really matter, there are numerous options to increase the performance of the application. By understanding how the system works in the first place, a lot of issues can be avoided right away. When you have done everything to avoid these pitfalls, you can bring in the big guns: caching. Doctrine has different caching mechanism and since Doctrine 2.5 “Second Level Cache” was added to our toolbox. After this talk, you should know what the impact is of every cache and how to use it.

Refactoring the Domain Guided by Tests
Talk by Pim Elshoff in Geek (1 hour)

There once was a model quite scenic Many lines but wholly anemic New features requested But nothing was tested The burdened developer feels sick Legacy code is code that makes money, as they saying goes. But we have an opportunity to refactor when tickets and feature requests come in. How are we going to make sure we don't break things? Using a test first approach we will turn this dumb data container into a rich and meaningful domain model. This gives us the confidence to tackle new challenges, without fear of regression. We will create a safe path forward guided by test driven development and new feature requests only. If you know a bit about tests but don't know how to get started in your own code base, then this is the talk for you.

14:30
7
PHP in 2018
Talk by Rasmus Lerdorf (1 hour)

Let's talk about the story of PHP so far, PHP 7.3, his performance, static analysis and a new low-overhead profiler. Then I answer your questions with a pleasure.

15:30 How to create chatbot in PHP (and why)?
Talk by Adam Matysiak in Relaxing (1 hour)

- Why create chatbots? - What can you do with them? - How to start? - What are the possibilities with Messenger? - Live coding

2
Nuclear powered software security
Talk by Christopher Riley in Intermediate (1 hour)

It seems to be almost a weekly occurrence that another company makes the news headlines for being hacked and in the process disclosing sensitive user data and company secrets. These security meltdowns can cause catastrophic effects to the company in lost user trust and huge costs putting things right. A nuclear power plant is considered one of the most dangerous things mankind has built, yet they very rarely go wrong. The systems engineering that goes into making nuclear power plants safe is a fascinating topic to study but on the surface it seems entirely irrelevant to PHP developers. In this talk I'm going to show you how this level of safety is achieved, what happens when it goes wrong and then see what lessons we, as PHP developers, can learn from it to help us secure our applications from meltdown.

1
Running PHP applications on .NET Core
Talk by Jakub Míšek in Geek (1 hour)

At iolevel, we are developing Peachpie, the modern PHP compiler and runtime for .NET and .NET Core, sponsored by the .NET Foundation. Peachpie is a complete re-implementation of the entire PHP runtime and libraries in C# and is capable of running entire real world applications on .NET, such as WordPress, Symfony or MediaWiki. The goal of the project is to allow developers to combine the simplicity and ease of development of PHP with the performance, stability and security of .NET.

16:30 Docker for "dummies"
Talk by Jakub Kluvánek in Relaxing (30 minutes)

- co je to docker? - pro jaké případy ho použít? - k čemu je docker-compose - co jsou volumes? - jak funguje v dockeru networking? - praktické ukázky Přednáška je určena všem, kdo Docker "tak trochu" používají, ale mají v tom guláš a potřebují si vyjasnit některé pojmy.

1
Object reorientation
Talk by Christopher Riley in Intermediate (1 hour)

We are all SOLID developers who like to keep DRY, these are rules we stick to try keep our code clean. Despite this, we often end up writing procedural code wrapped up inside objects. This code can be hard for our colleagues and collaborators to get to grips with and understand. Join me for this object reorientation as we take a look at how we can leverage the power of object oriented design to write code which is not just SOLID, but easy to reason about and easy for others to understand.

1
Proactive web security
Talk by Bastian Hofmann in Geek (1 hour)

Keeping your web application secure and free from vulnerabilities is hard work, even if you know the OWASP Top 10. In this talk I will show tools, best practices and patterns to help you with this, so that you can find security issues before an attacker does and even prevent them in the first place.

17:00
0
Instant Upgrades with Rector
Talk by Tomas Votruba in Relaxing (30 minutes)

Before composer we downloaded packages manually, one by one. Now we do it in composer update. That way you'll update a dependency from Symfony 3.0 to Symfony 4.0. How do you fix BC breaks in your code? Manually, one change after another, file by file. In non-PHP world, lazy Google and Facebook folks automated such work with tools. What about PHP? With AST from [nikic/php-parser](https://github.com/nikic/PHP-Parser) this is now possible in PHP as well. I'll show you how Rector can handle 80 % of boring upgrades for you. I can help with Symfony, Sylius, Twig, Nette, Doctrine and PHPUnit code.Než existoval Composer stahovali jsme balíčky ručně, jeden po druhém. Teď to děláme přes composer update. Tímto způsobem upravíte závislost ze Symfony 3.0 na Symfony 4.0. Jak ale opravíte nekompatibilní změny v kódu? Ručně, jedna změna za druhou, soubor za souborem. V ne-PHP světě, líní Google a Facebook automatizovali takovou práci nástroji. Co PHP? S AST z nikic/php-parser je to nyní možné i v PHP. Ukážu vám, jak může Rektor zvládnout 80% nudných upgradů. Mohu pomoci se Symfony, Sylius, Twig, Nette, Doctrine a PHPUnit.

18:00 Using migrations and fixtures
Talk by Miro Svrtan in Relaxing (30 minutes)

Manually adding data to our development environment is tedious and boring, not being sure on what changes will be applied to production database after deployment can be dangerous. To battle this issues, developers decided to load gigabytes of production data on their machines or run queries manually before or after deployment. In the world of crazy fast changes, working with more and more team mates and on more complex projects, automation and reliabilty are becoming a must have. Fixtures will give you opportunity to have small yet relevant data set so you dont have to import production data or enter testing data into the system your self, every time system changes. By using migrations we can easily transfer database changes amongst the team and get the confidence on the changes that will be applied to staging/production. In my case, both concepts helped communicate changes better and allowed us to modify the system with more confidence and at a faster pace. While some popular frameworks and ORM's dont ship with fixtures or migrations support by default, there are great extensions to provide this. I will showcase ones for Symfony and Doctrine but talk is more about their concepts and not the implementations.

2
Introducing CQRS into Legacy Code
Talk by Stefan Priebsch in Intermediate (1 hour)

Getter methods retrieve state, while setter methods change state. We all know that. HTTP GET requests retrieve state, while HTTP POST requests change state. We all know that. Then why have we built so many applications with a single object model, blatantly ignoring this separation? Turns out that creating a separate model for reading and writing makes a lot of sense. But how can we introduce this concept into legacy applications? This presentation shows how to do it, and what is in it for you.

2
PHPStan Under the Hood
Talk by Jan Tvrdík in Geek (1 hour)

PHPStan is popular tool for analyzing PHP code that can help you greatly reduce the number of bugs in your code. Have you ever wondered how analysis of dynamic, gradually typed languages such as PHP is done? In this talk we're going to explore how PHPStan internally models many aspects of PHP language. We're going to have a close look at PHPStan's type system. How does it model both simple and complex types. How types are combined together and how such combinations can be used to model many dynamic aspects of PHP language or how they allow us to do reliable dead code detection. I'll introduce the concept of trinary logic and how it allows PHPStan to support both legacy and modern code bases. We're also going to have a look at type guards. How they work. What they can and what they currently cannot do. And I'll show you how it all fits together to create a working system.

18:30 JSON API: Možná nepotřebujete GraphQL
Talk by Ondřej Machulda in Relaxing (30 minutes)

Možná jste v poslední době slyšeli o GraphQL. Je tedy opravdu čas opustit REST API, jak někteří tvrdí? Myslím, že zdaleka ne - a chtěl bych vám ukázat existující alternativu pro vytváření dobrých REST API - standard JSON API, okolo kterého se rozvíjí zajímavý ekosystém i v PHP.

19:00
1
Review unknown code with static analysis
Talk by Damien Seguy in Relaxing (1 hour)

Code quality is not just for christmas, it is a daily part of the job. So, what do you do when you're handed with a five feet long pole a million lines of code that must be vetted ? You call static analysis to the rescue. During one hour, we'll be reviewing totally unknown code code : no name, no usage, not a clue. We'll apply a wide range of tools, reaching for anything that helps us understand the code and form an opinion on it. Can we break this mystery and learn how everyone else is looking at our code ?

0
Natural Language Understanding meets PHP
Talk by Maximilian Berghoff in Intermediate (1 hour)

To build a PHP Skill for your Alexa Skill Server is easy at the moment, cause there are lots of tutorials. But what about NLU. NLU is Natural Language Understanding, which means Lerning and Understaning Konverstations. There are several provides to serve NLU, but none of them keeps the data in your hands. But what to do if you do not like to share your data with the NSA? I found a solution, which we use to enrich our chat bot with some inteligence. As we used to know mashine learning that tool is writen in Python. If you do not whant to learn an other language, we can go through the API by implementing an PHP Adapter. That means: at the end we will have a little PHP library to get in touch with NLU. A library to train a conversation model to or to get sorted intents, whith sorted entities carrying the important of our conversation.

Minimize the framework and allow yourself some DDD
Talk by Milko Kosturkov in Geek (1 hour)

By now we've all heard what Domain Driven Design is about. Some of us have actually tried it. When we did, we stumbled upon the fact that the frameworks we use do not help us a lot with shaping our code in a domain driven manner. Actually, they were in the way. DDD and the generic MVC frameworks we use are an oxymoron. Still, we don't want to loose all the sweet tools that help us deal with the HTTP and the Console. In this talk I'll tell you how we changed our view perspective on input/output/request/response, pushed the framework in the infrastructure corner and cleaned ourselves some space for sweet DDD.

21:00
6
JeoPHPardy game (repeatable)
Social Event by Tomasz Kowalczyk in Relaxing (1 hour, 30 minutes)

Let's see what you know about all things PHP! Beat all your opponents to become a true JeoPHPardy champion and claim the mystery prizes. A group of contenders, many categories and even more questions... but only one winner. The only question is... are you game?

0
Simulation Scrum Game about team responsibility (repeatable)
Social Event by Agata Sobek in Geek (1 hour, 30 minutes)

The main goal of the game is to prove that team playing is the biggest value. Game helps understand dependencies between team members and improve team working. Game shows that every member has own competencies and the only way to win is to work together. It is visible because game lasts for 4 simulation sprints and during them we can see the improvements.

Sunday 28th October 2018

09:00 When testing makes no sense
Talk by Miro Svrtan in Relaxing (1 hour)

If you look at the stage of any conference in the PHP world, people are preaching testing,testing,testing ... If you on the other hand look at the community, the percentage of people writing tests is really low. As a person who went from 'How can I ask for more time/money/resources for testing?' through 'ask for forgiveness instead of permission', to person who writes tests a lot, I still believe testing doesn't make sense. No, it doesnt make sense for all and everyone, often enough it makes no sense for me too. This talk will explore that fuzzy line when you have to shift your mind from one side to the other: in both directions.

MONOREPO: How We Started to Save Our Developers Time
Talk by Svatopluk Šimara in Intermediate (1 hour)

The development of multiple repositories is not always an easy task. If you want to offer a high-quality and evolving application, sooner or later, there is a need to make the same changes in several packages. This can be a simple change in the documentation of a few packages or the adoption of new coding standards. During the development of Shopsys Framework, we have come to the point where thousands of hours were allocated for development across multiple repositories and for development of new packages. And it was this moment when we decided to choose the way of monorepo. Upgrade several packages to a new version of PHPUnit? Why not! Change of method in API used across multiple packages? Super easy! Of course, monorepo is not for everyone. We will show you, why it can be useful to use monorepo and what was the way to the monorepo in Shopsys Framework.

Total Recall - The application that never forgets
Talk by Holger Woltersdorf in Geek (1 hour)

Building an application upon CQRS and Event Sourcing offers three pretty nice benefits. 1. Well structured code and business logic, separated by read and write concerns. 2. The source of truth - A reliable and recoverable view into the past of your application state. 3. The opportunity to answer future questions that you don't know about today. This talk explains the good fit of two combined application architecture approaches applied to a well known real world example. It shows how to tackle some pitfalls, gives practical advices on infrastructure and exemplifies the aforementioned benefits.

10:00 From Conversation to Software
Talk by Pim Elshoff in Relaxing (30 minutes)

We all have coworkers, managers and customers demanding work from us. Feature here, bugfix there, just do what you're told. But don't you want to build stuff that matters? Are you not the expert here? What if I told you there is another way? You are *the* person to take the outcome of the project seriously. So help people solve their problems and grasp their opportunities! In this soft skill talk we'll take a look at how you can do just that. We will write user stories that help you understand their problems. We will use story mapping to create meaningful and insightful choices for your clients. Finally we'll use release planning to predict and plan, together, where the project will end up. Join me and find out how you can turn conversation into software.

Beyond Documentation With OpenAPI
Talk by Boyan Yordanov in Intermediate (1 hour)

Imagine a world where the mobile development team is not constantly surprised by changing endpoints, where frontend developers don’t abuse your carefully crafted APIs and we don’t have to go back again and again to fix or change stuff. In this imaginary land we are able to leave the guesswork out by using API definitions to produce even better designs and automate parts of the process. Together we will explore OpenAPI as a standard way to describe APIs and see how it can help us get there.

Strict programming in PHP
Talk by Gabriel Caruso in Geek (30 minutes)

This talk will address several points in our codes that we can improve it to make it more stringent, avoiding false positives, points that have not been tested and have actually written code that complies with our business rules, avoiding unnecessary bugs. We will work with PHP 7 types, the identical operator, weak comparison functions and counters, and more.

10:30
0
Tracy: an addictive tool to ease debugging
Talk by David Grudl in Relaxing (30 minutes)

Tracy je nástroj určený k usnadnění ladění PHP kódu. Je užitečným pomocníkem pro všechny běžné programátory PHP, který pomáhá jasně zobrazovat a zaznamenávat chyby, dumpovat proměnné a mnohem více. Pokud se poprvé setkáváte s Tracy, věřte mi, váš život bude rozdělen do doby před Tracy a ta s ní. Ukážeme vám užitečné funkce, jako je například ladění AJAX requestů nebo automatické opravování chyb ve vašem kódu jediným kliknutím.

Should Shiny JWT Tokens Replace Sessions?
Talk by Grzegorz Skorupa in Geek (30 minutes)

OAuth 2.0 allows one to centralize user authentication. JWT tokens allow for signed-in user data to be kept client side, hence no server side session storage is required. The conjunction of both seems to have gained a lot of interest in recent years. During the talk I will introduce you to OAuth 2.0 flows and JWT tokens internals. I will show how those can be used to authenticate and manage user sessions in mobile and modern web applications. I will present the challenges we faced when implementing authentication using OAuth 2.0 flows with JWT tokens in a large PHP based application. We shall try to compare Token based mechanisms to well known PHP server side sessions. I hope to answer the question: Is it worth switching from session mechanism to OAuth 2.0 flow with JWT tokens?

11:30
1
Vim pre PHP, PHP pre Vim
Talk by Miroslav Šedivý in Relaxing (1 hour)

Čím píšeš zdrojáky PHP, konfiguráciu, dokumentáciu, slajdy, blog, knihy či e-maily? Jedným mozgom, jedným párom rúk, jednou klávesnicu, ale odlišným rozložením klávesnice pre každý jazyk a odlišným textovým editorom pre každý účel? A nie je to škoda? Používaš IDE na prácu s PHP kódom, potom prepneš do e-mailového klienta, otvoríš iný editor pre dokumentáciu a nakoniec sa cez ssh pripojíš na vzdialený server a upravuješ konfiguračný súbor cez konzolu? Píšeš v slovenčine, češtine, poľštine, maďarčine, angličtine a v nemčine, prípadne v iných európskych jazykoch a "příliš žluťoučký kůň" Ti znie lepšie ako jeho ASCII podoba? Ukážem Ti, ako pohodlne píšem v niekoľkých jazykoch na štandardnej americkej klávesnici. Ukážem Ti, ako používam jediný editor na všetkých mojich počítačoch na vytváranie najrôznejších textov a prečo by si aj Ty mal ovládať jeden výkonný textový editor, či už je to Emacs alebo Vim. A ukážem Ti, ako využiješ svoje zručnosti v PHP na elegantné kúzla s textom. Dva Tvoje základné nástroje sú klávesnica a textový editor. Dostať ich do krvi sa oplatí.

3
Modern SQL: Evolution of a dinosaur
Talk by Markus Winand in Intermediate (1 hour)

SQL has evolved considerably in recent years. The purely relational dogma was already abandoned in 1999. What followed was continuous extension through the incorporation of handy features to address problems that are hard to solve with relational algebra. Today, SQL is Turing complete, can process graphs, has semantic understanding of XML and JSON, is able to automatically keep historic versions, can analyze time series using regular expressions and much more. This session walks through the SQL standards from 1999 to the current version of 2016. It demonstrates some selected features on the basis of common problems and compares the traditional SQL-92 solution to the modern SQL approach. Of course, the presentation also shows how long these features are supported by various databases so that you immediately know whether the shown solutions work in your environment or not. Teaser: MySQL and MariaDB have got huge updated lately. In this session, developers and software architects of all levels gain a better understanding where SQL is today so that they are able to make more educated decisions. A lot has happened since SQL-92!

Serveless PHP applications
Talk by Matthieu Napoli in Geek (1 hour)

Serverless and its "functions as a service" promise us cheap and scalable applications. What is it like in reality? And how to merge the mature PHP ecosystem with these new architectures and tools? Where do HTTP and CLI applications fit in all this? How about Symfony, Laravel or PSR-15? Let's explore those questions and illustrate the answers with a few case studies and "Bref", a solution for deploying PHP applications on serverless providers.

12:30
0
How we switch the whole system and keep the system stable
Talk by Lubos in Relaxing (1 hour)

Try to imagine, that you have multi-million company, which product code is as bad as it can be, and you are fighting with challenge to create new system based on Symfony without down time, with continues integration and you want to be able to run both systems same time. Now stop imagine and come to my talk! :-) I will tell you how we started, what changes was necessary to be done, and how we fucked up many times in this process.

Cracking passwords, or why use password_hash()
Talk by Michal Špaček in Intermediate (1 hour)

Do not use MD5 to hash user passwords! Do not use SHA-x! Yeah, but why? I'll show you, donut worry. We'll talk about password cracking, what are the speeds, how passwords are cracked on GPUs, and of course how to defend against cracking. As an example, I'll use a recent data leak where 750k plaintext passwords have surfaced from a site that supposedly used MD5. We'll also explain what a salt is and what it's not, and that it's not there to prevent cracking, and that's fine. Eventually, I'll explain what slow hashes like bcrypt or Argon2 are and how to use them in PHP. Let's get cracking!

Of representation and interpretation: A unified theory
Talk by Arnout Boks in Geek (1 hour)

Many hard problems in programming originate from one single source: not properly distinguishing the representation of data from the way it is interpreted. Have you ever written code that filters `$_GET` for SQL injection attempts? Struggled with timezones? Tried to get escaping right for Javascript in HTML? Detected the character encoding of a string? All are examples of this one problem. In this talk we will look at some examples of the representation-interpretation problem and find the general pattern behind it. We will see how primitive types make it so hard for us to get this right, and how we can use value objects to steer us in the right direction. You’ll start finding many more examples of this pattern and understand them more easily.

13:30 Closing keynote: “Writing code that lasts” … or writing code you won’t hate tomorrow.
Keynote by Rafael Dohms in Intermediate (1 hour)

As developers we write code everyday, only to frown at it a week after that. Why do we have such a hard time with code written by others and ourselves, this raging desire to rewrite everything we see? Writing code that survives the test of time and self judgment is a matter of clarity and simplicity. Let's talk about growing, learning and improving our code with calisthenics, readability and good design.