from the department of tiny progress

I have multiple audio outputs. When running JACK it’s possible to enable output to the ones other than the primary one using alsa_out, but actually using them is difficult.

So I finally cobbled together a shell script to send all my current browser’s outputs to the Secondary:

#!/bin/bash
All_JACK_Ports="`jack_lsp`" # get ports list, maybe not optimally
SAVEIFS=$IFS # Save current Internal Field Separator
IFS=$'\n' # set Internal Field Separator to newlines only
All_JACK_Ports=($All_JACK_Ports) # turn list into an array
IFS=$SAVEIFS # Restore original IFS
for (( i=0; i<${#All_JACK_Ports[@]}; i++ ))
    do
      This_JACK_Port="${All_JACK_Ports[$i]}" # pull individual line
      if test "${This_JACK_Port:0:11}" = "vivaldi-bin" # or "Chromium" or whatever
         then
             if test "${This_JACK_Port: -1}" = "0" # last character
                then jack_connect "$This_JACK_Port" "Secondary:playback_1"
                else jack_connect "$This_JACK_Port" "Secondary:playback_2"
             fi
      fi
    done

A barely functional hack, but better than nothing.

In which I soothe my OCD through Proper Manuscript Formatting.

A canonical US manuscript page contains 250 words: 60 characters (1 word = 5 characters + 1 space, * 10) by 25 double-spaced lines.

That is, of course, on a typewriter.

Setting OpenOffice Writer to a US Letter-sized page with one inch margins and a Courier New 13pt font yields the 60 characters; to get the 25 lines exactly, I set the default paragraph style’s Line Spacing value to Proportional — not Double! — and the percentage value to 178%.

From The Department Of The Dead Past.

To the extent that GHOSTBUSTERS was worthwhile, it wasn’t as a comedy; what made it work were the moments when it might have been something else entirely — specifically the two or three minutes tracked with a magnificently atmospheric section of the Mick Smiley song “Magic” and the conversation between Stantz and Zeddmore about the end of the world.
The latter works for one and only one reason: Ernie Hudson. No one else in the cast had the dramatic weight to hold down that conversation. Bill Murray couldn’t have done it; nor could Harold Ramis. By rights, Hudson should have been the highest-paid member of the cast for performing that service.
The sequel, of course, didn’t work, because the director totally blew the corresponding moment. When you animate the Statue of Liberty, you don’t do it with “Higher And Higher”, you do it with the Ray Charles version of “America The Beautiful” — and you don’t animate the Statue of Liberty without giving her something important to do, because Ellis Island matters. Or at least mattered once.
GHOSTBUSTERS 2016 failed for a similar reason: there was no serious moment. The writers were clearly worried that the movie wasn’t going to be funny enough so they crammed in jokes that didn’t actually belong in the film. Kevin was hilarious, but was atmospherically the exact opposite of what they needed.¹ (People² are still whinging about the female cast. No, the cast was not the problem, especially not Leslie Jones, who could easily have held down the Just Got Real section if it had been there.)
__
¹ The Arnold Schwarzenegger movie LAST ACTION HERO was a mess, half fluffy parody, half dark satire, but the animated cat didn’t belong in either half.
² The people whinging are of the set who can’t understand why the current bulk entertainment product targeted at 12-year-olds isn’t as good as the bulk entertainment product they got when they were 12. Answer: accidentally high quality, dear childroon. The only reason you’ve got a house full of STAR WARS toys is happenstance.

From The Department Of Open Questions

Why would you…

…set text documents to open in an office-suite word processor by default, rather than a text editor?
…set no-word-wrap as default in your text editor in the era of wide screens?
…do away with the status bar when it tells the user whether the window is fully displayed vs merely larger than the screen?
…put a search field in the main page of your web browser when all you’re going to do when people try to type into it is relocate the cursor to the address bar?
…design window buttons [Minimize/Maximize/Close] to not respect Fitts’s Law?
…automatically hide scrollbars in the era of wide screens? especially when it never occurred to you when the normal screen was the size of a postage stamp?
…restore sessions by default? Especially in a web browser?
…design a resizable dialog to resize the section that won’t benefit from resizing, rather than the section that would?
…set a button to produce the click output “Configure the application first” rather than the configuration dialog?

BONUS! Hey, Linus Torvalds! Why would you… introduce an error message, viz, “the capability attribute has been deprecated”, such that when you g**gle it (since it means nothing by itself!) the closest thing to a hit that’s returned is the actual kernel code that produces it:

static ssize_t disk_capability_show(struct device *dev,
struct device_attribute *attr, char *buf)
{
dev_warn_once(dev, "the capability attribute has been deprecated.\n");
return sprintf(buf, "0\n");
}

…which contains not even a comment? If the message is meaningful only to kernel devs, and you’d have to be one to understand this, why not hide it behind a kernel command line debug switch?

From the Department of PipeWire

A reminder to myself re: configuring/compiling PipeWire on Devuan.

Dependencies:

sudo apt-get -s install meson debhelper pkg-config xorg-sgml-doctools docutils-common doxygen libavahi-client-dev libblkid-dev libcamera-dev libdecor-0-dev libgstreamer-plugins-base1.0-dev libsndfile1-dev libxrandr-dev libxt-dev libv4l-dev libxcursor-dev liblilv-dev libibus-1.0-dev liblc3-dev libldacbt-abr-dev libsdl2-dev libbluetooth-dev libcanberra-dev libfreeaptx-dev libjack-jackd2-dev libldacbt-enc-dev libncurses-dev libreadline-dev libsbc-dev libssl-dev libusb-1.0-0-dev libwebrtc-audio-processing-dev modemmanager-dev libavcodec-dev libavformat-dev libavutil-dev libswresample-dev pulseaudio-utils

Repeat that minus any dependencies already installed and the -s simulate switch, then do the job, disabling things I haven’t got (whatever roc is, bluetooth support for the devices I haven’t got, and systemd, which I also haven’t got:

meson setup builddir
meson configure builddir
meson configure builddir -Droc=disabled -Dbluez5=disabled -Dffmpeg=enabled -Dpw-cat-ffmpeg=enabled -Dsystemd=disabled -Dsystemd-user-service=disabled -Dprefix=/usr
meson compile -C builddir
sudo meson install -C builddir

And that’s the bunny.

From the Department of X.org Font Rendering

I have a favourite font¹ that for historical reasons renders — at 12 points / 96 DPI — in a 7×16 pixel character matrix. From 12 points through 23 points it distorts badly.²
On my current monitor 7×16 is too small and 14×32 too large.
And for a moment I thought: what about subpixel mode? I have it turned off in favor of greyscale antialiasing, because I don’t like colour-fringing, but it does deal in fractional pixels. Maybe it could give me some usable intermediate physical sizes?
Answer: no, not quite, not at 96 DPI; it yields vertically (!) malformed characters at 16 points.
But there is a way to get that happy more-or-less-medium size: change the screen DPI to the monitor’s correct value of 109 and lo! Plain greyscale antialiasing delivers the illusion of pixel-perfect reasonably-sized characters at 16 points. Switching to subpixel mode gains nothing but a color-fringed insert cursor. Slightly counterproductive, probably slower.
__
¹ “PR Number 3“, a replica of the Apple II character-generator font.
² The basic matrix of the A2CGF is 7×8, which in eighty-column mode was/is sent to the monitor at double the normal horizontal pixel-clock rate, producing half-width pixels. 3.5×8 → 7×16.

From the Department of Occasional Functionality

Sending a bank select message to some old SynthEdit based VSTs, e.g. several of the classic GTG series by Mik Sybrandt, causes what appears to be a silent factory-bank reset; the user-selected program is displayed in the relevant dialog but the default patch is played.

This can sometimes be worked around by blocking CC messages, e.g. by inserting REAPER’s JS MIDI Note Filter plugin¹ in front of the instrument and allowing only notes to pass; FalkTX’s CARLA plugin host has similar functionality, though I don’t remember how it worked.

Adding ‘cc0=-1’ to REAPER’s Preferences|Audio|Playback: CC Reset Overrides also seems to work, but may be a bit global for some tastes.

Of course, computers being what they are these days, it may not work after all. As Mr. Scott said, the more they overtake the plumbing the easier it is to stop up the drain…

__
¹ There’s also a JS MIDI CC filter available through ReaPack. Harrison Mixbus has one in the x42 plugin suite, which also has “CC2Note: Convert MIDI control change messages to note-on/off messages.” That might actually let you hear what was going wrong…

If there were a title, this would be it.

This was posted by someone on Twitter and reposted by someone else¹ and…oh dear…

AHA! See that sudden deviation? It is UNPOSSIBLE for human intervention to cause that sudden deviation!

It is CERTAINEMENT UNPOSSIBLE for human action over a period of FIFTY YEARS to cause that sudden deviation!

ESPECIALLY if that action consists of input into a chaotic system that by definition does not respond linearly but instead wobbles around for a long time and then SUDDENLY transforms to a new stable plateau!

NO! it proves instead that the people who were pointing out over that fifty year period (e.g. the oil company scientists that discovered the problem) that if you keep this up long enough bad stuff will happen, were just big ol’ FIBBERS!

Case CLOSED, end of DISCUSSION, QED, OMGWTFBBQ, PERIOD (“.”).

__
¹ Because we cannot push a person over the top of the swing set with our mightiest heave, it is UNPOSSIBLE to do so simply by reinforcing the magnitude of swing a little at a time over a sufficiently long period.

It’s got what plants crave.

Here’s an intriguing statement:

CO2 is not a “pollutant”; it is plant food.
It is also the inevitable emission generated by every living animal on Earth. It thus cannot be a “pollutant.”

Fun fact: about a bazillion years ago, life on Earth primarily consisted of animals that excreted O₂. They were wildly successful, and so — because no organism can survive in an environment of its own waste — died out in a great extinction event sometimes called the Oxygen Catastrophe.

Pollutants can be useful; that doesn’t stop them being pollutants.

Esoteric things you shouldn’t do and will have no trouble refraining from, #3.

Install Qt Creator.

It’s quite the bother to get this thing installed on De(bi/vu)an. You’d think installing the base package would leave you with a functioning installation and a populated examples page (it being the page that appears on first run, you’d think the packagers would ensure that installing the base package would do it) — but no.

One problem is, Creator looks for the examples once and only once. Install them after that and they won’t appear unless you delete the configuration folder (or at least the applicable setting, but I have yet to triage what that might be).

On the other hand, installing all the examples first and then installing Qt Creator also doesn’t work: some critical infrastructure is still missing.

My present solution: install 1) the examples; 2) Qt Creator; 3) all the doc-html files, which is certainly not enough in itself and may be voodoo, and then (still before starting for the first time) from the Not installed status screen in Synaptic, 4) everything whose name starts with qt or qml and has an appropriate version number (at this writing, 5.15.x).

And then you discover that the packager leaves /usr/bin full of qt-related links that all point to qtchooser, which of course makes qtcreator go “Huh?!” so you have to fix all those.

After doing all that it seems to work…well, except for the apparent necessity of running with a stylesheet…