3,935 karma · joined March 24, 2020
denying self-determination is the root of hierarchy and fascism
Additionally a lot of the libraries/ecosystem around shared memory (https://docs.python.org/3/library/multiprocessing.shared_mem...) seems poorly conceived. If you pre-open shared memory in a ProcessPoolExecutor's initializer functions, you can't close them when the worker process exits (which might be fine, nobody knows!), but if you instead open and close a shared memory segment on every executor job, it measurably reduces performance, presumably from memory mapping overhead or TLB/page table thrashing.
- Tried creating a new blank Waterfox profile with no changes except uBlock0. It drops frames, and the borders of the video (4:3 pillarboxes on a 16:9 screen) have a blue or green tint after I seek.
- Same result in a new blank Firefox ESR 115.6.0 (last Windows 7 release) profile with uBlock0.
- The YouTube embed player at https://www.youtube.com/embed/lEuHOFgjrAo, on my main Waterfox profile, runs as smoothly as Invidious (no stutters unless I'm interacting with the player UI).
<div id="comparator">
<img src="https://meyerweb.com/eric/thoughts/wp-content/uploads/wikipedia-home.png" alt="">
<img src="https://meyerweb.com/eric/thoughts/wp-content/uploads/wikipedia-home.png" alt="">
</div>
<svg xmlns='http://www.w3.org/2000/svg'>
<filter id='pixelate' x='0' y='0'>
<!-- <feComposite result="box-blur"/> -->
<feConvolveMatrix order="3" kernelMatrix="1 1 1 1 1 1 1 1 1" result="box-blur" />
<!-- generate tiling pattern -->
<feFlood x='3' y='3' height='1' width='1'/>
<feComposite width='3' height='3'/>
<feTile result='tiles'/>
<!-- apply tiling pattern -->
<feComposite in='box-blur' operator='in'/>
<!-- expand pixels to (2r + 1) large -->
<feMorphology operator='dilate' radius='1'/>
</filter>
</svg>
The feConvolveMatrix is only needed if you want input pixel averaging rather than point sampling. (It automatically divides by the sum of taps.)Note that:
- I'm told that feConvolveMatrix becomes slower for higher orders. For composite input sizes (like powers of 2), you can instead combine multiple passes of sampling with increasing amounts of zero-spacing between taps (the other meaning of dilation LMAO). I don't know if browsers will optimize the filter to skip processing input data, to make the filtering runtime O(log n) rather than O(n^2).
- I don't know any way to make <feMorphology operator='dilate'> expand point-sampled images to even pixel sizes. You may need to start with a different source point-sampling filter.
I have a general rule that "resource" types which own a heap allocation should usually be given a variable name with explicit scope (and likely even an explicit type, rather than `auto response` like in this post). This is a general guideline to avoid holding a reference to a temporary that gets destroyed, but doesn't protect against returning a dangling reference into a resource type from a function.
In other places, where languages make the opposite decision (from this blog post) to extend the lifetime of a temporary variable with a destructor when you call methods on it, you get things like C++'s temporary lifetime extension (not a bug, note that I don't understand it well), and footguns like Rust's `match lock.lock().something {}` (https://github.com/rust-lang/lang-team/blob/master/design-me...).
Is it safer to floss or not?
Yum endocrine disruptors... I find that when I apply office or duct tape to plastic erasers or PVC cable sleeves, the plastic and glue will "diffuse" into each other, producing a disgusting goop that sticks to fingers and is a pain to clean off. I also know that rubber feet and "soft touch" surfaces can turn into goop over time, but I don't know what process is happening there.
I hear that the plasticizers leaching out of plastic into air (or decomposing) is why old electronics' plastic cases and parts become weak and brittle over decades.
> the true starting cost of a M3 MacBook Pro is $1,699 because to buy one with only 8GB of RAM is crazy.
Does a MBP with 16 GB of RAM cost $2000 or $1700?