The Dutch PHP Conference is an annual web technology conference around PHP technology.

Tuesday 12th March 2024

09:00
0
Dockerizing PHP Applications
Workshop by Nic Wortel (8 hour)

Have you ever experienced bugs in production that were caused by missing PHP extensions or configuration that deviated from the development or test environment? Or have you been unable to upgrade once application’s PHP version because other applications on the same server were incompatible? With Docker you can ship your applications as lightweight containers that contain both your PHP source code as well as PHP itself, its extensions, a web server, and the required configuration. That way, your application will work exactly the same in production as it does in development, and you can easily upgrade one application to a newer version of PHP without affecting other applications on the same server. Whether you already have some basic experience with Docker or are completely new to it, this interactive workshop will teach you how to build and run your own production-ready Docker containers, while dealing with PHP-specific questions such as how to install and configure PHP extensions, how to use Composer to install dependencies, how to mount our code during development so that we can see changes real-time, and how to enable Xdebug during development. To not waste time during the workshop you are expected to bring your own laptop with Docker already installed, and during the workshop you are expected to have some basic knowledge of the command line and Linux commands.

0
ADVANCED TYPESCRIPT WORKSHOP
Workshop by Craig Spence (8 hour)

Are you a Front-End Engineer looking to level up your TypeScript game? If you’re currently working on a modern front-end application and working with TypeScript everyday, this is your chance to take your knowledge up a notch with Craig Spence – ex-Spotify, Google Developer Expert (Angular), International Speaker. Solidify your type-safety skills in 2024 with a in-depth one-day workshop covering the full TypeScript type system including: * Type System basics – Primitives, Objects, Functions, Type Aliases * Type Narrowing – Type Guards, Type Coercion, Unions & Intersections * Generic Types – including Conditional Types, Mapped Types, Template Literal Types and more!

Wednesday 13th March 2024

09:00
0
Run PHP Containers in Production with Kubernetes
Workshop by Nic Wortel (8 hour)

After containerizing your application, the next step is to deploy your application containers to production. While you could start a Docker container manually on a production server, that would not be the most robust solution. How will you deploy a new version of the application without downtime? How will you safely handle secrets, such as database passwords or external API keys? How will you deal with a sudden spike of users? How will you deal with a crash of your application or server? Instead of re-inventing the wheel for all these questions, let’s use Kubernetes, a proven platform that can handle these challenges for us. In this interactive workshop, we will deploy a PHP application to a Kubernetes cluster, using the most commonly used building blocks of Kubernetes such as Pods, Deployments, Secrets, Services, Ingresses, CronJobs, and more. We will also configure Liveness and Readiness Probes to monitor the health of our applications, and autoscaling to scale our application up and down based on the load. We will also deal with questions specific to PHP and web applications such as how to deal with (Doctrine) database migrations. To use the time as efficient as possible you are expected to bring your own laptop with Docker and kubectl already installed. During the workshop you are expected to have some basic knowledge of the command line, Linux commands, and Docker.

EFFECTIVE UNIT TESTING
Workshop by Mark Niebergall (8 hour)

Writing effective, valuable tests is a highly sought after skill that advances a developer to leadership and mentorship roles. Dive deep into writing unit and integration tests to test PHP code with PHPUnit. We’ll discuss critical principles and patterns, review code examples, refactor existing code to make it testable, and write actual tests. Top it all off by learning how to get the most out of unit testing supporting tools and reporting to improve efficiency and visibility into test suites.

0
LESSONS LEARNED FROM PLAYING TERRIBLE GAMES
Workshop by Ramon de la Fuente (8 hour)

What do you think about when you hear the term “gamification” applied to your job? An employee-of-the-month challenge? Maybe some badges you can achieve? A public team ranking? The term “gamification” always sounded very shallow to me. But to make work engaging and challenging (like a good game!) means true cultural change. Some of that change starts at the top, but it really is something we can all influence. Most people can spot a badly designed game without effort: it simply does not *feel* good to play. But we are not often encouraged to listen to our feelings to figure our if we’re in a badly designed job. In this workshop, we will spend time playing games – terribly designed games unfortunately – and learn from that experience to improve our own work environment. It is aimed at developers, product owners, scrum masters and management alike because every stakeholder has a role to play in the real-world game called software development. During the day we will cover quite a few topics: assumptions, estimations, prioritization, feedback loops and more… Will you step up to the challenge?

Thursday 14th March 2024

09:00
0
WRITING PHP EXTENSIONS
Workshop by Derick Rethans (3 hours, 30 minutes)

In this workshop, you will learn how to write a PHP extension. We will start by converting a function that we already have in PHP code into C, which we will then wrap in a PHP extension. This will show what performance benefits you can expect by converting an algorithm. Secondly, we will then look at wrapping the data structure that the function operates on into a class, with the initial function converted to a method. And then lastly we will add multiple methods to finish up. What You Will Learn – How PHP’s build system works. – How PHP handlers memory management and types. – How to write a basic extension with procedural functions and OO. – Where extensions would not be useful. Required For understanding the tutorial: – Some knowledge of C For taking part in the exercises: – A Linux machine or Linux VM – Compilers installed (apt-get install php-dev, or similar) – GIT, valgrind, and gdb installed (all through apt, or similar)

4
GETTING THE MOST OUT OF PHPSTAN
Workshop by Ondřej Mirtes (8 hour)

PHP is nothing like compiled languages. If you make a mistake, the program will crash when the line of code with the mistake is executed. When testing a PHP application, whether manually or automatically, developers spend a lot of their time discovering mistakes that wouldn’t even compile in other languages, leaving less time for testing actual business logic. PHPStan is a popular static analyser focused on finding bugs in your code. By leveraging the strength of PHP type system further enhanced in PHPStan itself, developers can create robust applications and discover bugs early in the development process. The aid the tool provides during refactoring is also indispensable. In this workshop, the attendees will learn how to install, configure and run PHPStan, and also receive tips how to write code so that PHPStan can be as powerful as possible. They will also be able to write their own PHPStan rules and extensions.

13:00
0
SUPER CHARGE YOUR DEVELOPMENT WITH TAILWIND CSS
Workshop by Shruti Balasa (3 hours, 30 minutes)

Tailwind CSS is not just a hype or a trend. The approach of this framework has worked for both new and seasoned developers. Without having to think of class names, worry about cascade and context switching between markup and CSS files, you can develop three times faster than you already do. Learn the basics, install the framework, dive into the configuration to make Tailwind CSS suitable to your project and learn all the tricks along the way.

Friday 15th March 2024

09:00
8
USING OPEN SOURCE FOR FUN AND PROFIT
Talk by Gary Hockin (40 minutes)

20 years ago I was a lonely developer sitting in a small room quietly turning out code between 9am and 5pm, Monday to Friday. Fast-forward to now and you’ll see me standing in front of audiences all around the world talking to developers about numerous topics. “Why are you bragging like that at me?” I hear you ask. Because it could happen to you too. The question I always ask myself is “How the heck did that happen?!?!”. The truth is that the only reason I’ve managed to advance my career so far in a decade is because of the people that make up the communities of open source projects. Not only do open source projects save you time and money, but the friendships and support groups that can be made within these communities is, frankly, staggering. Join me as I chart my journey from rat race to conference speaker, and look at how you can leverage the power of open source to make real friends, real money, and real happiness.

09:50
0
WHAT’S NEW IN PHP 8.3
Talk by Derick Rethans (45 minutes)

During this presentation, we are going to look at the new features that were introduced in PHP 8.3, and some in earlier versions. Join me to have a look at how the type system is strengthened with Typed Class Constants, Readonly Classes, Arbitrary Static Variable Initialisers, Overloaded Method Markers, and other new smaller features and clean-ups. At the end you will have a good understanding about all the new and exciting features that are part of the PHP 8.3 release.

Testing APIs written in PHP using the Behat feature testing tool
Talk by Timo Bakx (45 minutes)

Manually testing your own API endpoints using PostMan or an equivalent tool takes a lot of time. Testing them through unit tests will only test a part of our application, and often skips network and framework configuration. Using Behat, we can write tests in Gherkin and execute these on an actual webserver and database. After attending this talk, I hope that attendees will be able to: – Implement Behat into their own projects. – Write functional tests in Gherkin. – Setup state for these tests. – Verify test results from response bodies and database state.

2
CRAFTING A GREENER FUTURE WITH PHP
Talk by Michelle Sanver (45 minutes)

As software engineers it is sometimes too easy to forget the impact that our code has on the environment. We build for changeability, speed and hopefully quality, but we forget about sustainability. The time to act is now. It is time for us to take responsibility and to write more sustainable tech. In this talk I will talk about things we can do to write more energy efficient code. I will also talk about hosting your code more sustainably. And last but not least… I will share the software architecture needed to build greener applications using message queues in PHP.

FROM CRUD TO DDD: HOW DID WE END UP HERE?
Talk by Arnout Boks (45 minutes)

So you’ve moved from a legacy database-centric architecture to a brand new Domain-Driven Design approach. Your coworker told you that this would be about speaking the language of the customer and putting the primary focus on the business domain logic. But now you find yourself looking at aggregate roots, command buses, event projects and process managers, and wonder what they have to do with that. Moreover, what used to be an easy change now requires editing at least seven different files. How did we end up here? In this talk we will look at an evolution from CRUD to a modern architecture based on DDD and adjacent patterns like CQRS and Event Sourcing. We will follow the thought process that led to each of these new tactical constructs, see which problems they solve, but also which disadvantages they have. This talk is not a criticism of DDD, but aims to show where it and related patterns shine (and where they don’t), so you can make a deliberate choice where and when to apply them and develop to their strengths.

10:55
2
GENERICS (IN PHP)
Talk by Karim PINCHON (45 minutes)

Generics are a programming language concept. In short, they allow you to write typed code without being specifically linked to a particular type. Many languages already support generics more or less natively: Java, C#, Go, Rust Typescript… PHP doesn’t, but thanks to its community and ecosystem, it’s still possible to use them. Let’s take a look at how and why.

3
PUSH YOUR SIDE EFFECTS TO THE EDGE
Talk by Pim Elshoff (45 minutes)

You followed all the rules: TDD, SOLID, CUPID and of course DDD. But when refactoring time comes, you still have to touch all those pesky tests. You thought refactoring meant not changing the tests!? In this session we’ll see how design choices can lead to test pain – and how you can avoid that pain by pushing side effects to the edge. We’ll: – Identify context and side-effects – Split up different kinds of logic – Black-box test *all the things* – … identify when and when not to!

1
TUNING PHPSTAN TO MAXIMUM STRICTNESS
Talk by Ondřej Mirtes (45 minutes)

Besides the traditional rule levels 0 through 9 (https://phpstan.org/user-guide/rule-levels) which allow developers to adopt PHPStan incrementally while increasing the strictness gradually, the static analyser offers plenty of other configuration options to look at the code with a critical eye. In this talk I’ll show you these options with examples of practical impact on your code. It will become more predictable and readable.

GITTING THINGS DONE
Talk by Juliette Reinders Folmer (45 minutes)

Git is the modern-day version management system of choice. We all know how to commit, push, pull and merge. But what about (interactive) rebasing, fixing up commits, cherry picking lines and bisecting the history ? And what are those atomic commits you keep hearing people talk about and why would they be of any use to you ? Come and learn how to get the most out of the tooling you already use every day, find ways to make life easier on the people who review your code and leave knowing how to create a clean commit history which is a joy to peruse.

11:50
1
EVERGREEN SKILLS FOR SOFTWARE DEVELOPERS
Talk by Soumaya Erradi (30 minutes)

Learn the “evergreen” skills that every software developer needs to thrive in their career, regardless of the latest technologies and trends. In this talk, we’ll explore some of these and how to cultivate them to support your growth and success as a developer.

NAMING MADE EASIER
Talk by Mark Niebergall (30 minutes)

Naming namespaces, classes, and variables in code is a common and hard problem! Name something wrong and it will end up needing to be refactored. This talk will focus on the best strategies and practices for naming so things are named clearly, accurately, and concisely. Break down naming approaches by covering domains, coding standards, logical groups, indicators, patterns, and grammatical terms.

0
FOR PERFORMANCE, GO TO PAGE 5: INDEXES
Talk by Jachim Coudenys (30 minutes)

An index is an old technique used in books to quickly find pages or chapters of different terms. It is heavily used in computers and as a developer, you probably use it every day. This talk will guide you through the world of index types, how they work, and why it is they make some things so damn fast. By knowing how they work under the hood, it will make you use/configure them more wisely and even get more performance out of them.

1
TOOLS OVER PROCESSES OVER PEOPLE… OR NOT?
Talk by Martijn van der Kleijn (30 minutes)

There are many ways in which companies and teams operate. Over the last two decades or so, Agile and DevOps have really taken off in many people’s minds. However, are Agile and DevOps actually being practiced or only in name? In many places, teams are struggling to start or maintain their Agile & DevOps way of working. This quick talk intends to give you a reminder of what Agile & DevOps are, some of the speaker’s personal experiences and tips on how to start & keep going.

13:15
1
MONAD FOR DUMMIES
Talk by Gina Peter Banyard (45 minutes)

Monad is a term that comes from functional programming, and some people swear by them for error handling. But what is a monad exactly? And what if told you, you may have actually already used some of them without knowing them?

0
HACK YOURSELF: INTRO TO PENTESTING WITH ZAP
Talk by Mike Lehan (45 minutes)

The best way to understand application security is to try breaking into your own web applications, and there’s a free open source tool with support from leading industry players to help you do just that! Using ZAP you can proxy requests, hunt for forms to exploit, sniff out SQL vulnerabilities and even engage “attack mode” to try common exploits against your own site. In the talk we’ll cover why you might think about hacking your own site before the bad guys do, present a great tool to use for just this purpose, and of course see some of the remedies available.

4
SHREK, ONIONS AND ARCHITECTURE
Talk by Katy Ereira (45 minutes)

Have you ever encountered a codebase that’s ogreish and has so many layers of complexity that it makes you cry? It might actually be an onion! In this humorous talk we’ll investigate the structure of large monolithic applications and how we can peel back layers to reveal greater understanding. Using the principles of hexagonal architecture and the science of onion growth, we can make monoliths great again.

5
Making architecture decisions, the Agile way
Talk by Nic Wortel (45 minutes)

For many years, the waterfall model was the standard way of developing software. Engineering teams could spend months or even years on the architecture of a new project, before even a single line of code was written. Nowadays we know that this approach is flawed, and working in small iterations and continuous delivery have become the norm. But does that mean that we should just skip making architecture decisions altogether? Of course not! In this talk we will look at how the Agile Manifesto and the principles behind it actually promote the making of conscious architectural decisions, and how we can include architecture in our software development process while avoiding Big Design Up Front. We will look at practical tools such as Architectural Decision Records which will help to make architecture decisions in a structured way, and document them so that we will still remember the reasoning behind them in a few years from now. So join me in this talk to find out how you can make good architectural decisions that allow you to deal with changing requirements, while delivering working software to your customers as early as possible!

14:10
2
LIVING THE BEST LIFE ON A LEGACY PROJECT
Talk by James Titcumb (45 minutes)

You’ve started a new job. As you dig deeper into the codebase, the WTFs per minute rate rapidly increases, and you’re left wondering… “Where do I start?!”. In this talk, I’ll draw on my own experiences of joining several different teams to help maintain their legacy codebase. You’ll come out of this talk with a better understanding of when you should or should not refactor existing code, the importance of communication, documentation, testing, and ideas for automated tests and checks.

2
ITERATORS + GENERATORS: THE ROAD TO VIRTUAL INFINITE RAM
Talk by Alexandre Daubois (45 minutes)

Iterators could save your day on many occasions. Everyone has already been bothered by memory overflows when trying to manage too big collections in PHP. These are omnipresent in the most famous PHP libraries: Symfony, Doctrine, PHPUnit and even the SPL. The latter contains a lot of ready-to-use iterators that will allow you to manage collections of any size, without ever having to worry about memory. You won’t be able to do without Iterators and Generators soon!

WATCH THE CLOCK
Talk by Andreas Heigl (45 minutes)

Creating current time information in code is rather easy by calling time() or new DateTimeImmutable() directly when the information is necessary. But that then makes the code a nightmare to test. In this session we will see how the new PSR-20 allows us to change that by still making it easy to generate current time information but also allowing one to test the code. And we will get some background info why it was designed in such a way.

1
JIRA SUCKS, RIGHT!?
Talk by Ivan Herak (45 minutes)

JIRA is a widely used tool to manage software projects. Project managers LOVE it. But, what about developers? Are we really stuck in the eternal hell of pushing boxes? Let’s see what could be done to make developers’ life a bit easier and PMs happy! We can have a cake and eat it too!

15:15
3
SUSTAINABLE OPEN SOURCE CONTRIBUTIONS IN YOUR BUSINESS
Talk by Stefan Koopmanschap (45 minutes)

A lot of companies think contributing to open source is hard, but is it? In this talk you will hear about how Ingewikkeld, a small Dutch development and consultancy company, has built a sustainable model for both making a profit and also doing solid contributions to open source projects.

4
THE INDIVIDUAL CONTRIBUTOR PATH
Talk by Rafael Dohms (45 minutes)

For most of my early career, I was told the only path up was through management roles. Our market has since evolved, and Staff+ engineering roles are more common and offer us a different path. But what is a Staff/Principal engineer? What do they do? How do they work? Are they just managers who can’t admit it? Let’s explore all these topics, the skills you need, the role you may play, and the different flavors of Individual Contributors you will discover while we figure out how to hotwire your growth in this career path.

1
SYMFONY IS RAD
Talk by Rick Kuipers (45 minutes)

What happens when you just ride the wave? How productive can we be when we smother our project in all that Symfony goodness? Let’s explore some Rapid Application Development practices that Symfony has to offer. We’ll acquire the mindset needed and get ourselves familiar with a Symfony setup by the book. We will develop an MVP using the MakerBundle and we’ll close the gap towards an MLP using Symfony UX. Live demo included.

2
I DID IT ! I BROKE PRODUCTION !
Talk by Sofia Lescano (45 minutes)

About to finish my first year in my company, I caused not one but two incidents in production in one hour! Despite the tense moment, it was a huge learning. No one ran with their arms in the air, shouting at each other, nor began to look for culprits. Conversely, a close-knit team that helps each other reestablished the production as quickly as possible by collectively acknowledging the error made. How do we manage a production incident with peace of mind? – an upstream quality process (code review, sandbox environment, functional review …) – a process for detecting and reporting incidents – clear roles and responsabilities on incident management – a post-mortem and concrete actions to avoid a repeating similar incident In this conference I will explain how to reduce and improve the management of your incidents and you will leave with the keys to apply this in your teams.

16:10
3
EVIL TECH: HOW DEVS BECAME VILLAINS
Talk by Sergès Goma (30 minutes)

Once upon a time, developers were the unsung heroes of our world. The stereotypical developer, with glasses perched on the nose and an innate talent for science, even inspired the alter egos of superheroes. However, today, software engineers often find themselves under scrutiny for their roles in creating data-gathering apps, facial recognition software in CCTV systems, and the constant tracking of citizens through GPS, among other issues. From being heroes to becoming modern-day Dr. Frankensteins, tech creators face an unenviable dilemma: to embrace malevolence or strive for heroism. During this talk, we will delve deep into the complex relationship between technology and ethics, and explore how developers navigate the fine line between progress and principles. This is our villain’s origin story, told with a touch of dark humor.

DECODING LEGACY: A JOURNEY THROUGH COMMIT MESSAGES
Talk by Airton Zanon (30 minutes)

Ever felt the frustration of inheriting a codebase with introduced code that no one actually understands why they were added? Well, I get it. This is not a talk about atomic commits or how to be a git ninja. It’s a journey of understanding that we are not writing code for ourselves, and even if we’re, we are humans, we forget things. Having good commit messages on a project can be a time machine, saving hours of head-scratching when deciphering historical changes. Also, it impacts the code review process and improves day-to-day collaboration. Let’s explore the “how” we can leave some small tips for our future self or future developers that will touch our code and, most importantly, the “why” we should do it.

3
APPLICATION LOGGING
Talk by Florian Engelhardt (30 minutes)

Have you ever faced the daunting task of investigating a customer complaint or hunting down the cause of a mysterious system glitch? Application logging can be your lifeline in these challenging situations. In this talk, we’ll explore the importance of application logging and how it can save you time and effort when troubleshooting. Discover the key principles of effective logging and equip yourself with the knowledge and best practices to tackle any issue with confidence!

2
SPEAK YOUR USERS’ LANGUAGE: WHAT TO LOOK OUT FOR WHEN GOING GLOBAL
Talk by Robin Martijn (30 minutes)

You think you’ve made the perfect app, but take it overseas and watch things fall apart! In this talk we delve into the frequent mistakes developers make when adapting their sites or apps for an international audience.
From hilarious translation blunders to unintentionally offending your users, the path to global success is riddled with challenges.
But this isn’t just for the tech-minded! Even if you’ve never written a line of code, we’ll uncover fascinating linguistic and cultural tidbits that shed light on our wonderfully diverse world.
So, whether you’re a coding pro or just curious about global quirks, come discover the do’s and don’ts of going global!

16:50
7
COMMUNITY, PHP AND US: GROWING UP
Talk by Michelle Sanver (40 minutes)

In year 2000 when PHP 4 just came out, we had functions.php and when it started being big we made functions2.php. When object orientation came out we renamed our databasefunctions.php and put a class around it and called it OOP. PHP by then, was not very mature. I by then, was not very mature. The community by then, was not very mature. We have come a long way since then! We now believe 12 year old girls on the internet are not FBI agents. We now have type hints, and namespaces, and composer! We have all matured. Let me share my story of amazing technology that changed my life. I will also share some horrible community experiences, and the awesome ones that kept me going. Let’s keep growing, because we never really stop.