DPC

Schedule

Tutorial
09:30 - 12:45 Tutorial day
Going Elastic (Philipp Krenn) D403
Close
Philipp Krenn

Going Elastic

(Hands on)

One of the hottest tools for log monitoring and analytics at the moment is the Elastic stack:

* Elasticsearch doing the hard work of searching large amounts of data.
* Logstash for ingesting logs.
* Kibana for visualizing what is going on.

This workshop gives you an overview of the three technologies, how they are working together, and how they can solve your problems.

Tutorial Requirements:
All you need to bring with you is a laptop with Virtualbox installed. I'll provide a box with the basic software and we'll take it from there. (You will need 2GB of RAM for the virtual machine)

Close
Modern Databases (Derick Rethans) D404
Close
Derick Rethans

Modern Databases

(Hands on)

In this tutorial I will explain the differences between different types of modern distributed (NoSQL) databases as well as the CAP theorem. I will then progress to illustrate which paradigm shifts are necessary to successfully implement these non-relational databases, using MongoDB as an example.

The approaches to schema design, fault tolerance, the network breaking and latency are all things that are inherent to scalability with noSQL solutions and with this talk you will learn how to use MongoDB effectively considering all the above mentioned situations.

Covered subjects will be: CAP theorem, schema design, dealing with error situations and architecture of multi-node set-ups.

Tutorial Requirements:
Attendees need to have PHP 7, composer, MongoDB 3.2, and the preferably the latest, but minimally 1.1.6, version of pecl/mongodb installed.

Close
Basic CQRS and Event Sourcing with Prooph (Marco Pivetta) D407
Close
Marco Pivetta

Basic CQRS and Event Sourcing with Prooph

(Hands on)

CQRS and Event Sourcing are challenging if approached for the first time, and especially if done from scratch. We help you installing, configuring and getting Prooph to run.

We’ll build a fairly simple event-sourced aggregate in order for you to understand how to organize things inside CQRS/ES stack, and how to massively simplify some problems that usually cause very big performance issues when put at scale.

Co-Host: Jefersson Nathan

Close
Lightning fast tests (Jakub Zalas) D408
Close
Jakub Zalas

Lightning fast tests

(Hands on)

One of the benefits of having an automated test suite is the feedback given when code is being changed. As the project grows, the test suite becomes slower and slower every day, until it’s so slow it stops being useful. Tests are disabled, skipped and finally removed.

Huge part of the problem lies in getting the testing pyramid wrong and putting to much effort into wrong type of testing.

Learn how to structure your project to benefit from lightning fast tests. Apply the right amount of testing on appropriate levels, and run your tests in seconds, not hours.

Tutorial Requirements:

  • PHP >=5.6 (no need for a web server)
  • Git
  • PHPUnit 5.x
Close
Hexagonal BDD - Part 1 (Scato Eggen) D503
Close
Scato Eggen

Hexagonal BDD - Part 1

(Hands on)

Acceptance tests can be slow and brittle, but they don't have to be. At the core of Hexagonal Architecture is the idea that you should be able to drive your application using tests just as easily as through the user interface.
Behaviour-Driven Development views tests as executable specifications. Unit tests contribute to inner quality: the code is easy to change. Acceptance tests contribute to outer quality: the code does something that is useful for the business.

In this tutorial, we will use Behat and PHPSpec to grow an application. We will apply the principles of Hexagonal Architecture and BDD, touching on user stories, modelling by example, ports and adapters, red-green-refactor, and feedback loops.

Tutorial requirements:
Attendees can clone https://github.com/scato/hexagonal-bdd.git and follow the instructions in README.md

Close
Containerizing a production environment - Part 1 (Lucas van Lierop) SOLD OUT D504
Close
Lucas van Lierop

Containerizing a production environment - Part 1

(Hands on)

You all heard about Docker, and you have probably heard of Docker Compose, Mesos and Marathon.

You have tried to put into containerize largers apps and you ended up with large and hard to maintain containers.

You are convinced that OS-level virtualization (aka containerization) is cool, but now want a shortcut way to the deployment strategy, so that this new architecture helps you, not impedes your conventional processes. If that sounds familiar, the this session is definitely for you.

In this tutorial, we will take a hands on approach to (automatically) build small containers, store them in a repository and deploy them to a production environment. We will start small but end up with an application that consists of several scalable microservices that can communicate with each other.

Not only will you learn how to containerize your PHP apps efficiently, as a bonus, we will also look into the whole test and deployment cycle. For this we will rely on GitHub, TravisCI, Docker Hub and a Mesos cluster running Marathon, Consul and HAProxy.

The end result of this tutorial session will be a fully deployed (and easily re-deployable) load-balanced multi-node application, that is ready for modern high load.

Tutorial Requirements:
If you want to fully participate in the 'Containerizing a production environment' workshop you'll need: 
- 4GB free RAM (for DC/OS)
- Git
- A Github account
- A docker hub account - Docker >= 1.10 (see https://docs.docker.com/engine/installation/ for more information)
Note: If you're on OSX/Windows, you can sign up for the new and improved Docker Beta: https://beta.docker.com/

Furthermore to spare the conference WiFi it would be great if you could already install 'DC/OS in Docker'. To do that you first have to download: https://downloads.dcos.io/dcos/EarlyAccess/dcos_generate_config.sh and then just follow the Quick Start at: https://github.com/dcos/dcos-docker If you can't meet any of the requirements above don't worry, we might be able to fix it during the workshop and also we'll form groups anyway so maybe there's someone else with a working setup you can join.

Close
React.js Workshop - Part 1 (Pratik Patel) SOLD OUT D507
Close
Pratik Patel

React.js Workshop - Part 1

(Hands on)

React.js is a view library from Facebook for building performant user-interfaces in JavaScript. In this session, we'll explore React.js and understand why it's a great step forward for building complex UI's that run fast. We'll code up an example web application using React.js and step through the basics of using the library while discussing concepts like the virtual DOM and components.

This is a hands-on workshop, introductory level. 

We'll cover these topics - both in code and in discussion format, and do as many as we can in the time alloted:
- React components
- Lifecycle
- Properties
- State
- Using React-Bootstrap components
- Signaling & Messaging between Component
- Handling Events
- All coding done in ES6 style
- Modern React application structure, setup, and build
- Writing tests
- React Router
- Discussion of Flux architecture
- REST/Network ops within React
- React architecture
- Component composition
- Discussion of Redux and Functional Web Architecture (time permitting!)

Tutorial Requirements:
Please come with a laptop, and if possible, with the software needed pre-installed. 
Installation:

  • Install Node.js 4.2.2 https://nodejs.org/
  • Clone Git repo: https://github.com/prpatel/react-workshop-day1
  • npm install -g webpack webpack-dev-server
  • cd react-workshop-day1; npm install

Running the labs:

  • Each Lab folder contains a starting point and a solutions folder (the solutions folder will NOT work as-is, you must copy over the code manually)
  • cd Lab1/
  • npm start
  • open Chrome to http://localhost:8080/
Close
Migrating PHP extension from PHP 5 to PHP 7 - Part 1 (Julien Pauli) D508
Close
Julien Pauli

Migrating PHP extension from PHP 5 to PHP 7 - Part 1

(Hands on)

If you have already migrated your PHP source code from PHP 5 to PHP 7, you will have noticed that nearly everything works just as-is, with no change. This is not the case of PHP extensions. At the C level, PHP 7 broke the internal API, changes are sometimes big, and an extension written for PHP 5 will have to be patched for PHP 7, whatever it is.

We'll here introduce the changes - new structures, AST compiler, new executor, strings management, GC and refcount changes - and in a workshop, work together on how we could rewrite our extension to make it compile and work for PHP 7.

Do no hesitate to bring your own project to work on it.

Tutorial Requirements:
Linux or MacOS Laptop and some C knowledge and compilation stack.

Close
12:45 - 13:45
Lunch
Close

Lunch

(Overview)

Close
13:45 - 17:00
Get started with Graph Databases and Neo4j (Christophe Willemsen) SOLD OUT D403
Close
Christophe Willemsen

Get started with Graph Databases and Neo4j

(Hands on)

This training will give you a foundational knowledge of graph databases and use cases. You'll learn all the getting-started basics, including data import and creation, basic modeling, and querying. Learn how to use Neo4j's powerful query language, Cypher, and how it can drastically improve your connected data problems.

Best Suited For:
Anyone with an interest in database technology
Developers, Administrators, DevOps engineers, DBAs, Business Analysts and students.

Skills taught:
- An understanding of graph databases
- How to use graph databases
- Introduction to data modeling with Graph databases
- How to get started working with Neo4j
- Build confidence in building a graph enabled application

Prerequisites:
You don’t need any previous experience with Neo4j, NOSQL databases or specific development languages 

Course Outline:
- Introduction to Graphs
- Introduction to Graph based Modeling
- Neo4j and Cypher
- Advanced Queries with Cypher
- Real-world implementation use cases with Neo4j

Tutorial Requirements:
Attendees should have a laptop, other than that everything will be provided by Christophe

 

Close
Choose Extreme continuous delivery - a experiment (Sebastian Schürmann) D404
Close
Sebastian Schürmann

Choose Extreme continuous delivery - a experiment

(Hands on)

Choose just to work on master and not write your tests inside out. Choose not to even use TDD. Choose to deploy, to live, when ever a test is green. Choose a new task for Jenkins, because the need for a butler pushing Zipfiles around has gone. Choose a short definition of done, just one sentence "When it is delivering value". Choose to Pairprogram and to deploy after beer o'clock . Choose whats important next and implement it without having to choose anything to multitask on. 

Choose a tutorial on a modern way to build software that is heavily influenced by Kanban, Scrum and Extreme Programming, but does not need the word agile once to describe it self. (Hint: We favor deploying software over writing new manifestos)

Close
Message oriented architectures with RabbitMQ (Mariusz Gil) SOLD OUT D407
Close
Mariusz Gil

Message oriented architectures with RabbitMQ

(Hands on)

Monoliths are not the best way to build big application. They are heavy for servers, difficult to write, deploy and maintain by developers… In many cases message oriented architectures, where core application services are loosely coupled by message-buses, are working better in design or scalability context. In this workshop, we will take a look at message oriented architecture concepts and deploy RabbitMQ server as a message broker. You will learn how to split your PHP application into separated parts, maybe written in other languages than PHP, and link them together with RabbitMQ exchanges and queues. We will also talk about scaling and making message layer highly-available.

Tutorial Requirements:
Attendees should have Vagrant/VirtualBox installed.
Here is a link to Github repo with some basic setup instructions https://github.com/mariuszgil/training-rabbitmq

Close
Hexagonal BDD - Part 2 (Scato Eggen) D503
Close
Scato Eggen

Hexagonal BDD - Part 2

(Hands on)

Acceptance tests can be slow and brittle, but they don't have to be. At the core of Hexagonal Architecture is the idea that you should be able to drive your application using tests just as easily as through the user interface.
Behaviour-Driven Development views tests as executable specifications. Unit tests contribute to inner quality: the code is easy to change. Acceptance tests contribute to outer quality: the code does something that is useful for the business.

In this tutorial, we will use Behat and PHPSpec to grow an application. We will apply the principles of Hexagonal Architecture and BDD, touching on user stories, modelling by example, ports and adapters, red-green-refactor, and feedback loops.

Tutorial requirements:
Attendees can clone https://github.com/scato/hexagonal-bdd.git and follow the instructions in README.md

Close
Containerizing a production environment - Part 2 (Lucas van Lierop) SOLD OUT D504
Close
Lucas van Lierop

Containerizing a production environment - Part 2

(Hands on)

You all heard about Docker, and you have probably heard of Docker Compose, Mesos and Marathon.

You have tried to put into containerize largers apps and you ended up with large and hard to maintain containers.

You are convinced that OS-level virtualization (aka containerization) is cool, but now want a shortcut way to the deployment strategy, so that this new architecture helps you, not impedes your conventional processes. If that sounds familiar, the this session is definitely for you.

In this tutorial, we will take a hands on approach to (automatically) build small containers, store them in a repository and deploy them to a production environment. We will start small but end up with an application that consists of several scalable microservices that can communicate with each other.

Not only will you learn how to containerize your PHP apps efficiently, as a bonus, we will also look into the whole test and deployment cycle. For this we will rely on GitHub, TravisCI, Docker Hub and a Mesos cluster running Marathon, Consul and HAProxy.

The end result of this tutorial session will be a fully deployed (and easily re-deployable) load-balanced multi-node application, that is ready for modern high load.

Tutorial Requirements:
If you want to fully participate in the 'Containerizing a production environment' workshop you'll need: 
- 4GB free RAM (for DC/OS)
- Git
- A Github account
- A docker hub account - Docker >= 1.10 (see https://docs.docker.com/engine/installation/ for more information)
Note: If you're on OSX/Windows, you can sign up for the new and improved Docker Beta: https://beta.docker.com/

Furthermore to spare the conference WiFi it would be great if you could already install 'DC/OS in Docker'. To do that you first have to download: https://downloads.dcos.io/dcos/EarlyAccess/dcos_generate_config.sh and then just follow the Quick Start at: https://github.com/dcos/dcos-docker If you can't meet any of the requirements above don't worry, we might be able to fix it during the workshop and also we'll form groups anyway so maybe there's someone else with a working setup you can join.

Close
React.js Workshop - Part 2 (Pratik Patel) SOLD OUT D507
Close
Pratik Patel

React.js Workshop - Part 2

(Hands on)

React.js is a view library from Facebook for building performant user-interfaces in JavaScript. In this session, we'll explore React.js and understand why it's a great step forward for building complex UI's that run fast. We'll code up an example web application using React.js and step through the basics of using the library while discussing concepts like the virtual DOM and components.

This is a hands-on workshop, introductory level. 

We'll cover these topics - both in code and in discussion format, and do as many as we can in the time alloted:
- React components
- Lifecycle
- Properties
- State
- Using React-Bootstrap components
- Signaling & Messaging between Component
- Handling Events
- All coding done in ES6 style
- Modern React application structure, setup, and build
- Writing tests
- React Router
- Discussion of Flux architecture
- REST/Network ops within React
- React architecture
- Component composition
- Discussion of Redux and Functional Web Architecture (time permitting!)

Tutorial Requirements:
Please come with a laptop, and if possible, with the software needed pre-installed. 
Installation:

  • Install Node.js 4.2.2 https://nodejs.org/
  • Clone Git repo: https://github.com/prpatel/react-workshop-day1
  • npm install -g webpack webpack-dev-server
  • cd react-workshop-day1; npm install

Running the labs:

  • Each Lab folder contains a starting point and a solutions folder (the solutions folder will NOT work as-is, you must copy over the code manually)
  • cd Lab1/
  • npm start
  • open Chrome to http://localhost:8080/
Close
Migrating PHP extension from PHP 5 to PHP 7 - Part 2 (Julien Pauli) D508
Close
Julien Pauli

Migrating PHP extension from PHP 5 to PHP 7 - Part 2

(Hands on)

If you have already migrated your PHP source code from PHP 5 to PHP 7, you will have noticed that nearly everything works just as-is, with no change. This is not the case of PHP extensions. At the C level, PHP 7 broke the internal API, changes are sometimes big, and an extension written for PHP 5 will have to be patched for PHP 7, whatever it is.

We'll here introduce the changes - new structures, AST compiler, new executor, strings management, GC and refcount changes - and in a workshop, work together on how we could rewrite our extension to make it compile and work for PHP 7.

Do no hesitate to bring your own project to work on it.

Tutorial Requirements:
Linux or MacOS Laptop and some C knowledge and compilation stack.

Close
18:30 - 22:30
DPC CodeNight
Close

DPC CodeNight

(Hands on)

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

Opening

(Overview)

Close
09:40 - 10:30
Keynote (Greg Young) Forum
Close
Greg Young

Keynote

(Overview)

Close
10:45 - 11:30
JSON Web Tokens: To authentication and beyond (Luis Cobucci) E002
Close
Luis Cobucci

JSON Web Tokens: To authentication and beyond

(Overview)

Uncon session

Close
Mirror, mirror on the wall: Building a new PHP reflection library (James Titcumb) E102
Close
James Titcumb

Mirror, mirror on the wall: Building a new PHP reflection library

(Overview)

Have you ever used PHP's built in reflection, only to find you can't do quite what you wanted? What about finding types for parameters or properties? What about reflecting on classes that aren't loaded, so that you can modify them directly?

Better Reflection is an awesome new library that uses magical time-warp techniques* (*actual magic or time-warp not guaranteed) to improve on PHP's built-in reflection by providing additional functionality. In this talk we'll cover what reflection is all about, explore the cool features of Better Reflection already implemented, the difficulties we faced actually writing the thing, and how you can use Better Reflection in your projects to maximise your reflection-fu.

Close
Debugging: past, present and future (Derick Rethans) E103
Close
Derick Rethans

Debugging: past, present and future

(Overview)

In this talk I will go over all the past, present and future debugging techniques. The talk start by giving an overview on PHP's (ancient) standard features for debugging, additional (userland) libraries and functionality in frameworks.

After the introductions we move on to the meatier stuff and I will talk about live-action debuggers, such as Xdebug and Zend's debugger. They both provide information while a script is being executed, in combination with IDEs.

In the future, there is PHP 5.6's phpdbg which allows for some debugging and other analysis. I am also unveiling a project that allows you to "step back" while debugging as well; introspect what your script's or application's exact execution paths was; and trace variable modifications.

Close
Build your own Recommendation Engine with Neo4j and Reco4PHP (Christophe Willemsen) E104
Close
Christophe Willemsen

Build your own Recommendation Engine with Neo4j and Reco4PHP

(Overview)

Graph Databases are naturally well-suited for building recommendation engines. In this talk, Christophe will share his experience building a number of production-ready recommendation engines using Neo4j and introduce the open-source GraphAware Reco4PHP Library, which enables PHP developers to rapidly build their own recommender systems.

This presentation starts by a brief explanation of why graphs are a suitable data model for building recommender systems. A summary of typical recommendation engine requirements follows, including the business and technical challenges these requirements introduce. Afterwards, the talk dives into possible solutions of these challenges, both from business and architectural/design perspectives, and introduces the GraphAware Reco4PHP Library.

What follows is a demonstration of how this open-source recommendation engine skeleton solves many of the issues and how it handles the "plumbing", so that developers can focus on expressing the business logic specific to their domain.

A majority of examples in this talk are drawn from real-world use cases and the speaker's personal experience building recommendation engines. Attendees should have a very basic understanding of graph theory. Prior experience with Neo4j and the Cypher query language is a plus, but not necessary.

Attendees will learn: 

* what is a recommendation engine and what it is good for
* why graphs are a good fit for building one 
* what business and technical challenges one faces building a recommender 
* what possible solutions there are for these challenges 
* how to build a high-performance graph-based recommendation engine in minutes 
* real-world case studies

Close
A Functional Guide to Cat Herding with PHP Generators (Mark Baker) E107
Close
Mark Baker

A Functional Guide to Cat Herding with PHP Generators

(Overview)

When working with arrays in PHP, three of the most useful functions available to us are arraymap(), arrayfilter() and array_reduce(), which allow us to walk an array and manipulate the value of array elements, select a subset of values from an array, or reduce an array to a single value; all using a callback function to determine exactly what logic should be applied. The use of the callback makes them extremely flexible, and these functions can be particularly powerful, especially when combined (or chained) together.

However, these functions only work with standard PHP arrays; so if we are using Generators as a data source instead of an array, then we can't take advantage of the functionality that they provide. Fortunately, it's very easy to emulate that functionality and apply it to Generators (and also to other Traversable objects like SPL Iterators), giving us access to all of the flexibility and power that mapping, filtering and reducing can offer, and with all the benefits that Generators can offer our code.

So how do we go about implementing filter(), map() and reduce() functions for our Generators? How do we use those functions in our applications? I'll be answering those two questions, and explaining how I keep track of my cats armed only with a GPS Tracker and, PHP Generators, and filter/map/reduce.

Close
Restructuring classes and behaviour to remove inheritance with composition (Wouter de Wild) E108
Close
Wouter de Wild

Restructuring classes and behaviour to remove inheritance with composition

(Overview)

A user is a base user and an admin is also a base user. We've all seen this scenario once or twice during our careers.
And then another programmer comes around and decides to make the base user extend of something else and soon the structure of the application becomes more clouded. There has to be a simpler solution to not duplicate code and share behaviour over all of the application… Let's talk about this with lots of Star Wars references.

Co-Host: Jasper Stafleu

Close
11:45 - 12:30
Step into debugging (Gary Hockin) E002
Close
Gary Hockin

Step into debugging

(Overview)

Uncon session

Close
The secrets of Cryptography (Chris Riley) E102
Close
Chris Riley

The secrets of Cryptography

(Overview)

Alice and Bob have secrets they want to talk about without Eve being able to listen in. Worse yet, the mischievous Mallory delights in changing messages sent between parties. In such a hostile environment how can Alice talk to Bob without their messages being overheard and how can she be sure that it was Bob that sent the message in the first place?

This talk will take a brief look at historic codes and ciphers before taking a look at modern day Cryptography. If you want to be able to know the difference between a block cipher and a stream cipher or get a glimpse into the mathematics behind public key Cryptography this talk is for you.

Close
Solving Cross-Cutting Concerns in PHP (Alexander Lisachenko) E103
Close
Alexander Lisachenko

Solving Cross-Cutting Concerns in PHP

(Overview)

Everybody likes Object-Oriented Programming and wants to keep the source code clean and clear, but there are cross-cutting concerns that can not be solved easily such as logging, caching, authorization, transaction control and more. Are there any ways to solve them? Yes. One of them is Aspect-Oriented Programming.

This is a talk about Aspect-Oriented Paradigm with presentation of Go! AOP framework, that was inspired by Lithium, Java Spring and famous AspectJ frameworks. And for now AOP is possible in PHP.

I will show some new techniques such as inter-type declarations (dynamic traits for classes, dynamic interfaces, adapters), such as method interception, AOP caching, logging and much more. Are you tired of implementing of logging or caching in all methods? Do you want to extract this code to the one place? Join me and learn the elegant ways of solving cross-cutting concerns in PHP.

Close
Identify All the Things With UUIDs! (Ben Ramsey) E104
Close
Ben Ramsey

Identify All the Things With UUIDs!

(Overview)

Universally unique identifiers (UUIDs) are a fun and exciting way to identify things. We can issue UUIDs forever and never run out; they're practically unique! Join this whirlwind adventure in search of the perfect identifier to find out why UUIDs might be good for your projects. Along the way, you'll learn what is a UUID, the various types of UUIDs, pros and cons of using UUIDs, and how to use the ramsey/uuid library. Advanced and little-known features of ramsey/uuid will be covered.

Close
Microservices with Thrift, or why I stopped worrying about REST (David Soria Parra) E107
Close
David Soria Parra

Microservices with Thrift, or why I stopped worrying about REST

(Overview)

An increasing amount of modern applications are hybrids of different components and microservices. To communicate between services, serialization formats and remote procedure calls interfaces have become more important.  Originally developed by Facebook, Apache Thrift is a versioned, fast binary protocol for serialization and RPC. The talk will introduce Thrift, show how to build PHP microservices using Thrift and discuss advantages of Thrift based services over and typical REST-JSON services.

Close
React.js: Super-fast Single Page Web Applications (Pratik Patel) E108
Close
Pratik Patel

React.js: Super-fast Single Page Web Applications

(Overview)

React.js is a view library from Facebook for building performant user-interfaces in JavaScript. In this session, we'll explore React.js and understand why it's a great step forward for building complex UI's that run fast. We'll code up an example web application using React.js and step through the basics of using the library while discussing concepts like the virtual DOM and components.

In this session, we'll explore React.js and understand why it's a great step forward for building complex UI's that run fast. We'll code up an example web application using React.js and step through the basics of using the library while discussing concepts like the shadow DOM and components.

Close
12:30 - 13:30
Lunch
Close

Lunch

(Overview)

Close
13:30 - 14:15
Growing a development team (Jeroen vd Gulk) E002
Close
Jeroen vd Gulk

Growing a development team

(Overview)

Uncon session

Close
Elasticsearch, the story so far (Frank Koornstra/ Jordy Moos) E102
Close
Frank Koornstra/ Jordy Moos

Elasticsearch, the story so far

(Overview)

Elasticsearch, all the cool kids talks about it, tutorials for beginners aplenty but what about beyond the first install and putting your first document in? This advanced talk will give you an insight on the steps that come next: a dive into analysers, performance for percolation and the gold nuggets for your cluster infrastructure. This is our experience with Elasticsearch in a 2.4 billion (yes, that would be nine zeroes indeed) page view environment with over 22 million documents. We're not the experts but we can tell you a hell of a lot about our mistakes. Basic knowledge of Elasticsearch is assumed.

Co-Host: Jordy Moos

Close
Machine Learning for the rescue (Mariusz Gil) E103
Close
Mariusz Gil

Machine Learning for the rescue

(Overview)

Gathering the data is not a problem today. The bigger challenge is to understand these informations and draw some conclusions. Fortunately, we can use some techniques like machine learning to „teach” computer how to learn from our data. Fast artificial neural networks, random forests, SVMs, classification, clustering - just to name a few concepts ready to use… We will apply all these solutions to PHP application to deliver automatic insights/predictions and create a real business value for a client. By the end of this session you will be familiar with Machine Learning ideas and prepared to solve unsolvable problems in PHP.

Close
From source to code: an introduction into compilers, interpreters and JIT (Joshua Thijssen) E104
Close
Joshua Thijssen

From source to code: an introduction into compilers, interpreters and JIT

(Overview)

With the release of HHVM and PHP7 you hear lots of people talking about AST, JIT, static analysis etcetera. But what does this all mean? Will it make our PHP code run faster and if so, how?

During this talk, I will give an introduction in how computer languages in general will convert from human readable source code like PHP code to instructions that a computer can actually execute. 

We will talk about the steps PHP has taken (and will take in the future) and give you insights in what it all means. And it all might give you even some idea's on writing your own language as well.

Close
Architectural Anti-patterns (Jakub Gadkowski) E107
Close
Jakub Gadkowski

Architectural Anti-patterns

(Overview)

Once we know all the architecture patterns we can start building great software immediately, right?
(Buzzing signal) Wrong! If that was the case, then why there is so many failures and hair pulling once the system is build? That is because we tend to fall down in the black hole of anti-patterns.

Have you ever noticed that the project with too many architects trying to add their own favourite pattern changes into super complicated mess? And the project with an architect that sees all technological options equally viable never ever starts?

All those situations have been categorised, named and shamed and we will present them to you on a gold plated tray.

In this talk you will be introduced to the most popular software design anti-patterns including "Stove-pipe architecture", "Vendor Lock-in" and many more. We will show you how to recognise them and what can be done to fix the situation when it happens. This knowledge should help you spot them early on and avoid long lasting software disasters.

Co-Host: Dimitrios Psarrou

Close
A year of continuous delivery (Marc Veldman) E108
Close
Marc Veldman

A year of continuous delivery

(Overview)

Deploying your software to live can often be a routine but still stressful process with uncertainty about whether the system will work as expected or the correctness of the deployment procedure.

In this talk, we will look at the experiences and practices of a team that has used Continuous Integration to set up a new system to replace an unwieldy legacy system. 

The talk will cover a short introduction to the new system, the build pipeline, a close look at one build step and personal experiences from over a year of working with a CI system.

Close
14:30 - 15:15
Elastic Search Deployment with Azure (Michelangelo van Dam) E002
Close
Michelangelo van Dam

Elastic Search Deployment with Azure

(Overview)

Uncon session

Close
Breaking Boundaries with FastCGI (Andrew Carter) E102
Close
Andrew Carter

Breaking Boundaries with FastCGI

(Overview)

Efficient and performant applications are fantastic; they keep server load, costs and response times low. We can make our web applications more efficient by removing the repetitive bootstrapping process from the request-response cycle.
"How?" I hear you ask!
By using FastCGI directly, we can keep our applications alive between requests and vastly improve their performance. The best news is that this process can be done very easily when using PSR-7 or a framework such as Symfony.

Let us not get too excited, however! When using PHP in this way we have to be very careful about the design and configuration of our application! This talk will explain how to use FastCGI with our applications safely, providing an overview of the process and highlighting the danger areas that we must be cautious of.

Close
A Talk About Naming Things Talk (Shawn McCool) E103
Close
Shawn McCool

A Talk About Naming Things Talk

(Overview)

Culture, it's a thing. PHP Culture has a huge impact on how PHP developers think about and solve problems. 

In this talk, I discuss a number of cultural artifacts that could use some reexamination. We cover pattern naming, interfaces, exceptions, code organization and cohesion, and more.

Close
The Road to Technical Team Lead (Ben Andersen - Waine) E104
Close
Ben Andersen - Waine

The Road to Technical Team Lead

(Overview)

You’re a Senior Developer, providing value through producing great code, planning features and by mentoring junior team members. You may be considering how to progress your career - if you want to stay technical rather than move into management then the role of Technical Team Lead is worth considering.

The technical team lead is responsible for the technical leadership of one or more teams. Typical responsibilities include: 
- Coding: importantly, Technical Team Leads still spend a large portion of their time “in the code”
- High level planning of product architecture and features
- Making or adjudicating technical decisions that affect the whole project or team
- Taking care of your team (socially, managing growth and through learning and development)

This talk covers what a day in the life of a Tech Lead is like, which skills you should develop and which opportunities within your business to pursue to help you reach your goals. I’ll use examples from my own experience and that of fellow leads to help you make the progression to the Lead role.

Close
Extending without pulling a muscle (Sara Golemon) E107
Close
Sara Golemon

Extending without pulling a muscle

(Overview)

Language runtimes do their best to meet all your development needs, but sometimes there’s some random C library you need access to from a higher level language, and it’s just not there. Learning PHP’s zvals and HashTables, and its score of macros and pointers can be intimidating and off-putting. Sara will show that there’s a better way: HHVM extensions require little more experience than a firm knowledge of PHP, and a willingness to break things. By the end of this presentation, we’ll have live-coded a real-world extension wrapping a real-world library, and you’ll be able to as well.

Close
Play PHP Like a Puzzle with Puli (Bernhard Schussek) E108
Close
Bernhard Schussek

Play PHP Like a Puzzle with Puli

(Overview)

PHP development used to involve lots of handcrafted code. Today it's more like playing a puzzle: Find the pieces that you need, put them together and voilà.

This game is about Composer: Do you know the most powerful puzzle pieces? But there's more. With PSR-7, Puli and standardized DI configuration, puzzlers have a new ace up their sleeves.

Close
15:15 - 15:45
Coffee & Tea Break
Close

Coffee & Tea Break

(Overview)

Close
15:45 - 16:30
Generation REST API's in SF (Arjan Kleene) E002
Close
Arjan Kleene

Generation REST API's in SF

(Overview)

Uncon session

Close
Live broadcasting with PHP (Martin de Keijzer ) E002
Close
Martin de Keijzer

Live broadcasting with PHP

(Overview)

Uncon session

Close
Integrating Bounded Contexts (Carlos Buenosvinos) E102
Close
Carlos Buenosvinos

Integrating Bounded Contexts

(Overview)

The main idea is to see how two applications written in Silex and Symfony can interact with each other in Sync and Async ways trying to show how to integrate different Bounded Contexts.
RabbitMQ, Domain Events, REST, etc.

From the book: "On each enterprise application there are always several areas on which the company operates. Areas such as *billing*, *inventory*, *shipping management*, *catalog* and so on are common examples of those areas. The easiest way to deal with all this concerns is to put them all inside the same *monolithic* system. You might wonder, does it have to be that way? What if the friction between teams working on the common areas could be reduced by splitting that big monolithic application into smaller and independent chunks? We'll explore how to do this. Get prepared for some insights and heuristics around **strategical design**."

Close
Extremely defensive PHP (Marco Pivetta) E103
Close
Marco Pivetta

Extremely defensive PHP

(Overview)

Resistant, highly testable, safe and maintainable code: or not?
There are a thousand ways to break your code, and a lot of ways to prevent that from happening.
Let's explore defensive programming and learn how to protect our code from invalid usage.

Close
Frontin' like a Backer (Frank de Jonge) E104
Close
Frank de Jonge

Frontin' like a Backer

(Overview)

As back-end developers, our skill-set is pretty much useless in the front-end... WRONG! Techniques like unidirectional data flow and declarative UI's are becoming increasingly popular. Let's see how there techniques relate to the day to day live of a back-end developer. Let's see how back-end patterns (you're already familiar with) map to the front-end, to create applications that are easy to reason about.

Close
Programming in Hack (Alejandro Marcu) E107
Close
Alejandro Marcu

Programming in Hack

(Overview)

This talk will present the features that Hack introduces, such as type annotations, generics, collections, lambdas, nullable types, etc.

I'll also talk about the performance of HHVM and its history.

Finally, I'll explain why sometimes you need to generate code and how to do it, using the Hack Codegen framework that I build when I was on Facebook and is now Open Source (https://github.com/facebook/hack-codegen)

Close
Crafting beautiful software (Jorn Oomen) E108
Close
Jorn Oomen

Crafting beautiful software

(Overview)

All projects start with a lot of enthusiasm. As many projects grow the technical debt gets bigger and the enthusiasm gets less. Almost any developer can develop a great project, but the key is maintaining an ever evolving application with minimal technical debt without loosing enthusiasm.

During this talk you will be taken on the journey of application design. The starting point is an application that looks fine but contains lots of potential pitfalls. We will address the problems and solve them with beautiful design. We end up with testable, nicely separated software with a clear intention.

Close
16:45 - 17:30
The pro's and cons of highly sensitive people in your organisation (Christiaan Nieuwlaat) E002
Close
Christiaan Nieuwlaat

The pro's and cons of highly sensitive people in your organisation

(Overview)

Uncon session

Close
Deploying PHP 7 (Rasmus Lerdorf) E102
Close
Rasmus Lerdorf

Deploying PHP 7

(Overview)

PHP 7 is here and it brings drastic performance improvements along with new features. Learn how to migrate a large codebase and identify potential BC breaks and how to correctly deploy and tune PHP 7 for optimal performance. Topics covered will include static analysis, opcache tuning, and os-level tuning such as huge pages, NUMA among others.

Close
Extreme Programming 2016 Edition (Sebastian Schürmann) E103
Close
Sebastian Schürmann

Extreme Programming 2016 Edition

(Overview)

After about 10 years into Extreme Programming, even more since my return as a "developer" rather than a "coach" or team lead role, there is a base set of practices I kept and a lot of things I don't really care about anymore and others, that got so intrinsic that they are "no brainers" right now. 

On the other hand, there is the tendency to label things that are out there for a long time, re-label it according to the latest "industry" trends, write a book about it and become famous over the repetition what others already have written. 

Apart from that hype cycle, what is good for me, what isn't and why? Ill Answer: Why  branches are nothing I do often, I stopped writing so many unit tests, Why I do not configure CI servers,  I am on a call for my software  anyway,  Why I just work on one thing at a time, even with a partner, I anyway own your backlog and its priorities, My definition of done is just ONE line that everyone agrees to! Integration tests are a awesome thing and not a scam at all! 

Its neither the 90ies, nor was the passing of the Millenium recently. Lets develop in code and products in a way that feels like 2016 scifi, rather than a blast from the past.

This is the agile talk that does not mention the word agile. Hype free and development proven, no meta BS. The software development as we want it, and not as people selling certificates want it.

Close
Deploy your application in a box (Willem-Jan Zijderveld) E104
Close
Willem-Jan Zijderveld

Deploy your application in a box

(Overview)

People say that PHP applications are so easy to deploy. They make it sound like nothing ever goes wrong there. But we know better, everybody has seen broken applications because of a deployment.

In this talk I want to show you some of the issues you might face with deployment and a possible approach to get a more solid deployment strategy. We will be using deployable artifacts to achieve this.

Close
Beyond Testing (Michael Bodnarchuk) E107
Close
Michael Bodnarchuk

Beyond Testing

(Overview)

Yes, you know, you should have written that test! But what If you already do writing tests, but you don't see the result of your actions. Tests run slow, they are fragile, hard to read and maintain. Fixing a test is harder than disabling it.

Don't blame yourself. It's not about you, it's about some points you should have taken into account while your testing codebase grew. In this talk I will tell you about:
* Developers Team vs QA Team - who is to write a test?
* What are best practices for tests (with code samples)
* Do we need acceptance tests, and what framework to choose: Behat, Codeception, Selenium, PhantomJS
* How data should be managed? (Dumps, Fixtures, FactoryMuffin)
* How developers can enhance acceptance testing (QAs will thank you)
* How to test APIs (Codeception, php-vcr)
* Creating test environments with Docker containers
* Setting up Parallel Testing with Docker

Close
Hacking your way to better security (Colin O'Dell) E108
Close
Colin O'Dell

Hacking your way to better security

(Overview)

The goal of this talk is to educate developers on common security vulnerabilities, how they are exploited, and how to protect against them. We'll explore several of the OWASP Top 10 attack vectors like SQL injection, XSS, CSRF, session hijacking, and insecure direct object references. Each topic will be approached from the perspective of an attacker to see how these vulnerabilities are detected and exploited using several realistic examples. Once we've established an understanding of how these attacks work, we'll look at concrete steps you can take to secure web applications against such vulnerabilities. The knowledge gained from this talk can also be used for participating in "Capture the Flag" security competitions.

Close
20:30 - 23:00
Conference Social
Close

Conference Social

(Overview)

Close
Conference day 2
09:45 - 10:30 Conference day 2
Mob programming (John LeDrew) E002
Close
John LeDrew

Mob programming

(Overview)

Uncon session

Close
CQRS and Domain Events for integration (Giorgio Sironi) E102
Close
Giorgio Sironi

CQRS and Domain Events for integration

(Overview)

Production databases suffer from a multiple personality disorder: they have to both satisfy end users and internal reporting needs. In the case of Onebip, a payment system, they have to generate money by allowing users to buy digital goods and at the same time provide precise analytics such as gross transaction values for the day.

Discover how Command-Query Responsibility Segregation allowed to separate billing from reporting using different Bounded Contexts, applications and databases all tied together with Domain Events. Loose coupling allowed different performance and availability requirements for the billing and reporting subsystems, without resorting to ETL or large data batches. Moreover, it enabled scaling the number of people in the team without continuously generating conflicts over a single data model.

Close
Driving Design through Examples (Ciaran McNulty) E103
Close
Ciaran McNulty

Driving Design through Examples

(Overview)

Modelling by Example is a set of practices that combine BDD (Behaviour Driven Development) and DDD (Domain Driven Design) techniques to creat a workflow that directly drives code from a starting point of user requirements. We will see how a simple feature can be defined via conversation with stakeholders, captured as automatable requirements, and expressed directly in the object model using tools such as Behat and PhpSpec

Close
Being functional in PHP (David de Boer) E104
Close
David de Boer

Being functional in PHP

(Overview)

Functional programming, though far from new, has gained much traction recently. Functional programming characteristics have started to appear in the PHP world, too. Microframeworks including Silex and Slim, middleware architectures (Stack) and even standards (PSR-7) rely on concepts such as lambdas, referential transparency and immutability, all of which come from functional programming.

I’ll give you a crash course in Erlang, a pragmatic functional language to make you feel familiar with the functional paradigm. By comparing code samples between Erlang and PHP, you’ll find out how and why you should employ functional programming in your PHP applications. You’ll see that functional programming is nothing to be scared of. On the contrary, understanding its concepts broadens your programming horizon and provides you with valuable solutions to your problems.

Close
53 Minutes or Less - Architecting For Failure In The Cloud (Ben Andersen - Waine) E107
Close
Ben Andersen - Waine

53 Minutes or Less - Architecting For Failure In The Cloud

(Overview)

An increasing amount of web and business applications are hosted on the cloud. It’s easy: a few clicks, api calls or a script written with your favourite IaaS provider and your application is launched and available to your consumers. 
That’s the problem, it’s deceptively easy to make an application available. It’s much harder to make an application reliably available. The much touted “four nines” - 99.99% availability means your application must be consistently available for all but 53 minutes a year. 

Using AWS as an example this talk covers the choices you must make when hosting an application from the network up. Choices around Regions, Availability Zones, Service Discovery, Deployment and Maintenance all have a major impact on up time. 

The practice of “Chaos Engineering” made famous by Netflix is demonstrated as a way to validate the choices you’ve made and help prepare you for the worst.

Close
Extracting wisdom from stupidity (Ramon de la Fuente) E108
Close
Ramon de la Fuente

Extracting wisdom from stupidity

(Overview)

This talk is about 'thinking'. Most of the time we take the process for granted, but so much of our daily lives depends on effective use of this most basic of abilities.

So how does this pertain to extracting wisdom from stupidity?

I hope to show you not *what*, but *how* I learned by being stupid - and that the programmer's love of logic can sometimes be as much an asset as an obstacle.

Close
10:45 - 11:30
The treacherous road to microservices (Niels van Esch) E002
Close
Niels van Esch

The treacherous road to microservices

(Overview)

Uncon session

Close
From docter to coder: A whole new world? (Aisha Sie) E002
Close
Aisha Sie

From docter to coder: A whole new world?

(Overview)

Uncon session

Close
Going micro with SF micro kernel (Jakub Zalas) E002
Close
Jakub Zalas

Going micro with SF micro kernel

(Overview)

Uncon session

Close
You're just my type (Sara Golemon) E102
Close
Sara Golemon

You're just my type

(Overview)

A look into strict and coercive typing, how PHP and Hack differ in their approaches, and why you want to make heavy use of explicit types, no matter what platform you choose.

We'll also dig into some new and exciting features in current runtime releases which will make your job as a developer easier, more enjoyable, and lead to a lot fewer panicked calls at three o'clock in the morning.

Close
Getting started with ReactPHP (Cees-Jan Kiewiet) E103
Close
Cees-Jan Kiewiet

Getting started with ReactPHP

(Overview)

ReactPHP brings asynchronous I/O to PHP. Learn how to ReactPHP works by writing a simple toy app with it. I’ll be taking you from the very beginnings of the app and explain step by step how everything works both API wise and internally. Up and until a live interactive demo at the end.

Close
mutation Testing in PHP with Humbug (Mark Redeman) E104
Close
Mark Redeman

mutation Testing in PHP with Humbug

(Overview)

Mutation testing is a technique that measures the quality of a test suite and helps you write more robust code. This is done by making small changes (mutations) to code under the assumption that each mutation introduces a bug. By automating this process we can find bugs in our code that can't be detected by traditional code coverage tools.

This talk introduces the concept of mutation testing. First we show that using code coverage as a metric of quality of a test suite is flawed. Next we show that by using mutation testing we can find bugs in code which has 100% code coverage. An overview is given on how a mutation testing tool works and some of its disadvantages are discussed. Most of these disadvantages however, can be solved by writing well designed software. Lastly we will take a look at Humbug, a mutation testing tool for PHP and we conclude with a few examples of how a mutation testing tool can help you improve your software and how it can fit in your current workflow.

Close
Machine Learning - Support Vector Machines (Sjoerd Maessen) E107
Close
Sjoerd Maessen

Machine Learning - Support Vector Machines

(Overview)

A lot of people have heard the buzz word "machine learning", but what is it exactly and how can we use it as a PHP developer. I will not go into existing SAAS solutions like prediction.io but would like to explain the theory behind machine learning and show coding examples about how we can use this technology as a PHP developer. In my spare time I use machine learning to predict the stock market but there are many more applications to use this technology. What about using it to detect if a given sample text is english or dutch or wether an email is spam or not or lets ask ourselves the question if we would have survived a trip on the titanic.

This talk will not go into or use ANN like the tic tac toe talk of Eduardo Gulias Davis during DPC 2015. The talk will use SVM which is a totally different approach and technique used for classification of data. I will show a step by step approach to build our own SVM program to distinguish English from Dutch text in an automated way using SVM.

Close
Debugging Effectively (Colin O'Dell) E108
Close
Colin O'Dell

Debugging Effectively

(Overview)

Software bugs are inevitable; some are especially difficult to track down, causing you to waste countless hours before throwing your hands up in defeat. It doesn't have to be this way! The mental fatigue and wasted time can be avoided by using strategies like identifying the most-appropriate tool, taking a logical & objective approach, challenging assumptions, listening to variables, isolating the code path, and reinforcing code with automated tests. Attendees will learn how to combine these techniques with the right mindset and attitude in order to debug their code quickly and effectively.

Close
11:45 - 12:30
Advanced building blocks for simple applications (Jildert Miedema) E002
Close
Jildert Miedema

Advanced building blocks for simple applications

(Overview)

Uncon session

Close
Event Sourcing: the good, the bad and the complicated (Marco Pivetta) E102
Close
Marco Pivetta

Event Sourcing: the good, the bad and the complicated

(Overview)

Event Sourcing can look like an attractive solution for any of your applications, but does it actually pay off?

What if it is all just buzzwords and no gain?

We’ll look at how we implemented event sourcing in our own app, code-reviews.io:
 * what made us fast
 * what made us super slow
 * what made us cry

This talk will give you a good idea of what kind of challenges you will encounter when approaching event sourcing for the first time.

Co-Host: Jefersson Nathan

Close
Diving Deep Into JavaScript Functions (Colin DeCarlo) E103
Close
Colin DeCarlo

Diving Deep Into JavaScript Functions

(Overview)

Functions being first-class citizens in JavaScript offers developers a tremendous amount power and flexibility. However, what good is all this power if you don't know how to harness it?

This talk will provide a thorough examination of JavaScript functions. Topics that will be covered in this talk are:
* Functions are objects
* Execution Context and the Scope Chain
* Closures
* Modifying Context
* The Various Forms of Functions

Attendees will leave this talk understanding the power of JavaScript functions and the knowledge to apply new techniques that will make their JavaScript cleaner, leaner and more maintainable.

Close
Things I was unprepared for as a lead developer (Pascal de Vink) E104
Close
Pascal de Vink

Things I was unprepared for as a lead developer

(Overview)

This is not a story of how I survived a big technology company or startup. This is not the story of a young junior developer working his way through the ranks to become the greatest leader of all. 

No. Instead, this is the story of how I became a lead developer and all the things I did wrong. It's about delegating, culture building, mentoring, planning, meetings (oh dreadful meetings), upper management and all the other stuff that a leader has to go through. It's also about all the fun I had and the things I learned. Next to that, I'm going to hand out some tips that can prepare you for the job a little better. And hopefully, it will inspire you to be the greatest leader of all.

Close
Being effective with legacy projects (Konstantin Kudryashov) E107
Close
Konstantin Kudryashov

Being effective with legacy projects

(Overview)

Greenfield projects are bunch of fun – you can apply craziest cutting edge architecture decisions and use best practices on the market. But what if you stuck in a Legacy project? Does it mean that you need to descend into darkness of despair on every required change? Does it mean that you can’t effectively use Agile or any modern design practices or tools?

This talk will show you how to be successful even with the oldest legacy projects out there through the focus on value and measurement. It will present couple of ways to approach software rewrites and maintain sanity when working with haphazardly put together code.

Close
The IoC Hydra (Kacper Gunia) E108
Close
Kacper Gunia

The IoC Hydra

(Overview)

Dependency Injection seems to be the most popular way of Inverting Control flow in PHP applications. Lets stop for a bit and ask a question - is it the only and the best answer for all the problems? What about almighty Events or not so popular in PHP world Aspect Oriented Programming? How does frameworks fit in there?

In this talk we will have a look into pros and cons of different ways in which we can Invert the Control of our applications. We will investigate how frameworks like Symfony help us achieve that goal and what makes framework a framework. It turns out that some of the common practices are not the best choices and during the talk speaker will highlight why is that a case.

Close
12:30 - 13:30
Lunch
Close

Lunch

(Overview)

Close
13:30 - 14:15
Automation deployment with Accompli (Niels Nijens) E002
Close
Niels Nijens

Automation deployment with Accompli

(Overview)

Uncon session

Close
Could you pass me the holy grail? (Dennis de Greef) E002
Close
Dennis de Greef

Could you pass me the holy grail?

(Overview)

Uncon session

Close
Introducing Eager Design (Marcello Duarte) E102
Close
Marcello Duarte

Introducing Eager Design

(Overview)

What happens when the very frameworks, tools and patterns we cherish take the reins and forces us to focus on all the boilerplate scaffolding things, distracting us from really solving the real problems? Sometimes the outside-in approach can lead us to code that is more complex and coupled than it has to be.

Eager Design offers a fresh approach. Instead of being led by the delivery mechanisms, frameworks and patterns, we focus on the problems worth solving. Inspired by functional programming and Domain Driven Design, the principles of Eager Design helps us isolate and solve complex problems in a more focused and decouple manner.

Close
Lightning fast tests (Jakub Zalas) E103
Close
Jakub Zalas

Lightning fast tests

(Overview)

One of the benefits of having an automated test suite is the feedback given when code is being changed. As the project grows, the test suite becomes slower and slower every day, until it’s so slow it stops being useful. Tests are disabled, skipped and finally removed.

Huge part of the problem lies in getting the testing pyramid wrong and putting to much effort into wrong type of testing.

Learn how to structure your project to benefit from lightning fast tests. Apply the right amount of testing on appropriate levels, and run your tests in seconds, not hours.

Close
Microservices: Packs small, plays BIG! (Stephan Hochdörfer) E104
Close
Stephan Hochdörfer

Microservices: Packs small, plays BIG!

(Overview)

Microservices based architectures look very promising. But what exactly are microservices? Is it just SOA as it was intended to be or maybe something completely different? With this session I`d like to discuss the benefits and trade-offs of an microservices based architecture and give you some insights on why it can make sense to create simple, isolated and collaborating services.

Close
Unglue all the things! (Beau Simensen) E107
Close
Beau Simensen

Unglue all the things!

(Overview)

Bundles. Packages. Modules. Plugins. So much code is locked up in framework-specific packages. Integration packages are not bad, but losing the ability to reuse code that has nothing to do with a specific framework's implementation is! Don't let reusable code get locked into framework-specific glue packages! Come see practical strategies for writing framework agnostic code and walk away having a better idea how you, too, can unglue all the things!

Close
Scaling your website (Alejandro Marcu) E108
Close
Alejandro Marcu

Scaling your website

(Overview)

What will you need to do to scale your site to a huge scale? In this talk I'll introduce many ideas that will help you to be prepared, such as growing from single-server setup to unlimited horizontal scalability; sharding databases, caching, introducing new features smoothly, etc.  

Close
14:30 - 15:15
CSS architectures (Rafael Lyra) E002
Close
Rafael Lyra

CSS architectures

(Overview)

Uncon session

Close
How I Built A Video Game using Event Sourcing (Shawn McCool) E102
Close
Shawn McCool

How I Built A Video Game using Event Sourcing

(Overview)

I decided to turn a board game that I loved into a computer game. 

I wanted asynchronous online play. I wanted replays. I wanted loads and loads of events to analyze using statistics. Event Sourcing was the answer.

In this talk, I'll show you one of my favorite games and take you step by step through how I turned it into a video game, from the domain-model to the user-interface.

Close
PSR-7 HTTP messages in the wild (Hannes van de Vreken) E103
Close
Hannes van de Vreken

PSR-7 HTTP messages in the wild

(Overview)

PSR-7 describes common interfaces for representing HTTP messages. HTTP messages are the foundation of web development. Web browsers and HTTP clients such as cURL create HTTP request messages that are sent to a web server, which provides an HTTP response message. Server-side code receives an HTTP request message, and returns an HTTP response message.

This talk will explain the interfaces defined by PSR-7, how they define the future of interoperability between frameworks and tools. There will be a showcase of several implementations and tools such as zend's diactoros package, Guzzle v6, php-http, RelayPHP and other packages that show the real power of shared interfaces for HTTP objects. A clear path to how we can start using these typed objects in our applications today will be shown.

Close
Feature Flags are Flawed: Let's Make Them Better (Stephen Young) E104
Close
Stephen Young

Feature Flags are Flawed: Let's Make Them Better

(Overview)

Whether you are familiar with feature flags (or feature toggles, bits, switches, etc), or you've never heard of them, this talk is for you. Traditional feature flags are used to hide unfinished work in a continuous delivery pipeline; code is wrapped in a conditional statement and when everything is done you flip a switch in the database and boom: all of your users get the new experience. This can be very handy, especially if the new code contains bugs that were not discovered until it went into the wild. You can turn off the feature flag, deploy the patches, and then re-enable the flag.

As convenient as this model is, it has it's drawbacks. Investing in this pattern usually results in your code becoming riddled over time with "If True Then X" condition statements. This increases cyclomatic complexity and could eventually lead to increased technical debt. Additionally, feature flags are very "All or Nothing." Wouldn't it be better if you could roll out new features to your users incrementally? Wouldn't it be better if you could eliminate much of the cognitive load associated with all of those conditions?

This talk will focus on the basics, benefits, and drawbacks of feature flags before introducing Swivel: a PHP library that improves upon the feature flag concept by segmenting your users into groups and abstracting away the implementation details.

Close
The road to continuous deployment: a case study (Michiel Rook) E107
Close
Michiel Rook

The road to continuous deployment: a case study

(Overview)

It's a situation many of us are familiar with: a large legacy application, limited tests, slow & manual release process, no confidence.... Oh, and management wants new features, fast.

Using examples from a real-world case, I'll show you how to strangle the legacy application with a modern service architecture, automate the testing and deployment of new code and deliver value.

Close
Refactoring node.js microservices with the "12 factor app" methods (Sebastian Schürmann) E108
Close
Sebastian Schürmann

Refactoring node.js microservices with the "12 factor app" methods

(Overview)

It's been a recurring case in the last 2 years: Customers, who did develop a prototype in node.js, found out their ideas worked and people really used these. With the usage, the problems came. How do we scale it? How do we do releases? Where does it run? Who does config? 

Its the nature of prototype projects on the one hand, to be not perfect in all areas, but to work for a narrowly defined case. On the other hand, being a good citizen in the node.js world is not expensive and does not take long. For something you call a microservice: building, deploying and running it are main concerns as well as the codebase. If all that is messy, the codebase it self is maybe even not your primary concern. 

These are IRL projects, IRL examples of 2 IRL projects.

Close
15:15 - 15:45
Coffee & Tea Break
Close

Coffee & Tea Break

(Overview)

Close
15:45 - 16:45
Keynote: How We Talk About Tech (Ross Tuck) Forum
Close
Ross Tuck

Keynote: How We Talk About Tech

(Overview)

Over the last few years, the PHP community has realized that many of our toughest problems aren't technical: they're human. A wave of BDD and DDD has us reexamining how we talk to stakeholders and understand the needs of our end users. 

But what about communication between developers? 

From Twitter to IRC to Slack, we're talking more than ever but what are we saying? And how are we saying it? And why? Let's look past the personalities and the politics and see how the community shapes us and we shape it in return. Remember, how we talk about tech, affects the tech we do.

Close
16:45 - 17:00
Closing Forum
Close

Closing

(Overview)

Close
17:00 - 18:00
Drinks
Close

Drinks

(Overview)

Close