Recent Posts

Backing up my life with a Synology NAS

Managing your to-do-list as a staff+ engineer

What's the difference between JavaScript engines and JavaScript runtimes?

Introducing humanfs (formerly fsx): A modern filesystem API for JavaScript

JavaScript WTF: Why does every() return true for empty arrays?

Managing your interrupt rate as a tech lead, part 3: Office hours and appointment blocks

Managing your interrupt rate as a tech lead, part 2: Time blocking

Managing your interrupt rate as a tech lead, part 1: You get more of what you reward

Disabling paste in textboxes is not a security feature

Automating tweets with Twitter API v2

Creating a Jekyll-style blog post URL in Astro

Creating a Jekyll-style blog post year archive in Astro

Setting up a Rust development environment with Visual Studio Code

Sponsoring dependencies: The next step in open source sustainability

Making your open source project sponsor-ready, Part 3: Accepting sponsorships

Making your open source project sponsor-ready, Part 2: Project hygiene

Making your open source project sponsor-ready, Part 1: Companies and trust

How to talk to your company about sponsoring an open source project

The lazy-loading property pattern in JavaScript

Two approaches to win an argument as a software engineer

Introducing Env: a better way to read environment variables in JavaScript

Creating a JavaScript promise from scratch, Part 7: Unhandled rejection tracking

Creating a JavaScript promise from scratch, Part 6: Promise.all() and Promise.allSettled()

Creating a JavaScript promise from scratch, Part 5: Promise.race() and Promise.any()

Creating a JavaScript promise from scratch, Part 4: Promise.resolve() and Promise.reject()

Creating a JavaScript promise from scratch, Part 3: then(), catch(), and finally()

Creating a JavaScript promise from scratch, Part 2: Resolving to a promise

Creating a JavaScript promise from scratch, Part 1: Constructor

How to safely use GitHub Actions in organizations

How I think about solving problems

Scheduling Jekyll posts with Netlify and GitHub Actions

Securing persistent environment variables using Vercel (formerly Vercel)

Outputting Markdown from Jekyll using hooks

Computer science in JavaScript: Circular Doubly-linked lists

Computer science in JavaScript: Doubly linked lists

Why I've stopped exporting defaults from my JavaScript modules

Computer science in JavaScript: Linked list

My (somewhat) complete salary history as a software engineer

Extracting command line arguments from Node.js using destructuring

Detecting new posts with Jekyll and Netlify

Scheduling Jekyll posts with Netlify and AWS

The inception of ESLint

The ECMAScript 2016 change you probably don't know

ES6 module loading: More complicated than you think

Mimicking npm script in Node.js

Reflections on ESLint's success

React and the economics of dynamic web interfaces

Why I'm not using your open source project

Hidden performance implications of Object.defineProperty()

ECMAScript 6 destructuring gotcha

Triggering Jenkins builds by URL

My favorite interview question

Is the web platform getting too big?

From Wordpress to Jekyll: My new blog setup

Announcing the NCZOnline Newsletter

Why you're afraid of public speaking

The bunny theory of code

Consensus-Driven Development

Generalists and specialists: thoughts on hiring

My ECMAScript 7 wishlist

An open letter to the FCC regarding net neutrality

URLs are already dead

Creating type-safe properties with ECMAScript 6 proxies

Creating defensive objects with ES6 proxies

The Value-Effort Matrix: A framework for thinking about work

I have Lyme disease

Announcing Understanding ECMAScript 6

Leanpub: One year later

Accessing Google Spreadsheets from Node.js

Now shipping: Principles of Object-Oriented JavaScript

Maintainable Node.js JavaScript: Avoid process.exit()

Private instance members with weakmaps in JavaScript

How to be a mentor

On interviewing front-end engineers

Now available: ESLint v0.1.0

The problem with tech conference talks lately

The best career advice I've received

Node.js and the new web front-end

Understanding ECMAScript 6 arrow functions

That time the lights went out at Etsy

Understanding how you provide value

Introducing ESLint

The case for setImmediate()

Internet Explorer 11: “Don't call me IE”

eval() isn't evil, just misunderstood

On the politics, cargo-culting, and maintainability of JavaScript

GitHub workflows inside of a company

Blink and the end of vendor prefixes

Getting the URL of an iframe's parent

Making accessible icon buttons

Internet Explorer 11′s user-agent string: What does it mean?

What kind of a software engineer do you want to be known as?

On joining Box

Making an accessible dialog box

What technical recruiters can learn from online dating

You can't create a button

What the NFL can teach us about diversity in technology

Fixing “Skip to content” links

Advice for new and aspiring technical speakers

Being right doesn't matter

Now available: Principles of Object-Oriented Programming in JavaScript (beta)

Are your mixins ECMAScript 5 compatible?

Adventures in pointerless computing

Computer science in JavaScript: Quicksort

The Front End Summit new speaker program

JavaScript APIs you've never heard of (and some you have)

ECMAScript 6 collections, Part 3: WeakMaps

The “thank you” that changed my life

Book review: Think Like a Programmer

Does JavaScript need classes?

ECMAScript 6 collections, Part 2: Maps

Thoughts on TypeScript

Computer science in JavaScript: Merge sort

ECMAScript 6 collections, Part 1: Sets

Computer science in JavaScript: Insertion sort

Replacing Apache with nginx on Elastic Beanstalk

CSS Lint v0.9.9 now available

The innovations of Internet Explorer

Setting up SSL on an Amazon Elastic Load Balancer

Setting up Apache as a SSL front end for Play

A critical review of ECMAScript 6 quasi-literals

Thoughts on ECMAScript 6 and new syntax

It's time to stop blaming Internet Explorer

iOS has a :hover problem

Book review: Adaptive Web Design

What's a software engineer, anyway?

Web developers are software engineers, too

The care and feeding of software engineers (or, why engineers are grumpy)

Working with files in JavaScript, Part 5: Blobs

Working with files in JavaScript, Part 4: Object URLs

Now available: Maintainable JavaScript

Working with files in JavaScript, Part 3: Progress events and errors

Working with files in JavaScript, Part 2: FileReader

Working with files in JavaScript, Part 1: The Basics

Book review: The Linux Command Line

The performance of localStorage revisited

How to install Apache Ant on Windows

It's time to start using JavaScript strict mode

In defense of localStorage

Understanding technical debt

Book review: The Art of Readable Code

CSS media queries in JavaScript, Part 2

Book review: The Tangled Web

Now available: Professional JavaScript, 3rd Edition

CSS Lint v0.9.2 now available

Proposal: Scripting detection using CSS media queries

CSS media queries in JavaScript, Part 1

Introducing Props2Js

Book review: HTML & CSS

Timer resolution in browsers

How content delivery networks (CDNs) work

Book review: Closure: the Definitive Guide

Setting up multi-user Apache on EC2

Custom types (classes) using object literals in JavaScript

Improving Rhino CLI utility performance

CSS Lint v0.8.0 now available

So you want to write JavaScript for a living? [repost]

CSS Lint v0.7.0 released

Simple, maintainable templating with JavaScript

When web standards fail us

Script yielding with setImmediate

Experimenting with ECMAScript 6 proxies

CSS Lint v0.6.0 now available

CSS Lint updated to 0.5.0

Introduction to the Page Visibility API

Quick and dirty: Spinning up a new EC2 web server in five minutes

Book review: Eloquent JavaScript

Introducing CSS Lint

On leaving Yahoo! and what's next

Better JavaScript animations with requestAnimationFrame

Lessons on @font-face from the F2E Summit

Using HTML5 semantic elements today

The importance of being versioned

Separating JavaScript download and execution

On UA sniffing, browser detection, and Alex's post

The sorry state of the CSS3 specifications

Thoughts on script loaders

Response to John Resig's comments about YUI

Mysterious arguments object assignments

Wanted: Dynamic execution contexts in JavaScript

Introduction to Server-Sent Events

What's a web browser?

Why is getElementsByTagName() faster than querySelectorAll()?

Upcoming talks

Learning from XAuth: Cross-domain localStorage

The value of HTML validation

What is a non-blocking script?

Working with bidirectional (bidi) text and RTL languages on the web

Determining if an object property exists

Empty string URLs – browser update

Data URIs make CSS sprites obsolete

Cross-domain Ajax with Cross-Origin Resource Sharing

Understanding IE8′s site compatibility view list

The basics of web advertisement tracking

Towards more secure client-side data storage

iPad web development tips

CSUN Conference 2010

Empty-string URLs in HTML – A followup

Custom events in JavaScript

Maintainable JavaScript: Don't modify objects you don't own

Answering Soshnikov's quiz

My JavaScript quiz – answers

My JavaScript quiz

Announcing High Performance JavaScript

How Internet Explorer 8 document mode affects JavaScript

Answering Baranovskiy's JavaScript quiz

Internet Explorer 8 document and browser modes

History of the user-agent string

Interviewing the front-end engineer

Feature detection is not browser detection

Protect IE from empty img src

Writing maintainable code

Computer science in JavaScript: Base64 encoding

Empty image src can destroy your site

What makes a good browser API?

The curious case of JavaScript unit testing

Introduction to web accessibility

Automatic data URI embedding in CSS files

YUI 3 IdleTimer now available on YUI Gallery

Data URIs explained

Book review: jQuery UI 1.6

JavaScript sleuthing: Buggy native JSON

FireUnit: Now with grouping

Domain sharding for all

Web definitions: DOM, Ajax, and more

Moving the Web forward

Introducing Combiner, a JavaScript/CSS concatenation tool

Iframes, onload, and document.domain

Computer science in JavaScript: Selection sort

Computer science in JavaScript: Binary search

Web workers: errors and debugging

What makes a great software engineer?

Experimenting with web workers

Timed array processing in JavaScript

Computer science in JavaScript: Credit card number validation

The best way to load external JavaScript

Safari doesn't properly display one-bit favicons

Introduction to sessionStorage

Common debugging mistakes

Firefox 3.5/Firebug XMLHttpRequest and readystatechange bug

JavaScript minification/compression and performance

Event delegation in JavaScript

Loading JavaScript without blocking

Computer science in JavaScript: Binary search tree, Part 2

Computer science in JavaScript: Binary search tree, Part 1

Speed up your JavaScript: The talk

Detecting if the user is idle with JavaScript and YUI 3

Book review: Learning jQuery 1.3

Computer science in JavaScript: Bubble sort

JavaScript stack overflow error

Cookies and security

HTTP cookies explained

Book review: Nonviolent Communication

JavaScript error handling anti-pattern

Computer science in JavaScript: Doubly-linked lists

Computer science in JavaScript: Linked list

XPath in JavaScript, Part 3

Who's tweeting about you?

Announcing Even Faster Web Sites

XPath in JavaScript, Part 2

XPath in JavaScript, Part 1

The art of throwing JavaScript errors, Part 2

First review of Professional JavaScript, 2nd Edition

The art of throwing JavaScript errors

Book review: The Art of War

Mozilla JavaScript Extension: __count__

Book review: Learning Ext JS

Mozilla JavaScript extension: __noSuchMethod__

Book review: Learning Dojo

JavaScript variable performance

New site design

Speed up your JavaScript, Part 4

Speed up your JavaScript, Part 3

Speed up your JavaScript, Part 2

Free excerpt from Professional JavaScript, 2nd Edition

The YUI 3 revolution

Speed up your JavaScript, Part 1

What determines that a script is long-running?

Now available: Professional JavaScript, Second Edition

FireUnit extension for YUI Test

JavaScript block-level variables

Redesign my site contest

What are web standards?

Now on Twitter

Books about social interaction

Speaking at SF JavaScript Meetup

Front Page and YUI 3 causes a stir

Professional JavaScript, 2nd Edition available for pre-order

The YUI Test world tour

What happened to Firebug?

ECMAScript 3.1 static object methods prototype

Book review: The World is Flat

Why software engineers fail

Facebook: The transparent society

The IE6 support problem

Ajax Experience: The aftermath

YUI 2.6.0 released

Ajax Experience: Day 3

Ajax Experience: Day 2

Ajax Experience: Day 1

Ajax Experience: Day 0

New Yahoo! front page goes into testing

Inside IE 8′s mutable DOM prototypes

Chrome tames wild dialogs and popups

Blog finally updated

ECMAScript is dead; long live ECMAScript!

Speaking schedule

Naked JavaScript objects

Mentioned in Microsoft whitepaper

What to do with your money

Teaching the children

Congratulations, Jackie and Denis!

And so the HTML 5 trouble begins

Browser cookie restrictions

Cross-domain XHR removed from Firefox 3

Compress context menu item for Windows XP

Wanted: Browser debug mode

Get the JavaScript global

The story of Professional JavaScript

All sizzle and no substance?

The Web could be heading for another dark age

Falling in love with the IE8 JavaScript debugger

Changes in Safari 3.1 for Windows

Big company or small company?

The great Safari keypress debacle

YUI 2.5.1 released, including cookie fix

The dreaded Operation Aborted error

IE8 goodies and baddies

Does Safari's clipboardData actually work?

Big day for the Web

Thoughts on HTML 5

Book Review: Pro JavaScript Design Patterns

Writing for how people read

YUI 2.5.0: YUI Test reaches GA and more

Top JavaScript books of all time

More Opera weirdness

Learning to program

The mysterious Wii remote JavaScript API

New site feeds – please update!

PC Magazine: My Yahoo given 4/5

Can text nodes receive events?

How to markup blog comments?

Torn between two lovers

Getting element dimensions: A follow up

Getting element dimensions

Microsoft to buy Yahoo!?

Book pre-release reviewers wanted

The future of IE and the Web

Introducing JSONLib

getElementsByClassName() weirdness

Is JSON better than XML?

Site usability: What not to do

IE8 passes Acid2: What does it mean?

Internet Explorer 8 user-agent

Don't forget navigator.platform

IE: COM reers its ugly head

What I'd like to see in HTML 5

YUI 2.4.0 has been released

The throttle() function

Browsers too leniant with regular expressions

Announcing the Yahoo! Juku

JavaScript variable scoping trickery

A plea to browser vendors

The rise of Bebo Nation

Gmail: Faster, better

My first pipe: Earthquakes in Northern California

ECMAScript 4: I hate it

Why weren't you at the Ajax Experience?

Learning something new about CSS and IE6

The way JavaScript is handled: A call to action

CSS sucks

Good object-oriented design in JavaScript

Internet Problem: Generic social networking is dead

Keep JSON out of JavaScript

Inconsistent array literals

RWE 2007: All done

Why I don't like the Google Web Toolkit

RWE 2007: Day 2

Internet Problem: Building a better search engine

RWE personal scavenger hunt

Are local variables faster? Part 2

Are local variables faster?

Come see me speak

Internet Problem: The dating site dilemma

My Yahoo! over iGoogle

What makes a good front end engineer?

The state of web syndication

My first YUI release

Professional JavaScript, 2nd Edition feedback wanted

Some of my writings

OpenOffice: Almost there

Standards in Context

Yahoo!'s best-kept secret

ScriptDoc

Professional Ajax at Borders

IE6 fix frees you of memory leaks

Safari 3 on Windows

Bad security decisions

Come see me talk

What is up with recruiters?

JavaScript variable names you shouldn't use

Maintainable JavaScript talk

The new My Yahoo! gets even better

First review for Professional Ajax, 2nd Edition

An open letter to Opera

Safari lies

Taking a little time

Google using YUI grids

Observers shouldn't observe themselves

Surviving an interview with me

Pain with inline-block (again)

What do you love/hate about Professional JavaScript?

.NET to be more like JavaScript

The new My Yahoo! Beta has launched, and I helped

Another Pro Ajax 2e excerpt

Free excerpt from Professional Ajax, Second Edition

A note on JavaScript performance

getElementsMatching()

What's Nicholas doing now?

What's the deal with CSS query engines?

Announcing Professional Ajax, Second Edition

Event order of blur and change

IE vs. PNG: The battle continues

What CSS is missing

Security vs. usability

Spam insights

Feature detection != browser detection

Opacity in IE6: alpha or PNG?

Interesting JavaScript string capability

The JavaScript download gotcha

Standards with sanity

Professional Ajax – Amazon's #8 best tech book of 2006!

Browser detection versus feature detection

Minimizing closure usage

Congratulations to YUI team

Adobe open sources Flash JavaScript engine

The absorb() method

IE's innerHTML problem

The absorb() function

The case against Hungarian notation in JavaScript

Update to zXml

Avoiding plagiarism

I love my job

Debunking object()

Pain with inline-block

Writing again

Small zXml Update

Yahoo! Hack Day

Closures considered harmful

Don't allow overriden methods

Safari Development Tools

RSS and Syndication Roadblocks

New Yahoo! Photos

WebKit on a PC

The Problem Of Photo Sharing

Yahoo vs. Google

Visual Studio Express Rocks!

Mainstream Ajax

IE7 Beta 3

Back Button/Onload Mess

Use Null Comparisons Sparingly

Fun With Null And Undefined

FireBug 0.4

Global Variables Are Evil

Eureka Suite – The Next Generation

And Then There Were Three

Google Web Toolkit

Praise for Microsoft

Design Patterns in JavaScript

Eureka v0.2 – Now With Leak Detection!

The Magic of Unit Testing

CSS + JavaScript = Evil

ActiveX Armageddon

Google Maps API – No XHTML Support

Yahoo! Connection Manager

DOM Tree Update

Alternate Ajax Techniques, Part 2

What do you want to see in Pro JS, 2nd Edition?

XMLHttp Requests For Ajax

Adobe Jumps On The Ajax Bandwagon

AIM SDK

Firebug

IE OnBeforeUnload Fun

Firefox OnBeforeUnload Fun!

Introducing Eureka v0.1

CSS Is Complicated

Ajax Shelflife

Respect JavaScript

Now That's Security!

Yahoo! User Interface Blog

First Professional Ajax Reviews Rolling In

Alternate Ajax Techniques

Javascript Para Desarrolladores Web

IE 7 Beta 2 Preview Released

Upload From a Link

Now Available: Professional Ajax

Using Semantics Correctly

The ping Attribute

Firefox 1.5 Keypress Event Changes

Colored Bullets

JavaScript 1.2 Must Die

Canvas in IE

Someone Else Gets It, Too

Syndication Confusion

RIP Web Trends of the 90s

The Website Development Process

Comment Spam

Firefox 1.5 Released

Want to Work With Me?

Microsoft Doesn't Innovate

Updated: zDragDrop 1.1

Microsoft Invented Ajax

The Death of IE CSS Hacks

Professional Ajax Outline

VistaPrint Goes Public

Ajax Using a Style Sheet?

Safari Recreates Proprietary Extensions

Blame Netscape First

IE7 Makes Developers Happy

How Google Keeps Spammers Away

Web Developer Extensions for Firefox…and what's this?

Web Architecture: 2005

Reviews Wanted!

Microsoft was Right

zArray Update

Force Landscape Printing (IE only)

Pre-Order Professional Ajax!

The Power of Themes

Latest Article

Does JavaScript suck?

Top 5 Web design mistakes

Styled Form Controls

E4X Lives

Array extensions

IE7 Beta 1 Released

Another good review

Ajax book coming along

Favorable Review

Google for Firefox

Google AJAXSLT

Developing with Google Maps

Google Maps API

The Atlas Project

Mozilla's new Array methods

Cajun Is Coming

Updated Book Examples

Examples Not Working

Brendan Eich's Latest

Open Source CMSs – What the?

AIM Mail Debuts

Java or JavaScript?

JavaScript's Future: Cajun

Last Autosuggest Article

Where's the JavaScript?

Announcing The First Co-author

Netscape 8 Messes Up IE

Popups Are Evil

Anonymous Coward Returns

New Book Change = AJAX

Movin' On Up

Netscape 8

IE7 To Have Tabs

On Amazon Reviews

Why Typos?

Another Kind Review

Suggestions For New Book

Initial C# Reactions

A Stellar Review

Working With JSON

Professional JavaScript Forum

First Negative Review On Amazon

Looking For Some Good Reviewers

Safari Passes Acid2 Test

Firefox 1.1 To Support SVG

Sites Release Updates

IE7 User-Agent String Revealed

.Net Impressions

Web Developer Tools

PNG Alpha Support In IE7

From The Editor

zColor 0.1

Opera CEO To Swim The Atlantic

IE7 Beta Details Announced

Mozilla Adding Canvas Support

Ten Good Practices

Safari 1.3

Great HTML Article

First Copy of Book

The Acid2 Test

Autosuggest Some More!

Latest Site

Firefox JavaScript Flaw

Last Day at MatrixOne

Firefox Link Prefetching

Internet Explorer innerHTML Quirk

PayPal SDK

Creating An Autosuggest Textbox

Opera 8 To Support User JavaScript

View DOM Source Bookmarklet

Google X Gone!

IE 7 Information Leaked

Google X Borrows From MacOS

Mozilla Stops Production Of Suite

IE Blog Asks For Feedback

GMail Reflections

Netscape 8.0 Beta

Fighting Code Injection

Finally, DevEdge Has A Home

Tracking Trackback

I Quit My Job, I'm Gonna Blog Instead

Browser Injection Problem

Creating a Firefox Extension

IE 7 Is Coming

Google Maps Explained

More On IE Memory Leaks

IE Memory Problems

Google Maps

Super Bowl Friday

JavaScript Game Programming

Gzip Compression In PHP

How To Build A Mozilla App

Finally, Mozilla vs. Firefox Explained

Ticketmaster.com: The World's Worst Web App

SharpDevelop and Free Book

del.icio.us/tag/javascript

Prevent Comment Spam

Open a New Browser Tab With JavaScript

Kind Words

Pre-Order Professional JavaScript for Web Developers

Create Favicons

JavaScript Compilers

Thunderbird + Sunbird = ?

Autonomous Requests a Bad Idea

Fixing Duff's Device

Fighting Blog Spam

Penn State Kicks Out IE

Wrox Blog

New Netscape Browser

zInherit 1.0 and zEvents 1.1

Reviewers Wanted!

Netscape DevEdge Back!

JRE Hell

Netscape DevEdge Gone

Google Scholar

New Netscape Browser

Referenced in a Book!

PHPeclipse

XML Spy 2005

Firefox 1.0 – Finally!

zEvents 1.0

Helpful Hint for Headless Unix Servers

Tabbed Browsing – Security Risk

CMS Test Drive

JSLint

A Klingon Programming Language (?)

Mozilla Firefox Preview Release

NY Attorney General Rules ADA Applies to Private Web Sites

Site Redesign

Eclipse