Your Slides Do Matter

This post is over 2 years old and is probably out of date.

At almost every event I’ve spoken at in the last twelve months, somebody has asked me how I created my slides. Typically they are talking about my code samples, but I wanted to cover all aspects of creating my slides.

You Are The Star, Not Your Slides

It’s often said that you, as the speaker, should be the star of the show. Your slides should be inconsequential, a supporting act. If the projector dies, your audience shouldn’t miss out on much.

While I strongly agree with the sentiment — after all, you’re paying to see the speakers — I disagree that your slides don’t matter. Your slides can be a valuable part of the experience for the audience.

Different Ways To Learn

Thanks to Heather White and her fantastic talk at Lone Star PHP, Stepping Outside Your Comfort Zone: Learning to Teach, I learned there are seven different majors ways that people learn:

  1. Visual
  2. Physical
  3. Aural
  4. Verbal
  5. Logical
  6. Social
  7. Solitary

I try to hit as many of these as possible with my talks, I use photographic title slides to give visual learners a keyframe to hang on to, as well as bright colors and diagrams. I speak out loud for aural learners, and often my talks are recorded. Physical learners can take their own notes, and I encourage questions for the social learners.

Presentation Technique

There are two different presentation techniques I see commonly used.

Bad Subtitles

As some of you may know, I have a hearing problem. Before I got hearing aids, going to a talk was hit-or-miss. If the speaker or the PA was too quiet, all I had to go on were the slides.

Due to my hearing loss, I always (even now, with hearing aids) watch TV with subtitles/closed captions on — I find that if you put too much content on your slides, they start to become bad subtitles for your speech.

I get distracted by differences, and I focus more on the words on the slide than what you’re saying. Combatting this scenario is why the advice de-emphasizing your slides is often given.

No Content

To counter this, some speakers have started to do slides with just images/gifs, sometimes adding a word or a title. This can be entertaining in person, but I get frustrated when I hear about a great talk and the slides end up being 25 pictures of cats with random words — there is no take home value, and nobody is going to retain everything you say.

Splitting The Difference

I try to blend these two techniques by having a title slide that I talk to, and then behind it I have bullets with more details that I usually skip passed during the talk. This slide serves three purposes:

  • Speaker notes: I set Keynote to show only the upcoming slide in the speaker view, and I use the bullets as speaker notes
  • Clarification: I can switch to that slide to clarify something, e.g. a class name
  • Take home: when I upload the slides, I leave those in, they summarize everything I’ve said



The most important thing for a slide is legibility, so I spent a lot of time picking fonts. I have gone with the “Source Pro” family from Adobe, these comprise of Source Sans Pro and Source Code Pro. There is also the most recent addition to the family is Source Serif Pro, but I try to limit my slide to two fonts.

One of the benefits of these particular fonts is they come in a bunch of weights. This gives the ability to emphasize (semi-bold, bold, black weights) or de-emphasize (extra light, light) portions of my text.

These fonts also hold up well at font sizes small and large, and in print. I use Source Code Pro every day in my IDE, Editors, and terminals, and have blown it up to fill a wall on a projector.

In fact, I use these same two fonts on this site, Source Sans Pro for titles and body text, and Source Code Pro for code (I override the default gist stylesheet for this!).

I try to make sure text is no smaller than 60pt, but will go down to about 52pt if necessary.


The most important thing about colors is contrast. I have found that on-the-whole, bright colors on a dark background stand the most chance of being visible on projectors, but I did have to invert my slides for one conference this year.

I ended up finding the monokai theme that is available for most every highlighting tool, IDE, editor, and terminal out there. The monokai theme consists of five colors on a grey background, to which I added the Akamai blue and orange (branding++), and white for titles/text.

Monokai Colors

I use these eight colors for all code, graphs, and diagrams in my slides:

Monokai Colors Slide Examples

Title Images

As mentioned, I use images on my title slides. I generally go for images that are visually striking, and are in some way related to whatever topic the slide is about. For example, for HTTP/2 Server Push, I used a picture of a push mower (and in fact, replicated that in this post on server push).

I find most of the images I use by using the Flickr advanced search. I set license to “Commercial use allowed” (I find conference talks a grey area and decide to err on the side of caution), ensure safe search is on, and change the sorting to “Interestingness”. Sometimes I will also open the Advanced panel and choose only portrait orientations and large images.

If this doesn’t yield usable results, I will fall back to Google’s image search. Here, you can also set your license under “Search Tools > Usage Rights” where I choose “Labeled for reuse”, I set “Type” to “Photo”, and “Size” to “Large”.

I find this typically will yield a visually striking image that I am free to use so long as I follow the rules laid out by the (typically Creative Commons) license.

I will then place them on my slide and change the transparency — due to the dark grey background behind this will darken the image, until I feel there is enough contrast between the image and the title text


Lastly, the code. I do try to limit the amount of code I put in my talks, I don’t think slides are the best medium to learn to code from. This does mean that I try to make my code as easy to consume as possible.

Syntax Highlighting

As I mentioned, I use the monokai theme (or monokai-light for the inverted one), and I use the python Pygments library to perform the actual highlighting. Pygments has the ability to output RTF formatted output, so I have a function in my bash setup that will take the contents of my clipboard and replace them with a syntax highlighted version of the same text:

This function will take the first argument to specify the language to highlight (defaults to PHP), will set the “startsinline” option if necessary. It then pipes the output of pbpaste into pygmentize, passing in flags to set the format -f rtf, and then sets the theme (style), font (fontface) and font size (fontsize) options with the -O flag: -O style=monokai,fontface=Source Code Pro,fontsize=120. The fontsize is double whatever the pt size would be, as I mentioned earlier, I try to use 60pt, so it’s set to 120.

Lastly, it pipes the output to pbcopy allowing me to just Cmd+V and paste it back into Keynote.

I still call it like key for PHP code, or say key json for JSON instead.

Example Highlighting

I also use animation to highlight code as I step through it — this is what I think makes most people ask what tool I use.

You can see an example here:

The purpose of this is to ensure that the audience can follow along as I explain the code. I will also show larger blocks of code and zoom in and pan around, I believe this helps maintain context in larger code examples.

I do this entirely in Keynote. This effect is created primarily with three shapes, the first two are both black rectangles set to 65% opacity for obscuring the upper and lower parts of the code, while the third is transparent rectangle with a white border, allowing me to “ring” the code I’m highlighting.

I used to “hand” animate each stage of the animation, painstakingly adding animation “Actions” to move and resize the three independent elements, but I have now come up with a better technique: Magic Move.

Magic Move is a slide transition that will cause Keynote to automatically create an animation between matching elements on two different slides. So now, rather than have one slide with 30+ different animations, I duplicate the slide, move the elements where I want them to end up for that step, and turn on Magic Move for the previous slide:

Magic Move Slides

This drastically cuts down on the time it takes to do the animations and the animations end up being smoother as a result. I no longer dread wanting to change the code on any given slide.

Live Demos

My typical mantra when it comes to live demos is: don’t.

But, there’s something entertaining about a live demo, and I’ve never met an audience who wasn’t forgiving about issues. My hard and fast rule is to never do a demo that requires internet connectivity.

When giving live demos I always make sure I have a screencast of the same demo, as well as screenshots — worst case scenario I can flip through slides and give the play-by-play.

More recently I’ve been building my demos inside docker containers; this gives me a simple and easy way to manage them, and ensure I’m getting repeatable results every time.

Time & Effort

I put 120+ hours into every slide deck I create, and I continuously tweak them before every presentation based on the previous rendition. I strive to make them as entertaining and educational as possible for the live audience, while also being informative for the passive audience.

Not Without My Slides

While I can give my talks withouts my slides — everything I say in my talks has at some point been part of a conversation at least once I’m sure — I truly believe that they enhance my ability to teach dramatically. At the end of the day, the goal is teach something, and as we learned above, different people learn in different ways.

So, yes, I can give the talk without my slides, but I’m potentially leaving people behind if I do.

Thanks to Katie McLaughlin for reviewing this post.

Speaking at phpDay 2015

This post is over 4 years old and is probably out of date.

I will be returning to Verona for phpDay 2015 in just a few weeks to give two presentations, Writing Faster PHP with HHVM & Hack, and a new talk on PHP 7:

What to Expect When You’re Expecting: PHP 7

PHP 7 is coming, and with it will come new features, backwards compatibility breaks, and huge performance gains.

This talk will get you prepared for all the changes in this upcoming release and offer practical advice you can implement now to ensure you code still works come upgrade time.

I’m excited to give my first talk on PHP 7, and excited to go back to Verona — if you have the opportunity to get there, it’s a beautiful city, with wonderful people, and don’t forget to sample the amazing Gelato!

Hopefully I’ll see you there!

Speaking at php[tek] 2015 (May 18th-22nd)

This post is over 4 years old and is probably out of date.

I will be speaking at php[tek] again this year, php[tek] is a cornerstone of the PHP community calendar, and I cannot wait to be back in Chicago1 again.

I will be presenting another new talk:

Extending MySQL with PHP’s MySQL Native Driver**

PHP’s MySQL Native Driver (mysqlnd) has been providing great performance benefits since PHP 5.3, but there is more to it than just replacing libmysqlclient.

MySQL Native Drivers plugin architecture provides the ability to do read/write splitting, caching, load balancing, and more. Learn how to do all of these things simply and transparently, as well as how to write your own plugins using PHP.

Hopefully I’ll see you there!

  1. Rosemont 

Speaking at Lone Star PHP 2015!

This post is over 4 years old and is probably out of date.

At Lone Star PHP 2015 next month I will be working with the fantastic Elizabeth Smith, Beth Tucker Long, and Michelle Sanver to bring you the PHP Foundations track again this year.

This will be my fourth Lone Star PHP, and it has been one of my favorite conferences every year, I cannot wait to get back to Dallas!

Lone Star PHP runs from April 16th – 18th, with the addition of a new training day bringing it to 3 days this year.

I will also be speaking at the DallasPHP User Group on the 14th with Yitz (@coderabbi).

I hope to see you there — come up and say “Hi!”.

Speaking at PHP UK 2014

This post is over 5 years old and is probably out of date.

I’m pleased to announce I will be speaking at PHP UK in London. PHP UK will be on February 21st and 22nd.

I will be giving two talks, “PHP 5.NEXT: The New Bits”, which will cover PHP 5.6 (or whatever is appropriate come February!) and “PHP Performance: Under The Hood”, which will be a performance talk with an emphasis on what’s going on in internals.

This second talk is intended as a way to get to know more about the engine, how it works, and what’s really going on with your code.

Last time I went to PHP UK in 2012, it was one of the highlights of that year, and I fully expect it’ll be the same for me next year. I hope to see you there, tickets are on sale now!

Speaking at Sunshine PHP 2014

This post is over 5 years old and is probably out of date.

After being part of the inaugural, and immensely successful Sunshine PHP in 2013, I am so delighted to be invited back to speak at my “home” conference in 2014.

Sunshine PHP takes place in Miami, February 6-8th 2014, and will be speaking on “MySQL HA, Recovery and Load Balancing”.

Using MySQL Server and Percona XtraDB Cluster we will take a look at several possible replication configurations for MySQL high-availability, disaster recovery and load-balancing. After comparing them for administration ease, scalability of reads and writes, robustness of the system for errors and time for data recovery as well as looking at how they impact your code-layer we will discuss the ins-and-outs of each setup, looking at the pros and cons, and what trade-offs you will need to make depending on your needs.

SunshinePHP is a great conference and the fact it’s in sunny Miami is a bonus. Tickets are on sale now!

Speaking at PHPBenelux 2014

This post is over 5 years old and is probably out of date.

Three years ago I heard about this awesome conference in Belgium, PHPBenelux, and for the last two years I’ve been kicking myself for missing the CFP.

Well, this year, I didn’t miss it, and I got accepted!

I will be giving my new talk, “PHP Performance: Under The Hood”:

We’ve all experienced performance issues and we would typically turn to a profiler. Whether that’s something in userland, or a tool like xdebug or xhprof, the reason is the same: to figure out why our code is slow.

This talk will take that inspection a step further and look under the hood of PHP, at the C internals, for common performance problems.

If you’ve ever wanted to know exactly what your code is doing, and why ++$i is faster than $i++, this talk is for you.

I hope to see you there!

Speaking at Nomad PHP (EU)

This post is over 5 years old and is probably out of date.

Hot on the heels of my ZendCon EU Keynote announcement yesterday, I wanted to invite everybody to sign up for Nomad PHP EU. Nomad PHP is an online PHP User Group for people who don’t have a local user group, or who just want to see more quality talks!

For those of you in Europe, or who want to watch the talks during work hours with your team, there is now Nomad EU. Nomad PHP EU meetings take place at 20:00 CET, which is 2pm EST, or 11am PST.

I will be presenting Introduction to Databases on November 14th.

This talk will cover the basics necessary to help you decide what data to store, where, and how.

We will cover PDO — PHP’s Data Object extension, which allows you to talk to a variety of databases, including MySQL.

You will learn how to CRUD — Create, Retrieve, Update and Delete data, database schema, and when to use indexes.

Additionally, we will look at other data storage systems such as memcache, and nosql databases.

I originally gave this talk at Lonestar PHP 2013 back in June and it was my favorite talk I have given to date — if you are new to databases, want to learn JOINs and Foreign Keys, or just want to brush up on your fundamental MySQL skills, this talk will have something for you!

Keynoting at ZendCon Europe

This post is over 5 years old and is probably out of date.

In a little under three weeks I will be giving the closing keynote at ZendCon Europe. This will my first keynote and I’m excited to be talking about The Evolution of DevOps.


With the rapid adoption of new software development methodologies and infrastructure as a service (IaaS), we’ve seen a new role emerge,
DevOps. The DevOp is a master of this new domain: The Cloud. But just as quickly as we’ve seen DevOps emerge, we’re seeing the role evolve as advanced platforms and services enter on to the scene. During this talk, we’ll explore how DevOps is evolving, what that means to you, and your role in the ever changing landscape of development and the cloud.

ZendCon Europe will be in Paris from November 18th – November 20th, I hope to see you there!