• The end of standalone GPS units?

    Recently I've started using RunKeeper when I walk the dog as well as when we went to the zoo a few weeks ago. I received email from them the other day indicating that they now support heart rate monitoring via the Fisica Ant+ Sensor key and a heart rate strap like the one I have with my Garmin Forerunner 405. This got me thinking that I could replace my Garmin Forerunner 405 for running. One device down as the RunKeeper software works pretty well; my only issue would be wearing my iPhone in a case on my arm. Will the moisture stay out? Will it be too heavy? I'm not sure, but definitely worth looking at sometime in the future when my 405 breaks (or about $100 lands in my lap).

    In addition to using RunKeeper for tracking runs/walks, I used it to geotag photos that my father took at the zoo. This now replaces the i-Got-U device I have used for geotagging. Using the RunKeeper Web site, I can export the GPS track and then use it for geotagging.

    Last Friday I used my Garmin nüvi 765 to get me to a meeting near the convention center. It took me on a strange route that may be due to year old maps or due to strange software routing. Then on the way home, I got to see the 32nd street Naval Station, a place I've never seen in all my years in San Diego! While these 2 issues may just be anomalies, there is pretty much no chance that there will ever be a software update for this unit and the maps are not going to be cheap to update.

    There are a number of navigation applications available for the iPhone that didn't become viable until this past summer when iOS 4 was released. Up until then, navigation apps couldn't run in the background on the iPhone and really weren't up to par. In addition, these applications are including full maps and not loading from the network (one of my major complaints about phone based GPS was that loading maps off the network is too slow and can't route fast enough). The exception to this is Garmin's Street Pilot application; Garmin has decided against putting the 1 GB or so of map data on the device which I think is a huge mistake.

    While I haven't purchased one of these navigation apps, yet, I'll likely do it for a future trip. I'm sure I'll be pleased compared to my aging Garmin, at a much lower price.

    So I've just identified that my iPhone, a device I carry all the time, will replace my Garmin nüvi 765, my Garmin Forerunner 405, the i-Got-U, as well as the iPod Nano I use for running. Is there a reason to keep these devices? I don't think so. A year ago, I wouldn't have said this, but the iPhone 4 and iOS 4 have really come a long way in delivering a quality GPS experience.

  • The wrong way to dispose of a tree?

    The other day when I was running, I saw someone driving along with a Christmas tree dragging behind him. Instead of putting the tree on the roof of the Ford Explorer to take to the recycle site, the driver tied a rope to the trailer hitch and the other end to the trunk of the tree. This was absolutely one of the times that I would like to have used my iPhone for running instead of my Garmin Forerunner 405 so that I could have taken a picture of this. However, a picture didn't tell the whole picture as the smell of burning wood (it wasn't on fire) added to the humor of the situation.

  • Piracy in the Mac App Store

    A number of web sites are reporting that apps in the Mac App Store can be pirated. While this seems to be news, it really isn't in my opinion. As long as I can remember, software has been pirated no matter what developers have done to protect the software. Many applications use a simple user name and registration code for registering; some send a request to a web server to verify the request. In all cases, the software can be cracked by people that are unscrupulous and aren't buying the software. Isn't there other news to report on besides something that really doesn't affect the average user that isn't going to user pirated software?

  • Why oh why? or What was I thinking?

    I was profiling some code today and saw a blip when a startup window closes. For some reason that I have yet to explain, I struggled with the code. What I ended up putting in was something like this:

    [self performSelectorInBackground:@selector(closeStartupWindowInBackground)
                           withObject:nil];

    with closeStartupWindowInBackground defined as:

    - (void) closeStartupWindowInBackground
    {
    	NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    	[NSThread sleepForTimeInterval:1.5];
    	[self performSelector:@selector(closeStartupWindow)];
    	[pool drain];
    }

    Now, anyone that has done Objective-C for awhile knows that this is utter crap. Why spawn a new thread to simply do something after a delay? The correct way to do this is:

    [NSTimer scheduledTimerWithTimeInterval:1.5
                                     target:self
                                   selector:@selector(closeStartupWindow)
                                   userInfo:nil
                                    repeats:NO];

    or

    [self performSelector:@selector(closeStartupWindow)
               withObject:nil
               afterDelay:1.5]

    In addition to spawning the thread, the original code closed the window on a background thread. Many parts of AppKit are not thread safe, so doing that could potentially crash.

    Does anyone know why I'd do something so stupid as write that original code?

    [Update: this gets worse, going back 9 months to my original code before I touched it, I had the performSelector code in there to begin with, but for some reason though that it would block the main thread. Granted it does block the main thread briefly while executing the close method, but that's fine.]