X-Mouse Button Control (XMBC for short) is a handy Windows app to override mouse buttons to do arbitrary other actions on a program/App -specific basis.
However the docs (which are excellent!) were published by the developer as PDF-only, so I did a nice transform to HTML and posted it on my personal website. I will do my best to host it until I'm dead, and also submitted it to TIA:
It takes HTML as input and generates markdown-esque plaintext, with the main focus being to make the plaintext version easy and pleasant to read for human beings. Then using MIME types*, you transmit both the rich html version alongside the generated text/plain version.
This is cool because it makes it easy to respect both rich clients (like Gmail et. al.) as well as command-line or other clients which work better with simple text.
Hope this helps folks have the best of both worlds! :) cheers
* n.b. To ensure this works properly, be sure to use the right MIME headers:
I find myself googling "etymology {word}" a lot recently; here inter is between like in intercontinental, and necine is death like in necrosis.
And inter is apparently the origin of intel, which is topical, and suggests Intelnecine, adj: destructive to all factions within Intel, or any company with a destructive amount of in-fighting.
> I’ve often thought about getting together with some friends to pay into a fund to house our websites after we die. I don’t think setting that up would be too hard — the math around insurance policies of this sort is quite simple — I mostly haven’t tried to set something like this up just since it’s a pretty morbid ask. But, if you’d be interested, maybe reach out to me?
> Our ghosts could live forever, if we help each other.
I love this idea and would gladly assist in the effort, let's set it up :)
the year is 2122 and all the "good" (short, memorable) DNS names are owned by ghosts. in the grim dark future, there is only joe_smith_from_minneapolis_born_2055.com
> Q: Do I get interest on my deposit? A: No[, but...] We periodically reevaluate this situation, because we think a web account that runs forever purely off of its own interest is a pretty cool idea.
NFSNet also has an interesting part in their FAQ in response to the question If I think services you host are currently unavailable due to lack of funds; is there anything I can do?, they outline a process whereby third-parties can fund a hosted service by creating an account themselves, depositing funds into their own account (NFSNet services are prepaid instead of billed after the fact), and then submitting a manual (but free) request to transfer those funds to the original accountholder based on the service's domain name. I've always thought this was interesting because in theory someone could set up a community, disappear, and then the community could step up to keep it funded long enough for the person to get out of the hospital/be rescued at sea/etc, so long as the infrastructure is solid enough to remain operational without being attended to (not vulnerable to exploits, etc.)
They've also got a policy where if the member who operates the service is a willing participant, they can publish their NearlyFreeSpeech.Net account ID and have donors add funds to cover 100% of service costs via automated transfers. <https://www.nearlyfreespeech.net/about/faq#Lifeboat>
The Klingons were hella cool! Wish I could have appreciated it more as a kid, but at the time (early 90s) I didn't even know what I was looking at or how special it was :D
> It hasn't been cooperative for a few versions now, the scheduler became preemptive in 1.14. And before that there were yield points at every function prolog (as well as all IO primitives) so there were relatively few situations where cooperation was necessary.
Since co-op was most unnecessary, do you know why it was changed to preemptive or what the specific cases were that are resolved with preemptive scheduling?
IIRC in earlier versions, an infinite loop without function calls could freeze the entire runtime: GC's stop the world event is triggered => goroutines are being suspended cooperatively => but this one goroutine never enters a function prolog and thus never suspends => all goroutines except one are suspended and there's no progress. Preemptive scheduling is much more robust. Although it's solvable in cooperative scheduling with an additional suspension check at the end of each loop, but it adds overhead for all loops. If I remember correctly, .NET or JVM implement safe points for GC (which can be used to switch contexts cooperatively as well) by simply reading a pointer from a special preallocated virtual memory page which is remapped to nothing when a stop-the-world event is triggered, so such a read traps into an invalid memory handler where you can park your thread. But I'm not sure how costly it is for thousands/millions of coroutines.
> But I'm not sure how costly it is for thousands/millions of coroutines.
Still cheap: you only need to preempt the threads which are actively running user code. If a coroutine is ready to run, but not actually running, you don't have to do anything with it (as long as you check for safepoints before entering user code.) That means your safepoints cost is `O(os threads currently running user code)` which in most runtimes is `O(num cores)`
https://www.highrez.co.uk/downloads/XMouseButtonControl.htm
However the docs (which are excellent!) were published by the developer as PDF-only, so I did a nice transform to HTML and posted it on my personal website. I will do my best to host it until I'm dead, and also submitted it to TIA:
https://www.highrez.co.uk/downloads/X-Mouse%20Button%20Contr...
https://jaytaylor.com/x-mouse-button-docs/
Forever TIA link: https://web.archive.org/web/20240825203006/https://jaytaylor...
Cheers,
Jay