• PHP on Lambda with Custom Runtimes - MergePHP January 2024

    It's 2024 and, while AWS still doesn't have an official PHP runtime for Lambda, it doesn't need one thanks to both custom runtime and container support in Lambda. This talk will show you how Lambda custom runtimes work, how to build one that speaks PHP, and how to set up Lambda to either handle web requests or hook into other AWS services to process jobs in a highly elastic manner. As a bonus, you'll see how things work with Lambda's Docker container support, as well as with Bref, the tooling you'll likely want to use if you choose to deploy PHP Lambdas in production without restoring to e.g. Laravel Vapor.

  • Longhorn PHP 2023 Friday Afternoon Announcements

  • API Design Patterns for the REST of US - MergePHP May 2023

    If you've spent long enough writing web applications, you've had firsthand experience with an API, whether internal or external, that leaves you scratching your head at best and banging your head against the keyboard at worst. To be fair, it takes more than exposing your application's database via a CRUD interface to get an API that's truly a joy to work with. We'll look at patterns, affecting everything from HTTP methods to versioning, from authentication to response codes, that'll make your API happily boring rather than uniquely frustrating. Including when to use REST, and when to pick a different design pattern that better suits the task at hand.

  • API Design Patterns for the REST of US - php[tek] 2023

    If you've spent long enough writing web applications, you've had firsthand experience with an API, whether internal or external, that leaves you scratching your head at best and banging your head against the keyboard at worst. To be fair, it takes more than exposing your application's database via a CRUD interface to get an API that's truly a joy to work with. We'll look at patterns, affecting everything from HTTP methods to versioning, from authentication to response codes, that'll make your API happily boring rather than uniquely frustrating. Including when to use REST, and when to pick a different design pattern that better suits the task at hand.

  • Dependency Injection for Mere Humans - php[tek] 2023

    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.

  • PHP on Lambda with Custom Runtimes - PHP UK 2023

    At re:invent 2018, Amazon released custom runtime support and Layers for their Lambda function-as-a-service runtime. With this release, the fact that the company still doesn't have an official PHP Lambda runtime becomes more or less irrelevant, since we as developers can create our own without undue overhead. This talk will show you how Lambda custom runtimes work, how to build one that speaks PHP, and how to use pre-built custom runtime layers for either one-off job processing or behind a load balancer or API Gateway to serve web traffic with extreme infrastructure elasticity.

  • Dependency Injection for Mere Humans - PHP UK 2023

    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.

  • Under the Hood at a 3000+ User Mastodon Server - 12 Clouds 2022

  • What's New in PHP 8.2 - MergePHP December 2022

  • Longhorn PHP 2022 Opening Announcements

  • A Real-World Startup Stack - Dog Days 2022

  • Container-Native Without k8s: PHP in ECS on AWS - Cloud Austin May 2022

    When building Covie, I got to pick our tech stack, including where and how to run it. The choice was containerized on ECS with AWS, starting on Fargate…and so far, so good. We’ll walk through how to set this stack up, with some tips and tricks along the way.

  • Levelling Up Your Web Scraping Game - PHP UK 2022

  • Container-Native Without k8s: PHP in ECS on AWS - PHP UK 2022

    When building Covie, I got to pick our tech stack, including where and how to run it. The choice was containerized on ECS with AWS, starting on Fargate…and so far, so good. We’ll walk through how to set this stack up, with some tips and tricks along the way.

  • Container-Native Without k8s: PHP in ECS on AWS - MergePHP February 2022

    When building Covie, I got to pick our tech stack, including where and how to run it. The choice was containerized on ECS with AWS, starting on Fargate…and so far, so good. We’ll walk through how to set this stack up, with some tips and tricks along the way.

  • ECS + Fargate, In Production - 12 Clouds 2021

  • What's New in PHP 8.1 - MergePHP December 2021

  • Leveling Up Your Web Scraping Game - July 2021

  • Levelling Up Your Web Scraping Game - NomadPHP June 2021

  • PHP 8.0 Highlights - azPHP November 2020

  • What's New in PHP 8.0 - PHPDX November 2020

  • What's New in PHP 8.0 - MergePHP November 2020

  • Don't Fear the OAuth - PHPSW May 2020

  • Don't Wait; Generate! - MidwestPHP 2020

    Generators, which have been around since PHP 5.5 and got a lot better with PHP 7, take a lot of the angst out of asynchronous programming in PHP. In this talk I'll explain the basic concepts that you'll need to grok generators, then apply our new-found knowledge to turn an I/O-bottlenecked web app into a concurrent, performant one via the AMPHP family of libraries.

  • Building Encrypted Systems Worth Their Salt - MidwestPHP 2020

    Thanks to libsodium's availability in PHP as of 7.2, and the Halite userland library on top of it, building cryptographically secure applications in PHP has never been easier. We'll look at functionality made available to Halite, and use it to build a secure file storage application where full database and app server file system access doesn't allow for in-the-clear file reads.

  • Load Testing Your App - Laravel Austin March 2020

    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. In this talk, we'll go through a number of conceptual points that you won't want to miss in order for your load tests to perform their intended purpose, as well as jump into implementation details, using the K6 load test tool to build a load test that exercises an application in a way that's similar to what we'd see in real life.

  • PHP on Lambda with Custom Runtimes - ConFoo Montreal 2020

    At re:invent 2018, Amazon released custom runtime support and Layers for their Lambda function-as-a-service runtime. With this release, the fact that the company still doesn't have an official PHP Lambda runtime becomes more or less irrelevant, since we as developers can create our own without undue overhead. This talk will show you how Lambda custom runtimes work, how to build one that speaks PHP, and how to use pre-built custom runtime layers for either one-off job processing or behind a load balancer or API Gateway to serve web traffic with extreme infrastructure elasticity.

  • Load Testing Your App - ConFoo Montreal 2020

    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. In this talk, we'll go through a number of conceptual points that you won't want to miss in order for your load tests to perform their intended purpose, as well as jump into implementation details, using the K6 load test tool to build a load test that exercises an application in a way that's similar to what we'd see in real life.

  • PHP on Lambda with Custom Runtimes - NomadPHP US February 2020

    At re:invent 2018, Amazon released custom runtime support and Layers for their Lambda function-as-a-service runtime. With this release, the fact that the company still doesn't have an official PHP Lambda runtime becomes more or less irrelevant, since we as developers can create our own without undue overhead. This talk will show you how Lambda custom runtimes work, how to build one that speaks PHP, and how to use pre-built custom runtime layers for either one-off job processing or behind a load balancer or API Gateway to serve web traffic with extreme infrastructure elasticity.

  • Don't Fear the OAuth - PHPBenelux 2020

  • Don't Fear the OAuth - AustinPHP January 2020

  • Looking into the Illuminate Container - Bulgaria PHP 2019

    If you use Laravel, you’re taking advantage of a feature-filled, somewhat complex depedency injection container. In this presentation we’ll pull back the curtain on the magic behind the container’s auto-wiring, contextual binding, and other such features, stopping along the way to highlight upgrades that the package has gotten over succesive versions of Laravel since 5.5. If you aren’t a Laravel dev and need to dependency-inject your application, you might even come out of this presentation deciding that the Illuminate container is the best solution for your particular use case!

  • Load Testing Your App - CascadiaPHP 2019

    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. In this talk, we'll go through a number of conceptual points that you won't want to miss in order for your load tests to perform their intended purpose, as well as jump into implementation details, using the K6 load test tool to build a load test that exercises an application in a way that's similar to what we'd see in real life.

  • Dependency Injection for Mere Humans - NomadPHP 2019

    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.

  • Eloquent Internals By Example - Laravel Austin August 2019

  • Load Testing Your App - PHP Serbia 2019

    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. In this talk, we'll go through a number of conceptual points that you won't want to miss in order for your load tests to perform their intended purpose, as well as jump into implementation details, using the K6 load test tool to build a load test that exercises an application in a way that's similar to what we'd see in real life.

  • Load Testing Your App - AustinPHP March 2019

    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. In this talk, we'll go through a number of conceptual points that you won't want to miss in order for your load tests to perform their intended purpose, as well as jump into implementation details, using the K6 load test tool to build a load test that exercises an application in a way that's similar to what we'd see in real life.

  • Load Testing Your App - MidwestPHP 2019

    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. In this talk, we'll go through a number of conceptual points that you won't want to miss in order for your load tests to perform their intended purpose. Then we'll jump into implementation details, using the K6 load test tool to build a load test that exercises an application in a way that's similar to what we'd see in real life.

  • A Look Inside the Illuminate Container - Laravel Austin March 2019

  • API Design Patterns for the REST of US - Warecraft 2019

    If you've spent long enough writing web applications, you've had firsthand experience with an API, whether internal or external, that leaves you scratching your head at best and banging your head against the keyboard at worst. To be fair, it takes more than exposing your application's database via a CRUD interface to get an API that's truly a joy to work with. We'll look at patterns, affecting everything from HTTP methods to versioning, from authentication to response codes, that'll make your API happily boring rather than uniquely frustrating. Including when to use REST, and when to pick a different design pattern that better suits the task at hand.

  • What's New in PHP 7.3 - SunshinePHP 2019 Uncon

    PHP 7.3 is out! Let's talk through some of the things that are new, changed, or removed in the newest version of PHP!

  • Dependency Injection for Mere Humans - SunshinePHP 2019

    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.

  • Don't Wait; Generate! - PHPBenelux 2019

    Generators, which have been around since PHP 5.5 and got a lot better with PHP 7, take a lot of the angst out of asynchronous programming in PHP. In this talk I'll explain the basic concepts that you'll need to grok generators, then apply our new-found knowledge to turn an I/O-bottlenecked web app into a concurrent, performant one via the AMPHP family of libraries.

  • Dependency Injection for Mere Humans - PHPBenelux 2019

    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.

  • PHP On Lambda - AustinPHP January 2019

  • What's New in PHP 7.3 - AustinPHP December 2018

    PHP 7.3 is out! Let's talk through some of the things that are new, changed, or removed in the newest version of PHP!

  • (Ab)using process control for powerful CLI applications - AustinPHP October 2018

  • Don't Wait; Generate! - ScotlandPHP 2018

    Generators, which have been around since PHP 5.5 and got a lot better with PHP 7, take a lot of the angst out of asynchronous programming in PHP. In this talk I'll explain the basic concepts that you'll need to grok generators, then apply our new-found knowledge to turn an I/O-bottlenecked web app into a concurrent, performant one via the AMPHP family of libraries.

  • (Ab)using process control for powerful CLI applications - CascadiaPHP 2018

  • Load Testing Your App - PHPDetroit 2018