Join us for the first San Diego based PHP community conference. The weather here is ALWAYS amazing.

Wednesday 19th September 2018

Double Loop: TDD & BDD Done Right
Workshop by Jessica Mauerhan in La Jolla Room (3 hour)

Do you TDD or BDD? Why not both? Come learn the "Double Loop" workflow and discover how you can use both Behavior Driven Development and Test Driven Development to write well designed, tested and documented code. In this tutorial, we'll create a small application using PHP, Postgres and Javascript (all in Docker), fully designed and tested with Behat and PHPUnit.

Building PHP Daemons & Long Running Processes
Workshop by Tim Lytle in Torrey Pines Room (3 hour)

In this hands on workshop, you'll learn how to stop abusing cron, and easily daemonize a php script that responds responsibly to process signals. There are things you don't want to, or can't do inside a web request. It could be a task that needs to be retired if it fails, maybe one that takes a significantly long time to process, or multiple jobs that need to be processed over time. Whether you're sending an email, processing a video, or consuming Twitter's streaming API - you should be using a separate process, and probably a daemon.

Docker & PHP: Development through Production
Workshop by TJ Miller in La Jolla Room (3 hour)

A guided tour through my Docker workflow from development through production. We'll take a look at all the moving pieces and walk through the decisions that were made. In this workshop, we'll walk through setting up a similar workflow from an empty editor.

Build a SPA with Vue JS
Workshop by Daniel Abernathy in Torrey Pines Room (3 hour)

This tutorial will explore Vue JS in depth by building a Single Page App. We'll start with a simple PHP (Laravel) application and convert it into a Vue SPA. In the process we will cover a variety of topics: - Using Laravel Mix to simplify project setup - Vue basics - syntax, directives, control structures, reactivity, etc - Templating options, single-file Vue components - Application structure & parent-child component communication - Vue Router - Transitions - State management with Vuex Familiarity with Vue JS will be helpful but not necessary. Experience with JavaScript is a must.

Thursday 20th September 2018

Groupies, Roadies, Rockstars: The roles we play in opensource
Keynote by Cal Evans in La Jolla Room (50 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.

10:00 Building for the PHP Command Line Interface
Talk by Steve Grunwell in La Jolla Room (50 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.

Silence is Deadly
Talk by Amanda Folson in Torrey Pines Room (50 minutes)

1 in 5 people are depressed, anxious, bipolar, or otherwise living with a mental illness. For every two homicides committed in the United States, there are three suicides. 40,000+ people lose their battle with depression each year. Depression kills, and it kills so silently that after someone’s gone you may never know they were sick. Those who survive a loss are hurt. Those who survive an attempt are shamed. It’s time to end the stigma surrounding mental health and start encouraging those who are struggling to seek help. More importantly, we need to let those who struggle know they’re not alone -- this starts with us.

11:00 Refactoring Legacy Code
Talk by Adam Culp in La Jolla Room (50 minutes)

Faced with legacy PHP code many decided to rewrite, thinking it will be easier, for many reasons this can be wrong. Adam Culp will talks about the entire journey of refactoring a legacy PHP codebase. We will begin with assessment and why, cover planning how and when, discuss execution and testing, and provide step-by-step examples. Attendees will gain insight and tips on how to handle their own pile of code and refactor happy.

Let’s Build a ChatBot!
Talk by Marcus Moore in Torrey Pines Room (50 minutes)

Chatbots can be a helpful way to provide or gather information from users in an interactive format and building your own chatbot might be easier than you think. This session will cover how to use PHP to create chatbots that can be interacted with through text or voice over SMS, Slack, Facebook Messenger and more.

13:00 Building a CI/CD pipeline for PHP applications
Talk by Juan Manuel Torres in La Jolla Room (50 minutes)

In many organizations, releasing a new version of an application is an enormous undertaking: 1. Infrastructure needs to be in place 2. The code needs to be built (install dependencies, compile code, generate assets, etc.) 3. The code needs to be tested 4. The code needs to be configured 5. The code needs to be deployed The objective of this talk is to show you how to establish a process to merge and deploy code using best practices. In the process, we will define a system to continuously deploy a PHP application without breaking the bank.

Modernize your productivity
Talk by Oscar Merida in Torrey Pines Room (50 minutes)

If you're a freelancer, solo developer in a company, or just a small team you know there's never enough time to do everything. But that doesn't mean you have to sacrifice quality just to ship good code. In this talk, I'll share the tools and practices which will help you ramp up your productivity so you can write better code and make sure it works. We'll look at tools like version control systems (git), getting started with testing, automating deployments, assessing code quality, and more.

MySQL 8 -- A new beginning
Talk by Dave Stokes in La Jolla Room (50 minutes)

MySQL is a major leap forward from the very popular MySQL 5.7! A true data dictionary provides atomic DDL and allows millions of tables in a schema. Common Table Expressions and Windowing Functions make it much easier to write complex queries and provide analytics. Add in roles, invisible indexes, histograms to improve the performance of secondary indexes, three dimensional graphical information support, and much more provide a robust, secure data store for your projects. Plus find out what happened to MySQL 6 and MySQL 7.

Accessibility for Everyone
Talk by Beth Tucker Long in Torrey Pines Room (50 minutes)

It is important to reach every last customer, but there are a lot of customers out there for whom the web is not an easy quick-stop. Your target audience contains people who need visual or motor assistance whether they have a specific condition that affects them or are just part of the very large and aging Baby Boomer generation. Learn some tips for evaluating the accessibility of your site, and find out how to broaden your site's appeal while making the web a more accessible place for everyone.

You Dont Know Git
Talk by Jason McCreary in Torrey Pines Room (50 minutes)


15:00 Producer/Consumer Programming
Talk by Ed Barnard in La Jolla Room (50 minutes)

Producer/Consumer programming is a great technique for offloading work from your main application. You can scale resources to meet increased demand. You can "smooth out" spikes by placing your backlog in a queue. You can set aside long-running tasks such as thumbnail generation. We'll develop a simple CakePHP application that produces and consumes via a free CloudAMQP (RabbitMQ) account. Although we use CakePHP, the principles are universal to any modern PHP framework.

Virtual Machine, Container, or Serverless
Talk by Terrence Ryan in Torrey Pines Room (50 minutes)

One of the first challenges of moving your workloads to the Cloud is figuring out which three major flavors of computing technology to use: virtual machines, containers, or what is being called serverless. Each of these tools has its niche, its hype, and its downside. This session will tour application scenarios, discuss how each technology would handle them, discuss peculiar workloads, consider the tradeoffs, and leave you with recommendations for which one to pick.

16:00 PHPUnit: A Beginner's Guide
Talk by Brian Johnson in La Jolla Room (50 minutes)

This talk provides an introduction to PHPUnit suitable for someone with no PHPUnit experience, and little to no unit testing experience. It uses a test-driven development example to demonstrate writing test cases, simple assertions and constraints, mocking, data providers, and testing exceptions and PHP errors. Also covered is installation of PHPUnit via Composer, built-in code coverage capability, and a brief discussion of command line options and configuration. At the conclusion of this presentation, the audience is capable of starting a Composer-managed project from scratch, and implementing meaningful, test-driven development.

Friday 21st September 2018

Modern and Secure PHP
Talk by Ben Edmunds in La Jolla Room (50 minutes)

This is not the PHP of old. Learn what's changed in the PHP world over the last few years. Classes, objects, statics, traits, unit testing, composer, password hashing; it's a whole new ballgame. Learn what has changed in the PHP world over the last several years. We'll cover The newest PHP language features. Community efforts such as the PHP Framework Interoperability Group, Composer, and PHP the Right Way. How to secure your application using up to date techniques.

Getting Kids Involved in Programming
Talk by Beth Tucker Long in Torrey Pines Room (50 minutes)

Want to share your love of programming with a child in your life or in your neighborhood, but aren't sure where to start? We'll cover some of the great programs, toys, games, and apps out there to help kids of all ages get started with programming concepts and coding. We'll discuss what is developmentally appropriate for various age groups and introduce you to some great educational organizations as well. Share your joy with the next generation!

10:00 DevOps For Small Teams
Talk by Joe Ferguson in La Jolla Room (50 minutes)

DevOps is a large part of a company of any size. In the 9+ years that I have been a professional developer I have always taken an interest in DevOps and have been the "server person" for most of the teams I have been a part of. I would like to teach others how easy it is to implement modern tools to make their everyday development and development processes better. I will cover a range of topics from "Stop using WAMP/MAMP and start using Vagrant", "version control isn't renaming files", "Automate common tasks with shell scripts / command line PHP apps" and "From Vagrant to Production".

Developing SOLID applications with PHP
Talk by Juan Manuel Torres in Torrey Pines Room (50 minutes)

S.O.L.I.D. are a popular set of Object Oriented Programming principles aimed to help you write more extensible, maintainable code. But how close do you follow any of these principles? Join this session and learn the concepts behind SOLID, and how to take advantage OO practices (low coupling, high cohesion, and strong encapsulation) to help you write code that is easier to read, understand, and maintain.

Intro to Laravel / Laravel 101
Talk by Shawn Mayzes in La Jolla Room (50 minutes)

Getting started with Laravel.

Evented Architectures
Talk by Jesse D in Torrey Pines Room (50 minutes)

So-called "asynchronous" patterns in languages like NodeJS or Scala have gained a lot of traction for their performance profiles in handling concurrent requests and saturating CPU resources. But did you know libev and other event-driven patterns are available in PHP? In this talk, I walk through what an evented architecture is, some of the pitfalls when using one, and how PHP's implementation can solve these problems.

21st Century DNSBLs
Talk by Amanda Folson in La Jolla Room (50 minutes)

The practice of spamming has grown at an alarming rate. The mechanics of creating and managing a blacklist of spammers haven't changed all that much, but the tooling around them has changed drastically. In this talk, we'll discuss how to create a DNS-based blacklist (DNSBL), what tools are available to do so, and how to manage the DNSBL once it's set up. Additionally, we'll discuss how to easily migrate and scale a legacy DNSBL system using Docker and PHP.

Iterators and Decorators and Generators, Oh My!
Talk by Jeremy Lindblom in Torrey Pines Room (50 minutes)

Iterators are an awesome and important feature of PHP, and PHP comes with a lot of them built in too. Let’s talk about what they are, how they’re used, and how to make your own. Then we'll talk about Generators, which were introduced in PHP 5.5, and that take Iterators to the next level. And… we can’t talk about Iterators without also discussing composition and the Decorator design pattern. After all, many of the SPL Iterator classes are Decorators too.

Where's The BeEF?
Talk by Mark MacEwen in La Jolla Room (50 minutes)

Security is an important part of a developer's life and that is especially true when working on the web. We all learn strategies on how to mitigate security problems via defensive programming. But why do we do it? In this talk, Mark will demo the open source Browser Exploitation Framework (BeEF) to show a variety of attacks that can be leveraged through modern browsers.

Managing Technical Debt
Talk by Adam Culp in Torrey Pines Room (50 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.

Writing code that lasts
Talk by Jason McCreary in La Jolla Room (50 minutes)

"BaseCode" is code that communicates. But how do we write BaseCode? In this talk we'll look 10 simple practices that will help you write cleaner, more readable code. We'll see how each one reducing complexity and improves readability. We'll also look some of the common "Code Smells" in PHP and the refactors to clean them up. Don't worry though, we're not just going to "talk". All of these practices and refactors will be done with live coding demos to show you all of the little steps involved so you can start cleaning up your own code.

Testing Like You've Never Tested Before (Because You Haven't)
Talk by Steve Grunwell in Torrey Pines Room (50 minutes)

Testing software in an automated fashion is one of the best ways to guarantee quality, reduce bugs, and prevent regressions in our code, and is a prerequisite to operating in a Continuous Integration environment. Unfortunately, the most difficult parts of testing come right at the beginning: scaffolding a test suite and writing our very first tests. For those who are new to automated testing, these hurdles can prove overwhelming. This talk covers the fundamentals of testing, in a beginner-friendly way. We'll discuss how testing makes software better, the various levels of the Automation Pyramid, how to scaffold some basic unit and integration tests, and discuss the characteristics of great tests.

The New Revolution
Keynote by Samantha Quiñones in La Jolla Room (50 minutes)

In 1969, researchers at Stanford and UCLA collaborated to transmit the first message over what would become the Internet. In just five decades, the repercussions of that moment have echoed through every atom of society. The world is evolving at a pace unprecedented in human history as we use technology to change how we think, learn, communicate, and even how we understand ourselves. Let’s take an inside look at how the fusion of media and technology is reinventing human interaction and the role that we, as engineers and technologists, must play in this important process.