A picture of me

Quadcopter

I have been building a Quadcopter. So far, I've been running the Aeroquad software after a few failed attempts to do my own.

But! Now that I know the frame works and that I am capable of flying the damned thing, it's back to custom software for me -- which was the whole point from the beginning. To that end, I have written some simple Arduino test code for the various components of my system:

- ReceiverTest
- MagTest
- GyroTest
- AccelTest
- BaroTest
- GPSTest

In case these are useful to anyone other than me.

I have a code.flickr.com blog post!

Go read it.

AJ Near Me

I finally made enough time to play with three things I've been wanting to check out: Yahoo! Fire Eagle, Google App Engine, and the Authentic Jobs API. The simple and useless result: AJ Near Me.

Let's start with Fire Eagle. Fire Eagle is a location broker -- you use one of the many available methods for it to keep track of your location, and it doles that out to applications to approve. In this case, the idea is that if you're travelling in a new city, and Fire Eagle knows that you're there, you might be interested in what jobs are currently available there. Highly unlikely, I know. And Fire Eagle isn't even really necessary here -- the app could and should simply ask for your current location. My killer app idea that actually uses Fire Eagle properly is automatic tracking of Caltrain trains and notification of delays via Twitter. I'll never get that written, unfortunately.

Google App Engine is an interesting idea: Write your applications to use Google's scalable infrastructure, and they'll host it for free. Currently, it's only available with Python -- something that's certainly not my strong suit. To make things even more potentially frustrating, it's not vanilla Python either, so good luck using any third-party libs that use, say, urllib. Idiosyncrasies inside, I can't pass up free scalable hosting, so I'll probably be using it again in the future (as long as I don't need cron *sigh*).

The AJ API is something I did a few months ago for Cameron and the site. Functionality is pretty basic: get a list of current job listings, filtered by type, keywords, company, etc. One of the bits that I wasn't sure about, but tried anyway was to hook up with the geonames API to parse the user-entered job location bits and turn it into a lat/lon. There's currently no search by lat/lon (but there is a sort of search by location) so this is most of the heavy lifting that the Google App Engine app does.

AJ Near Me maintains a list of current open listings, which it periodically fetches using the AJ API. When you visit the site after granting it permission to read your Fire Eagle location, the site fetches your current location from Fire Eagle. If your location is specific enough, the site searches the local database for all jobs within 50 miles of your location and displays them. Except that's the more difficult part.

Typically, you would create your rough 50 mile bounding box and query the database for records within those four points. Except that in Bigtable, you can't do inequality queries on more than one field at once (I'm serious). So instead, you store your locations as Geohashes/Geoindexes, convert your lower-left and upper-right bbox points to geoindexes and query the datastore like so:

query = Job.gql("WHERE location_hash < :right AND location_hash > :left", left=lower_left_index, right=upper_right_index)

This gets you close, and then you can use geopy's great-circle distance calculation function to whittle it down to records actually within 50 miles of your location.

Like I said, a useless idea, but learning about geohashes and bounding box calculations made it worth it. Fire Eagle is a fantastic product and I have high hopes for it -- and about a thousand ideas. Google App Engine can be frustrating, but totally perfect for small projects. I'll be using it again for sure. And if they ever release a PHP version of it, I'll put BlogSkins on it in a heartbeat.

Pixar's movies in order of Metacritic score

Erin and I were talking tonight about how no one ever talks about Pixar's A Bug's Life. It wasn't a bad movie, and certainly not the worst movie Pixar's ever made, but it's simply never mentioned as part of Pixar's catalog.

So I decided to look up the scores of all of Pixar's movies on Metacritic:


  1. Ratatouille - 96

  2. Toy Story - 91

  3. The Incredibles - 90

  4. Finding Nemo - 89

  5. Toy Story 2 - 87

  6. Monsters, Inc - 78

  7. A Bug's Life - 77

  8. Cars - 73


Which is funny, because my order is:

  1. Toy Story

  2. The Incredibles

  3. Monsters, Inc

  4. Finding Nemo

  5. A Bug's Life

  6. Toy Story 2

  7. Ratatouille

  8. Cars


Which doesn't put A Bug's Life in a very different position, but there's a big gap between 6 and 7 in my list. I really didn't care much for Ratatouille (although Erin did), and I really, really didn't care for Cars.

I have high hopes for WALL-E though. Perhaps it can take the number 2 or 3 spot?

Writing a new blog post


  1. Think of idea for new post

  2. Visit Wordpress admin, realize I need to upgrade

  3. Download new version, upload it to my server, upgrade software, check everything still works...

  4. Forget what I was going to post

I'm riding to end AIDS

Canada Road

Last year my former neighbor and good friend Brad rode the 2007 AIDS/Lifecycle ride, a 545-mile, 7-day bike ride from San Francisco to LA. As someone who was just getting into cycling at the time, Brad's participation and passionate stories about his experience on the ride inspired me to join him on the ride this year in June.

So I've been training. I ride to and from work every day (with a train ride in between), and on weekends I've been gradually doing longer and longer rides. I'm very lucky to be living on the San Francisco bay peninsula, where there are many, many rides to choose from. So far, training is going well, and I think I'm going to be ready in time.

I have two reasons to do this ride this year:


  1. To help fight HIV/AIDS,

  2. To participate in a form of exercise that I actually enjoy.


#2 is obvious (riding around here is so much better than running on a treadmill). As for #1, I tend not to think about AIDS all that much. I certainly haven't been personally affected by it yet, or know anyone who has. But to hear some of the stories from the AIDS/Lifecycle folks or from Brad, I feel motivated to try and do some small part to end this terrible disease.

I'll obviously be riding a long distance, and to help keep me motivated during that time, I'm asking that you please consider donating to support the HIV/AIDS-related services of the L.A. Gay & Lesbian Center. Please give them as much as you can, and let's put an end to HIV/AIDS.

Thank you.

Hello Dan

I'm not sure who first directed me to Lost Garden (probably Cal), but it's been one of my favorite reads ever since. The game design theory posts are interesting, but the prototyping posts are the most inspiring.

After completely skipping over the CuteGod challenge, I've taken on a couple of the others. I didn't get very far with Tree Story, as you can see:

TreeStory

But I did get jumping/backflipping done before I lost interest.

Last week Danc posted a new prototyping challenge: Play With Your Peas. After a few days of playing with it on the train, I have most of the editor done:

PlayWithYourPeas

The hardest parts are still remaining: AI, pathfinding, physics, balance. And I'll probably lose interest well before I get that far. But that's not the point really -- just getting this far has been a lot of fun, and a nice break from what I'm normally working on. Who knows? Maybe in a couple weeks, I'll post a "finished" product.

Back (really)

It was about 6 months ago that my blog got hacked. Some Movable Type vulnerability or something resulted in a call from my hosting provider, telling me they had to take my site down. Rather than take the steps to fix it, I left it down, and moved on to other things.

In the time since, I've thought about posting one thing or the other to my blog, but the urge was never enough to get me to do anything about it. In the last month or so, however, as the urge grew, I started to take steps to bring it back. I brought the old blog back and updated Movable Type to hopefully block whatever security hole screwed me the first time. But I'm tired of MT and tired of the constant stream of "New comment posted" emails that are just spam bot after spam bot.

So I moved to Wordpress. Why Wordpress? It's lightweight, more hackable (PHP), Matt Mullenweg seems like a nice guy (we played a strategically horrible game of Werewolf together at Etech, where we were the two werewolves), and it powers the Flickr Blog. Plus, Derek had recently unveiled a nice clean Wordpress theme that I liked. And Akismet is a top-notch spam filter, which has already (silently) protected me from comment spam.

So, there we go. Now then, what were those things I wanted to post?

Back (sort of)

The blog is back (sort of), but it'll look a lot different very soon.

Growing Up

Eric's Archived Thoughts: Growing Up - One of the sweetest things I've ever read (via waxy)