That allows parallel download from most browsers.
To avoid caching issue, server choice is "profile_id" based so that
avatar from a specific user will always be served from same server.
Introduce new configuration parameter:
$config['avatar']['server_modulo'] = 5;
Very easy to implement using, for example, DNS wildcard.
For example, if you have following configuration:
$config['avatar']['server'] = 'static_rrdns_.domain.tld';
$config['avatar']['server_modulo'] = 5;
Then, when building avatar's URL, domain will become, depending on profile_id:
static0.domain.tld
static1.domain.tld
static2.domain.tld
static3.domain.tld
static4.domain.tld
Ensure that router is cleared when we do site setup; we can still fetch the data from cache, so it should stay fast, but should ensure that we don't end up with someone else's routes still set up, which may be an issue breaking some of the bookmark handling that needs routing with a rare plugin.
We get HTTP 400 for various cases of invalid data, where retrying doesn't help at all -- previously those would loop forever, or until something died at least. :)
400 is also used for rate limiting, but retrying *immediately* will just hit the rate limit again, so better to discard if we're going over for now.
Switched from one-time setup to live stuff that'll work without per-notice setup.
Used to not matter because Realtime wouldn't include the extra stuff, but new Realtime pulls the full rendering, so yay!
These mini notice lists were previously not actually showing links to the notices, making them hard to use. There was code to output a link, but it had been unused due to the config options triggering it not being set. The links also looked bad ("( see )" with bad spacing).
Replaced that code with a call into NoticeListItem's existing code to format a relative timestamp with the notice permalink, which looks nice. Used a div rather than p to avoid clearing the float, so it flows nicely.
If display_errors is on, typical settings would cause PHP error messages to spew to output before the HTTP headers for setting a 400 error go through.
Also switched from deprecated static DOMDocument::loadXML() to non-static call.
Was triggering errors due to use of common_canonical_nickname() on arbitrary input without checking for exceptions about invalid nicknames (which didn't exist long ago in the before time)