Ibuildings is proud to organize the 13th Dutch PHP Conference on June 7 and 8, plus a pre-conference tutorial day on June 6. Both programs will be completely in English so the only Dutch thing about it is the location. Keywords for these days: Know-how, Technology, Best Practices, Networking, Tips & Tricks.

Thursday 6th June 2019

09:30 From Zero to a Tested, Automated, and Documented Open Source Package
Workshop by Ayesh Karunaratne (3 hour)

git push is only the start of publishing an open source software, and it takes a lot of personal and technical skills to create a successful open source project. What you'll learn from this tutorial: Although you can freely distribute your code anyway you like, there are many established practices that can be overwhelming to newcomers. We will learn the workflow of an open source (PHP) software by creating a new package from scratch, all the way to publishing it for the world to see, including proper license, package meta data, Readme file, documentation, automated build process, package versioning, and everything that was once overwhelming to even to think about! What you will leave with: At the end of this tutorial, we will have basic skills with Git, the Composer/packagist ecosystem, using third party packages, automated tests, documentation, and other personal skills that would make you a responsible open source software maintainer!

From Zero to App: A React Workshop - Full day
Workshop by Joel Lord (6 hour)

You’ve heard about it. Maybe you even started looking at it, but you abandoned when you saw that you needed to re-learn all you thought you knew about JS. When starting to do your first steps in React, the learning curve can seem really steep. In this workshop, the attendees will be guided through the fundamental concepts behind React and will learn how to build a full application using those technologies. Covering packaging with webpack, routing, form manipulation and authentication, this workshop will get the attendees up to speed with this trendy framework that React is. What you'll learn from this tutorial: * What is React *Build a React application * Build an authentication page * Connect to an external DB

TDD, DDD & Teamwork
Workshop by Pim Elshoff, Joop Lammerts (3 hour)

Do you have difficulties writing effective, helpful tests up front? Have you heard of Domain Driven Design, but are you still unsure when and where to use value objects? Perhaps you've read some books or blog posts, but practical experience can be hard to come by. TDD and DDD are key skills for team members of highly effective, performant teams. Joop and Pim have done dozens of smaller and larger projects using TDD and DDD. They would love to share these good (and bad!) experiences with you! In this workshop you will learn the skills of TDD and DDD, and how to apply them effectively in a team. Asking the rights questions, writing useful tests and creating meaningful code. We can't wait to help you grasp TDD, DDD & Teamwork! What you'll learn from this tutorial: Use Domain Driven Design (DDD) techniques to do the right thing Use Test Driven Development (TDD) techniques to do the thing right Learn new insights in teamwork to help you entire team and excel together

PHP Internals Deep Dive
Workshop by Derick Rethans (3 hour)

In this tutorial we are going to dive deep into PHP's Internals. It is appropriate for people that know PHP as a language well, but are interested into finding out what goes inside in-depth. We will start by looking at how the language parser and scanner work, which convert scripts into an Abstract Syntax Tree. When then look at how PHP internal byte code is generated from this AST, and how the engine runs byte code. After the introduction, we will working together on extending the PHP core with a new feature. As a treat, we'll also have a look at the OPcache extension, and see which optimisations it does to generated byte code. Reasonable knowledge of C (or similar languages) is required to make the most of this tutorial. What you'll learn from this tutorial: * Learn how PHP works internally. * Learn how to extend PHP with a new language feature. * Learn how OPcache does some of its optimisations.

Using the Symfony Messenger
Workshop by Denis Brumann (3 hour)

In this workshop we will look at the Symfony Messenger component introduced in Symfony 4.2. During the course of the workshop we will modify a demo application to use multiple message buses synchronously for decoupling tasks and creating implicit workflows by sending/receiving messages. This course will show you how to configure and utilize the messenger component inside a Symfony application that follows Best Practices. Previous knowledge with Symfony 2+ apps is recommended, but I will try to accommodate anyone who has previously written MVC-style applications using a modern framework. What you'll learn from this tutorial: After an introduction to the component and some of the terminologies and concepts surrounding it we will learn how to introduce the Symfony Messenger into an existing application. We will refactor an existing piece of code to use two differently configured Message Buses. We will look at how the behavior of buses is controlled by middleware, how to modify the behavior of a bus and time permitted create our own middleware.

Advanced Application Architecture - Full day
Workshop by Matthias Noback (6 hour)

This workshop covers all of the three layers from what is known as a layered architecture: the domain, application and infrastructure layer. Protecting your high quality domain model can be accomplished by applying a so-called ports & adapters or hexagonal architecture. And you'll find out how your application's design really starts to flourish when you use CQRS with Event Sourcing. Some of the keywords for this workshop: aggregate design, domain events, application services, commands, queries and events, event sourcing, projections, eventual consistency, layered architecture, ports & adapters, hexagonal architecture. What you'll learn from this tutorial: * Design a clean domain model * Model your application's use cases as application services * Connect those well-designed layers to the world outside

Progressive Web Apps for PHP Developers in action! - Full day
Workshop by Christian Liebel (6 hour)

Progressive Web Apps work anywhere from iOS to Windows, run offline and can make use of native functionality such as camera access or geolocation. Thinktecture’s Christian Liebel shows you the technological foundations of this very promising application model—in action! What you'll learn from this tutorial: Learn how to: - Develop your first Progressive Web App - Implement offline availability using service workers - Send push notifications even when the app is closed - See your PWA in action on a mobile or desktop device

Better and Faster: TDD-ing a Ride-Hailing Application w/ PHPUnit, Symfony and Doctrine
Workshop by Chris Holland (3 hour)

Imagine building an application without having to mess with a Web Browser, a REST client or a MySQL client. What if you could build full-blown functionality with realistic data operations within the comfort of a Unit Test Harness? What if this meant shipping code earlier and more frequently than you ever have before? Building upon concepts outlined in this talk: http://bit.ly/tdd-talk-2, and leveraging an evolving "Kata" for building a "Ride-Hailing Application", this exercise will walk thru a rapid-development example from a "clean-slate" Symfony3 project, with just enough bootstrapping to enable Test-Driven Development with PHPUnit & Doctrine. What you'll learn from this tutorial: * how to test-drive a web service, with PHPUnit and Codeception for acceptance * which software architecture makes it easier to test-drive applications while building more robust systems

Build a GraphQL API with PHP
Workshop by Andrew Rota (3 hour)

GraphQL is a powerful API query language that allows a web client to ask and receive the exact shape of the data it needs. As an alternative to REST, GraphQL promises to eliminate over-fetching data, reduce the need for multiple API calls, and let engineers move faster by leveraging the powerful developer tooling it enables. This workshop introduce you to key GraphQL concepts, and we’ll discuss together how GraphQL is different from other API technologies. Then we’ll take these concepts and apply them to building an actual a GraphQL API, end to end, in PHP. And along the way, we’ll discuss important topics such as security, performance optimization, and application architecture. By the end of this workshop you’ll have a solid understanding of how GraphQL works. You’ll know how to spin up a GraphQL API in PHP, and what considerations you need to take into account. But most importantly, you’ll understand the tradeoffs and benefits of different API paradigms, and understand why GraphQL might be the right choice for your application’s API. What you'll learn from this tutorial: * Why GraphQL is a compelling option for building an API * How to build a php-graphql powered GraphQL API * How to use consume a GraphQL API with a JavaScript frontend

Building Serverless PHP applications
Workshop by Rob Allen (3 hour)

Serverless systems allow us to concentrate solely on our code and let the provider deal with infrastructure. In this tutorial we will build a serverless PHP application and deploy to the cloud. I'll cover how to design, build and deploy for serverless platforms, and how to use an API gateway to turn incoming HTTP requests into events that trigger those serverless functions. Over the course of our time together, we'll build a small, complete serverless microservice that showcases the key features of a serverless application.By the end of the tutorial, you'll be well placed to design and build your own serverless applications that are more than mere curiosities. What you'll learn from this tutorial: * How serverless is the way to build apps in the future * Serverless application architecture and design * How to build a serverless application

Good Code
Workshop by Kevlin Henney (3 hour)

We often talk about good code — that we would like to write it, that there isn't enough of it, that it should not be considered an optional attribute of a codebase. We often talk about it but, when it comes to being precise, we don't always agree what constitutes good code, nor do we necessarily share a common view on its value. This half-day workshop explores what properties we want from a codebase and, therefore, what we can deduce to be good. These conclusions can sometimes be surprising and counter-intuitive! This session will explore some common guidelines on what is considered good, from expression to subsystem, from naming to tests, from fluent to SOLID. We will look at the consequences of good and not-so-good code from point of view of economics, day-to-day work, people and runtime performance and reliability. What you'll learn from this tutorial: You will learn that what we consider to be good is not fixed and absolute, but nor is it arbitrary. What we establish as good is an empirical enquiry based on people, time and problem solving. We can feed this from and into code reviews, coding guidelines and our conversations about code and conventions.

Friday 7th June 2019

Agility ≠ Speed
Keynote by Kevlin Henney (50 minutes)

Velocity. Sprints. More points, more speed. An obsession with speed often overtakes the core values of agile software development. It's not just development of software; it's development of working software. Sprints are not about sprinting; they're about sustainable pace. Time to market is less important than time in market. Full-stack development is normally a statement about technology, but it also applies to individuals and interactions. The full stack touches both the code and the world outside the code, and with that view comes responsibility and pause for thought. Doing the wrong thing smarter is not smart. The point of a team is its group intelligence not its numbers. Should you be scaling up? Or is scaling down the real challenge? The distraction and misuse of speed, velocity, point-based systems, time, team size, scale, etc. is not the accelerant of agile development. Agility lies in experimentation, responsiveness and team intelligence.

10:45 ᑌᑎIᑕOᗪE + P҉H҉P҉ for English Speakers
Talk by Ayesh Karunaratne (45 minutes)

Unicode, UTF-8, ASCII, BOM, ISO 10646, multibyte, collation, charsets, etc... there's a lot of technical jargon when it comes to characters. With beautiful slides, animated GIFs, and most importantly, in plain English, we will discover character encodings that every programmer must know, and how we can handle Unicode characters in PHP. There are various languages used in the world, and each language has different scripts and glyphes of various lengths, heights and rules. With Emojis getting popular (with their own movies no less!), it is important to accommodate all these weird looking characters, understand how they are represented, possible gotchas, and how to process them. During the talk, we will take a look at a flawed snippets, and how they can be fixed to process Unicode characters properly. We will also take a look at other IO operations such as file read/write and database connections where we must pay attention to make sure everything works nice with Unicode characters. Location: E105.

Developing for Privacy
Talk by [email protected] (45 minutes)

In our volatile and uncertain times, developers like you can play a crucial role in protecting the safety and privacy of the people who use the things you build. Whether you enjoy the support of an employer or work on your own as a freelancer, taking steps to safeguard user privacy must become a part of your everyday development workflow. This talk will provide a practical toolkit which draws on current and upcoming data protection regulation, the Privacy by Design development framework, and recognised best practices in protecting personal data to inspire attendees to integrate a healthy approach to privacy into everything they do.

Getting the most out of Postman
Talk by Evaldo Junior Bento (45 minutes)

Everyone is using Postman to write a couple tests for their APIs or even to play around with an API to understand how it works. The process is simple: One creates a collection, adds some requests and sees some magic. But what is next? Is Postman better than that? In this talk you will see how to get the most out of Postman's features to help you embrace API development and testing.

Good or bad - a key skill for developers
Talk by Dan Ackroyd (45 minutes)

A large part of being a programmer is making choices, whether it's what framework to use, what libraries to use or just how to structure code. Every day when we're programming we try to take choices that are good, and avoid choices that are bad. But what if actually we're all terrible at telling the difference between good and bad? What if we're all just not very good at a fundamental skill needed to do our jobs? This talk demonstrates how people fail at recognising what is good and what is bad, and how to make better decisions.

Dynamic programming - 101
Talk by Tobias Nyholm (45 minutes)

Whenever you are faced with a problem it is normal to try to find a generic solution and then you implement that solution in code. But some problems might be too complex to solve by humans (and even engineers). Imagine you are a traveling salesman, about to visit 10 cities in Europe. You can visit them in any order. What’s the cheapest route? To find this out, we could use dynamic programming to let the computer solve the problem for us and just give us a result. This is a theoretical talk that will introduce many algorithms in order to solve complex problems.

Uncon: Git hooked ARRR!!
Event Related by Sebastian Feldmann (45 minutes)

Unconference: Unplanned, Unrehearsed & Unprepared.

Xdebug 3.0
Talk by Derick Rethans (45 minutes)

This talk is for developers who want to know how to debug their code in a better way, through single step debugging, profiling, and simpler debugging tools. Xdebug is a PHP extension that implements many debugging aids and features. In this presentation we are going to look at this new version of Xdebug 3. The new version is a near total rewrite, and brings many improvements over its older releases. You will learn how to optimally use the new features and settings to make your development life easier. Besides introducing the redone functionality, we will also have a cursory look at how these features are implemented, just to provide a better understanding of what a debugging extension, can, and cannot do.

Talk by Antonio Peric (45 minutes)

Today may be even more then before we are talking about great code (SOLID, KISS, DRY...) and we think that application is all about great code base, especially if we are developers. But to be honest with each other, UI is application and almost the only and the most important thing today. The application is a collection of tiny details and if you want to have satisfied users take your time and build great UI - simply said: UI is your application.

Centralized Logging Patterns
Talk by Philipp Krenn (45 minutes)

Most organizations feel the need to centralize their PHP logs — once you have more than a couple of servers or containers, SSH and tail will not serve you well any more. However, the common question or struggle is how to achieve that. This talk presents multiple approaches and patterns with their advantages and disadvantages, so you can pick the one that fits your organization best: parse, send, structure, containerize, or orchestrate. Each pattern has its own demo with the open source Elastic Stack (previously called ELK Stack), so you can easily try out the different approaches in your environment. Though the general patterns are applicable with any centralized logging system.

Talk by Nash van Gool (45 minutes)

Security problems, half-broken (or sometimes fully broken) features, bugs galore, you name it – there are a lot of technical problems plaguing most complex software. As it turns out, software is kind of hard! But are these problems truly as technical as we think? Instead of approaching everything as a tech problem, as we techies tend to do, we can also approach software as a human problem – because we techies just love people, of course. The human factor has been long known to be one of the most complex issues when building, maintaining and using software. Nothing is fool-proof – nature will just provide a bigger fool. Users do things we never thought possible, leading to bugs at best and security problems at worst. Managers push unrealistic deadlines, salespeople overpromise, and clients make impossible demands leading to cut corners and unmaintainable code as changes are done on changes and temporary code becomes the most permanent part of a project. This talk shows some of the ways people can cause problems both big and small – and some of the ways we as techies might factor into that, and could possibly prevent the issues that arise from dealing with humans. We will explore the impact of human interactions and mistakes on software and security, and see how we as developers and other technical people are just as much of a human risk to software as the users and managers we so often blame - and of course, the ways in which we can avoid making these mistakes, and perhaps help others do the same.

Of representation and interpretation: A unified theory
Talk by Arnout Boks (45 minutes)

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.

Uncon: Live @ DPC Podcast Panel
Event Related by Stefan Koopmanschap (45 minutes)

Unconference: Unplanned, Unrehearsed & Unprepared.

13:30 Performant APIs with GraphQL and PHP
Talk by Andrew Rota (45 minutes)

GraphQL is a powerful API query language that allows a web client to ask and receive the exact shape of the data it needs. As an alternative to REST, GraphQL promises to eliminate over-fetching data, reduce the need for multiple API calls, and let engineers move faster by leveraging the powerful developer tooling it enables. PHP and GraphQL work great together, and whether you’re building a greenfield application or working in a existing codebase it’s easy to get started writing a GraphQL API. This talk will introduce you to GraphQL, and demonstrate how you can build and use a such an API, in PHP, today.

Why I am hooked on the future of React
Talk by Maurice de Beijer (45 minutes)

The React team rewrote the book on developing components. Before we had a choice between classes and functional components. Yet many components needed to be classes. A functional component was often too limited. Now, using hooks, we can extend functional components to be as powerful as we want. Come to this session to learn what React hooks are and how to get started using hooks. But be warned, once seen React hooks can’t be unseen and your React components will never be the same again. The slides can be found here: https://www.slideshare.net/mauricedb/why-i-am-hooked-on-the-future-of-react-147221263 Sample code is here: https://github.com/mauricedb/dpc-amsterdam-2019

What can PHP Foreign Function Interface do for you?
Talk by Bohuslav Simek (45 minutes)

Next PHP version (7.4) will bring a lot of new exciting features. One of them is PHP Foreign Function Interface extension built directly into the core. But what problems exactly this extension is trying to solve? Does this mean that we no more need to write PHP extension if we want to use an existing library? In this talk, we will together discover way how to easily call almost any C library directly from PHP. Why we want to do this. How to overcome common pitfalls and most importantly when to use approach and when not.

DevCorp: Choose Your Own Adventure
Talk by Pauline Vos (45 minutes)

You're a software development consultant called into DevCorp with a mission. What started as a hip, informal startup now has investor demands to meet. And they're counting on you to help them become a scale-up. How do you grow the existing team and maintain the codebase? This interactive talk, intended for any developer of any level, will give you some valuable technical and soft skills to take with you on your real-life professional journey. Using a voting system, the audience decides... and has to live with the consequences. Based on a mix of personal experience, agile methodology, and software design principles, this story has several possible endings. Will you help lift your team's performance or run DevCorp into the ground?

HTTP/3: It's all about the transport!
Talk by Benoit Jacquemont (45 minutes)

The announcement of HTTP/3 at the start of November 2018 may have come as a surprise for a lot of us. Indeed, compared to the 18 years that separated HTTP/1.1 et HTTP/2, this announcement came only 4 years after the release of HTTP/2. But the biggest surprise is under the hood, with a replacement of the transport layer. In this talk, we will explain why this version 3 of the HTTP protocol has been designed, especially around the latency topic. We will cover as well how technically this version works, and what it will bring to our applications, and what are the challenges that will need to be addressed, in order to fully benefit from this new version of the protocol that runs the Web.

Uncon: Why, How & Extending PSR-18
Event Related by Timo Schinkel (30 minutes)

Unconference: Unplanned, Unrehearsed & Unprepared.

Uncon: Emoji-PHP
Event Related by Cees-Jan Kiewiet (15 minutes)

Unconference: Unplanned, Unrehearsed & Unprepared.

More Than a Query Language: SQL in the 21st Century
Talk by Markus Winand (45 minutes)

Did you know the purely relational dogma of SQL was already abandoned in 1999? The last SQL standard that was limited to the relational idea was SQL-92. From SQL:1999 onwards, the SQL language was extended with non-relational operations and non-relational data structures. As much as this move was discussed at that time, it took decades until database vendors caught up with this idiomatic change. Many SQL users haven’t heard of it until today. The year 2018 finally marks the turning point. With the release of MySQL 8.0 all major SQL dialects finally support the most important non-relational concepts of SQL. This talk provides the big picture on the evolution of the SQL standard and introduces some selected modern SQL features by example. You will see that SQL has changed as much as our requirements have changed over the past decades.

5 architectures of asynchronous JavaScript
Talk by Tomasz Ducin (45 minutes)

In this talk we'll discuss 5 alternative approaches to handle async operations in JavaScript: callbacks, events, promises, coroutines and reactive streams. None of them is either legacy or a silver bullet - a good dev needs to pick the right tool for the job. However, in order to understand them, we must step back to fundamentals all these rely on: the mechanics of event loop and run to completion rule, as well as learn to distinguish between sync and async flow. Then we proceed to design patterns built on top of each of the 5 approaches, discussing their strengths and limitations. JavaScript is getting more and more complex each year. But no matter if you’re an expert or a novice JS developer, you’ll easily get the essence on Asynchronous JavaScript.

PHP and R - Putting the PoweR in PHP Statistics
Talk by Mark Baker (45 minutes)

The R programming language is designed for statistical analysis, graphics, and reporting; and provides provides a wide variety of statistical (linear and nonlinear modelling, classical statistical tests, time-series analysis, classification, clustering), tools for data analysis, and graphical techniques. Designed specifically for that purpose, it provides a more sophisticated set of functions for mathematics and statistics than a more general purpose programming language like PHP. But if we need those mathematical or statistical features within our PHP code, we can integrate the two languages; using the power of R from within our PHP scripts. How do we set about doing so? Let's find out.

Becoming a tech lead - Lessons learned
Talk by Jayesh Kawli (45 minutes)

The presentation "Becoming a tech lead - Lessons learned" will talk about my journey as I went from being an individual contributor to a tech lead position. This talk will cover various aspects of being a technical leader such as challenges of working on multiple fronts, acting as a requirement translator between product managers and developers, shifting a mindset, and providing learning opportunity while balancing pace and progress. As a technical platform, Dutch PHP conference will be welcoming both individual contributors and team leads and I would like to present this talk to people from both the categories. Since tech leads and sprints are part of most of the engineering teams, my talk will benefit majority of the audience. There were few things I missed during early stage of my transition, but experience and time spent with senior team members helped me to become better tech lead. Nowadays, a technology moves fast and so do people's roles. Hopefully the lessons I learned will act as a guide for attendees if they are planning to follow along the same path. Often tech leads focus on productivity in terms of tickets completed. But it's often forgotten the human element attached to it as well. How do we make sure people are learning? Are they motivated enough to do the job? How do we balance priorities in a big flurry of incoming ticket? How can a tech leader be a bridge between technical and non-technical sides? This talk will try to present answers to these questions along with real-world scenarios that our team went through.

The making of a great API
Talk by Rob Allen (45 minutes)

Everyone is writing APIs but what makes a great one? I will take you on a tour of the most important features that you should think about when creating an API. These ensure that your API plays well with HTTP and make your API a delight to maintain and work with. Give your API a competitive edge by making it great and developers will want to work with it.

Uncon: PHP as PHPstorm Development Tool
Event Related by Kirill Smelov (30 minutes)

Unconference: Unplanned, Unrehearsed & Unprepared.

Uncon: Truth Behind Evangelism in PHP Projects
Event Related by Muhammed Akbulut (15 minutes)

Unconference: Unplanned, Unrehearsed & Unprepared.

DDD, CQRS, Hexagonal, Onion,... Putting it together
Talk by Jeroen Keppens (45 minutes)

DDD, CQRS, Hexagonal, Onion,... we have all seen the talks over the years. But how do you put this all together in a working application. This talk briefly explains each block with code examples and tools you can use to implement each.

Automatic Web Page Optimisation in Pure PHP
Talk by Albert Peschar (45 minutes)

We all know slow sites suck. According to research by Amazon, customers buy more when a site is responsive. Google ranks fast sites better. Using a WordPress case study, I'll take you on a journey through the jungle of web page performance. You'll learn to discern the many factors that are important in performance. I'll show you the techniques, tricks and tools used to overcome slowness. You'll learn about image, script and stylesheet optimization, roundtrip minimization and why it's important. In addition, you'll discover a unique tool that allows you to do all that automatically. After this talk you will be able to confidently measure a website's performance, and diagnose the reasons for it being slow. You'll know what to fix and how, and make your customers happy. From a technical perspective, there are a lot of highly entertaining surprises regarding what can be done with PHP features, such as output buffering and HTML parsing, as well as in the browser: reordering DOM events and changing the way scripts and stylesheets are loaded.

Anatomy of a DDoS
Talk by Janna Hilferty (45 minutes)

The security landscape of web applications is a rapidly moving target and can be difficult for even the best engineers to understand. A DDoS, or distributed denial of service attack, can cripple a website by overwhelming its resources. Learn methods to protect your websites from DDoS and how these methods effectively solve the problem. Basic information surrounding the talk available on my blog: https://techgirlkb.guru/2017/08/the-anatomy-of-a-ddos/

Get on stage!
Talk by Rowdy Rabouw (45 minutes)

When I first started to attend conferences I looked up to speakers as if they where unreachable rockstars or better yet Gods who descended on our little blue planet. All-knowing creatures to educate us mere mortals. Let me tell you a secret… that’s not true! They are just like you and me. Down to earth people who want to share their knowledge and experience to help others. You can be the one on this stage too. Impostor syndrome is just a mind trick. I’m sure you also have something interesting to share which will benefit others. And guess what? Conference organizers are always on the lookout for new talent. I will show you how to get started. How to pick a first topic and craft your first talk. How to get confident on stage and benefit from public speaking. And let’s bust some myths along the way too, shall we?

Refactoring the Domain Guided by Tests
Talk by Pim Elshoff (45 minutes)

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.

Uncon: OCD & Me
Event Related by Kathryn Reeve (15 minutes)

Unconference: Unplanned, Unrehearsed & Unprepared.

Uncon: Low Level Programming For High Level Programmers
Event Related by Nash van Gool (30 minutes)

Unconference: Unplanned, Unrehearsed & Unprepared.

A Glimpse Into Accessibility
Talk by PJ Hagerty (45 minutes)

When we build applications for the modern world, we think of our users as much as possible. But what about those who are on the fringes, outside of the average. This talk will take a look at accessibility, how to design applications with users with disabilities in mind.

Managing a (component) zoo - DIY web component catalogues
Talk by Sebastian Schürmann (45 minutes)

Developing and shipping a web component seems simple at first, but modern frontend stacks come with their own set of challenges: A wide set of browsers implements relatively new specs and not everything is set in stone yet. If you set out to create and ship your own set of custom elements this eventually needs organization and strategies to deploy the code with documentation as easy as possible and continuously while adapting to changes in the underlying frameworks and your own set of features. In this talk .... We will make use of NPM to manage dependencies and publish our own elements while we automatically deploy documentation. API resources will be accessed with OpenAPI clients and can be updated via npm as well if the underlying API canges. Lerna.js will help us to keep the repository count small, speed up development and servers as a general access point for a "one button install" and "one button build". A component catalog provides "End-User" documentation to show the components in different contexts. Test Automation helps to keep these old and new browsers at check and keep an eye on a11y issues. Look at a set of self created templates that helps the components to be uniformly structured and dependencies fit your environment.

Software Management Lessons from the 1960s
Talk by Larry Garfield (45 minutes)

"The Mythical Man-Month" is one of the seminal books in the field of software project management. It was written in 1975, based on experience from the 1960s. Is it even still relevant? Turns out, it is. Technology may have changed dramatically but people have not. Managing software projects is about managing people, not bits, and creative people engaged in intellectual endeavors are notoriously hard to predict and manage. (Just ask my project manager.) Fortunately, many of the lessons-learned Brooks' presents are still relevant today. Some are directly applicable ("adding people to a late project makes it later") while others are valid with a little interpretation. Still others fly in the face of conventional wisdom. What can we learn from that? This session will present a modern overview of the ideas presented by Brooks and a look at what we can still learn from them even today.

Post Burnout Thoughts
Talk by Joel Lord (45 minutes)

Burnout is well defined in the literature as a state of emotional, mental, and physical exhaustion caused by excessive and prolonged stress. In the tech industry, long hours, tight deadlines and a culture of being always connected can put a lot of pressure on people. All of this might easily lead to depression or burnout. While some companies do an effort to reduce the stress and offer a better work-life balance, it seems like there is still work to be done. According to a recent OSMI (Open Sourcing Mental Illness) survey, over 60% of tech workers believe that discussing a mental health disorder with their employer might have negative consequences. So what can we do better to help the people? And can anything positive come out from a burnout? This talk aims at bringing down some of the stigmata around occupational burnout and show that some good can come out of it.

Event driven development
Talk by Christopher Riley (45 minutes)

Much of the software we write is built to support a business process, this generally means validating and storing user data into a database. Often this is a mismatch with the actual business process, which is more reactive and task oriented. In this talk we'll look at using business events to drive the evolution of our software design and see how we can build a model which better reflects the businesses processes.

Uncon: Know When Your Stuff Breaks
Event Related by Mike Lehan (30 minutes)

Unconference: Unplanned, Unrehearsed & Unprepared.

Uncon: Unexptected Type Juggling
Event Related by Arnold Daniels (15 minutes)

Unconference: Unplanned, Unrehearsed & Unprepared.

Conference social (5 hours, 30 minutes)

We warmly invite you to join us at the DPC Conference Social on Friday evening June 7th between 17:30 and 23:00 in the main conference hall. Based on feedback we received we decided like last year to stay in the RAI venue after finishing the last talk on the first conference day. We’ll start with soup, french fries and snacks. Around 20:00 we’ll kick-off the social consisting of parallel subevents. Of course we’ll have a traditional social with lots of drinks, but next to that we’ll organise a CodeNight, GameNight and new this year the SlideShare Karaoke and Escaphpe sequence. On a more serious note, conference sessions are a great way to pick up textbook technical knowledge, but as professionals we learn a lot from general discussions with one another. With so many interesting and talented people from the industry, as speakers but of course also as attendees, we want to take the opportunity to meet you all and allow everyone to mix and share ideas. We consider this event an integral part of the conference, and we hope you will join us!

CodeNight (3 hour)

Come join a night of fun, coding and interacting: this is not just a hackathon, its a space to contribute to open source projects, debate and create new projects, but also interact, learn and get to know the developers all around you.

GameNight (3 hour)

Going to a PHP conference in an inspiring activity. During the sessions you get overwhelmed with information on development- and computer related topics. By the end of the day, your mind is tired of absorbing all this information. What better way to unwind than by playing games! No computer games, but by sitting down with your fellow developers and play board games and card games. Expect games like Robo Rally, Santorini, Firefly The Game, Plague Inc, King of New York and Pandemic.

SlideShare Karaoke (3 hour)

This year we're adding a fun new activity to the social, SlideShare Karaoke. If you've never played, it's a simple game where you step and present a few short slides. There's just one catch: the slides are randomly chosen from the internet and you've never seen them before! Improvise and bluff your way to victory as you lecture on giraffe migratory patterns, teach quantum economics or share your favorite restaurants in downtown Toledo. You don't need to prepare anything except a good sense of humor.

Escaphpe Sequence (3 hour)

You have only 20 minutes of credit left in your cloud hosting account, the billing card has expired and your boss; the only person in the company with the account password has just set off for a three week vacation in the deepest darkest depths of the last place on earth without mobile coverage. Fortunately your boss keeps all the important passwords written down all you have to do is find the right one. Can you solve the puzzles in time to prevent a production outage? To join our Escaphpe Sequence you go to the whiteboard in the Forum Lounge after the last talk session. You can apply with a 4-person team, there are just 12 spots available so don't hesitate to subscribe.

Saturday 8th June 2019

09:45 Do you really need that relational DB?
Talk by Donatas Aleksandravičius (45 minutes)

Say you're working with a big e-commerce project. From early days - you knew that normalised DB is the way to go and that's what you do nowadays. One day, the marketing department makes an amazing deal and your website is swarmed by thousands and thousands of customers! That's awesome! Except your DB is sweating so hard that in 2 minutes it releases the last breath and your caches expire. Now what?! I had this crazy idea, deep in my mind, which no sane person believed in - perhaps we don't really need to query all those relations all the time? Perhaps there is a different way of modelling data for high load? If caching is so hard, are we doing it correctly? I'd like to share this idea with you, with some practical examples from production and theoretical guesses. My goal is to seed new ideas into your minds, feed them with a different approach which you might implement in the future. I'll be talking about data projections, events, queues, data modelling, and de-normalisation. Might mention a buzzword or two like NoSQL, AWS or DDD.

Website performance beyond the code
Talk by Tomasz Kajtoch (45 minutes)

When developing a web application, there's a moment when you start thinking about its performance. The often reaction is to look at the code and try to find slow parts and optimise them. However, in a lot of cases, you can get a significant boost in performance not even touching the source code. During my talk, I'll show the most common performance bottlenecks of both back-end and front-end applications, how browsers and web servers work, how to utilise their features like DNS and HTTP caching, preloading or code-splitting, and what is Critical Rendering Path.

PHP Opcode? What's that?
Talk by Benoit Jacquemont (45 minutes)

Every PHP developer heard about OpCode, the magical sauce that runs inside the Zend PHP Engine in order to boost performances. But what is exactly that OpCode? Why does it make the Zend Engine faster to run your PHP Code? Is it only about performances? The aim of this talk is to demystify what's going on inside the Zend PHP Engine and to understand what is happening to our PHP code when it's digested by the interpreter and turned into opcode, before being executed on the Zend Virtual Machine.

Brand Humanizing: A humane turn on AI
Talk by Jonathan Flores (45 minutes)

What is the talk about? AI, ML, robots and automation, together they seem the Holy Grail of technology. From hard-core programers to business leaders, everybody seems to be betting on these technologies. We have seen many successful implementations, yet it all has a dark side. One of the major misconceptions in big data, the data that feeds these machine-learning algorithms, is that it is flawless since it possess “all information”. Spoiler-alert: It does not. And because of this assumption, robots are even being trusted to make decisions that require Emotional Intelligence and Ethics, qualities they don’t posses. ML-powered AI becomes uncontrollable to a sense that we stop to understand why certain decisions were made. And since it is often used to optimise a single, shallow metric (such as money, clicks, etc.) it can be brutally discriminatory and bad. We know for example that even a sophisticated algorithm such as Facebook’s impressive advertising machine will optimise for Gambling addicts and Alcoholics when advertising flight tickets to Las Vegas (because they are most likely to buy). And Amazon shut down a robot that was tasked to review CV’s, because it started to only select male CV’s as potential new employees. This is something we should turn around. It is time to bring humans back to spots in which they excel over robots and prepare ourselves for a future in which man and machine work together to make this world a better place for everybody. Who is it for? For everybody that works in the technology industry, from programers to its business leaders. Why is it relevant for you? We as a community have a responsibility in addressing the flaws of today’s technology infrastructure. The OS clearly needs an update and some of the features we have created have bugs that need fixing. What is unique about the talk? Brand Humanizing is a new term/concept that I have coined together with my friend Ferry Hoes (who works as an entrepreneur in the tech-space), to describe the phenomenon of making technology humane again. The talk will offer a new approach to the future of tech and a different perspective than today’s popular ideas about the future.

Backwards Incompatible Tales
Talk by Marco Pivetta (45 minutes)

A long time ago, in a land far away, lived a software wizard that was capable of grand magic. They built gardens, libraries, temples, castles. They created life where there wasn’t, and cleared the path where it was unsafe. And then they disappeared, and even though they left behind books and notes, none of their apprentices were able to learn the craft. Since then, nobody was able to use any of the tools of the great mage, and the creations kept working for only a few years, when finally even the last stone that was placed crumbled into sand. Sounds familiar? Software often feels the same: we’re all magicians that force a piece of sand into semi-rational thought, but what will happen when everyone moves on, and nothing works as expected anymore? This talk explores the problems that arise from breaking compatibility with existing tools, how to prevent those breakages from happening, and what to look for as a software maintainer. While I cannot guarantee that you will build indestructible magical fortresses with my tips, I can at least help you make sure that your work will live on with other people picking it up, and hopefully appreciating the stability that you worked towards.

Uncon: Enlarge Your Team Skills With a Bit of Time
Event Related by Van Belle Jonathan (Grummfy) (15 minutes)

Unconference: Unplanned, Unrehearsed & Unprepared.

Uncon Maintaining an Open Source Repo
Event Related by Mario Blazek (30 minutes)

Unconference: Unplanned, Unrehearsed & Unprepared.

10:45 Async non-blocking code reviews
Talk by Frank Koornstra (45 minutes)

“It’s not personal” but it so is! Code reviews are still one of the biggest sources of conflict in a team and can delay value delivery by days if not weeks. I’d like to tell you why that is but more importantly hand you a method that will let you focus on what’s important: the work. We briefly touch on the psychological mechanics at work during PRs, look at statistics to fuel decisions around commenting and then combine those two perspectives to create a solid code review etiquette for your team so you can achieve truly async non-blocking code reviews.

Keeping it Real(time)
Talk by Mike Lehan (45 minutes)

As people carry out more of their daily interactions online, giving them the best experience possible is our key focus as web software engineers. One way we can do that is providing views which can update dynamically as information changes - train times that adapt to delays without a page refresh, new comments on social media items engaging users by appearing in real time, bids on ecommerce websites updating as the market changes. It’s not just chat apps that can benefit from real time components. Websockets allows a persistent 2-way connection between client and server that you can use to adapt faster to changing data. WebRTC provides a universal API for two browsers to establish a direct link, no servers involved (sort of ) to stream audio, video or files direct. In the talk we’ll walk through where these real time services come from, and what you can use them for. We’ll look at client and server side APIs, including the popular PHP event library React and PHP Websocket client Ratchet. We’ll drill into the difference between 2-way interactions and existing so-called dynamic web technologies like AJAX, and explore how real-time event based protocols could take on a lot of what we presume only HTTP can do. Finally we’ll see some common pitfalls when integrating both Websockets and WebRTC into your own applications, including monitoring, logging and 3rd party tools.

Interface Segregation for PHP
Talk by Dan Ackroyd (45 minutes)

When people give talks on the "S.O.L.I.D." design principles one of the letters that doesn't get enough attention is the "i" - the "interface segregation principle". This talk seeks to redress that imbalance by going into a bit more in-depth into: An introduction to interface segregation and an explanation of how it makes your code easier to test. Why in PHP we need to apply the principle more broadly, to make types be more specific, so that code is more reasonable. *Me babbling on about emotions, and how good code is boring. Which is good!

Senior Developer Development
Talk by Szymon Skórczyński (45 minutes)

Each developer is, was or (most probably) will be a senior developer. Many seniors wonder about choosing the right career path - one can become a manager, an architect or an engineering expert - just to name a few options. There is a bunch of non-technical skills which are very helpful or even essential if one thinks about progressing their career in any of those paths. For more than 3 years I have been helping senior developers shape their career plans and work on gaining knowledge, skills and experience they need to grow professionally. In my talk, I recommend skills which every ambitious senior engineer should gain and I give advice on how to learn them efficiently.

Automating PHP upgrades with Ansible
Talk by Janna Hilferty (45 minutes)

PHP 5.6 (the most widely used version of PHP by a large margin) has reached End of Life and end of Security Support. That means developers around the world must work to upgrade their sites to newer PHP versions, or risk exploits that won’t be patched for their version. Learn how I helped my organization update to PHP 7.2 using Ansible to build vagrants and web servers, upgraded PHP unit test suites for compatibility, and redeployed our entire infrastructure- while swapping web server software from Apache to Nginx at the same time. Brief overview on my blog: https://techgirlkb.guru/2019/01/migrating-php-5-6-to-php-7-2-with-ansible-devops-digest/

Uncon: Scrum in Practice
Event Related by Erik de Bos (45 minutes)

Unconference: Unplanned, Unrehearsed & Unprepared.

Exception design - the art of making debugging more accurate
Talk by Szymon Szymański (45 minutes)

If you struggle while interpreting your colleague’s exceptions or you are creating them without much thought put into it, this is a talk for you. Exceptions are perhaps the most neglected, after tests, element of object oriented applications - especially in the PHP environment. Many see them as an unpleasant necessity, yet in reality, they are here to help developers quickly pin down specific errors. Of course if they are well-designed. This talk is about how to properly design your exceptions with different circumstances. This presentation is designed so that every developer will find it valuable, but beginner and intermediate listeners will get the most of out it.

The First Contact
Talk by Andreas Heigl (45 minutes)

So you did a great job with your website and now your customers want to get into contact with you. They actually want give you their holy grail and apply for a login. And that's where it usually starts to go south. So many things can go wrong with a registration form that your customer doesn't really feel welcome or safe. In this session we will debug a few real-life examples from a user-experience Point of View. By analysing that we will find ways to make the first contact of a user with our application a better experience. And you don't need to be a coder to see why and how to improve your next registration form.

Crazy Fun Experiments with PHP (Not for Production)
Talk by Zan Baldwin (45 minutes)

I’ll show you the crazy things you can do in PHP with streams and autoloader overloading to write your own language features. I’ll also show you how you can develop using aspect-orientated programming or encrypt source code on-the-fly using only PHP. As if that wasn’t enough, we’ll go even further and make PHP a polyglot language by importing esoteric language scripts! These aren’t your average hacks and shouldn’t be run in production... but let’s explore these concepts as fun experiments so you’ll never think of PHP as boring again!

Improve your team synergy w/The Attitude Model
Talk by Joop Lammerts (45 minutes)

Most of the time you’ll work in teams, but sometimes teammates don’t understand each other. Working on a piece of software becomes a drag. So why does this happen? Can you prevent this from happening? During this talk we’ll introduce The Attitude Model. This model helps us to improve teamwork. It explains and predicts how teams argue, cooperate and excel. It helps us to understand what individuals need from their team and what they bring to the table. The Attitude Model allows us to move from storming to performing. With The Attitude Model by your side you and your team will have fewer conflicts, work together more smoothly and have better meetings. You will have tools to divide your software design approach. So come join me in my journey on how I became the world champion with my team (and clients).

PageRank all the things!
Talk by Arnout Boks (45 minutes)

Most people know PageRank as Google’s algorithm for ranking search results, but it’s uses extend far beyond only that: PageRank has already been utilised for analysing social networks, finding the most important functions in source code, predicting traffic, and deriving a more accurate ranking table of teams in an ongoing sports competition. In this session we will cover the basics of linear algebra, developing an intuitive notion of how matrices and vectors interact, and use it to understand the principles of PageRank. Then we’ll jump straight into real-life applications of PageRank beyond web search and how these can be implemented in PHP using the math-php library.

Uncon: Hating Wordpress Less with WP CLI
Event Related by Jenny Wong (15 minutes)

Unconference: Unplanned, Unrehearsed & Unprepared.

Uncon: Serializing Complex Data 10x Faster
Event Related by Michelle Sanver (15 minutes)

Unconference: Unplanned, Unrehearsed & Unprepared.

Uncon: Legacy to Symfony
Event Related by Alexander M. Turek (15 minutes)

Unconference: Unplanned, Unrehearsed & Unprepared.

Leveraging Typed Exceptions for Cleaner Error Handling
Talk by Chris Holland (45 minutes)

Harnessing Errors & Edge-Cases with Ease & Elegance. Imagine handling error conditions and unexpected edge-cases with code that is easier to read, maintain & extend. The temptation is real. We create methods that return an array of objects, or "false" if nothing was found. Or "null". We might further "signal" unexpected results or error-conditions with integer values. It then becomes the responsibility of consumers of these methods, to properly interpret what "false", "null", or "-500" mean. As a result, we produce code that is difficult to read, maintain and extend. Exceptions are seldom leveraged, and most often thought of as objects thrown by some frameworks for instrumentation. When properly leveraged, they however offer an opportunity to manage unexpected and edge-case behavior at various layers of our applications, with elegant control flows. By leveraging your language's Exceptions alongside its "Type System", we can create elegant, flexible and advanced handling of Error conditions, which will promote code that is easier to work with.

Integrating React.js into a PHP application
Talk by Andrew Rota (45 minutes)

React.js continues to be the most popular frontend framework, by a wide margin, in the JavaScript ecosystem today, and for good reason: React offers a declarative, component-oriented approach to building highly-scalable web UIs. But how can we take advantage of a JavaScript library like React in our server-side PHP applications? In this talk I’ll cover the different ways React.js can be integrated into an existing PHP web application: from a client-side only approach to multiple techniques that support full server-side rendering with a Node.js server or PHP’s v8js. I’ll also discuss the trade-offs in each of these designs and the challenges involved with adding React to a PHP site. Most importantly, I’ll consider the higher-level issue of how to improve view cohesion across the client-server divide in a PHP application.

PSR-14: A major PHP Event
Talk by Larry Garfield (45 minutes)

PSR-14 is the latest specification from the PHP Framework Interoperability Group (PHP-FIG), this time addressing event dispatching. Many frameworks and applications contain an "event dispatcher", "message bus", "hook system", or some other variation on the same basic concept, but to date they are all incompatible with each other. No more! The PSR-14 spec offers a way to interleave these disparate systems together, making it far easier to swap individual libraries into the framework of your choice. It goes beyond the basic "register and call" object that most systems use to make it easier to plug different implementations together, offering an easier experience and greater flexibility for library authors. This session will cover how PSR-14 works, some examples of how to leverage it effectively, and how to adopt it alongside, and even encompassing, your existing one-off tooling.

Effective Mentorship
Talk by Jayesh Kawli (45 minutes)

As the new teammate begins their journey in the organization, they have a lot to learn in terms of technical skills and domain knowledge. During this phase, they can be faced with a lot of questions, such as How to know what is the best route for the given problem? How can they be sure that they're challenged to think differently? How communication should be managed? My proposed talk, "Effective Mentorship" will help to find answers to these questions. The presentation will talk about the utility of the mentorship program is make sure the team members feel confident in their new position and proactive towards clarifying any doubts and doing research on their own. To summarize, this is an important process to promote teaching and growth and to make sure that mentee is brought to the speed with the rest of the team. This talk is directed towards teams and organization that may or may not have integrated mentorship programs. The talk will cover the essence of having mentorship programs and if there exists one, I would be discussing ways to improve and refine it from participants feedback and past experiences. Given that this conference is aimed towards tech leads, engineering managers and CTOs, they will be able to relate and pick any useful points from this talk. I decided to give this talk because there are a lot of good organizations which take mentorship programs for granted. It is not unusual that such programs can easily be seen as unnecessary use of resources not realizing its importance in the long-term. Through this talk, I will attempt to address some of the myths associated with it, and if there are team leads attending this talk, I am hoping to convince them to include such programs as I go through the list of benefits compiled through my own experiences. I have previously worked as a mentor at the various organization and I would like to share some of the thoughts and experience I gained during the process. I was fortunate enough to get some of the best mentors when I first started working in the software industry a few years ago. As a person who is involved in both mentoring, making mentorship plans, and learning from continuous feedback I have a unique perspective on the whole process that would benefit to people who are excited to get involved in these programs

Refactoring Huge Legacy PHP Applications - From 100 hours to minutes
Talk by Tomas Votruba (45 minutes)

Before the composer, we downloaded packages manually, one by one. Now you run "composer update symfony/symfony 4.2" and you can jump from 3.0 to 4.2 in seconds. But how do you fix BC breaks in your code? Manually, one change after another, file by file? That's a daunting and stereotype work. In PHP there is AST (abstract syntax tree) tools, that can automate this upgrade. Write the rule once, apply it in 1000 classes in seconds. I'll show you how working with legacy code can be fun again.

Uncon: Sample App for CQRS, DDD, Ponts & Adapters, Onion Architecture, Events, Putting it together
Event Related by Jeroen Keppens (45 minutes)

Unconference: Unplanned, Unrehearsed & Unprepared.

Time Zones and Calendars are a PITA
Talk by Derick Rethans (45 minutes)

Time Zones and Calendars are a PITA. Although they govern how we live and when we do what, handling them programmatically is not an easy feat. In this presentation we will look at how to deal with time zones, and two calendars: natural year, and ISO8601. We will see how it is hard to make assumptions on how they work, and explain how they came into existence. We'll focus mostly on how to handle them from within PHP, as well as how we (should) store them in databases. We'll also have a quick look at date manipulation when querying data.

Get GOing with a New Language
Talk by Kat Zien (45 minutes)

Learning more than one programming language is key to becoming a better developer. It is like adding a new tool to your toolbox. The more tools you have, the easier and quicker you’ll be able to tackle whatever job you need to do. You’ll also be able to use the right tool for the job, and who doesn’t like that?! I picked up Go a few years ago as it was becoming more popular among developers. Coming from a PHP background, I had no idea what channels or goroutines were or how is concurrency different from parallelism. I’ve got to say, it was a whole new world. Very different, but very cool. I was hooked! By happy coincidence, my company was looking to rewrite a legacy PHP app in Go. It was over 2000 lines of procedural and messy PHP4 with more downtime than I’m willing to admit to. I took on this project, and soon enough we had a much faster, more maintainable and much more reliable app for our customers. Go gave us options we would not have in PHP. The goal of this talk is to give you a good idea of what Go is and how it compares with PHP. We’ll look at the language itself as well as the tooling and communities around it. Even if you’re not sold on Go by the end of it, I hope you’ll leave inspired to go out there and learn whatever language you wanted to look into next.

How to use teaching as a learning tool
Talk by Carl Alexander (45 minutes)

Ok, so you’re a kickass PHP developer. You’re always looking to learn new things. You read every technical blog post that you come across. You try your best to apply them in your PHP project. Things are going well, but you’re not sure if there’s more than you could do to hone your skills. Why yes there is! You could also teach. But you might be wondering, “Seriously, how can teaching make me a better developer?” That’s a good question! And that’s what I’ll share with you in this talk. I’ve dedicated a significant amount of time to teaching. I write a lot on my personal site and sometimes on other educational sites. I also speak at conferences and local meetups. These teaching opportunities have been essential to help me grow as developers. The good news is that you too can use teaching as a powerful learning tool! This talk will show you how. You’ll learn how to use teaching to build your development chops. You’ll also see how to do it so that what you give back benefits the PHP community.

Beyond design patterns and principles - writing good OO code
Talk by Matthias Noback (45 minutes)

Of course, you should read all you can about SOLID, Design patterns, Patterns of Enterprise Application Architecture, etc. Once you have a basic understanding of these topics you still have to write that code though, and write it well too! What is good code? Are there some guidelines, or rules of thumb, which you can follow while making your everyday coding decisions? In this talk I’ll cover many of these coding guidelines, which aren’t usually covered by patterns or principles books. They should help you write better code and give you a richer vocabulary for reviewing other people’s code. Some of the subjects that we’ll discuss are: state, mutability, CQS, one-method objects, domain-first, API-driven, functional programming influences, object boundaries, (de)serialization, and many more!

Hello my name is "if"
Talk by Sebastian Feldmann (45 minutes)

Me and my little brothers “else”, “elseif” and my bigger sister “switch” are most likely all over your codebase. Often we make your code harder to read or even difficult to understand. And don’t get me started on testing, we cause this thing called Cyclomatic Complexity, and I’ve been told that’s bad. Sebastian will show you that me and my siblings are similar but not equally bad even on a op-code level. He will show you some elegant and effective ways to get rid of us and make your code more comprehensible and easier to test. You want to understand the complexity metric, how it affects you and supports you to write more readable and maintainable code? Don’t miss this talk.

Uncon: YAGNI
Event Related by Jeroen Smit (30 minutes)

Unconference: Unplanned, Unrehearsed & Unprepared.

Uncon: Haskell for PHP Deverlopers
Event Related by Marco Pivetta (15 minutes)

Unconference: Unplanned, Unrehearsed & Unprepared.

Keynote by Jessica Mauerhan (1 hour)

There is a stereotype of programmers as being antisocial and difficult, and unfortunately many of us take on this attitude as if it comes with the job - but it doesn't have to be this way! I know it from experience, because I've been an angry, judgemental know-it-all, and I'm ready to tell you how I completely changed my attitude and refactored my life. In this talk I'll explain how anger and fear are the root causes of our aggressive behavior, how these feelings manifest as judgemental comments online, bullying in the workplace and ultimately keep the tech community toxic and stunted. I'll show you how embracing compassion, respect, and empathy will make you a better programmer and a happier person.