Change Log

This page contains an incomplete list of work done on the site. Once the site launches, this page will be removed. Therefore, it doesn't have to look pretty.

Released Work

Last release: 2017-08-22 8:01 PM EST (GMT-5)


  • After waiting a month after its development, the site now supports the new Groundspeak API. Some profile information wasn't available in it, so those items have been stripped. Otherwise, you shouldn't notice anything out of the ordinary.


  • Thanks to Renia :-J, I was able to resolve an oversight: the completion code authorization was not taking into account deleted logs. This is the second time she pointed something out, so thank you!
  • I also fixed the image display script (by using the new version of lightbox).


  • I noticed the little balloons on the map weren't loading anything, so I fixed them.


  • Resolved an issue where contacting Google for geocoding information would fail for some accounts due to localization. Thank you, Alain07, for letting me know about this!


  • Resolved a log deletion bug. Thank you, penkavky, for pointing it out!


  • Fixed an issue where some users weren't able to edit their log entries. Thank you, Renia :-J, for pointing this out!


  • To cut down on storage space needed for cartridges, all cartridges uploaded from here on out will have their images resized to 1000x1000 upon upload. This can reduce some cartridge sizes to a third of what they were.


  • RFCColin reported the pop-up used for people to select which player device to download a cartridge had issues showing on a cell phone using the Chrome browser. I can't reproduce this because I don't have an Android phone. Because of this, I removed the pop-up positioning code and integrated the pop-up into the page. This bypasses the issue. Thank you, RFCColin, for pointing this out!
  • The footer has been adjusted slightly for the iPhone's Safari browser.


  • Updated the WF.Compiler to v.0.9.8.


  • Updated the Foundation members' avatar image URLs. Looks like Groundspeak went from Azure to AWS.
  • Updated the German translation of "Recent Logs" to "Zuletzt geloggt". Thank you, siggel!
  • Forced long user names to wrap in the recent logs section.


  • This is just a back end change. I get error messages via email every time something wrong goes on. Some search engine spiders are requesting all sorts of pages that don't exist, so I get a barrage of emails when this happens. I updated the code so I don't get five hundred some-odd emails in a short time period.
  • I'm going to retire later on, so don't use that. Use from now on. If you try to use, the site should kick you over to I will retire the other URL at some time in the future.


  • Updated the GWZ parser due to an error when retrieving a cartridge's icon. Part of that had to do with an index issue and the other part had to do with an issue making it into an icon. Odd that wasn't found for this long.


  • Cartridge owners can now choose whether to make the emulator link public.


  • I updated the map to prevent the same cartridge's information from showing when certain other cartridges are clicked.
  • Although not released with this version, the site can now be hosted on a state server.


  • The last release was on March 7th.
  • Resolved an error message while logging a cartridge. The log went through and the user's cartridge completion count was incremented, but a lookup object had an issue. Not a showstopper, though.
  • Placed more things in the centralized cache. This time, it involved user account lookup objects.
  • Hello from Richmond, VA, the night before a Wherigo event. No, I'm not intending to show this site during the event, but I did want to get some issues resolved and the current site published.


  • More work on the new cartridge search page.
  • Fixed something that broke when the BLL was fissioned. This did not affect the production site because I hadn't yet moved the code to production. (The last code move was on March 7th. This change log usually reflects the day the work was completed, not when a code move occurred.)


  • The idea of Cartridge Invaders was created. This could be historical. The idea was described in full two days later.


  • I haven't retired. I was swamped with Wherigo\\kit, geocaching, logging, and buying a house (among other things).
  • This looked like a good time to complete the work involved in fissioning the BLL from the web site. And, wow, the web site still loads! It's nice to see I did in fact do it properly. I'll wait to move the API to its separate server. I now know I can easily set up Redis caching and split the API load off the web site. This will have to be done before the WF apps are released to the public.


  • I had to fiddle with some deep database code. I received a slew of automated error report emails stating one particular bookmark lookup stored procedure was causing all sorts of connection issues. I've had problems off and on with that one, so I played around with the database coding to close connections forcefully. Before, I was trying to keep a connection instantiated and just use that. Now, I'm creating the connection whenever I need it. I'm still learning a little some of the differences between creating applications with a concurrent user base of a couple hundred versus a user base of several thousand.


  • More work on the new cartridge search page.
  • Updated the main cartridge search stored procedure. Its sort directions are now controlled from the code, though it has its own defaults if a sort direction is not provided.


  • It occurs to me I can't keep calling Google's geocoding service as much as I thought, despite server-side memory caching (I should have been storing the results in the database, I guess). I tweaked the search page a bit to offload this responsibility and see if that would get me anywhere. It's a temporary fix for now.
  • Later on that night, I updated the cartridge description page to remove an annoying spacing issue with cartridge description text.


  • More work on the new search page. Five filters are in place, basic one-way ordering is hooked up, the sticky header has been applied, a link to the new search page has been placed on the old search page, and the page has been validated to work in Firefox, Chrome, and IE.
  • What's left? A lot! The URL needs to be updated based on the search criteria, column headers need to trigger the ordering (plus ascending and descending toggle sorting), and ton of filters based off a logged-in user's activity needs to be added. Mapping would be nice as would fixing a few background images used on the search page (the car one, especially).
  • Once I'm happy with the search page, I'll switch it over to be the default one. Anyway, I'll release this update because the code is stable.


  • More work on the new search page.


  • I was going to get back to work, but a worldwide update to Internet Explorer broke Groundspeak's emulator on everyone's computers again. I came up with a fix. I guess I'll work on the new search page the next night.


  • More work on the new search page. It's difficult to type on an airplane. I found I had to cross my hands at the wrists if I wanted to do any work. Then people ask what you're doing and conversations can last a while. No, airplanes aren't conducive to getting things done. Anyway, I got most of the parameters' HTML done.


  • Bug report: Someone not logged in could change a bookmark list's name and description. Actually, this isn't quite the case. The call looks like it goes through and the UI is updated, but refreshing the page shows nothing was edited because the other security checks prevented that. I'll update the UI so it doesn't show that edit link, as I should have done. Thank you, Maxinoha.
  • More work on the new search page. Using responsive web design will be for after I get the rest of the page working. After around 10 hours of work, I have the search page images, larger layout, location-based search, and results display complete. This is proceeding nicely. I was even able to upload an early demo (the link will be dead when I complete the search page). I'm still just developing using Firefox; I'll resolve browser issues when I have a steady version.


  • Began working on a new search page. Groundspeak is updating theirs. If I'm pursuing a partnership with them and I've been told to make this site look like something Groundspeak would produce, I should update this site's search page to something along those lines. I'm going to write my own HTML, CSS, and script to power the page, but I don't mind putting my own spin on the overall design. So I'm competing against a company with several full-time designers, developers, and testers each with their own unique experience? Viva la underdog.
  • Completed the design and coding of the top of the search page, save for filters.


  • I saw someone's log entry was using the "justify" and "center" tags. I didn't know anyone used them. The site now supports them. When I went to test my work, he had already removed the tags. Well, RadousCZ, you can put them back if you'd like.


  • Fixed an issue with editing a bookmark list. The public/private check box state had some issues being read.
  • You can also edit the bookmark list on the page that shows its bookmarks. You don't even have to leave the page to do so.
  • Your private bookmark lists will now appear on the cartridge details page and will be denoted as private (by the "stealth" attribute icon).


  • Experiment time: Wherigo v2.0 concept multi-player cartridge and cartridge author live action map.
  • Released the demo/experiment.


  • Began working on a fun experiment.


  • Upgrading the developer. Work on the site will be paused while I learn SignalR. This will be critical for Wherigo v2.0's multi-player. Perhaps I can come up with a way to use it on the site itself as well. I could seriously offer a real-time map of everyone in the field who is playing your cartridge at this very moment. How awesome would that be? Since this is wrapped up in Wherigo v2.0, this will take a while. I can use SignalR within the apps, but my private demos of multi-player cartridges will be web-based because I'm more comfortable and dangerous in that environment.
  • I don't usually talk about my other activities, but I did want to demonstrate for once I am doing more than just this site. And I'm really happy I finally found my answer for how to accomplish multi-player real-time cartridges. Awesome!


  • Added the "Downloads By Version" page to the list of owner tools for a cartridge. It shows you who downloaded which versions of your cartridge. You can use this tool to make sure someone did in fact download the most recent version of your cartridge. Just be aware that if you're allowing anonymous downloads, it can't show you who downloaded your cartridge. Also, the time stamp for the user is the time the user last downloaded that version. Everyone already has data for this feature because I've been keeping track of downloads ever since I implemented the feature that tells users if there has been an update to a cartridge (the text that otherwise states "Your version is current"). Thank you, Verturin, for suggesting this feature.
  • Wherigo Foundation member activities will not display in the "Downloads By Version" page. I test things under my user account and don't want its activity confused with real site activity.
  • On a side note, it's really interesting to track the time a user downloaded a cartridge, then put it into another user's time zone. The WF site already has this infrastructure in place, at least. Just saying...


  • Updated the database to disallow the submission of a second publication log. I think this is tied to automatic publishing, but I'm not sure as I've never seen it in my personal tests.
  • Updated some of the logic behind which log entries a user can submit. For example, if a cartridge is archived, a user should not be able to submit a disable log.
  • The suggested cartridges section on the cartridge details page now correctly shows the next and previous pages.


  • Updated the code that handles talking to the compiler. I recently made a change to how downloads were counted on the site, but forgot some code paths could come from Wherigo\\kit's use of the API's compile service.
  • Updated Urwigo's logo and download link.


  • Redid the styling on the cartridge details' right blue section.
  • The logs now support the "font" and "size" tags from I noticed your log, Max93600.


  • Style and CSS improvements to the cartridge details page. The new styling replaced a script that resized the coordinates box correctly based on the cartridge poster's width.
  • The download count graphic was made more circular instead of a stretched circle. A drop shadow on the number was added so it stands out more against the light blue background.
  • Enabled the user notes section. Why had that remained disabled for so long?


  • The site's footer now always displays at the bottom of the page. It did before, but could have a small gap in some browsers. It also used script to help its positioning. This wasn't up to my current standards--neither is the CSS that drives the site, but that's for another time--so I reworked it by removing the script and adding a few lines in CSS. Much better!
  • I also played around with the styling for the cartridge details' download count number. I decided to make it more circular and add a slight shadowing to the white text so it's easier to read.
  • By the way, I have vastly improved my design and scripting skills since I created the site. Coding style, too. I'm slowly working that in, but I don't want to redesign or redo a lot of the site just to convert it to my current standards. We live and learn, hopefully improving all the while!


  • Cartridge owners can now specify whether they only want logged-in users to download their cartridges or if anyone can. This is called "Anonymous Downloads". Thank you for the suggestion, Schnatterfleck.
  • To allow a cartridge to be downloaded anonymously, go to the "Edit Listing" link on your cartridge's details page.
  • The WF API and its documentation have been updated.
  • The anonymous download feature is now tied to the site's configuration so it can be enabled or disabled at will.
  • The target device's ID/name is now passed to the compiler properly.
  • You can search for cartridges that can be downloaded anonymously.


  • Trying to stabilize the map.
  • The info window will now not close automatically if you click on a cartridge close to the edge of the map.
  • The Wherigo icon now appears on the map's tab.


  • Cartridge auto-publishing now works even if a logged-out user attempts to access the cartridge page.


  • Fixed an error that would occur if someone tried to submit empty custom coordinates.


  • I added the Garmin player to the cartridge details page's list of devices for which you can download a cartridge. Thank you, jellis!


  • The list of newest cartridges are now sorted by publication date, not when they were added.
  • Certain log entries, such as publishing, archiving, disabling, etc. will now only use the current date. I think I have the date right for those times when the zulu date is different from the user's current date due to the time zone.
  • I began mucking about with the culture and localization again. I want the UI culture to be set, not the internal thread culture.
  • Added the ability for admins and co/owners to unpublish a cartridge. This will work as long as no one has completed the cartridge.
  • If a cartridge was published, unpublished, and published again, it would have shown up twice in the recent cartridges list. I got rid of that problem before it had a chance to show up on the main site.
  • As a shortcut to tracking the number of times a cartridge has been completed, I'm storing that information in the Cartridges table. Keeping that information in the Cartridges table can eliminate a query I had to run every time the log page was loaded.
  • Changed the email address used to send log and watchlist updates. It makes more sense to receive something, doesn't it?


  • The caching and fissioning work is on hold. If I'm not going to set up some sort of shared caching, I don't need to go through all that work. And against what can I verify it?
  • Style change: that gold hyperlink hover color is difficult to make out. Let's change it to some sort of darker color when it's in front of a light background.


  • Updated the WF.Compiler used on the site.
  • Began the process of fissioning the site and its layer that controls caching and data access. This is in preparation for fissioning out the API and hosting it on another server so I can split the load and use a data caching service.
  • Fissioned out the BLL and got it into a state where it can be compiled. Some caching services were set up. Next is stripping out all other caching places except for in one class, which will handle caching from now on. Doing so will make it easy to swap in and out what I'm using for a caching service. I've done the same for all file storage needs when I swapped in Azure blob storage.
  • Did you know the Azure data caching service is expensive? The one I want is $102.67/month, a nice one is $40.92/month. Let's see how far I can get without using a caching service.


  • Forced word breaking on the recent cartridge list section on the home page. Someone uploaded a cartridge with a long name.


  • The cartridge's "Added" date now takes your local time zone into consideration.
  • If a cartridge's source code is updated shortly after you upload it, the tooltip on the "New Version" date will now show you the times. I have also added a dashed underline on this text to indicate there is a tooltip.
  • The WG code text box will force the WG code in the URL to be upper case.


  • A continuation of sending the GWZ to the emulator. Azure had worldwide problems last night.


  • If you're a non-tester cartridge contributor, the emulator link will send the GWZ to the emulator. If not, it'll use the compiled cartridge. The reason for this distinction is I plan to allow people to choose whether regular users can play the cartridge in the emulator.


  • The site will now let you log in if your user name has been changed. I had one of the log in stored procs by name, not ID.


  • Updated WF.Compiler to v.0.9.4. This version plays nicer with non-UTF-8 encoding.


  • Cartridge contributors can now view their cartridges in the Webwigo emulator. This also includes previous versions of the cartridge.


  • Now that I have the URL to the emulator, I'm working on completing the rest of the code necessary to transfer users to the emulator. I forgot how much code I had already written. That makes it easy to finish. Imagine my surprise when I saw my EmulatorConnector class, complete and waiting for me to use!
  • Anyway, the only way for me to test this is on a public web server.


  • Resolved a big problem. If you're logged in on one browser, logging in on another will log you out of the first after your session state expires. That was dumb to implement cookie keys like that, so I did some back end reworking.
  • This update brought to you by using a laser to light candles. (I hope you're enjoying this running gag.)


  • I saw the cartridges weren't appearing on the big map, so I fixed that. Took all of about a minute. If anyone experiences problems on this site, please do contact me!


  • Style update on the cartridge details page.
  • Apparently, Wherigo\\kit didn't like storing API keys with the "#" sign in them. It was creating a mess, so I took it out of the random character generator that creates those wonderfully long Wherigo API keys.
  • This update brought to you by a bowl of pineapple.


  • Added a pirate theme to the home page. This is the second theme I've added. The idea is to have a whole bunch of these themes. If you'd like to create one, please submit it. You can see the style I'm going for. The paintings I'm using are in public domain because it has been at least a hundred years since they were created.
  • Don't see the pirate theme? Still see the Revolutionary War soldier? Keep refreshing the page; the theme shown is random.


  • The notes and custom coordinates UI will now not show up if you're not logged in.
  • Added a way to view cartridges for which you can log a completion but haven't yet. Look on your "My Progress" page.
  • Updated the log entry editor script to avoid an odd display issue on Chrome. Updated some library code, too, on the back end.
  • This update brought to you by Chinese takeout. Feeding programmers since the 1960s.


  • Resolved a script error on the cartridge details page that could prevent the cartridge's icon from displaying on the map.
  • A slight adjustment to permissions.
  • New cartridge versions, restores, and test version promotions will now adjust the cartridge's posted coordinates.


  • Completed the first UI version of the notes.
  • Added API methods for custom coordinates and notes.
  • Updated the API documentation.
  • Added some things on the cartridge listing page to the localization resource file. They're not translated, yet.
  • This update brought to you by ignoring household chores.


  • You can now store custom coordinates for any cartridge, just like on for mystery and multi caches (but, sadly, not for Wherigo cartridges).
  • I'm still working on the user notes section. I have the back end done, but not all of the front end.
  • The Wherigo API and documentation will be updated after the notes section is done.


  • Fixed an issue regarding colors on the log entries. Thank you, siggel!


  • Added the time it takes to compile a cartridge to the Compile Test page.


  • Compiler updates. Also, some updates to source control for the web site.


  • I updated the compiler version used on the site. The compiler, by the way, is open source at Github. Take a look. After I made a sight configuration change for the site, everything worked well.


  • Adjusted an error message thrown by the compiler. If your GWZ does not contain a file referenced by the lua script, you will now receive a nice error message. Unfortunately, it's not localized to anything but English at the moment.
  • Modified several stored procedures in an attempt to increase the site's performance under load. Also, took another shot at fixing the stats issue, where the stats are shown incorrectly for some reason. I may have it this time.
  • The user stats summary now takes correctly adds the subtotals for each section.
  • In order to bring the generated WG codes under control, I implemented the code determination a little differently. Before, the codes were completely controlled by the cartridge's internal identity number. However, this auto-incrementing number also gets incremented if the database shuts down (to be more specific, the database grabs several of these when it comes up and assigns them out). Anyway, since this is hosted in the cloud, the database server shuts down when it's not used--a lot. Now, I can wipe everything on the site and redo the table, but I don't like that option even though this is a test site and I'm within my rights to do so. Instead, I'm going to try something else with this update. I'm going to count the number of cartridges and pass back the first ID that isn't used, which will then be used only for creating the WG code. This seems like a solid fix in my development environment, so I'll introduce it and see what happens in the preview environment.


  • Laying the groundwork for date localization. At the moment, all dates and times are stored in UTC. I came up with a funny little system to localize these regardless of whether a user is logged in. Of course, with the way I'm getting this, the localization will not work for the very first page you access. Live with it.


  • Properly implemented tracking of the cartridge's last version. The Wherigo API and its documentation have also been updated.


  • Added some code to a stored procedure to make sure the cartridge's last updated date is set properly so users will know when their version is old. This is temporary as updating the cartridge listing will also set this date--and that's not good. I need a new date.


  • If you downloaded a cartridge, the site will now show you if what you downloaded is current or if it needs to be updated. Look for it in the main section under the text that shows when the cartridge was added to the site. Thank you for the suggestion, Sven!
  • I really need to switch the site over to using UTC time in the database. At the moment, it shows the time zone of wherever the server is executing code. That's really dumb when you're running a side in the cloud.


  • Began work on the ability to choose your download device. This is going to take a little while, which is why I have been avoiding it. I decided to skip Geowoodstock so I could put more hours into the site.
  • Instead of pursuing the full feature, I created a scaled-back feature. Originally, I would have let you select which devices you use and would have shown only that list when it's time to download a cartridge. However, I decided just to show an abbreviated list every time you select to download a cartridge.
  • The API and its documentation have been updated. The DownloadCartridge method now allows you to specify a device.


  • Edited the email that is sent internally when a cartridge fails compilation. (Several releases this day.)
  • I prevented what I'm currently working on from being released as I'm not done with it yet.


  • Thank you to siggel (Sven) for catching a few numeric localization problems. When the site is in German and you upload a cartridge, the English decimal separator, ".", throws an error because the code tries to parse it in German, which needs ",". Ooooohhh... painful.
  • The log entry page's date picker now displays above the log entry text box and toolbar.
  • Lots to do with localization. The log entry page now localizes the date properly. So does the cartridge listing page. And the user's log entry list page.


  • The compiler test page now limits cartridges to 50MB.
  • Finished a background service that temporarily caches cartridge binary data. I am using it for two things. First, implemented in this update, is when someone uses the compiler test page. Whatever was uploaded will be retained in memory for three days for someone in the Wherigo Foundation to look at. Only the latest 50 errors will be retained. Second, not yet implemented and the main reason this is added, is a convenient way for me to cache and send cartridges to the emulator. In that instance, the data will be retained for one minute.
  • I enabled the email notification engine for the site. You should now begin to receive notifications.


  • More work on the back end of the compiler test page. We're also showing the compiler version on this page.


  • Completed the cartridge compile service web page. You can use this page to test compiling cartridges for all possible compile formats before uploading a cartridge. This page will also let you download cartridges compiled for the formats you select. Pretty neat.


  • Began working on a cartridge compile service web page (internal WF request).


  • The WF.Compiler is now stable and should work for all valid cartridge files! On average, we're seeing compile times around 33 milliseconds!
  • I removed the precompiler service as it is no longer needed. Later, I'll fully gut it from the code.
  • I added charlenni to the list of fun emails the site sends if a cartridge fails to compile.


  • Added German localization.
  • The site is now using the most recent version of the WF.Compiler. I have yet to run a full time trial on it. This will occur over the next few days.


  • Master site style change to prevent the language and WG code boxes from causing the left navigation section to wrap.


  • Added the Finnish translations to the site. Thank you, Arnyk!
  • Addressed some positioning issues resulting from longer translated text.


  • Acquired Yippee.


  • Still tracking down some errors that occur just on the production site. One odd error is when some users attempt to save the cartridge. I looked through the database and updated some stored procs, but I don't see where this is happening. Another error is someone is trying to go to the about.aspx page when it does not exist. I looked through all hyperlinks on the site and I don't see any link to that nonexistent page.


  • Some online advertiser had a bot that tried to click one of my hidden forms. I'm extremely anti-ad, so I added a hidden form on a page. If any bots click that form, their IP address is banned from the site. So I don't recommend you mess with that trap. We'll see how many advertisers I can ban from the site.


  • More work done with reporting site errors to me. Now, if you're uploading a new cartridge and it fails to save, I'll be able to retrieve the cartridge data and test to see why in the world it won't save. I implemented this because someone got an "Error converting data type from nvarchar to numeric" error from the database. However, I was unable to reproduce this on the site no matter what I tried. I'm thinking it might be related to the cartridge.
  • Began work on the Site Features page. I hope this will show people some of what the site has to offer.
  • More work on making sure user stats are updated when cartridges are released. Please note your stats are updated when the cartridge is published, not when it is uploaded.


  • More tweaking in response to a few error messages. For the moment, I'll allow HTML on cartridge listings until I can get around to redoing the cartridge submission process (I will make it step-by-step and will use the same editor as log entries).
  • Fixed some issues that only happened on production due to using an Azure database. One issue involved a bookmark's description.


  • Added more error logging. I hope my inbox won't be inundated with emails after this update.


  • Resolved an interesting problem. The problem everyone sees is no matter what you do, if you somehow reload the edit cartridge page right after you upload a cartridge, you find yourself back at the upload cartridge page. Thank you, Tyreless, for pointing this out.
  • The real problem was with the precompiler and Azure. I was doing a little temp file output logging in the code. The production web server didn't like it and this wound up crashing the site because I have the precompiler running within application state. (I didn't receive an error log email because error logging is also running within application state.) I removed the logging code in the precompiler and I was still able to use it. However, for this code release, I decided to disable it completely until we run across another cartridge that the WF compiler takes seven minutes to compile.


  • Finished testing the auto-publishing feature.


  • Finished the coding for enabling auto-publishing by default.
  • Updated the database to store the auto-publish information (table and stored proc). Also performed updates required to work with unpublished geocaches (and do some basic differentiation between them and non-cartridge cache listings). You can now link to unpublished caches.
  • Added auto-publishing as an option to the edit cartridge page.
  • All that's left is to test this out and push the changes. I'll leave the final testing for another day as I ran out of time.


  • The idea behind linking cartridge publications with caches is this: An author uploads a cartridge and links it to one or more caches. (The API will not let me pull unpublished geocaches, so the linking will be by GC code and shown as such.) The cartridge listing remains unpublished (that is, a contributor does not manually publish the cartridge) and, therefore, unviewable by everyone but cartridge contributors. If a non-contributor visits the listing--this can be done via a link on the geocache page--we initiate a API call to fetch all linked geocaches. If one of the linked geocaches can be fetched, we know it is published and, therefore, we should also publish the cartridge. During this time, we'll rename the linked geocaches. This is the only time the linked geocaches will be renamed (from their GC code to their name) automatically, so if you link to multiple caches and they're not all published when the first non-contributor visits the cartridge listing, you'll have to relink the caches to pull their names. (Why? Continuing to pull geocaching listings like that will max out the API calls--and it puts a bottleneck on page load times.)


  • Moved several of the cartridge version command information to a drop-down menu so the page does not get too crowded-looking. I can now deploy the current code.
  • Added space and code to allow for Finnish translations of the site and sent out the translation requests to everyone.
  • We'll try allowing people to download a cartridge without logging in. If you're using the Wherigo API, you still have to log in.


  • Resolved my local blob storage issue. That's good. I hacked the thing by running the storage emulator initializer and switching its new database catalog with the one with my data (I simply renamed the two databases). Viola. Oddly enough, this means I can't connect to development storage with the new cloud management application I picked up. It's always something; while this is an acceptable loss, the application would have been a great syncing and migration tool. I'll invest some time later into seeing if I can fix it. Perhaps a computer restart is all that's necessary. Now, perhaps, I can be productive later this evening.


  • Oh, look... I updated the development storage emulator on my computer. It fractured my offline storage environment. I can connect to it and see all files through a storage browser application, but when I work with my development site, it can't pull the files because, I think, it's referencing them from the wrong location. I'll have to fix this minor disaster before I can continue development. No telling how long this will take. At the time I'm writing this, I have already sunk an hour and a half into this project. First, though, I have to figure out what it wrong and where. The fix might be easy after that.
  • And I ran into some trouble setting up a WF Windows Developer account, resulting in a promotion code being lost. Live and learn at the expense of the budget...


  • After download queuing on the cartridge versions page is complete, I'll send out translation requests.
  • The next feature I'll have to work on is implementing Modernizr so the people who are still using IE8 can see the site. I developed the site using standards-compliant CSS3, but still have to support an eight year old browser. That or I should tell people to get a better browser.


  • Versions of a cartridge can now be queued from the versions page.
  • I don't like how the cartridge versions page now has three hyperlinks on the right side. Either these need to be shortened, icons added, or something else to prettify the page.
  • The modified stored procedures for the versions section also affects what's available through the Wherigo API.


  • Created the download queue UI within the cartridge details page and the user's account page.
  • Added download queue management to the API and updated the documentation.
  • It seems I've been storing things by the cartridge's version GUID (null when it refers to the current version). However, the API exposes a version number, not my internal version GUID. I need to rework the API so it works off the same numbering scheme that appears in the VersionInformation class provided by the API. This will take an hour or so to rework. Until then, the API methods will remain without active endpoints.
  • Fixed the above. I still have to do some testing to make sure, though. But since I have a few months to test this out, I guess I can do a release.
  • Note: Until a Wherigo v1.1 compliant app is released, this download queue feature is rather useless. However, once such an app is available, this will be a very powerful integration feature. I have to implement things before the others start using the Wherigo API in the app.


  • Began working on the cartridge download queue features. Created the database table, created four stored procedures, and updated the InsertLog stored procedure so archived cartridges will be wiped from user download queues. Added download queue status to the user's cartridge relationship object.


  • Time for the usual settling down after adding a new feature.
  • Refactored all references related to the cartridge breadcrumb link so it uses the same code to control how the link appears.
  • Bookmark list items are now aware of a cartridge's locked status. The locked status should be something rare. Administrators can lock cartridge listings if there is reason to do so, such as a cartridge with unsavory images. Locking a cartridge listing freezes everything associated with it and the cartridge's GWC cannot be downloaded. I hope I never have to use this feature.
  • Changed a bookmark list item's isEnabled property to isDisabled to make it closer act like a cartridge object.
  • A bookmark list item link's appearance now follows the same rules for cartridge links (regarding archived, disabled, and locked states).
  • Note: Disabled and archived cartridges do not display on the home page's list of new cartridges.
  • The user stats problem: I'm storing user data for 30 minutes. The user profile page uses this cache to populate itself. I don't want to get rid of this just yet, so I put something else in place. If this does not work, I'll implement something that will always get stats from the server. It'll take around an hour of work and I only had fifteen minutes to create a fix and this one would be superior if it works properly. Please let me know.
  • I'm fiddling with the idea of having a tester account on the site. However, I think just by virtue of having a separate testing area and setting those members to Wherigo Foundation access in the test database should be fine. When things settle down, I should also begin making a reviewer page in the off chance I have to implement the Wherigo reviewer system. I have the user account in place and the permissions set, but there isn't a page that tells anyone, admins included, about cartridges awaiting publication, nor a page to show us unpublished cartridges.
  • Time to work on translations. I'll add localization to the Wherigo Foundation page, then I'll contact the translators.


  • Added bookmark lists to the user's account page.
  • Reduced the font size of the navigation section on the user's account page. I'll have to do something with the navigation section sooner or later.
  • Added the feature where you can see all bookmark lists for a cartridge.
  • Added all bookmark features to the Wherigo API and updated the API documentation.
  • The Wherigo API documentation is now downloadable from the site, but only for Wherigo Foundation members.


  • Finished the bookmark list item view page.
  • Created and finished the bookmark list view page.
  • Refactored the bookmark list view page into a control.
  • Added a bookmark list tab and list to users' profile pages.
  • Reached a point where code deployment is possible.


  • Implemented paging the bookmark list item view page.
  • So people can see what I'm working on, I decided to upload just the change log page to the web site. This change log is now separated into two sections. The first section is "Unreleased Work", meaning what I'm currently working on and what will be seen on the site when I update it the next time. When I release a site update, all this will be moved to the next section, "Released Work", a history of everything that is currently available on the site. Make sense?


  • Wow. I can get back to working on the site... Bookmark item list page: you can now update and delete bookmark items (supposing it's your list). There's still a lot to go on the bookmark list feature. I still have to add bookmark lists to the user profile page, too. Since I don't expect to release the site until I'm done with the bookmark list feature, I imagine people are going to have a lot to read in this change log page.
  • Did a little more localization work on the cartridge details page regarding the bookmarks feature. There were things I hadn't yet put into the resource file.
  • I was asked about adding a Finnish translation to the site. Since knows about this site, I think it would be a wonderful idea to pause for translations after I've finished with the bookmark list feature.


  • Created bookmark list tables (2), stored procedures (11), classes, and data layer.
  • Created bookmark list BLL and added several methods to AJAX services (the thing the runs the asynchronous portion of the site).
  • Created the UI to add a cartridge to a bookmark list, show which of a user's bookmark lists contains the cartridge (something not offered on, and to remove a cartridge from a bookmark list.
  • Before I can publish this release, I need to show the bookmark lists within the cartridge page and create a page that enumerates through a bookmark list's entries. That's the bare minimum. I still have to create pages to delete and update lists.


  • The site is now precompiling cartridges. This was needed because some cartridges took more than ten seconds to compile on demand. Player apps that make use of precompiled cartridges must control the player's name on the app's side and use the Wherigo API to unlock the cartridge. (At the moment, the unlock codes are the same for all players of that cartridge. Since I plan to do away with unlock codes, that's fine.) If the cartridge compiler is improved enough to compile all cartridges in under a few seconds, I will remove the precompiling feature. (By the way, if a cartridge hasn't precompiled, it will go back to compiling on demand until the precompiling is finished.) All this is transparent to the user.
  • Precompiled all cartridges that currently exist.


  • Fully implemented an editor for log entries. You can do basic BBS things, such as bold, underline, italicize, strikethrough, and adjust colors. You can also add the same emoticons as on the site. A few emoticons I'm using aren't listed.


  • Began trying to find a good way to add formatting into the log entry text box. There are plenty of open source plug-ins from which to choose, but I don't want to provide all that rich text functionality. The root problem is I don't want someone to enter a script or disruptive markup into a log entry (or cartridge description). This will take some time to pursue. At the moment, I'm trying to add new features to the site, not improve something that already works (creating a log entry). But log entry formatting will add a nice touch to the site that people can see and play with. It's very appealing to pursue. I'll think about it.
  • Since I want very basic BBS log entry formatting, I wonder if I should just create my own script or something. That might take more time than I'm willing to give this feature.


  • Adjusted the site LESS CSS for some formatting.
  • Resolved an issue with a script error on the My Logs page.
  • Updated several database queries. Made a change to the master search query so it recognizes cartridge ownership as the user being either a primary or co-owner (and not download-only or tester).
  • Added convenient link back to published cartridges when you view your unpublished cartridges. Unlike the owned cartridge list, you'll see a cartridge if you have download-only or tester access to it.
  • Download-only and tester contributors now see the message about an unpublished cartridge.
  • Resolved an issue where, on the cartridge access page, you had to refresh the page after adding a user if you wanted the "X" icon to do anything.
  • The download source code page now works again. I missed updating that page from when I switched the site over to blob storage.
  • Co-Owners can now upload new versions of a cartridge. This broke during the switch to the new permission system. This is why I had to do so much testing before releasing the 20th and 21st versions' updates.
  • Finished testing most of the permissions that were transferred over to the updated permission system.
  • It is now not possible to manage a cartridge's completions until after the cartridge is published. This makes more sense.
  • Performed additional tests for cartridge reviewing and admin locking a cartridge. While I hope these features won't ever be needed, they're there if I need to use them.


  • Added a new type of cartridge contributor: Tester. This contributor can view the cartridge before it is published, make a few log entries, and only download the compiled cartridge. This is good if you want to give access to cartridges before publication but do not want to give access to your source code. This update also includes database and API changes resulting from the new contributor (due to access modifications).
  • Massive change to the permission system. Before, I would ask if users had permission by calling IsOwnerOrAdmin(u,c,true,true,true,false). I replaced this with several methods showing permissions by what the user is attempting to do, all calling HasAccess(u,c,List<AccessType>), which contains a list of all access types and groups within the system. This is more legible and maintainable.


  • Converted the site's master CSS file to LESS CSS. Still messy, but more usable. The end goal of the LESS CSS conversion will be more uniform positioning, sizing, and coloring.
  • More Wherigo API testing: AttachLogMedia (caching OK with GetCartridgeLogs method), GetCartridgeLogs, GetCartridgeVersions, DownloadCartridge, UserCartridges, GetCartridgeInfo, GetUserInfo, SearchCartridges.
  • Wherigo API updates: DeleteLogMedia, ValidLogTypes (removed VersionUpdate and VersionRestore logs as these are created by the system)
  • Switched log entry caching from session state to a sliding application cache (affects UI and API). (Hmm... should I deal with a browser caching the image again?)
  • Resolved a problem editing a log entry.
  • Refactored the edit cartridge page so it uses a common method for creating an icon from the cartridge's poster if an icon isn't supplied.
  • Significantly sped up features dependent upon looking up cartridge resources. We're going to assume that, if the database says the resources exist, they do in fact exist in blob storage. Only when we're about to perform a file operation against a resource will we now check to see if the resource exists. This will save a significant amount of time on the UserCartridges Wherigo API call for users who have ~150 cartridges (from 12 seconds to 1 second). It will also save some money each month in blob storage transaction fees.
  • Removed a little insanity on user object caching. When this site wasn't hosted on Azure, I didn't have access to System.Web.Caching.Cache, so I had to come up with ways around the web host's security settings. Now that this site isn't hosted on the previous web host anymore, I can strip out some of the workarounds.
  • Switched out the CDN URL to something that resembles the domain (
  • Note: Those of you testing the site should be aware that you can be logged out after each site update.


  • The home page's newest cartridges section now correctly rotates between cartridges.
  • Created the change log page and added it to the main menu.
  • Some style tweaks in the menu navigation. I really need to create those LESS CSS files.

Other things to do in order of importance:
  • Redo the cartridge submission page. Change it into a step-by-step format and make it pretty.
  • Test the Wherigo API: UpdateCartridgeSource and things not on the API test application.
  • Show a user a list of cartridges s/he has unlocked and not logged.
  • More work on how suggested cartridges are chosen.
  • Favorites system. You can have a max of 10 favorite points to assign before you start losing points.
  • Implement map filters. I've been avoiding the map.
  • Create the "What is Wherigo" page.
  • Implement the achievements v1 list. (I really need a graphic designer... Who wants to create the achievement images? Contact me.)
  • Create tutorial pages.
  • Implement Wherigo events. This will be done when I revamp the cartridge upload page.
  • Update the site's translations.
  • Refactor all CSS so the styles are written in LESS CSS (and, hopefully, up to my current standard of quality).
  • Refactor the UnlockAuths table so it's by internal cartridge ID and not WG code.