Zendcon 2016 - Talks

10 things you didn't know you could do with Composer

Patrick Schwisow

Over the last four years Composer has changed the way PHP developers work. It figures out which versions of our required libraries work together and installs everything for us, but if that's all you've ever used Composer for, you're missing out. Come learn how and when to use validation, autoload overrides, and other features you've never heard of.

30 PHP tips on IBM i in 60 minutes

Mike Pavlak

Inspired by longtime presenters at the Summit, this discussion looks at the most popular tweaks, hacks, and just plain good practices for the IBM i PHP community to enjoy. Sometimes you just need a shopping list of things to watch for and many of the tips that are scattered throughout these presentations are consolidated in a single place. Performance, security, best practices, and more will be discussed.

A continuous delivery pipeline from the future

Massimiliano Cavicchioli

The session will show how to put together a configuration-based continuous delivery (CD) pipeline, based on Jenkins and Docker.

The exemplified configurations and inherent artifacts will support any PHP application.

All the basic tasks of a PHP-based CD pipeline will be covered:

  • Version control
  • Unit testing
  • Static code analysis
  • Packaging
  • Automated provisioning

A real Zend Expressive application on the IBM i

Clark Everetts

You've heard about Zend Expressive, PSR-7, HTTP messages, and middleware. How about a real Zend Expressive application that starts with CRUD but goes just a bit beyond? How should models invoke RPG, DB2 queries, and SQL stored procedures? Where are "the controllers?" How do we handle issues like sessions, authentication, and access control with middleware? This is not the standard sample application; this one is for you, IBM i developers, with a 5250-based Order Entry/Lookup application to start from as a point of reference.

Agile team development with Zend Studio, Bugzilla, and MyLyn

Peter MacIntyre

Agile (Extreme) development is gaining in popularity. This session will show how Zend Studio for Eclipse can be used in development, exploring integration with Bugzilla and Mylyn, and will cover the latest team development. We'll explore:

  • The concept of Agile
  • MyLyn and its benefits
  • Bugzilla
  • MyLyn's uses within Zend Studio
  • Activating a task in Zend Studio
  • Task preferences

Aphorisms of API design

Larry Garfield

Code that talks only to itself is not useful to anyone. Code that enables other code magnifies its power tenfold.

But how do we enable other code and those who write it? What makes a module extensible? What's that vague extra something that turns merely extensible code into an API, a library, and a cornerstone of other systems? How do we harness that power for ourselves?

We'll examine the aphorisms of good API design, and the eight-fold path of API nirvana. This session goes beyond how to write code well to cover the question of how to write libraries that spawn other libraries and innovation by coding for the future.

Application development for IBM i database server with PHP 7

Shlomo Vanunu

Advance your DB2 for IBM i best practices, and explore the enterprise ibm_db2 SQL extension for PHP 7 in this session.

The ibm_db2 extension provides all the required variety of PHP 7 functions for manipulating data in an IBM i database server.

  • Functions for connecting to a database, preparing and executing SQL statements, fetching and maintaining rows from result sets, calling stored procedures, handling errors, and retrieving metadata.
  • Operations such as, update/ insert/ delete and data definition language (DDL), referred to as a transaction.
  • Commit and rollback with ibm_db2, set up the DB2 for IBM i commitment control that will provide the way to process a group of database changes as a single unit of work.

Asynchronous programming in PHP

Adam Englander

Asynchronous frameworks allow developers to build stateful protocol and Internet of Things applications without threading and forking. Python, Ruby, and Node.js have had asynchronous frameworks for over ten years. PHP is now starting to catch up with Icicle.io. Learn the basic concepts of event-based programming and how the event loop allows a single thread to process all the requests for an application.

Background processing, do's and don'ts

Chuck Reeves

Modern web applications spend a lot of time processing data. From images and video, to big data analysis. To accommodate all this work (without having our users waiting), background processing is key. Even though it seems pretty straight forward, understanding background processing in PHP requires a new way of thinking. We will be going over the different queuing options, their strengths, and the best ways to optimize your code for background processing

Be ready For ZF3

Gary Hockin

Zend Framework 3 is here!

While the upgrade path from ZF2 to ZF3 is nowhere near as complicated as from ZF1 to ZF2, there are still plenty of things the prepared developer needs to know to make upgrading as seamless as possible.

In this session, we'll cover the backwards compatibility breaks and which parts of your application you'll need to rewrite, but also the forward facing changes that are in ZF2 right now that allow you to make many of your changes before you even upgrade to ZF3.

Best Practice Recommendations for Utilizing Open Source Software (from a Legal Perspective)

Dave McLoughlin

Bootstrapping WordPress

Andreas Heigl

WordPress is famous for its five-minute installer. But in a larger environment, it's not the first installation that's interesting but the next few (hundreds) that shall look exactly like the first one. So wouldn't it be great to be able to deploy a WordPress installation in five minutes onto a developer's machine as well as onto a server? And have those identical? With the same configuration and set of plugins and theme?

In this session, Andreas will show how we solved that problem using tools like Git, Composer, Vagrant, and others while still being able to install plugins from wordpress.org via the web interface.

Branching strategies: Choose wisely to minimize costs

Georgiana Gligor

Is your team choosing the branching strategy from the beginning or is it switching after a while to better accommodate the current project stage? How does this affect you and what are the costs involved? Multiply this by the number of repositories, each playing a definite role in a large-scale project, and you will want to know how to minimize the impact.

The branching model needs to be simple - so that everyone involved can grasp it quickly; flexible - so it can serve the needs of very different roles within the project lifecycle; and adaptable - when you have a particular unforeseen need, it should not be a barrier.

See what others are already using, ask a few questions that might drive an adaptation of your choice, and then choose wisely. Then let your team spend their time on coding rather than painfully switching strategies.

Bringing modern PHP development to IBM i

James Titcumb

Zend Server for IBM i has done a great job at allowing enterprise PHP applications to run smoothly on the IBM i platform. But what about developing for the platform? Having recently been hired for a PHP project on IBM i, we wanted to ensure the project was using the best practices possible. This involved embarking on a whole new collaborative journey - uniting expert platform knowledge with bleeding-edge modern PHP development practices. We'll show you the process our team went through on the project to revolutionize the client's development process by introducing database abstraction, unit tests, functional tests, continuous integration, automated deployment, and more.

Bringing old legacy Apps to PHP 7 and beyond

Sammy Kaye Powers

Most developers don't get the luxury of working on a greenfield project using a web framework of their choice. Often times we find ourselves inheriting a legacy codebase or a web app written years ago on a now-defunct web framework. The initial temptation might be, "I'll just rewrite all this in x framework." But hold on my framework friend, a rewrite is costly and is rarely the correct answer. We'll discuss strategies to give that legacy codebase a complete makeover in PHP 7 with incremental changes that keep the business running while improving security, stability, and maintainability of the codebase.

Build web APIs using Zend Expressive, the way to Apigility 2.0!

Enrico Zimuel

In this talk, I'll show how to create web APIs using a middleware architecture with Zend Expressive. I will present different use cases from a simple RPC example to a complete RESTful API with OAuth2 authentication. The ideas presented in this talk will be part of the new architecture of Apigility 2.0 (don't tell anyone!).

Build your framework like Constructicons

Stefan Koopmanschap

While we have a strong offering of full-stack frameworks and microframeworks, the rise of components and libraries combined with Composer allows us to easily build our own framework without reinventing the wheel. In this talk, you'll learn how the total can be more than the sum of the parts, just like how Devastator was stronger than the individual Constructicons in Transformers.

Building custom applications using Joomla! & Fabrik

Tessa Mero

So you need to build a small custom application and want a simple way to build it? Well, Fabrik is a custom application-building component for Joomla! that does the job.

We'll go over all the important areas of Fabrik and show you how to prepare to build a system with relational data, including a database design example.

Attend this session if you want to expand your Joomla! development skills and want to build custom applications for clients using the Joomla! CMS.

We'll go over the basics of the process of systems design as well as MySQL querying.

Building powerful and scalable micro applications with Zend Expressive

Matthew Setter

Zend Expressive is the new shiny framework for building micro applications in PHP. Whether you're building a single page app, an API, or a full-stack application - one backed by container-provided services - Zend Expressive has you covered. In this talk, we'll show you how to build a basic single-page application, then refactor it several times until it uses templating, efficient routing, and a database, with a container providing all the services.

Building rock solid software in the real world

Omni Adams

As a professional developer, you already do all of the best practices. You store your code in source control and write unit tests. You already know all of the patterns and when to use them. Your code is perfect and beautiful. Then you hire another developer. He puts his braces in the wrong place and uses different formatting than you. He keeps committing broken code to your code base. Then you add another two members to your team along with a junior developer. All of your beautiful code is getting ugly, brittle, poorly documented, and hard to maintain. We'll discuss some of the pitfalls and strategies when developing software in the real world, from style guides to code reviews to automated checks that keep your team from imploding in ego-driven angst.

Building tools people love to use

Taylor Otwell

Don't understand why WordPress runs 80 percent of the internet while your perfectly engineered and de-coupled CMS only has 10 users? This talk is for you. Why are some tools popular while others aren't? In this talk, we'll dive into what actually makes a library popular, and how you can give your open source side-project a better chance of succeeding. We'll discuss superpower syntax, the battle between perfection and pragmatism, and code as user experience.

Building your API for longevity

Michael Stowe

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.

Composer for corporate use

Stephan Hochdörfer

It may seem that Composer only makes sense if you open-source your packages, but Composer and its ecosystem can be easily set-up in your corporation for internal use. Let me give you some ideas how to set up and use Composer, Satis, and Jenkins to run your own internal package repository.

Composing PHP applications with middleware

Josh Butts

With the advent of the PSR-7 standard, middleware has become a household name in the PHP ecosystem. This talk will cover middleware architecture concepts including a comparison of how middleware is being used in PHP versus other languages. We'll look at how to leverage middleware concepts to build applications from scratch as well as combine off-the-shelf components using middleware as the glue. Of course, we'll also look at some downright dirty tricks that middleware lets you get away with as well.

Console Apps: php artisan forthe:win

Joe Ferguson

Laravel is a great framework to use for web applications but what if you need to do more? What if you need to process data that would take longer than an HTTP request would allow?

Come learn how to harness the power of the console in your Laravel applications to do various tasks such as caching data from 3rd party APIs, expire old content from S3 or other data store, and batch process huge data sets without users having to wait for results. You can even automate tasks such as backing up your remote databases before you run migrations with artisan commands.

We'll cover creating basic artisan console commands, adding options and passing input, setting up cron jobs and scheduling our console commands to run at specific times, and how you can utilize 3rd party APIs to create fun automated message processing for social media networks.

Containing chaos with Kubernetes

Terrence Ryan

Okay, you've made the move to containers and can now write Dockerfiles for everything. How do you manage all of those containers? Have you found that you traded managing individual machines for managing individual containers?

Kubernetes, an open source container orchestration engine, can be your answer. We'll explore Kubernetes and see how you can use it to run massive collections of containers that fix their own problems and allow you to move your setup wherever you need to be.

Conversational commerce and Magento: Breaking new ground with Facebook, Alexa, and Slack

Phillip Jackson

Commerce is evolving and with it, our toolkits are evolving to leverage using Magento in situations that fall outside the online shopping cart experience.

Slack and Facebook messenger allow contextual opportunities for purchase decisions (see: Tacobot by Taco Bell). Amazon's conversational toolkit, Alexa, provides written and spoken-word integration behavior to allow you to connect your Magento store. This talk will focus on building new technologies onto your Magento stack that leverages new frontiers.

  • Deep learning
  • Contextual commerce
  • Conversational commerce

Create PHPantastic packages

Matthew Weier O'Phinney

You've created a solution in a niche problem space, and now want to open source it; how do you go about doing so? What license will you choose? How will you prevent backwards compatibility breaks? How will you ensure consistency amongst diverse contributors? In this session we'll go over the various aspects of good package design and tools you can use to ensure great quality and collaboration.

Curing the common loop (with collection pipelines)

Adam Wathan

Trying to understand a complex function full of nested loops and conditionals is like trying to read a "choose your own adventure" book from front to back.

In this whirlwind tour of programming with collection pipelines, we'll learn how to use functional programming ideas to break down complex code and abstract hidden duplication behind expressive higher order functions.

Together we'll refactor ugly, complicated spaghetti into a series of simple, elegant transformations; free of loops, complex conditionals, and temporary variables. Never write another loop again.

Database optimization for web developers

Steve Meyers

Most developers are developers, not DBAs, yet many smaller companies have inadequate database experience in-house. This is largely because databases like MySQL and PostgreSQL don't necessarily require a full-time DBA to administer. It's become more important for developers at smaller companies to have some basic knowledge of how to keep their database happy.

Debugging effectively

Colin O'Dell

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

Debugging your web application on IBM i from A to Z (Apache to Zend)

Stephanie Rabbani

500 internal server error? Wait, now it's a 404 error. I think it's actually a syntax error. And now my program call isn't returning anything.

Attend this session to hear tips and tricks on how to debug your web application on IBM i, including:- Analyzing Apache logs and Apache server issues.

  • Debugging your program calls and Toolkit issues
  • Debugging db2 and library list issues
  • Using Z-Ray to analyze your code and Zend debugger to step through your code
  • Setting up your SSL certificate

Directory authentication with LDAP

Andreas Heigl

In an enterprise environment, information is often stored in a directory service - whether ActiveDirectory, OpenDirectory, or any other - but it can be difficult to access that information. We can use LDAP to integrate authentication and authorization from that directory service into our applications. This session will tell you everything you need to know. Learn the history of LDAP, why it's different from other storage systems, and see how it can be used to easily fetch information and handle authorization.


Patrick Schwisow

Once you've been around for a while, people (hopefully) start to look up to you and you may find yourself bestowed with the coveted title of Senior. All is well with the world, until your team leader takes a position elsewhere, and you're asked to cover some of his duties. Before you realize it, you're planning projects, running the day-to-day operations of the team, answering all the questions, and still trying to produce quality code at the same pace as before. It's tough enough to transition from developer to manager in an ideal situation, but being stuck somewhere in the middle has a whole additional set of challenges. I'll discuss these challenges and how to successfully handle them until everything settles down (whether that means you move to management or go back to the code).

Does your code measure up?

Adam Culp

After days, weeks, or months of coding, many developers don't know how to gauge the quality of their code. Adam will introduce tools to grade, benchmark, and analyze PHP code in an automated fashion allowing developers to write better quality software. He will explain key metrics to help understand what may need to be refactored and use code smells to point out bugs before end users discover them. Attendees will see how to use these tools, know where to find them, and be able to implement them in their own workflows.

Drupal 8: The crash course

Larry Garfield

One of the most widely-used and mature content management systems on the planet, Drupal runs more than one in 50 websites in the world. However, it has always been something of an odd duck, with an architecture and design very different than anything else in PHP.

Enter Drupal 8: Almost a complete rewrite under the hood, Drupal 8 is a modern, PHP 5.5-boasting, REST-capable, object-oriented powerhouse. Now leveraging 3rd party components from no less than nine different projects, Drupal 8 aims to be the premiere content management platform for PHP.

But how do you use all this new-fangled stuff? This session will provide a walkthrough of Drupal's key systems and APIs, intended to give developers a taste of what building with Drupal 8 will be like.

Note: Prior familiarity with Drupal 7 is helpful but will not be assumed.

ELK: Ruminating on logs

Mathew Beane

We're talking about serious log crunching and intelligence gathering with Elastic, Logstash, and Kibana.

ELK is an end-to-end stack for gathering structured and unstructured data from servers. It delivers insights in real time using the Kibana dashboard giving unprecedented horizontal visibility. The visualization and search tools will make your day-to-day hunting a breeze.

During this brief walkthrough of the setup, configuration, and use of the toolset, we will show you how to find the trees from the forest in today's modern cloud environments and beyond.

Encryption, authentication, and data integrity in PHP 7

Enrico Zimuel

Do you need to encrypt sensitive data in PHP 7? Encryption is not enough, you also need authentication and data integrity to secure your data. In this talk, I'll show how to provide encryption using OpenSSL and how to authenticate data using HMAC. I'll also show how to use the AES-256 standard algorithm (FIPS-197) and how to use the new AEAD cipher modes of PHP 7.1. Moreover, I will present the new random number generator of PHP 7.0 and how to use public key cryptography to provide digital signatures and watermarking techniques.

Enough about classes, let's talk templates

Jonathan Reinink

We talk a lot about writing highly decoupled, dependency injectable, single responsibility classes and methods. And this stuff is ALL GOOD. But, are we thinking enough about what defines quality templates? How seriously are you taking security when writing your templates? How tightly are these templates coupled to the objects they use? This talk will show you how to write awesome, modern-day PHP templates. We'll look at new features you should be using, how to decouple templates from your business logic, where to best place your presentation logic, and more.

Event sourcing: The good, the bad, and the complicated

Marco Pivetta

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

What if it is all just buzzwords and no gain?

We'll look at how we implemented event sourcing in our own app, code-reviews.io.

  • What made us fast?
  • What made us super slow?
  • What made us cry?

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

Exploiting the brain for fun and profit

Alena Holligan

What is your greatest tool in your toolbox? Your brain! Sure, you could sharpen this tool and promote your project the normal way, with hard work and years of slow, incremental progress. Or you could use some of the brain's built-in cheat codes and just hack your way to success.

Along with learning, our brains are plagued by a raft of bugs and unwanted features that we have been unable to remove. Use these features to your advantage to teach, learn, and persuade. Join us in a tour of some of the most amusing bugs and exploits that allow you to play with the interface between our brains and the world.

Extend your database creativity with PHP 7

Shlomo Vanunu

Database management system (DBMS) is the center of operational and analytical business systems. The database is the channel by which data is stored, managed, secured, and served to applications and users.

Today, there's an increasing variety of database products to consider. IT departments consider and use a combination of multiple database technologies for certain processing needs. Often different databases are used during development and production of a web application. For example MySQL is used for development and DB2 for production.

IBM DB2 UDB, MySQL, Oracle, Microsoft's SQL Server may be connected using the PHP extensions, each of which is database specific.

Extremely defensive PHP programming

Marco Pivetta

Resistant, highly testable, safe and maintainable code: Or not?

There are a thousand ways to break your code and a lot of ways to prevent that from happening.

Let's explore defensive programming and learn how to protect our code from invalid usage.

From Docker to production

Chris Tankersley

Congrats! You and your coworkers love Docker. Docker has become an increasingly helpful tool when it comes to DevOps. We can now build smaller, more robust local development setups with the promise of mirroring production. One thing that still plagues many situations is how to get those containers into production and update them over time. We'll explore different tools for setting up, configuring, and maintaining containers as they go live.

Get to inbox zero for production issues

James Smith

These days we hear a lot about software quality and customer experience, but what does that mean for your organization? If giving your customers the best possible experience with your product is a priority, how can you help your team reach that goal? How do you help them care?

While tools like Splunk, New Relic, or Bugsnag are great for detecting production problems, how can you make sure you stay on top of them, to get to "inbox zero" and actually reduce technical debt?

This session will explore common problems engineering organizations now face from lack of visibility to lack of ownership and we'll deep-dive into actionable ways you can make a change for the better.

Hacking your way to better security

Colin O'Dell

This talk educates developers on common security vulnerabilities, how they are exploited, and how to protect against them. We'll explore several of the OWASP Top 10 attack vectors like SQL injection, XSS, CSRF, and others. Each topic will be approached from the perspective of an attacker to see how these vulnerabilities are detected and exploited using several realistic examples. We'll then apply this knowledge to see how web applications can be secured against such vulnerabilities.

High availability PHP

Josh Butts

With the rise of containerized applications, more and more people are starting to consider running high-availability applications in production with Docker. This is not to be taken lightly and the path is fraught with peril. In this talk, we'll discuss what a highly-available Docker-powered PHP environment looks like and how to build one. We'll also look at strategies for using Docker and container concepts to avoid getting burned by "disposable" cloud hardware. We'll look at load balancing, service discovery, failover, and talk about tools that make these manageable. We'll also talk about the speed at which the Docker ecosystem is moving and how to cope with that when dealing with production applications.

How to compile open source on IBM i

Kevin Adler

Adding extensions to PHP open source can be easy when you have tools on your IBM i. This session will show you how to do the job.

  • Learning objectives:
  • Understand the latest tools available in the open source world
  • Understand the steps to compile open source solutions
  • Understand why embracing open source is important

How to use SELINUX (No, I don't mean turn it off)

Chuck Reeves

Why do we turn off NSA-grade security features? Well early on, SELINUX was complex and confusing. However, the pains of dealing with SELINUX are long gone. In fact, the tools for working with SELINUX have long improved are now so easy, anyone can configure the security layer. Even one bad chmod on a server can leave you vulnerable. However, when SELINUX is running, rogue processes will be prevented from running havoc. You'll learn how easy it is to use SELINUX and how (with little effort) you can configure and troubleshoot this amazing security feature. Stop leaving gaps in your infrastructure and turn it back on.

Hypermedia: Why you need it, and why you're doing it wrong

Michael Stowe

Everyone wants the perfect REST API but to truly conform to Fielding's constraints means taking advantage of hypermedia, and using it as the engine of application state. This means going beyond just implementing a specification like HAL, Siren, or JSON API, and creating your links to provide enough information for both humans and machines. In this session, we'll take a deep dive into what hypermedia is, what role it plays in RESTful APIs, the differences between specifications, and how to implement it and represent it correctly.

Install MariaDB on IBM i - Tips, troubleshooting, and more

Rod Flohr

MariaDB is the new open source drop-in replacement for MySQL that has been adopted by IBM for use on Power Linux and IBM i. ZendDBi is the installer provided by Zend for installation of MariaDB on the IBM i. In this session we'll show how to use ZendDBi to install MariaDB and provide some important tips for post-installation. We'll also demonstrate troubleshooting some common installation issues. While most installations of MariaDB are trouble free, the troubleshooting procedures will give us a chance to understand a bit more about the operation of MariaDB on the IBM i. It'll also give us the opportunity to explore some concepts on IBM i that may not be familiar to some RPG programmers.

Integration and Asynchronous Processing with ActiveMQ and Camel

Justin Reock

The modern enterprise landscape is a hybrid of heterogeneous technologies and disparate endpoints. In this session, we’ll discuss ways that you can leverage the flexibility and sophistication of ActiveMQ’s message processing and Camel’s normalized routing to federate your front-end applications with back end services. Beyond integration, we’ll discuss the user experience benefits that come with processing tasks asynchronously, rather than forcing a user to wait for a task to complete interactively. The ActiveMQ and Camel communities have made innovative leaps in the last few years, and we’ll look at what is available to you within these powerful, open source platforms.

Introduction to graph databases with Neo4j

Michael Moussa

Graph databases are all the rage these days, but the ideas they're built upon are hundreds of years old. After a brief look at the history of graph theory and its practical applications in Computer Science, we'll dive right into Neo4j - the world's most popular graph database. Learn the differences between a graph database like Neo4j and your traditional RDBMS. See how to model your application's domain using the new concepts available to you and how to query your graphs using Neo4j's intuitive query language, Cypher. After this talk, you'll agree that (Neo4j)-[:IS]->(Awesome) and be excited to use it in your next web application.

Jenkins for PHP projects

Stephan Hochdörfer

Jenkins is an incredibly flexible application. In this session, we'll show you how our Jenkins infrastructure is set up and how we use Jenkins on a daily basis. You'll learn about our favorite Jenkins plugins and how we use PHP tools like Composer, Phing, PHPUnit, and others in our Jenkins jobs. Last but not least, we'll give you some practical insights on how to use Jenkins and Satis to build your own internal Composer package repository.

Job queues with Gearman

Michael Moussa

When higher traffic coupled with costly operations begin to degrade your site's performance, an asynchronous job queue can be a valuable tool to help relieve the stress. With Gearman, PHP developers can easily farm out non-time-critical jobs like image processing, external API requests, and complex data processing operations to a pool of workers better suited to the task, leaving their web servers free to continue serving requests. Join this session for a walk-through of the basics of setting up a German job server, a look at the some pitfalls, and a few tricks of the trade.

Kicking off with Zend Expressive and Doctrine ORM

James Titcumb

You've heard of the new Zend framework, Expressive, and you've heard it's the new hotness. In this talk, I will introduce the concepts of Expressive, how to bootstrap a simple application with the framework using best practices, and how to integrate a third party tool like Doctrine ORM.

Laravel: How the sausage is made

Taylor Otwell

Laravel is a powerful web application framework with a robust set of modern features such as job queueing, middleware, database abstraction and migrations, and even a task scheduler. In this talk, we'll dive deep into Laravel's architecture and how it all works. If you're comfortable with PHP, frameworks, and want to get into the nitty gritty details of what makes Laravel tick, this is the talk for you. We'll explore concepts like middleware, kernels, dependency injection, facades, service providers, and more to discover the foundation of Laravel.

Large-scale website performance optimization tricks. Airline case study

Georgiana Gligor

Practical lessons learned while revamping a U.S. airline website to resist huge Black Friday and Cyber Monday traffic values. Using HTTP status codes and PHP cleverly, we have made parallel requests possible, so that the user experience is greatly enhanced, and we pre-cache resource-consuming user searches. All on a solid PHP foundation.

Let's make your PHP app even faster

Gregory Chris

Performance awareness, problems diagnostics, and their solutions are key parts of a development life-cycle. This talk will highlight proven methods to discover and diagnose server-side bottlenecks using the advanced monitoring in Zend Server, PHP insights, code tracing, execution profiling, and more. Once the problems are exposed, we will solve them by using automation and cutting-edge tools developed by Rogue Wave Software, such as asynchronous scripts execution, offline processing, caching methods, and more.

Linux 101

Justin Reock

Learn how to use Linux, even if you’re a die-hard Windows user! There’s no question that Linux has taken over the enterprise, and paves the way for disruptive innovations in software. Join us for an informal session where we’ll introduce you to the benefits of developing on a Linux platform and show you some basic usage fundamentals, so that you can get started with Linux today.

Magento 2 development best practices

Ben Marks

Magento 2 is best known as the most successful open source commerce app but did you know that it is a full-fledged PHP framework underneath, complete with several tools to make a developer's life easier? In order to build and maintain a Magento 2 site, developers must adhere to certain framework conventions and use the tools that ship with the app. This talk presents these best practices and introduces some community-created tools as well.

Middleware pattern is good for IBM i

Massimiliano Cavicchioli

This session will show why middleware is a very suitable pattern for IBM i, and will cover the pattern logic with real life examples using Zend Expressive.

By using a well-structured middleware pipeline, in an event driven approach, we'll show how to best manage the business logic residing in DB2 and RPG routines for common web application tasks. We'll also focus on introspecting the revamped IBM i toolkit, dissecting the code examples used to achieve our goals.

Modern PHP: Command buses, event handlers, and more!

Brandon Savage

For anyone doing PHP for any length of time, the modern concepts behind command buses and event handlers can be challenging. These concepts have been around for a long time but are relatively new to PHP in the last few years. Come learn how you can implement these in your code to create an extensible, maintainable, and testable application!

Modernize your app with Zend Expressive

Jan Burkl

In the last couple of years, I've seen many different applications: Spaghetti code, framework-based apps, and good or bad code quality.

But there's one thing most of them have in common at a certain point in time: For different reasons, it's hard to migrate to the state-of-the-art programming methodology. And now Zend Expressive comes into play. Zend Expressive is not only a slim middleware framework which implements the PSR-7 standard, but thanks to its simple base concept, Expressive is great as a quick start for your migration project and a smooth transition to the next generation of the app.

See in this session best practices on how to bridge your legacy system - like a ZF1 or Symfony 1 application - to Expressive and move it to the next level.

My journey to the center of PHP

Sammy Kaye Powers

"I don't know C!" is probably one of the most common excuses that we PHP nerds give for not contributing to PHP source. And top it off with all the overly-publicized drama surrounding the PHP internals mailing list, most user-land PHP developers don't want to touch PHP source with a ten foot pole.

In this talk, I tell my story of how a plain-old user-land PHP nerd who, "doesn't know C," found himself drawn to PHP internals like a bug to a light. I was meet with a lovely, helpful community of individuals who mentored me the whole way to making PHP better. This talk will encourage and inspire you to join me on an epic journey to the center of PHP.

MySQL as a document store

Dave Stokes

MySQL introduced a native JSON data type so that developers can now store a JSON document in a column in a MySQL database table. MySQL has also introduced the new X DevAPI that provides access to the database to use it as a data store for CRUD (create, replace, update, delete) operations without the need to know SQL (Structured Query Language). This session will cover what a developer needs to know to be able to use these new features, how to use generated columns to create materialized data that can be indexed so SQL searches can be made efficient, and best use cases for using MySQL as a NoSQL database without giving up the power of the relational database.

MySQL replication update

Dave Stokes

MySQL replication has made great strides in the last several years but several shops only run a simple master/salve topology. This session will cover the fundamentals of MySQL replication and then show how group replication (update one master, other masters actively updated), multi-source replication (multiple masters feed to one slave), replication between data centers, async versus semi-sync replication, and parallel replication. If you need to make sure you have multiple copies of your data in a safe environment, need to split reads from writes, or need to control shared data easily then you need to attend this session.

MySQL server performance tuning 101

Ligaya Turmelle

Optimizing the queries you send to the database can greatly increase the database's performance, but what do you know about all those strange MySQL variables that can be played with to get even more power from the database? Join me as we go over some of the basics of the various MySQL settings you can twitch, tweak, and massage to get the most out of your MySQL server.

Nom Nom: Consuming REST APIs

Tessa Mero

Feeling hungry? You've come to the right place. As APIs have become increasingly more important and popular in usage in the past few years in web development, it's important to understand the basics of what they are and why to use them. We'll go over the basics: The what's, why's, where's, and when's. You'll learn the basics of REST APIs and see how you can use POSTMAN to test making REST API calls. You'll see Cisco's Spark and Tropo as use case examples of working with APIs.

PCI compliance for Magento in the hipster age

Phillip Jackson

In a 2009 poll, "PCI compliance" was found to be the most boring two-word combination in the English language. Building applications that stand up to the Machiavellian standards that are PCI compliance is just the beginning. The rest will put you to sleep, and could put you out of business.

The aim of this talk is to "hipsterify" PCI standards and create application toolkits that make passing PCI a breeze.

This talk will be exciting, fast-paced, and humorous. It will attempt, and possibly fail, to make PCI fun.

Phing all the things!

Omni Adams

Phing is a build system that lets you do all sorts of neat things quickly and easily. If you find yourself manually running complicated processes or frequently having to look up command-line parameters for your tools, Phing can help make you more efficient. If your deployments have many error-prone steps or you find yourself dealing with fragile procedures, Phing can help keep your sanity.

PHP installed on IBM i - the nickel tour

Rod Flohr

Everyone knows installing PHP on IBM i is easy. Just download the save file and run the RSTLICPGM command. But not everyone knows what that RSTLICPGM does. What is it putting on the machine? Where is it putting it? How does it all work together? In this session, we'll take a look at the IFS directories added by the Zend Server installer, to see what's in them. We'll see where PHP and PHP extensions, Apache and FastCGI configurations, log files, and more are kept. We'll also talk about how these new file objects interact with existing prerequisite software on the IBM i to present dynamic pages to the web. This session is for PHP developers and administrators interested in learning how PHP fits in with the unique operating environment of IBM i.

PHP internal architecture

Elizabeth Smith

PHP 7 is awesome with new engine features, new keywords, and speed and memory improvements. But I bet you didn't know the fundamental architecture of PHP hasn't changed since PHP 3 and the decisions made have helped grow PHP in a fabulous way. The extensions API, the server application interface, and the streams layer make PHP pluggable and extensible in a pretty fabulous way. And for those who whine about how Ruby or Python can tie into C code without extensions, we'll take a quick path down FFI (and MFFI). So get a peek at PHP internals and the abstraction and layers that make it both a joy and a pain.

Powerful & flexible SQL generation — without the hassle

Matthew Setter

PHP is almost synonymous with databases, and it has been since the early versions. But creating SQL queries can still be a challenging task. What's the right tool to use? ORMs often feel like overkill, and creating queries by hand can be unmaintainable. In this session, we'll show you how to use the ZendDb library to generate SQL queries — from simple selects to more complex unions, filtered deletions, and updates. You'll learn how to use the library for creating flexible, secure, maintainable, and reusable queries, quickly and efficiently, saving you time and effort in the long term.

Practicing YAGNI

Jason McCreary

We often have the tendency to over-engineer our software. We want to use the latest packages, integrate with the hip services, and adopt those shiny patterns. I'm here to say, "you aren't gonna need it." YAGNI is a principle of extreme programming that states a programmer should not add functionality until necessary. In this talk, we'll take a look at what that means when writing code. Through everyday scenarios and audience participation we'll challenge YAGNI and ourselves to write better software.

Refactoring legacy code

Adam Culp

Faced with legacy PHP code, many decide to rewrite, thinking it will be easier, but for many reasons this can be wrong. Adam Culp will talk 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 insights and tips on how to handle their own pile of code and refactor happy.

Rethink image manipulations with Glide

Jonathan Reinink

Almost all apps require some form of image cropping or resizing. This is often done with background jobs, using tools like GD and ImageMagick. This talk will introduce you to a new way of doing image manipulations using a library called Glide. Glide, a recent addition to The PHP League, is a wonderfully easy to use on-demand image manipulation library with an HTTP-based API. I'll explain in a little more detail what it is, how it works, and how to set it up.

Robust 2nd-factor authentication with PHP

Tim Lytle

Single-use codes delivered by email and SMS, mobile phone verification using automated phone calls and installed applications, or standalone physical devices - there's more than one way to do 2nd-factor authentication (2FA).

There are benefits - and downsides - to each. Learn how each one works and what is best for you and your users. Avoid some common mistakes when rolling out 2FA, and take a look at how you can add one, or many, to your application's login flow.

Simple plugin creation in WordPress

Peter MacIntyre

Can't find that perfect plugin in the thousands that exist? Do you want to extend an existing theme? Come to this session to see just how easy it is to create your own plugin and to get a brief look at the internal functions that WordPress makes available to the developer. We'll actually create a simple plugin and a child theme in this session while looking at the PHP code needed to make this happen.

Strategic modernization with PHP

Alan Seiden

You know you need to modernize your IBM i applications but where to start? In this talk, Alan will inspire with creative examples of modernization on IBM i that provided a strong return on investment while controlling risk. Learn how to choose projects with the best return on investment and then complete them with confidence. We'll lead an honest discussion of the most effective strategies.

Can RPG programmers learn PHP? Yes. Can new PHP developers be integrated into an existing IT department? Yes. Both approaches have merit. See creative ways to use PHP, not only to create new GUI front-ends, but to "jazz up" existing interactive RPG programs. Please your users and business people by incorporating PHP into your shop.

Symfony2 best practices from the trenches

Stefan Koopmanschap

Symfony2 is a great framework and getting your first application up is easy. The documentation of Symfony2 is good but there's only so much that documentation can teach you. Many details and best practices are best learned while you're working on your project. During this talk, you'll be bombarded with those small pieces of knowledge and experience learned from the trenches of actual Symfony2 projects, where developers had to dodge those bullets Matrix-style. Whether it's about that little configuration detail you always forget or a good way of abstracting logic into the right pieces, we'll cover it all.

Taming the resource tiger

Elizabeth Smith

No matter how many virtual machines you throw at a problem, you always have the physical limitations of hardware. Memory, CPU, and even your NIC's throughput have finite limits. Are you trying to load that 5 GB CSV into memory to process it? No really, you shouldn't!

PHP has many built-in features to deal with data in more efficient ways than pumping everything into an array or object. Using PHP stream and stream filtering mechanisms, you can work with chunked data in an efficient matter, with sockets and processes you can farm out work efficiently and still keep track of what your application is doing. These features can help with memory, CPU, and other physical system limitations to help you scale without the giant AWS bill.

TDD with phpspec

David Stockton

phpspec helps promote the TDD software development methodology and removes a lot of the tedium with the process, making it simple to start and continue building software with TDD.

Writing tests first means that the code we write has documented intention and was built and designed on purpose. Each line has a reason to exist and since there are tests to back it up, refactoring and improving the codebase no longer needs to be something that is feared. All software becomes "legacy," but with TDD, we can continue to modernize, enhance, and refactor without worrying about breaking code.

Test driven Laravel

Adam Wathan

Learning how to test code can be overwhelming. Sure, building a calculator with TDD is easy, but when trying to build a real application, things get complicated fast. What's the difference between a mock and a stub? Are my tests allowed to hit the database? How do I test this billing code that interacts with Stripe?

Together we'll TDD a fresh Laravel app from scratch, never writing a line of code without writing a test first. I'll show how to get the ball rolling with an application's very first test, how to add new features with outside-in TDD, and how to design tests that make it easy to refactor with confidence.

The art of transduction

David Stockton

Functional programming, while not being a new idea, is fairly new and unfamiliar to many PHP developers. Concepts such as map, reduce, and filter are powerful ways to manipulate data. The transducer concept, a portmanteau of "transform" and "reducer," allows for functions to be composed and combined into powerful chains that make it simple to understand what's going on and allow for functions to be composed in different ways that can be easily tested and reused. Learn how transducers and basic functional programming can improve how your code processes data.

The Docker development template

Jan Burkl

Everybody is using Docker. Pull an image in minutes and start multiple containers in seconds. Great!

Unfortunately the public containers are normally not ready for an immediate use as a custom development system: Maybe the debugger is missing, the vhost is not configured correctly, or something app-specific has to be installed first.

In this session, I will show how to build your own custom system based on a Docker-compose template. This includes also the automatic setup of connections to other systems like DB servers or a load balancer to start a scalable cluster. And the best: The whole system configuration can be simply stored in a version control system, so that the Docker development template is available for all developers on the team.

The programmer's dilemma

Brandon Savage

Everyone wants everything: A quality, feature-rich application that ships fast. As developers we find ourselves torn between these three seemingly at odds points of view. This is the programmer's dilemma. But it is possible to have the best of all three with just a little effort on our part. How? Come find out!

Time to know better your PHP applications

Gregory Chris

This session is about extending Zend Server Z-Ray in order to get as much information from your own application as possible.

Z-Ray is a technology that provides useful information about PHP application run-time. It displays all the under-the-hood details of PHP scripts such as execution times, errors and warnings, special PHP events, list of database queries, execution environment information, and many more. By using Z-Ray, application maintenance and optimization time is reduced to the minimum, and definitely, Z-Ray is one of the best tools for profiling and debugging PHP applications nowadays.

In addition to the built-in features, Z-Ray can be easily extended to provide information about your specific application. In this session, we are going to learn how Z-Ray plugins work, what we can track in our code, and best practices in writing extensions. During the session, we'll write a few plugins, starting from very simple examples and advancing to more sophisticated Z-Ray panels.

Being a developer is not just about writing wonderful code and enjoying your products but also contributing back to the community. In this session, I am going to introduce the Zend Server plugins gallery and we're going to learn how pack and submit new plugins to the gallery.






Uncon: Building a solid cloud architecture for SMBs

Ahmed Dirie

When you're a business with an online presence, achieving a 99.999% uptime is critical. Yet with many SMBs, this is usually either a prayer or a reliance on the in-house IT person to figure things out. In some cases, you rely on a service provider such as a hosting company, or the managed team assigned to your cloud VM. All in all, it's never really an implementation decision.

In this talk, we will look at how SMBs can take advantage of the cloud, and use some of the open source tools available to build a solid cloud architecture.

Uncon: Community Building

Adam Englander

Uncon: Designing entity relationships in ORM with Tom Anderson

Uncon: PHP-FIG 3.0: What's new, what's up, what's going on?

Larry Garfield

The PHP Framework Interoperability Group is rebooting itself. How does it work? What is changing? How can you get involved? Should you? This open Q&A session will discuss the future of PHP-FIG and its impact on the PHP ecosystem.

Understanding shell environments on IBM i

Kevin Adler

QSH, qp2term, ssh ... There are shells all over IBM i, but what can you do with it all? This session will demonstrate many uses and interactions between many choices on IBM i.

  • Understand what shells are available on IBM i (and why)
  • Understand how to use the "right tool for the job" and use the shell (or shells) that's right for you

Use Zend components anywhere

Matthew Weier O'Phinney

Composer allows you to manage per-project dependencies, and to select components that best solve your application problems, regardless of what framework you use. This past year, Zend Framework has decoupled its components to fit this paradigm, letting you use Zend components anywhere. In this session we'll cherry pick several of them, demonstrating usage in diverse, real-world applications.

Web performance 2016: Myths and truths

Christian Wenz

The performance of a web site is one of the criteria used by Google and other search engines to determine the site's ranking. Various studies have shown that there is a link between performance and conversion rates. These are just two of many reasons to make performance optimization a mandatory step in your development process. However, advice that was relevant a few years ago is often made obsolete by new browser versions or new technologies like HTTP/2. We'll cover several aspects of optimizing a site from a performance perspective, debunk some myths, and also present tools that help analyze a web site's performance.

Websockets and event-driven programming with ReactPHP

Steve Meyers

Modern browsers support a new standard called Websockets, which allow persistent connections between a browser and a server. We'll discuss how to implement Websockets with your client-side Javascript talking to your server-side PHP, using the ReactPHP framework.

Who's doing what with PHP on IBM i

Mike Pavlak

This capstone presentation will highlight several customer case studies illustrating amazing feats performed by IBM i customers leveraging PHP. We'll get a sneak peek at the latest and greatest in IBM i specific announcements, as well as a collaborative session on the future of PHP on IBM i. This is a must-see session for the IBM i faithful.

WP REST API hacking

Jeroen van Dijk

The REST API is an awesome plugin to expose your data from the WordPress core. But … the standard implementation might not fit your specific case.

Just like the WordPress core, you'll be able to extend it to your specific needs. I'll show you how to handle authentication, introduce caching strategies, alter custom post types, or even change the default way of communication altogether.

Wrangling order from chaos: Practical approaches to OSS compliance

Dave McLoughlin

Many developers today use open source without fully understanding the legal and compliance risks. This session will help you unravel some of the mysteries of open source compliance:

  • Do I need to be concerned?
  • What happens if I don’t comply?
  • What is so special about the GPL license vs. something like the MIT license?

Dave will provide the information you need to understand the issues, practical steps you can take now to lower your risks, and help you reduce any confusion you may have about open source licenses and compliance.

Z-Ray: A customizable development tool belt

Mathew Beane

Using Zend Z-Ray offers PHP developers a very powerful suite of tools out-of-the-box. Extending Z-Ray is easy and allows for nearly limitless customizable development tools. An exploration of Z-Ray plugin features will give attendees a foundation for creating their own Z-Ray extensions.

This session will show how to develop Z-Ray plugins for your applications and frameworks. Covering the Z-Ray plugins structure, storing and displaying data, tracing functions and files, utilizing the tree widget, how to format your data for use in Z-Ray, and modifying the way data is displayed in Z-Ray.

Zend Framework 2 and 3 for the IBM i

Stephanie Rabbani

Zend Framework 2 and 3 are great choices for your larger web applications on the IBM i.

In this talk you'll learn:

  • What Zend Framework is and its benefits
  • Set up and configuration for the IBM i
  • How to use Zend\Db for database access
  • Differences and gotchas between Zend Framework 2 and 3
  • Introduction to the service manager and the events manager