PHPDetroit is a three-day, regional PHP conference that brings the community together to learn and grow. We're preceding the conference with a 2 track tutorial day that will feature 4 sessions covering various topics.

Thursday 26th July 2018

08:00 Docker for PHP Developers
Workshop by Chris Tankersley in Track A (4 hour)

Docker is quickly becoming an invaluable development and deployment tool for many organizations. Come and spend the day learning about what Docker is, how to use it, how to integrate it into your workflow, and build an environment that works for you and the rest of your team. This hands-on tutorial will give you the kick-start needed to start using Docker effectively.

Hit the ground running with Laravel
Workshop by Joe Ferguson in Track B (4 hour)

Curious about what all this Laravel hype is about? Want to see Rapid Application Development first hand? Tired of your old and busted PHP 5.2 framework? Join us for a half day of Laravel training. We cover the ecosystem to getting local development to major features and even how to deploy to production. This class covers Laravel 5.3, application architecture, application testing, best practices, real world implementations, and exercises to but what you learn into action.

Lunch in Track A (1 hour)


Learn To Test Like A Grumpy Programmer
Workshop by Chris Hartjes in Track A (4 hour)

What if you could learn how to write tests from someone who has been using them for a long time and also knows how to explain it in a way that cuts down on the fear and anxiety while teaching you what you need to go to get started immediately? In this tutorial, Chris will teach the basics of writing tests using PHPUnit. Topics covered include: * high-level discussion of the role of testing * assertions * the Arrange-Act-Assert pattern * what a PHPUnit test file looks like and where to locate them * test doubles and when to use them * strategies for building test scenarios Attendees will need the following: * a laptop with PHP 7.2.x + stable PHPUnit + Mockery the most and be ready to actually write tests.

Dive into Symfony 4 & Flex!
Workshop by Ryan Weaver in Track B (4 hour)

Symfony 4 is out! And it's the best Symfony ever! Faster! Re-imagined developer experience! And easier to create the feature you need! In this workshop, we'll bootstrap a new Symfony app and learn about Symfony Flex: the secret behind the fact that Symfony automatically scales from a "microframework" to a "macroframework" as your app grows. We'll also leverage the new dependency injection features that will let us build the same high-quality features in a fraction of the time and code. Let's rock!

Friday 27th July 2018

Groupies, Roadies, Rockstars: The roles we play in opensource
Keynote by Cal Evans in Track A (1 hour, 30 minutes)

Contribute to Open Source! Everyone tells you that you need to. What if you don't want to run an Open Source project? What if you just need something to work? What if you just want to use Open Source, can you still make a contribution? Of course you can! In this talk we will look at three broad groupings of roles that you can play in any Open Source project. Take a look around, find your role and your project and make a difference.

Understanding Docker for Development
Talk by Jessica Mauerhan in Track A (45 minutes)

Docker is often lauded as a tool for deploying and running applications - but it's also extremely useful for your local development process. Whether you've never used Docker, or you've been using it for a while but aren't quite sure how it all actually works, this talk will give you an in-depth understanding of Docker and how to use it locally. We'll cover creating your own Dockerfiles, building, tagging and pushing images, running containers, networking multiple containers with Docker Compose and debugging your setup.

Building a Cloud-Friendly Application
Talk by Larry Garfield in Track B (45 minutes)

The days of hand-crafted artisanal servers are long over. Modern web applications need to be able to run on many different servers without code changes. Not just different hosting providers, but different environments on the same hosting provider. Whether you're using a legacy dev/stage/prod setup or a modern branch-is-environment host, modern hosting imposes some requirements on your application design but also offers a huge potential for new and powerful tools. In this session, we'll explore some key guidelines for building a cloud-friendly application, as well as look at some architectural options that a modern hosting platform enables.

MySQL 8 -- A New Beginning
Talk by Dave Stokes in Track A (45 minutes)

MySQL 8 is a major redesign of the most popular database on the web. it will have a true data dictionary (no more .frm, MYI, or other little files) which means you can have millions of tables within a schema. Windowing Functions and Common Table Expressions are available, multi plane character support (because you need emojis in your data), user roles, more JSON functions, and big optimizer improvements. And there will be a better 'out of the box' user experience. And you will learn what happened to MySQL 6 and MySQL 7. Slides:

Generators: All About the Yield
Talk by Justin Yost in Track B (45 minutes)

Generators are a relatively unexplored feature of PHP. Coming about in PHP 5.5, Generators provide for the ability to write Iterator style code without a lot of upfront work. In addition to that Generators provide for some amazing abilities to write coroutines in PHP that we previously didn't have. Generators are at their core a tool to enable us to write code that can solve entire classes of problems that beforehand would have been exceedingly hard to do before hand. Perhaps most importantly, generators are fun to explore.

Lunch in Track A (1 hour)


13:30 Lets Encrypt All The Things: HTTPS At Scale
Talk by Philip Sharp in Track A (45 minutes)

The push for a more secure web got a boost two years ago when Let’s Encrypt--a free, automated certificate authority--was made available to everyone. It only takes a command-line tool and a few keystrokes to securely serve almost any website. But what does it take to secure 10,000 websites? Let’s see what it takes while detailing the available PHP tools, the changes in process and architecture needed to handle a large number of domains, and the inevitable surprises that appear.

Dependency Injection For Mere Humans
Talk by Ian Littman in Track B (45 minutes)

What's the difference between service location and dependency injection? Why is this dependency injection thing such a big deal anyway, and how do you use that tool correctly? I'll answer these questions and more, including real-world examples of refactoring an application toward the more explicit, testable, closer-to-SOLID applications.

The Open Source Talk That Changed My Life Wasn't Technical
Talk by Joe Ferguson in Track A (45 minutes)

The first PHP conference I ever went to changed my life. I saw Ed Finkler talking about his struggles with mental health issues. I related so well with everything he said and was shocked to find out not everyone feels this way. Come learn about Open Sourcing Mental Illness, a nonprofit built on a movement of changing how we talk about mental health in the tech community. We'll talk about survey results from multiple years of OSMI's Mental Health In Tech surveys showing how employees feel about discussing mental health issues with employers and coworkers. We'll talk about resources, where and how to find help. The most important thing is to know you're not alone.

20k Lines Under the C: A Guide to the PHP Startup Process and Hooking Absolutely Everything
Talk by Joe Rozner in Track B (45 minutes)

Have you ever wondered how super globals get initialized or been curious what happens before your code is turned into an http response? Have you ever wanted to add a new feature to PHP that you could deploy across all the applications hosted on a server? 20k Lines Under the C dives deep into the source of the PHP runtime, extension APIs, and parts that make it translate your code into web pages. We’ll begin by looking at how web servers provide PHP the request information. We’ll follow the startup process making stops along the way pointing out the internal structure and key parts during execution where various data is initialized and processed. Through this journey we’ll learn about some of the special data types that PHP exposes and the APIs used to interact with them. Finally we’ll explore the the different types of PHP integrations and explore how to insert hooks into just about everything providing ways to inspect and change the behavior.

15:30 Database Theory and Modeling: A Crash Course
Talk by Elizabeth Marie Smith in Track A (45 minutes)

Wouldn't it be great if everyone had a DBA to design and manage data for you? Most places don't have this luxury, instead the burden falls on the developer. Your application is awesome, people are using it everywhere. But is your data storage designed to scale to millions of users in a way that's economical and efficient? Data modeling and theory is the process of taking your application and designing how to store and process your data in a way that won't melt down. This talk will walk through proper data modeling, choosing a data storage type, choosing database sofware, and architecting data relationships in your system. We'll also walk through "refactoring data" using normalization and optimization.

Building a GraphQL API In PHP
Talk by Andrew Rota in Track B (45 minutes)

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

16:30 Greener Pastures: Infrastructure from the Ground Up
Talk by Steve Grunwell in Track A (45 minutes)

In late 2016, I left my comfortable agency position as a Lead Web Engineer to join a small media startup as its first Director of Technology. One of the major draws to the startup was its complete lack of technical debt: I'd be in charge of deciding everything we used, from hosting platforms, platforms, and office tools. The opportunity was perhaps the greenest of fields I had ever laid eyes upon. While the company ended up not being the right fit for me, the lessons learned from researching, evaluating, and deploying the solutions have informed recommendations and decisions in my career post-startup. Attendees will gain insight into the technology needs and available solutions for a small, web-based publisher, and the criteria that led to each decision.

Webpack Encore: Pro JavaScript and CSS for Everyone!
Talk by Ryan Weaver in Track B (45 minutes)

Ready to write an amazing front-end for your app? There are so many great tools, like React, Vue.js, module loaders, Sass, LESS, PostCSS and more. But, they all have one thing in common: you need to configure a build system before you write a single line of code! Thankfully, there's Webpack: the leading tool for processing & bundling your JavaScript and CSS. There's just one problem: configuring Webpack is tough and requires a lot of Webpack-specific knowledge. Say hello to Webpack Encore: a library built by Symfony (but independent of Symfony) to quickly bootstrap a sophisticated asset setup, complete with minification, SASS processing, automatic versioning, Babel support and everything you need to start writing great JavaScript quickly. In this talk, we'll also learn about using JavaScript modules, how to bootstrap a framework (like React) and other important modern practices. Give your assets a huge boost with Webpack Encore!

After Party / Game Night in Track A (2 hours, 30 minutes)

Salon C/D

Saturday 28th July 2018

They are Watching You
Talk by Chris Tankersley in Track A (45 minutes)

Humanity has seen an explosion of technology over the span of almost no time. We have gone from computers being mechanical devices for crunching trajectories to computers making decisions on whether or not we are dressing fashionably. We have also seen an explosion of services that resolve around massive amounts of data about ourselves. Programmers just like us are building these systems. What are our moral obligations to the technology that we are building? Strap on your tinfoil hat and [REDACTED]

In 2018, PHPUnit isn't enough -- complementary tools for test-centric workflows
Talk by Chris Hartjes in Track B (45 minutes)

This conference used OpenCFP, an open source PHP web application for accepting talk proposals. As the lead developer on the project, I wanted to make sure I was releasing code into production that was good enough to share with others with minimal friction. Being someone who is way deep into testing, I discovered that having tests wasn't enough to ensure the quality I was looking for. In this talk I'll share my thoughts on some tools that I think complement a good test suite: * continuous integration tools * mutation testing * static code analysis * code style checkers * and also discuss the growth of the project and how we successfully integrate submissions from developers around the world. If you're looking to apply some structure to your development workflow, these tools and concepts are a great place to start!

Erasing the Stigma: Mental Health in Tech
Talk by JD Flynn in Track A (45 minutes)

Many developers, including myself, deal with mental health issues, yet mental health in the developer community is often overlooked, hidden, or swept under the rug. Too many of us suffer in silence and end up hurting our professional and personal relationships, or even worse, ourselves. What can be done to help de-stigmatize mental health issues? How can we, as a community, band together to help those of us with mental health issues feel more welcome in tech? Together, we can work to Erase the Stigma associated with mental illness.

Managing Technical Debt
Talk by Adam Culp in Track B (45 minutes)

Every change to a codebase increases technical debt leaving it less stable, bug-prone, and closer to technical bankruptcy requiring a rewrite. Let's explore how to measure technical debt to gain a score and highlight the current condition of a PHP application. We will then introduce simple steps for improving code quality, deliver new features faster, and lower project stress.

11:00 Git: The Pain and the Gain
Talk by Justin Yost in Track A (45 minutes)

Git is a standard hammer in our toolkit as programmers. But what all is Git good for, and more importantly what are the ways to use Git? We'll uncover the basic workflows with Git and come to realize there's no right way to work with Git there's only the way that maybe makes you the least frustrated some of the times. This talk is formed with the basis of working with numerous Git patterns and trying it all to attempt Git nirvana and realizing nothing comes close for everyone.

Building Your API for Longevity
Talk by Mike Stowe in Track B (45 minutes)

One of the greatest challenges to developing an API is ensuring that your API lasts. After all, you don’t want to have to release and manage multiple versions of your API just because you weren’t expecting users to use it a certain way, or because you didn’t anticipate far enough down the roadmap. In this session we’ll talk about the challenge of API Longevity, as well as ways to increase your API lifecycle including having a proper mindset, careful design, agile user experience and prototyping, best design practices including hypermedia, and the challenge of maintaining persistence.

Lunch in Track A (1 hour)


MySQL Without The SQL -- Oh My!
Talk by Dave Stokes in Track A (45 minutes)

Need to store schema-less data or do you need a data store but do not know structured query language (SQL)? The MySQL Document Store allows developers with NoSQL skills to use the popular database as a NoSQL database. The new X DevAPI greatly broadens the usefulness of the MySQL database for those who do not want to write SQL queries. Languages supported include JavaScript, C++, Java, Node.JS, PHP, Python, and more. This presentation has lots of programming examples and a demo of the new MySQL Shell. Slides. At

SOLID In Practice
Talk by Jessica Mauerhan in Track B (45 minutes)

SOLID - a set of concepts for designing maintainable and understandable software - yet some of these ideas can be hard to understand themselves. Scholarly definitions and generic examples of these are often still confusing and not applicable to real world applications. By taking a look at an actual application, we'll explore these principles in action, and demonstrate the benefits of following them.

14:15 The container is a lie!
Talk by Larry Garfield in Track A (45 minutes)

Containers are all the rage these days. They’re fast, they make deployment easy, they handle dependencies, they slice, they dice, they make julienne fries! But… what are they? What exactly is a container and how does it work? Just how does a container differ from the “old” silver bullet, virtual machines? Here’s a hint: It has nothing to do with boats, or whales, or shipping. That’s all marketing fluff. Containers are simply a shorthand name for leveraging newer features of operating system kernels that let the OS lie to programs about how they’re running. In fact, all of modern software is built on lies. That’s what’s useful about it! To understand how that works, why it’s so useful, and where it’s not, let’s dive into how software actually works on a modern Linux system to see how those kernel features fit into the big picture, building up to “containers” along the way. Pull back the veil of lies and see how your computer really works.

Building for the PHP Command Line Interface
Talk by Steve Grunwell in Track B (45 minutes)

Executing PHP from the command line enables us to interact with our applications in new and interesting ways: from performing site maintenance to scaffolding new projects, CLI tools like WP-CLI, Artisan, and Drush make it easy to interface with our code without ever opening a browser. Attendees will be introduced to popular PHP CLI tools and their default capabilities. We'll discuss characteristics of good CLI scripts, strong use-cases for writing custom commands, then write several CLI programs across different platforms.

15:15 Welcome to the Internet - We have packets!
Talk by Elizabeth Marie Smith in Track A (45 minutes)

A crash course in the history, theory, and implementation of the internet of today. Learn about TCP/IP, headers, packets, HTTP both 1 and 2, and all the glorious technology that makes web developers tick. Finally take a dive into sockets and peek a bit into hardware, and understand why no matter how fat your vm is why you still run out of socket connections. All the things DARPA folks wish you knew before you wrote that first webapp.

Load Testing Your App
Talk by Ian Littman in Track B (45 minutes)

Want to find out which pieces of your site break down under load first, so you know how you'll need to scale before your systems catch fire? Load testing answers this question, and these days you can simulate full user behavior in a load test, rather than merely hammering a single endpoint. We'll look at K6, a FOSS tool that does exactly this, pointing it at a garden-variety web app to see what we need to optimize in order to allow our site to withstand a level of traffic that some folks might say is a good problem to have.

I Community and So Can You
Keynote by Margaret Staples in Track A (1 hour, 15 minutes)

"Community" is a term often bandied about in tech circles, but what does it mean? Where is this community? What is Community's hit point max, magic rating, and XP to next level? Does it have special abilities? How can individuals best connect with, contribute to, and benefit from the greater technical community? And also what is the end goal? So many questions! I don't have all of the answers but I may have a few, so join us and let's share some community skillz.