DPC

Schedule

Tutorial
09:30 - 12:45 Tutorial day
My app is secure... I think (Wim Godden) G102 beginner beginner
Close
Wim Godden

My app is secure... I think

(In depth)

With more and more sites falling victim to data theft, you've probably read the list of things (not) to do to write secure code. But what else should you do to make sure your code and the rest of your web stack is secure ? In this tutorial we'll go through the basic and more advanced techniques of securing your web and database servers, securing your backend PHP code and your frontend javascript code. We'll also look at how you can build code that detects and blocks intrusion attempts and a bunch of other tips and tricks to make sure your customer data stays secure.

Close
Wax On, Wax Off: Coder Dojo (Yitzchok Willroth) G103 beginner beginner
Close
Yitzchok Willroth

Wax On, Wax Off: Coder Dojo

(Hands on)

As software developers we tend to practice our craft in the way of doctors and lawyers rather than the way of athletes and musicians, failing to recognize the impact the trade offs and half measures dictated by many projects have on our growth as craftspeople. Code katas - deliberate practice, free of the pressures of "getting things done" - are an excellent way to strengthen our mental "muscle memory" and grow our craft. In this three hour workshop, we will examine the case for regular, deliberate practice and engage in guided, collaborative, hands-on learning designed to give you the skills to incorporate code katas and deliberate practice into your training regimen.

Close
Symfony2 Content Management (David Buchmann) G104 intermediate intermediate
Close
David Buchmann

Symfony2 Content Management

(Hands on)

The Content Management Framework (CMF) is a set of building blocks for content management. You can use just parts of it to add some content management to your Symfony2 project, or use the whole stack to build customized CMS applications for specific needs.

In this workshop, we do a hands-on tour through the CMF. We look at the existing functionality and implement simple features to get a feel for how things work.

Topics covered are:

* PHPCR-ODM Content repository with translation and versioning
* database routing
* menu system
* block system
* media handling
* editing with create.js and sonata

Close
Social Human Architecture for Beginners (Sebastian Schürmann) G105 beginner beginner
I put on my mink and wizard behat (Thomas Shone) G106 intermediate intermediate
Close
Thomas Shone

I put on my mink and wizard behat

(In depth)

An indepth dive into using Behat/Mink/Selenium for BDD testing.
* http://behat.org
* http://mink.behat.org/
* http://docs.seleniumhq.org/

In this talk I'll cover:
* Understanding the differences between Unit and BDD testing
* Installation and configuration of Behat and Mink
* Building Behat Contexts
* Avoiding data deadlocks and "test user account" syndrome
* Introduction to Selenium and testing JavaScript
* Best practises for writing tests (what to avoid, what to aspire for, writing stories like you mean it, how to get your product owners to write them)
* Common gotchas
* Continous Integration and Behat

By the end of the talk, any participant should be able to setup their own Behat testing environment and start testing their own applications immediately as well as have a deeper understanding of how to extend Behat to meet their specific environment needs.

Close
Introduction to Event Sourcing and CQRS (Beau Simensen) G107 beginner beginner
Close
Beau Simensen

Introduction to Event Sourcing and CQRS

(In depth)

Have you heard about Event Sourcing and wondered what it is all about? Are you curious how you could begin moving an existing applications to be Event Sourced? Have you wondered why people seem to talk about CQRS (Command Query Responsibility Segregation) whenever discussing Event Sourcing?

Take a step back and learn what Event Sourcing is. Learn the basics of CQRS and how Event Sourcing can be used to enable CQRS. See how both Event Sourcing and CQRS can be used together with Domain-Driven Design. Finally, see how you can start moving an existing model to use events to start projecting a Read Model and laying the groundwork to becoming a fully Event Sourced model with CQRS.

This tutorial assumes no knowledge of Event Sourcing or CQRS. For practical information on implementing Event Sourcing and CQRS, consider attending the afternoon tutorial, "Introduction to Event Sourcing and CQRS with Broadway." The two tutorials are intended to compliment each other and attending both is encouraged.

Close
Jump-start your application with AngularJS (Chris Saylor) G108 beginner beginner
Close
Chris Saylor

Jump-start your application with AngularJS

(Hands on)

AngularJS is a javascript framework that can help you build applications faster and with less javascript code. However, to use Angular requires a new way of approaching javascript development. Instead of manually binding callbacks to browser events, angular has the concept of applying changes to individual scopes on digest cycles compiled right from the html. What is the benefit of this approach? Have you ever written event callback methods bound to a specific html markup hierarchy only to have the markup change slightly and break your logic? Angular provides an escape from this by using the html markup as a means of binding your logic to the page. When the markup changes, so does your bindings.

We will be creating a basic shop application to learn the core concepts of AngularJS: scopes, controllers, services, filters, and directives.

Once you get the basics of how Angular works, we will cover more advanced topics such as communication between directives, dependency injection, and performance considerations.

Finally, we will cover real-world usage with modern libraries. You will learn how to structure your application to work with RequireJS, bower, grunt, and testing with karma..

At the end of this tutorial, you will know how to build robust and highly dynamic pages using AngularJS.

Close
Test, Create, Secure, Repeat - Part 1 (Michelangelo van Dam) G109 intermediate intermediate
Close
Michelangelo van Dam

Test, Create, Secure, Repeat - Part 1

(In depth)

If you build web applications you now have a huge responsibility: everything must be tested and secured. But how do you test and secure legacy applications or how do you get started with a new project using test-driven techniques to maximise quality and security without investing too much time in it.

In this workshop we will start with a clean project and build a simple catalogue application using test-driven and security-hardened techniques to achieve our goal. Once we have achieved our goal, we're going to apply the same on a legacy application.

Close
Modern JavaScript Web Architecture - Part 1 (Pratik Patel) G110 beginner beginner
Close
Pratik Patel

Modern JavaScript Web Architecture - Part 1

(Hands on)

This hands-on tutorial is a full day introductory level workshop. We’ll focus on server-side JavaScript tooling and techniques but we’ll also cover how everything comes together all the way up to the browser. As part of this tutorial, we’ll use Web Components for building an isomorphic app: the JavaScript code can run either on the browser or on the server. This tutorial will prepare you for building your own Web applications with modern tools and techniques with a focus on development and test automation.

We will cover these topics:
* Node and NPM
* Automation with Grunt
* Server-side MVC with Express
* Isomorphic Apps
* Web components with React
* Package management with Bower and NPM
* Websockets
* Debugging Techniques
* Modularity with Browserify

Prerequisites: Basic JavaScript, Basic command line, Working knowledge of programming
 

Close
Hands on PHP extensions - Part 1 (Julien Pauli) G111 intermediate intermediate
Close
Julien Pauli

Hands on PHP extensions - Part 1

(In depth)

This tutorial will drive you inside PHP's extension system.
Under Linux, we'll present PHP and its ecosystem, try to understand how it works then move to extensions.
After foreseeing existing extensions, and theoretical concepts, we'll start by making our own.
We'll learn how to enhance the language by adding functions, constants, INI options, classes, play with streams, change the engine behavior and improve overall performances.
There will be a main exercise, but feel free to bring your own business and get helped by your trainer or other attendees.
The final goal is that you have an accurate idea on how extensions work, and you can create at least a full skeleton of a PHP extension.

Close
12:45 - 13:45
Lunch
Close

Lunch

(Overview)

Close
13:45 - 17:00
MySQl 5.7 New Features (David Stokes) G102 beginner beginner
Close
David Stokes

MySQl 5.7 New Features

(Overview)

MySQL 5.6 has been our best release yet and 5.7 is just around the corner. There are big gains in performance, increased security, transportable table spaces, better cloud functionality, multi-sourced replication on the way. But some of our changes may break things like having STRICT as the default SQL MODE will break Wordpress. So come learn about the changes, learn how to exploit them, and get ready for MySQL 5.7

Close
Hands-on HTTP caching with Varnish (David Buchmann) G103 beginner beginner
Close
David Buchmann

Hands-on HTTP caching with Varnish

(Hands on)

For some scenarios, Varnish is the silver bullet to fix performance issues and make your slow site run lightning fast. More often though, you will need to put some effort into your application to get good results. Ideally, you design your application to play well with caching from the outset. If you don’t know what you are doing, Varnish can also be the bullet to shoot yourself in the foot.

In this workshop, you will learn how to use HTTP headers to control caching and how to configure Varnish itself. Running your own Vagrant box with Varnish and PHP, you get to try out the effects of the caching headers and of Varnish configuration directives. We will discuss things that go well with Varnish and situations to avoid. After mastering the basics, we look at advanced concepts like cache invalidation, caching authenticated content and Edge Side Includes (ESI).
With this knowledge, you will be able to set up and configure Varnish. You know how to build applications with caching in mind, and can assess whether an application is ready for Varnish or what needs to be fixed.

Co-host in this Tutorial is David de Boer

Close
Getting Started WIth The ELK Stack (Ben Waine) G104 intermediate intermediate
Close
Ben Waine

Getting Started WIth The ELK Stack

(Hands on)

Looking for a way to harvest a wealth of useful information from your development, staging and production systems? The ELK stack (Elasticsearch, Logstash, Kibana) provides you the tools to ingest logs, debug live issues and produce stunning and informative dashboards from your data.

This tutorial looks at:

Installation and configuration of the ELK stack
Grok - the process of tokenizing ingested logs
Kibana - Searching and graphing data
Kibana - Building a useful dashboard

Attendees should come with a laptop, some basic knowledge of linux and virtual box installed.

Close
Walking the agile testing Quadrant (Sebastian Schürmann) G105
Close
Sebastian Schürmann

Walking the agile testing Quadrant

(In depth)

All test methods taken into consideration lead to the view of the so called "Agile testing quadrant". Business facing tests are questioning the customer facing side as well as tech facing tests question the implementations. 

Close
Building realtime web apps (Jad Joubran) G106 beginner beginner
Close
Jad Joubran

Building realtime web apps

(Hands on)

This Tutorial will present several real-time APIs (Pusher, PubNub and FireBase).
During the talk, attendees will learn how to setup a chat application where they will be able to participate from their own machines (if possible in the venue)

Close
Introduction to Event Sourcing and CQRS with Broadway (Beau Simensen) G107 intermediate intermediate
Close
Beau Simensen

Introduction to Event Sourcing and CQRS with Broadway

(Hands on)

Have you looked at Broadway from the Qandidate.com team but are not quite sure where to start? Have you wondered how you might integrate it into your new or legacy application? Perhaps you are new to Event Sourcing and CQRS (Command Query Responsibility Segregation) and not sure if Broadway is the right choice for you?

Get a tour of Broadway's components to see how they work. See practical examples of Broadway in action. Learn the limitations of Broadway and the benefits you'll get from using one of PHP's first open-source and production-ready Event Sourcing and CQRS packages. Find out how you can put Broadway to work for you today!

This tutorial assumes some basic knowledge of Event Sourcing and CQRS. There will be quick overviews of the core concepts but will mostly focus on using Broadway. For more information on the core concepts, consider attending the morning tutorial, "Introduction to Event Sourcing and CQRS." The two tutorials are intended to compliment each other and attending both is encouraged.

Close
Hands on with the modern front end stack (Ben Smithett) G108 beginner beginner
Close
Ben Smithett

Hands on with the modern front end stack

(Hands on)

In this workshop we’ll take an in-depth look at the stack that is becoming the de facto standard for fast, scalable UI development in modern web apps: React, Webpack, Babel (formerly known as 6to5) & npm.

We’ll also explore some exciting new tools & techniques that vastly improve the developer experience and help you build a more robust, maintainable product, including:

- Instant feedback with hot module reloading
- Isomorphic JavaScript
- Writing styles in JavaScript

Close
Test, Create, Secure, Repeat - Part 2 (Michelangelo van Dam) G109 intermediate intermediate
Close
Michelangelo van Dam

Test, Create, Secure, Repeat - Part 2

(In depth)

If you build web applications you now have a huge responsibility: everything must be tested and secured. But how do you test and secure legacy applications or how do you get started with a new project using test-driven techniques to maximise quality and security without investing too much time in it.

In this workshop we will start with a clean project and build a simple catalogue application using test-driven and security-hardened techniques to achieve our goal. Once we have achieved our goal, we're going to apply the same on a legacy application.

Close
Modern JavaScript Web Architecture - Part 2 (Pratik Patel) G110 beginner beginner
Close
Pratik Patel

Modern JavaScript Web Architecture - Part 2

(Hands on)

This hands-on tutorial is a full day introductory level workshop. We’ll focus on server-side JavaScript tooling and techniques but we’ll also cover how everything comes together all the way up to the browser. As part of this tutorial, we’ll use Web Components for building an isomorphic app: the JavaScript code can run either on the browser or on the server. This tutorial will prepare you for building your own Web applications with modern tools and techniques with a focus on development and test automation.

We will cover these topics:
* Node and NPM
* Automation with Grunt
* Server-side MVC with Express
* Isomorphic Apps
* Web components with React
* Package management with Bower and NPM
* Websockets
* Debugging Techniques
* Modularity with Browserify

Prerequisites: Basic JavaScript, Basic command line, Working knowledge of programming
 

Close
Hands on PHP extensions - Part 2 (Julien Pauli) G111 intermediate intermediate
Close
Julien Pauli

Hands on PHP extensions - Part 2

(In depth)

This tutorial will drive you inside PHP's extension system.
Under Linux, we'll present PHP and its ecosystem, try to understand how it works then move to extensions.
After foreseeing existing extensions, and theoretical concepts, we'll start by making our own.
We'll learn how to enhance the language by adding functions, constants, INI options, classes, play with streams, change the engine behavior and improve overall performances.
There will be a main exercise, but feel free to bring your own business and get helped by your trainer or other attendees.
The final goal is that you have an accurate idea on how extensions work, and you can create at least a full skeleton of a PHP extension.

Close
17:00 - 22:00
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
Opening Keynote Forum beginner beginner
Close

Opening Keynote

(Overview)

To be announced

Close
10:45 - 11:30
Don't reboot, debug! (Joshua Thijssen) E102 intermediate intermediate
Close
Joshua Thijssen

Don't reboot, debug!

(In depth)

Nothing is showing up in the logs, everythings works fine on your development and acceptance environment, your unit-tests are all green and yet you've got major issues on your production server. What to do? Restart apache? Reboot the system? Maybe we even add more machines? Hell no! We debug it Chuck Norris style! I will show you how you can use advanced (linux) tools like strace, iostat, gdb and even dtrace to figure out the bottlenecks in your system. Is it even your code that is buggy or can we easily identify other things that can go wrong? A free tip for those who don't attend this talk: never ever reboot or restart your system without knowing what caused the issue in the first place!

Close
SOLID Refactoring (Scato Eggen) E103 intermediate intermediate
Close
Scato Eggen

SOLID Refactoring

(Hands on)

Good code should adhere to the five SOLID principles. What are these five principles? The definitions are easy to read, but hard to understand. Let’s take some ugly legacy code and refactor it into a SOLID piece of beauty!

Close
To be Announced (Mark Coleman) E104 beginner beginner
Close
Mark Coleman

To be Announced

(Overview)

To be Announced

Close
Content Security Policy - The end of Cross Site Scripting? (Arne Blankerts) E107 beginner beginner
Close
Arne Blankerts

Content Security Policy - The end of Cross Site Scripting?

(Overview)

Cross Site Scripting - or short XSS - is a security vulnerability as old as the web. Despite continuous efforts to educate developers to properly escape values before outputting though XSS are still a common problem. To mitigate XSS attacks at the browser level Mozilla developed a new by now W3C standard called Content Security Policy (CSP). This talk will introduce you to the feature set of the CSP, to what degree current browsers already support it and how easy it is to enhance the security of your own web application.

Close
Get some hypermedia up in your API (Victor Welling) E108
Close
Victor Welling

Get some hypermedia up in your API

(Overview)

In this talk I'll give you a quick introduction to the worst abbreviation ever conceived and the most overlooked aspect of REST: HATEOAS, or Hypermedia as the Engine of Application State. I'll show you how using hypermedia in your API can help you further decouple your client from your API's structure as well as move even more business logic out of the client. All of this using working – fingers crossed – code examples.

Close
11:45 - 12:30
Defensive Programming (Christopher Pitt) E102 beginner beginner
Close
Christopher Pitt

Defensive Programming

(In depth)

Defensive programming may sound like something your granddad did after the war, but it's key to reducing the number of bugs and increasing maintainability. We're going to look at what defensive programming is and some steps to doing it in PHP.

Close
Malicious cryptography in Symfony apps (Raul Fraile) E103 intermediate intermediate
Close
Raul Fraile

Malicious cryptography in Symfony apps

(Overview)

Cryptovirology studies how to use cryptography to design malicious software, given that public-key cryptography can be used to break the symmetry between what an antivirus analyst sees regarding a virus and what the virus writer sees. In this talk we will create a simple cryptovirus in PHP - for educational purposes - able to infect a Symfony2 app and encrypt data such as database records or user uploaded files using public key cryptography with OpenSSL.

To create the virus we will study how Symfony works internally, especially what kernel events are dispatched and how to use them to attach our virus. Several strategies to hide the virus will be discussed. Simple ones like using different encodings and more advanced strategies such as polymorphic code. Finally, we will see how we can defend ourselves from this kind of attacks.

Close
Automation made simple with Ansible (Erika Heidi) E104 intermediate intermediate
Close
Erika Heidi

Automation made simple with Ansible

(In depth)

Automation tools can save you a lot of time when dealing with server configuration and project deployments. However, some developers might feel slightly intimidated by the complexity present in tools like Puppet and Chef.

This talk will present you Ansible, a clean and straightforward automation tool created with focus on simplicity and efficiency. You will learn how to get started with Ansible and write your first playbooks to control one or hundreds of servers.

Close
Artificial Neural Networks on a Tic Tac Toe console application (Eduardo Gulias Davis) E107 advanced advanced
Close
Eduardo Gulias Davis

Artificial Neural Networks on a Tic Tac Toe console application

(Hands on)

Artificial Neural Networks are used in a wide variety of fields as ways for machines to "learn" based on information, by modeling how the brain works.
We will see how we can use them in PHP with a toy Tic Tac Toe console application and in the way, learn a bit about Symfony's greate Console component.

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

React.js: Super-fast Single Page Web Applications

(In depth)

React.js is a view library from Facecbook 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.

Close
12:30 - 13:30
Lunch
Close

Lunch

(Overview)

Close
13:30 - 14:15
Towards Modelling Processes (Mathias Verraes) E102 advanced advanced
Close
Mathias Verraes

Towards Modelling Processes

(In depth)

Processes are at the heart of how many businesses operate. The processes are governed by policies, agreed upon with contracts, and guided by documents. Software systems on the other hand, tend to focus on the artefacts, the snapshots of state between the steps. In this talk, we’ll explore how Domain-Driven Design can help us overcome this divide.

Close
Hash functions and how not to use them (Nathaniel McHugh) E103 intermediate intermediate
Close
Nathaniel McHugh

Hash functions and how not to use them

(In depth)

Cryptographic hash functions look magical but are in fact built of the simplest operations. Their reputation as black boxes which can uniquely fingerprint arbitrary amounts of data means has found many uses in software such as password storage and duplicate data detection.

Hash functions are even used to prove work in virtual currencies in a way that mining precious metals once underpinned traditional currencies. However, like all cryptographic primitives correct use is vital for the promised properties. Furthermore several once secure and commonly used cryptographic hash functions can be subtly manipulated to break them.

In this talk we take a peek into the internals of some commonly used hash functions through PHP to discover how they work and what consequences this has for their use in applications.

Close
Revisited: The Webstack in 2015 (Arne Blankerts) E104 intermediate intermediate
Close
Arne Blankerts

Revisited: The Webstack in 2015

(In depth)

Back in the days the LAMP stack did satisfy the needs of the web, making it the big success we all know. But today’s applications more often than not require a scalability, security and performance this classic environment can hardly provide. In this session we will have a look at a modern web stack leveraging state-of-the-art components like nginx, php-fpm, redis and more.

Close
The quest for global design principles (Matthias Noback) E107 intermediate intermediate
Close
Matthias Noback

The quest for global design principles

(In depth)

If you’re a programmer you make design decisions every second. Statements, functions, classes, packages, applications, even entire systems: you need to think, and often think hard, about everything. Luckily there are many useful design principles, patterns and best practices that you can apply. But some of them merely expose code smells. Others only help you design your classes. And some are applicable to packages only. Wouldn’t it be nice to have some more general, always useful, invariably applicable, foundational design principles?

In this talk we’ll look at software from many different perspectives, and while we’re zooming in and out, we’ll discover some of the deeper principles that lie beneath proper object-oriented design. They are the foundation of many of the well-known design patterns and they may even serve as an explanation for code smells.

Close
The New CSS Layout (Rachel Andrew) E108 intermediate intermediate
Close
Rachel Andrew

The New CSS Layout

(Overview)

I’m very excited about the possibilities that await us by way of proposed layout modules for CSS. While some of these modules are at an early stage, I believe it is important that designers and developers start to look at, play with and discuss these proposals. If we don’t then we can’t complain when the final specifications don’t meet our needs.

This talk is based on the work I did for my CSS Layout Modules Pocket Guide and covers Multi-column Layout, Flexbox, Grid, Regions, Exclusions and Shapes.

Close
14:30 - 15:15
Command Bus to Awesome Town (Ross Tuck) E102 intermediate intermediate
Close
Ross Tuck

Command Bus to Awesome Town

(In depth)

Command Buses are all the rage but...why? What's the big deal? What's the benefit? And why are there 50 of them?

In this talk, we'll go on a magical storybook journey to slice open a Command Bus library and pick through its guts. You'll see at not just how it works, but why it works. We'll also cover practical ways this humble pattern can simplify your application, from forms to database to async operations. From Command to CQRS, we'll rethink your service layer, one user intent at a time.

By the end, you'll understand why Command Buses are extremely useful but also completely irrelevant in the grand scheme of life.

Close
The Three Dimensions of Testing (Sebastian Bergmann) E103 beginner beginner
Close
Sebastian Bergmann

The Three Dimensions of Testing

(Overview)

The goal of all tests is to discover problems as early as possible. Dependening on the context, the same test can be used to answer different questions about the quality of the software under test. The three dimensions of goal, scope, and notation are one approach to categorize tests. Attendees of this session will learn which aspects of an application should be tested and how to efficiently implement these tests so that they are easy to write and fast to execute while delivering highly reliable results.

Close
ElasticSearch in action (Thijs Feryn) E104 intermediate intermediate
Close
Thijs Feryn

ElasticSearch in action

(Hands on)

ElasticSearch is a really powerful search engine, NoSQL database & analytics engine. It is fast, it scales and it's a child of the Cloud/BigData generation.This talk will show you how to get things done using ElasticSearch. The focus is on doing actual work, creating actual queries and achieving actual results.I'll also show you how to manage your ElasticSearch cluster and how it fits into the so called E(lasticSearch)L(ogstash)K(ibana) stack.

Close
The Stateful ElePHPant (Rick Kuipers) E107 intermediate intermediate
Close
Rick Kuipers

The Stateful ElePHPant

(Hands on)

Join me for some live coding!
We'll be broadening our horizons by having a look at state machines and the state pattern. I'll be showing you that these concepts have their place in the PHP world and during the live coding we can share some of our favorite PhpStorm features/shortcuts. Oh yeah, we will be observing an elephpant in its natural habitat...

Close
FutureJS - ES6, ES7 and beyond (Kuba Walinski) E108 intermediate intermediate
Close
Kuba Walinski

FutureJS - ES6, ES7 and beyond

(In depth)

No, FutureJS is neither a new framework nor a library that you will hear everyone in the office talking about. This talk is actually about the future of JavaScript, or rather EcmaScript, as that is its official name.The process of standardising EcmaScript 6 (aka Harmony) is finally reaching its final stages. The ES Commitee also uncovered plans for the future editions of the language (ES7 and beyond). It's time we started getting to know all new features that we will all be using in a few years time. Actually, we can do even better! We can start using the most interesting and useful features right now thanks to ES6 compilers like Google's Traceur. They will translate the new ES6 code to its ES5 equivalent form, which our current browsers can understand and execute. In this talk you will learn what are the most exciting new ES6 features as well as how to start using them right now thanks to Traceur.

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

Coffee & Tea Break

(Overview)

Close
15:45 - 16:30
Hello, PSR-7. (Beau Simensen) E102 beginner beginner
Close
Beau Simensen

Hello, PSR-7.

(Overview)

SR-7 HTTP Message Interface has been kicking around in one form or another since March of 2012. Get a brief history of how PSR-7 evolved from its humble beginnings as a simple HTTP client interface to the game-changing PHP-FIG proposal we have today. Learn how to work with the HTTP Message Interfaces and how they will be used by frameworks in the not to distant future. Find out what it will mean to have a healthy ecosystem of PHP software all speak HTTP the same way. Say hello to your new best friend in PHP, PSR-7.

Close
Asynchronous PHP (Christopher Pitt) E103 intermediate intermediate
Close
Christopher Pitt

Asynchronous PHP

(Hands on)

PHP has emerged from it’s dark past; just in time to learn from the advances in event-based programming languages/platforms. As a result; there is vast, untapped potential in developing event-based, real-time applications. Utilising emerging open-source projects, like ReactPHP and Ratchet, PHP developers can join the party.

Close
Let's Write Some History! (Willem-Jan Zijderveld) E104 intermediate intermediate
Close
Willem-Jan Zijderveld

Let's Write Some History!

(Overview)

Did you know that you are probably throwing away data every single day? By updating or deleting records from your database you lose information. In this talk I'm going to explain how Event Sourcing can help you solve this problem and what other benefits you can get from it.

Close
Dip Your Toes in the Sea of Security (James Titcumb) E107 beginner beginner
Close
James Titcumb

Dip Your Toes in the Sea of Security

(Overview)

Security is an enormous topic, and it’s really, really complicated. If you’re not careful, you’ll find yourself vulnerable to any number of attacks which you definitely don’t want to be on the receiving end of. This talk will give you just a taster of the vast array of things there is to know about security in modern web applications, such as writing secure PHP web applications and securing a Linux server. Whether you are writing anything beyond a basic brochure website, or even developing a complicated business web application, this talk will give you insights to some of the things you need to be aware of.

Close
The UI is an Application (Ben Smithett) E108 intermediate intermediate
Close
Ben Smithett

The UI is an Application

(Overview)

The UI is no longer just a ragtag collection of templates, scripts & styles shoehorned in alongside "real" application code, but is now a rich, complex piece of software in and of itself.

We have a de facto standard language for UI development in JavaScript, yet too often our UI code remains tangled up in hamstrung templating languages, CSS preprocessors and whatever language or framework our back end happens to be built with.

In this talk we'll explore what happens when you treat your UI as a first class citizen, separating it from the rest of your app and replacing traditional templates & CSS with the real programming language you already know: JavaScript.

Close
16:45 - 17:30
HTTP is Dead. Long Live HTTP/2! (Ben Ramsey) E102 intermediate intermediate
Close
Ben Ramsey

HTTP is Dead. Long Live HTTP/2!

(Overview)

Request for Comments (RFC) 2616 reigned supreme as the specification for the hypertext transfer protocol (HTTP) for fifteen years. Now, it's been obsoleted by a handful of new RFCs, and HTTP/2 is on the horizon. In this talk, we'll take a look at the new RFCs, discuss the differences and clarifications they make, and take a look ahead at what's new in HTTP/2 and what it means for you.

Close
The true value of objects (Stijn Vannieuwenhuyse) E103 intermediate intermediate
Close
Stijn Vannieuwenhuyse

The true value of objects

(Overview)

Although the latest PHP versions provide us with enough types and keywords to enable object oriented development, the language itself is not truly object oriented. In pure object oriented languages, like Java, almost everything is an object. Even primitives have their object equivalent. Concepts that first look like simple values, can in fact be modelled as objects. This enables us to add a lot of behaviour to them. These so called Value Objects make our code more readable, elegant, maintainable and dry. We will explore the possibilities and advantages of these Value Objects together, guided by some real world code samples.

Close
Extending MySQL with PHP's MySQL Native Driver (Davey Shafik) E104 advanced advanced
Close
Davey Shafik

Extending MySQL with PHP's MySQL Native Driver

(In depth)

PHP's MySQL Native Driver (mysqlnd) has been providing great performance benefits since PHP 5.3, but there is more to it than just replacing libmysqlclient.

MySQL Native Drivers plugin architecture provides the ability to do read/write splitting, caching, load balancing, and more.

Learn how to do all of these things simply, and transparently, as well as how to write your own plugins using PHP.

Close
Journey into your Lizard Brain (Rafael Dohms) E107 beginner beginner
Close
Rafael Dohms

Journey into your Lizard Brain

(Overview)

Languages and syntax are the easy part of programming, the real challenge is in knowing how to solve a problem and how to find and understand which paths can take you to the solution, the moving parts. This talk will dive into this thought process, give you insights to train your lizard brain and expand your knowledge base.

Close
Deep Dive into Browser Performance (Ilia Alshanetsky) E108 intermediate intermediate
Close
Ilia Alshanetsky

Deep Dive into Browser Performance

(In depth)

In the world of the Internet user’s experience is in many cases controlled by the browser, and the browser’s ability to render the page is the ultimate measure of how fast or slow a particular page and/or application is in the eyes of the user. This session will outline the tools that can be used to effectively measure the user experience in the browser as well as outline a number of approaches and performance tricks designed to improve and accelerate that experience.

Close
20:30 - 23:00
Conference Social
Close

Conference Social

(Overview)

Close
Conference day 2
09:45 - 10:30 Conference day 2
The NoSQL Store everyone ignores: PostgreSQL (Stephan Hochdörfer) E102 advanced advanced
Close
Stephan Hochdörfer

The NoSQL Store everyone ignores: PostgreSQL

(Overview)

PostgreSQL is well known being an object-relational database management system. In it`s core PostgreSQL is schema-aware dealing with fixed database tables and column types. However, recent versions of PostgreSQL made it possible to deal with schema-free data. Learn which new features PostgreSQL supports and how to use those features in your PHP application.

Close
Datastructures in PHP: Beyond SPL - Tries and QuadTrees (Mark Baker) E103 intermediate intermediate
Close
Mark Baker

Datastructures in PHP: Beyond SPL - Tries and QuadTrees

(In depth)

Most developers have never even heard of "datastructures"; and many of those who have consider that they are little more than academic unicorns, dreamt up by computer science professors after an evening in the university bar and a couple of joints, and that have no use in the "real world" of writing code. It's so easy to forget that we use some datastructures on a daily basis, perhaps without even realising that datatypes such as arrays (implemented as hashmaps in PHP) are a datastructure; and we expect our database indexes to speed up database access without thinking that they might be b-trees or hashes.

We use datastructures like PHP's arrays almost universally because they make our code so much easier to work with: other datastructures such as SPL's linked-lists, stacks, queues and heaps are appropriate in a more restrictive set of circumstances; but when it is appropriate to use them, they can really simplify our work. Still others are incredibly powerful components of the developers toolbox but only in very specific situations. Understanding what datastructures are available and what they are best used for should be as much a part of a developer's skillset as knowing how to decompose a problem or code a loop, write a SQL query or debug a problem script.

Tries and QuadTrees are two such datastructures: given the right use-case, they are fast and efficient, and really simplify our code. But how do they work? When is it the right time to use them? What are their benefits and how are they used?

Close
PhpStorm: 42 Tips and Tricks (Mikhail Vink) E103 beginner beginner
Close
Mikhail Vink

PhpStorm: 42 Tips and Tricks

(Hands on)

With the PhpStorm IDE buzzing in modern PHP community, there are always many neat things to learn for better synergy with your every-day tool for web development. This session will give you an insight on 42 powerful tips and tricks that will make you more productive and efficient. From lightning-smart navigation to debugging and testing hidden tricks, from making UI of the IDE even more suitable for presentations to some handy tools integrations - all of those tips will find a good use in your development workflow.

Close
Application Logging & Logstash (Ben Waine) E104 intermediate intermediate
Close
Ben Waine

Application Logging & Logstash

(Hands on)

Modern web applications are complex, have many layers and usually integrate many technologies. A well structured application log is invaluable for debugging your application in development and monitoring it in production. This session takes a brief look at the basics of logging (libraries and tools) and moves on to look at how to plan an effective logging strategy for your application. In the second half of the session we consider logs as a stream of events and how we can use Logstash and Kibana to surface a wealth of interesting information about our applications.

Close
Templating - you're doing it wrong (Nikolas Martens) E108 intermediate intermediate
Close
Nikolas Martens

Templating - you're doing it wrong

(Overview)

At first, templating seems like a good idea: Separate logic from presentation by putting all HTML documents in in their own files. But we still need to glue them to the logic of our application somehow so we use a specialized mark-up language and a matching text-manipulating interpreter to render them. And since there are already at least five different languages in any web application, nobody minds another one or the fact that you can't render a template without having the whole application running.

But this is an unnecessary burden since there already is a widely used and proven mark-up language in every HTML document: the HyperText Markup Language. In this talk, I'm proposing an new approach to writing templates for web applications, called Template Animation, that leverages the capabilities of HTML to create highly maintainable templates, requiring no tools besides the browser for development and testing.

Close
10:45 - 11:30
Hexagonal architecture - message-oriented software design (Matthias Noback) E102 advanced advanced
Close
Matthias Noback

Hexagonal architecture - message-oriented software design

(In depth)

Commands, events, queries - three types of messages that travel through your application. Some originate from the web, some from the command-line. Your application sends some of them to a database, or a message queue. What is the ideal infrastructure for an application to support this on-going stream of messages? What kind of architectural design fits best?

This talk provides answers to these questions: we take the *hexagonal* approach to software architecture. We look at messages, how they cross boundaries and how you can make steady communication lines between your application and other systems, like web browsers, terminals, databases and message queues. You will learn how to separate the technical aspects of these connections from the core behavior of your application by implementing design patterns like the *command bus*, and design principles like *dependency inversion*.

Close
From 0 to MVP in 40 minutes: decoupled Drupal for startups (Jeffrey A. "jam" McGuire) E103
Close
Jeffrey A. "jam" McGuire

From 0 to MVP in 40 minutes: decoupled Drupal for startups

(Overview)

One of the strongest real-world demands for organizations and software architects alike is the ability to build a first version fast. Building your Minimum Viable Product in time can mean a serious competitive edge for a startup. A good developer has a toolkit full of fast-prototyping tools like AngularJS, Backbone, and others, but going from that first prototype to a fully formed alpha version that integrates with the rest of your stack is still a difficult step.

The newest version of Drupal boasts powerful developer tools for integrating with external APIs, a unified and improved admin and authoring experience for end users, and best of all: completely free choice of your presentation layer. This means that you can take that rapid prototype, and very easily put Drupal behind it for real, enterprise-ready data consumption and modelling power. With your rapid prototyped Angular application in front, and a slew of external APIs in back, Drupal 8 is the perfect place for information to be ingested, created, and re-mixed to become great content.

In this session we will build a minimum viable product in 40 minutes. Our MVP will ingest content from an external API, perform content management tasks (data modelling, relationships, etc.) through a web-based admin interface, and deliver it to an AngularJS frontend application. We will build a data model, configure Drupal’s REST components to consume and export data, and integrate it all with a decoupled interface that you can access and use by the end of the session.

You’ll leave this session with a new toolset for bridging the gap between that rapid prototype and a real, working MVP. That means fertile ground for your coders, and straight to market for your product.

 

Co-Hosts of this talk are Cambell Vertesi and Adam Juran

Close
HTTP Caching with Varnish (David Buchmann) E104 beginner beginner
Close
David Buchmann

HTTP Caching with Varnish

(Overview)

With the Varnish caching proxy you can make websites blazingly fast. The basics are quite simple once you understand how cache handling in HTTP works. For starters, we will look into HTTP and Varnish configuration. The main course is going to be test-driven cache invalidation and the cache tagging strategy. For desserts, there will be an introduction to Edge Side Includes (ESI). All of this will be liberally sprinkled with examples from the FOSHttpCache library and some ideas from the FOSHttpCacheBundle for Symfony2.

Co-Host of this talk is David de Boer

Close
The road to Continuous Deployment (Bastian Hofmann) E107 intermediate intermediate
Close
Bastian Hofmann

The road to Continuous Deployment

(Overview)

Deploying code changes continuously to your production environment has many benefits. New features get to your users much faster which enables very short and quick iterations on them. And due to the small change sets you tend to encounter less bugs and regressions. In this talk I’ll present what Continuous Deployment means, and what you have to do, step-by-step, to make it work successfully for your project. We will cover topics like trunk based development, feature flags, partial roll outs, continuous integration, deployment automation and application monitoring.

Close
AngularJS + Ionic = Mobile Web Applications (Vincenzo Ferrari) E108 beginner beginner
Close
Vincenzo Ferrari

AngularJS + Ionic = Mobile Web Applications

(Overview)

Ionic is one of the most elegant solutions for building captivating and portable web mobile applications, using the most advanced Javascript framework: AngularJS. It allows creating applications using the top notch web technologies like HTML5, CSS3 and Javascript of course.
With Cordova/PhoneGap it's possible to deploy Ionic applications on every mobile device such as Android, iOS, WindowsPhone, etc. The applications can be used both online as a normal web application and offline as a standard native mobile application.

This talk would like to show features, components, structure and all the tools that gravitate around Ionic.
It will start with an introduction to AngularJS: you will be presented every components of the framework, beginning with its MVVM and MVC patterns, going through services, directives, controllers and finishing with testing and a list of useful modules, such as Angular-UI. Among the different topics displayed, you will be shown the Ionic client, the integration with AngularJS and its most well-known modules.
You will be also shown the application building tools and the customization of GulpJS in detail. Eventually, the Cordova integration and the application packaging process will be presented.

Attending this talk requires a knowledge of Javascript, HTML, CSS and a very basic knowledge of web and mobile applications development.

Close
11:45 - 12:30
What to Expect When You're Expecting: PHP 7 (Davey Shafik) E102 intermediate intermediate
Close
Davey Shafik

What to Expect When You're Expecting: PHP 7

(Overview)

PHP 7 is coming, and with it will come new features, backwards compatibility breaks, and huge performance gains.

This talk will get you prepared for all the changes in this upcoming release and offer practical advice you can implement now to ensure you code still works come upgrade time.

Close
Wrangle Cross-cutting Concerns with Event Driven Programming (Chris Saylor) E103 intermediate intermediate
Close
Chris Saylor

Wrangle Cross-cutting Concerns with Event Driven Programming

(In depth)

Event driven programming is becoming essential to many applications and frameworks that can be utilized to make your application more flexible and “plugin” ready.

Learn how to effectively use events in applications to reduce code complexity of cross-cutting concerns, how various frameworks implement events and make them available to the developer, and the benefits and drawbacks of utilizing aspect oriented development with real world examples.

We will also look at many popular frameworks (Symfony2, CakePHP, Zend, etc) to see how their event architecture is implemented at a bird’s-eye view and how developers can take advantage, including a demo using Symfony2’s dispatcher to illustrate the benefits of event driven design.

Close
Composer The Right Way (Rafael Dohms) E104 beginner beginner
Close
Rafael Dohms

Composer The Right Way

(Overview)

Composer has triggered a renaissance in the PHP community, it has changed the way we deal with other people’s code and it has changed the way we share our code. We are all slowly moving to using Composer, from Wordpress to Joomla and Drupal and frameworks in between. But many of us mistreat composer, follow outdated practices or simply lack a few tricks. In this session i’ll get you the low down on how to use composer the right way.

Close
From London to Chicago: A Conceptual Map for Unit Testing (Yitzchok Willroth) E107 intermediate intermediate
Close
Yitzchok Willroth

From London to Chicago: A Conceptual Map for Unit Testing

(Overview)

All aboard as we travel from London to Chicago! These two historical methods approach unit testing from divergent perspectives. Unfortunately, few learning resources to explicitly identify with one or the other creating a confused and frustrating learning landscape for the novice and journeyman alike. During our voyage, we'll explore each school's philosophical underpinnings; not only how they test, but how they view testing, what they test and why. We'll discuss the relative merits of the two approaches, as well as how to implement each style. Finally, we'll develop a conceptual model for unit testing which can serve as a foundation upon which to evaluate and integrate other resources you may encounter along your testing journey.

Close
Blazing fast CSS3 animations (Jad Joubran) E108 intermediate intermediate
Close
Jad Joubran

Blazing fast CSS3 animations

(Hands on)

Learn how to replace jQuery or javascript animation with blazing fast CSS3 animations.
All you need to know about hardware acceleration, browser support, etc.
You will be able to learn how to make blazing fast animations even on web and mobile browsers.

Close
12:30 - 13:30
Lunch
Close

Lunch

(Overview)

Close
13:30 - 14:15
Implement Single Sign On easily with Symfony (Sarah Khalil) E102 intermediate intermediate
Close
Sarah Khalil

Implement Single Sign On easily with Symfony

(Overview)

We'll first make a round trip to the Security world of Symfony2 : understanding what is a provider, a firewall, the two very important services "security.token_storage" and "security.authorization_checker" and of course how the user object is important in Symfony.
Then we'll see how to authenticate a user through a OAuth2 server (like facebook) very easily.

With few lines of code, we'll be able to go further and see how we can make sure that a user stay logged in from application to another.

Close
Software architecture in an agile age (Harrie Verveer) E103 intermediate intermediate
Close
Harrie Verveer

Software architecture in an agile age

(In depth)

Properly designing the architecture of software seems to have become a lost art. Even when using agile development methods, quickly drawing some UML on a napkin can still be very rewarding and insightful. This presentation is not about slow and in-detail design cycles, but about quickly and pragmatically sketching the outlines of your system in order to keep a birds-eye view on the architecture and the application as a whole.

Close
I put on my mink and wizard behat (Thomas Shone) E104 intermediate intermediate
Close
Thomas Shone

I put on my mink and wizard behat

(In depth)

An indepth dive into using Behat/Mink/Selenium for BDD testing.
* http://behat.org
* http://mink.behat.org/
* http://docs.seleniumhq.org/

In this talk I'll cover:
* Understanding the differences between Unit and BDD testing
* Installation and configuration of Behat and Mink
* Building Behat Contexts
* Avoiding data deadlocks and "test user account" syndrome
* Introduction to Selenium and testing JavaScript
* Best practises for writing tests (what to avoid, what to aspire for, writing stories like you mean it, how to get your product owners to write them)
* Common gotchas
* Continous Integration and Behat

By the end of the talk, any participant should be able to setup their own Behat testing environment and start testing their own applications immediately as well as have a deeper understanding of how to extend Behat to meet their specific environment needs.

Close
Modern networking for PHP developers: IPv6, SPDY and SSL (Marcus Bointon) E107 intermediate intermediate
Close
Marcus Bointon

Modern networking for PHP developers: IPv6, SPDY and SSL

(Overview)

Many developers are stuck in the world of old-school IPv4 - it's an easy and comfortable place to be! But beneath the cosy world of PHP, your network layer has been undergoing major changes that might be outside your comfort zone. IPv6, SPDY (aka HTTP/2.0) and SSL are all important technologies that you need to get to grips with, both inside and outside PHP. This talk covers the key features of these technologies and how you can use them to improve your app's availability, performance and security.

I will base this talk on my experience of deploying and enhancing these technologies for both my own services and those of my customers. Recent attacks on SSL make this subject area especially important.

Close
Improving the quality of your JS application (Stephan Hochdörfer) E108 intermediate intermediate
Close
Stephan Hochdörfer

Improving the quality of your JS application

(In depth)

In the past software earned a reputation for failure. Can we change this situation? Yes, but it's hard to figure out how a good quality assurance (QA) stack should look like when you have no clue where to start. Done right a good QA stack can help you catch problems of any kind as soon as possible. In addition to that it will give you the confidence that your application works as intended when it gets deployed to the production environment. In this session I will show you how we built our own QA stack out of tools like jscs, jshint, Karma, Mocha and Istanbul to cover everything from code style issues and unit tests up to integration tests.

Close
14:30 - 15:15
Adding 1.21 Gigawatts to Applications with RabbitMQ (James Titcumb) E102 intermediate intermediate
Close
James Titcumb

Adding 1.21 Gigawatts to Applications with RabbitMQ

(In depth)

As your application grows, you soon realise you need to break up your application into smaller chunks that talk to each other. You could just use web services to interact, or you could take a more robust approach and use the message broker RabbitMQ.

In this talk, we will take a look at the techniques you can use to vastly enhance inter-application communication, learn about the core concepts of RabbitMQ, cover how you can scale different parts of your application separately, and modernise your development using a message-oriented architecture.

Close
Ada Lovelace; The First Programmer (Daan van Berkel) E103 beginner beginner
Close
Daan van Berkel

Ada Lovelace; The First Programmer

(In depth)

Ada Lovelace work on Charles Babbage's Analytic Engine was far ahead of her time. She matured the concept of an automatic calculator by writing source code for a machine that was not even build.

In this session we will take a closer look into that code and how it works. We will provide operational details of the Analytic Engine and learn how it can be programmed.

Close
My site is slow, what can I do? - Profiling PHP applications (Bastian Hofmann) E104 intermediate intermediate
Close
Bastian Hofmann

My site is slow, what can I do? - Profiling PHP applications

(Overview)

It's nothing new that speed is important for the success of any web application. Only a few hundred milliseconds may lie between a user leaving your site or staying. Unfortunately performance problems are oftentimes hard to fix and even harder to pinpoint.
In this talk I will show you how we at ResearchGate measure web application performance, which means not only timing how long the PHP backend took to deliver a page, but also tracking the speed the users actually perceives in the browser. After that you will see how you can track down and analyze any problems you found through measuring with the help of tools like Xdebug, XHProf, the Qafoo Profiler and the Symfony Debug Toolbar. And if you still need to get faster after optimizing and fixing all these issues, I'll introduce you to some tricks, techniques and patterns to even further decrease load times.

Close
My Journey to Add array_column() to PHP (Ben Ramsey) E107 intermediate intermediate
Close
Ben Ramsey

My Journey to Add array_column() to PHP

(Overview)

A few years ago, I had an idea to add a new function to PHP: array_column(). Starting out on this journey can be daunting to user-land developers unfamiliar with the landscape of the PHP internals. In this talk, I demystify this process, explaining how to set up an environment, create an RFC, communicate on the mailing lists, and send a pull request. I hope this talk will encourage you to scratch your own itch and contribute to the PHP core.

Close
Getting started with Meteor (Kuba Walinski) E108 beginner beginner
Close
Kuba Walinski

Getting started with Meteor

(Hands on)

The world of JavaScript Frameworks is constantly evolving. It seems that almost every month there is a brand new thing that will revolutionise web development. However, having a closer look you don’t really see much revolutionary stuff in those new frameworks - they are usually just a small step forward from the previous thing. At least that’s how I felt in the past few years of doing JavaScript. Until I discovered Meteor, that is. It was enough to complete the getting started tutorial to realise that I’m dealing with a potential game-changer. First imagine that all communications happen via web sockets (way faster than REST API calls over HTTP). Then realise that you have a full blown MongoDB implementation accessible on the client side. Finally, remember that from now on you just need one programming language - JavaScript - to implement the whole application - from the client-side through to the back-end and all the way down to the database. In this talk you will see all this goodness brought together in one great package that is called Meteor.

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

Coffee & Tea Break

(Overview)

Close
15:45 - 16:45
Closing Keynote Forum beginner beginner
Close

Closing Keynote

(Overview)

To be Announced

Close
16:45 - 17:00
CLOSING Forum
Close

CLOSING

(Overview)

Close
17:00 - 18:00
Drinks
Close

Drinks

(Overview)

Close