Midwest PHP is the FUN conference. This is our fifth annual conference, and each year it gets better and better. Our goal is to share best practices, ideas, and techniques about building state-of-the-art software applications.

Friday 17th March 2017

Using Open Source for Fun and Profit
Keynote by Gary Hockin (50 minutes)

10 years ago I was a lonely developer sitting in a small room quietly turning out code between 9am and 5pm, Monday to Friday. Fast-forward to now and you'll see me standing in front of audiences all around the world talking to developers about numerous topics."Why are you bragging like that at me?" I hear you ask. Because it could happen to you too. The question I always ask myself is "How the hell did that happen?!?!". The truth is that the only reason I've managed to advance my career so far in a decade is because of the people that make up the communities of open source projects. Not only do open source projects save you time and money, but the friendships and support groups that can be made within these communities is, frankly, staggering. Join me as I chart my journey from wage monkey to conference speaker, and look at how you can leverage the power of open source to make real friends, real money, and real happiness.

10:00 Grown-up MongoDB: Schema Design
Talk by Derick Rethans (50 minutes)

Although MongoDB is a non-relational database, it is still very important that you store your data in an optimal way. This presentation make you grow up from just starting with MongoDB, to a seasoned user, by teaching you how to design your data schema according to your application's needs. This requires a different mind set than designing for a relational database. Besides schema design techniques, I will also cover how to pick indexes, different types of indexes, and way to find out why queries are potentially not as fast as they could be.

Pulling up Your Legacy App by its Bootstraps!
Talk by Emily Stamey (50 minutes)

Your mission, should you choose to accept it, is to support an application built on an older framework. Refactoring isn't an easy option. The code is untested and nowhere near best practices or standards. In this session, we'll talk about strategies for incorporating modern PHP coding practices to add features and functionality and retiring the older code in pieces. We'll review specific examples and code from a real project where we bootstrapped a legacy application that needed a lot of work to be helpful to its users and simpler for developers to maintain . We'll talk about strategies to leave the existing code in place until the new code is ready to replace it in whole or in pieces.

Principles of Unit Testing
Talk by Joseph (50 minutes)

The proliferation of testing strategies outside of a broadly agreed set of definitions has caused confusion and a waste of effort by not fully understanding how to apply the fundamentals of unit testing. Let's change that. In this session, we will cover the five types of test doubles: dummy, fake, stub, spy, and mock, showing code examples of how to use each with PHPUnit and Prophecy. Layered on top of this we will observe the difference between sociable and solitary tests, as coined by Jeffrey Fields. Lastly, we will look at how test smells naturally surface and what strategies can be used to mitigate them, such as Arrange-Act-Assert, object mothers and data builders. The key takeaway from this session will be a deep knowledge of unit testing: when to apply one double versus another, when to use solitary vs sociable, and how to mitigate test smells.

11:00 Graph Databases Will Change Your Freakin Life
Talk by Ed Finkler (50 minutes)

All of us have worked with relational DBs like MySQL or PostgreSQL, but for many use cases they aren't the best option. Graph databases have a simpler, more powerful model for handling complex related data. In this talk we'll work with Neo4j to explore the advantages of graph DBs. Attendees will learn the graph model, how graph DBs let you do things that are practically impossible with SQL, and the best options for integrating one into your application -- new or existing.

Accessibility: Don't turn off that JavaScript just yet!
Talk by Nic Steenhout (50 minutes)

Long gone are the days when you couldn̢

Bringing Old Legacy Apps To PHP 7 and Beyond
Talk by Sammy Kaye Powers (50 minutes)

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 written years ago for an end-of-life version of PHP and a now-defunct web framework. The initial temptation might be, "I'll just rewrite all this on x framework". But hold on there my framework friend, a rewrite is costly and is rarely the correct answer. We'll discuss some common pitfalls when getting a legacy codebase ready for PHP 7 and what we can do to make the upgrade path as painless as possible. These incremental changes will keep the business running while improving security, stability and maintainability of the codebase.

13:00 Profiling your PHP application
Talk by Michael Heap (50 minutes)

So, you've been through and changed all your double quotes to single quotes but your application still isn't running at the speed of light. What's going on? Making an application scale is generally seen as something that only the most magical of developers can do, but it's easy once you have the correct tools. Fortunately for us, these tools are freely available online! In this talk, we'll take a look at a few options that we have available to work out what our application is actually doing, help identify bottlenecks and fix them so that we can move on to the more important part of the project: delivering features.

Software Management Lessons from the 1960s
Talk by Larry Garfield (50 minutes)

"The Mythical Man-month" is one of the seminal books in the field of software project management. It was written in 1975, based on experience from the 1960s. Is it even still relevant? Turns out, it is. Technology may have changed dramatically but people have not. Managing software projects is about managing people, not bits, and creative people engaged in intellectual endeavors are notoriously hard to predict and manage. (Just ask my project manager.) Fortunately, many of the lessons-learned Brooks' presents are still relevant today. Some are directly applicable ("adding people to a late project makes it later") while others are valid with a little interpretation. Still others fly in the face of conventional wisdom. What can we learn from that? This session will present a modern overview of the ideas presented by Brooks and a look at what we can still learn from them even today. Along the way we'll keep an eye on Open Source, and what lessons we may have forgotten.

OOP Is More Than Cars and Dogs
Talk by Chris Tankersley (50 minutes)

When developers are introduced to Object Oriented Programming, one of the first things that happens is that they are taught that nouns turn into objects, verbs into methods, and Dog is a subclass of Animal. OOP is more than just turning things into classes and objects and showing that both Boats and Cars have motors, and that Dogs and Cats both speak(). Let's look at OOP in real world settings and go beyond cars and dogs, and see how to use Object Oriented Programming properly in PHP. Traits, Composition, Inheritance, none of it is off limits!

14:00 Expressive Microservice Framework Blastoff
Talk by Adam Culp (50 minutes)

With PHP frameworks being more decoupled than ever, and with the help of package and dependency managers, large and heavy PHP frameworks are a thing of the past. Modern PHP developers now have a wealth of libraries available specializing at certain tasks, and microservices are fast becoming a preferred way to architect applications. But many don't know how to start, and get thrown in the deep end. This talk will briefly introduce what microservices are, and how to create them using middleware. Then show how to build using the Zend Expressive microframework leveraging components of Zend Framework, and other libraries, to quickly create awesome things without requiring a full stack framework. Resources for reference and continued learning will also be shared.

TypeScript in Action
Talk by Doris Chen (50 minutes)

TypeScript, an open source project, has seen enormous growth over the past year. Today, it is used to build several key frameworks like AngularJS, Ionic etc. Across the board developers are falling in love with TypeScript as they find it to be the most productive way to work with JavaScript. In this talk, Doris will go through how TypeScript enables you to leverage features from the current and future of JavaScript while increasing the productivity of JavaScript development across the board. As ECMAScript 6 gains popularity and more browsers are implementing the standard, JavaScript developers across the board are beginning to wonder, 'what's next?' This session will cover some of the latest features of TypeScript, including future ECMAScript proposals, support for Angular, React/JSX and Node, the state of the art type system capabilities, and how it all comes together to make working and creating things in JavaScript more productive and fun with TypeScript.

Dev Divas: History's Heroines of Computing
Talk by Vesna Vuynovich Kovach (50 minutes)

If you aim for code that's SOLID, rather than SOID, thank Barbara Liskov and Jeannette Wing. Call yourself a "software engineer"? Thank NASA supercoder Margaret Hamilton, who invented the term that once drew chuckles. Ada Lovelace in the 19th century wrote the first computer algorithm and foresaw the potential of symbol-and-rule-based computation. Yet she's often dismissed as a math klutz, the well-meaning but incompetent muse of inventor Charles Babbage. These aren't the only women who shaped today's tech-centric world. Throughout the history of computing, women have played pivotal roles. Meet some of the women who shaped the world of tech, and learn their stories. Find out what the landscape looks like today for women in tech, and learn how you can contribute to a brighter future for all.

Intro to Laravel 5
Talk by Ben Edmunds (50 minutes)

Learn why this new framework has been taking the PHP world by storm. Are you ashamed to admit you're a PHP developer? Have you been using the same old, boring PHP framework for years? Tired of your PHP applications turning into enormous beasts? Maybe you've heard about Laravel but haven't made the effort to dive into it? In this presentation, we'll walk through what makes Laravel an elegant, fun, and exciting framework to make PHP applications that you'll be proud of.

The Mindful Developer: Being Less Busy & More Productive
Talk by David McKay (50 minutes)

Being a developer, programmer, analyst, tester, designer, etc is hard. We work in an industry that champions the 12+ hour work day; continued learning and open source contributions, but not on the company's dollar. We're continually berated with the idea of the 10x developer and so we must work harder, read more blogs, write more code and buy more books but when will it ever end? Will technology ever stand still long enough to let us all catch up? No. You'll always be busy, busy playing catch up in a race you didn't sign up for. Fortunately, there's another way. Instead of being busy, I can help you be more productive. I will walk you through some of the tools and techniques that I use on a daily basis to, not only, maintain and upgrade my skills in the world of ever changing technology, but, and more importantly, to protect my sanity, be more present and remove stress and fear from my life.

Security Starts With You: Social Engineering
Talk by Tiberius Hefflin (50 minutes)

Virus? There's an app for that. Malware? There's an app for that. Social engineering? It's a little more complicated. These techniques, used by hackers to gather information on their target, are hard to combat without education - so why don't we talk about them more often? Aimed at the average user who could be targeted by such an attack, this talk discusses the tools of social engineering, how it can be combated and why so many companies fail in preparing their employees for such an attack.

Saturday 18th March 2017

09:00 Modern JavaScript for PHP Developers
Talk by Derek Binkley (50 minutes)

Are you scared by JavaScript? Have you used JQuery but struggle with adding interactive features to your web page? This talk will help you understand how to use JavaScript effectively in your existing web pages and PHP applications. Let's explore different ways to write and structure your JavaScript code and introduce the model-view-view model pattern as a complement to the model view controller pattern often used in PHP to create more reusable, understandable, and testable code.

DevOps For Small Teams
Talk by Joe Ferguson (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".

Stepping Outside Your Comfort Zone: Learning to Teach
Talk by Heather L White (50 minutes)

As a developer, you spend your entire life learning. But what happens when the tables are turned and you become the teacher? Do you want to become a conference speaker or a mentor, talk to your local user group, give presentations at work, or become a technical trainer? As a previous classroom teacher with a Master's Degree in Curriculum Development, I will take you on a journey to understand the various learning styles and how to effectively reach everyone. We will look at how to present your information, best ways to structure it, and learn ways to reach all students no matter their level. We will also cover a number of best practices for crafting your presentation decks themselves. Join me for this exploration into the inner workings of the human mind.

10:00 Practical PHP Deployment with Jenkins
Talk by Adam Culp (50 minutes)

Developers would love to "automate all the things", but where do we start? What tools exist for automating? And what can actually be automated? If we don't have unit tests can we still benefit from deployment automation? Adam Culp will show how a PHP application pulled from git, complete with unit tests, Composer dependency management, and package creation, can be deployed flawlessly using Jenkins. Then see how "Dev" and "Ops" are supported by a system if the application breaks through automated rollbacks.

My journey to the center of PHP
Talk by Sammy Kaye Powers (50 minutes)

"I don't know C!", is probably one of the most common excuses that us 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.

Promises and Generators
Talk by Evert Pot (50 minutes)

Many of you have heard of the concept 'Promise'. Some of you may even have used it. The 'Promise' is a useful design pattern when developing applications that have a strong asynchronous aspect and avoids what's called 'callback hell' or 'callback christmas trees'. The promise is a bit hard to wrap your head around though. This talk will explain exactly how a promise works and behaves and how you should interact with it. Next, we'll dig into generators. Generators have been added to PHP 5.5 and Ecmascript 6 and makes creating and consuming iterators a lot easier. Generators have a unique language property though. They allow us to jump in the middle of any method outside that method. In the third part of the talk we'll show how we can use iterators to improve promise-heavy code and make asynchronous code look and behave as normal code.

Kickass Development Environments with Docker
Talk by David McKay (50 minutes)

Docker, the hottest technology around at the moment. It swept the Ops world by storm in 2014, became mainstream in 2015, and now it's set to dominate the developer world, in 2016. Docker is a tool that allows you to package your application up into a single-runnable distributable binary - akin to the phar, but in Hulk mode. Docker allows you, a developer, to specify the exact environment your application needs to run, across development; test; staging; and production. In this session I will cover the creation of this utopian distributable and show you how to can compose your entire production infrastructure locally with only a small YAML file and without installing a single thing. Lets say hello, to Docker.

Authenticating Against API Services
Talk by Caitlin Bales (50 minutes)

One of the biggest complaints from API consumers is that authenticating against third-party services is painful. I'll walk through the OAuth2 protocol as well as a few common ways to authenticate against a service. Then we'll look at how you can integrate these authentication tokens into your application.

Getting Started with Magento 2
Talk by Mathew Beane (50 minutes)

Magento 2 is a fresh take on a modern eCommerce platform rich in features and community. We will go over common best practices and toolsets, and to introduce popular community resources. Then we will take a dive into setting up a Magento 2 site to illustrate the effort required to get a project off the ground, and to find a better understand of what Magento 2 offers. In this presentation Mathew Beane will briefly discuss the following topics: Best Practices: Keeping core clean, how to modify Magento the right way. Community Resources: How to join the Magento Community Certification: How to get Magento Certified Migrating from Magento 1: A look at the tools and methods. Setting up a Magento site: Covering the basic design and development choices.

13:00 Storing Non-Scalar Data
Talk by Derick Rethans (50 minutes)

In this presentation we will look at storing complex data in a single field. Many noSQL solutions are created around this (such as Redis' lists, sets and hashes; MongoDB's and CouchDB's records), and many relational database now also support storing complex data in a single field through specific data types (such as PostGreSQL's JSONB or hstore, MySQL's JSON). Each of the different database engines support different things, and handle these data types in different ways. In this session we compare the different approaches to storage, indexing and interactions with these data types in different databases.

Status Change: Now Using Event Sourcing
Talk by Emily Stamey (50 minutes)

Being flexible to changes in business process makes our jobs easier, and it helps our applications adapt to those changes with minimal code changes. One of the biggest adaptions in our applications has been the addition of Events to make a note of an Event in the system. With these Events, we can affect change immediately, or even later. This is most helpful in our reporting interfaces. We can build, change, and throw away our reports very easily. This is much easier than our older reports being generated by large SQL queries. Attendees will learn: - idealogical differences between status flags and events - triggering events in your application - handling events to reflect the state of your application data - building reports from events that are easy to change

Altering, Extending, and Enhancing Drupal 8
Talk by Joe Shindelar (50 minutes)

A large part of Drupal's appeal lies in its flexibility. The fact that a developer can alter, extend, and enhance almost any aspect of Drupal without having to hack core. Knowing what systems are available for doing so, and how to make use of them is critical for anyone developing with Drupal. Drawing from my experience helping to document and explain these new patterns in various formats I hope to answer these questions: - What are hooks, plugins, events, and services? - What problems do these patterns seek to solve? - How do I decide which method to use and when? - Looking ahead to the future, how do these patterns affect the code I write today? If you're currently writing modules for Drupal 8, porting modules from Drupal 7, or think that you might have to sometime in the future, or even if you're just curious how the module ecosystem fits together behind the scenes this session contains critical information for you. After attending this session you should have all the background information you need to make informed decisions about how your custom code can, and should, talk to Drupal in order to uphold best practices and write modules that are easy to maintain and play well with others.

14:00 WordPress as a 12 Factor app
Talk by Michael Heap (50 minutes)

Love it or hate it, WordPress is here to stay. Powering over 25% of the web, it's one of the most commonly used projects out there. WordPress strive to make life easy for their end users first and foremost, but what if I told you that with less than an hour's work you could make it a joy to work with for developers too? By following the Twelve Factor App method (http://12factor.net/) we can deploy WordPress in a way that makes it easy to develop for, easy to update and easy to maintain. Come and watch as we take a standard WordPress install and bring it into the future.

How to Make Your Website Not Ugly: 10 Simple UX Tenets for Non-Designers
Talk by Hilary Stohs-Krause (50 minutes)

To craft well-designed websites, you have to know 50 names for "blue" and the difference between a font and a typeface. You probably have a degree in illustration or graphic design, or maybe you attended some hip code school in Oakland and call yourself a User Experience Architects Right? Nope! In fact, there are numerous small, simple and practical ways to vastly improve the look and usability of a website, no matter how creative you are(n't). In this talk, we'll explore ten of them together, using research and proven solutions to see how the impact as a whole for both clients and users is greater than the sum of its parts. Make your websites more attractive, easier to use and better designed without feeling like you're wasting your time or effort.

MVC to ADR: Refining How We Think About Web Applications
Talk by Woody Gilk (50 minutes)

Nearly every web developer has been exposed to MVC. Recently, the ADR pattern has been articulated as a potentially better way to organize web applications. In this talk we will explore the background of the MVC pattern, the challenges it faces when used for web applications, and the solutions that ADR proposes to address those challenges. Slides online at https://talks.shadowhand.me/mvc-to-adr/ Source at https://github.com/shadowhand/mvc-to-adr-talk

15:00 Using our Superpowers for Good
Keynote by Eryn O'Neil (50 minutes)

Technology has become an intermediary in nearly every part of our lives, from electronic medical records to online bill-pay systems to apps that remember which craft beers you’ve tasted. We usually think of technology as a tool, something as indifferent as a hammer or a ruler. But in a world where algorithms decide which version of the news you read, pretending our software is detached is naive—or even dangerous. So, when so few technologists (that’s us) are creating software for use by so many (that’s nearly everyone else in the world), how can we do right by them? What responsibility do we have to use our skills for good? And how can we get this right when humans beings insist on being so varied and complicated and, well… human?