speaking engagements & presentations

I speak regularly at JavaScript and general web development events. Here’s what I have coming up, and some presentations from the past:

Lessons from a Rewrite

In late 2010, Toura Mobile had developed a PhoneGap-based platform for creating content-rich mobile applications, and customers were buying. The problem was that customers were also asking for more and more complex features, and Toura was rapidly discovering that their platform was more of a prototype than a solid base for future development. In this session, I’ll talk about the decision to start from scratch, what we did differently the second time around, how we used features of the Dojo Toolkit to smooth the process, and how we designed the new solution with an emphasis on expecting the unexpected.

  • TXJS, June 11, 2011, Austin, TX
  • GothamJS, July 9, 2011, New York, NY

Modern JavaScript

A call to arms for a Modern JavaScript movement.

Refactoring Your jQuery

Your first iteration of a feature gets the job done, but you have a sneaking suspicion it could be a whole lot cleaner. Where to start? Is refactoring worth the time? In this talk, we’ll look at strategies for refactoring our jQuery, with a focus on isolating individual pieces of functionality and eliminating repetition.

We’ll weigh the evils of premature optimization against the imperative of lean, maintainable code, and you’ll learn how to spot bad decisions you might be making in that first iteration, reducing the need for refactoring in the first place.

Beyond the DOM: Functionality-Focused Code Organization

The magic of jQuery’s CSS-based selection makes it easy to think about our code in terms of the DOM, and sometimes that approach is exactly right. Other times, though, what we’re trying to accomplish is only tangentially related to our nodes, and opting for an approach where we think in terms of functionality — not how that functionality is manifested on our page — can pay big dividends in terms of flexibility. In this talk, we’ll look at a small sample application where the DOM takes a back seat to functionality-focused modules, and see how the approach can change the way we write and organize our code.

Retooling Your Workflow (Or: Git + Tickets = Happiness)

Are you handling client communication with email, updating your clients’ sites with FTP, making manual backups when you think of it, and crossing your fingers that everything gets done and nothing breaks? I’ve been there, and I’m here to tell you: it doesn’t have to be that way. In this talk, you’ll learn how to incorporate the git version control system and a ticketing system into your workflow to bring sanity and peace of mind to your development process, and why you don’t want to work on any collaborative project without them.

  • Presented at Indieconf, Nov. 13, 2010, Raleigh, NC

The jQuery Divide

Project managers, bosses, and teams are picking jQuery as their go-to JavaScript library at an ever-increasing pace. Nobody wants to choose a loser, and as demonstrated by super-meaningful Google graphs, jQuery is leaving all the other libraries in the dust. Plus, it’s easy! And there’s a plugin for everything! And with all those sites using it, finding someone who can write thoughtful, maintainable code with it will be totally no big deal. Right?

This talk is a call to arms. This is not just JavaScript — it’s JavaScript, damnit, a language worthy of respect and, gasp, knowledgeable developers. When well-meaning but uninformed deciders and developers see jQuery as the be-all-end-all answer, conflating a knowledge of jQuery with a knowledge of JavaScript, we all lose. As a community, we owe it to the language — and ourselves — to give those deciders and developers the context they need to make well-informed decisions. Maybe jQuery is the right answer; but first, they need to truly understand the question.

  • Presented at JSConf.eu, Sept. 25-26, 2010, JSConf.eu, Berlin, Germany
  • Slides

Building Large jQuery Applications

When you move beyond adding simple enhancements to your website with jQuery and start building full-blown client-side applications, how do you organize your code? We’ll take a look at patterns for application development using jQuery that promote the principles of tight encapsulation and loose coupling, including classes, the publish/subscribe paradigm, and dependency management and build systems.

Delivering a Responsive UI

As user interfaces get more complex and browsers become home to more and more application logic, front-end performance becomes a pressing concern. Add mobile to the mix, with its slow connections and brutal cache limitations, and front-end developers have a host of challenges on their hands these days. It’s no longer enough to be able to wrangle HTML and CSS into submission—front-end developers have to understand caching, cache-busting, HTTP response codes, combination and minification of files, lazy loading, and more. We’ll talk about the know-how that today’s front-end developers need to bring to the table to develop rich, performant, scalable web experiences.

  • Presented at Refresh the Triangle, Durham, N.C., 2010
  • Slides

Dojo Confessions

I’ve been using, teaching, and evangelizing about jQuery for years. The library’s simplicity is seductive; after a while, it kind of writes itself. So why did I venture into the unknown world of Dojo for a recent project? Find out what I learned about JavaScript code organization, inheritance, dependency management, and more in a whirlwind beginner’s tour of a toolkit that answers some of the big questions surrounding JavaScript development.

  • Presented at Developer Day Durham, Durham, N.C., 2010
  • Slides
  • Article

Using Objects to Organize Your jQuery

When you move beyond simple snippets of jQuery and start developing more complex user interactions and applications, your code can quickly become unwieldy and difficult to debug. This talk will show you how to start thinking about your code in terms of the bits of behavior it comprises, and will teach patterns for code organization.

We’ll start by looking at jQuery code that doesn’t use any organizing pattern, and point out where issues can arise when the code needs to be debugged or modified. We’ll move on to look at how the object literal pattern can be used to solve these challenges by encapsulating features and centralizing configuration options. Finally, we’ll look at organizational patterns that allow for private variables and methods.