Symen
Thanks for this great website !
You could try the Multiple Tab Handler[1] extension. It seems a bit clunky and limited if you use it alone, but it integrates well with Tree Style Tabs [2]. Note that you could open the vertical tabs sidebar when you need to manage tabs and close it right after. You can also disable the "tree" feature of tree style tabs.
[1] https://addons.mozilla.org/fr/firefox/addon/multiple-tab-han...
[2] https://addons.mozilla.org/fr/firefox/addon/tree-style-tab/
I wonder if they would have ever implemented this "feature" if it wasn't the default (and only) behavior on Windows...
The funny thing is that they also pause videos when changing app/tab (not only ads), because background playback is a YouTube RED "feature". I would understand if YouTube RED was available in more than 5 countries. They have been artificially depriving their users of a basic feature for years and for nothing.
In the meantime I simply avoid watching long YouTube videos on my phone, and use NewPipe to listen to podcasts hosted on youtube (which means no ad revenue...).
I've started using a similar strategy on YouTube in order to selectively "protest" against bad ads. Whenever I stumble upon a long unskippable ad or a short very aggressive ad (loud and/or offensive), I mute the video and start reading comments for a while, or I alt+tab to a different video, etc. Sometimes I leave the page if the video (or uploader) is not worth the hassle.
In my mind this can lead to 3 different scenarios:
* Google notices this behavior and decides to enforce heavier regulation on ads (they already killed >30s unskippable ads this year).
* Google notices this behavior and tries to fight it (e.g. by pausing the ad if the volume is not low enough, the Spotify way). In the browser this leads to an arms race that Google can't win. In the worst case I would go back to avoiding all advertising using adblock and/or alternative financing if available (YouTube RED, patreon, etc.)
* Google doesn't react, bad ads lose so much value that most uploaders stop using them. They don't want to alienate their viewers for so little benefit.
We need many people to apply this strategy for this to work. However in the short term content creators still get paid, and I get the personal satisfaction of screwing over bad advertisers.
function Foo() {
var _bar = 42;
return {
get bar() {
return _bar;
}
}
}
var foo = Foo();
foo.bar
/*
42
*/
However the fact that you can transparently replace a simple property by a computed one (e.g. for backwards compatibility or to trigger side effects in observables) does make explicit, Java-style, getters and setters less useful.Storing each step in variables has the advantage to be self-documenting and nicer when debugging. However in many cases I feel like wasting energy trying to find short and adequate variable names for each steps in a computation, especially when the steps are clear enough by themselves but difficult to describe in 1-2 short words.
You also need to keep the variable names in sync when refactoring, which may cause even more refactoring if the line gets too long with the new name.
IMO it makes sense to use both styles where they feel most adequate.
For example I often end up doing:
something(
"Template string {thing}"
.format(thing=33)
) # square even numbers
range(11)
.filter(lambda x: not x % 2)
.map(lambda x: x ** 2)
However such a chaining API is not practical in python, because lambda syntax is voluntarily crippled to one expression only.Another thing to consider if you compare it with cloud solutions is that you don't have to find a second channel to send the shared link (which may require both person to e.g. login on their webmail, spell their email address to one another, etc).
Issue from 2012: https://code.google.com/p/android/issues/detail?id=32662
Thread starting in 2013 on Samsung dev board: http://developer.samsung.com/forum/board/thread/view.do?boar...