Recent Posts

Web workers: errors and debugging

I’ve been continuing to experiment with web workers this past weekend and found some more interesting information. It seems that the earlier implementers, Firefox 3.5 and Safari 4, have some quirky differences in their capabilities and behaviors. I discovered this as I was trying to figure out what would happen if an error was thrown... […]

What makes a great software engineer?

A couple weeks ago, a presentation made the rounds online about Netflix culture. The presentation featured the many benefits of working for Netflix and how the company goes about hiring (and firing) employees. While there was a lot of information about Netflix’s treatment of employees, which clearly makes Netflix an attractive place to work, the... […]

Experimenting with web workers

In the past couple of months, there’s been some good information floating around about web workers. I have no desire to add yet another introduction to the topic into the blogosphere, but I would like to share some information about my experiences with web workers. What follows are some notes based on my playing around... […]

Timed array processing in JavaScript

Not too long ago, I blogged about a way to asynchronously process JavaScript arrays to avoid locking up the browser (and further, to avoid displaying the long-running script dialog). The chunk() function referenced in that original blog post is as follows: function chunk(array, process, context){ var items = array.concat(); //clone the array setTimeout(function(){ var item... […]

Computer science in JavaScript: Credit card number validation

Credit cards on the web sites have become just about as ubiquitous as sign-in forms. One of my favorite moments in computer science was learning the algorithm for determining a valid credit card number. The process doesn’t involve making a call to a server or checking accompanying information, just a basic algorithm that uses a... […]

The best way to load external JavaScript

Not too long ago, I wrote about loading JavaScript without blocking by creating a dynamic <script> tag. When <script> tags are in the flow of an HTML document, the browser must stop rendering and wait for the script file to download and execute before continuing (example). Creating a new <script> tag via JavaScript avoids this... […]

Safari doesn’t properly display one-bit favicons

With my current workload, most of my debugging involves JavaScript and, sometimes, CSS. This is the first time I can remember needing to actively debug an image. I saw an issue where a favicon wasn’t being displayed properly in Safari (both 3 and 4). I kept going back and forth between browsers, verifying that the... […]

Introduction to sessionStorage

One of the most interesting parts of the recent browser evolution has been the explosive growth in the number of options for client-side data storage. Prior to this past year, our only viable cross-browser method of storing data on the client was cookies. Cookies have the downside of adding additional overhead to server requests and... […]

Common debugging mistakes

When web developers think about debugging, they typically think about tools such as Firebug that are used to figure out the crazy CSS and JavaScript issues we encounter every day. Tools can be useful for debugging but debugging is more about a way of solving problems than any particular tool. As such, good debugging approaches... […]

Firefox 3.5/Firebug XMLHttpRequest and readystatechange bug

Last Thursday I was debugging an issue at work that was reported by two colleagues using Firefox 3.5. Initially, they had neglected to mention their fast upgrade to the latest Firefox and I spent some time fruitlessly trying to reproduce the issue. The complaint was that our page wasn’t displaying an Ajax response even though... […]

Copyright © 2004-2016 Nicholas C. Zakas. All Rights Reserved. All code examples on all pages, unless otherwise indicated, are BSD licensed. Blog Feed