I sometimes speak at conferences and user groups about software development topics. Below are presentation slides and video recordings from most talks, in reverse chronological order.
You likely learned about loop constructs very early in your programming career and use them every day--so often you don't think twice! The problem is for() and foreach() are so fundamental developers use them for everything! Even worse almost every developer will use them differently to accomplish the same goal. So what would intention-revealing, expressive PHP code look like without using for() and foreach()? Let's explore some functional programming concepts and find out.
Knowing basic functional programming concepts will improve your PHP code. Your new mindset will favor writing code with better separation of concerns and decreased complexity: clean code. We will explore some poor examples of using loops to process data, then ease into learning functional concepts like map, reduce, filter and collection pipelining. We'll even use our newfound knowledge to refactor a few loops. Lastly we'll explore some existing libraries and even experimental PHP RFC features to make our code even more concise. Beware: after this talk you'll never look at for() and foreach() loops the same again!
This talk (not about software development) discusses how time travel is possible today. Science fiction didn't lie to us, it simply set our expectations too high. We explore how modern technology has reached this point, and how time travel will change in the future (pun maybe intended) as fields like Artificial Intelligence, Augmented Reality and Virtual Reality inevitably become mainstream.
This talk is geared towards developers comfortable using PHP's native functions and are curious how to write better custom functions. John presents 4 guidelines that if followed will result in clear, focused functions that are easy to read, reason about and reuse.
No slides or video. Most of presentation was done in a REPL and editor.
Modeling dates and times in programs is tricky. After this presentation you'll learn how PHP's built-in DateTime library helps you avoid the most common pitfalls. You'll also find recommendations on open-source libraries to work with things like date recurrence and calendar logic.
Software provides continual value when it can evolve with the business. But without proper care it's easy for software to become rigid and difficult to change--it stops being soft. In this talk John introduces ways to think of software and systems we build as independent, replaceable components.
Learning to program computers in the traditional sense has many pitfalls that are barriers for newcomers. The future job market for programmers is bright and kids should be taught to control technology rather than only consuming it.
John talks about Scratch, the visual programming language from MIT, and how he thinks it's the best "first" programming language for the next generation of developers. Scratch hits the sweet spot to overcoming introductory pitfalls and provides a safe environment for kids to learn, explore and share their digital creations.
John talks about guidelines and code smells for improving object API design. He takes an existing class and demonstrates refactoring it to a leaner more focused version of its previous self. Most importantly, what questions to ask yourself as you're writing new classes.
Pass 1 (and a future Part 2) will approach refactoring a class from the outside as opposed to the inside. We discuss topics like breaking apart bigger classes to make smaller classes that do one thing, programming without getters and setters, consistent entry and return points, and guidelines for object instantiation. This talk focuses less on in-function refactoring and more on API-level refactoring.
Recurring talk at most Kansas City PHP User Group meetings. I summarize important news stories and happenings in the PHP community from the previous month before the presentation was delivered. Gives special attention to issues relevant to most of our regular attendees.
Demonstrate refactoring a typical Controller to using Symfony2 EventDispatcher component to make writing decoupled code easier.
Covers common misconceptions about version control, how to setup your environment to work with git, how to get up and going with git in your daily development workflow, and where to go to learn more.
Repeatable development environment for teams looking to do collaborative Drupal development. Major props to Chris Escalante for his role in technically implementing this solution for our team.
April 2012, Lawrence Coders
April 2012, Kansas City PHP User Group
Working effectively with git on a daily basis is a lot easier with a few tips on setting up your environment and making common commands faster to type. I also cover different code-sharing models and common workflows for working in a collaborative environment.
January 2011, University of Kansas Web Developers monthly meeting
Overview of the most common security threats facing modern web applications and how to mitigate them when using PHP.
November 2010, University of Kansas Web Developers monthly meeting
Current state of YUI Graded Browser Support. Please note, much of the information in this talk is outdated as of September 2011. Yahoo Graded Browser Support no longer grades browsers, and instead advocates for supporting a list of certain browsers, but ultimately pushes developers to do their own analytic testing and support browsers most-used by their user base.
September 2010, University of Kansas Web Developers monthly meeting
Current best practices advice on using @font-face, history of fonts on the web, browser support and font format support and challenges of @font-face.
January 2010, University of Kansas Web Developers monthly meeting
January 2010, Lawrence Programmers Hack Day