Tuesday, July 12, 2011

The day the solution hit me was April 10th. I know this, because I was absolutely giddy when I thought of it, and I posted about it to the AQ Webmasters board so Wassa could bask in my brilliance. =) For years people have wanted to be able to add their own location information to boxes that could be used in their searches. So, for instance, if you solved a mystery box, you could mark the actual location and subsequent searches would return the box in that location. (Just for that person, though--not for everyone, of course!)

I love that idea--I've wanted to run with that idea for years but kept running into technical issues that stopped me cold. I just couldn't figure out how to keep the database queries running fast and efficient with such an option.

I got to thinking about the problem again after reading that Aiphid'sBox Radar app let people do this. I'll admit--it was a little annoying. Here I've been suffering from this problem for years without a solution, and some young whipper-snapper comes along and does exactly that in all about a week with an Android app. That darned app has more functionality than Atlas Quest! Kudos to him, but still.... I was jealous.

I haven't seen the code for Box Radar, but I could imagine how it would work if I created it, and it would have been easy. Seems so unfair than a feature can be so easy for an app and so difficult for a website. But admittedly, the app only had to download a small subset of all boxes--probably less than a thousand--while Atlas Quest supported over 100,000 listings. And the data stored in an app can be changed without worrying about how it might affect others. He could overwrite the location data and not worry about someone else coming along and seeing it. It's not like someone else will come along in ten seconds and run the same search on the owner's Droid.

So I stewed in misery, unable to figure out how to implement something that, on the surface, seems so utterly simple.

Then I decided I needed to do something about it, and I implemented a page that allowed me to set a location for a letterbox and store it in the database. And when I pulled up the box listing, it would show the original location along with my own changes (if there were any). It was pretty, but completely and totally worthless because that information was never used in the searches. I couldn't figure out how to integrate it into the search results efficiently. Argh! For all the functionality it added, I could have just typed in the location as a box note and accomplished the same thing.

So I did what I often do when I run into a problem without a solution--I went for a walk to think. =)

And during this walk, the solution hit me. Smacked me right across the side of the head and left me silly. I could totally make this work. It would require a relatively small change in the structure of the database, and a heap of changes to the code that rested on top of it, but I was absolutely certain I could make this work. It would be a huge effort, though. The change to the database, as I said, was relatively minor, but the changes required in the code would be extensive. If it took less than a month, I'd be surprised.

And when I got back home, I posted to the webmaster's board to tell Wassa about my idea, which is how I know the solution finally hit me on April 10th. =)

Letterbox searches are at the heart of Atlas Quest, and I started making a mental list of all parts this change would affect and the added difficulty of transitioning from the one type of a search to a new type of search. I wondered, since I was going in deep to muck around with the code, if I could fix a few other issues along the way. I wondered how I could test my changes before rolling it out on the live website. The kind of changes this would entail invariably would break lots of stuff, and I worried what I'd do if it broke so badly I couldn't get it fixed quickly but already passed the "point of no return."

So I started taking baby steps. Early on, I discovered that the geocoder I was using had been depreciated and had to be replaced. Well, I thought, I could certainly make a few improvements to that! I spent weeks on it, creating multiple geocoders which I've talked about before. Then I connected them to profile locations--a low risk way to test the geocoders and fix any glitches with them.

Then I expanded it to blog searches--which had always been dreadful anyhow. I didn't put much effort into that in the past because I didn't really expect many people would use it, but now I could fix all those problems while testing the changes I would later introduce to boxes.

Then it expanded to virtuals, which had additional requirements and was the first solid test for how box searches would look and how they would work. Virtuals were easy, though--none of them ever had location information, so I didn't have to worry about making sure old code continued to work--just that the new code worked as expected.

Then it expanded into event listings, which was a little more challenging since it needed to work with older code. And all along the way, each feature touched by these changes improved, often times so quiet that nobody noticed. =)

And then finally, it was time to roll out the changes to letterboxes. The very heart of Atlas Quest. The new code I created seemed pretty solid and was designed to be very easy for me to reuse across the website, and--for the most part--I didn't expect any major issues rolling out the feature to boxes. There was still a lot of work to integrate the changes into Atlas Quest, but it would be manageable.

And, at long last, the feature I wanted to support, the feature I've been working towards for three months, is finally here: The ability to set a private location for a letterbox--a location that will be used instead of whatever the owner of the box listed whenever you run a letterbox search.

This feature has taken me three months to fully implement. Seems like a relatively easy, straight-forward feature, doesn't it? Okay, admittedly, I improved a few other things that this feature touched along the way, but for the last three months, this is the one I've been shooting for.

It was an enormous undertaking, and that's partly why I've decided to make it a premium member only feature for the time being. It's premium members that have supported me and allowed me to work for three months to get this feature implemented, and if I had been forced into a regular 9-to-5 job, I'd never have had the time or energy to implement it at all. This really is a feature that could only have happened because of support from premium members, so--for now, at least--this will be a premium member perk. Thank you, premium members, for your support. I couldn't have done it without you. =)

Now--let's get into the guts of the feature. When you view the box details page, you'll see the "Location" like you always have. Premium members will also see a "Custom Location" listed immediately below it. So even if you set a custom location, you can still see what the owner of the box originally had listed as the location.

Since no boxes will have a custom location until you add one, it'll say "None specified" along with a small icon of a pencil that allows you to set a custom location. Click that and follow the prompts to add a custom location to the box. Save the location, and you're done.

Now, all letterbox searches you run will use your custom location instead of the original location. The location shown on the search results page will be your custom location--not the original location used for the box. The only places you'll see the original location is on the box details page and the clue page, right next to the custom location you entered.

As always, with an update this big, there are bound to be bugs, so if something doesn't seem to work correctly, give me time to fix it. =)

Let me also note that there are several additional noteworthy changes with this update, but if I discussed them all in this post, you're head would probably explode. =) So.... I'm going to post about some of the other changes over the next few days rather than one enormously massive post that will make your head explode. If you see a change I haven't mentioned yet, be patient. You'll probably see me blog about it at some point over the next few days where I'll explain it in more detail.

Ryan! Thank you!!!!! I think this weekend, I'm going to update locations on a whole mess of boxes, then map them up and plan a trip! All those locals who've been thwarting me by putting "St. Louis County" as a location: moo-ha-ha-ha-ha! Technology and the Green Tortuga to the rescue!

Did a quick search for a box where I had the actual location saved in a note, and updated the custom location. On a regular location-based search, this box now shows up in the list next to the other boxes it is, well, actually, physically next to! Huzzah!

However, clicking through to box details, then clicking on "nearby boxes" didn't work - it seemed to use the original planter's location instead of the custom one, because it came up on the list in the same place it always had before, with boxes no where near it.

Glad to see the custom location is available for every box, not just mysteries. The last two days I have spent mapping out many boxes of one area large area for my GPS and there are several that go to a city's center. Thank you!

I am having so much fun with this new tool. I don't understand why there's no chatter on the boards. Is everyone else sorting their to-do lists? If this function doesn't entice premium membership, I don't know what will. I intend to get a lifetime membership next go around. THANKS FOR YOUR WORK, Ryan. ~speedsquare