Using $.Deferred to Group AJAX Requests

I am working on a project that contains a lot of charts. Since the data driving the charts could take some time to load I am making each chart load asynchronously using jQuery’s ajax functions.

This has worked great, but I noticed that some of the charts are using the same dataset, just charted differently causing the same data to be requested multiple times from the server. One way to handle the duplicate requests is to use the jQuery.Deferred() when making requests.

How To Make A Snowball

Earlier I talked about why I created Yeti, the simple debt snowball calculator. Now I am going to talk about some of the technical decisions that went into the initial release.

Yeti Hunting

I just released a simple debt snowball calculator: Yeti.

Since college I have had many conversations about the best way to pay off student loans, credit cards, and mortgages.

If you only have a single debt, the answer is simple, spend more–pay it off sooner and save interest. The more debts that you have, the trickier it is.

A common approach is to use a debt snowball to gain momentum by focusing on single loans at a time and keeping the debt repayment amount constant after each is paid off. This creates a “snowball” effect where the money you were spending on a loan gets added to the next loan repayment and the “snowball” gets larger–debts get paid faster. Simple idea and a good way to pay off debts quickly. But did you know that the order that you pay off debts changes how much money you can save on interest?

Billings Pro Server 1.5 Port Forwarding

I’ve been using Billings Pro (BP) since it first debuted. I love it. It is a very nice, simple way of tracking and invoicing clients with multiple people working on the projects. I’ve been running Billings Pro Server (BPS) and syncing up with a remote machines running BP. However, with the recent upgrade to 1.5 the syncing stopped working.

Combining the Cicada Principle with CSS3 Background Gradients

Lately I have been trying to use CSS as much as possible without having to make images, especially for backgrounds. A few months back I read about the cicada principle as it relates to design. It was a fascinating read, if you haven’t read it already, you should do yourself a favor and read it now. Also check out their cicada gallery for interesting examples of the cicada principle in action.

External Links in A New Window

One of my friends was talking about how they wanted links to open up in a new window so that people wouldn’t have to leave the website to see the pages. Not that uncommon of an idea, but the method that was being used for it was a bit overkill.

jQuery Sortables with Ctrl + Drop Copying

Currently I am working on a project that has a few jQuery sortable lists on the page. One of the new features that I wanted to implement was the ability to copy elements from one sortable to another. I couldn’t see any option for this in the standard sortable so I decided to see how hard it would be to add.

Example of sortable element copying between connected sortables.

GIT SSH keys with Hudson on Ubuntu’s Tomcat

I’ve recently covered how to configure git with Hudson on Ubuntu’s Tomcat and it has worked quite well. After taking the plunge and subscribing to have private repositories on github I ran into an issue of not being able to clone the private repository since it was… well, private.

GIT Configuration with Hudson on Ubuntu’s Tomcat

During my recent migration from using SVN to using GIT for my open source projects I was reconfiguring my Hudson CI server and started seeing this message:

Caused by: hudson.plugins.git.GitException: Command returned status code 128:
*** Please tell me who you are.


git config --global ""
git config --global "Your Name"

Google AJAX Library CDN Versioning

It’s amazing what you find when you read the documentation. Since I always forget the address for Google’s CDN hosting of jQuery I have to search for it each time. This time when I found the address I was looking around a bit and found out this interesting tidbit that I didn’t know before about Google’s CDN for their AJAX libraries.

Specifying a version of “1.8.2″ will select the obvious version. This is because a fully specified version was used. Specifying a version of “1.8″ would select version 1.8.4 since this is the highest versioned release in the 1.8 branch. For much the same reason, a request for “1″ will end up loading version 1.9.1.

Google AJAX Libraries API Developer’s Guide