Schedule

Room Level
Tutorial
09:30 - 12:45 Tutorial day
Close
Derick Rethans

PHP Internals Deep Dive

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.
Tutorial Requirements:

For understanding the tutorial:
- Moderate knowledge of C

For taking part in the exercises:
- A Linux machine or Linux VM
- Compilers installed (apt-get install php-dev, or similar)
- A GIT clone of the PHP source tree ([email protected]:php/php-src.git)


For this workshop you will need a checkout of the PHP source tree, in the PHP-7.3 branch. Please use a Linux machine, or VM. Derick will not offer help on Windows or OSX.
Attendees need to make sure that they can run the following without errors on your system:

git clone [email protected]:php-src.git
cd php-src
git checkout PHP-7.3
./buildconf
./configure --disable-all --prefix=/usr/local/php-deep-dive
make
make install

bison --version (version needs to be > 3.3)
flex --version (version needs to be > 2.6)
re2c --version (version needs to be > 0.15.3)
autoconf --version (Version needs to be > 2.69)
automake --version (version needs to be > 1.16)

All of these tools are part of your Linux distribution. On Debian:

apt-get install sudo apt-get install bison flex re2c autoconf automake 
git make

It also helps to install the php-dev package (as it depends on many compiler tools).

Close
Joel Lord

From Zero to App: A React Workshop - Full day / Part 1

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
Tutorial Requirements:

Laptop with NodeJs installed. No previous knowledge of React needed, we will start from the very beginning.

Close
Joop Lammerts

TDD, DDD & Teamwork

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

Tutorial Requirements:

We split up the group in teams of 4 or 5. Each team needs a laptop with the following github repo: https://github.com/procurios/diconvergent.


Joop Lammerts will give this workshop with his colleague Pim Elshoff

Close
Ayesh Karunaratne

From Zero to a Tested, Automated, and Documented Open Source Package

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.

Tutorial Requirements:

If you would like to follow along (the presenter will also project to a screen), the following things will be necessary:

  • A Laptop, preferably with Git installed.
  • A Github account

If you have never published an open source project, or just starting out, you are the perfect fit! Knowing the very basics of Git version controlling system will help, but this talk is more about personal skills than the technical jargon, so feel free to attend!

What you'll learn:

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!

Version Controlling
  • Why we use a version controlling system
  • Basic Git setup.
  • Pushing and pulling code
  • Commits
  • Tagging
  • Signing work
  • Branching, merging and rebasing
  • How to write proper commit messages.
Composer Packages
  • Composer setup
  • Create your first Composer package
  • composer.json
  • Publishing packages on Packagist.
  • Dependencies and autoloading
  • Local composer packages
Documentation
  • PHPDoc comments
  • README.md
  • Issue templates, Wiki articles, and documentation
Issues and Pull Requests
  • How to create an issue on a project
  • Pull requests
  • Contributing and collaborating with other open source projects
Code Security
  • Signing Git commits and tags
  • Trusting developers
  • composer.lock
Testing
  • PHPUnit 101
  • How to write proper tests
  • How to write testable code: Dependency injection, Mockups, etc
Automation
  • Continuously running tests
  • Building and testing on Travis CI
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!

Close
Denis Brumann

Using the Symfony Messenger

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.

Tutorial Requirements:

We will use the following for the workshop:

* PHP 7.1 or higher
* a current version of Composer (1.6 or higher)
* PHP-extensions required by Symfony and Composer (iconv, intl, mbstring, zip, curl)

Denis will provide a docker-compose.yml that can be used instead. This will require a new-ish version of Docker (around version 2). He can also provide a VirtualBox image that can be imported.

Denis will not provide a web server like Apache or NGINX and if you chose to use either of them, please make sure you have the appropriate configuration ready, as he might not have time to help you set up a web server. If you are unsure, whether you are able to provide a setup for a new Symfony application consider setting up an empty skeleton project or using the PHP internal web server instead.

Close
Matthias Noback

Advanced Application Architecture - Full day / Part 1

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
Tutorial Requirements:

You will need a laptop, and have to install the demo project before arrival.
Please install the following project on your laptop before you arrive at the venue: https://github.com/matthiasnoback/layers-ports-and-adapters-workshop

Close
Christian Liebel

Progressive Web Apps for PHP Developers in action! - Full day / Part 1

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

Tutorial Requirements:

- Own Notebook with current version of Windows, macOS or Linux (make sure you can access the Internet without corporate proxys and/or firewalls)

 Please install the following software at home or in the hotel (conference WiFis often tend to be slow):

- Google Chrome, version 72 or later (https://www.google.com/chrome/browser/desktop/index.html)
- Git, current version (https://git-scm.com/downloads)
- Node.js, version 10.15.3 LTS or later (https://nodejs.org/en/)
- Angular CLI 7.x, run the following command after installing Node.js: npm i -g @angular/[email protected]
- Microsoft Visual Studio Code (free), JetBrains WebStorm/PhpStorm (commercial, free trial) or another code editor of your choice

If you have and questions, feel free to send me a tweet (@christianliebel) or email ([email protected]).

12:45 - 13:45
Close

Lunch

A range of sandwiches, salads, a hot snack and fruits.

13:45 - 17:00
Close
Andrew Rota

Build a GraphQL API with PHP

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
Tutorial Requirements:

You should have an internet connected laptop available.
You should be comfortable writing basic to intermediate PHP code.

Close
Joel Lord

From Zero to App: A React Workshop - Full day / Part 2

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
Tutorial Requirements:

Laptop with NodeJs installed. No previous knowledge of React needed, we will start from the very beginning.

Close
Chris Holland

Better and Faster: TDD-ing a Ride-Hailing Application w/ PHPUnit, Symfony and Doctrine

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
Tutorial Requirements:

Audience members who wish to code-along will need a laptop:

To get ready to follow-along the tutorial, please complete the "Initial Setup":

https://github.com/elchris/kata_tdd_php_symfony/blob/master/README.md

Close
Rob Allen

Building Serverless PHP applications

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
Tutorial Requirements:

Laptop with network connection.
Please follow the information in https://gist.github.com/akrabat/bb50ec24c80e7661066ee9198460506a

Close
Kevlin Henney

Good Code

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.

Tutorial requirements:

No laptops needed, just a willingness to ask questions, consider ideas and contribute your own thoughts.

Close
Matthias Noback

Advanced Application Architecture - Full day / Part 2

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
Tutorial Requirements:

You will need a laptop, and have to install the demo project before arrival.
Please install the following project on your laptop before you arrive at the venue: https://github.com/matthiasnoback/layers-ports-and-adapters-workshop

Close
Christian Liebel

Progressive Web Apps for PHP Developers in action! - Full day / Part 2

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

Tutorial Requirements:

- Own Notebook with current version of Windows, macOS or Linux (make sure you can access the Internet without corporate proxys and/or firewalls)

 Please install the following software at home or in the hotel (conference WiFis often tend to be slow):

- Google Chrome, version 72 or later (https://www.google.com/chrome/browser/desktop/index.html)
- Git, current version (https://git-scm.com/downloads)
- Node.js, version 10.15.3 LTS or later (https://nodejs.org/en/)
- Angular CLI 7.x, run the following command after installing Node.js: npm i -g @angular/[email protected]
- Microsoft Visual Studio Code (free), JetBrains WebStorm/PhpStorm (commercial, free trial) or another code editor of your choice

If you have and questions, feel free to send me a tweet (@christianliebel) or email ([email protected]).

Conference day 1
09:30 - 09:40 Conference day 1
Close

Opening

09:40 - 10:30
Close
Kevlin Henney

Keynote: Agility ≠ Speed

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 - 11:30
Close
Tobias Nyholm

Dynamic programming - 101

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.

What you'll learn from this talk:
  • Dynamic programming
  • Graph theory
  • Graph algorithm
Close
Dan Ackroyd

Good or bad - a key skill for developers

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.

What you'll learn from this talk:
  • How human brains are just terrible at making decisions.
  • Why a lot of Apple products have been so successful.
  • Why some languages have been so popular despite being 'terrible'.
  • How to get better at making decisions.
Close
Ayesh Karunaratne

ᑌᑎIᑕOᗪE + P҉H҉P҉ for English Speakers

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.

What you'll learn from this talk:
  • How characters are stored in computers
  • How characters are represented
  • Different character sets
  • Character encoding
  • Unicode, Unicode plains, and different flavors of Unicode character encodings
  • Multi-byte characters in programming: PHP and database systems
  • How to properly accept, sanitize, store, and present all sorts of characters.
Close
Sebastian Feldmann

Uncon: Git hooked ARRR!!!

Unconference: Unplanned, Unrehearsed & Unprepared.

Close
Heather Burns

Developing for Privacy

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.

Close
Evaldo Bento

Getting the most out of Postman

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.

What you'll learn from this talk:
  • Introduction to Postman
  • Writing requests with Postman
  • Writing tests on Postman
  • Using pre-request scripts
  • Variables
  • Running Postman's collection on deployment pipelines
  • Environments
11:45 - 12:30
Close
Philipp Krenn

Centralized Logging Patterns

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.

What you'll learn from this talk:

These are the five patterns:

  • Parse: Take the log files of your applications and extract the relevant pieces of information.
  • Send: Add a log appender to send out your events directly without persisting them to a log file.
  • Structure: Write your events in a structured file, which you can then centralize.
  • Containerize: Keep track of short lived containers and configure their logging correctly.
  • Orchestrate: Stay on top of your logs even when services are short lived and dynamically allocated on Kubernetes.
Close
Derick Rethans

Xdebug 3.0

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.

What you'll learn from this talk:
  • Which features Xdebug 3 has.
  • How to debug your application with a single step debugger.
  • How to make optimal use of the configuration options in Xdebug 3.
  • How some of the things in Xdebug work.
Close
Nash van Gool

PEBCAK

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.

What you'll learn from this talk:

How software is a people problem
How developers can factor into that problem
How to make the people problem a bit less of a problem

Close
Skoop & Friends

Uncon: Live @ DPC Podcast panel

Unconference: Unplanned, Unrehearsed & Unprepared.

Close
Antonio Perić-Mažar

The UI is THE APPLICATION

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.

What you'll learn from this talk:

what is UX, why UX is more important than DX, why you should care about your users

Close
Arnout Boks

Of representation and interpretation: A unified theory

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.

What you'll learn from this talk:
  • Understanding a pattern in software development that they've probably encountered before, but not recognized as such
  • Reasoning about this kind of problems in a logical and structured manner and practical approaches for preventing representation-interpretation-problems in code
  • That string escaping is not a security measure but just proper representationof data
  • That data has no inherent meaning, but that its meaning is defined by how we interpret it
12:30 - 13:30
Close

Lunch

A range of sandwiches, salads, a hot snack and fruits.

13:30 - 14:15
Close
Benoit Jacquemont

HTTP/3: It's all about the transport!

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.

What you'll learn from this talk:
  • the main problems HTTP/3 is trying to fix
  • the technical parts that have changed compared to HTTP/2
  • the challenges in the adoption path of HTTP/3
Close
Andrew Rota

Performant APIs with GraphQL and PHP

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.

What you'll learn from this talk:
  • Why GraphQL is a compelling option for building an API
  • How to build a php-graphql powered GraphQL API
  • Introduction to more advanced GraphQL topics such as deferred resolvers and persisted queries
Close
Bohuslav Šimek

What can PHP Foreign Function Interface do for you?

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.

What you'll learn from this talk:
  • How to call C code from PHP without the necessity of writing an extension in any compiled language.
  • How to quickly prototype simple PHP wrapper around C library.
  • How to overcome common pitfalls.
  • When to use this approach and when not.
Close
Timo Schinkel

Uncon: Why, How & Extending PSR18 (30 min)

Unconference: Unplanned, Unrehearsed & Unprepared.

Close
Cees-Jan Kiewiet

Uncon: Emoji-PHP (15 min)

Unconference: Unplanned, Unrehearsed & Unprepared.

Close
Maurice de Beijer

Why I am hooked on the future of React

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.

What you'll learn from this talk:

- Lean what the future of React looks like
- How to create React component
- How to add functionality to React components

Close
Pauline Vos

DevCorp: Choose Your Own Adventure

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?

What you'll learn from this talk:

- How business needs can influence a development team, and vice versa,
- Agile concepts that can make or break a team,
- The consequences of some common software design decisions.

14:30 - 15:15
Close
Jayesh Kawli

Becoming a tech lead - Lessons learned

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.

What you'll learn from this talk:
  • Shifting the mindset as one transition from being an individual contributor to become a tech lead
  • Balancing productivity and pace with the equal opportunity for learning
  • How to act as and develop mentors within teams
  • Using past sprints as a guideline to help with blockers and estimates for future sprints
  • Handling communication and being proactive
  • Developing custom made benchmarks to measure the output and source of inefficiency
Close
Rob Allen

The making of a great API

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.

What you'll learn from this talk:

We will cover the most important things that make up a great API. You will learn:

  • The importance of following the HTTP spec in terms of key parts of RFC7321 along with the how and why of API versioning.
  • How error handling affects usability of an API and why RC7807 is so useful.
  • How to document and API
  • Security and authentication issues.
Close
Tomasz Ducin

5 architectures of asynchronous JavaScript

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.

What you'll learn from this talk:
  1. what class of problems is a certain architecture aimed to solve?
  2. when should one be used over another (many examples included)
  3. how do they work under the hood (many examples included)
Close
Kirill Smelov

Uncon: PHP as PHPstorm Development Tool (30 min)

Unconference: Unplanned, Unrehearsed & Unprepared.

Close
Muhammed Akbulut

Uncon: Truth Behind Evangelism in PHP Projects (15 min)

Unconference: Unplanned, Unrehearsed & Unprepared.

Close
Markus Winand

More Than a Query Language: SQL in the 21st Century

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.

What you'll learn from this talk:

In this session you will learn...

  • ...how to process graphs in SQL
  • ...how to do JSON transformations
  • ...about time traveling in SQL
Close
Mark Baker

PHP and R - Putting the PoweR in PHP Statistics

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.

What you'll learn from this talk:

Developers will learn why R is such a powerful mathematical and statistical language, and in what use cases they might prefer to use it instead of PHP. They will also learn how the can use it alongside PHP, to obtain the best from each language

15:15 - 15:45
Close

Coffee & Tea Break

Italian Ice-Cream

15:45 - 16:30
Close
Albert Peschar

Automatic Web Page Optimisation in Pure PHP

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.

What you'll learn from this talk:
  • Why is performance important?
  • What are reasons for slowness?
  • How to measure performance
  • Optimization techniques
  • Optimization tools
Close
Jeroen Keppens

DDD, CQRS, Hexagonal, Onion,... Putting it together

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.

What you'll learn from this talk:

This talk will give food for tought and allow for experimentation at home. This talk is a very good complementary talk for conference goers that are interested in the matter.

Close
Rowdy Rabouw

Get on stage!

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?

What you'll learn from this talk:
  • how to start public speaking
  • it's not scary to be on stage
  • what to do and what not to do when you are on stage
Close
Nash van Gool

Uncon: Low Level Programming For High Level Programmers (30 min)

Unconference: Unplanned, Unrehearsed & Unprepared.

Close
Kathryn Reeve

Uncon: OCD & Me (15 min)

Unconference: Unplanned, Unrehearsed & Unprepared.

Close
Pim Elshoff

Refactoring the Domain Guided by Tests

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.

What you'll learn from this talk

Test first approach (Mis-)naming Refactoring by taking apart and putting back together Creating space for business rules

Close
Janna Hilferty

Anatomy of a DDoS

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/

What you'll learn from this talk:
  • Learn about the different type of DDoS attacks and how they work
  • Learn about the different types of software or proxy solutions that can help
  • Learn why these solutions prevent DDoS
16:45 - 17:30
Close
Larry Garfield

Software Management Lessons from the 1960s

"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.

What you'll learn from this talk:
  • Why are software projects always late?
  • How can we improve the pace of software development? Or can we?
  • What process and structure helps lead to a "good" software architecture?
Close
Chris Riley

Event driven development

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.

What you'll learn from this talk:

A brief overview of

  • Task based UI
  • Event sourcing
  • Event driven architecture

How they all fit together

Close
Sebastian Schürmann

Managing a (component) zoo - DIY web component catalogues

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.

What you'll learn from this talk:

express API dependencies with open API use lerna to keep repo count small distribute component catalogs for the web i will provide an example repo how to use a release on npm in your favour (CDN included) heavy automation
- run all CI locally
- optimize CI for speed
- test different browser versions changelogs for catalogs
- general ithub automation

Close
Mike Lehan

Uncon: Know When Your Stuff Breaks (30 min)

Unconference: Unplanned, Unrehearsed & Unprepared.

Close
Arnold Daniels

Uncon: Unexpected Type Juggling (15 min)

Unconference: Unplanned, Unrehearsed & Unprepared.

Close
PJ Hagerty

A Glimpse Into Accessibility

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.

What you'll learn from this talk:

Accessibility is an issue often overlooked in modern application development. This talk will take a look some hurdles of consideration and remind developers of the importance of focusing on making their applications accessible to anyone.

We want to make a better world, let’s look at making it better for everyone.

Close
Joel Lord

Post Burnout Thoughts

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.

What you'll learn from this talk:
  • What is burnout
  • How can we avoid it
  • What good can come out of it
17:30 - 20:00
Close

Conference Social Dinner

Dinner includes Soup, French Fries, Hotdog or Hamburger.

Conference social attendees will receive 5 coins for free drinks and there is unlimited water available (there's also the possibility to buy extra drinks when you are out of coins)

20:00 - 23:00
Close

CodeNight

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.

Close

GameNight

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.

Close

Slideshare Karaoke

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.

Close

Escaphpe Sequence

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?

Conference day 2
09:45 - 10:30 Conference day 2
Close
Marco Pivetta

Backwards Incompatible Tales

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.

What you'll learn from this talk:
  • perceived stability from a consumer point of view
  • maintainability of code
  • when and why to introduce backwards incompatible (BC) breaks
  • what to do when an unexpected BC break is found
Close
Donatas Aleksandravičius

Do you really need that relational DB?

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.

What you'll learn from this talk:

- what are read models & projections
- a different opinionated approach to present data for web
- how to solve your biggest problem
- caching

Close
Jonathan Flores

Brand Humanizing: A humane turn on AI

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. This talk will offer a new approach to the future of tech and a different perspective than today’s popular ideas about the future.

What you'll learn from this talk:
  • Popular ideas about tech are inhumane
  • Robots often perform tasks humans are better at (robots posing as humans) -> Think about tasks that require Emotional Intelligence and Ethics (establishing relationships, decisions that require context and morality)
  • Humans are performing tasks robots are better at (humans posing as robots) -> Think about a supermarket clerk that points you to the spot where you can find the vegetables you asked about; that's just a human hyperlink
  • Our current OS (today's tech-space) requires an update and many of the features we created have bugs that need fixing
  • We as the tech-community are the only ones in position to change this around for a more prosperous future in which man and machine work side-by-side rather than one canceling out the other
Close
Jonathan van Belle

Uncon: Enlarge Your Team Skills With a Bit of Time (15 min)

Unconference: Unplanned, Unrehearsed & Unprepared.

Close
Mario Blazek

Uncon: Maintainig an Open Source Repo (30 min)

Unconference: Unplanned, Unrehearsed & Unprepared.

Close
Tomasz Kajtoch

Website performance beyond the code

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.

What you'll learn from this talk:
  • How to approach website performance optimisation
  • What are the common bottlenecks of web applications
  • How does the path of loading the webpage look like under the hood
  • How to optimise webpage's assets and make use of built-in caching and compression techniques
Close
Benoit Jacquemont

PHP Opcode? What's that?

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.

What you'll learn from this talk:
  • how the Virtual Machine inside the Zend Engine works
  • how the PHP code is turned into opcode
  • how the opcode cache is used and how to check if it's efficient
  • what the optimizer part of the opcode cache is doing
10:45 - 11:30
Close
Szymon Skórczyński

Senior Developer Development

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.

What you'll learn from this talk:

You will learn about versatile skills senior software developers should gain. These include:
- Understanding the business and having holistic view on software engineering.
- Peopleware.
- Learning and teaching.

Close
Dan Ackroyd

Interface Segregation for PHP

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!
What will people learn from your talk:
  • The difference between code being reasonable and understandable.
  • The purpose behind using types to make your code be less likely to have bugs.
  • How 'interface segregation' applies to more than just classes in PHP.
  • How to overcome some emotional barriers to writing clean code.
Close
Janna Hilferty

Automating PHP upgrades with Ansible

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/

What you'll learn from this talk:
  • Scalable ways to use variables for easy upgrades in the future
  • Deploying infrastructure and vagrants with Ansible
  • Best practices for testing compatibility
  • Creating servers from templates, tags, and playbooks
Close
Erik de Bos

Uncon: Scrum in Practice

Unconference: Unplanned, Unrehearsed & Unprepared.

Close
Mike Lehan

Keeping it Real(time)

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.

What you'll learn from this talk:
  • Which real time web technologies exist, and how you can use them
  • The basics of websocket protocols and what clients are needed on front & back ends to speak to them
  • How the protocols can be used to build a live chat application
  • What WebRTC is, how it can be used and what pitfalls to watch out for
Close
Frank Koornstra

Async non-blocking code reviews

“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.

What you'll learn from this talk:
  • how to create a code review etiquette that works
  • awareness of the psychological mechanics at work during code reviews
  • keeping an eye on delivery time while keeping the benefits of code reviews
11:45 - 12:30
Close
Szymon Szymański

Exception design - the art of making debugging more accurate

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.

What you'll learn from this talk:
  • What are the options to signal an exceptional situation in your application
  • How to fit them in your application circumstances, so they will be helpful
  • Caveats during exception design
Close
Zan Baldwin

Crazy Fun Experiments with PHP (Not for Production)

I’ll show you the crazy things you can do in PHP with streams and autoloader overloading to write your own language features, including generics. 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!

What you'll learn from this talk:
  • Overloading Composer with Stream filters
  • Aspect-orientated programming
Close
Arnout Boks

PageRank all the things!

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.

What you'll learn from this talk:
  • The basics of matrices, vectors and linear algebra
  • How Google's PageRank algorithm works
  • The many possible uses of PageRank beyond web search
  • How to implement a PageRank(-like) algorithm in PHP
Close
Jenny Wong

Uncon: Hating Wordpress Less with WP CLI (15 min)

Unconference: Unplanned, Unrehearsed & Unprepared.

Close
Michelle Sanver

Uncon: Serializing Complex Data 10x Faster (15 min)

Unconference: Unplanned, Unrehearsed & Unprepared.

Close
Alexander M. Turek

Uncon: Legacy to Symfony (15 min)

Unconference: Unplanned, Unrehearsed & Unprepared.

Close
Andreas Heigl

The First Contact

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.

What you'll learn from this talk:
  • What are the pitfalls of a registration form
  • Why are these pitfalls
  • What are the requirements for a contact-form
Close
Joop Lammerts

Improve your team synergy w/The Attitude Model

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).

What you'll learn from this talk:
  • Are you more happy with the divergent approach or the convergent
  • Get the best out of you and your team
  • Have better meetings by being more to the point and be able to explain why
12:30 - 13:30
Close

Lunch

A range of sandwiches, salads, a hot snack and fruits.

13:30 - 14:15
Close
Larry Garfield

PSR-14: A major PHP Event

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.

What you'll learn from this talk:
  • What is the new PSR-14 spec from FIG and how does it work?
  • How can I leverage events in my library in a framework-agnostic way?
Close
Tomáš Votruba

Refactoring Huge Legacy PHP Applications - From 100 hours to 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.

What you'll learn from this talk:
  • What is AST - abstract syntax tree
  • How to see your legacy application as structured code
  • How to transform these structures easily with AST
  • How to use instant upgrades and refactorings in your code since Monday
Close
Chris Holland

Leveraging Typed Exceptions for Cleaner Error Handling

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.

What you'll learn from this talk:
  • use-cases for leveraging exceptions, recognizing patterns where they would be a better fit
  • how exceptions allow us to signal errors with less code
  • how exceptions allow us to handle errors with less code
  • how exceptions can help us build more robust systems with far less technical debt
Close
Jeroen Keppens

Uncon: Sample App for CQRS, DDD, Ponts & Adapters, Onion Architecture, Events, Putting it Together

Unconference: Unplanned, Unrehearsed & Unprepared.

Close
Andrew Rota

Integrating React.js into a PHP application

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.

What you'll learn from this talk:
  • Why React.js a compelling option for a frontend framework
  • How to get started with client-side React.js in your application
  • What the architectural options are for implementing React.js server-side rendering in a PHP stack
Close
Jayesh Kawli

Effective Mentorship

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

What you'll learn from this talk:
  • Importance of investing into mentorship programs irrespective of the team size
  • How effective mentor can facilitate the transfer of team specific domain knowledge and communication protocols
  • How to work with mentee to leverage their existing skillset, and challenge them to get out of their comfort zone
  • How to create a mentorship plan and roadmap and learning from past experiences to refine them
14:30 - 15:15
Close
Sebastian Feldmann

Hello my name is "if"

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.

What you'll learn from this talk:
  • Cyclomatic complexity
  • OP Codes
  • Refactoring
Close
Matthias Noback

Beyond design patterns and principles - writing good OO code

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!

What you'll learn from this talk:
  • How to improve the design of your classes and methods
  • How to deal with exceptional situations
  • How to write better object tests
Close
Carl Alexander

How to use teaching as a learning tool

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.

What you'll learn from this talk:
  • Why teaching can help improve your programming skills
  • When you know enough to teach
  • Where you can develop your teaching skills
Close
Jeroen Smit

Uncon: YAGNI (30 min)

Unconference: Unplanned, Unrehearsed & Unprepared.

Close
Marco Pivetta

Uncon: Haskell for PHP Developers (15 min)

Unconference: Unplanned, Unrehearsed & Unprepared.

Close
Derick Rethans

Time Zones and Calendars are a PITA

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.

What you'll learn from this talk:
  • That dealing with time zones is always harder than you think it is
  • Practical ways on how to deal with time zones correctly in PHP
  • How to use (some of) PHP's Date/Time features
  • How to store date/time information
Close
Kat Zień

Get GOing with a New Language

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.

15:15 - 15:45
Close

Coffee & Tea Break

Italian Ice-Cream

15:45 - 16:45
Close
Jessica Mauerhan
Jessica Mauerhan

Keynote: RTFM

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.

16:45 - 17:00
Close

Closing

17:00 - 18:00
Close

Drinks

Would you like to receive notifications about the conference?