500 Firepaper updated to v2.80

A new version is now starting roll out through the Play Store.

If you're an existing user you will no doubt have noticed the app stopped working recently. On August 21, the app's 500px API key was blocked by 500px. Of course luck would have it this was the very same day I left on vacation, and also the same day Android Oreo was released. I returned last weekend and started investigating the matter.

I was able to get in contact with a platform engineer over at 500px, who informed me that 500 Firepaper's massive bandwidth use was no longer something they were able to support. Not completely surprising, as 500 Firepaper downloads batches of high resolution imagery several times a day. Multiply that by tens of thousands of users, and you can probably imagine this puts some strain on their pipes. I have always expected they'd pull the plug on it because of this at some point, I'm actually surprised it took this long.

As advised by said platform engineer, I have made some major changes to the caching and image selection algorithms in 500 Firepaper:

API call rate limiting
The number of API calls to 500px servers has been significantly reduced.

Daily quota
There is now a hard limit on the number of images that will be pulled from 500px's server every day. Older versions would keep pulling fresh images if you were on an unmetered connection (such as Wi-Fi) and had a nearly full battery or was charging the device. Especially for users with agressive image refresh settings, this could burn through a lot of bandwidth in very little time.

Cache period extension
I have been granted permission by 500px to let the app cache imagery for 7 days. The 500px terms of service normally limits developers to 24 hours, which limited the usefulness of caching.

As this change allows us to cache 7 times as many images, the default cache size setting has increased accordingly in 500 Firepaper's settings - if you are using a lower range device with limited storage, you may want to reduce the cache size now used. I've also preset the orientation bias to 85% portrait to improve cache efficiency for the average user, if you use your phone in landscape a lot, you may want to adjust this setting as well.

Of course, combined with the daily quota, this means that the cache will take up to a week to reach an optimal fill. You will gradually be shown more different images as the days go by.

Display order randomization
Previously, the app showed you the images from the cache that you had seen before the least number of times. If you were away from an unmetered connection for a while, this meant you usually kept seeing the same images in the same order over and over again.

As the app is now becoming more cache-reliant and downloads less truly fresh images, this situation would become more common. Additionally, the algorithm would strongly favor the images downloaded today versus mixing in images cached from the past week.

To mitigate this, the image displayed is semi-randomized from the entire pool of cached imagery, with a slight but noticable bias towards more recently downloaded images. This should provide with a more dynamic display.

Freshness
While these changes will for some users strongly reduce the number of fresh images (images you have never seen before) 500 Firepaper will bring you, it is my hope that it is still fresh enough for the average user.

Future
This is an attempt to reduce 500 Firepaper's bandwidth usage to a level acceptable to 500px. It remains to be seen if the update actually succeeds in achieving this. 500px will be tracking the app's usage, and even with these changes they may well decide to shut it down (again) at any time.

If they do so, I'm not sure where this will go. I feel that if I reduce bandwidth usage (and thus freshness) even more, it destroys the idea of what 500 Firepaper was supposed to be.

Of course, 500 Firepaper has lost a significant portion of its users due to not being operational for a month, so that alone reduces bandwidth usage by a large margin, which may be good news for those still wanting to use it :)

I've gotten some comments from users saying they would be willing to pay for the bandwidth use. While there are certainly some users willing to do that, we already tried an in-app-purchase with revenue sharing before, and the funds raised then were factors less than the funds required. There's simply not enough people willing to pay for something like this, so that is a dead end.

Other apps
Some users have been switching to other apps that do similar things. Obviously, if they are also using the 500px API, and if they become as popular as 500 Firepaper, and they provide you with the same freshness of images, it is only a matter of time for those apps to suffer the same fate. I'm not saying you shouldn't switch to whatever works for you (because you should!), it's just something you should keep in mind.

Links

500 Firepaper on Google Play:
https://play.google.com/store/apps/details?id=eu.chainfire.firepaper.fivehundredpx&hl=en

Discussion thread on XDA:
https://forum.xda-developers.com/showthread.php?t=2522588

Changelogs
- New API keys
- Grand algorithm reworking:
--- API call rate limiting
--- Daily quotas
--- Cache period extension
--- Display order randomization
- Fixed bug where images would auto-change for a few seconds
Shared publiclyView activity