John Resig

10th Anniversary of jQuery

posted: 14 Jan 2016

Today marks the 10th anniversary of the release of jQuery. I announced it back at BarCamp NYC 2006 when I was still in college. It’s incredible to think of how far it’s come and just how many people have contributed to its success. To them I am forever grateful, thank you. Last year I wrote […]

Building an Art History Database Using Computer Vi

posted: 28 May 2015

Since the fall of 2013 I’ve had the opportunity to collaborate with the Frick Art Reference Library Photoarchive, a venerable art history research institution here in New York City. We’ve been especially interested in finding ways of applying computer vision technology to improve art history research. Art history photo archives are an interesting tool used […]

Using Waifu2x to Upscale Japanese Prints

posted: 20 May 2015

In my spare time I’ve been working on a database of Japanese prints for a little over 3.5 years now. I’m fully aware that I’ve never actually written about this, personally very important, project on my blog — until now. Unfortunately this isn’t a post explaining that project. I do still hope to write more […]

Annotated Version of the Original jQuery Release

posted: 07 Apr 2015

Recently I was prompted by Daniel Lamb to try and find old versions of jQuery for his jQuery Archive project. Thankfully I was able to find one in the Internet Archive from just a couple weeks after its release, in January 2006. I then took that opportunity to put that code online and I used […]

Low-cost .com Domains with Whois Privacy

posted: 22 Nov 2014

In an effort to be more privacy conscious I’ve been looking to transition to having Domain Privacy enabled on all the domains that I own. As it turns out many domain registrars, including my current one, charge an additional fee for this service. In an effort to save some money I did a price comparison […]

Write Code Every Day

posted: 10 Apr 2014

Last fall work on my coding side projects came to a head: I wasn’t making adequate progress and I couldn’t find a way to get more done without sacrificing my ability to do effective work at Khan Academy. There were a few major problems with how I was working on my side projects. I was […]

Use Project-based Interviews Instead of ¬タワGitHub¬

posted: 21 Nov 2013

First, some background: I highly recommend that you read the following two blog posts: by Ashe Dryden: The Ethics of Unpaid Labor and the OSS Community and by James Coglan: Why Github is not your CV. They make some fantastic points and communicate the issues surrounding “Using Github as your CV”. Both of these were […]

Node.js Stream Playground

posted: 15 Nov 2013

This summer I had the opportunity to attend NodeConf and it was a fantastic experience. I really appreciated how every session was a hands-on coding session: I felt like I walked away knowing how to put a bunch of advice directly into practice. One of my favorite sessions was the one run by James Halliday […]

Gittip at Khan Academy

posted: 16 Jul 2013

For a while now I’ve been a huge fan of Gittip. I think they’ve created one of the most interesting models for funding Open Source development. One of the missing pieces, for most Open Source developers, is having consistent, reliable, income backing your development. Some developers are sponsored by their work place, others have a [...]

Asm.js: The JavaScript Compile Target

posted: 03 Apr 2013

Like many developers I’ve been excited by the promise of Asm.js. Reading the recent news that Asm.js is now in Firefox nightly is what got my interest going. There’s also been a massive surge in interest after Mozilla and Epic announced (mirror) that they had ported Unreal Engine 3 to Asm.js – and that it [...]

WebKit is the jQuery of Browser Engines

posted: 13 Feb 2013

The news has just come out that Opera is switching all of their browsers (both mobile and desktop) to use WebKit (specifically, Chromium). I’ve seen a lot of gnashing of teeth on Twitter and I feel like I can respond because I use to feel the same way back in 2008-2009. However this is 2013 [...]

Fixing Google Analytics for Ghostery

posted: 08 Feb 2013

As an avid user of Ghostery, which blocks all sorts of tracking scripts, pixels, and other web bugs I frequently run across a surprising issue: The case in which the Google Analytics ga.js script has been blocked from loading (which is intended) but then some critical piece of functionality on the site is broken. The [...]

Secrets of the JavaScript Ninja Released

posted: 07 Feb 2013

Happy news! My book, Secrets of the JavaScript Ninja is finally in stock on Amazon! It’s been available on for over a month now but I think Amazon has been struggling to keep the books consistently in stock. You can get an ePub or Kindle version of the book at I’ve written about [...]

Keeping Passwords in Source Control

posted: 06 Feb 2013

I learned a neat tip from my co-worker, Craig Silverstein, recently and I thought others might find it to be useful. It has to deal with the eternal question: How do you store sensitive configuration options (such as usernames, passwords, etc.) in source control? Typically what I’ve done is to just punt on the problem [...]

i18n Module for Node and Express.js

posted: 15 Jan 2013

As a follow-up to my post from last week on a strategy for i18n and Node.js I've published my module for handling internationalization in Node and, specifically, Express.js. The module is now available on NPM and can be installed by running: npm install i18n-2 The code and documentation for the module is available on Github [...]

A Strategy for i18n and Node.js

posted: 11 Jan 2013

Recently I internationalized a Node/Express web application that I've been working on and it seems to have gone fairly well (users in multiple languages are using it happily and I'm seeing a marked increase in traffic because of it!). Not much of what I'm writing up here is particular to Node, per se, just a [...]

A Strategy for i18n and Node

posted: 11 Jan 2013

Recently I internationalized a Node/Express web application that I've been working on and it seems to gone went fairly well (users in multiple languages are using it happily and I'm seeing a marked increase in traffic because of it!). Not much of what I'm writing up here is particular to Node, per se, just a [...]

Talk: Khan Academy Computer Science

posted: 26 Oct 2012

This past weekend I gave a talk at EmpireJS on the Computer Science platform that I’ve been developing at Khan Academy. The talk explores that platform and then goes into deeper technical details about how the real-time execution on the site was achieved. I recorded the talk on my laptop (so please excuse the echo [...]

Redefining the Introduction to Computer Science

posted: 14 Aug 2012

I’m incredibly excited to take this opportunity to announce a new project that I’ve been leading here at Khan Academy: Khan Academy Computer Science. We’re releasing a completely new platform that targets people with no programming knowledge and gives them an engaging and fun environment to learn in. Over everything else we wanted to emphasize [...]

Secret Omens: Book Update

posted: 11 Jul 2012

Jeff Atwood wrote up a post today on the merits of writing a technical book in this day-and-age and specifically called out my past post on programming book profits and my work-in-progress Secrets of the JavaScript Ninja. I wanted to give a brief status update on the book and how it’s going. I started the [...]

Image Similarity Search Wanted

posted: 13 Feb 2012

I’ve been working on a few projects in my spare time and one service, in particular, would greatly benefit from a high quality image similarity search. I’ve been trying a number of the Open (and non-Open) Source tools (a great list of which is on Wikipedia here). Thus far none of the tools that I’ve [...]

JavaScript as a First Language

posted: 21 Dec 2011

At Khan Academy we've been investigating teaching Computer Science to students in some new and interesting ways. The most interesting aspect of which is that we're likely going to be teaching them JavaScript as their first language. We're in a very unique position as we're primarily aiming to teach students who've been through our previous [...]

Khan Exercise Rewrite

posted: 28 Jul 2011

Today we’re pushing live a complete rewrite of the Khan Academy Exercise framework (live demo). A big push at Khan Academy has been to write more-and-more exercises for students to practice with. Naturally, to increase the number of exercises that we have, we needed to make it easier for team members, and casual committers, to [...]

Random Khan Exercises

posted: 19 Jul 2011

We're taking an innovative new approach to providing students with exercises in the new Khan Academy exercise framework (which will be released for beta testing soon). In the old framework a problem would be randomly generated and provided to the user. This would result in a near-infinite number of randomly generated problems. This ends up [...]

jQuery 1.6 and .attr()

posted: 13 May 2011

jQuery 1.6 and 1.6.1 are out the door. Congrats to the team and everyone that was involved with the release! A relatively controversial change in 1.6 was regarding how attributes and DOM object properties were handled. In 1.6 we wanted to take the major step of completely separating the two, allowing us to create an [...]

Next Steps in 2011

posted: 03 May 2011

Today I’m announcing a major change in my life: I’m leaving Mozilla Corporation and joining Khan Academy. I joined the Mozilla Corporation in January of 2007, just over 4+ years ago, as a JavaScript Evangelist. During my time at the company I had an amazing opportunity to promote JavaScript. It’s been an incredible experience working [...]

Pulley: Easy Github Pull Request Landing

posted: 21 Apr 2011

I’ve created a simple tool for landing pull requests from Github, which I’m calling “Pulley“. Landing a pull request from Github can be annoying. You can follow the instructions provided by Github (pulling the code, doing a merge) but that’ll result in a messy commit stream and external ticket trackers that don’t automatically close tickets. [...]

Revised JavaScript Dictionary Search

posted: 22 Mar 2011

After my two previous posts discussing dictionary lookups in JavaScript and JavaScript Trie performance analysis even more excellent feedback came in from everyone. Out of all the results two techniques seemed to be most interesting - and promising for reducing general memory usage and load time. String-based Binary Search The first technique proposed was left [...]

JavaScript Trie Performance Analysis

posted: 17 Mar 2011

After my last post discussing dictionary lookups in JavaScript the unanimous consensus seemed to be that utilizing Trie would result in additional space savings and yield performance benefits. A Trie is a relatively simple data structure. At its simplest form you're building a tree-like structure where each final leaf results in a complete word. This [...]

Dictionary Lookups in JavaScript

posted: 15 Mar 2011

I've been working on a browser-based word game, naturally written in JavaScript, and have been encountering some interesting technical challenges along the way. I've written up my thought process here for others to learn from (note that most of this happened over the course of a month, or so). I've often found that while a [...]

Google Cr-48 for Coding

posted: 21 Jan 2011

The other day I saw the announcement for the new Chrome OS test laptop and decided to sign up on the off-chance that I might be able to snag one. In the request form I made it very clear that I would be attempting to use this laptop for development (easily my primary activity). Surprisingly [...]

Learning from Twitter

posted: 21 Jan 2011

An issue popped up on Twitter this past week that caused the web site to be generally unusable for many users. It appears as if attempts to scroll were unbearably slow and caused the site to be unresponsive. The Twitter team investigated and determined that if they reverted the version of jQuery that they used [...]

Spring 2010 jQuery Talks

posted: 04 Mar 2010

I'm giving a number of talks this spring on jQuery and especially on some of the recent additions made in jQuery 1.4. Below are all the slides and demos that I've given. The conferences / meetups that I spoke at (or will speak at, in the case of MIX), and the talks that I gave, are [...]

.closest(Array) in jQuery 1.4

posted: 18 Dec 2009

A new method signature is slated for jQuery 1.4: .closest(Array). It builds upon the previous .closest() method and hyper-optimizes the logic needed for handling event delegation (and live events). closest() (and by extension, is()) has become a critical function in jQuery. With more people using live events reducing any overhead has become of the utmost importance. [...]

.nodeName Case Sensitivity

posted: 24 Nov 2009

When working with the DOM .nodeName property there are two hard-and-fast rules that most people abide by: The node names of HTML elements are always uppercase, even if they're explicitly created using lowercase characters. <html> will result in a .nodeName === "HTML" (see the HTML 5 draft). The node names of XML elements are always in the [...]

Deep Tracing of Internet Explorer

posted: 17 Nov 2009

After reading a recent post by Steve Souders concerning a free tool called dynaTrace Ajax, I was intrigued. It claimed to provide full tracing analysis of Internet Explorer 6-8 (including JavaScript, rendering, and network traffic). Giving it a try I was very impressed. I tested against a few web sites but got the most interesting [...]

Google Groups is Dead

posted: 27 Oct 2009

As far as I'm concerned, Google Groups is dead. For the jQuery project we've run all of our community discussions through Google Group mailing lists for the past four years. At this moment the main jQuery group is the second most popular programming group (next to Android developers) clocking in at over 21,000 members. We also [...]

Talks at the 2009 jQuery Conference

posted: 16 Sep 2009

This past weekend was the 2009 jQuery Conference here in Boston. It was an incredible event - 300 people attended and a ton of discussion, collaboration, and learning happened. Nearly the entire jQuery project team had the opportunity to meet for two days prior to the conference and hash a number of things out - figuring [...]

JSConf Talk: Games, Performance, TestSwarm

posted: 16 Sep 2009

The video from my talk at JSConf has been posted. Thanks to Chris for organizing the conference and the excellent quality of the video. The description from the JSConf site summarizes the talk well: John Resig presents his mystery topic, which is actually three topics that strike his interest. First up is measuring performance and a quick [...]

Unimpressed by NodeIterator

posted: 16 Sep 2009

I just posted a run down of some of the new DOM Traversal APIs in Firefox 3.5. The first half of the post is mostly a recap of my old Element Traversal API post. The second half of the post is all about the new NodeIterator API that was just implemented. For those that are familiar [...]

ECMAScript 5 Strict Mode, JSON, and More

posted: 16 Sep 2009

Previously I analyzed ECMAScript 5's Object and Property system. This is a huge new aspect of the language and deserved its special consideration. There are a number of other new features and APIs that need attention, as well. The largest of which are Strict Mode and native JSON support. Strict Mode Strict Mode is a new feature in [...]

ECMAScript 5 Objects and Properties

posted: 16 Sep 2009

ECMAScript 5 is on its way. Rising from the ashes of ECMAScript 4, which got scaled way back and became ECMAScript 3.1, which was then re-named ECMAScript 5 (more details)- comes a new layer of functionality built on top of our lovable ECMAScript 3. Update: I've posted more details on ECMAScript 5 Strict Mode, JSON, and [...]

How do Mobile Browsers Behave?

posted: 16 Sep 2009

One of my favorite sources of active mining is that of Peter-Paul Koch digging in to mobile browsers and how they behave. Sponsored by Vodaphone to do a study of various mobile devices and their respective browsers, PPK has been doing some serious analysis of what the landscape looks like. Armed with a battery of tests [...]

New Processing.js and Sizzle.js Sites

posted: 16 Sep 2009

Thanks to some generous contributions, there now exist well-designed web sites for two projects of mine: Processing.js and Sizzle.js. Design and logo by Alistair MacDonald (on Twitter) Processing.js was released almost a year ago (May 8th of last year) and it finally has an official web site. At this point the project is being primarily maintained by [...]

Determining Browser Market Share

posted: 16 Sep 2009

A common question that I hear from developers is "What is the market share of Firefox?" (or, more recently, "What is the market share of Firefox 2?"). There are a couple answers but generally you shouldn't care about the results. How do you determine the global market share of a browser? It's hard to give a proper [...]

More Secrets of JavaScript Libraries

posted: 16 Sep 2009

This past weekend I had the pleasure of attending and presenting at the annual SXSW conference, down in Austin, TX. I participated in a panel discussion called 'More Secrets of JavaScript Libraries' (a follow-up panel to last year's talk). The synopsis was as follows: In a reprise from last year's popular panel - the JavaScript libraries [...]

50% Off Secrets of the JavaScript Ninja

posted: 16 Sep 2009

I've been slowly working on a new JavaScript book that covers many of the specifics behind how and why JavaScript libraries are designed they way that they are - titled Secrets of the JavaScript Ninja. I'm still working on the book - I have four chapters left to write - and am hoping to have [...]

Test Swarm Alpha Open

posted: 16 Sep 2009

TestSwarm, the project that I've been working on over the past 6 months, or so, is now open to the public. Mozilla has been very gracious, allowing me to work on this project exclusively. At the beginning of April I moved from my old position as a JavaScript Evangelist on the Mozilla Evangelism team to [...]

Eulogy to _why

posted: 16 Sep 2009

Unfortunately I'm short on time at the moment (trying to launch a project this week) but I have to say, at least, a few words about the hacker and artist _why. At this moment, _why's online presence appears to be no more. All of his sites and code are gone. This includes, and is not limited [...]

Computing with JavaScript Web Workers

posted: 16 Sep 2009

Web Workers are, undoubtedly, the coolest new feature to arrive in the latest version of web browsers. Web Workers allow you to run JavaScript in parallel on a web page, without blocking the user interface. Normally in order to achieve any sort of computation using JavaScript you would need to break your jobs up into tiny [...]