I speak occasionally on subjects which I find fascinating. Often they’re about JavaScript, but sometimes they’re not. Get in touch if you’d like to hear me speak at your next event.

Stack-Agnostic End-to-End Testing with Jest and Puppeteer

For web applications, why does our testing stack change when moving from language to language, when our users are using the same browsers to access them? The Chrome team has done quite a bit of work to make testing in a real browser within reach — and this talk covers how to use it for stable and fast end-to-end tests, executable in any environment.

Presented at 1 conference in 2019.

Kansas City Developer Conference

July 19, 2019 in Kansas City, MO. Slides.

Writing Party Games with Chromecast

The Chromecast, an underpowered computer running the Chrome browser, is often underutilized as a gaming device. This talk will teach you to write a party game, leveraging your guests’ phones as game controllers and your TV as a game board, using only the HTML, JavaScript, and CSS. No app required.

Presented at 1 conference in 2017.

Kansas City Developer Conference

August 3, 2017 in Kansas City, MO. Slides, handout.

Beyond The Tab: Executing JavaScript Across Browser Contexts

Keeping JavaScript from interfering across tabs is great, but what about when a web application wants to share state without a server? You’ll leave this talk with enough knowledge to get started with SharedWorkers, ServiceWorkers, and other techniques and enough wisdom to know when to use them.

Presented at 4 conferences in 2016.


November 20, 2016 in Nashville, TN. Slides, video, handout.

All Things Open

October 26, 2016 in Raleigh, NC. Slides, handout.

Full Stack Fest

September 9, 2016 in Barcelona. Slides, video, handout.


August 19, 2016 in Pittsburgh, PA. Slides, handout.

Leveraging Modern Device Features From the Web

Your website is unresponsive, your cookie size is through the roof. Your competitors have come out with native apps which are flashy and zippy, and they’re eating into your market share. Is it time to drop your website for a native application? Instead of abandoning the web, wouldn’t it be great if you could just spawn a background thread to increase responsiveness, delete some of those cookies and store preferences on the filesystem, and access the accelerometer to get that nifty parallax motion effect — all from the browser? In this talk, you’ll learn to do just that — to spawn threads, save local settings, store your site’s code locally, access a camera and microphone, read accelerometer data, and more! You’ll not only see code samples, but you’ll see working examples designed to get your site off the ground.

Presented at 3 conferences in 2014 – 2015.

Kansas City Developer Conference

June 26, 2015 in Kansas City, MO. Slides.


November 16, 2014 in Nashville, TN. Slides, video.


November 8, 2014 in Washington, DC. Slides.

Demystifying HTTP Headers for a Better Web

Ever wonder exactly what combination of Cache-Control, Last-Modified, Expires, ETag, Vary, and Pragma headers will keep your content cached by browsers just long enough? And what exactly is a HTTP 304 anyway? In this talk, you’ll learn the history behind the available HTTP caching headers, what their values mean, and how browsers and proxies react. You’ll learn the best practices on client cache invalidation, the benefits of sending a Not Modified response, and briefly talk about the changes in HTTP 2.0 (SPDY) around caching — and then you’ll put your new-found header skills to the test!

Presented at 2 conferences in 2014 – 2015.


March 28. 2015 in Houston, TX. Slides.

Kansas City Developer Conference

May 17, 2014 in Kansas City, MO. Slides.

Painless Node.js Asset Management with Connect-Assets

connect-assets is a transparent asset management package for node.js: it compiles, concatenates, minifies, and fingerprints your JavaScript, CSS, fonts, images, and the like to ensure that your site always looks its best, even when you deploy updates to cached files.

As the maintainer of the package, I’ll give a bit of history on the module and talk about why you’d want to use connect-assets in your next web application. We’ll go through the basics of properly serving assets, write (live-code?!) an Express application using connect-assets, and make sure you leave with your questions answered.

Presented at 3 conferences in 2014.


November 15, 2014 in Nashville, TN. Slides, video.

Kansas City Developer Conference

May 16, 2014 in Kansas City, MO. Slides.


February 20, 2014 in Washington, DC. Slides.

Getting Started with Chrome Extensions: Tips and Tricks

You’ve seen Chrome extensions in the wild, maybe even installed a few into your browser — but what about writing your own? In this talk, you’ll learn the basics of Chrome extension development (from git init to publishing in the Web Store), how to avoid having your extension automatically disabled when performing upgrades, and some unexpected parts of Chrome you can hook into to take your extension to the next level.

Presented at 2 conferences in 2015.

Kansas City Developer Conference

June 26, 2015 in Kansas City, MO. Slides, video.


January 8, 2015 in Sandusky, OH. Slides.

UX Design for Developers

So you’ve heard this buzzword “user experience” before, probably out of some hipster’s beard-mouth. But what does it actually mean? We’ll cover the basics of what it means to design software for user experience, including human factors in design, the user-centered design process, and a focus on human-computer interactions. Spoiler alert: it has very little to do with flashy graphics.

Presented at 2 conferences in 2013.

Kansas City Developer Conference

May 3, 2013 in Kansas City, MO. Slides.

Nebraska Code Camp

March 16, 2013 in Lincoln, NE. Slides.

An Introduction to KnockoutJS

My first public talk (and without a formal abstract), this talk presents an introduction to KnockoutJS.

Presented at 2 conferences in 2011 – 2012.

Barcamp Omaha

September 12, 2012 in Omaha, NE. Video.


August 17, 2011 in Kansas City, MO.

Request to Speak

If you’re interested in having me speak at a conference or meetup, or to emcee an event, get in touch and I’ll consider your request.