jeff_tyrrill
Joined 15 years ago
Joined 15 years ago
Once upon a time, developers implemented lazy loading of images, to save bandwidth. However, some developers implemented it poorly, waiting until the moment an image is scrolled on-screen to even start loading it, leading to a visible blip as you scroll.
(The better way would be to load an additional pageful of images beyond the current scroll view, which would provide enough time to load before scrolling into view at least most of the time. However, this doesn't maximally save bandwidth and some developers don't make good tradeoffs between diminishing returns on saving bandwidth vs. visibly degraded UX.)
Then, designers saw the blip-into-view effect, thought it was an intentional visual effect (rather than an artifact of poorly implemented lazy loading), but thought, oh, I'll fix it so it looks nice, with fading.
And here we are with a dumb visual fad originating from a bug without realizing it was a bug.
This distinction matters, if you primarily use private browsing, and have lots of tabs open from a site (say, Wikipedia, or Reddit, or pick a social networking service you don't want to track you by cookie[1]) - that particular website will know all the different tabs are from the same user potentially over a long stretch of time if at least one of those tabs remains open.
[1] Ad networks also track by IP address, so you need to take measures there too.
Each private browsing tab has its own cookie / data bucket[1]; and
Private browsing tabs and windows are preserved across restarts. (This is optional and can be configured to forget them upon restart.)
These make it practical to use private browsing for nearly all browsing, which isn't really the case in other browsers, where private browsing is clearly designed as an occasional-use thing. (And of course if you use private browsing for most things, you can still open regular windows for sites where you want to stay logged in.)
[1] If a link or script in a tab opens a new tab or window, then they share the same cookie bucket. This preserves compatibility with sites that require such a flow.
It doesn't do the job 100% but it's a start. In particular, HTTrack does not support srcset, so only the default (1x) pixel-density images were archived (though I manually edited the archives to inject the high pixel-density images, as well as numerous other necessary fix-ups).
The benefit of the tool is fine control over the crawling process as well as which files are included. Included files have their URLs rewritten in the archived HTML (and CSS) to account for querystrings, absolute vs. relative URLs, external paths, etc.; non-included files also have their URLs rewritten to change relative to absolute links; thus, you can browse the static archive, and non-included assets still function if they are online at their original URL, even if the static archive is on local storage or hosted at a different domain than the original site.
It was more work each year as the website gradually used script in more places, leading to more and more places I would need to manually touch-up the archive to make it browsable. The website was not itself an SPA, but contained SPAs on certain pages; my goal was to capture the snapshot of the initial HTML paint of these SPAs but not to have them functional beyond that. This was (expectedly) beyond HTTrack's capabilities.
At least one other team member wanted to investigate https://github.com/Y2Z/monolith as a potential modern alternative.
There is at least one exception: On form 1040, you have a yes/no option to redirect $3 to the presidential election campaign fund. This does not affect the amount of your taxes; it's a personal funding choice.
For the trailer-on-hill example, it concludes when the trailer (eventually) is towed or rolls down the hill and comes to a rest from friction.
The weighted trailer is being used like a battery and modifies the situation in the same way as if it were a hybrid car (non-plug-in battery that recharges through regenerative braking and/or directly from the ICE).
I may be wrong about the bundling in terms of the collection, but I still think this is more about Apple's general stance on "stores within an app", and the rule change is folding retro game emulators in as another exception to that, and not a change primarily about emulator allowability in general.
What people seem to think this means: Open-ended retro game emulators like Snes9x and Dolphin are now allowed. (I don't think this is correct.)
What the change is actually doing: If you are the licensed publisher of a retro game collection, you can now offer them in one app (including perhaps downloading additional games added to the collection later) instead of splitting them into individual apps. Each game must be individually vouched for.[1]
What is not changing: "Emulators" have long been allowed if the emulated code is bundled with the app and it is officially licensed.
[1] https://developer.apple.com/app-store/review/guidelines/
"4.7 [...] You are responsible for all such software offered in your app, including ensuring that such software complies with these Guidelines and all applicable laws. [...]"
and
"4.7.4 You must provide an index of software and metadata available in your app. It must include universal links that lead to all of the software offered in your app."