2010 Year in Review
Welcome to my second annual Year in Review. Lots of changes and exciting things happened this year, including a space shuttle launch, a house purchase, hearing damage, a job change, traveling to New Zealand, and shoulder surgery.
Using a dnscache proxy to get faster AppleTV movie downloads and still use OpenDNS
Since buying the new AppleTV a few months ago, I've been disappointed in how long you have to wait for your movie download to be ready for viewing. I get about 10Mbps download speeds through Comcast, and use OpenDNS, so shouldn't it be faster than 15-20 hours? Changing from HD to Standard definition has helped a bit, but you still have to come back later to watch your movie.
Today I came across this story on Slashdot that identifies the problem: Akamai, the CDN that Apple uses to distribute its content, does geolocation on the DNS request to determine the IP of the server you should download your movie from. By using a 3rd party like OpenDNS or Google for your DNS service, you'll get the IP of the server closest to that DNS server, not the closest one to you. Makes sense, this is how many CDNs work.
Since I have a home linux server doing NAT, DHCP, and some file serving, I figured I would just just proxy my DNS through dnscache to solve this problem. The idea is to send only any Akamai related DNS requests through my ISP's servers, and send everything else to go through OpenDNS. And it works! I'm watching Inception, in HD, minutes after downloading it. Here's what I did to get it working.
GitHub Pages + Pirum = Easy PEAR Channel
I prefer managing my non-PEAR PHP dependencies (such as Zend Framework and PHPUnit) through PEAR channels when possible. It's much easier to manage component installation, upgrades, etc.. Managing and hosting a PEAR channel (using the Chiara_PEAR_Server) is not always that simple, and can add too much overhead for small projects. I like how Zend Framework leveraged google code to host its PEAR channel, and was able to update it simply through pushing to SVN, avoiding a web interface. Since I've been accumulating some components recently that really don't fit into pear.php.net, I figured it was time set up a PEAR channel for distributing them, but didn't want to host it myself or have to use a web interface. Turns out, it's really easy to do now.