<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>random strings</title><link href="https://blog.randomstring.org/" rel="alternate"/><link href="https://blog.randomstring.org/feeds/atom.xml" rel="self"/><id>https://blog.randomstring.org/</id><updated>2026-04-18T07:43:48-04:00</updated><entry><title>everything is complex</title><link href="https://blog.randomstring.org/2026/04/18/everything-is-complex/" rel="alternate"/><published>2026-04-18T07:43:48-04:00</published><updated>2026-04-18T07:43:48-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2026-04-18:/2026/04/18/everything-is-complex/</id><summary type="html">
&lt;p&gt;Excessive chaos produces a desire for order. The desire for order is
both good and evil: cooperation is good, dictatorship is evil.
Everything not trivial is complex.&lt;/p&gt;
&lt;p&gt;Excessive order produces a desire for chaos. The desire for chaos is
both good and evil: self-determinism is good, denying responsibility is
evil. Nothing is purely one or the other.&lt;/p&gt;
&lt;p&gt;Improving things is not futile, but it can be difficult and requires
maintenance and debugging. It is impossible to predict every
consequence, but quite possible to predict the likely consequences of
most actions. Nothing exists in a vacuum.&lt;/p&gt;
&lt;p&gt;Ignoring one or more of the above precepts is a common failure for
philosophers, economists, engineers and politicians.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;</summary><content type="html">
&lt;p&gt;Excessive chaos produces a desire for order. The desire for order is
both good and evil: cooperation is good, dictatorship is evil.
Everything not trivial is complex.&lt;/p&gt;
&lt;p&gt;Excessive order produces a desire for chaos. The desire for chaos is
both good and evil: self-determinism is good, denying responsibility is
evil. Nothing is purely one or the other.&lt;/p&gt;
&lt;p&gt;Improving things is not futile, but it can be difficult and requires
maintenance and debugging. It is impossible to predict every
consequence, but quite possible to predict the likely consequences of
most actions. Nothing exists in a vacuum.&lt;/p&gt;
&lt;p&gt;Ignoring one or more of the above precepts is a common failure for
philosophers, economists, engineers and politicians.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;
</content><category term="misc"/><category term="philosophy"/><category term="ethics"/><category term="law"/><category term="engineering"/><category term="life the universe and everything"/></entry><entry><title>failure is an option</title><link href="https://blog.randomstring.org/2026/04/14/failure-is-an-option/" rel="alternate"/><published>2026-04-14T16:20:36-04:00</published><updated>2026-04-14T16:20:36-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2026-04-14:/2026/04/14/failure-is-an-option/</id><summary type="html">
&lt;p&gt;Whenever a system attempts to predict what a user of the system will
want or do next or means, the failure case generates the most noticeable
immediate problems. The author(s) will notice them and attempt to fix
those problems.&lt;/p&gt;
&lt;p&gt;The success case may or may not generate a long-term problem.&lt;/p&gt;
&lt;p&gt;Systems in which this applies: autocorrect. Grammar checkers. LLMs.
CPU branch predictors. There are others.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;</summary><content type="html">
&lt;p&gt;Whenever a system attempts to predict what a user of the system will
want or do next or means, the failure case generates the most noticeable
immediate problems. The author(s) will notice them and attempt to fix
those problems.&lt;/p&gt;
&lt;p&gt;The success case may or may not generate a long-term problem.&lt;/p&gt;
&lt;p&gt;Systems in which this applies: autocorrect. Grammar checkers. LLMs.
CPU branch predictors. There are others.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="technology"/><category term="prediction"/><category term="consequences"/></entry><entry><title>ancient wisdom literature</title><link href="https://blog.randomstring.org/2026/03/27/ancient-wisdom-literature/" rel="alternate"/><published>2026-03-27T10:06:56-04:00</published><updated>2026-03-27T10:06:56-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2026-03-27:/2026/03/27/ancient-wisdom-literature/</id><summary type="html">
&lt;p&gt;An extract from George O. Smith’s short story QRM INTERPLANETARY
(1942), the first of his works about a space station set up to relay
radio messages between Earth, Mars and Venus:&lt;/p&gt;
&lt;p&gt;On Monday, Francis Burbank sent around a communique removing the
option of free messages for the personnel. On Tuesday, he remanded the
years-long custom of permitting the supply ships to carry, free,
packages from friends at home. On Wednesday, Burbank decided that there
should be a curfew on the one and only beer emporium. “Curfew” was a
revision made after he found that complete curtailing of all alcoholic
beverages might easily lead to a more moral problem; there being little
enough to do with one’s spare time. On Thursday, he set up a
stiff-necked staff of censors for the moving picture house. On Friday,
he put a tax on cigarettes and candy. On Saturday, he installed time
clocks in all the laboratories and professional offices, where previous
to his coming, men had come for work a half-hour late and worked an hour
overtime at night.&lt;/p&gt;
&lt;p&gt;and about a month later it escalates to this conversation:&lt;/p&gt;
</summary><content type="html">
&lt;p&gt;An extract from George O. Smith’s short story QRM INTERPLANETARY
(1942), the first of his works about a space station set up to relay
radio messages between Earth, Mars and Venus:&lt;/p&gt;
&lt;p&gt;On Monday, Francis Burbank sent around a communique removing the
option of free messages for the personnel. On Tuesday, he remanded the
years-long custom of permitting the supply ships to carry, free,
packages from friends at home. On Wednesday, Burbank decided that there
should be a curfew on the one and only beer emporium. “Curfew” was a
revision made after he found that complete curtailing of all alcoholic
beverages might easily lead to a more moral problem; there being little
enough to do with one’s spare time. On Thursday, he set up a
stiff-necked staff of censors for the moving picture house. On Friday,
he put a tax on cigarettes and candy. On Saturday, he installed time
clocks in all the laboratories and professional offices, where previous
to his coming, men had come for work a half-hour late and worked an hour
overtime at night.&lt;/p&gt;
&lt;p&gt;and about a month later it escalates to this conversation:&lt;/p&gt;

&lt;p&gt;“Tell me first, from what source does Venus Equilateral get its fresh
air?”&lt;/p&gt;
&lt;p&gt;“From the air plant. And that is—”&lt;/p&gt;
&lt;p&gt;“There must be more than one,” said Burbank thoughtfully.&lt;/p&gt;
&lt;p&gt;“There’s only one.”&lt;/p&gt;
&lt;p&gt;“There must be more than one. We couldn’t live if there weren’t,”
said the Director.&lt;/p&gt;
&lt;p&gt;“Wishing won’t make it so. There is only one.”&lt;/p&gt;
&lt;p&gt;“I tell you, there must be another. Why, I went into the one up at
the axis day before yesterday and found mat instead of a bunch of
machinery, running smoothly, purifying air, and sending it out to the
various parts of the station, all there was was a veritable jungle of
weeds. Those weeds, Mr. Charming, looked as though they must have been
put hi there years ago. Now, where did the air-purifying machinery
go?”&lt;/p&gt;
&lt;p&gt;Channing listened to the latter half of Burbank’s speech with his
chin at half-mast. He looked as though a feather would knock him clear
across the office.&lt;/p&gt;
&lt;p&gt;“I had some workmen clear the weeds out. I intend to replace the air
machinery as soon as I can get some new material sent from Terra.”&lt;/p&gt;
&lt;p&gt;–&lt;/p&gt;
&lt;p&gt;In 1942, George Smith was writing about MBAs trying to run technical
operations. Pity nobody listened to him.&lt;/p&gt;
&lt;p&gt;I understand every LLM has an MBA these days.&lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="technology"/><category term="ethics"/><category term="llm"/></entry><entry><title>the shirley argument</title><link href="https://blog.randomstring.org/2026/03/14/the-shirley-argument/" rel="alternate"/><published>2026-03-14T17:25:22-04:00</published><updated>2026-03-14T17:25:22-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2026-03-14:/2026/03/14/the-shirley-argument/</id><summary type="html">
&lt;p&gt;People are very fond of the Shirley argument. The Shirley argument
goes like this:&lt;/p&gt;
&lt;p&gt;“Surely the people who implement this law will do common-sense things
to avoid ridiculous results!”&lt;/p&gt;
&lt;p&gt;The Shirley argument is always wrong, usually because of
non-systematic yet surprisingly pervasive discrimination… and sometimes
because of systematic and intentional discrimination. And occasionally
because people aren’t perfect. But it’s always wrong.&lt;/p&gt;
&lt;p&gt;Laws can be incredibly pedantic: if you’re not sure, go read some. A
law which seems to inadvertently leave loopholes is not a well-written
law; anything which you can immediately spot is deliberate.&lt;/p&gt;
&lt;p&gt;And don’t call me Shirley.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;</summary><content type="html">
&lt;p&gt;People are very fond of the Shirley argument. The Shirley argument
goes like this:&lt;/p&gt;
&lt;p&gt;“Surely the people who implement this law will do common-sense things
to avoid ridiculous results!”&lt;/p&gt;
&lt;p&gt;The Shirley argument is always wrong, usually because of
non-systematic yet surprisingly pervasive discrimination… and sometimes
because of systematic and intentional discrimination. And occasionally
because people aren’t perfect. But it’s always wrong.&lt;/p&gt;
&lt;p&gt;Laws can be incredibly pedantic: if you’re not sure, go read some. A
law which seems to inadvertently leave loopholes is not a well-written
law; anything which you can immediately spot is deliberate.&lt;/p&gt;
&lt;p&gt;And don’t call me Shirley.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="politics"/><category term="law"/></entry><entry><title>riddle me this</title><link href="https://blog.randomstring.org/2026/02/13/riddle-me-this/" rel="alternate"/><published>2026-02-13T13:48:20-05:00</published><updated>2026-02-13T13:48:20-05:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2026-02-13:/2026/02/13/riddle-me-this/</id><summary type="html">
&lt;p&gt;Given that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No copyright can be claimed on work created by an LLM&lt;/li&gt;
&lt;li&gt;Many open source projects require contributors to sign a release of
some form - a certificate of origin or license agreement - that states
that the contribution is copyrighted to the contributor and can be
transferred to the project&lt;/li&gt;
&lt;li&gt;Many – all? – commercial software projects claim that their work is
copyrighted.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Therefore:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No LLM-produced code or documentation can be used by such an open
source project or such a commercial software project without
invalidating their copyright.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Notes: &lt;/p&gt;</summary><content type="html">
&lt;p&gt;Given that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No copyright can be claimed on work created by an LLM&lt;/li&gt;
&lt;li&gt;Many open source projects require contributors to sign a release of
some form - a certificate of origin or license agreement - that states
that the contribution is copyrighted to the contributor and can be
transferred to the project&lt;/li&gt;
&lt;li&gt;Many – all? – commercial software projects claim that their work is
copyrighted.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Therefore:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No LLM-produced code or documentation can be used by such an open
source project or such a commercial software project without
invalidating their copyright.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Notes: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;https://www.copyright.gov/ai/ai_policy_guidance.pdf&lt;/li&gt;
&lt;li&gt;https://cla.developers.google.com/about/google-individual&lt;/li&gt;
&lt;li&gt;https://developercertificate.org/&lt;/li&gt;
&lt;/ul&gt;
</content><category term="misc"/><category term="blog"/></entry><entry><title>evolution of convenience</title><link href="https://blog.randomstring.org/2026/01/17/evolution-of-convenience/" rel="alternate"/><published>2026-01-17T07:37:09-05:00</published><updated>2026-01-17T07:37:09-05:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2026-01-17:/2026/01/17/evolution-of-convenience/</id><summary type="html">
&lt;p&gt;I have a morning routine which would have seemed awfully complicated
to the teenaged me, and is probably ridiculously streamlined to the me
reading this entry in 2036. One step of it involves recording a number
in a spreadsheet.&lt;/p&gt;
</summary><content type="html">
&lt;p&gt;I have a morning routine which would have seemed awfully complicated
to the teenaged me, and is probably ridiculously streamlined to the me
reading this entry in 2036. One step of it involves recording a number
in a spreadsheet.&lt;/p&gt;

&lt;p&gt;It started as not-exactly-a-spreadsheet: just a list of numbers which
I edited in a text file. Almost immediately I revised it to include
dates. After a few months, I realized that I wanted to be able to graph
the data, so it became that most rudimentary of spreadsheets, a CSV -
comma separated variables.&lt;/p&gt;
&lt;p&gt;Some time thereafter I wrote a shell alias to bring up the editor
with this particular file, and the next day I changed the alias to send
my cursor directly to the last line, which saved me two keystrokes each
morning.&lt;/p&gt;
&lt;p&gt;There the matter stood for a few years, until this morning. I looked
at the file I had just added one line to in the same format as always. I
can automate away most of that, said my internal voice.&lt;/p&gt;
&lt;p&gt;So I wrote a new shell function which takes the one piece of data
from the outside world as an argument and inserts it in the proper
format, with the correct date format, as the last line of the
spreadsheet. And after verifying that it works, I went back and made the
function output the last three lines of the spreadsheet including the
new entry, so I could see any fat-fingered mistake immediately.&lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="shell"/><category term="bash"/><category term="csv"/><category term="spreadsheet"/><category term="function"/></entry><entry><title>oracle and postgres</title><link href="https://blog.randomstring.org/2025/10/17/oracle-and-postgres/" rel="alternate"/><published>2025-10-17T11:41:30-04:00</published><updated>2025-10-17T11:41:30-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2025-10-17:/2025/10/17/oracle-and-postgres/</id><summary type="html">
&lt;p&gt;It has been over 1111 days since we switched from Oracle’s database
to Postgresql at work. I have been happy about the switch for every
single one of those days. No regrets at all.&lt;/p&gt;
&lt;p&gt;Changing your core database is a huge proposition, especially when
the one you have is not broken. It’s also a huge amount of work.
[Workplace] has been built on Oracle for more than twenty years. Why did
we do it? &lt;/p&gt;</summary><content type="html">
&lt;p&gt;It has been over 1111 days since we switched from Oracle’s database
to Postgresql at work. I have been happy about the switch for every
single one of those days. No regrets at all.&lt;/p&gt;
&lt;p&gt;Changing your core database is a huge proposition, especially when
the one you have is not broken. It’s also a huge amount of work.
[Workplace] has been built on Oracle for more than twenty years. Why did
we do it? &lt;/p&gt;
&lt;p&gt;The original value of Oracle was two-fold. First, Oracle built a
database product that worked pretty well. At the time we started, it was
a pretty clear choice simply on the basis of functionality. Second, and
of nearly equal importance: we had already chosen to bet the company on
Linux. These days, Linux is ubiquitous. Android phones run it.
Supercomputers run it. Every Internet service you can think of runs on
Linux, except Microsoft’s Azure cloud – and that is overwhelmingly used
to run Linux in virtual machines. But in 2000, Linux was nine years old,
not thirty-one. It was not at all the obvious choice to run a serious
financial service. Banks had not heard of it. But banks all knew what
Oracle was.&lt;/p&gt;
&lt;p&gt;In 2000, Oracle was the database that banks used if they didn’t use
mainframes. (Here in 2025, Oracle is still the database that banks use
if they don’t use mainframes. Oracle just wants banks to move from
mainframes to Oracle databases in Oracle’s cloud.)&lt;/p&gt;
&lt;p&gt;So when we explained our service to the technology evaluators at a
prospective bank, their eyes passed blankly over “Linux” and seized on
“Oracle” as a touchstone of comfort. Technology evaluators want to hear
about secure and reliable infrastructure. It would not be a terrible
overstatement to say that using Oracle – just the name – prevented us
from being rejected outright.&lt;/p&gt;
&lt;p&gt;Now Linux is bigger than Oracle. Oracle has its own distribution of
Linux. It would be a little strange to run Oracle on anything else. We
no longer need the Oracle name to establish our credentials of
reliability.&lt;/p&gt;
&lt;p&gt;Postgresql – or Postgres, or PG – is actually older than Linux, and
almost as old as Oracle. The general class of relational database
management systems started in the late 1970s. Oracle’s first released
version (2.3, because who wants to buy version 1 of anything?) came out
in 1979. The INGRES project at Berkeley released a stable version in
1974. Postgres was started in 1985 as the Post-INGRES project. Around
1996, the project became open source, focused on SQL, and changed its
name to Postgresql. By 2016, PG was clearly a serious technical
competitor for any database in the world.&lt;/p&gt;
&lt;p&gt;That’s when I started arguing for a conversion.&lt;/p&gt;
&lt;p&gt;Although: I might have started looking for an alternative the second
or third time I had to negotiate for an Oracle license.&lt;/p&gt;
&lt;p&gt;As a complete nonsequitur, the last time I looked, Oracle forbade
anyone using their database from publishing performance comparisons with
it. That’s certainly the attitude of a company you trust, right? So I
won’t publish any benchmarks. You can be certain, however, that we had
minimal performance issues with the changeover. Everything we were
concerned about turned out to be solvable by adjusting the way we did
queries from something weirdly Oracle-specific – often that we didn’t
even know was Oracle-specific – to something PG-specific.&lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="work"/><category term="databases"/></entry><entry><title>a comparison of terminal emulators</title><link href="https://blog.randomstring.org/2025/09/26/a-comparison-of-terminal-emulators/" rel="alternate"/><published>2025-09-26T16:31:14-04:00</published><updated>2025-09-26T16:31:14-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2025-09-26:/2025/09/26/a-comparison-of-terminal-emulators/</id><summary type="html">
&lt;p&gt;(This entry is now on its third revision. Not much has changed.)&lt;/p&gt;
&lt;p&gt;This is going to be a big one. Here follows a [hopefully factual]
comparison and [hopefully useful] subjective review of N terminal
emulators. The following three constraints will be in effect:&lt;/p&gt;
</summary><content type="html">
&lt;p&gt;(This entry is now on its third revision. Not much has changed.)&lt;/p&gt;
&lt;p&gt;This is going to be a big one. Here follows a [hopefully factual]
comparison and [hopefully useful] subjective review of N terminal
emulators. The following three constraints will be in effect:&lt;/p&gt;

&lt;ol type="1"&gt;
&lt;li&gt;&lt;p&gt;They have to run on one of the systems that I have easy access
to. That means Debian Stable (Trixie, currently) or MacOS Sequoia
(15.something). It also means that while I will note the availability of
Wayland, fbdev, or stranger runtime platforms, I will only be doing
evaluations on X11 and MacOS. I don’t see the point of running fbterm
since all the situation in which I would do so, I already have the Linux
console at hand. Nor am I going to review terminals that operate inside
editors, IDEs, or whatever – you aren’t going to change IDEs because it
has a great terminal, or if you are, the other features of the IDE need
to be acceptable to you.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I have to know about them. Obviously.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I have to reasonably easily find a project page for each
item.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Here’s the initial list:&lt;/p&gt;
&lt;h2 id="runs-on-macos"&gt;Runs on MacOS:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Mac terminal&lt;/li&gt;
&lt;li&gt;iterm&lt;/li&gt;
&lt;li&gt;alacritty&lt;/li&gt;
&lt;li&gt;wezterm&lt;/li&gt;
&lt;li&gt;kitty&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="runs-on-x11"&gt;Runs on X11:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;alacritty&lt;/li&gt;
&lt;li&gt;blackbox&lt;/li&gt;
&lt;li&gt;cool-retro-term&lt;/li&gt;
&lt;li&gt;deepin-terminal&lt;/li&gt;
&lt;li&gt;kitty&lt;/li&gt;
&lt;li&gt;ghostty&lt;/li&gt;
&lt;li&gt;gnome-terminal&lt;/li&gt;
&lt;li&gt;guake&lt;/li&gt;
&lt;li&gt;konsole&lt;/li&gt;
&lt;li&gt;lomiri-terminal-app&lt;/li&gt;
&lt;li&gt;lxterminal&lt;/li&gt;
&lt;li&gt;mate-terminal&lt;/li&gt;
&lt;li&gt;pterm&lt;/li&gt;
&lt;li&gt;ptyxis&lt;/li&gt;
&lt;li&gt;qmlkonsole&lt;/li&gt;
&lt;li&gt;qterminal&lt;/li&gt;
&lt;li&gt;rxvt (urxvt/rxvt-unicode)&lt;/li&gt;
&lt;li&gt;sakura&lt;/li&gt;
&lt;li&gt;stterm&lt;/li&gt;
&lt;li&gt;sugar-terminal-activity&lt;/li&gt;
&lt;li&gt;terminal.app (OpenStep)&lt;/li&gt;
&lt;li&gt;terminator&lt;/li&gt;
&lt;li&gt;terminology&lt;/li&gt;
&lt;li&gt;termit&lt;/li&gt;
&lt;li&gt;tilda&lt;/li&gt;
&lt;li&gt;tilix&lt;/li&gt;
&lt;li&gt;wezterm&lt;/li&gt;
&lt;li&gt;xfce4-terminal&lt;/li&gt;
&lt;li&gt;xterm (the original!)&lt;/li&gt;
&lt;li&gt;yakuake&lt;/li&gt;
&lt;li&gt;zutty&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="what-do-i-want-to-note-about-each-of-them"&gt;What do I want to
note about each of them?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Who is writing this, and if they win a lottery and retire, is
there an organization to keep it going? Alternatively, is this going to
sprout ads and spyware next year?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is the project’s point of view? Are they making a tool that
makes them happy, a work of technical art, or trying to be all things to
everyone?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Licensing?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What’s the configuration method? In particular, how hard is it to
make it pop up with a particular color choice and font choice?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Can it play nsnake? This is a functionality test. It’s not
exhaustive. And it turns out to be semi-useless in distinguishing
terminals: only cool-retro-term had terrible problems, and qterminal had
a very strange drawing bug.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If I ask it to show me 256 colors, is it hard? This turns out to
be a no-brainer these days… except on cool-retro-term and terminal.app.
Those just don’t support modern color. Some of the term-ems let you pick
exactly which RGB colors will be assigned to the 16 standard slots, some
of them require you to organize them into themes or palettes, and at
least one doesn’t care about your opinion.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And then some subjective stuff.&lt;/p&gt;
&lt;h2 id="on-configuration-methods"&gt;On configuration methods:&lt;/h2&gt;
&lt;p&gt;All of these are configured with some combination of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;command line options&lt;/li&gt;
&lt;li&gt;GUI menus, usually Edit -&amp;gt; Preferences or File -&amp;gt;
Settings&lt;/li&gt;
&lt;li&gt;config files, written in YAML or TOML or key=value or JSON or Lua or
something really wacky.&lt;/li&gt;
&lt;li&gt;the X resource database, Xrdb&lt;/li&gt;
&lt;li&gt;and one of them has no configuration and requires you to re-compile
it each time you want to change an option.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="on-performance"&gt;On performance:&lt;/h2&gt;
&lt;p&gt;My contention is that there are only two relevant performance factors
in these term-ems, and one is much more interesting than the other.
First, of less concern, is startup time. Unless this is egregiously bad,
you don’t care. Second, of more concern, is the latency from touching a
key on your keyboard to displaying it on screen. Assuming a 60Hz
display, any value consistently under 16ms (one frame) is fine. There’s
a nice write up at https://beuke.org/terminal-latency/ comparing many of
these term-ems. The projects with low latency are, in order:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;xterm&lt;/li&gt;
&lt;li&gt;alacritty&lt;/li&gt;
&lt;li&gt;kitty&lt;/li&gt;
&lt;li&gt;zutty&lt;/li&gt;
&lt;li&gt;sl&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;and, just above the 16ms cutoff:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;rxvt (urxvt)&lt;/li&gt;
&lt;li&gt;konsole&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;People have suggested that scrolling ability is somehow a
differentiating factor. Here’s a few terminals running
&lt;code&gt;time find /usr&lt;/code&gt;, all on the same system, without needing to
do any disk work because I pre-ran the command and the metadata is all
loaded up in memory:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;xterm:&lt;/strong&gt; real 0m2.210s user 0m0.526s sys 0m1.645s&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;alacritty:&lt;/strong&gt; real 0m2.240s user 0m0.581s sys
0m1.647s&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;konsole:&lt;/strong&gt; real 0m2.767s user 0m0.507s sys
0m1.676s&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;zutty:&lt;/strong&gt; real 0m2.283s user 0m0.552s sys 0m1.708s&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;wezterm:&lt;/strong&gt; real 0m2.770s user 0m0.517s sys
0m1.746s&lt;/p&gt;
&lt;p&gt;I don’t think any of these are meaningfully different to a human.
Yes, they were all rendering the same OpenType font at the same
size.&lt;/p&gt;
&lt;h2 id="on-subjectivity"&gt;On subjectivity:&lt;/h2&gt;
&lt;p&gt;Everyone is entitled to their own opinion, not to their own facts. If
I have misstated anything factual herein, please let me know via email -
dsr-blog at this domain - and I will confirm it and get it
corrected.&lt;/p&gt;
&lt;p&gt;Let’s start the reviews.&lt;/p&gt;
&lt;h2
id="alacritty-a-modern-terminal-emulator-that-comes-with-sensible-defaults-but-allows-for-extensive-configuration."&gt;alacritty:
a modern terminal emulator that comes with sensible defaults, but allows
for extensive configuration.&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Dev team&lt;/em&gt;: one main dev and several people who seem to be
familiar with the code base and are making contributions.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Maturity&lt;/em&gt;: Alacritty is technically in beta; it has been
around since 2017. Github issues are discussed actively.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;License&lt;/em&gt;: Apache and MIT, I think.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config method&lt;/em&gt;: TOML; earlier versions used YAML and there is
a conversion command built-in.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config colors&lt;/em&gt;: 18 named colors (foreground, background, and
16 slots)&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config fonts&lt;/em&gt;: separate choices for each of regular, bold,
italic, and bold-italic.&lt;/p&gt;
&lt;p&gt;Obviously alacritty is the best of all possible terminal emulators,
partially because it is written in Rust. It uses a fair amount of
memory, though still about 30% less than wezterm. Alacritty works just
the same way on MacOS, with a few extra config commands available to
integrate with weird Macish things. There is a Windows version, too.&lt;/p&gt;
&lt;h2
id="blackbox-an-elegant-and-customizable-terminal-for-gnome"&gt;blackbox:
An elegant and customizable terminal for GNOME&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Dev team&lt;/em&gt;: one main dev, several people have contributed
patches.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Maturity&lt;/em&gt;: Gitlab.gnome.org has at least been touched
recently.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;License&lt;/em&gt;: GPL3&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config method&lt;/em&gt;: GUI&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config colors&lt;/em&gt;: you will have to write a theme&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config fonts&lt;/em&gt;: one place to set one font&lt;/p&gt;
&lt;p&gt;I don’t think anyone will argue that blackbox is the best of all
possible terminal emulators, even if it does have the distinction of
being written in Vala, a language I had not previously encountered. It
feels mostly-working, but rough in a few places. If this sounds vaguely
attractive, consider GNOME Terminal instead.&lt;/p&gt;
&lt;h2
id="cool-retro-term-mimics-the-look-and-feel-of-the-old-cathode-tube-screens.-it-has-been-designed-to-be-eye-candy-customizable-and-reasonably-lightweight."&gt;cool-retro-term:
mimics the look and feel of the old cathode tube screens. It has been
designed to be eye-candy, customizable, and reasonably lightweight.&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Dev team&lt;/em&gt;: one dev&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Maturity&lt;/em&gt;: no updates since 2022. Some folks are helping each
other out with config and compile issues. &lt;em&gt;License&lt;/em&gt;: GPL2 or
3&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config method&lt;/em&gt;: GUI&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config colors&lt;/em&gt;: foreground and background.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config fonts&lt;/em&gt;: some terminal styles have a limited choice of
fonts&lt;/p&gt;
&lt;p&gt;There is a particular sense in which cool-retro-term is obviously the
best of all possible terminal emulators, but you have to be committed.
Specifically, C-R-T emulates the look of classic (1980-1995) CRT-based
computers. All the visual distortion, low resolution, bizarre
flickering… This is a special effect, not a daily driver for sane
people.&lt;/p&gt;
&lt;h2
id="deepin-terminal-an-advanced-terminal-emulator-with-workspaces-multiple-windows-remote-management-quake-mode"&gt;deepin-terminal:
an advanced terminal emulator with workspaces, multiple windows, remote
management, quake mode&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Dev team&lt;/em&gt;: Deepin Technology&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Maturity&lt;/em&gt;: incomplete, buggy, and probably abandoned.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;License&lt;/em&gt;: GPL 3&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config method&lt;/em&gt;: GUI&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config colors&lt;/em&gt;: No.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config fonts&lt;/em&gt;: No, but you can change the size.&lt;/p&gt;
&lt;p&gt;Don’t use this.&lt;/p&gt;
&lt;h2 id="ghostty-fast-feature-rich-and-native"&gt;ghostty: fast,
feature-rich and native&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Dev team&lt;/em&gt;: one main dev who has recently opened the code, but
a lot of contributors.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Maturity&lt;/em&gt;: Extremely active. However, the idea appears to be
that there will be a control for every possible pixel/action
combination, and they are busy assigning defaults. Things like “can it
be installed in Debian Stable” are left to non-core volunteers&lt;/p&gt;
&lt;p&gt;&lt;em&gt;License&lt;/em&gt;: MIT&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config method&lt;/em&gt;: custom key=value file&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config colors&lt;/em&gt;: there are a lot of color-related keys
scattered around the docs&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config fonts&lt;/em&gt;: I assume so, but…&lt;/p&gt;
&lt;p&gt;I could not compile Ghostty, which is the best term-em in the world
because it is written in Zig.&lt;/p&gt;
&lt;h2
id="gnome-terminal-highly-customizable-gnome-terminal-emulator"&gt;gnome-terminal:
highly customizable GNOME terminal emulator&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Dev team&lt;/em&gt;: GNOME.org&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Maturity&lt;/em&gt;: “You are using a version which is too old and we
won’t support it. Feel free to re-open the bug once you are up to
date.”&lt;/p&gt;
&lt;p&gt;&lt;em&gt;License&lt;/em&gt;: GPL 3&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config method&lt;/em&gt;: GUI&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config colors&lt;/em&gt;: 16 boxes plus available themes&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config fonts&lt;/em&gt;: one font, one size&lt;/p&gt;
&lt;p&gt;Part of the GNOME juggernaut. But it probably works, and if your bug
is universal and repeatable, maybe it will get attention! Or not. The
underlying term-em is VTE; you will see a bunch of term-ems which are
basically wrappers around VTE. The good thing is that fixing a bug in
VTE fixes it in all the others, soon enough. The bad thing is that any
feature which requires changes to VTE might not get implemented. You
probably have this installed already.&lt;/p&gt;
&lt;h2
id="guake-a-python-based-dropdown-terminal-made-for-the-gnome-desktop-environment.-guakes-style-of-window-is-based-on-an-fps-game-and-one-of-its-goals-is-to-be-easy-to-reach."&gt;guake:
a python based dropdown terminal made for the GNOME desktop environment.
Guake’s style of window is based on an FPS game, and one of its goals is
to be easy to reach.&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Dev team&lt;/em&gt;: 247 contributors, no release in 2 years&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Maturity&lt;/em&gt;: The official website is borken, and github issues
haven’t been responded to by a dev in months.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;License&lt;/em&gt;: GPL2&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config method&lt;/em&gt;: GUI&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config colors&lt;/em&gt;: Same as GNOME Terminal&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config fonts&lt;/em&gt;: Same as GNOME Terminal&lt;/p&gt;
&lt;p&gt;Guake can’t run nsnake because the default size is less than 24 lines
high, and I couldn’t figure out how to change that. There is a certain
cool factor in the one thing that this term-em is named for, but other
term-ems can do it better.&lt;/p&gt;
&lt;h2
id="iterm-2-brings-the-terminal-into-the-modern-age-with-features-you-never-knew-you-always-wanted."&gt;iTerm
2: brings the terminal into the modern age with features you never knew
you always wanted.&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Dev team&lt;/em&gt;: one dev&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Maturity&lt;/em&gt;: active development, considered
production-ready&lt;/p&gt;
&lt;p&gt;&lt;em&gt;License&lt;/em&gt;: GPL 2&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config method&lt;/em&gt;: GUI&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config colors&lt;/em&gt;: all of them&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config fonts&lt;/em&gt;: two: one for Western European languages, and
one for all others&lt;/p&gt;
&lt;p&gt;Like WezTerm, iTerm has never seen a feature in another term-em that
it didn’t want to incorporate. MacOS-only. Aggressively hegemonizing
swarm objects start like this, don’t say I didn’t warn you.&lt;/p&gt;
&lt;h2 id="kitty-the-fast-feature-rich-gpu-based-terminal-emulator"&gt;kitty:
The fast, feature-rich, GPU-based terminal emulator&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Dev team&lt;/em&gt;: one main dev with a strong opinion that everyone
else is wrong.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Maturity&lt;/em&gt;: Extremely active, but that doesn’t mean they will
fix the bug that annoys you.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;License&lt;/em&gt;: GPL 3&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config method&lt;/em&gt;: a config file in an idiosyncratic
key=variable dialect&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config colors&lt;/em&gt;: almost certainly, but not without the man
pages&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config fonts&lt;/em&gt;: four font descriptors.&lt;/p&gt;
&lt;p&gt;kitty demands that you adopt it as a way of life. You will learn
kitty’s way of doing things; compatibility is other projects’ problem.
They should do it kitty’s way, or maybe the dev will write a replacement
for that project, too. It likes to log errors in the form “the
application is trying to do something that Xterm does. Our way is better
and the application should change.” Read the FAQ at
https://sw.kovidgoyal.net/kitty/faq/ to set the mood.&lt;/p&gt;
&lt;h2 id="konsole-a-powerful-and-customizable-term-em"&gt;konsole: a powerful
and customizable term-em&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Dev team&lt;/em&gt;: KDE&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Maturity&lt;/em&gt;: Competent&lt;/p&gt;
&lt;p&gt;&lt;em&gt;License&lt;/em&gt;: GPL 2&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config method&lt;/em&gt;: GUI, a little odd&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config colors&lt;/em&gt;: via themes&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config fonts&lt;/em&gt;: one font, one size&lt;/p&gt;
&lt;p&gt;There might not be anything distinctive here, but there doesn’t seem
to be anything wrong, either.&lt;/p&gt;
&lt;h2
id="lomiri-terminal-app-a-core-app-for-ubuntu-touchs-lomiri-shell"&gt;lomiri-terminal-app:
a core app for Ubuntu Touch’s Lomiri shell&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Dev team&lt;/em&gt;: UBports Foundation&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Maturity&lt;/em&gt;: last release is six years old, but there are
recent commits&lt;/p&gt;
&lt;p&gt;&lt;em&gt;License&lt;/em&gt;: GPL 3&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config method&lt;/em&gt;: menu, but weird&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config colors&lt;/em&gt;: 16 plus themes&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config fonts&lt;/em&gt;: looks weird, but yes. One font, one size.&lt;/p&gt;
&lt;p&gt;Apparently designed for a touch screen environment with a tiny
physical or on-screen keyboard. Not notably well-designed; Android’s
Terminal does better.&lt;/p&gt;
&lt;h2
id="lxterminal-a-vte-based-tabbed-terminal-with-few-dependencies"&gt;lxterminal:
a VTE-based tabbed terminal with few dependencies&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Dev team&lt;/em&gt;: LXDE&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Maturity&lt;/em&gt;: Another competent VTE term-em&lt;/p&gt;
&lt;p&gt;&lt;em&gt;License&lt;/em&gt;: GPL 2&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config method&lt;/em&gt;: GUI&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config colors&lt;/em&gt;: Same as GNOME Terminal&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config fonts&lt;/em&gt;: Same as GNOME Terminal&lt;/p&gt;
&lt;p&gt;If you are using LXDE because you need to save RAM, may I introduce
you to xterm?&lt;/p&gt;
&lt;h2 id="mate-terminal-a-fork-of-gnome-terminal"&gt;mate-terminal: a fork of
GNOME Terminal&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Dev team&lt;/em&gt;: MATE&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Maturity&lt;/em&gt;: Some commits in the last year; working on Wayland
compatibility&lt;/p&gt;
&lt;p&gt;&lt;em&gt;License&lt;/em&gt;: GPL 3&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config method&lt;/em&gt;: Menu&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config colors&lt;/em&gt;: Same as GNOME Terminal&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config fonts&lt;/em&gt;: Same as GNOME Terminal&lt;/p&gt;
&lt;p&gt;It’s a fork of GNOME Terminal, but I don’t know why.&lt;/p&gt;
&lt;h2 id="pterm-the-x11-fork-of-putty"&gt;pterm: the X11 fork of putty&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Dev team&lt;/em&gt;: a small group, same as putty&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Maturity&lt;/em&gt;: pretty active&lt;/p&gt;
&lt;p&gt;&lt;em&gt;License&lt;/em&gt;: MIT&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config method&lt;/em&gt;: command line or Xrdb&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config colors&lt;/em&gt;: much like rxvt&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config fonts&lt;/em&gt;: much like xterm&lt;/p&gt;
&lt;p&gt;It may be a different back end, but it looks a lot like xterm or
rxvt.&lt;/p&gt;
&lt;h2
id="ptyxis-a-container-oriented-terminal.-im-not-sure-they-know-what-that-means-i-know-i-dont-know-what-they-mean.-a-modern-terminal-emulator-built-for-the-container-era.-seamlessly-navigate-between-your-host-system-and-local-containers-like-podman-toolbox-and-distrobox-with-intelligent-detection-and-a-beautiful-responsive-gnome-interface."&gt;ptyxis:
a container oriented terminal. I’m not sure they know what that means; I
know I don’t know what they mean. “A modern terminal emulator built for
the container era. Seamlessly navigate between your host system and
local containers like Podman, Toolbox, and Distrobox with intelligent
detection and a beautiful, responsive GNOME interface.”&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Dev team&lt;/em&gt;: A large group? the README has been authored by a
lot of people&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Maturity&lt;/em&gt;: active development&lt;/p&gt;
&lt;p&gt;&lt;em&gt;License&lt;/em&gt;: GPL 3&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config method&lt;/em&gt;: Menu, GNOME-ish, weird.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config colors&lt;/em&gt;: You must choose from unnamed, badly
underspecified “palettes”.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config fonts&lt;/em&gt;: One font, one size.&lt;/p&gt;
&lt;p&gt;“engineered from the ground up for modern development workflows
within the GNOME desktop, where local containers are first-class
citizens. It simplifies and enhances your interaction with tools like
Podman, Toolbox, and Distrobox, making them a natural extension of your
terminal experience. Ptyxis is the default terminal in Fedora
Workstation, Red Hat Enterprise Linux, and Ubuntu.” Smells like
corporate bullshit to me.&lt;/p&gt;
&lt;h2
id="qmlkonsole-offering-additional-buttons-useful-on-touch-devices"&gt;qmlkonsole:
offering additional buttons useful on touch devices&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Dev team&lt;/em&gt;: KDE&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Maturity&lt;/em&gt;: Released once a month since 2021, but is anyone
using it?&lt;/p&gt;
&lt;p&gt;&lt;em&gt;License&lt;/em&gt;: GPL2&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config method&lt;/em&gt;: I can’t figure it out.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config colors&lt;/em&gt;: Could be?&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config fonts&lt;/em&gt;: Mayhaps?&lt;/p&gt;
&lt;p&gt;Not a good partner for Konsole.&lt;/p&gt;
&lt;h2 id="qterminal"&gt;qterminal&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Dev team&lt;/em&gt;: LXDE&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Maturity&lt;/em&gt;: Minor changes released recently, but the general
attitude seems to be “patches welcome”&lt;/p&gt;
&lt;p&gt;&lt;em&gt;License&lt;/em&gt;: GPL 2&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config method&lt;/em&gt;: GUI&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config colors&lt;/em&gt;: Has themes&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config fonts&lt;/em&gt;: One font, one size.&lt;/p&gt;
&lt;p&gt;First time I’ve seen a bug in nsnake. Not a good sign.&lt;/p&gt;
&lt;h2
id="rxvt-urxvtrxvt-unicode-a-fork-of-a-slimmed-down-alternative-to-xterm-with-features-added-back-in."&gt;rxvt
(urxvt/rxvt-unicode): a fork of a slimmed-down alternative to xterm with
features added back in.&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Dev team&lt;/em&gt;: At least one person at schmorp.de&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Maturity&lt;/em&gt;: There are probably bugs, but by now other programs
have worked around them.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;License&lt;/em&gt;: GPL 2&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config method&lt;/em&gt;: command line or Xrdb&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config colors&lt;/em&gt;: sure&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config fonts&lt;/em&gt;: yup&lt;/p&gt;
&lt;p&gt;xterm had too many features, so rxvt was born. People wanted more
features and especially Unicode (and transparent/translucent backgrounds
before compositors were a thing) so urxvt. xterm has Unicode these days,
guys.&lt;/p&gt;
&lt;p&gt;I have used xterm and rxvt more than any other term-ems.&lt;/p&gt;
&lt;h2 id="sakura-simple-gtkvte-term-em"&gt;sakura: simple GTK/VTE
term-em&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Dev team&lt;/em&gt;: a dozen contributors, but mostly one dev&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Maturity&lt;/em&gt;: not really active. Clearly still has some
bugs.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;License&lt;/em&gt;: GPL 2&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config method&lt;/em&gt;: menu&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config colors&lt;/em&gt;: yes&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config fonts&lt;/em&gt;: yes&lt;/p&gt;
&lt;p&gt;There are a bunch of simple gtk/vte terminal emulators, and this is
one of them.&lt;/p&gt;
&lt;h2 id="st-a-simple-terminal-emulator"&gt;st: a simple terminal
emulator&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Dev team&lt;/em&gt;: a bunch of revisionist nazis&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Maturity&lt;/em&gt;: Nope.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;License&lt;/em&gt;: MIT&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config method&lt;/em&gt;: recompile it&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config colors&lt;/em&gt;: recompile it&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config fonts&lt;/em&gt;: recompile it&lt;/p&gt;
&lt;p&gt;Nazi punks fuck off.&lt;/p&gt;
&lt;h2
id="sugar-terminal-activity-a-full-screen-text-mode-program-that-provides-a-cli"&gt;sugar-terminal-activity:
a full screen text mode program that provides a CLI&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Dev team&lt;/em&gt;: SugarLabs (defunct?)&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Maturity&lt;/em&gt;: Something got fixed a few months ago.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;License&lt;/em&gt;: GPL 2 or 3&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config method&lt;/em&gt;: first you have to figure out how to run
it&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config colors&lt;/em&gt;:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config fonts&lt;/em&gt;:&lt;/p&gt;
&lt;p&gt;This is apparently a fork of Guake. If you aren’t using a Sugar
Desktop, I don’t think this will work for you. It did not work for
me.&lt;/p&gt;
&lt;h2 id="terminal.app-gnustep-a-terminal"&gt;terminal.app (GNUStep): A
terminal&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Dev team&lt;/em&gt;: abandoned? but installable in Debian stable&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Maturity&lt;/em&gt;: retired&lt;/p&gt;
&lt;p&gt;&lt;em&gt;License&lt;/em&gt;: MIT&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config method&lt;/em&gt;: special GNUStep menus&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config colors&lt;/em&gt;: no&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config fonts&lt;/em&gt;: main and bold.&lt;/p&gt;
&lt;p&gt;When people talk about how cool OpenStep was, I assume this is not
what they had in mind. Debian has no bugs listed for this… ever. Perhaps
it is perfected.&lt;/p&gt;
&lt;h2 id="terminal.app-macos-a-terminal"&gt;terminal.app (MacOS): A
terminal&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Dev team&lt;/em&gt;: Apple Computer&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Maturity&lt;/em&gt;: adult&lt;/p&gt;
&lt;p&gt;&lt;em&gt;License&lt;/em&gt;: proprietary, included with MacOS&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config method&lt;/em&gt;: menus&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config colors&lt;/em&gt;: no&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config fonts&lt;/em&gt;: one font, one size&lt;/p&gt;
&lt;p&gt;Technically this is the successor to the NeXTstep Terminal.app that
the GNUstep one wants to copy. It’s much more usable, but it seems to
get new features based on some problem that an Apple employee was having
ten years ago, more than anything else.&lt;/p&gt;
&lt;h2
id="terminator-the-robot-future-of-terminals.-originally-inspired-by-projects-like-quadkonsole-and-gnome-multi-term-and-more-recently-by-projects-like-iterm2-and-tilix-it-lets-you-combine-and-recombine-terminals-to-suit-the-style-you-like."&gt;terminator:
The Robot Future of Terminals. Originally inspired by projects like
quadkonsole and gnome-multi-term and more recently by projects like
Iterm2, and Tilix, It lets you combine and recombine terminals to suit
the style you like.&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Dev team&lt;/em&gt;: one dev who is not backed up by GNOME.org&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Maturity&lt;/em&gt;: has bugs; bugs are reported; people respond&lt;/p&gt;
&lt;p&gt;&lt;em&gt;License&lt;/em&gt;: GPL 2&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config method&lt;/em&gt;: GUI&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config colors&lt;/em&gt;: via themes and palettes&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config fonts&lt;/em&gt;: one font, one size.&lt;/p&gt;
&lt;p&gt;They found a cool name so they had to come up with a project, I
guess. Does this offer anything that other GTK/VTE term-ems don’t?
Plugins. Did you want plugins? The dev wrote in and says the unique
feature is terminal broadcasting, in which a sending terminal can have
input sent to multiple receiver terminals, which treat it as input
themselves. (Why do this? Think about handling several nearly identical
machines at once.) This is actually a cool feature for small-shop
sysadmins; I used to do it similarly with a wrapper called cssh (cluster
ssh).&lt;/p&gt;
&lt;h2
id="terminology-it-has-a-whole-bunch-of-bells-and-whistles"&gt;terminology:
it has a whole bunch of bells and whistles&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Dev team&lt;/em&gt;: Enlightenment Foundation&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Maturity&lt;/em&gt;: Feels like an advanced beta&lt;/p&gt;
&lt;p&gt;&lt;em&gt;License&lt;/em&gt;: Maybe BSD. Hard to tell.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config method&lt;/em&gt;: GUI, in ways you’ve never seen before&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config colors&lt;/em&gt;: many&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config fonts&lt;/em&gt;: at least one&lt;/p&gt;
&lt;p&gt;When you have a few spare hours, you should visit the land of
Enlightenment. It’s dedicated to the proposition that everything should
move, glide, twinkle, effervesce, and generally be much cooler than you
deserve. I don’t think you want to live there, though. I don’t. Has
moments of extreme cleverness: the first time you run it, it will
immediately ask you to adjust a slider until the text is a size that you
like!&lt;/p&gt;
&lt;h2 id="termit-a-simple-gtlvte-term-em-extensible-via-lua"&gt;termit: a
simple GTL/VTE term-em, extensible via Lua&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Dev team&lt;/em&gt;: 12 contributors&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Maturity&lt;/em&gt;: Had a release recently&lt;/p&gt;
&lt;p&gt;&lt;em&gt;License&lt;/em&gt;: GPL 3&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config method&lt;/em&gt;: GUI&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config colors&lt;/em&gt;: … no?&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config fonts&lt;/em&gt;: yes.&lt;/p&gt;
&lt;p&gt;Yet another GTK/VTE.&lt;/p&gt;
&lt;h2 id="tilda-its-like-guake"&gt;tilda: it’s like guake?&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Dev team&lt;/em&gt;: 59 contribs&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Maturity&lt;/em&gt;: but no release in the year since 2.0. Nobody is
reading the bug reports.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;License&lt;/em&gt;: GPL 2&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config method&lt;/em&gt;: GUI&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config colors&lt;/em&gt;: 16 colors and themes&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config fonts&lt;/em&gt;: one font, one size&lt;/p&gt;
&lt;p&gt;It’s another GTK/VTE, but only as a pull-down from the top of your
screen.&lt;/p&gt;
&lt;h2
id="tilix-an-advanced-gtk3-tiling-terminal-emulator-that-follows-the-gnome-human-interface-guidelines"&gt;tilix:
an advanced GTK3 tiling terminal emulator that follows the Gnome Human
Interface Guidelines&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Dev team&lt;/em&gt;: One dev, unsupported by GNOME&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Maturity&lt;/em&gt;: Not a whole lot of work visibly happening right
now.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;License&lt;/em&gt;: MPL 2&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config method&lt;/em&gt;: GUI - GTK3&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config colors&lt;/em&gt;: themes&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config fonts&lt;/em&gt;: one font, one size&lt;/p&gt;
&lt;p&gt;There are people who love tiling, and want to see it in their
term-em. There are others who love tabs, or want their window manager to
tile, or hate all multitasking. It would be a boring software world if
everyone liked the same things.&lt;/p&gt;
&lt;h2
id="wezterm-a-gpu-accelerated-cross-platform-terminal-emulator-and-multiplexer-written-by-wez-and-implemented-in-rust"&gt;wezterm:
A GPU-accelerated cross-platform terminal emulator and multiplexer
written by &lt;span class="citation" data-cites="wez"&gt;@wez&lt;/span&gt; and
implemented in Rust&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Dev team&lt;/em&gt;: Wez&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Maturity&lt;/em&gt;: Active development but generally usable&lt;/p&gt;
&lt;p&gt;&lt;em&gt;License&lt;/em&gt;: MIT&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config method&lt;/em&gt;: Lua&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config colors&lt;/em&gt;: ships with over 700 themes&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config fonts&lt;/em&gt;: can be done with a minimum of one line of
config… possibly no maximum&lt;/p&gt;
&lt;p&gt;Obviously wezterm is the best of all possible terminal emulators,
because it is written in Rust. If you can imagine a feature short of
embedding emacs and a web browser, wezterm probably has it or will next
version. The price for this is rather a lot of memory use. On MacOS,
wezterm uses about twice as much memory as alacritty. On X11, about 30%
more.&lt;/p&gt;
&lt;h2
id="xfce4-terminal-a-lightweight-and-easy-to-use-terminal-emulator-application-with-many-advanced-features"&gt;xfce4-terminal:
a lightweight and easy to use terminal emulator application with many
advanced features&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Dev team&lt;/em&gt;: XFCE&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Maturity&lt;/em&gt;: devs pay attention, users make suggestions&lt;/p&gt;
&lt;p&gt;&lt;em&gt;License&lt;/em&gt;: GPL 2&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config method&lt;/em&gt;: GUI&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config colors&lt;/em&gt;: 16 colors&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config fonts&lt;/em&gt;: one font, one size&lt;/p&gt;
&lt;p&gt;I may be biased because I like XFCE4, but I have never used this
terminal and of the VTE wrappers, it seems the least offensive.&lt;/p&gt;
&lt;h2 id="xterm-a-terminal-emulator-for-the-x-window-system"&gt;xterm: a
terminal emulator for the X Window System&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Dev team&lt;/em&gt;: one dev&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Maturity&lt;/em&gt;: The Standard&lt;/p&gt;
&lt;p&gt;&lt;em&gt;License&lt;/em&gt;: MIT&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config method&lt;/em&gt;: command line and Xrdb&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config colors&lt;/em&gt;: I don’t think so.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config fonts&lt;/em&gt;: Yes, either on command line
(&lt;strong&gt;fn&lt;/strong&gt; for bitmap fonts, &lt;strong&gt;fa&lt;/strong&gt; for
adjustable TrueType/OpenType fonts). It will figure out italics and
bolds by itself, assuming versions are available.&lt;/p&gt;
&lt;p&gt;Obviously xterm is the best of all possible terminal emulators. It is
the oldest. If it has an error that has not been fixed, it is the
standard to which others aspire. It barely uses memory. It handles 256
color-mode just fine, by default. Why do you want 24-bit color anyway?
Doesn’t matter: xterm handles 24-bit color now. It handles fixed fonts,
it handles TrueType/OpenType fonts, and it supports Unicode, including
weird little cartoons of pizza. It doesn’t mess with OpenGL, so maybe it
isn’t quite as fast at something… but it has top scores for
key-to-screen latency.&lt;/p&gt;
&lt;h2 id="yakuake-a-drop-down-terminal-for-kde"&gt;yakuake: a drop-down
terminal for KDE&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Dev team&lt;/em&gt;: KDE&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Maturity&lt;/em&gt;: nah&lt;/p&gt;
&lt;p&gt;&lt;em&gt;License&lt;/em&gt;: GPL 2&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config method&lt;/em&gt;: didn’t bother, but I assume it’s GUI&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config colors&lt;/em&gt;: nope&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config fonts&lt;/em&gt;: uh-uh&lt;/p&gt;
&lt;p&gt;Segfaulted on start.&lt;/p&gt;
&lt;h2 id="zutty"&gt;zutty:&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Dev team&lt;/em&gt;: one dev&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Maturity&lt;/em&gt;: one dev is responsive&lt;/p&gt;
&lt;p&gt;&lt;em&gt;License&lt;/em&gt;: GPL 3&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config method&lt;/em&gt;: command line or Xrdb&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config colors&lt;/em&gt;: it knows about 256 colors which are the same
as xterm’s. The first 16 can be overwritten&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Config fonts&lt;/em&gt;: regular/bold/italic/bold-italic&lt;/p&gt;
&lt;p&gt;Obviously zutty is the best of all possible terminal emulators,
partially because it is written in C++. It uses a little less memory
than alacritty, is fast like all the GL term-ems, and has just one small
flaw, which might not be a flaw: if somebody sends you mail with one of
those bizarre Unicode glyphs like [:pizza:] or [:ice cream
indistinguishable from dog feces:], it just shows a nice square. Most
other Unicode things are expected to work, though.&lt;/p&gt;
&lt;h2 id="lets-make-some-recommendations."&gt;Let’s make some
recommendations.&lt;/h2&gt;
&lt;p&gt;If you’re on both MacOS and an X11 box regularly and you would like
complete consistency, your choice is between alacritty (if you want it
to be relatively simple) and wezterm (if you don’t). And, three people
who are not the author of kitty have written in to tell me that kitty
runs on both, so it’s quite likely that at least three people use kitty
besides the author.&lt;/p&gt;
&lt;p&gt;What’s best on MacOS? alacritty and iTerm2 and wezterm and Terminal
are all fine. I assume you are at least vaguely dissatisfied or else you
wouldn’t be reading this. Start with alacritty if you were feeling short
on speed. wezterm and iTerm2 are both competing for title of Most Shiny
Bells and Shrill Whistles, so those might be attractive to you. If you
want kitty, I assume you have a good reason.&lt;/p&gt;
&lt;p&gt;What’s best on X11 boxes? Here are the good choices, as I see
them:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;xterm&lt;/strong&gt; - don’t laugh. If your work happens through
screen or tmux, you don’t need the term-em to provide tabs. It renders
Unicode via OpenType fonts, in all the colors you can stand, sips memory
through a straw, and is still obnoxiously fast at just about everything.
Oh, and everything is compatible with xterm.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;zutty&lt;/strong&gt; - a modern take on xterm. You need a few more
features and you have an OpenGLes-capable video card? Here you are.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;alacritty&lt;/strong&gt; - a big step up in features without giving
up much speed. I suppose you want ligatures, too? OK.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;xfce4-terminal&lt;/strong&gt; - if you just want a term-em you can
configure through a menu. You probably don’t want this one, actually –
but it should be the one you recommend to people who are just starting
out.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;wezterm&lt;/strong&gt; - because you want the Shiny and you are
willing to search the docs until you find the prize. Eats the most
memory. You can afford it.&lt;/p&gt;
&lt;p&gt;-30-&lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="technical"/><category term="X11"/><category term="Linux"/></entry><entry><title>Relaxation script</title><link href="https://blog.randomstring.org/2025/09/24/hypnosis-script/" rel="alternate"/><published>2025-09-24T21:20:41-04:00</published><updated>2025-09-24T21:20:41-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2025-09-24:/2025/09/24/hypnosis-script/</id><summary type="html">
&lt;p&gt;No, this isn’t an usurper hijacking the blog.&lt;/p&gt;
&lt;p&gt;It just occurred to me that this was a good place to put it.&lt;/p&gt;
</summary><content type="html">
&lt;p&gt;No, this isn’t an usurper hijacking the blog.&lt;/p&gt;
&lt;p&gt;It just occurred to me that this was a good place to put it.&lt;/p&gt;

&lt;p&gt;Technique:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Slowly inhale to the count of 4&lt;/li&gt;
&lt;li&gt;Pause&lt;/li&gt;
&lt;li&gt;Slowly exhale to the count of 8, allowing the breath to drift down
into the chest, stomach, and through the body.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And now it’s time to relax. Just make yourself comfortable and allow
your eyelids to gently meet. With your mouth softly closed, take in a
deep breath and SLOWLY — allow that breath to drift d-o-w-n through your
entire body — bringing you comfort and peace. Before we start, perhaps
you’d like to take a moment to adjust your position and make yourself
totally comfortable. You can do that now.&lt;/p&gt;
&lt;p&gt;Let’s continue — Just let your breath flow down through your chest —
your stomach — your abdomen — your legs — and your ankles — and all the
way down to the soles of your feet. As you begin to feel the soft
tingling sensation of relaxation on the soles of your feet, you release
in both mind and body, and you give yourself permission to go deeper and
deeper.&lt;/p&gt;
&lt;p&gt;Each time that you practice this technique, you’ll find that you
immediately go more rapidly and more soundly into that wonderful place
where you will be aware only of how deeply relaxed and comfortable you
are. Each time, you will be able to achieve this wonderful, euphoric
state in a shorter amount of time. Each time you will be able to go
deeper and deeper into ultimate relaxation. Soon you’ll come to
thoroughly enjoy being in this state and you’ll find that you can bring
yourself into it at a moment’s notice.&lt;/p&gt;
&lt;p&gt;As you continue to drift deeper, return your awareness to your eyes
and feel how comfortable it is to just rest and allow your eyelids to
remain gently closed. With your awareness on your eyes, you discover
that all the little muscles in and around your eyes are becoming more
and more relaxed. And your eyelids seem to close more thoroughly. As
your eyelids close even more, any little worry lines around your eyes
begin to fade and disappear — And this same quality of relaxation drifts
down and around your cheeks — and your mouth — while all the rest of
your facial muscles release and become loose and limp — And you go
deeper — As you feel yourself drifting into total comfort, allow all
tension in your jaw to just melt down and away. Softly rest the tip of
your tongue behind your front upper teeth — and your lower jaw recedes
and becomes comfortably relaxed.&lt;/p&gt;
&lt;p&gt;A wonderful sense of well-being settles into every muscle, every
nerve, and every cell within your face — Your mind releases and your
body releases, and you go twice as deeply into relaxation. The
relaxation now drifts in and around your shoulders, as you give yourself
permission to allow your shoulders to droop into the frame of your body.
As your shoulders go limp and loose, the relaxation flows down through
you upper arms — your elbows — your lower arms — your wrist — and your
hands all become loose and limp. Your entire upper body becomes
perfectly relaxed. And you continue to go deeper.&lt;/p&gt;
&lt;p&gt;Now take in a deep breath and release all tension from your chest —
and from your heart — and from your stomach. And your breathing becomes
soft and rhythmic — you are beginning to reach a perfect resting level.
Feel your body respond to this slow, comfortable breathing, as your body
learns to release tension from each set of muscles from the very top of
your head and throughout the entire upper portion of your body. And your
breathing and your heartbeat slows to a perfect resting rate. Your
circulation flows smoothly and freely throughout your body, miraculously
bringing just the right amount of oxygen to every muscle, every nerve,
every cell, and every vital organ within your body.&lt;/p&gt;
&lt;p&gt;Thoughts of how your relaxation is benefiting you are reassuring, as
you give yourself permission to double your relaxation once more and go
even deeper. Your lower body now begins to become totally loose and limp
— as though you were a marionette with all the strings released. Totally
loose — totally limp. And you go deeper still. Now, your abdomen and
your lower pelvic area are totally relaxed.&lt;/p&gt;
&lt;p&gt;To assist you as you move even deeper into this perfectly relaxed
state, picture, in your mind’s eye, or your imagination, a magnificent
rainbow arched across the sky above you, each color vibrating in harmony
with the energy of the earth and the energy within your body. Allow your
body, as though it were a magnet, to absorb all of the wonderful
soothing and relaxing energy of the rainbow. Let the soft energizing
colors, one by one, flow through and around your entire body — bringing
you a sense of well-being and calm, drawing away all doubts, all fears,
and all tension — leaving you calm and at peace. And you go deeper — and
deeper, envisioning each color of the rainbow relaxation.&lt;/p&gt;
&lt;p&gt;Now you are ready to explore the healing, soothing colors of the
rainbow. Place your full awareness on your mind — and imagine yourself
on a beautiful mist of deep blue indigo and purple, a deep combination
that puts your mind at ease — Because the mind vibrates to the color of
purple — a sense of confidence accompanies the thoughts that begin to
fill your mind, and the mist of deep indigo teaches you to trust your
baby and your body to know exactly how to birth — and you release all
doubts concerning your birthing. As you breathe in the soft purple
relaxation, your mind is filled with assurance, confidence, and calm.
All of nature is in tune with indigo, and you are in tune with nature,
now more than ever.&lt;/p&gt;
&lt;p&gt;Go deeper now into ultimate relaxation, as you turn your mind and
body over to thoughts of gentle birthing — trusting that your mind and
body will each play out the perfect design of nature.&lt;/p&gt;
&lt;p&gt;Picture yourself now within a mist of soothing blue and feel your
throat and neck relax. The throat and neck vibrate to the color of blue,
so breathe in the blue mist of relaxation and feel all the tension in
the area of the neck and throat melt away. The energy of blue helps you
to find your voice and to learn to speak up and ask questions if ever it
is important for you to do so. Your voice and your throat muscles align
in perfect harmony with blue and with nature, and a wonderful calm and
confidence accompanies your thoughts.&lt;/p&gt;
&lt;p&gt;Now in your mind’s eye, envision yourself surrounded by a mist of
green — the soft green color of spring. As you breathe in the soft green
mist, the entire area of your chest, and particularly, your heart,
relaxes more deeply than you’ve ever relaxed before. Feeling energized
by the green mist, you open your heart and your life to feelings of
love. Because your heart and your chest vibrate to the energy of the
color green, you feel an even greater sense of well-being, as your life
combines with love . Green is the color of the earth. Filled with the
energy of a calm and loving heart, you free your body to blend in
perfect harmony with the energy of green and find yourself in harmony
with your instincts—so calm, so loving, so peaceful. And you resolve to
go even deeper.&lt;/p&gt;
&lt;p&gt;Your thoughts turn now to the color yellow. Yellow is the color that
vibrates in harmony with the region of your solar plexus and your
stomach, As you become aware of yellow, you also become aware of the
need to put only nutritional foods and substances into your stomach,
knowing that your body receives, absorbs, and grows in a healthy manner
because of the effects of healthy foods that you put into your stomach.
The energy surrounding your stomach and solar plexus teaches you that
when you become aware of the importance of choosing only safe,
nutritious foods, you help your body avoid many issues that stand in the
way of your health. These thoughts are calming as you relax even deeper
into the mist of yellow relaxation.&lt;/p&gt;
&lt;p&gt;Now turn your thoughts to the mist of orange energy that surrounds
your abdomen. The color orange vibrates in harmony with your abdomen,
the area that houses your reproductive organs. The energy of orange
drifts in and around your belly and, like a sponge, it absorbs calm and
peace, gently soothing you, and creating a veil of tranquility that
softly protects and nurtures you. Every muscle, every nerve and every
cell relaxes as the orange mist flows and drifts through your entire
abdomen and pelvis. Draw the orange mist into your body and know that
this energy is helping to prepare for a healthy life.&lt;/p&gt;
&lt;p&gt;Imagine yourself now on a soft, strawberry-colored mist — that gently
envelops your entire lower torso — taking away all tension, bathing you
in gentle relaxation. Let the soft strawberry mist of perfect relaxation
drift throughout all your lower back and spine — Red is the color of
love and of life. Its energy is that of truth. As the soft strawberry
mist drifts in and around your body it helps you to gain a stronger
sense of the important truths that you are learning. Breathe in the soft
strawberry red mist and go deeper and deeper, secure in your self-
knowledge. You are in tune with nature. All of nature is in tune with
the soft red of love and life. Breathe in the red mist that gently wraps
your body in a soft blanket of natural relaxation, and enjoy the deeper
relaxation and comfort that you drift into as your breathing
continues.&lt;/p&gt;
&lt;p&gt;And now, working from a perfect level of relaxation, see yourself
surrounded by a marvelous mist of all of the colors of the rainbow —
combining all the colors of the energies of life — surrounding you with
peace. Become aware of the feeling of confidence that you are developing
day by day as you embrace self-knowledge as your mind, your body and
your spirit all work in complete natural harmony. Let the reflected glow
of the colors of the rainbow permeate every part of your essence, while
you continue to grow in confidence and the belief that this will,
indeed, be a comfortable, easy sleep.&lt;/p&gt;
&lt;p&gt;It’s time now to end this session.&lt;/p&gt;
&lt;p&gt;You can now slip into a natural, full night’s sleep.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;To become fully alert and continue the activities of the day or
evening, simply begin to become aware of your surroundings and feel the
energy slowly coming back to your body—hands and fingers beginning to
move, legs and feet becoming energized. When you are ready, opening your
eyes—feeling healthier than ever before, and you are mentally alert,
physically energized and spiritually refreshed.&lt;/p&gt;
</content><category term="misc"/><category term="blog"/></entry><entry><title>I make ice cream</title><link href="https://blog.randomstring.org/2025/09/22/i-make-ice-cream/" rel="alternate"/><published>2025-09-22T17:47:54-04:00</published><updated>2025-09-22T17:47:54-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2025-09-22:/2025/09/22/i-make-ice-cream/</id><summary type="html">
&lt;p&gt;I am good at making ice cream.&lt;/p&gt;
&lt;p&gt;I am also rather experimental, so not everything is a big hit.&lt;/p&gt;
&lt;p&gt;These flavors work very well:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;multiple vanillas&lt;/li&gt;
&lt;li&gt;Irish whisky&lt;/li&gt;
&lt;li&gt;dark chocolate&lt;/li&gt;
&lt;li&gt;chocolate orange&lt;/li&gt;
&lt;li&gt;chocolate whisky&lt;/li&gt;
&lt;li&gt;Mexican chocolate&lt;/li&gt;
&lt;li&gt;multispicecream (allspice, nutmeg, cinnamon, cayenne)&lt;/li&gt;
&lt;li&gt;peanut butter&lt;/li&gt;
&lt;li&gt;peanut butter caramel&lt;/li&gt;
&lt;li&gt;peanut butter with cayenne&lt;/li&gt;
&lt;li&gt;peach&lt;/li&gt;
&lt;li&gt;peach with cayenne&lt;/li&gt;
&lt;li&gt;plum sorbet&lt;/li&gt;
&lt;li&gt;coconut&lt;/li&gt;
&lt;li&gt;cherry&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nutmeg is apparently popular in Granada, but it didn’t work for me or
anyone I tried it on. Could have been me.&lt;/p&gt;
&lt;p&gt;Ripe strawberries have better things to be doing.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;</summary><content type="html">
&lt;p&gt;I am good at making ice cream.&lt;/p&gt;
&lt;p&gt;I am also rather experimental, so not everything is a big hit.&lt;/p&gt;
&lt;p&gt;These flavors work very well:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;multiple vanillas&lt;/li&gt;
&lt;li&gt;Irish whisky&lt;/li&gt;
&lt;li&gt;dark chocolate&lt;/li&gt;
&lt;li&gt;chocolate orange&lt;/li&gt;
&lt;li&gt;chocolate whisky&lt;/li&gt;
&lt;li&gt;Mexican chocolate&lt;/li&gt;
&lt;li&gt;multispicecream (allspice, nutmeg, cinnamon, cayenne)&lt;/li&gt;
&lt;li&gt;peanut butter&lt;/li&gt;
&lt;li&gt;peanut butter caramel&lt;/li&gt;
&lt;li&gt;peanut butter with cayenne&lt;/li&gt;
&lt;li&gt;peach&lt;/li&gt;
&lt;li&gt;peach with cayenne&lt;/li&gt;
&lt;li&gt;plum sorbet&lt;/li&gt;
&lt;li&gt;coconut&lt;/li&gt;
&lt;li&gt;cherry&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nutmeg is apparently popular in Granada, but it didn’t work for me or
anyone I tried it on. Could have been me.&lt;/p&gt;
&lt;p&gt;Ripe strawberries have better things to be doing.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="food"/><category term="cooking"/></entry><entry><title>audio in the house reviewed</title><link href="https://blog.randomstring.org/2025/07/15/audio-in-the-house-reviewed/" rel="alternate"/><published>2025-07-15T11:17:29-04:00</published><updated>2025-07-15T11:17:29-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2025-07-15:/2025/07/15/audio-in-the-house-reviewed/</id><summary type="html">
&lt;p&gt;This is how I’m dealing with music playback in the house as of July
2025. My goals are reasonably high-quality music at a long-term
reasonable price, while avoiding paid streaming services.
&lt;/p&gt;</summary><content type="html">
&lt;p&gt;This is how I’m dealing with music playback in the house as of July
2025. My goals are reasonably high-quality music at a long-term
reasonable price, while avoiding paid streaming services.
&lt;/p&gt;
&lt;p&gt;First up, storage. Music (and local video) is stored on the media
center box, a Ryzen 3600 (6c/12t) PC with 48GB RAM and 2x3TB disks in
RAID1 and 2x8TB disks in ZFS RAID1. All the machines I’m going to
mention are running Debian Stable. Music is largely ripped from CDs at
320Kb/s MP3 or FLAC; some is purchased digitally if available in those
formats.&lt;/p&gt;
&lt;p&gt;The media center exports a music filesystem via read-only NFS, and
runs Owntone, a web-interface music player/server which can play to
Chromecast Audio, Apple Airplay, and anything which can play an MP3
stream – Firefox and Chrome certainly can. Owntone transcodes to 320Kb/s
MP3 as necessary.&lt;/p&gt;
&lt;p&gt;Hooked to this via HDMI is an Integra 3.4 home theater receiver,
which feeds main speakers, center, surround, and front Atmos speakers.
It has measured room equalization. Main speakers are PSB Century 800i
(2.5 way towers, 1” dome over 2x 8” woofers, front ported, ports
stuffed) sitting on Monoprice 12” powered woofers getting the same
signal. After equalization, this can go down to 20Hz at 90dB (1m). There
is also a PSB Alpha Subsonic 5 subwoofer for movie LFE. All of these
things were bought new but with fairly large sale discounts. The
surround speakers are PSB Alpha A/Vs, which are quite nice bookshelf
speakers in their own right.&lt;/p&gt;
&lt;p&gt;In the living room is a Wiim Mini feeding Kali LP8v2 powered
monitors. The Wiim Mini is under $100 new and now has decent built-in
room calibration. It serves as an output for the Owntone system.&lt;/p&gt;
&lt;p&gt;In the bedroom is a Wiim Mini feeding JBL LSR305x powered monitors.
Room calibration is a big win. Also used primarily through Owntone.&lt;/p&gt;
&lt;p&gt;In the office, my desktop is connected to a Topping MX3s ($199) via
USB. The MX3s is a tiny box – about one quarter of a standard box of
tissues – with a USB DAC, a headphone amplifier, and a 50W (4 Ohm)
stereo amplifier. Yes, for real speakers. This is basically the same
power output as the NAD 712, which is merely six times the weight and
half the power efficiency. The headphone jack is 1/8” and does not
automatically disconnect speakers, but the front button allows selection
of headphones, speakers, or both. The desktop runs equalization software
(PulseEffects on top of PipeWire) that corrects each output, though it
does have to be selected whenever I change outputs. The Paradigm Monitor
3 Mark III (not the MiniMonitors) were purchased used from a guy driving
a white van, for $200 the pair – an excellent value.&lt;/p&gt;
&lt;p&gt;The usual headphones are Superlux 688b, Truthear Zeros, TRN V90s, or
Sennheiser HD280Pros.&lt;/p&gt;
&lt;p&gt;Finally, the dining room has a computer hooked up to a TV and
Cambridge SoundWorks PCWorks 2.1 system. PCWorks is (was) an amazing
product: Two 2” full-range speakers in little plastic cubes and a 4”
mid-woofer in a bizarre plastic bandpass box along with a 9W amplifier.
It is absolutely an upgrade over any TV’s built-in sound, nicely
adequate for background music, and ridiculously high value-to-price at
$50 or so.&lt;/p&gt;
&lt;p&gt;Currently unused but known to be functional:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a Yamaha RX-V675 7.1 channel receiver in excellent condition&lt;/li&gt;
&lt;li&gt;a SMSL Sanskrit 10th MkII DAC&lt;/li&gt;
&lt;li&gt;an Apple USB-C DAC&lt;/li&gt;
&lt;li&gt;a Yamaha RXV990 receiver (pre-HDMI era) with useful 2.1 capabilities
and mediocre 5.1&lt;/li&gt;
&lt;li&gt;a NAD T750 receiver (pre-HDMI) with similar capabilities&lt;/li&gt;
&lt;li&gt;a NAD 712 stereo receiver&lt;/li&gt;
&lt;li&gt;2 Paradigm Esprit v2 narrow towers&lt;/li&gt;
&lt;li&gt;2 Paradigm MiniMonitor Mark 3&lt;/li&gt;
&lt;li&gt;2 PSB Century 400i bookshelf speakers&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I expect some version of these to be gifted to the kids when they
move out permanently.&lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="technology"/><category term="stereo"/><category term="audio"/><category term="home theater"/></entry><entry><title>Debian upgrade policies</title><link href="https://blog.randomstring.org/2025/05/30/debian-upgrade-policies/" rel="alternate"/><published>2025-05-30T08:22:47-04:00</published><updated>2025-05-30T08:22:47-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2025-05-30:/2025/05/30/debian-upgrade-policies/</id><summary type="html">
&lt;p&gt;Since you’re interested in not breaking things, you should be running
Debian Stable.&lt;/p&gt;
&lt;p&gt;Debian makes several kinds of package changes available:&lt;/p&gt;
</summary><content type="html">
&lt;p&gt;Since you’re interested in not breaking things, you should be running
Debian Stable.&lt;/p&gt;
&lt;p&gt;Debian makes several kinds of package changes available:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;security fixes
general bug fixes (including security fixes)
upgrades to a new major Stable (e.g. 12.x =&amp;gt; 13.0)
backports from testing of selected packages 
&amp;quot;volatile&amp;quot; updates to a few packages that some people want much faster, even if they break things&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You control these by the wording of your
&lt;code&gt;/etc/apt/sources.list&lt;/code&gt; (or files in
&lt;code&gt;/etc/apt/sources.list.d/&lt;/code&gt;)&lt;/p&gt;
&lt;p&gt;If you list repos with the name “stable”, they will be automatically
changed over when a major Stable change occurs – 12.x =&amp;gt; 13.0. But if
you list them with the codename for stable (bookworm, currently) they
will not.&lt;/p&gt;
&lt;p&gt;If you don’t list a repo you won’t get updates from it.&lt;/p&gt;
&lt;p&gt;The vast majority of people I know running Debian stable use the
codename so that they can decide when they want to do the major
upgrades. Most of them also avoid backports unless they have a specific
need.&lt;/p&gt;
&lt;p&gt;The package &lt;code&gt;apticron&lt;/code&gt;, if installed, will reload the list
of available packages from all repos in your
&lt;code&gt;sources.list{,.d/}&lt;/code&gt; nightly, and let you know via email if
anything is ready – but *not install them. That remains manual.&lt;/p&gt;
&lt;p&gt;The package &lt;code&gt;unattended-upgrades&lt;/code&gt;, by contrast, does the
apticron thing and then automatically installs upgrades to packages that
you have previously installed, plus any required dependencies, which may
include new packages. You probably don’t want that.&lt;/p&gt;
&lt;p&gt;There is also a complex system called “pinning” to allow preferences
for individual package versions or repos, but most people who think this
is a good idea are wrong. If you actually need it, I have a cheatsheet
on the blog.&lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="debian"/><category term="technology"/><category term="unix"/></entry><entry><title>complexity considered harmful</title><link href="https://blog.randomstring.org/2025/02/14/complexity-considered-harmful/" rel="alternate"/><published>2025-02-14T07:13:43-05:00</published><updated>2025-02-14T07:13:43-05:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2025-02-14:/2025/02/14/complexity-considered-harmful/</id><summary type="html">
&lt;p&gt;Every complex problem is a dependency management problem.&lt;/p&gt;
&lt;p&gt;The only robust solutions are the simplest things which can work,
created by people who fully understand the problem and have to work with
the system regularly.&lt;/p&gt;
&lt;p&gt;But the fastest temporary fix for any specific problem is to add a
complex layer without fixing the underlying problem.&lt;/p&gt;
&lt;p&gt;And every layer reduces your ability to understand the problem.&lt;/p&gt;
&lt;p&gt;Every complex solution is a dependency management problem.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;</summary><content type="html">
&lt;p&gt;Every complex problem is a dependency management problem.&lt;/p&gt;
&lt;p&gt;The only robust solutions are the simplest things which can work,
created by people who fully understand the problem and have to work with
the system regularly.&lt;/p&gt;
&lt;p&gt;But the fastest temporary fix for any specific problem is to add a
complex layer without fixing the underlying problem.&lt;/p&gt;
&lt;p&gt;And every layer reduces your ability to understand the problem.&lt;/p&gt;
&lt;p&gt;Every complex solution is a dependency management problem.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="philosophy"/><category term="systems"/></entry><entry><title>assumptions about certbot</title><link href="https://blog.randomstring.org/2025/02/10/assumptions-about-certbot/" rel="alternate"/><published>2025-02-10T21:12:41-05:00</published><updated>2025-02-10T21:12:41-05:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2025-02-10:/2025/02/10/assumptions-about-certbot/</id><summary type="html">
&lt;p&gt;I had assumed that when certbot does an http authentication of a
domain name as part of getting Let’s Encrypt to issue or renew a cert,
it would do so by touching the appropriately named file in
&lt;code&gt;http://domain.name.tld/.well-known/acme-challenge&lt;/code&gt;, waiting
for the challenge to resolve, and then deleting it.&lt;/p&gt;
&lt;p&gt;And sure, that’s what it does with &lt;code&gt;--webroot&lt;/code&gt;. And I
assumed that if you passed it &lt;code&gt;--nginx&lt;/code&gt;, certbot would use
that to look for the right config to parse to get the right domain to
directory mapping, and then reload nginx afterwards.&lt;/p&gt;
&lt;p&gt;It does not do that.&lt;/p&gt;
&lt;p&gt;Instead, it inserts new config into nginx to just return a 200
success code for the challenge name as though it were a 0-length file on
disk. Nothing hits disk in the .well-known directory.&lt;/p&gt;
&lt;p&gt;It turns out that this can backfire in a number of very hard to debug
ways.&lt;/p&gt;
&lt;p&gt;So, if you are having an authentication problem with certbot, try
passing &lt;code&gt;--webroot&lt;/code&gt; and the appropriate &lt;code&gt;-w&lt;/code&gt;
directory.&lt;/p&gt;
&lt;p&gt;And if you’re writing some bit of utility code, howzabout not being
so clever. Do the expected things. &lt;/p&gt;</summary><content type="html">
&lt;p&gt;I had assumed that when certbot does an http authentication of a
domain name as part of getting Let’s Encrypt to issue or renew a cert,
it would do so by touching the appropriately named file in
&lt;code&gt;http://domain.name.tld/.well-known/acme-challenge&lt;/code&gt;, waiting
for the challenge to resolve, and then deleting it.&lt;/p&gt;
&lt;p&gt;And sure, that’s what it does with &lt;code&gt;--webroot&lt;/code&gt;. And I
assumed that if you passed it &lt;code&gt;--nginx&lt;/code&gt;, certbot would use
that to look for the right config to parse to get the right domain to
directory mapping, and then reload nginx afterwards.&lt;/p&gt;
&lt;p&gt;It does not do that.&lt;/p&gt;
&lt;p&gt;Instead, it inserts new config into nginx to just return a 200
success code for the challenge name as though it were a 0-length file on
disk. Nothing hits disk in the .well-known directory.&lt;/p&gt;
&lt;p&gt;It turns out that this can backfire in a number of very hard to debug
ways.&lt;/p&gt;
&lt;p&gt;So, if you are having an authentication problem with certbot, try
passing &lt;code&gt;--webroot&lt;/code&gt; and the appropriate &lt;code&gt;-w&lt;/code&gt;
directory.&lt;/p&gt;
&lt;p&gt;And if you’re writing some bit of utility code, howzabout not being
so clever. Do the expected things. &lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="security"/><category term="software"/></entry><entry><title>preparedness</title><link href="https://blog.randomstring.org/2025/02/05/preparedness/" rel="alternate"/><published>2025-02-05T06:44:10-05:00</published><updated>2025-02-05T06:44:10-05:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2025-02-05:/2025/02/05/preparedness/</id><summary type="html">
&lt;p&gt;When 3 of 4 disks in a ZFS pool die at the same time, it is not the
disks.&lt;/p&gt;
&lt;p&gt;It’s the controller that is feeding them.&lt;/p&gt;
&lt;p&gt;(Note for later: move a disk to a different controller. This could
have been survived completely if half of each mirror were on different
controllers.)&lt;/p&gt;
&lt;p&gt;What do you call a household with a backup SAS/SATA controller
stashed in the box marked “more disk stuff”?&lt;/p&gt;
&lt;p&gt;Mine.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;</summary><content type="html">
&lt;p&gt;When 3 of 4 disks in a ZFS pool die at the same time, it is not the
disks.&lt;/p&gt;
&lt;p&gt;It’s the controller that is feeding them.&lt;/p&gt;
&lt;p&gt;(Note for later: move a disk to a different controller. This could
have been survived completely if half of each mirror were on different
controllers.)&lt;/p&gt;
&lt;p&gt;What do you call a household with a backup SAS/SATA controller
stashed in the box marked “more disk stuff”?&lt;/p&gt;
&lt;p&gt;Mine.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;
</content><category term="misc"/><category term="zfs"/></entry><entry><title>academic data management disclosures</title><link href="https://blog.randomstring.org/2025/01/18/academic-data-management-disclosures/" rel="alternate"/><published>2025-01-18T11:17:09-05:00</published><updated>2025-01-18T11:17:09-05:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2025-01-18:/2025/01/18/academic-data-management-disclosures/</id><summary type="html">
&lt;p&gt;Hey academics!&lt;/p&gt;
&lt;p&gt;Your papers, thesis, dissertation, project – whatever – is based on
data, right? No data, nothing to talk about.&lt;/p&gt;
&lt;p&gt;So every paper should have a data management section. It should be
quite straightforward and easy to fill out, assuming that you were doing
things well to begin with. (Hint: make it easy to fill out.)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Data was stored prior to processing at this facility with the
following access restrictions and encryption.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Data was anonymized / is still live / was cleared by the IRB as
not sensitive. Total data is X records.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Data is archived at the university at this URL. Access is open /
requires IRB clearance.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Processing was done at these facilities. Intermediate results are
archived / were securely deleted. Programs used were X (version), Y
(version)… with the following licenses.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No new code or configs were written for this dissertation /
source code, executable artifacts and configs are archived at the
university at this URL&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;-30- &lt;/p&gt;</summary><content type="html">
&lt;p&gt;Hey academics!&lt;/p&gt;
&lt;p&gt;Your papers, thesis, dissertation, project – whatever – is based on
data, right? No data, nothing to talk about.&lt;/p&gt;
&lt;p&gt;So every paper should have a data management section. It should be
quite straightforward and easy to fill out, assuming that you were doing
things well to begin with. (Hint: make it easy to fill out.)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Data was stored prior to processing at this facility with the
following access restrictions and encryption.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Data was anonymized / is still live / was cleared by the IRB as
not sensitive. Total data is X records.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Data is archived at the university at this URL. Access is open /
requires IRB clearance.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Processing was done at these facilities. Intermediate results are
archived / were securely deleted. Programs used were X (version), Y
(version)… with the following licenses.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No new code or configs were written for this dissertation /
source code, executable artifacts and configs are archived at the
university at this URL&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;-30- &lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="technology"/><category term="data"/><category term="security"/><category term="academics"/></entry><entry><title>recipe for high quality portable audio playback</title><link href="https://blog.randomstring.org/2025/01/01/recipe-for-high-quality-portable-audio-playback/" rel="alternate"/><published>2025-01-01T15:35:02-05:00</published><updated>2025-01-01T15:35:02-05:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2025-01-01:/2025/01/01/recipe-for-high-quality-portable-audio-playback/</id><summary type="html">
&lt;p&gt;Start with an Android phone with sufficient storage capability and a
decent DAC/headphone amplifier. Built-in is great; otherwise, find
something that works and doesn’t suck up too much power.&lt;/p&gt;
&lt;p&gt;Add IEMs of choice, for less than $50, or cans that are reasonably
efficient. It stops being so portable if you have 800g cans and a 500g
battery-powered amp to drive them.&lt;/p&gt;
&lt;p&gt;Install F-Droid, and use that to install Vanilla Music and
RootlessJamesDSP.&lt;/p&gt;
&lt;p&gt;Configure Vanilla Music to point to your music data.&lt;/p&gt;
&lt;p&gt;Use ADB to enable RootlessJamesDSP (it needs 2-3 android system
permissions).&lt;/p&gt;
&lt;p&gt;Download convolution equalization for your IEMs or cans.
https://autoeq.app is an acceptable and very convenient source. If
Oratory1990 covers your equipment (
https://old.reddit.com/r/oratory1990/wiki/index/list_of_presets ) then
choose that, first.&lt;/p&gt;
&lt;p&gt;Apply in RootlessJamesDSP.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;</summary><content type="html">
&lt;p&gt;Start with an Android phone with sufficient storage capability and a
decent DAC/headphone amplifier. Built-in is great; otherwise, find
something that works and doesn’t suck up too much power.&lt;/p&gt;
&lt;p&gt;Add IEMs of choice, for less than $50, or cans that are reasonably
efficient. It stops being so portable if you have 800g cans and a 500g
battery-powered amp to drive them.&lt;/p&gt;
&lt;p&gt;Install F-Droid, and use that to install Vanilla Music and
RootlessJamesDSP.&lt;/p&gt;
&lt;p&gt;Configure Vanilla Music to point to your music data.&lt;/p&gt;
&lt;p&gt;Use ADB to enable RootlessJamesDSP (it needs 2-3 android system
permissions).&lt;/p&gt;
&lt;p&gt;Download convolution equalization for your IEMs or cans.
https://autoeq.app is an acceptable and very convenient source. If
Oratory1990 covers your equipment (
https://old.reddit.com/r/oratory1990/wiki/index/list_of_presets ) then
choose that, first.&lt;/p&gt;
&lt;p&gt;Apply in RootlessJamesDSP.&lt;/p&gt;
&lt;p&gt;Enjoy.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="technology"/><category term="audio"/><category term="sound"/><category term="equalization"/></entry><entry><title>yay for helpful error message</title><link href="https://blog.randomstring.org/2024/12/11/yay-for-helpful-error-message/" rel="alternate"/><published>2024-12-11T13:12:28-05:00</published><updated>2024-12-11T13:12:28-05:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2024-12-11:/2024/12/11/yay-for-helpful-error-message/</id><summary type="html">
&lt;p&gt;When the Let’s Encrypt certbot says it failed and it was probably a
firewall issue – yes, it’s probably a firewall issue. On your side. On
port 80.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;</summary><content type="html">
&lt;p&gt;When the Let’s Encrypt certbot says it failed and it was probably a
firewall issue – yes, it’s probably a firewall issue. On your side. On
port 80.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="technology"/><category term="security"/><category term="sysadmin"/></entry><entry><title>hey IT you need a wiki</title><link href="https://blog.randomstring.org/2024/11/27/hey-it-you-need-a-wiki/" rel="alternate"/><published>2024-11-27T14:43:36-05:00</published><updated>2024-11-27T14:43:36-05:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2024-11-27:/2024/11/27/hey-it-you-need-a-wiki/</id><summary type="html">
&lt;p&gt;Specifically, a wiki which uses a non-database backend. I like
Dokuwiki for this, but anything which basically saves in text files is
fine.&lt;/p&gt;
&lt;p&gt;(Why? Because you don’t need to bring up the database and/or fix the
web server to grep for the page you need right now.) …
&lt;/p&gt;</summary><content type="html">
&lt;p&gt;Specifically, a wiki which uses a non-database backend. I like
Dokuwiki for this, but anything which basically saves in text files is
fine.&lt;/p&gt;
&lt;p&gt;(Why? Because you don’t need to bring up the database and/or fix the
web server to grep for the page you need right now.) …
&lt;/p&gt;
&lt;p&gt;Every document should start with “here’s what you need to know at
0200”, continue with “here are our typical uses” and finish with “this
is the history of this tool here”.&lt;/p&gt;
&lt;p&gt;Whenever possible, quote exact error messages (so they are
greppable!) and write responses to them. If you are recommending a
course of action, write it in commands that are easy to cut and paste –
one per line.&lt;/p&gt;
&lt;p&gt;Then make sure you have an automatically sync’d copy of it at every
major location.&lt;/p&gt;
&lt;p&gt;Any time someone discovers that it’s out of date, that needs to go in
your ticket system and be addressed the day after the incident. It does
not need to be the responsibility of the person discovering the
discrepancy. Don’t make people do extra work when they find mistakes,
they will gloss over them.&lt;/p&gt;
&lt;p&gt;This is also where general culture facts go – conventions on IP
addresses, names, vendor contacts, how you build racks, checklists for
new employees and suspension of ex-employees, etc.&lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="technology"/><category term="philosophy"/></entry><entry><title>authoritarianism is bad, antiauthoritarianism is good</title><link href="https://blog.randomstring.org/2024/11/21/authoritarianism-is-bad-antiauthoritarianism-is-good/" rel="alternate"/><published>2024-11-21T07:41:51-05:00</published><updated>2024-11-21T07:41:51-05:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2024-11-21:/2024/11/21/authoritarianism-is-bad-antiauthoritarianism-is-good/</id><summary type="html">
&lt;p&gt;There is a new software technology. It has a bunch of boosters. There
are some companies formed around the idea that they will make a lot of
money by providing the technology. Then they go out and try to convince
other people that they should use the technology – and by extension, pay
them for it. If not them, then one of their competitors, but preferably
them.&lt;/p&gt;
&lt;p&gt;That’s marketing…&lt;/p&gt;
</summary><content type="html">
&lt;p&gt;There is a new software technology. It has a bunch of boosters. There
are some companies formed around the idea that they will make a lot of
money by providing the technology. Then they go out and try to convince
other people that they should use the technology – and by extension, pay
them for it. If not them, then one of their competitors, but preferably
them.&lt;/p&gt;
&lt;p&gt;That’s marketing…&lt;/p&gt;

&lt;p&gt;Marketing and advertising have a range of options available. The
ethically best methods are effectively teasers for education:
micro-lessons in what the product or service can do for you. Further
lessons in why this is good. And then, product differentiation: why this
one is better, faster or cheaper than the others. Technical products
often get published reviews and benchmarks, which are a mixture of
subjective and objective analysis. Sometimes they even measure things
relevant to what you want to know!&lt;/p&gt;
&lt;p&gt;The least ethical methods are lies. Things which aren’t true, or are
deliberately deceptive, or deceptively irrelevant. Did you know caffeine
is an aphrodisiac? It’s true: people are much more likely to want
amorous activity when they are awake.&lt;/p&gt;
&lt;p&gt;Somewhere in between are the social engineering methods. The big ones
are FOMO - fear of missing out, that everyone else is getting benefits
that you won’t - and FUD - fear/uncertainty/doubt instilled about the
competitive products.&lt;/p&gt;
&lt;p&gt;Testimonials can serve as social proof (that’s not the same as
rational proof) that a given technology provided benefits to a
particular person or organization. Or they can serve as social proof
that other people are getting things that you are not.&lt;/p&gt;
&lt;p&gt;If you see a new technology marketed mostly via FOMO, the odds are
very good that it is fraudulent.&lt;/p&gt;
&lt;p&gt;Blockchain (the technology) turned out to be entirely FOMO: nobody
has found a legitimate use case for which blockchain is the best answer.
Cryptocurrencies turn out to be good for gambling, fraud and similar
borderline or outright illegal activities. All other proposed uses
suffer from lack of an oracle relating reality to representation or by
being more efficiently implemented by a traditional authenticated
database.&lt;/p&gt;
&lt;p&gt;Object-oriented programming turns out to have significant benefits in
coordinating software built by large teams of programmers who don’t or
can’t communicate efficiently. Since that describes a lot of large
corporate software efforts, OOP has succeeded in the marketplace.&lt;/p&gt;
&lt;p&gt;As of late 2024, LLMs and similar machine learning techniques – which
have been successfully renamed by marketing as “AI”, despite not being
anywhere near our cultural expectations of AI – have found niche success
in translation and pattern continuance. Everything else that they are
proposed for – and they are proposed for everything – is unsuccessful.
The reasons are various: expense, speed, (in)accuracy, and lack of
capability all show up regularly. In the normal course of events, we
would expect LLMs to remain a niche technique, settling into a place in
the programming toolkit not unlike regular expression pattern matching
or declarative programming languages.&lt;/p&gt;
&lt;p&gt;Unfortunately we are not in normal times, and LLMs are being marketed
primarily by FOMO tactics: if you don’t adopt “AI” tech, you cannot be
competitive with those who do. Nothing backs this argument up.&lt;/p&gt;
&lt;p&gt;It may not be criminal, but it’s certainly not a good move in the
majority of circumstances.&lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="politics"/><category term="techology"/></entry><entry><title>llms again, sorry</title><link href="https://blog.randomstring.org/2024/10/12/llms-again-sorry/" rel="alternate"/><published>2024-10-12T07:54:04-04:00</published><updated>2024-10-12T07:54:04-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2024-10-12:/2024/10/12/llms-again-sorry/</id><summary type="html">
&lt;p&gt;New paper: LLMs don’t do formal reasoning.&lt;/p&gt;
&lt;p&gt;Well, of course.&lt;/p&gt;
&lt;p&gt;LLMs don’t do informal reasoning, either.&lt;/p&gt;
&lt;p&gt;Humans are great at pattern recognition. We even recognize faces in
clouds and tree trunks. We recognize wheelbarrows, bears and crabs and
archers in the stars. We make things that have meaning, and we
communicate through speech and text and art.&lt;/p&gt;
&lt;p&gt;LLMs are great pattern-generators. They are extremely well-tuned to
make patterns that look like they might have meaning. A human trying to
communicate may be bad at it, but they have an underlying model of the
world that they are referencing and updating. An LLM is not trying to
communicate anything. An LLM has a model of language, not a model of the
world.&lt;/p&gt;
&lt;p&gt;The map is not the territory. All models are wrong, but some are
useful.&lt;/p&gt;
&lt;p&gt;The situations in which it is reasonable to use an LLM are exactly
the situations in which it is reasonable to roll some dice and use that
to read the table of random monster encounters; to pull a card from an
Oblique Strategies deck; to twirl the knobs on the synth and see if you
can get a cool sound. In years past, you could type in a good list of
keywords to Google and hit the I’m Feeling Lucky button.&lt;/p&gt;
&lt;p&gt;Attempts to use LLMs for more than this fail. Often they do not fail
in such an obvious way that the results are immediately discarded, which
is where most of the danger resides.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;</summary><content type="html">
&lt;p&gt;New paper: LLMs don’t do formal reasoning.&lt;/p&gt;
&lt;p&gt;Well, of course.&lt;/p&gt;
&lt;p&gt;LLMs don’t do informal reasoning, either.&lt;/p&gt;
&lt;p&gt;Humans are great at pattern recognition. We even recognize faces in
clouds and tree trunks. We recognize wheelbarrows, bears and crabs and
archers in the stars. We make things that have meaning, and we
communicate through speech and text and art.&lt;/p&gt;
&lt;p&gt;LLMs are great pattern-generators. They are extremely well-tuned to
make patterns that look like they might have meaning. A human trying to
communicate may be bad at it, but they have an underlying model of the
world that they are referencing and updating. An LLM is not trying to
communicate anything. An LLM has a model of language, not a model of the
world.&lt;/p&gt;
&lt;p&gt;The map is not the territory. All models are wrong, but some are
useful.&lt;/p&gt;
&lt;p&gt;The situations in which it is reasonable to use an LLM are exactly
the situations in which it is reasonable to roll some dice and use that
to read the table of random monster encounters; to pull a card from an
Oblique Strategies deck; to twirl the knobs on the synth and see if you
can get a cool sound. In years past, you could type in a good list of
keywords to Google and hit the I’m Feeling Lucky button.&lt;/p&gt;
&lt;p&gt;Attempts to use LLMs for more than this fail. Often they do not fail
in such an obvious way that the results are immediately discarded, which
is where most of the danger resides.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="technology"/><category term="llm"/><category term="ai"/><category term="ethics"/><category term="psychology"/></entry><entry><title>fun fact about linux routing</title><link href="https://blog.randomstring.org/2024/09/25/fun-fact-about-linux-routing/" rel="alternate"/><published>2024-09-25T06:13:17-04:00</published><updated>2024-09-25T06:13:17-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2024-09-25:/2024/09/25/fun-fact-about-linux-routing/</id><summary type="html">
&lt;p&gt;The Linux kernel doesn’t consider routing to be a separate process,
so it can eat lots of CPU capacity and still be at a load average of
0.&lt;/p&gt;
&lt;p&gt;Load averages are calculated as the number of running and
uninterruptible processes, sampled every 5 seconds, and then displayed
as an exponentially decaying average, optionally per core (or SMT
“core”). A process actively computing stuff is counted the same as a
process that has an outstanding I/O request, which can be a source of
excitement.&lt;/p&gt;
&lt;p&gt;The act of routing packets (as opposed to working on a routing
protocol exchange) is handled by the kernel, so it does not have a
countable process identifier, so it does not count for load
averages.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;</summary><content type="html">
&lt;p&gt;The Linux kernel doesn’t consider routing to be a separate process,
so it can eat lots of CPU capacity and still be at a load average of
0.&lt;/p&gt;
&lt;p&gt;Load averages are calculated as the number of running and
uninterruptible processes, sampled every 5 seconds, and then displayed
as an exponentially decaying average, optionally per core (or SMT
“core”). A process actively computing stuff is counted the same as a
process that has an outstanding I/O request, which can be a source of
excitement.&lt;/p&gt;
&lt;p&gt;The act of routing packets (as opposed to working on a routing
protocol exchange) is handled by the kernel, so it does not have a
countable process identifier, so it does not count for load
averages.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="linux"/><category term="routing"/></entry><entry><title>reminder to self about LE SSL certs</title><link href="https://blog.randomstring.org/2024/09/24/reminder-to-self-about-le-ssl-certs/" rel="alternate"/><published>2024-09-24T09:23:25-04:00</published><updated>2024-09-24T09:23:25-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2024-09-24:/2024/09/24/reminder-to-self-about-le-ssl-certs/</id><summary type="html">
&lt;p&gt;Self: you have managed to make some cert renewals dependent on IPv6
connectivity through to the main server. This is not bad, but it is
odd.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;</summary><content type="html">
&lt;p&gt;Self: you have managed to make some cert renewals dependent on IPv6
connectivity through to the main server. This is not bad, but it is
odd.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="reminder to self"/><category term="let's encrypt"/></entry><entry><title>your company is probably not Agile and should not be</title><link href="https://blog.randomstring.org/2024/09/24/your-company-is-probably-not-agile-and-should-not-be/" rel="alternate"/><published>2024-09-24T09:08:20-04:00</published><updated>2024-09-24T09:08:20-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2024-09-24:/2024/09/24/your-company-is-probably-not-agile-and-should-not-be/</id><summary type="html">
&lt;p&gt;Many organizations claim to be following Agile in some way. The vast
majority are wrong, and most of them should not be Agile anyway.&lt;/p&gt;
&lt;p&gt;You will recall that the Agile Manifesto, in total, is this set of
four guidelines and an interpretation:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Individuals and interactions over processes and tools&lt;/li&gt;
&lt;li&gt;Working software over comprehensive documentation&lt;/li&gt;
&lt;li&gt;Customer collaboration over contract negotiation&lt;/li&gt;
&lt;li&gt;Responding to change over following a plan&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is, while there is value in the items on the right, we value the
items on the left more.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That’s a recipe for making certain customers happy with your
perpetual engagement. But:&lt;/p&gt;
</summary><content type="html">
&lt;p&gt;Many organizations claim to be following Agile in some way. The vast
majority are wrong, and most of them should not be Agile anyway.&lt;/p&gt;
&lt;p&gt;You will recall that the Agile Manifesto, in total, is this set of
four guidelines and an interpretation:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Individuals and interactions over processes and tools&lt;/li&gt;
&lt;li&gt;Working software over comprehensive documentation&lt;/li&gt;
&lt;li&gt;Customer collaboration over contract negotiation&lt;/li&gt;
&lt;li&gt;Responding to change over following a plan&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is, while there is value in the items on the right, we value the
items on the left more.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That’s a recipe for making certain customers happy with your
perpetual engagement. But:&lt;/p&gt;

&lt;p&gt;Does your client have regulators, auditors or any other kind of
external supervision on their products and services? If so, “Customer
collaboration over contract negotiation” is a big problem. You can’t be
successful – and therefore they cannot be successful – if the contract
doesn’t explicitly spell out the restrictions and requirements.&lt;/p&gt;
&lt;p&gt;Agile is a great approach to a marketing website – again, as long as
the content passes any necessary compliance reviews – but a terrible way
to run an industrial process.&lt;/p&gt;
&lt;p&gt;Is your client committed to 24/7 operations, or facing a huge cost
for unexpected downtime? “Individuals and interactions over processes
and tools” may not be right for you. “Responding to change over
following a plan” might not be the right approach, either.&lt;/p&gt;
&lt;p&gt;Hrm. I’ve been blogging for ten years now. Maybe I should get some
sleep.&lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="philosophy"/><category term="technology"/><category term="agile"/></entry><entry><title>security analogy</title><link href="https://blog.randomstring.org/2024/07/21/security-analogy/" rel="alternate"/><published>2024-07-21T07:50:05-04:00</published><updated>2024-07-21T07:50:05-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2024-07-21:/2024/07/21/security-analogy/</id><summary type="html">
&lt;p&gt;Repeat the following metaphor until you internalize it:&lt;/p&gt;
&lt;p&gt;Security is the skin of an organization, IT infrastructure is the
bones.&lt;/p&gt;
&lt;p&gt;Everything else is the digestive system or the nervous system.
Breaking the skin is a bad idea. It needs to be done for certain
specific reasons, but all of those holes need good defense systems
including real-time sensors and reflexes. Repeatedly stressing parts
makes them tired and calloused, not more flexible. Careful and
deliberate exercise builds strength and flexibility.&lt;/p&gt;
&lt;p&gt;If I had less integrity and more time I could spin this out into a
140 page business advice book.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;</summary><content type="html">
&lt;p&gt;Repeat the following metaphor until you internalize it:&lt;/p&gt;
&lt;p&gt;Security is the skin of an organization, IT infrastructure is the
bones.&lt;/p&gt;
&lt;p&gt;Everything else is the digestive system or the nervous system.
Breaking the skin is a bad idea. It needs to be done for certain
specific reasons, but all of those holes need good defense systems
including real-time sensors and reflexes. Repeatedly stressing parts
makes them tired and calloused, not more flexible. Careful and
deliberate exercise builds strength and flexibility.&lt;/p&gt;
&lt;p&gt;If I had less integrity and more time I could spin this out into a
140 page business advice book.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="security"/><category term="it"/><category term="business advice"/></entry><entry><title>specialized toy geometry notes</title><link href="https://blog.randomstring.org/2024/07/03/specialize-toy-geometry-notes/" rel="alternate"/><published>2024-07-03T19:35:34-04:00</published><updated>2024-07-03T19:35:34-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2024-07-03:/2024/07/03/specialize-toy-geometry-notes/</id><summary type="html">
&lt;p&gt;A nominally 8-wide LEGO Speed Champions vehicle is actually 8.5 studs
wide, due to the overhang of the wheel arches. Said arches are 4 studs
long. The space between them can reasonably range from 6 studs (very
short) to 9 studs (very long) and is typically 7 studs long; sometimes
8.&lt;/p&gt;
&lt;p&gt;The rear overhang is generally 1 to 2 studs long. The front overhang
is 1 to 4 studs long. This gives an overall length for the car ranging
from 1+4+6+4+1 = 16 studs to 2+4+9+4+4 = 23 studs long.&lt;/p&gt;
&lt;p&gt;The Mercedes AMG G63 is an outlier and should not be counted.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;</summary><content type="html">
&lt;p&gt;A nominally 8-wide LEGO Speed Champions vehicle is actually 8.5 studs
wide, due to the overhang of the wheel arches. Said arches are 4 studs
long. The space between them can reasonably range from 6 studs (very
short) to 9 studs (very long) and is typically 7 studs long; sometimes
8.&lt;/p&gt;
&lt;p&gt;The rear overhang is generally 1 to 2 studs long. The front overhang
is 1 to 4 studs long. This gives an overall length for the car ranging
from 1+4+6+4+1 = 16 studs to 2+4+9+4+4 = 23 studs long.&lt;/p&gt;
&lt;p&gt;The Mercedes AMG G63 is an outlier and should not be counted.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;
</content><category term="misc"/><category term="lego"/><category term="geometry"/></entry><entry><title>about Agile</title><link href="https://blog.randomstring.org/2024/06/14/about-agile/" rel="alternate"/><published>2024-06-14T08:55:07-04:00</published><updated>2024-06-14T08:55:07-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2024-06-14:/2024/06/14/about-agile/</id><summary type="html">
&lt;p&gt;Here is the Agile Manifesto:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We are uncovering better ways of developing software by doing it and
helping others do it. Through this work we have come to value:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Individuals and interactions over processes and tools&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Working software over comprehensive documentation&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Customer collaboration over contract negotiation&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Responding to change over following a plan&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;That is, while there is value in the items on the right, we value the
items on the left more.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This manifesto is quite reasonable. However, people – well,
corporations – keep misapplying it. Let’s talk about that.&lt;/p&gt;
</summary><content type="html">
&lt;p&gt;Here is the Agile Manifesto:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We are uncovering better ways of developing software by doing it and
helping others do it. Through this work we have come to value:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Individuals and interactions over processes and tools&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Working software over comprehensive documentation&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Customer collaboration over contract negotiation&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Responding to change over following a plan&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;That is, while there is value in the items on the right, we value the
items on the left more.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This manifesto is quite reasonable. However, people – well,
corporations – keep misapplying it. Let’s talk about that.&lt;/p&gt;

&lt;h2
id="individuals-and-interactions-over-processes-and-tools"&gt;Individuals
and interactions over processes and tools&lt;/h2&gt;
&lt;p&gt;You should have a defined process for anything that you intend to
repeat. If you can reify those processes in software tools, that means
you can automate away the boring bits and ensure consistency. That’s
great. Definitely do that.&lt;/p&gt;
&lt;p&gt;If, however, you need an exception to be made, the process and any
tools implementing it must be bypassable. That’s the nature of
exceptions. They happen, they should be documented, and if they happen
often, it’s time to look at re-working the process and then the
tools.&lt;/p&gt;
&lt;p&gt;And if the nature of your work is that a pre-agreed process is really
important, for whatever reason – then Agile isn’t what you need.&lt;/p&gt;
&lt;h2 id="working-software-over-comprehensive-documentation"&gt;Working
software over comprehensive documentation&lt;/h2&gt;
&lt;p&gt;Obviously, it’s better to have a product you can hand the client than
to have a pretty manual to go along with it. And a lot of products can
be used with quite minimal documentation.&lt;/p&gt;
&lt;p&gt;And just as obviously, if documentation is a necessary and vital
component of your product, Agile is not what you need.&lt;/p&gt;
&lt;h2 id="customer-collaboration-over-contract-negotiation"&gt;Customer
collaboration over contract negotiation&lt;/h2&gt;
&lt;p&gt;There are actually two parts to this. The first is that your customer
needs to have somebody designated who can make decisions and say yes. In
the trivial case where the customer is a singular person, hey, no
problems here. But if you have a single customer which is a medium or
large company – or even a small company with a diversity of needs – it’s
actually quite rare to have a single representative of the customer who
can say. (And common to have many representatives who can each say
no.)&lt;/p&gt;
&lt;p&gt;The second part is that contract negotiation needs to be flexible, to
protect both sides. The customer doesn’t want to be exposed to the risk
of unlimited costs or unlimited delivery time; the developer doesn’t
want to be constrained to produce software with poorly defined
acceptance criteria or lifetime free scope creep.&lt;/p&gt;
&lt;p&gt;Do I need to point out that if your product is strongly regulated by
contract – say, something in the medical industry – Agile is not for
you?&lt;/p&gt;
&lt;h2 id="responding-to-change-over-following-a-plan"&gt;Responding to change
over following a plan&lt;/h2&gt;
&lt;p&gt;It should now be obvious to you that there are businesses (or
organizations) for whom Agile is a great fit, and others where it really
isn’t appropriate at all. And it should also be obvious to you that lots
of companies are Doing Agile officially, even though not a single one of
the manifesto bullets applies to their situations. I am not saying that
Agile is superior, or inferior, to any other methodology. I am very much
stating that Agile is not appropriate for some projects, and forcing it
to fit will make no one happy.&lt;/p&gt;
</content><category term="misc"/><category term="blog"/></entry><entry><title>it was magic all along</title><link href="https://blog.randomstring.org/2024/05/31/it-was-magic-all-along/" rel="alternate"/><published>2024-05-31T15:25:03-04:00</published><updated>2024-05-31T15:25:03-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2024-05-31:/2024/05/31/it-was-magic-all-along/</id><summary type="html">
&lt;p&gt;There’s a game which you have probably played in some form, possibly
not even knowing that it was a game. It goes like this: an author writes
fiction, and the reader comes across an interesting element and asks how
it works, in-universe.&lt;/p&gt;
&lt;p&gt;And people come up with answers…&lt;/p&gt;
</summary><content type="html">
&lt;p&gt;There’s a game which you have probably played in some form, possibly
not even knowing that it was a game. It goes like this: an author writes
fiction, and the reader comes across an interesting element and asks how
it works, in-universe.&lt;/p&gt;
&lt;p&gt;And people come up with answers…&lt;/p&gt;

&lt;p&gt;Some of which are plausible in this universe but not in the fictional
one, some are plausible technologically but the economics can’t be
worked out; sometimes it’s a great answer but people are a problem.
Often there are multiple good answers which conflict with each
other.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;They are magic and work the way they do because that’s how the author
wants them to work.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is pretty much the only bad answer in the game.&lt;/p&gt;
&lt;p&gt;The point is to figure out the puzzle, sometimes tangentially, for
the general pleasure of creativity and discussion. Even multiple
conflicting answers can be fun.&lt;/p&gt;
&lt;p&gt;If an author is asking for help pre-publication, it’s valid but kind
of useless to say “it works the way you want it to work” – yes, of
course it does, but how should it be explained? They might or might not
show the how, but knowing the how allows them to more room for fun.
Usually, the better version of that statement is a question: “What plot
or character or style elements do you want it to have?”&lt;/p&gt;
&lt;p&gt;When discussing an already completed work – which is usually the case
– it’s absolutely useless to say “it works the way the author wants it
to work”. That’s not fun. It doesn’t illuminate anything. Nothing new
comes from it.&lt;/p&gt;
&lt;p&gt;So, the remaining proposal is “It’s magic.” What are the limitations
of the magic? What deductions can the reader make based on the existence
of magic in this one aspect? Those are the fun questions.&lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="SF"/><category term="Fantasy"/><category term="literature"/><category term="writing"/><category term="fandom"/></entry><entry><title>things break when you try to fix them</title><link href="https://blog.randomstring.org/2024/05/27/things-break-when-you-try-to-fix-them/" rel="alternate"/><published>2024-05-27T15:29:07-04:00</published><updated>2024-05-27T15:29:07-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2024-05-27:/2024/05/27/things-break-when-you-try-to-fix-them/</id><summary type="html">
&lt;p&gt;About two weeks ago I decided to use parts from a suddenly unused
desktop to upgrade the living room media server. The initial plan was to
keep the disks, power supply and case of the media server, and use the
motherboard, CPU, RAM and video card from the desktop.&lt;/p&gt;
&lt;p&gt;Things did not go to plan, of course…&lt;/p&gt;
</summary><content type="html">
&lt;p&gt;About two weeks ago I decided to use parts from a suddenly unused
desktop to upgrade the living room media server. The initial plan was to
keep the disks, power supply and case of the media server, and use the
motherboard, CPU, RAM and video card from the desktop.&lt;/p&gt;
&lt;p&gt;Things did not go to plan, of course…&lt;/p&gt;

&lt;p&gt;Rather than a chronological narrative, let’s just enumerate
issues:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the media server’s power supply would not handle the new video
card.&lt;/li&gt;
&lt;li&gt;the desktop’s motherboard would not supply enough SATA ports&lt;/li&gt;
&lt;li&gt;the media server’s case power button apparently broke&lt;/li&gt;
&lt;li&gt;the desktop’s case did not have sufficient cooling&lt;/li&gt;
&lt;li&gt;the desktop’s power supply fried itself a little later&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The solution, in the end, involves a new power supply ($45), a PCI-e
SATA3 card and cables (in inventory), extra fans (also in inventory),
and a little fussing with configuration to get sound working again.&lt;/p&gt;
&lt;p&gt;The old media server had 8GB RAM and an Intel Pentium G4560 (3.5GHz,
2c/4t, 3MB cache).&lt;/p&gt;
&lt;p&gt;The new media server has 48GB, an AMD 3600 (4.2 GHz, 6c/12t, 3MB L2 +
32MB L3 cache) and an AMD 5700xt video card.&lt;/p&gt;
&lt;p&gt;Storage: 1TB SATA SSD, 2x 3TB mdadm RAID1, 2x 8TB ZFS mirror.&lt;/p&gt;
&lt;p&gt;Hopefully that will do for some time.&lt;/p&gt;
</content><category term="misc"/><category term="technology"/><category term="linux"/><category term="hardware"/></entry><entry><title>the IT scale</title><link href="https://blog.randomstring.org/2024/04/16/the-it-scale/" rel="alternate"/><published>2024-04-16T15:56:38-04:00</published><updated>2024-04-16T15:56:38-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2024-04-16:/2024/04/16/the-it-scale/</id><summary type="html">
&lt;p&gt;In the spirit of the Joel Scale for software dev, I propose an
initial version of a scale for IT and operations folks.&lt;/p&gt;
</summary><content type="html">
&lt;p&gt;In the spirit of the Joel Scale for software dev, I propose an
initial version of a scale for IT and operations folks.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;3 points: all production infrastructure is redeployable in
exactly the current form with a well-documented, automated system. /or/
2 points: almost all infrastructure is like that, with a few exceptions
which are properly backed-up off-site and have clear, tested
redeployment documents. /or/ 1 point: most infrastructure is
redeployable in exactly the current form, with well-documented
exceptions and good reasons for those exceptions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;3 points: standard per-employee hardware is in stock and a new
employee can be set up completely with less than an hour of work by one
IT person. Everything will work and there is a Day One FAQ or similar
document. An all-remote employee can be set up with less than an hour of
work plus an overnight hardware delivery and a ten minute phone call.
/or/ 2 points: standard per-employee hardware is in stock and a new
employee can be set up on one workday’s notice; everything will work.
Adding an all-remote employee takes less than an additional hour of
work. /or/ 1 point: if a manager notifies IT that a new employee will
start 5 or more workdays in the future, everything will be ready on that
day. There is a complete checklist that every manager can see. 0 points:
a new employee can start work, given two weeks notice. negative points:
if the new employee can’t actually do anything on their first
day&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;2 points: the dev bug tracker is separate from the IT ticket
tracker. Both are easily searchable. 1 point: the dev bug tracker can
link to a dependency in the IT ticket tracker. 0 points: the dev bug
tracker also serves as the IT ticket tracker. negative points: IT work
is not ticketed&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;3 points: all changes go through version control. All changes
have associated tickets. Security-related changes require approval.
There is a tested emergency procedure to get a major change through in 4
hours or less. /or/ 1 point: all changes go through version control. All
changes have associated tickets. Security-related changes require
approval. 0 points: each version is archived, even if it isn’t shipped
negative points: changes are made to the production/development
system&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;1 point: there is a reasonable, tested, well-documented policy
for making exceptions. Exceptions are logged and reviewable. Exceptions
are approved before being made. Exceptions are reviewed later and
acknowledged, removed, or made part of policy. 0 points: there is an
understanding that exceptions will need to be made, and they get logged.
negative points: there are no exceptions allowed, so of course they
aren’t logged&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;3 points: dependencies are tracked, tested, and brought into
local repositories so that all subsequent builds are reproducible. 2
points: dependencies are tracked, tested, and locked to specific
versions 0 points: dependencies are tracked and the build is tested
negative points: dependencies are pulled from “HEAD” at every build
time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;3 points: increasing pay automatically follows from increased
competence and demonstrated responsibility 1 point: pay increases can be
argued rationally negative points: if you want more money, you should
find a different job&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
</content><category term="misc"/><category term="blog"/></entry><entry><title>new mouse report</title><link href="https://blog.randomstring.org/2024/03/11/new-mouse-report/" rel="alternate"/><published>2024-03-11T12:45:30-04:00</published><updated>2024-03-11T12:45:30-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2024-03-11:/2024/03/11/new-mouse-report/</id><summary type="html">
&lt;p&gt;My RSI prevention strategy involves change: I use three different
keyboards, four or five pointing devices, and move around to different
places. On my main desktop, I mostly use a thumb trackball, with a mouse
in second place and a drawing pad in distant third.&lt;/p&gt;
&lt;p&gt;On Friday the trackball died in a peculiar way.
&lt;/p&gt;</summary><content type="html">
&lt;p&gt;My RSI prevention strategy involves change: I use three different
keyboards, four or five pointing devices, and move around to different
places. On my main desktop, I mostly use a thumb trackball, with a mouse
in second place and a drawing pad in distant third.&lt;/p&gt;
&lt;p&gt;On Friday the trackball died in a peculiar way.
&lt;/p&gt;
&lt;p&gt;It decided that Y-axis measurements should be much more precise than
the normal X-axis reporting, and so I needed to roll the ball about
eight times further in one dimension than the other. Not good. I changed
the battery, which did nothing, and unplugged and replugged the dongle.
Nothing changed. I flipped the mouse off and on again, and that killed
it – the system reported that the mouse connected and had a charge, but
did not accept clicks or geometry from it.&lt;/p&gt;
&lt;p&gt;Well, I have a spare, retired because the main button refused to
acknowledge being held down. That’s a problem for dragging over text for
copying it. Time to buy a replacement.&lt;/p&gt;
&lt;p&gt;The new trackball, an Elecom EX-G Pro, appeared about 20 hours later.
Unlike the former occupant, a Logitech M570, the Elecom can be used with
a USB connection, a proprietary dongle, or a generic Bluetooth
connection. X11 recognizes it as having 12 buttons:&lt;/p&gt;
&lt;p&gt;left, wheel-click, right, wheel-roll-down, wheel-roll-up,
wheel-tilt-left, wheel-tilt-right, leftside “back”, leftside “forward”,
far-left-by-thumb, far- right-finger, and a central button just south of
the wheel&lt;/p&gt;
&lt;p&gt;which is actually one button too many: the far-left-by-thumb button
is nearly impossible to tap without changing my grip on the mouse.&lt;/p&gt;
&lt;p&gt;There are also bottom buttons for BT pairing, resolution switching,
and a slider for off/slow-report/fast-report – for battery saving, I
guess. And an additional slider for switching from BT to proprietary
wireless dongle.&lt;/p&gt;
&lt;p&gt;The ball is exactly the same size as the Logitech M570 series. It
feels smooth. The wheel, however, is high-friction and clicky. Some of
the corners of the mouse actually feel sharp.&lt;/p&gt;
&lt;p&gt;Some config to help things out:&lt;/p&gt;
&lt;p&gt;In .xsessionrc:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;xinput set-prop &amp;quot;ELECOM TrackBall Mouse EX-G Pro TrackBall Mouse&amp;quot; 305 12
xinput set-prop &amp;quot;ELECOM TrackBall Mouse EX-G Pro TrackBall Mouse&amp;quot; 290 0, 0, 1
xinput set-prop &amp;quot;ELECOM TrackBall Mouse EX-G Pro TrackBall Mouse&amp;quot; 292 11&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The first line sets the top-of-mouse button as the universal drag
lock button. Tap it, tap another button (usually 1, the main button),
and it is considered to be held down until you tap the other button
again. Excellent for precise copying to the primary buffer.&lt;/p&gt;
&lt;p&gt;The second and third lines enable scroll-by-ball: hold down the
far-right button and roll the ball to scroll. Much smoother than the
wheel.&lt;/p&gt;
&lt;p&gt;In .xbindkeysrc:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;quot;xvkbd  -text &amp;quot;\[XF86Copy]&amp;quot;&amp;quot;
       m:0x0 + b:8
&amp;quot;xvkbd  -text &amp;quot;\[XF86Paste]&amp;quot;&amp;quot;
       m:0x0 + b:9&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sets the nominal forward-and-back buttons to copy and paste, very
useful if your terminals support bracketed paste mode (they almost all
do). Requires xbindkey to be running.&lt;/p&gt;
&lt;p&gt;All together, this creates a workflow on the mouse: position the
cursor at one end of a selection-to-be. Top button, button 1. Roll the
cursor to the other anchor point, taking as long as desired,
repositioning until you get it right without having to hold down a
button. Button 1 again. ‘Back’ to copy, go find your desired window,
‘Forward’ to paste. Not quite as fast as holding down a button while
dragging to select, but much easier on my finger joints.&lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="technology"/><category term="linux"/><category term="x11"/><category term="hardware"/></entry><entry><title>belts and suspenders at home</title><link href="https://blog.randomstring.org/2024/03/04/belts-and-suspenders-at-home/" rel="alternate"/><published>2024-03-04T06:54:16-05:00</published><updated>2024-03-04T06:54:16-05:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2024-03-04:/2024/03/04/belts-and-suspenders-at-home/</id><summary type="html">
&lt;p&gt;I have almost 30 years of professional experience as a sysadmin.&lt;/p&gt;
&lt;p&gt;Failure is inevitable. Hardware will fail, software will be
discovered to have flaws, reconfiguration will be mistaken.&lt;/p&gt;
&lt;p&gt;The antidote is to have reliable recovery mechanisms: everything will
eventually break or need to be changed, so in turn you need to be able
to recover back to a stable position, so you can try again.&lt;/p&gt;
&lt;p&gt;Recovery mechanisms are not all-purpose. I usually describe them in
three phases: &lt;/p&gt;</summary><content type="html">
&lt;p&gt;I have almost 30 years of professional experience as a sysadmin.&lt;/p&gt;
&lt;p&gt;Failure is inevitable. Hardware will fail, software will be
discovered to have flaws, reconfiguration will be mistaken.&lt;/p&gt;
&lt;p&gt;The antidote is to have reliable recovery mechanisms: everything will
eventually break or need to be changed, so in turn you need to be able
to recover back to a stable position, so you can try again.&lt;/p&gt;
&lt;p&gt;Recovery mechanisms are not all-purpose. I usually describe them in
three phases: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;short-term examples include version control, RAID, failover
systems, snapshots. These let your systems continue to function after a
specific failure or let you revert back to a known good state in a short
period of time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;medium-term examples: backup (with tested recovery), cold spares,
automated deployment systems, alternative paths. These keep you going
after a major but limited-scope failure.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;long-term examples: archives, remote backup, distributed remote
deployment, disaster-recovery plans. These let you rebuild somewhere
else.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Understanding your systems allows you to plan how you will deal with
the inevitable mishaps. Carrying out those plans allows you to have
confidence that you won’t dig yourself into a hole that you can’t
escape.&lt;/p&gt;
&lt;p&gt;The differences between a house network and a small business network
are not that great. The business probably has more money to spend, but
they have similar needs for reliability. Your family and/or housemates
are probably fewer people than your business associates – or perhaps
not.&lt;/p&gt;
&lt;p&gt;What reliability measures are worthwhile on even a small network?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;NTP&lt;/li&gt;
&lt;li&gt;DNS&lt;/li&gt;
&lt;li&gt;DHCP&lt;/li&gt;
&lt;li&gt;NAS&lt;/li&gt;
&lt;li&gt;RAID&lt;/li&gt;
&lt;li&gt;backup&lt;/li&gt;
&lt;li&gt;central syslog&lt;/li&gt;
&lt;li&gt;version control for your configuration&lt;/li&gt;
&lt;li&gt;diverse routing to the Internet – if it’s cheap enough&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What’s not worthwhile unless you have other goals, like “learning
this skill”?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kubernetes and similar orchestration systems&lt;/li&gt;
&lt;li&gt;most multiple-system containerization or VM migration systems&lt;/li&gt;
&lt;li&gt;internal multi-path networking&lt;/li&gt;
&lt;li&gt;multi-path disks&lt;/li&gt;
&lt;li&gt;ansible, chef, puppet, cfengine, nix…&lt;/li&gt;
&lt;/ul&gt;
</content><category term="misc"/><category term="blog"/><category term="technology"/><category term="philosophy"/></entry><entry><title>the two most common fail-to-post errors</title><link href="https://blog.randomstring.org/2024/02/07/the-two-most-common-fail-to-post-errors/" rel="alternate"/><published>2024-02-07T07:26:46-05:00</published><updated>2024-02-07T07:26:46-05:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2024-02-07:/2024/02/07/the-two-most-common-fail-to-post-errors/</id><summary type="html">My two most common issues in not posting to this blog:</summary><content type="html">&lt;p&gt;My two most common issues in not posting to this blog:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;start writing a post, discover that it is ten thousand words and
still hasn’t made the point properly&lt;/li&gt;
&lt;li&gt;muse about writing a post, wonder whether even I want to remember
the subject of consideration&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This entry is brought to you by both of those issues.&lt;/p&gt;
</content><category term="misc"/><category term="blog"/></entry><entry><title>prediction scoring</title><link href="https://blog.randomstring.org/2023/12/14/prediction-scoring/" rel="alternate"/><published>2023-12-14T08:15:40-05:00</published><updated>2023-12-14T08:15:40-05:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2023-12-14:/2023/12/14/prediction-scoring/</id><summary type="html">
&lt;p&gt;In May of 2022, I &lt;a href="https://blog.randomstring.org/2022/05/03/predictions-for-2023/"&gt;made
a few predictions about US politics&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here’s the meat:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; Assuming that the opinion is issued substantially as-is, I will make some predictions about 2023.
 
 ‘Red’ states will pass laws restricting basic civil rights...  
 Corporations that rely on high-skill workers will not be able to hire them in those states.
    Those corporations will move out of the red states.&lt;/code&gt;&lt;/pre&gt;
</summary><content type="html">
&lt;p&gt;In May of 2022, I &lt;a
href="https://blog.randomstring.org/2022/05/03/predictions-for-2023/"&gt;made
a few predictions about US politics&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here’s the meat:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; Assuming that the opinion is issued substantially as-is, I will make some predictions about 2023.
 
 ‘Red’ states will pass laws restricting basic civil rights...  
 Corporations that rely on high-skill workers will not be able to hire them in those states.
    Those corporations will move out of the red states.&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code&gt;    The economies of red states are substantially worse off compared to blue states now. When the corporations move out, the tax base will be further reduced.
    When the Federal budget is roughly balanced, blue states subsidize red states. The Federal budget is running at a significant deficit in order to prop up the economy.
Option 1: the attack on civil rights is enough to change Congress definitively to blue in November.
    The Supreme Court will be expanded to 15 or 17 justices.
    The Republican Party splinters.
Option 2: Congress becomes red in November, or wishy-washy.
    The United States tends towards a Christian Fascist state.&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;How did I do?&lt;/p&gt;
&lt;p&gt;Red states did pass laws restricting civil rights, especially
abortion. {100%}&lt;/p&gt;
&lt;p&gt;Corporations are having trouble getting high-skill workers to move to
Red {75%} states.&lt;/p&gt;
&lt;p&gt;Some have moved out, some are planning to do so, some are not.
{50%}&lt;/p&gt;
&lt;p&gt;Red state economies have suffered more in the last 18 months.
{100%}&lt;/p&gt;
&lt;p&gt;Option 1: did not happen.&lt;/p&gt;
&lt;p&gt;Option 2: went wishy-washy {25%}&lt;/p&gt;
&lt;p&gt;Better than throwing darts at a dartboard, not really good enough to
commit to a single plan.&lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="predictions"/><category term="politics"/></entry><entry><title>pareidolia but for meaningfulness</title><link href="https://blog.randomstring.org/2023/11/18/pareidolia-but-for-meaningfulness/" rel="alternate"/><published>2023-11-18T08:13:38-05:00</published><updated>2023-11-18T08:13:38-05:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2023-11-18:/2023/11/18/pareidolia-but-for-meaningfulness/</id><summary type="html">
&lt;p&gt;I had thought that ‘pareidolia’ referred exclusively to the human
tendency to see human faces everywhere – any time you see two dots or
circles and a line below them, boom :) it’s a face. It can be triggered
by rocks, clouds, shadows, uneven browning on a tortilla or a
pancake.&lt;/p&gt;
&lt;p&gt;It turns out, though, that pareidolia covers any kind of overactive
pattern matching. Humans look for meaningful patterns all the time,
without thinking about the search, and when something trips the right
thresholds in our brain, we seize upon it. The result can be faces,
voices, music or just a cloud that looks like a moose.&lt;/p&gt;
&lt;p&gt;Here’s my thesis: the large language models (LLMs) and similar
generative software processes that people currently refer to as “AI” –
those are exceptionally well-tuned to produce patterns that will trigger
threshold recognition in human brains. Not by accident – that’s the
goal. They are pareidolia-circuit stimulators.&lt;/p&gt;
&lt;p&gt;The problem is that LLM output is exactly as meaningful as any other
kind of pareidolia. Every well-formed paragraph is a false-positive
error.&lt;/p&gt;
&lt;p&gt;And when people repeatedly mistake their overactive pattern
recognition for reality, we call that a mental disorder: psychosis.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;</summary><content type="html">
&lt;p&gt;I had thought that ‘pareidolia’ referred exclusively to the human
tendency to see human faces everywhere – any time you see two dots or
circles and a line below them, boom :) it’s a face. It can be triggered
by rocks, clouds, shadows, uneven browning on a tortilla or a
pancake.&lt;/p&gt;
&lt;p&gt;It turns out, though, that pareidolia covers any kind of overactive
pattern matching. Humans look for meaningful patterns all the time,
without thinking about the search, and when something trips the right
thresholds in our brain, we seize upon it. The result can be faces,
voices, music or just a cloud that looks like a moose.&lt;/p&gt;
&lt;p&gt;Here’s my thesis: the large language models (LLMs) and similar
generative software processes that people currently refer to as “AI” –
those are exceptionally well-tuned to produce patterns that will trigger
threshold recognition in human brains. Not by accident – that’s the
goal. They are pareidolia-circuit stimulators.&lt;/p&gt;
&lt;p&gt;The problem is that LLM output is exactly as meaningful as any other
kind of pareidolia. Every well-formed paragraph is a false-positive
error.&lt;/p&gt;
&lt;p&gt;And when people repeatedly mistake their overactive pattern
recognition for reality, we call that a mental disorder: psychosis.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="ai"/><category term="llm"/><category term="technology"/><category term="philosophy"/><category term="humans"/></entry><entry><title>tech note: slow SSH login</title><link href="https://blog.randomstring.org/2023/10/28/tech-note-slow-ssh-login/" rel="alternate"/><published>2023-10-28T07:42:02-04:00</published><updated>2023-10-28T07:42:02-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2023-10-28:/2023/10/28/tech-note-slow-ssh-login/</id><summary type="html">
&lt;p&gt;If your Debian system is suddenly very slow to login – like, 25 to 90
seconds of apparent inactivity on every new ssh – it’s not DNS.&lt;/p&gt;
&lt;p&gt;Check to see if your &lt;code&gt;elogind&lt;/code&gt; or
&lt;code&gt;systemd/logind&lt;/code&gt; is actually running. Look for a log entry in
&lt;code&gt;auth.log&lt;/code&gt; along the lines of&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;dbus-daemon[4501]: [system] Failed to activate service 'org.freedesktop.login1'&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;right after an SSH attempt.&lt;/p&gt;
&lt;p&gt;If so, restart the daemon.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;</summary><content type="html">
&lt;p&gt;If your Debian system is suddenly very slow to login – like, 25 to 90
seconds of apparent inactivity on every new ssh – it’s not DNS.&lt;/p&gt;
&lt;p&gt;Check to see if your &lt;code&gt;elogind&lt;/code&gt; or
&lt;code&gt;systemd/logind&lt;/code&gt; is actually running. Look for a log entry in
&lt;code&gt;auth.log&lt;/code&gt; along the lines of&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;dbus-daemon[4501]: [system] Failed to activate service &amp;#39;org.freedesktop.login1&amp;#39;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;right after an SSH attempt.&lt;/p&gt;
&lt;p&gt;If so, restart the daemon.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;
</content><category term="misc"/><category term="debian"/><category term="systemd"/><category term="elogind"/><category term="sysadmin"/></entry><entry><title>750 chars: security re-org</title><link href="https://blog.randomstring.org/2023/09/22/750-chars-security-re-org/" rel="alternate"/><published>2023-09-22T08:15:16-04:00</published><updated>2023-09-22T08:15:16-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2023-09-22:/2023/09/22/750-chars-security-re-org/</id><summary type="html">
&lt;p&gt;Some people play Wordle to get their brains moving in the morning. I
find one of Linked-In’s incredibly stupid “AI”-driven “articles” where
they limit you to 750 characters of commentary (times 5-7 article
segments) and write a cohesive answer to the whole thing in one
block.&lt;/p&gt;
&lt;p&gt;Herewith: “How Do You Work With Other IT Departments To Manage
Security Risks”&lt;/p&gt;
&lt;p&gt;Either your company understands that security is the prime risk
assessment and management tool, or it does not. Figure this out
first.&lt;/p&gt;
&lt;p&gt;Assuming your company cares, get an executive mandate. Bring the IT,
Ops, Network Engineering, Security, Software Development, Hardware
Engineering, Legal, and all other relevant groups together. Establish a
common vocabulary, write a policy, and appoint a committee that has the
authority to approve exceptions and change policy.&lt;/p&gt;
&lt;p&gt;Policy is implemented in plans, and if your company is large enough,
some groups will need their own plans. Write them to a common skeleton,
and publicize them internally.&lt;/p&gt;
&lt;p&gt;Include Business Continuity and Disaster Recovery as subsets of
Security: that’s where they belong. Done in 750.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;</summary><content type="html">
&lt;p&gt;Some people play Wordle to get their brains moving in the morning. I
find one of Linked-In’s incredibly stupid “AI”-driven “articles” where
they limit you to 750 characters of commentary (times 5-7 article
segments) and write a cohesive answer to the whole thing in one
block.&lt;/p&gt;
&lt;p&gt;Herewith: “How Do You Work With Other IT Departments To Manage
Security Risks”&lt;/p&gt;
&lt;p&gt;Either your company understands that security is the prime risk
assessment and management tool, or it does not. Figure this out
first.&lt;/p&gt;
&lt;p&gt;Assuming your company cares, get an executive mandate. Bring the IT,
Ops, Network Engineering, Security, Software Development, Hardware
Engineering, Legal, and all other relevant groups together. Establish a
common vocabulary, write a policy, and appoint a committee that has the
authority to approve exceptions and change policy.&lt;/p&gt;
&lt;p&gt;Policy is implemented in plans, and if your company is large enough,
some groups will need their own plans. Write them to a common skeleton,
and publicize them internally.&lt;/p&gt;
&lt;p&gt;Include Business Continuity and Disaster Recovery as subsets of
Security: that’s where they belong. Done in 750.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="750c"/><category term="security"/></entry><entry><title>words about my mother</title><link href="https://blog.randomstring.org/2023/09/05/words-about-my-mother/" rel="alternate"/><published>2023-09-05T19:09:39-04:00</published><updated>2023-09-05T19:09:39-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2023-09-05:/2023/09/05/words-about-my-mother/</id><summary type="html">
&lt;p&gt;This is what I would like you to know about my mother:&lt;/p&gt;
&lt;p&gt;She didn’t like what people were doing to the world; she found some
ways she could be effective at making things better; she did them.&lt;/p&gt;
&lt;p&gt;It is not required of us that we fix the world, but it is required
that we try to leave it better than when we came into it. Mom
succeeded.&lt;/p&gt;
</summary><content type="html">
&lt;p&gt;This is what I would like you to know about my mother:&lt;/p&gt;
&lt;p&gt;She didn’t like what people were doing to the world; she found some
ways she could be effective at making things better; she did them.&lt;/p&gt;
&lt;p&gt;It is not required of us that we fix the world, but it is required
that we try to leave it better than when we came into it. Mom
succeeded.&lt;/p&gt;

&lt;p&gt;She was the ten thousandth accredited Leader of a La Leche League
group; La Leche League is an international organization that was founded
to teach women how to breastfeed, because that’s not actually a thing we
have an instinct for.&lt;/p&gt;
&lt;p&gt;People in my professional field have a saying about computer
interfaces: “The only instinctive interface is the nipple; after that
it’s all learned.” For baby humans, that’s half-true: if you rub a
nipple on their lower lip, they will open their mouth and try to latch
on. For new mothers, it’s not true at all. We learn how to nurse from
watching other people do it. If nobody around you does that, you won’t
know how to do it either.&lt;/p&gt;
&lt;p&gt;So Mom spent forty-plus years teaching breastfeeding. Human
breastmilk conveys antibodies that fortify a baby’s immune system. It
changes over time to match changing nutritional needs. It’s full of fat
and cholesterol because those are the things we use to grow brains.&lt;/p&gt;
&lt;p&gt;When La Leche League had too many internal political battles, Mom
helped found Breastfeeding USA. Same goal. Mostly the same methods. Less
political angst. Mom had the basic liberal fallacy, one to which I often
fall victim: she thought that if a person had all the facts, they would
come to the right conclusion. It’s an optimistic viewpoint.&lt;/p&gt;
&lt;p&gt;Mom taught me to read. I – and my sisters – all learned to read
before we went to school. One day my parents decided to send me to a
kindergarten class. Mom walked me in, made sure I was comfortable, left.
At some point I picked up a book off the shelf and took it to the
teacher or their assistant: “Could you help me with this?” I asked. They
said “No.” I cried.&lt;/p&gt;
&lt;p&gt;Eventually Mom was back, and wanted to know why I was in tears. She
asked me. I explained. She asked them why they wouldn’t help. They said
“Oh, we don’t teach reading until the first grade. We just do letters
and numbers.” Mom said, “Dan knows how to read. He wanted help with any
particularly big words.” She took me home. I did not go back there.&lt;/p&gt;
&lt;p&gt;It is probably significant that I invited my favorite librarians to
my bar mitzvah.&lt;/p&gt;
&lt;p&gt;Mom loved reading mysteries and romances, and occasionally science
fiction. Sometimes our tastes overlapped, and I was always glad to be
able to make a recommendation to her.&lt;/p&gt;
&lt;p&gt;Mom was on my side against the school system, whenever the school
system was wrong. She talked to my first-grade teacher about my
proclivity for finishing the assigned work in a few minutes and then
reading any book I could get my hands on. They agreed to move me up to
the second grade. I was rather frustrated in second grade – not
academically. I was still bored. I got so bored that one day I finished
my work, wrote “I’m going home” at the top of the worksheet, handed it
in, went out to the hallway, got my coat and lunchbox, and walked. Out
the front door of the school, down the street, over to the four-lane
highway, crossed at the light, and so on about 2 miles home. I opened up
the door to the mudroom, hung up my coat – Mom was rather surprised to
see me – and I headed off to the bathroom. While I was taking care of
that, Mom called the school. “Do you know where my son is?” she
asked.&lt;/p&gt;
&lt;p&gt;“In class,” said the secretary. “No, he’s not.” said my mother.&lt;/p&gt;
&lt;p&gt;There were no negative repercussions from my parents. Obviously if I
did something that drastic, something caused me to do it. There’s no
more profound feeling of security than knowing that your parents are
really and truly on your side.&lt;/p&gt;
&lt;p&gt;This continued all the way through high school: in my senior year, I
took what was billed as college freshman literature equivalent. The
English department head taught the class; his plan was to let the
seniors watch films all year long. I objected to a lack of education,
Mom backed me up. Instead I had an independent study course supervised
by another teacher.&lt;/p&gt;
&lt;p&gt;Mom’s lesson: when the system is failing you, you can try to fix the
system, or you can work around it. The system never proposes solutions
outside its control; you have to do that yourself.&lt;/p&gt;
&lt;p&gt;My mother taught me to cook. Though I haven’t used the skill in a
handful of years, she taught me to bake bread. Mom made several
excellent kinds of bread, but what she made most was a whole wheat
sandwich loaf and a white loaf called bulka. Mom considered baking bread
for her family and friends to be a political act, but it was also
practical. Once she bartered 15 loaves of bread for a wheelbarrow.&lt;/p&gt;
&lt;p&gt;I don’t bake much these days, but I do cook a fair bit. I am a better
cook than my mother usually was, but I never reached her depth of
understanding of baking. Her Pesach brownies, made with matzo meal and
baking powder, were the best possible brownies. I am glad that she
taught my sisters how to make them. I try from time to time, but I
haven’t got them right yet.&lt;/p&gt;
&lt;p&gt;Mom loved sewing, and made sure that I know how to mend a tear or
attach a button. But I didn’t have any love for it, so she didn’t press
me to do more. Love is taking care of other people, and sometimes that
means not pushing them to do the things that you like to do.&lt;/p&gt;
&lt;p&gt;Mom loved cats. She especially loved Pansy, who came over with her
from England, and guarded me as I slept.&lt;/p&gt;
&lt;p&gt;Mom’s last request was that Dad hold her hand as they took her off
the medicine that was keeping her conscious. They told each other that
they were each the most important person in the other one’s life. I am
sure that this is true.&lt;/p&gt;
&lt;p&gt;In memory of my mother (1945 - 2023)&lt;/p&gt;
</content><category term="misc"/><category term="blog"/></entry><entry><title>house network 2023</title><link href="https://blog.randomstring.org/2023/08/18/house-network-2023/" rel="alternate"/><published>2023-08-18T07:43:54-04:00</published><updated>2023-08-18T07:43:54-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2023-08-18:/2023/08/18/house-network-2023/</id><summary type="html">
&lt;p&gt;In the spirit of &lt;a href="https://shkspr.mobi/blog/2023/08/my-underkill-home-network/"&gt;underkill
home network&lt;/a&gt; and &lt;a href="https://blog.networkprofile.org/my-home-network-complete-details-2023/"&gt;overkill
home network&lt;/a&gt;&lt;/p&gt;
</summary><content type="html">
&lt;p&gt;In the spirit of &lt;a
href="https://shkspr.mobi/blog/2023/08/my-underkill-home-network/"&gt;underkill
home network&lt;/a&gt; and &lt;a
href="https://blog.networkprofile.org/my-home-network-complete-details-2023/"&gt;overkill
home network&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Internet:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Verizon FIOS terminating in their optical network terminal. Assume
gigabit ethernet for all wired connections hereafter.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Network:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;router/firewall: 4 x 2.5Gb ports. Attached to a UPS. Connected to
the main switch.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Main switch: 12 port unmanaged fanless GE switch. Powered by the
same UPS as the router/firewall.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Den switch: connected to the main switch. 8 ports.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Living room switch: connected to the den switch. Currently a
managed, fan-cooled 48 ports, but soon to be changed out for a 12 port
fanless.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wireless access points 1, 2: connected to the main
switch.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wireless access point 3: connected to the den switch.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wireless access points 4,5: connected to the living room
switch.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Servers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;main server is connected to the main switch, on its own UPS.&lt;/li&gt;
&lt;li&gt;media server is connected to the den switch, on its own UPS.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Wired stations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;my desktop is connected to the main switch. Own UPS.&lt;/li&gt;
&lt;li&gt;my wife’s desktop, same.&lt;/li&gt;
&lt;li&gt;my wife’s other desktop, connected to the living room switch.&lt;/li&gt;
&lt;li&gt;there is a currently unused ethernet-over-AC connection from the
main switch&lt;/li&gt;
&lt;li&gt;music player in the living room&lt;/li&gt;
&lt;li&gt;media-watching tiny desktop in the living room&lt;/li&gt;
&lt;li&gt;In the den:
&lt;ul&gt;
&lt;li&gt;a Roku for the TV&lt;/li&gt;
&lt;li&gt;the home theater receiver&lt;/li&gt;
&lt;li&gt;the HDHomeRun TV tuner&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Wireless devices:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;4 laptops&lt;/li&gt;
&lt;li&gt;3 chromebooks&lt;/li&gt;
&lt;li&gt;4 tablets&lt;/li&gt;
&lt;li&gt;six phones&lt;/li&gt;
&lt;/ul&gt;
</content><category term="misc"/><category term="blog"/><category term="network"/><category term="house"/></entry><entry><title>learning opportunity: LLM</title><link href="https://blog.randomstring.org/2023/08/18/learning-opportunity-llm/" rel="alternate"/><published>2023-08-18T07:18:51-04:00</published><updated>2023-08-18T07:18:51-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2023-08-18:/2023/08/18/learning-opportunity-llm/</id><summary type="html">If a service is being provided by an LLM, one of the following cases
applies:</summary><content type="html">&lt;p&gt;If a service is being provided by an LLM, one of the following cases
applies:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;it was always bullshit&lt;sup id=sf-learning-opportunity-llm-1-back&gt;&lt;a href=#sf-learning-opportunity-llm-1 class=simple-footnote title=" in the technical sense of material spewed out without any regard for accuracy or truth, at all."&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;the people in charge can’t tell the difference&lt;/li&gt;
&lt;li&gt;the people in charge don’t care about the difference&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;LLMs are bullshit generators. Modern humans expect bullshit in
specific areas (advertising, marketing websites, customer service
transactions) and are not otherwise looking for it; this is going to be
a mistake.&lt;/p&gt;
&lt;ol class=simple-footnotes&gt;&lt;li id=sf-learning-opportunity-llm-1&gt; in the technical sense of material
spewed out without any regard for accuracy or truth, at all. &lt;a href=#sf-learning-opportunity-llm-1-back class=simple-footnote-back&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;</content><category term="misc"/><category term="blog"/><category term="philosophy"/><category term="business"/></entry><entry><title>one of the one true ways of ops</title><link href="https://blog.randomstring.org/2023/07/26/one-of-the-one-true-ways-of-ops/" rel="alternate"/><published>2023-07-26T21:19:07-04:00</published><updated>2023-07-26T21:19:07-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2023-07-26:/2023/07/26/one-of-the-one-true-ways-of-ops/</id><summary type="html">
&lt;p&gt;I’m going to tell you the secret (it’s not a secret) to building
reliable, operable, debuggable infrastructure. This is going to be
terse, but hopefully understandable to someone with just a little
experience.&lt;/p&gt;
</summary><content type="html">
&lt;p&gt;I’m going to tell you the secret (it’s not a secret) to building
reliable, operable, debuggable infrastructure. This is going to be
terse, but hopefully understandable to someone with just a little
experience.&lt;/p&gt;

&lt;p&gt;You’re going to need some infrastructure. Infrastructure is not the
stuff that you are building, and it’s not the tools that you are
building the stuff with. Infrastructure is the reliable services which
you depend on to help you build your stuff.&lt;/p&gt;
&lt;p&gt;At a minimum:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;an Internet connection&lt;/li&gt;
&lt;li&gt;a computer acting as a firewall/router to protect you from the
Internet&lt;/li&gt;
&lt;li&gt;a network switch, preferably one which is configurable with
VLANs&lt;/li&gt;
&lt;li&gt;more computers than you would think, some of which will be
specialized by speed or amount of storage, RAM, processors, special
hardware…&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The first rule is that nothing can be built without a firm
foundation. A firm foundation does not change unless someone makes an
active decision to change it, or something breaks. A broken foundation
must be detected and fixed.&lt;/p&gt;
&lt;p&gt;To detect things changing, we need a monitoring system. The
monitoring system should make read-only inquiries via SNMP, check on the
functionality of services on remote computers by running tests on them
ranging from pings to port connections through HTTPS queries and SQL
queries. When it has checked on everything, it needs to go through and
do it again. The monitoring system needs a reliable way of sending an
alert. It must reliably continue sending the alert periodically until it
is stopped by a person or the detected problem is no longer
detected.&lt;/p&gt;
&lt;p&gt;The monitoring system needs to know what time it is. Use NTP.
Designate at least one machine as an NTP server, and have it talk to a
pool of NTP servers out on the Internet, as well as all of your internal
machines.&lt;/p&gt;
&lt;p&gt;The monitoring system needs to be able to send alerts. If the
Internet is up, send email, preferably to a paging service. How will you
get alerts if the Internet is down? You can try cellphone gateways, but
I recommend a different method: set up a small copy of part of your
monitoring system somewhere else. Have this one just monitor the
availability of your services from an outside perspective. Are you
pingable? Are the ports for your applications open? Can a login page be
retrieved? If not, shout via email.&lt;/p&gt;
&lt;p&gt;From now on, your main monitoring system gets a new monitor for every
machine you put into service, and new alerts for every new service you
run, internally or externally.&lt;/p&gt;
&lt;p&gt;Now you can detect changes. You need to track changes. On a reliable
server machine with lots of disk space, install your version tracking
system. On that or a similar machine, install a web server that can host
a copy of your preferred operating system’s installation system. And,
also, multiple copies of the complete repository of external software.
Why so much space? Someday you will upgrade the operating system, and
for some period of time you will need a copy of the old and a copy of
the new. And new is usually larger than old.&lt;/p&gt;
&lt;p&gt;Install a system that can install operating systems on new machines.
That’s usually a combination of DNS, DHCP, PXE, and a PXE-boot menu.
Figure out how you want to name machines now. Figure out how you will
handle expansion in the future. Come up with a flexible network routing
and address allocation policy that is also reasonably efficient.
Remember that humans like unique names for things that they depend on,
but are okay with meaningful+serial names for machines that are
interchangeable.&lt;/p&gt;
&lt;p&gt;You now need a way to take a freshly installed (via PXE) machine and
install and configure specific software on it. Study the available
configuration automation systems (ansible, puppet, chef, bconfig,
cfengine, whatever) and pick one that you can live with for a long time.
Consider carefully whether things should be fundamentally pushed from a
server to a client or pulled from a server by a client. Always prefer
pull for repeated tasks.&lt;/p&gt;
&lt;p&gt;When someone tells you that technology Z doesn’t provide security,
just convenience, believe them.&lt;/p&gt;
&lt;p&gt;You will probably find yourself in need of a database pretty soon. If
you do not have a burning need for a specific database, there are only
three you should consider (as of 2023): sqlite, mariadb (formerly
mysql), and postgresql. Strongly consider using languages with a
built-in database layer that can use all three of these systems.
Consider picking Postgresql and just sticking with it, unless your needs
are very, very simple – in which case, sqlite might be exactly what you
want.&lt;/p&gt;
&lt;p&gt;Learn a major web server: either nginx or apache. They both work
well. I think nginx has a slightly better configuration language, but in
the end you’re going to be deploying configs via that config automation
system.&lt;/p&gt;
&lt;p&gt;For every language you develop in, you must find out what library
management system they have and make a local repo of the libraries that
you use. You only build from the local repo. Only. Ever. Local. When you
want a new version of something you bring it down into your local repo.
Don’t remove the old one, it might be better. After three versions have
gone by, you might not care any more. This defends against someone
poisoning the upstream source – a supply chain attack. It is not a
perfect defense.&lt;/p&gt;
&lt;p&gt;Which systems are ‘development’ and which are ‘production’? They
should look the same, be deployed the same, but you need a gateway
between them. At any moment you should be prepared to repel boarders,
including developers snooping where they should not and clients tugging
on exposed ports. A formal process with a gatekeeper is good, but
remember that codifying and practicing for emergencies makes everyone
feel better on the tragic but inevitable day when disaster strikes.&lt;/p&gt;
&lt;p&gt;You need to know who you are trusting. OS developers? Package
maintainers, library authors, coworkers, contractors, clients? Figure
out the data flows and the trust relationships. Document this. You need
a wiki. Pick one that stores wiki pages in the filesystem, not in a
database: the wiki is going to be a precious documentation source, and
on the day you can’t run the wiki software but you can grep and read the
files, you will thank me.&lt;/p&gt;
&lt;p&gt;Access control. You will need to get into your system remotely, which
means Wireguard or SSH or both, one over the other. You need to manage
special privileges, which means logins on each machine and sudo or doas
privileges. In whatever application you are building, consider your
security model first and every time you make a change. Keep it separate
from your infrastructure access control.&lt;/p&gt;
&lt;p&gt;Now size the backups and make them, automatically and repeatedly. The
rule of backups is this: nobody cares about backups, they only care
about restores. You have three distinct backup targets:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;oops, I deleted/changed a thing. Can I get it back fast?
&lt;ul&gt;
&lt;li&gt;use a snapshotted filesystem, with automatic snapshots (I like
ZFS)&lt;/li&gt;
&lt;li&gt;use a version control system (yes, for its own sake)&lt;/li&gt;
&lt;li&gt;use a self-service per-user backup/restore system (don’t do
this)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;this computer died taking a lot of data with it. Can we restore it
fast?
&lt;ul&gt;
&lt;li&gt;have an onsite backup to disk&lt;/li&gt;
&lt;li&gt;make those backups nightly&lt;/li&gt;
&lt;li&gt;have multiple copies of freshly acquired data&lt;/li&gt;
&lt;li&gt;have an offsite backup of the onsite backup for that day when
everything burns (or the power goes out)&lt;/li&gt;
&lt;li&gt;could you have a live backup server? It costs more. That might be
worthwhile.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;the lawyer/accountant says we need to retain this for years. Can we
do that efficiently?
&lt;ul&gt;
&lt;li&gt;encrypt that data and store the passphrase in three different secure
places.&lt;/li&gt;
&lt;li&gt;offsite is probably good&lt;/li&gt;
&lt;li&gt;keep an onsite catalog of where you put it&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I haven’t mentioned your load balancing, streaming database
replication, second site, internal firewalls, office systems, or
printing. If you can avoid ever buying a printer, do that. If you can
minimize printing, do that. Buy a larger monitor rather than more reams
of paper and toner. Use wired networking for every machine with a fixed
location, and treat your wireless networks as being outside visitors.
Survey the MAC addresses of the wired machines and refuse changes
without authorization. If you handle payments of any kind, read the PCI
documentation and do better than they demand. You can do it: they demand
the minimum that they can cope with.&lt;/p&gt;
&lt;p&gt;Buy more capacity up front. Compare fully depreciated capital assets
versus the cash flow of rented/leased/flexible services, and bet that
you will be in it for the long haul. If you aren’t sure, scale back.
Don’t depend on the whims of giants: buy commodities that you can get
from anywhere.&lt;/p&gt;
&lt;p&gt;There’s always more. This is enough to get you a firm enough
foundation that your organization can survive to find out what you need
to do differently.&lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="devops"/><category term="operations"/><category term="chef"/><category term="infrastructure"/><category term="deployment"/></entry><entry><title>quote of note n=11: copyright</title><link href="https://blog.randomstring.org/2023/07/10/quote-of-note-n-11-copyright/" rel="alternate"/><published>2023-07-10T09:15:58-04:00</published><updated>2023-07-10T09:15:58-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2023-07-10:/2023/07/10/quote-of-note-n-11-copyright/</id><summary type="html">
&lt;blockquote&gt;
&lt;p&gt;Let’s take a second to remember that copyright is the reason ~every
child doesn’t have access to ~every book ever written.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;– &lt;a href="https://news.ycombinator.com/item?id=36660477"&gt;holmesworcester at
Hacker News&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;</summary><content type="html">
&lt;blockquote&gt;
&lt;p&gt;Let’s take a second to remember that copyright is the reason ~every
child doesn’t have access to ~every book ever written.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;– &lt;a
href="https://news.ycombinator.com/item?id=36660477"&gt;holmesworcester at
Hacker News&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="quote"/></entry><entry><title>desktop audio update</title><link href="https://blog.randomstring.org/2023/07/09/desktop-audio-update/" rel="alternate"/><published>2023-07-09T09:19:04-04:00</published><updated>2023-07-09T09:19:04-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2023-07-09:/2023/07/09/desktop-audio-update/</id><summary type="html">
&lt;p&gt;Previously:&lt;/p&gt;
&lt;p&gt;In the office, my desktop feeds an Apple USB-C DAC ($9, no sale
needed) to an optoisolator to a NAD 712 stereo receiver. I bought the
NAD in 1998, new, no discount. It has a 1/4” headphone jack which
automatically disconnects the speaker connections – a pair of Paradigm
Monitor 3 Mark 3s. The usual headphones are Superlux 688b, Truthear
Zeros, TRN V90s, or occasionally Sennheiser 280HDpro. The desktop runs
equalization software (PulseEffects on top of PipeWire) that corrects
each output, though it does have to be selected whenever I change
outputs. The Paradigms were purchased used from a guy driving a white
van, for $200 the pair – an excellent value.&lt;/p&gt;
&lt;p&gt;Now:&lt;/p&gt;
&lt;p&gt;My desktop is connected to a Topping MX3s ($199) via USB. The MX3s is
a tiny box – about one quarter of a standard box of tissues – with a USB
DAC, a headphone amplifier, and a 50W (4 Ohm) stereo amplifier. Yes, for
real speakers. This is basically the same power output as the NAD 712,
which is merely six times the weight and half the power efficiency. The
headphone jack is 1/8” and does not automatically disconnect speakers,
but the front button allows selection of headphones, speakers, or both.
All other bits remain the same.&lt;/p&gt;
&lt;p&gt;It’s really quite nice.&lt;/p&gt;
&lt;p&gt;&lt;a href="/2023/01/06/audio-setups-early-2023/"&gt;previous
description&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;</summary><content type="html">
&lt;p&gt;Previously:&lt;/p&gt;
&lt;p&gt;In the office, my desktop feeds an Apple USB-C DAC ($9, no sale
needed) to an optoisolator to a NAD 712 stereo receiver. I bought the
NAD in 1998, new, no discount. It has a 1/4” headphone jack which
automatically disconnects the speaker connections – a pair of Paradigm
Monitor 3 Mark 3s. The usual headphones are Superlux 688b, Truthear
Zeros, TRN V90s, or occasionally Sennheiser 280HDpro. The desktop runs
equalization software (PulseEffects on top of PipeWire) that corrects
each output, though it does have to be selected whenever I change
outputs. The Paradigms were purchased used from a guy driving a white
van, for $200 the pair – an excellent value.&lt;/p&gt;
&lt;p&gt;Now:&lt;/p&gt;
&lt;p&gt;My desktop is connected to a Topping MX3s ($199) via USB. The MX3s is
a tiny box – about one quarter of a standard box of tissues – with a USB
DAC, a headphone amplifier, and a 50W (4 Ohm) stereo amplifier. Yes, for
real speakers. This is basically the same power output as the NAD 712,
which is merely six times the weight and half the power efficiency. The
headphone jack is 1/8” and does not automatically disconnect speakers,
but the front button allows selection of headphones, speakers, or both.
All other bits remain the same.&lt;/p&gt;
&lt;p&gt;It’s really quite nice.&lt;/p&gt;
&lt;p&gt;&lt;a href="/2023/01/06/audio-setups-early-2023/"&gt;previous
description&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="amplifier"/><category term="dac"/><category term="sound"/></entry><entry><title>sacrificial jacks</title><link href="https://blog.randomstring.org/2023/06/28/sacrificial-jacks/" rel="alternate"/><published>2023-06-28T13:43:54-04:00</published><updated>2023-06-28T13:43:54-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2023-06-28:/2023/06/28/sacrificial-jacks/</id><summary type="html">
&lt;p&gt;If you have some sort of data or power cable that you tend to plug
and unplug frequently, consider putting a sacrificial extender cable in
between. The cost of replacing a jack on a motherboard or other fixed
device is pretty high; the cost of replacing a plug on a device is often
similar to the cost of the device in the first place.&lt;/p&gt;
&lt;p&gt;For a headphone connection, for example, you can get a 6” extender
for a cost less than the shipping. USB extensions are a little trickier
- you need to match a bunch of different characteristics, but pretty
reasonably priced when available. Power plug extensions are cheap, but
it may take a little while to find one &lt;em&gt;short&lt;/em&gt; enough to be
reasonable.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;</summary><content type="html">
&lt;p&gt;If you have some sort of data or power cable that you tend to plug
and unplug frequently, consider putting a sacrificial extender cable in
between. The cost of replacing a jack on a motherboard or other fixed
device is pretty high; the cost of replacing a plug on a device is often
similar to the cost of the device in the first place.&lt;/p&gt;
&lt;p&gt;For a headphone connection, for example, you can get a 6” extender
for a cost less than the shipping. USB extensions are a little trickier
- you need to match a bunch of different characteristics, but pretty
reasonably priced when available. Power plug extensions are cheap, but
it may take a little while to find one &lt;em&gt;short&lt;/em&gt; enough to be
reasonable.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="technology"/><category term="cables"/></entry><entry><title>memorializing a prediction</title><link href="https://blog.randomstring.org/2023/06/11/memorializing-a-prediction/" rel="alternate"/><published>2023-06-11T13:38:08-04:00</published><updated>2023-06-11T13:38:08-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2023-06-11:/2023/06/11/memorializing-a-prediction/</id><summary type="html">
&lt;p&gt;I will bet a shiny nickel that in 2028, you will be able to buy newly
made spinning disks and that they will be economically justifiable for
large media collections, backups and archives. Not sure I’d make that
bet for 2033, though.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;</summary><content type="html">
&lt;p&gt;I will bet a shiny nickel that in 2028, you will be able to buy newly
made spinning disks and that they will be economically justifiable for
large media collections, backups and archives. Not sure I’d make that
bet for 2033, though.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="technology"/><category term="future"/><category term="prediction"/></entry><entry><title>how did dial-up ISPs work?</title><link href="https://blog.randomstring.org/2023/06/09/how-did-dial-up-isps-work-/" rel="alternate"/><published>2023-06-09T13:57:37-04:00</published><updated>2023-06-09T13:57:37-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2023-06-09:/2023/06/09/how-did-dial-up-isps-work-/</id><summary type="html">
&lt;p&gt;My wife worked for the first public ISP for several years. My first
job, still in college, was for a local ISP, eventually becoming the head
of all technical operations. And my next job was at a major commercial
ISP, one which leased POPs to AOL among other businesses.&lt;/p&gt;
&lt;p&gt;Here’s how they worked, at a technical and business level:&lt;/p&gt;
</summary><content type="html">
&lt;p&gt;My wife worked for the first public ISP for several years. My first
job, still in college, was for a local ISP, eventually becoming the head
of all technical operations. And my next job was at a major commercial
ISP, one which leased POPs to AOL among other businesses.&lt;/p&gt;
&lt;p&gt;Here’s how they worked, at a technical and business level:&lt;/p&gt;

&lt;p&gt;Every aspect of an ISP, economic and technological, is based on the
ability of IP connections to time-share multiple connections by
packetizing them. Consider every point-to-point network connection as a
train track populated by packets, train cars that always move at the
speed limit to the other end of the track, where the sign on the front
of the car is read by the stationmaster, who selects a route for the
next leg of each car’s journey.&lt;/p&gt;
&lt;p&gt;The stationmaster doesn’t care whether all the cars are going to the
same destination or not. If the station only has three tracks, then
every car arriving on track 1 is headed out on 2 or 3; every car coming
in on 2 is going out on 1 or 3. Which one should be selected? That’s up
to the sign on the car and the stationmaster’s policy.&lt;/p&gt;
&lt;p&gt;A minimally viable ISP in 1994 bought a T1 line to another, larger,
ISP, who would agree to route all their packets. This is called “buying
transit”. That gets you 1.5 megabits per second in each direction. The
T1 terminates in a modem-like piece of equipment called a CSU/DSU, which
was usually attached via a high-speed (for the time) V.35 serial
connection to a router – often a Cisco 25xx series 1U device. Some of
them had interface cards that had all the functions of the CSU/DSU built
in, and so the T1 would go directly into the router. Integration is nice
– it guarantees compatibility among the integrated components, takes up
less space, improves reliability, and usually uses less power and
therefore generates less heat.&lt;/p&gt;
&lt;p&gt;That router would talk via 10Mb/s ethernet - wow, fast! - to the
local equipment, which would include a server running
authentication/authorization software (based on the RADIUS protocol,
usually), a local mail server, perhaps a local FTP server, and, for most
of that period, a local USENET server. Finally, we have the equipment to
allow clients to log in: a bank of telephone lines from the local phone
company, each attached to a modem, which was connected to an RS232
serial line to a terminal server – that is, a computer with a lot of
serial ports. The terminal server would offer a terminal connection to a
local computer, or a SLIP connection, or a PPP (point-to-point protocol)
connection, and whichever of these was available would be connected over
the local Ethernet.&lt;/p&gt;
&lt;p&gt;So: clients would dial in on a phone number (a roll-over number was
an arrangement by which the telco would connect inbound calls on one
number to whichever line was next in sequence, until they were all busy
at once), negotiate with the modems, authenticate for a PPP session, and
then send and receive packets.&lt;/p&gt;
&lt;p&gt;Every packet that stayed local to the ISP was an economic win for the
ISP, because local packets weren’t using up the valuable commodity of
the general Internet connection. That’s why there would be local mail
and Usenet and FTP – and eventually local web servers. Typically, a
high-quality ISP could run at a ratio of 5 or 8 to 1 – 5 to 8 times the
bandwidth on modems compared to the upstream bandwidth. A few years
later, Akamai’s line of business was in convincing ISPs to give them
space and power for free in their POPs or datacenters, using the clever
argument that every web request answered by an Akamai cache server was a
request not using valuable Internet transit. Meanwhile, Akamai’s clients
appeared to be ridiculously fast to anyone asking for their content from
an Akamai-affiliated ISP. (Oh, yes, after I worked for the big ISP I
worked for Akamai.) The hard part of running an ISP in the first few
years was letting people know you existed – newspaper ads, physical
bulletin board ads, billboard ads, radio spots – you needed to invest in
these things.&lt;/p&gt;
&lt;p&gt;A few years later, Lucent Technology, who had been spun off from
AT&amp;amp;T, came up with an all-in-one box called the AscendMAX. In one
medium-large box, an ISP could have every component of a POP:
efficiently wired telephone circuits going to built-in modems, a
high-speed transit connection, routing services, and authentication
(usually reflected back to central authentication servers).&lt;/p&gt;
&lt;p&gt;Then Lucent outsmarted themselves.&lt;/p&gt;
&lt;p&gt;There was an ISP boom. Everyone was offering a variation on $20/month
all-you-can-eat dialup service. To expand to a new location, you just
needed to arrange for some space in a rack, a T3/DS3 backhaul to your
core networks, a set of T1/DS1 lines for dialup, and one or more
AscendMAX boxes to connect everything together. Lucent was selling
thousands. Lucent’s salespeople were getting rich on commissions, and
pretty soon they started offering financing for ISPs which were clearly
going to be making money hand-over-fist forever. The financing was at a
nice interest rate, too, and the business was solid, so Lucent’s only
collateral was the AscendMAX itself. If an ISP failed, well, some other
ISP would happily buy the repossessed, refurbished, discounted equipment
from Lucent. And all this went so well that the stock price soared, and
some funny accounting tricks were played to make it go even higher.&lt;/p&gt;
&lt;p&gt;Then it crashed, and Lucent found themselves the proud owners of
thousands of repo’d AscendMAX units, and no buyers. See the Wikipedia
article for details.&lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="technology"/><category term="ISP"/><category term="internet"/><category term="business"/></entry><entry><title>koreader is not perfect, but it is very good</title><link href="https://blog.randomstring.org/2023/06/08/koreader-is-not-perfect-but-it-is-very-good/" rel="alternate"/><published>2023-06-08T21:55:02-04:00</published><updated>2023-06-08T21:55:02-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2023-06-08:/2023/06/08/koreader-is-not-perfect-but-it-is-very-good/</id><summary type="html">
&lt;p&gt;&lt;a href="https://koreader.rocks/"&gt;koreader&lt;/a&gt; is an open source
ebook reader application originally designed to replace the firmware on
Kobo E-Ink reading tablets, and then ported to run on Amazon Kindle,
Android, PocketBook, and Remarkable devices. Under Android it runs as a
normal application. It also runs as an application in Linux and
(reportedly) in MacOS. It reads basically all non-DRM book formats. It
is highly configurable and featureful, though not infinitely so.&lt;/p&gt;
&lt;p&gt;If you have an OPDS-speaking book server, it can search and download
from that. If you want to run a tiny sync server for keeping track of
which page you are on across multiple koreaders, that’s pretty easy.&lt;/p&gt;
&lt;p&gt;If it ran smoothly on MacOS and I could get it to work on my
semi-antiquated Chromebook, it would be even closer to perfect. Sadly,
it doesn’t – yet.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;</summary><content type="html">
&lt;p&gt;&lt;a href="https://koreader.rocks/"&gt;koreader&lt;/a&gt; is an open source
ebook reader application originally designed to replace the firmware on
Kobo E-Ink reading tablets, and then ported to run on Amazon Kindle,
Android, PocketBook, and Remarkable devices. Under Android it runs as a
normal application. It also runs as an application in Linux and
(reportedly) in MacOS. It reads basically all non-DRM book formats. It
is highly configurable and featureful, though not infinitely so.&lt;/p&gt;
&lt;p&gt;If you have an OPDS-speaking book server, it can search and download
from that. If you want to run a tiny sync server for keeping track of
which page you are on across multiple koreaders, that’s pretty easy.&lt;/p&gt;
&lt;p&gt;If it ran smoothly on MacOS and I could get it to work on my
semi-antiquated Chromebook, it would be even closer to perfect. Sadly,
it doesn’t – yet.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;
</content><category term="misc"/><category term="linux"/><category term="technology"/><category term="software"/><category term="books"/><category term="reading"/></entry><entry><title>considerations for ebook reader interfaces</title><link href="https://blog.randomstring.org/2023/06/06/considerations-for-ebook-reader-interfaces/" rel="alternate"/><published>2023-06-06T12:20:33-04:00</published><updated>2023-06-06T12:20:33-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2023-06-06:/2023/06/06/considerations-for-ebook-reader-interfaces/</id><summary type="html">
&lt;p&gt;It’s a nice title, but what this &lt;em&gt;really&lt;/em&gt; is, is my personal
preferences on interfaces for reading fiction. Everyone is allowed to
have preferences. Mine are special because I read a lot – on average, a
little over 200 books each year… &lt;/p&gt;</summary><content type="html">
&lt;p&gt;It’s a nice title, but what this &lt;em&gt;really&lt;/em&gt; is, is my personal
preferences on interfaces for reading fiction. Everyone is allowed to
have preferences. Mine are special because I read a lot – on average, a
little over 200 books each year… &lt;/p&gt;
&lt;p&gt;Statista (no link because they are essentially a news site, just one
with a longer news cycle and an odd focus) suggests that 3 in 4
Americans read at least one book per year, with average expenditure just
over $100. They also claim that the recreational book market in the USA
is about $25 billion, which is consistent - a third of a billion
Americans, times 100, times 0.75. $100 gets you four new hardcovers, or
six first-rank ebooks, or roughly a year of a Kindle Unlimited
subscription when it goes on sale, or between ten and a hundred
regularly priced ebooks. I will not abide by DRM and assert that
anything I get to read, I get to store in memory (internal or external)
as long as I can.&lt;/p&gt;
&lt;p&gt;So, the first point: format. The best and most widespread current
format is EPUB, which is a slightly formalized version of wrapping HTML
and CSS with some naming conventions in a ZIP-compressed archive. This
is the dominant format and anything else should be convertible into it,
with two exceptions.&lt;/p&gt;
&lt;p&gt;Comic books are best wrapped in the CBR or CBZ formats, which are RAR
or ZIP archives of JPEG or PNG images, named in page order. Simple and
effective.&lt;/p&gt;
&lt;p&gt;Books which depend on precise layout – typically technical
illustrations or art books – do best in the ridiculously overcomplicated
PDF, which is optimized for print but can be displayed on screen.&lt;/p&gt;
&lt;p&gt;The reading of comics and art books is, as far as I’m concerned, a
different category than reading fiction. It’s fine by me if the software
is similarly specialized – I don’t demand a unified reader. Hardware
which is adequate for reading fiction is not necessarily adequate for
viewing comics; a good comics viewer may be unwieldy for fiction on the
go. (An A4-sized display is great for comics or art, but tends to be as
heavy as a lightweight laptop (or, indeed, functionally is a lightweight
laptop); an A5-sized display is about the same as a mid-sized hardcover
page, and an A6 approximates a paperback page – and is achievable on a
large smartphone.)&lt;/p&gt;
&lt;p&gt;Here’s what I won’t compromise on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;display density of 200 dpi or higher&lt;/li&gt;
&lt;li&gt;fast page turning. How fast? Fast enough that I don’t notice
it.&lt;/li&gt;
&lt;li&gt;lighting for reading in dim and dark circumstances&lt;/li&gt;
&lt;li&gt;a readable dark page with light letters, for nighttime reading&lt;/li&gt;
&lt;li&gt;controllable brightness&lt;/li&gt;
&lt;li&gt;the typeface I like (Palatino or a close relative) in the size that
I want&lt;/li&gt;
&lt;li&gt;with line spacing under my control (I typically want 0.85 to
1.2)&lt;/li&gt;
&lt;li&gt;nearly everything on screen is the book itself - one status line is
good; I prefer footers to headers.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Features that I like but don’t need:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;an OPDS client to fetch books from my server&lt;/li&gt;
&lt;li&gt;a sync client to keep track of the last page read on each book
across devices&lt;/li&gt;
&lt;li&gt;one-touch access to the table of contents&lt;/li&gt;
&lt;li&gt;reprogrammable/customizable menus and gestures&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Features that I find nearly useless:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a book-cover based file browser&lt;/li&gt;
&lt;li&gt;timers&lt;/li&gt;
&lt;li&gt;dictionary lookups&lt;/li&gt;
&lt;li&gt;multiple bookmarks per book&lt;/li&gt;
&lt;li&gt;note-taking&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Features that I need to turn off if they exist:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;speed-reading gizmos&lt;/li&gt;
&lt;li&gt;animated page flips&lt;/li&gt;
&lt;li&gt;text-to-speech output (obviously useful for other people)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Screens:&lt;/p&gt;
&lt;p&gt;OLEDs are the best in the dark. All modern displays are pretty good
in indoor moderate lighting. E-Ink is only superior in bright sunlight,
and you never get color (or at least good color) with E-Ink.&lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="technology"/><category term="ebook"/><category term="user interface"/><category term="rant"/></entry><entry><title>minimal due diligence</title><link href="https://blog.randomstring.org/2023/05/10/minimal-due-diligence/" rel="alternate"/><published>2023-05-10T10:40:48-04:00</published><updated>2023-05-10T10:40:48-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2023-05-10:/2023/05/10/minimal-due-diligence/</id><summary type="html">
&lt;p&gt;‘Due diligence’ is the business terminology for taking care of
details when you enter into a contract. Those details include very basic
things like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;does the seller exist?&lt;/li&gt;
&lt;li&gt;do they have a history of fraud?&lt;/li&gt;
&lt;li&gt;are they on a list of terrorist supporters? (yes, really)…
&lt;/li&gt;&lt;/ul&gt;</summary><content type="html">
&lt;p&gt;‘Due diligence’ is the business terminology for taking care of
details when you enter into a contract. Those details include very basic
things like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;does the seller exist?&lt;/li&gt;
&lt;li&gt;do they have a history of fraud?&lt;/li&gt;
&lt;li&gt;are they on a list of terrorist supporters? (yes, really)…
&lt;/li&gt;
&lt;li&gt;are the terms of payment reasonable?&lt;/li&gt;
&lt;li&gt;is it likely that the seller can provide what they claim to be
selling?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When you’re looking into buying a whole company, due diligence goes
deeper into checking the financial health and operational practices of
the business you are buying – and on the other hand, the seller will
want to know that you have the money or financing at hand, at the
least.&lt;/p&gt;
&lt;p&gt;It’s usually a good idea to apply the same sort of discovery or
estimation to your own clever ideas, especially if your new plan will
involve the expenditure of a significant amount of time or money.&lt;/p&gt;
&lt;p&gt;As an example, I was reading a blog post about running a set of
repository mirrors for open source projects, when I was struck with the
inspiration that I could run my own mirror for the house. This is not
immediately completely insane – I/we run mirrors at work for projects
that we use. But it did occur to me that I should do some basic due
diligence before committing.&lt;/p&gt;
&lt;p&gt;A simple pro/con list is a good start:&lt;/p&gt;
&lt;table&gt;
&lt;caption&gt;house mirror pros/cons&lt;/caption&gt;
&lt;thead&gt;
&lt;tr class="header"&gt;
&lt;th style="text-align: center;"&gt;PRO&lt;/th&gt;
&lt;th style="text-align: center;"&gt;CON&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr class="odd"&gt;
&lt;td style="text-align: center;"&gt;fast access to packages&lt;/td&gt;
&lt;td style="text-align: center;"&gt;uses lots of disk space&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="even"&gt;
&lt;td style="text-align: center;"&gt;less external bandwidth&lt;/td&gt;
&lt;td style="text-align: center;"&gt;reconfigure machines&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="odd"&gt;
&lt;td style="text-align: center;"&gt;allows install/upgrades&lt;/td&gt;
&lt;td style="text-align: center;"&gt;can’t update mirror&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="even"&gt;
&lt;td style="text-align: center;"&gt;without external net&lt;/td&gt;
&lt;td style="text-align: center;"&gt;without external net&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="odd"&gt;
&lt;td style="text-align: center;"&gt;&lt;/td&gt;
&lt;td style="text-align: center;"&gt;more stuff to maintain&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Given a 5-10x reduction in bandwidth for package updates, and that I
don’t pay for bandwidth that way, versus a large increase in disk
storage and stuff to maintain, I’ve decided not to bother.&lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="business"/><category term="making decisions"/></entry><entry><title>models of language vs models of reality</title><link href="https://blog.randomstring.org/2023/03/20/models-of-language-vs-models-of-reality/" rel="alternate"/><published>2023-03-20T19:01:22-04:00</published><updated>2023-03-20T19:01:22-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2023-03-20:/2023/03/20/models-of-language-vs-models-of-reality/</id><summary type="html">
&lt;p&gt;It is essential to realize that these technologies [large language
models, currently called AI] do not answer questions about a model of
reality, but about a model of language.&lt;/p&gt;
&lt;p&gt;The utterances that they produce are statistically good at being
plausible conversation related to the input prompt. Any relationship to
reality is basically coincidental. Our tendency to view it as meaningful
is a product of anthropomorphism and the social conventions of our
culture.&lt;/p&gt;
&lt;p&gt;People who use tools are responsible for their actions.&lt;/p&gt;
&lt;p&gt;(I first wrote a slightly altered version of the above on the XBBN
mailing list on January 30, 2023, in response to a query from Candy
Sidner.)&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;</summary><content type="html">
&lt;p&gt;It is essential to realize that these technologies [large language
models, currently called AI] do not answer questions about a model of
reality, but about a model of language.&lt;/p&gt;
&lt;p&gt;The utterances that they produce are statistically good at being
plausible conversation related to the input prompt. Any relationship to
reality is basically coincidental. Our tendency to view it as meaningful
is a product of anthropomorphism and the social conventions of our
culture.&lt;/p&gt;
&lt;p&gt;People who use tools are responsible for their actions.&lt;/p&gt;
&lt;p&gt;(I first wrote a slightly altered version of the above on the XBBN
mailing list on January 30, 2023, in response to a query from Candy
Sidner.)&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="technology"/><category term="philosophy"/><category term="AI"/></entry><entry><title>quote of note - history of WWW tools</title><link href="https://blog.randomstring.org/2023/03/07/quote-of-note-history-of-www-tools/" rel="alternate"/><published>2023-03-07T08:18:32-05:00</published><updated>2023-03-07T08:18:32-05:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2023-03-07:/2023/03/07/quote-of-note-history-of-www-tools/</id><summary type="html">
&lt;blockquote&gt;
&lt;p&gt;The thirty year history of the World Wide Web seems to be one of
barely glomming together a relatively robust, relatively well maintained
set of information sources and then destroying them at the first sign of
a company offering a slicker product… which then spectacularly dies.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;– Jason Scott &lt;span class="citation" data-cites="textfiles"&gt;@textfiles [twitter.com]&lt;/span&gt; June 28, 2022&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;</summary><content type="html">
&lt;blockquote&gt;
&lt;p&gt;The thirty year history of the World Wide Web seems to be one of
barely glomming together a relatively robust, relatively well maintained
set of information sources and then destroying them at the first sign of
a company offering a slicker product… which then spectacularly dies.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;– Jason Scott &lt;span class="citation"
data-cites="textfiles"&gt;@textfiles [twitter.com]&lt;/span&gt; June 28, 2022&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="quote"/><category term="technology"/></entry><entry><title>fingerprints</title><link href="https://blog.randomstring.org/2023/03/06/fingerprints/" rel="alternate"/><published>2023-03-06T09:18:37-05:00</published><updated>2023-03-06T09:18:37-05:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2023-03-06:/2023/03/06/fingerprints/</id><summary type="html">
&lt;p&gt;I have had phones with fingerprint unlocks on the back, side and
in-screen.&lt;/p&gt;
&lt;p&gt;Back is best.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;</summary><content type="html">
&lt;p&gt;I have had phones with fingerprint unlocks on the back, side and
in-screen.&lt;/p&gt;
&lt;p&gt;Back is best.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;
</content><category term="misc"/><category term="technology"/><category term="phones"/><category term="privacy"/><category term="rant"/></entry><entry><title>an opinionated tmux config</title><link href="https://blog.randomstring.org/2023/03/03/an-opinionated-tmux-config/" rel="alternate"/><published>2023-03-03T11:56:43-05:00</published><updated>2023-03-03T11:56:43-05:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2023-03-03:/2023/03/03/an-opinionated-tmux-config/</id><summary type="html">
&lt;p&gt;I switched from GNU &lt;code&gt;screen&lt;/code&gt; to &lt;code&gt;tmux&lt;/code&gt; when I
discovered that the minor bug I had been experiencing for years had been
reported several times and always dismissed with “can’t reproduce”.&lt;/p&gt;
&lt;p&gt;It took about 20 minutes to properly switch over, and another day or
two to discover my own biases and desires. What follows is a discussion
of my own preferences in &lt;code&gt;tmux&lt;/code&gt; config.&lt;/p&gt;
</summary><content type="html">
&lt;p&gt;I switched from GNU &lt;code&gt;screen&lt;/code&gt; to &lt;code&gt;tmux&lt;/code&gt; when I
discovered that the minor bug I had been experiencing for years had been
reported several times and always dismissed with “can’t reproduce”.&lt;/p&gt;
&lt;p&gt;It took about 20 minutes to properly switch over, and another day or
two to discover my own biases and desires. What follows is a discussion
of my own preferences in &lt;code&gt;tmux&lt;/code&gt; config.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# I don&amp;#39;t split windows. Splitting windows into panes is not for me.
unbind %
unbind \#
unbind \&amp;quot;
# flip back and forth between two windows with prefix-spacebar
bind Space last-window
# fix default binding for changing to window 10 instead of 0
bind 0 selectw -t:10
#bind -n C-Left previous-window
#bind -n C-Right next-window
bind -n M-Left previous-window
bind -n M-Right next-window&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;When I work from home, I open up an ssh window to work and run tmux
over on my server there. This effectively embeds a tmux inside a tmux.
Alt/Meta is inboard of Control on my keyboards, so I use raw ctrl-arrows
to move between windows on the outside/home tmux and raw meta-arrows to
move around the inside/work tmux.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;setw -g automatic-rename off&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Turns out that automatic renaming never does what I want – so I name
everything manually.&lt;/p&gt;
&lt;p&gt;And that’s it. Nothing else I need, so far, is particularly
weird.&lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="technology"/><category term="tmux"/><category term="screen"/></entry><entry><title>minimalism is an affectation of the wealthy</title><link href="https://blog.randomstring.org/2023/02/23/minimalism-is-an-affectation-of-the-wealthy/" rel="alternate"/><published>2023-02-23T10:43:06-05:00</published><updated>2023-02-23T10:43:06-05:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2023-02-23:/2023/02/23/minimalism-is-an-affectation-of-the-wealthy/</id><summary type="html">
&lt;p&gt;People use tools to get things done. Tools vary in capabilities.
Using a perfect or great tool is more comfortable, takes less time, or
does a better job than using a good-enough tool. Using a poor tool
incurs penalties in time, comfort and/or quality.&lt;/p&gt;
&lt;p&gt;Minimalism is, in the current parlance, a “flex”. Minimalism is a
statement that you can afford to prefer a non-optimal set of tools in
order to satisfy an aesthetic fad.&lt;/p&gt;
&lt;p&gt;-30-&lt;/p&gt;
</summary><content type="html">
&lt;p&gt;People use tools to get things done. Tools vary in capabilities.
Using a perfect or great tool is more comfortable, takes less time, or
does a better job than using a good-enough tool. Using a poor tool
incurs penalties in time, comfort and/or quality.&lt;/p&gt;
&lt;p&gt;Minimalism is, in the current parlance, a “flex”. Minimalism is a
statement that you can afford to prefer a non-optimal set of tools in
order to satisfy an aesthetic fad.&lt;/p&gt;
&lt;p&gt;-30-&lt;/p&gt;

</content><category term="misc"/><category term="blog"/><category term="technology"/><category term="philosophy"/><category term="linux"/></entry><entry><title>lessons from usenet</title><link href="https://blog.randomstring.org/2023/01/25/lessons-from-usenet/" rel="alternate"/><published>2023-01-25T10:17:23-05:00</published><updated>2023-01-25T10:17:23-05:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2023-01-25:/2023/01/25/lessons-from-usenet/</id><summary type="html">
&lt;p&gt;Modern social media could have learned some useful things from
Usenet. Mostly, they haven’t.&lt;/p&gt;
&lt;p&gt;Here are some of those lessons:&lt;/p&gt;
</summary><content type="html">
&lt;p&gt;Modern social media could have learned some useful things from
Usenet. Mostly, they haven’t.&lt;/p&gt;
&lt;p&gt;Here are some of those lessons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reverse chronological feeds (most recent first) are a disaster.&lt;/li&gt;
&lt;li&gt;Proper threading maintains context&lt;/li&gt;
&lt;li&gt;Every discussion group needs a nominal topic, even if that’s
“friendly conversation”&lt;/li&gt;
&lt;li&gt;Groups can be formally or informally moderated, but when there is no
moderation, the group explodes into chaos&lt;/li&gt;
&lt;li&gt;Every user needs an obvious and easy killfile&lt;/li&gt;
&lt;li&gt;No mercy for spammers, ever&lt;/li&gt;
&lt;li&gt;Good communities form around a nucleus of people who write good
things&lt;/li&gt;
&lt;li&gt;Persistent pseudonyms become real people. Anonymous and drive-by
posters don’t make good neighbors.&lt;/li&gt;
&lt;/ul&gt;
</content><category term="misc"/><category term="blog"/><category term="technology"/><category term="usenet"/><category term="social media"/></entry><entry><title>audio setups early 2023</title><link href="https://blog.randomstring.org/2023/01/06/audio-setups-early-2023/" rel="alternate"/><published>2023-01-06T10:01:20-05:00</published><updated>2023-01-06T10:01:20-05:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2023-01-06:/2023/01/06/audio-setups-early-2023/</id><summary type="html">
&lt;p&gt;Of interest to highly technical budget-quality optimizing folks,
mostly.&lt;/p&gt;
</summary><content type="html">
&lt;p&gt;Of interest to highly technical budget-quality optimizing folks,
mostly.&lt;/p&gt;

&lt;p&gt;This is how I’m dealing with music playback in the house as of
January 2023. My goals are reasonably high-quality music at a long-term
reasonable price, while avoiding paid streaming services.&lt;/p&gt;
&lt;p&gt;First up, storage. Music (and local video) is stored on the media
center box, a Pentium G4560 (2 cores, 4 threads) PC with 8GB RAM and
4x3TB disks in RAID10. All the machines I’m going to mention are running
Debian Stable. Disk space is usually at a premium, so at some point I
will likely migrate to a 2 disk ZFS mirror, probably around 14-16TB
usable. Music is largely ripped from CDs at 320Kb/s MP3 or FLAC; some is
purchased digitally if available in those formats.&lt;/p&gt;
&lt;p&gt;The media center exports a music filesystem via read-only NFS, and
runs Owntone, a web-interface music player/server which can play to
Chromecast Audio, Apple Airplay, and anything which can play an MP3
stream – Firefox and Chrome certainly can. Owntone transcodes to 320Kb/s
MP3 as necessary.&lt;/p&gt;
&lt;p&gt;Hooked to this via HDMI is a Yamaha RX-V675 7.1 channel home theater
receiver, which feeds main speakers, center, surround, and front
presence/elevation speakers. It has measured room equalization, albeit
not the most capable on the market. Main speakers are PSB Century 800i
(2.5 way towers, 1” dome over 2x 8” woofers, front ported, ports
stuffed) sitting on Monoprice 12” powered woofers getting the same
signal. After equalization, this can go down to 20Hz at 90dB (1m). There
is also a PSB Alpha Subsonic 5 subwoofer for movie LFE. All of these
things were bought new but with fairly large sale discounts.&lt;/p&gt;
&lt;p&gt;In the living room is an old laptop with a SMSL Sanskrit 10th MkII
DAC feeding Kali LP8v2 powered monitors. The DAC was on sale for
half-price ($70) and the speakers were on sale for $200 apiece down from
$250. The laptop uses equalization software when playing from the
console/NFS, but not from the Shairport-sync remote client.&lt;/p&gt;
&lt;p&gt;In my bedroom is a Google Chromecast Audio (sadly discontinued, $25
when new) connected to JBL LSR305x powered monitors, bought on sale from
MassDrop at $170 for the pair.&lt;/p&gt;
&lt;p&gt;In the office, my desktop feeds an Apple USB-C DAC ($9, no sale
needed) to an optoisolator to a NAD 712 stereo receiver. I bought the
NAD in 1998, new, no discount. It has a 1/4” headphone jack which
automatically disconnects the speaker connections – a pair of Paradigm
Monitor 3 Mark 3s. The usual headphones are Superlux 688b, Truthear
Zeros, TRN V90s, or occasionally Sennheiser 280HDpro. The desktop runs
equalization software (PulseEffects on top of PipeWire) that corrects
each output, though it does have to be selected whenever I change
outputs. The Paradigms were purchased used from a guy driving a white
van, for $200 the pair – an excellent value.&lt;/p&gt;
&lt;p&gt;Finally, the dining room has a computer hooked up to a TV and
Cambridge SoundWorks PCWorks 2.1 system. PCWorks is (was) an amazing
product: Two 2” full-range speakers in little plastic cubes and a 4”
mid-woofer in a bizarre plastic bandpass box along with a 9W amplifier.
It is absolutely an upgrade over any TV’s built-in sound, nicely
adequate for background music, and ridiculously high value-to-price at
$50 or so.&lt;/p&gt;
&lt;p&gt;Currently unused but known to be functional:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a Yamaha RXV990 receiver (pre-HDMI era) with useful 2.1 capabilities
and mediocre 5.1&lt;/li&gt;
&lt;li&gt;a NAD T750 receiver (pre-HDMI) with similar capabilities&lt;/li&gt;
&lt;li&gt;2 Paradigm Esprit v2 narrow towers&lt;/li&gt;
&lt;li&gt;2 Paradigm MiniMonitor Mark 3&lt;/li&gt;
&lt;li&gt;2 PSB Century 400i bookshelf speakers&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I expect some version of these to be gifted to the kids when they
move out permanently.&lt;/p&gt;
</content><category term="misc"/><category term="blog"/></entry><entry><title>uphill battle</title><link href="https://blog.randomstring.org/2022/12/09/uphill-battle/" rel="alternate"/><published>2022-12-09T13:25:40-05:00</published><updated>2022-12-09T13:25:40-05:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2022-12-09:/2022/12/09/uphill-battle/</id><summary type="html">
&lt;p&gt;I am aware that this trick never works (cf ‘Hacker’). Still, I need
to try.&lt;/p&gt;
&lt;p&gt;Please stop using the terms AI, Artificial Intelligence, and even ML
and Machine Learning. In the same spirit as “the cloud is just someone
else’s computer”, please regard all these systems as Statistical
Correlation Networks, SCNs.&lt;/p&gt;
&lt;p&gt;When you read, hear, or say AI you carry the baggage of a hundred
years of science fiction stories. You will then make mistakes in
reasoning about SCNs.&lt;/p&gt;
&lt;p&gt;Yes, it is amazing what SCNs can do, but they aren’t people you can
teach and reason with.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;</summary><content type="html">
&lt;p&gt;I am aware that this trick never works (cf ‘Hacker’). Still, I need
to try.&lt;/p&gt;
&lt;p&gt;Please stop using the terms AI, Artificial Intelligence, and even ML
and Machine Learning. In the same spirit as “the cloud is just someone
else’s computer”, please regard all these systems as Statistical
Correlation Networks, SCNs.&lt;/p&gt;
&lt;p&gt;When you read, hear, or say AI you carry the baggage of a hundred
years of science fiction stories. You will then make mistakes in
reasoning about SCNs.&lt;/p&gt;
&lt;p&gt;Yes, it is amazing what SCNs can do, but they aren’t people you can
teach and reason with.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="technology"/><category term="people"/><category term="terminology"/><category term="AI"/></entry><entry><title>new phone minireview</title><link href="https://blog.randomstring.org/2022/11/11/new-phone-minireview/" rel="alternate"/><published>2022-11-11T10:03:24-05:00</published><updated>2022-11-11T10:03:24-05:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2022-11-11:/2022/11/11/new-phone-minireview/</id><summary type="html">
&lt;p&gt;Being a mini-review of the Asus Zenfone 9.&lt;/p&gt;
&lt;p&gt;(It’s mini because the phone is the smallest current flagship.)&lt;/p&gt;
&lt;p&gt;Previous phone: OnePlus 7Pro, a 6.7” screen with rounded edges and an
enormous battery life. This one has a 5.9” flat screen. Flat is much
better. The manufacturers decided that rounded edges were “premium”, so
they put it on the highest end phones… making them less usable and more
prone to weird glare and distortion. &lt;/p&gt;</summary><content type="html">
&lt;p&gt;Being a mini-review of the Asus Zenfone 9.&lt;/p&gt;
&lt;p&gt;(It’s mini because the phone is the smallest current flagship.)&lt;/p&gt;
&lt;p&gt;Previous phone: OnePlus 7Pro, a 6.7” screen with rounded edges and an
enormous battery life. This one has a 5.9” flat screen. Flat is much
better. The manufacturers decided that rounded edges were “premium”, so
they put it on the highest end phones… making them less usable and more
prone to weird glare and distortion. &lt;/p&gt;
&lt;p&gt;How much smaller is it? Let’s ignore the crude physical dimensions
and go with this: at a comfortable reading width, the OnePlus shows 35
lines of book text, and the Asus shows 30 lines of the same text. I
guess I’ll be flipping pages 14% more often.&lt;/p&gt;
&lt;p&gt;In exchange, the Asus is much lighter and much more comfortable to
hold one-handed… and I have big hands. Not NBA big, but proportionate to
my height, which is still somewhere in the 99th percentile.&lt;/p&gt;
&lt;p&gt;It’s fast, but all flagship phones are fast, even the ones that are
three years old. It has cameras, but all the phones have cameras. Unless
you are a camera person, it will be enough.&lt;/p&gt;
&lt;p&gt;It is reported to have excellent battery life. It claims to be
waterproof (IP68), but I note that the warranty specifically disclaims
water damage. Hmph. And it has a headphone jack, which is awesome. When
did it become awesome? About five years ago, when flagship phones
stopped having them because you were expected to buy expensive
low-quality wireless earbugs which would then need to be recharged and
someday become more toxic waste.&lt;/p&gt;
&lt;p&gt;Feature that I miss from the OnePlus that nobody is selling this
year: instead of having a stupid cut-out hole in the screen for the
front camera, the OnePlus had a motorized drawer for the front camera. I
tested it about fifty times and used it about three times. Much nicer.
Bring that back, along with the physical three-way switch for
mute/stun/kill.&lt;/p&gt;
&lt;p&gt;Overall, I think I’m content. But I also think that if I were more
budget constrained, I would be pretty happy with one of Motorola’s
near-flagships instead.&lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="technology"/><category term="phone"/></entry><entry><title>why apple mail products stop sending mail</title><link href="https://blog.randomstring.org/2022/09/02/why-apple-mail-products-stop-sending-mail/" rel="alternate"/><published>2022-09-02T09:49:00-04:00</published><updated>2022-09-02T09:49:00-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2022-09-02:/2022/09/02/why-apple-mail-products-stop-sending-mail/</id><summary type="html">
&lt;p&gt;If you have an Apple Mail client (MacOS, iPhone, whatever) that
recently stopped sending email to some servers, the reason is because
Apple doesn’t play nicely with other products. There is a solution…&lt;/p&gt;
</summary><content type="html">
&lt;p&gt;If you have an Apple Mail client (MacOS, iPhone, whatever) that
recently stopped sending email to some servers, the reason is because
Apple doesn’t play nicely with other products. There is a solution…&lt;/p&gt;

&lt;p&gt;SMTP conversations begin with the client saying HELO (or EHLO) and
identifying their hostname or IP address. Clients that send garbage or
the server’s IP address are spamming tools. Therefore, watching for bad
behavior here is a good anti-spam measure.&lt;/p&gt;
&lt;p&gt;Apple changed their client behavior sometime in the last few months,
and it shows up irregularly as people update their software.&lt;/p&gt;
&lt;p&gt;If you are running a Postfix server, the setting you need is&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;smtpd_helo_restrictions =
        check_helo_access &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Find the postmap database that check_helo_access is using and add a
line like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;smtpclient.apple OK&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;then re-map it and things should start to work.&lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="technology"/><category term="apple"/><category term="mail"/><category term="smtp"/><category term="postfix"/></entry><entry><title>if your tech company is growing, you need in-house recruiters</title><link href="https://blog.randomstring.org/2022/09/02/if-your-tech-company-is-growing-you-need-in-house-recruiters/" rel="alternate"/><published>2022-09-02T07:29:04-04:00</published><updated>2022-09-02T07:29:04-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2022-09-02:/2022/09/02/if-your-tech-company-is-growing-you-need-in-house-recruiters/</id><summary type="html">
&lt;p&gt;If your company is planning on hiring 4-6 technical people a year,
your next hire should be a recruiter. It is probably best if they do not
have experience being a recruiter or a salescritter. Hire someone with a
liberal arts degree or technical communications experience.&lt;/p&gt;
&lt;p&gt;If your company is hiring more than that, why don’t you already have
an in-house recruiter?&lt;/p&gt;
&lt;p&gt;External recruiters are lying spammers. It’s the nature of the
economics: they don’t get paid until they land a candidate, but they
can’t afford to learn enough about your company or the role to get good
candidates, so they need to work in bulk. An external recruiting company
wants 20-30% of first-year salary as a fee. If you’re hiring 5 people a
year, you can afford to pay an internal recruiter the average of their
salaries, which should be quite nice indeed - external recruiters are
paid on commission, which induces feast-or-famine responses and
consequent unethical practices.&lt;/p&gt;
&lt;p&gt;An internal recruiter can talk to your hiring managers, ask
questions, and build trust. An internal recruiter is inherently more
trustworthy to a prospective candidate, too: they can reference the
company’s name from day one, and can offer actual details
immediately.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;</summary><content type="html">
&lt;p&gt;If your company is planning on hiring 4-6 technical people a year,
your next hire should be a recruiter. It is probably best if they do not
have experience being a recruiter or a salescritter. Hire someone with a
liberal arts degree or technical communications experience.&lt;/p&gt;
&lt;p&gt;If your company is hiring more than that, why don’t you already have
an in-house recruiter?&lt;/p&gt;
&lt;p&gt;External recruiters are lying spammers. It’s the nature of the
economics: they don’t get paid until they land a candidate, but they
can’t afford to learn enough about your company or the role to get good
candidates, so they need to work in bulk. An external recruiting company
wants 20-30% of first-year salary as a fee. If you’re hiring 5 people a
year, you can afford to pay an internal recruiter the average of their
salaries, which should be quite nice indeed - external recruiters are
paid on commission, which induces feast-or-famine responses and
consequent unethical practices.&lt;/p&gt;
&lt;p&gt;An internal recruiter can talk to your hiring managers, ask
questions, and build trust. An internal recruiter is inherently more
trustworthy to a prospective candidate, too: they can reference the
company’s name from day one, and can offer actual details
immediately.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="technology"/><category term="jobs"/><category term="recruiters"/></entry><entry><title>can we rebuild Usenet on top of blogs?</title><link href="https://blog.randomstring.org/2022/06/23/can-we-rebuild-usenet-on-top-of-blogs-/" rel="alternate"/><published>2022-06-23T08:28:13-04:00</published><updated>2022-06-23T08:28:13-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2022-06-23:/2022/06/23/can-we-rebuild-usenet-on-top-of-blogs-/</id><summary type="html">
&lt;p&gt;Blogs publish articles, or entries, which are basically the same as
Usenet posts – but there’s no widespread mechanism for grouping and
replying. We can fix that. &lt;/p&gt;</summary><content type="html">
&lt;p&gt;Blogs publish articles, or entries, which are basically the same as
Usenet posts – but there’s no widespread mechanism for grouping and
replying. We can fix that. &lt;/p&gt;
&lt;p&gt;All reputable blog systems produce a URL that yields a full-text RSS
feed. That takes care of publishing. Traditionally, Usenet articles have
headers signalling From, Subject, Newsgroups, and References. From and
Subject aren’t needed – the From is either in the URL or in the blog’s
content, the Subject is in the title or body. Newsgroups is a
super-threading semantic, and might not be needed. Tags could be a
better arrangement, particularly if people agree on some distinct
keywords when they feel it appropriate.&lt;/p&gt;
&lt;p&gt;Then we add a threading semantic to the RSS feed signalling that a
particular entry is a reply to a particular thread. One obvious mechanic
for that is for all participating blogs to guarantee that the URL for
each entry on their site is unique, and use that URL in a Reference
header signalling that this entry is a reply to that particular URL.
Let’s mandate the Tags header as well.&lt;/p&gt;
&lt;p&gt;Now we need an indexing/discovery service. Let’s make sure that’s
federated. Compatible servers can hook in as new leaves, getting a copy
of all the known living feed URLs plus the last hundred tags seen from
each URL. Note that we are indexing and searching on metadata, not data:
some megacorp might want to suck down all the data, but a server should
be runnable on a small budget by an individual.&lt;/p&gt;
&lt;p&gt;Finally, ask RSS readers to fire off the blog-writing client/editor
to construct an entry with a particular Reference header on demand,
copying the Tags but leaving them editable.&lt;/p&gt;
&lt;p&gt;Et voila, Super-Decentralized Usenet.&lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="technology"/><category term="usenet"/></entry><entry><title>perfectly willing to believe</title><link href="https://blog.randomstring.org/2022/06/18/perfectly-willing-to-believe/" rel="alternate"/><published>2022-06-18T09:02:19-04:00</published><updated>2022-06-18T09:02:19-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2022-06-18:/2022/06/18/perfectly-willing-to-believe/</id><summary type="html">
&lt;p&gt;The categories of certainty of knowledge are statistical and
fuzzy.&lt;/p&gt;
&lt;p&gt;In the course of everyday life, I don’t bother conducting experiments
to see if gravity is still working (I haven’t received a bill in ages)
or the atmosphere is still breathable. I just assume that they are in
more or less the same state as they used to be. Occasionally this is
wrong, and I am surprised by a terrible humidity or excess pollen or
dust, but it saves a great deal of deliberation time which can be used
to think about other things, such as whether I have remembered to take
the laundry out of the washer.&lt;/p&gt;
</summary><content type="html">
&lt;p&gt;The categories of certainty of knowledge are statistical and
fuzzy.&lt;/p&gt;
&lt;p&gt;In the course of everyday life, I don’t bother conducting experiments
to see if gravity is still working (I haven’t received a bill in ages)
or the atmosphere is still breathable. I just assume that they are in
more or less the same state as they used to be. Occasionally this is
wrong, and I am surprised by a terrible humidity or excess pollen or
dust, but it saves a great deal of deliberation time which can be used
to think about other things, such as whether I have remembered to take
the laundry out of the washer.&lt;/p&gt;

&lt;p&gt;As I converse with people or bots convincingly pretending to be
people (and perhaps, eventually, bots which are people), most statements
come with an implicit certainty tag: I am not knowingly lying to you, I
am convinced that this is true. This is called basic honesty, and is
both valuable and common. But from time to time I want to talk about
more speculative things, and so I tag my conversational topics
explicitly.&lt;/p&gt;
&lt;p&gt;I have come to note that I use the phrase “I am perfectly willing to
believe –” when I think that a proposed theory is consistent with what I
know about the universe, but I have very little evidence for it and none
against it. I often use it to propose a more moderate version of some
explanatory story. For example, consider the proposition that Martin
Luther King Junior was assassinated in a plot by the United States
government. Do I believe that LBJ signed an order to kill him? I haven’t
seen such a document. Is it consistent with my understanding of the
workings of the government? I am perfectly willing to believe that some
section of the Federal government, probably in an intelligence agency,
decided to set it up. I don’t have evidence for it, I don’t have
evidence against it, and right now I don’t believe it – but that just
means that if more evidence comes to light, I am prepared to accept
it.&lt;/p&gt;
&lt;p&gt;In general, I don’t believe in big conspiracies, because people do
like to talk about what they have been doing. But I am perfectly willing
to believe in any number of small conspiracies – limited by number of
participants and timespan – because that’s a thing that humans really
like to do. Many businesses start out as a small conspiracy to exploit a
situation; they stop being conspiracies when they go about their
business openly.&lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="philosophy"/></entry><entry><title>script assistant</title><link href="https://blog.randomstring.org/2022/05/14/script-assistant/" rel="alternate"/><published>2022-05-14T17:53:17-04:00</published><updated>2022-05-14T17:53:17-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2022-05-14:/2022/05/14/script-assistant/</id><summary type="html">
&lt;p&gt;I’ve had this idea for seven years and haven’t done anything with it,
so I hereby release it into the public domain and hope someone will make
it – preferably an open source version.&lt;/p&gt;
&lt;p&gt;Live theater rehearsals rely on actors memorizing their lines.
Historically, not everyone learns their lines at the same time. So, for
rehearsals, people are walking around on stage clutching bundles of
paper, usually with highlighter over their lines.&lt;/p&gt;
&lt;p&gt;Everybody has a smartphone now, so let’s use that. This application
can be handled in HTML, CSS and JavaScript with a fairly minimal backend
for synchronization and distribution. Or you can make yourself unhappy
and do it as native apps in every platform you want to support.&lt;/p&gt;
</summary><content type="html">
&lt;p&gt;I’ve had this idea for seven years and haven’t done anything with it,
so I hereby release it into the public domain and hope someone will make
it – preferably an open source version.&lt;/p&gt;
&lt;p&gt;Live theater rehearsals rely on actors memorizing their lines.
Historically, not everyone learns their lines at the same time. So, for
rehearsals, people are walking around on stage clutching bundles of
paper, usually with highlighter over their lines.&lt;/p&gt;
&lt;p&gt;Everybody has a smartphone now, so let’s use that. This application
can be handled in HTML, CSS and JavaScript with a fairly minimal backend
for synchronization and distribution. Or you can make yourself unhappy
and do it as native apps in every platform you want to support.&lt;/p&gt;

&lt;p&gt;In the setup phase, someone loads a play script or musical book into
the server and tags every line with one of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;nobody&lt;/li&gt;
&lt;li&gt;stage directions&lt;/li&gt;
&lt;li&gt;character X&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Just a little pattern recognition can do an excellent job of
autotagging, but proof-reading is essential.&lt;/p&gt;
&lt;p&gt;Once all the lines are tagged, setup is over.&lt;/p&gt;
&lt;p&gt;The subsequent phase is to start a rehearsal session, which needs a
distinctive name. Each participant logs in to the server from their
smartphone and selects a character, overview, or director. Multiple
simultaneous logins of each of these can happen, but director ought to
be password protected.&lt;/p&gt;
&lt;p&gt;During a rehearsal, all devices receive a copy of the script/book. If
a character is selected, that character’s lines are rendered in a very
obvious form – special background/foreground color combos, and/or
larger, bolder, different fonts – or even whispered via text to voice.
It should be difficult to accidentally change characters, but fairly
easy to change on purpose. Per-device customization of character’s
special line rendering is a good idea. If the selected character has a
line on the next scrollable page, there should be an indication of that
before we get there.&lt;/p&gt;
&lt;p&gt;The director gets a special set of controls to synch all the other
views. Although the director controls feel like a mix of absolute and
relative position changes, they are actually all implemented as a goto
to an absolute line position. The director controls should include
directly starting at a particular point and moving relatively forward or
backward.&lt;/p&gt;
&lt;p&gt;So: a rehearsal session starts. Actors log in and select characters.
The stage managers and techs and anyone who is observing select
overview. The director, and very likely an assistant director or two,
select the director view, which is the overview plus motion controls.
Those controls send instructions to all the logged in views to move to
the next line or page or other mark.&lt;/p&gt;
&lt;p&gt;-30-&lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="software"/><category term="theater"/><category term="theatre"/></entry><entry><title>a poem</title><link href="https://blog.randomstring.org/2022/05/06/a-poem/" rel="alternate"/><published>2022-05-06T07:19:28-04:00</published><updated>2022-05-06T07:19:28-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2022-05-06:/2022/05/06/a-poem/</id><summary type="html">
&lt;div class="line-block"&gt;beep, boop&lt;br/&gt;
bleep, bloop&lt;br/&gt;
creep, croup&lt;br/&gt;
deep, dupe&lt;br/&gt;
heap, hoop&lt;br/&gt;
keep, coop&lt;br/&gt;
leap, loop&lt;br/&gt;
neap, no-op&lt;/div&gt;
&lt;p&gt;-30- &lt;/p&gt;</summary><content type="html">
&lt;div class="line-block"&gt;beep, boop&lt;br /&gt;
bleep, bloop&lt;br /&gt;
creep, croup&lt;br /&gt;
deep, dupe&lt;br /&gt;
heap, hoop&lt;br /&gt;
keep, coop&lt;br /&gt;
leap, loop&lt;br /&gt;
neap, no-op&lt;/div&gt;
&lt;p&gt;-30- &lt;/p&gt;
</content><category term="misc"/><category term="poem"/></entry><entry><title>predictions for 2023</title><link href="https://blog.randomstring.org/2022/05/03/predictions-for-2023/" rel="alternate"/><published>2022-05-03T08:19:10-04:00</published><updated>2022-05-03T08:19:10-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2022-05-03:/2022/05/03/predictions-for-2023/</id><summary type="html">
&lt;p&gt;Last night Politico published an unprecedented leak of a Supreme
Court decision overturning Roe v Wade, the decision that established a
right of privacy and the consequent right to an abortion. The opinion of
the court’s reactionary majority specifically includes reasoning to
overturn the decisions about marriage equality, legal contraception, and
general privacy of sexual behavior.&lt;/p&gt;
&lt;p&gt;Assuming that the opinion is issued substantially as-is, I will make
some predictions about 2023.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;‘Red’ states will pass laws restricting basic civil rights.&lt;/li&gt;
&lt;li&gt;Corporations that rely on high-skill workers will not be able to
hire them in those states.&lt;/li&gt;
&lt;li&gt;Those corporations will move out of the red states.&lt;/li&gt;
&lt;li&gt;The economies of red states are substantially worse off compared to
blue states now. When the corporations move out, the tax base will be
further reduced.&lt;/li&gt;
&lt;li&gt;When the Federal budget is roughly balanced, blue states subsidize
red states. The Federal budget is running at a significant deficit in
order to prop up the economy.&lt;/li&gt;
&lt;li&gt;Option 1: the attack on civil rights is enough to change Congress
definitively to blue in November.
&lt;ul&gt;
&lt;li&gt;The Supreme Court will be expanded to 15 or 17 justices.&lt;/li&gt;
&lt;li&gt;The Republican Party splinters.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Option 2: Congress becomes red in November, or wishy-washy.
&lt;ul&gt;
&lt;li&gt;The United States tends towards a Christian Fascist state.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;-30- &lt;/p&gt;</summary><content type="html">
&lt;p&gt;Last night Politico published an unprecedented leak of a Supreme
Court decision overturning Roe v Wade, the decision that established a
right of privacy and the consequent right to an abortion. The opinion of
the court’s reactionary majority specifically includes reasoning to
overturn the decisions about marriage equality, legal contraception, and
general privacy of sexual behavior.&lt;/p&gt;
&lt;p&gt;Assuming that the opinion is issued substantially as-is, I will make
some predictions about 2023.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;‘Red’ states will pass laws restricting basic civil rights.&lt;/li&gt;
&lt;li&gt;Corporations that rely on high-skill workers will not be able to
hire them in those states.&lt;/li&gt;
&lt;li&gt;Those corporations will move out of the red states.&lt;/li&gt;
&lt;li&gt;The economies of red states are substantially worse off compared to
blue states now. When the corporations move out, the tax base will be
further reduced.&lt;/li&gt;
&lt;li&gt;When the Federal budget is roughly balanced, blue states subsidize
red states. The Federal budget is running at a significant deficit in
order to prop up the economy.&lt;/li&gt;
&lt;li&gt;Option 1: the attack on civil rights is enough to change Congress
definitively to blue in November.
&lt;ul&gt;
&lt;li&gt;The Supreme Court will be expanded to 15 or 17 justices.&lt;/li&gt;
&lt;li&gt;The Republican Party splinters.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Option 2: Congress becomes red in November, or wishy-washy.
&lt;ul&gt;
&lt;li&gt;The United States tends towards a Christian Fascist state.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;-30- &lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="politics"/><category term="predictions"/></entry><entry><title>log more on failure than success</title><link href="https://blog.randomstring.org/2022/02/25/log-more-on-failure-than-success/" rel="alternate"/><published>2022-02-25T10:40:31-05:00</published><updated>2022-02-25T10:40:31-05:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2022-02-25:/2022/02/25/log-more-on-failure-than-success/</id><summary type="html">
&lt;p&gt;When something goes wrong, especially (but not limited to) at
startup, you should log an error message that is as informative as
possible. In particular, if your service has parameters that might
conflict with any other running process –say, it wants to listen to a
particular port– you should have the error message mention all of those
details.&lt;/p&gt;
&lt;p&gt;It’s even better if the failure does a little diagnostic and tells
you what other process is using that port.&lt;/p&gt;
&lt;p&gt;This message brought to you by the Campaign for More Informative
Error Messages. -30- &lt;/p&gt;</summary><content type="html">
&lt;p&gt;When something goes wrong, especially (but not limited to) at
startup, you should log an error message that is as informative as
possible. In particular, if your service has parameters that might
conflict with any other running process –say, it wants to listen to a
particular port– you should have the error message mention all of those
details.&lt;/p&gt;
&lt;p&gt;It’s even better if the failure does a little diagnostic and tells
you what other process is using that port.&lt;/p&gt;
&lt;p&gt;This message brought to you by the Campaign for More Informative
Error Messages. -30- &lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="technology"/><category term="philosophy"/></entry><entry><title>smart homes are still for tinkers</title><link href="https://blog.randomstring.org/2022/02/17/smart-homes-are-still-for-tinkers/" rel="alternate"/><published>2022-02-17T12:01:34-05:00</published><updated>2022-02-17T12:01:34-05:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2022-02-17:/2022/02/17/smart-homes-are-still-for-tinkers/</id><summary type="html">
&lt;p&gt;There are two kinds of smart home enthusiasts: the kind who buy into
a particular cloudy ecosystem and need to buy all new stuff every few
years, and the kind who spend all their time tinkering on their in-house
systems. Fairly often the tinkers also end up buying all new stuff, but
they get to do it in incremental steps where everything works (more or
less) during the transitions.&lt;/p&gt;
&lt;p&gt;I’m not an enthusiast: I want a return on investment in money,
convenience or fun. &lt;/p&gt;</summary><content type="html">
&lt;p&gt;There are two kinds of smart home enthusiasts: the kind who buy into
a particular cloudy ecosystem and need to buy all new stuff every few
years, and the kind who spend all their time tinkering on their in-house
systems. Fairly often the tinkers also end up buying all new stuff, but
they get to do it in incremental steps where everything works (more or
less) during the transitions.&lt;/p&gt;
&lt;p&gt;I’m not an enthusiast: I want a return on investment in money,
convenience or fun. &lt;/p&gt;
&lt;p&gt;There’s a thermostat in each fridge that keeps it at the right
temperature. It’s never failed except when the whole house had a power
outage, and I’ve never needed to obsess over the current temperature.
The house thermostats get changed twice a year: when we start keeping
windows open regularly, and when we stop.&lt;/p&gt;
&lt;p&gt;The lights in the house are controlled by wall switches. There are
precisely two places in the house where it would occasionally be nice to
change the state of a light switch which is not close at hand. It’s not
much of an inconvenience.&lt;/p&gt;
&lt;p&gt;The electrical outlets have things plugged into them, most of which
are either off or charging at any given moment. There is exactly one
place in the house where I would like to occasionally flip power state
from across the room. I could solve that with a remote RF power switch,
and it would be reasonably cheap, but I haven’t.&lt;/p&gt;
&lt;p&gt;I have extensive music systems, which don’t respond to voice commands
because there are no permanently active microphones in my house. It’s
stored in a central system, shared to all the computers that want to
read from it, and can be accessed in several ways, including a web
player that will direct sound to any set of speakers in the house. It’s
not “smart”. It’s unobtrusive, and doesn’t do things on its own.&lt;/p&gt;
&lt;p&gt;And that’s what I like.&lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="technology"/><category term="opinions"/></entry><entry><title>in 2022 there are no slow computers</title><link href="https://blog.randomstring.org/2022/02/10/in-2022-there-are-no-slow-computers/" rel="alternate"/><published>2022-02-10T07:15:04-05:00</published><updated>2022-02-10T07:15:04-05:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2022-02-10:/2022/02/10/in-2022-there-are-no-slow-computers/</id><summary type="html">&lt;p&gt;It is 2022. There are no slow computers&lt;sup id="sf-in-2022-there-are-no-slow-computers-1-back"&gt;&lt;a class="simple-footnote" href="#sf-in-2022-there-are-no-slow-computers-1" title=" for the purposes of normal desktop activities"&gt;1&lt;/a&gt;&lt;/sup&gt;. There is a lot of slow software.
&lt;/p&gt;</summary><content type="html">&lt;p&gt;It is 2022. There are no slow computers&lt;sup id=sf-in-2022-there-are-no-slow-computers-1-back&gt;&lt;a href=#sf-in-2022-there-are-no-slow-computers-1 class=simple-footnote title=" for the purposes of normal desktop activities"&gt;1&lt;/a&gt;&lt;/sup&gt;. There is a lot of slow software.
&lt;/p&gt;
&lt;p&gt;In 2000 a desktop computer might take 3-5 minutes to boot from
power-off to being ready to read your email, enter data into a
spreadsheet, or play a game. An Intel Pentium III cpu was a 32-bit,
single core, single threaded unit running at something less than 1GHz in
the middle-grade systems normal for business, and 128 to 512MB of RAM
was normal. A big hard disk for a desktop would be a 2GB device on a
66MB/s interface. A nice monitor would be 17” on the diagonal and show
1280x1024. LAN speeds were 100Mb/s ethernet and a small office might
have a 1Mb/s DSL link.&lt;/p&gt;
&lt;p&gt;In 2022, a desktop computer takes 30 seconds to 2 minutes to boot. A
normal office CPU is a 4 core, 8 thread 64-bit system running at 3-4GHz,
with 8-16GB of RAM and a 1TB SSD running at about 500MB/s. A cheap
monitor is 1920x1080 at 24” or so. A small office will have 400Mb/s
WiFi, 1Gb/s ethernet, and an Internet link might be 100 to 900Mb/s.&lt;/p&gt;
&lt;p&gt;So: 50x faster, 16x as much memory, 10x faster disk transfer (and
1000x more operations per second), and an Internet that runs 100x
faster.&lt;/p&gt;
&lt;p&gt;The nature of office work has not changed significantly since then.
To a certain extent, people are asking their computers to do more – push
more pixels, calculate smoother fonts – but the actual work has not
changed much. Yet complaints about slow computing are rampant. Why is
this?&lt;/p&gt;
&lt;p&gt;I already told you: it’s the software. The normal load-out of
Microsoft Windows, Office 365, two anti-malware scanners and a diet of
heavy JavaScript applications split between remote servers and your
local browser eats all of those hardware and infrastructure
improvements.&lt;/p&gt;
&lt;p&gt;I blame object-oriented software development, the practice of writing
software at the highest level of abstraction possible, and the
commercial pressures of feature checklists over performance – plus
general sloppiness. It’s possible to avoid much of this when an informed
user picks and chooses the software that they are going to run, but if
your software choices are made for you by an enterprise IT department,
you’re sunk.&lt;/p&gt;
&lt;ol class=simple-footnotes&gt;&lt;li id=sf-in-2022-there-are-no-slow-computers-1&gt; for the purposes of
normal desktop activities &lt;a href=#sf-in-2022-there-are-no-slow-computers-1-back class=simple-footnote-back&gt;↩&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;</content><category term="misc"/><category term="blog"/><category term="technology"/><category term="computing"/><category term="future"/></entry><entry><title>reliable indicators of trouble</title><link href="https://blog.randomstring.org/2021/12/20/reliable-indicators-of-trouble/" rel="alternate"/><published>2021-12-20T08:00:17-05:00</published><updated>2021-12-20T08:00:17-05:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2021-12-20:/2021/12/20/reliable-indicators-of-trouble/</id><summary type="html">
&lt;p&gt;When a backup fails to complete, that’s a reliable sign of trouble.
Most of the time it’s in the backup mechanism, but the second most
likely underlying cause is a problem in the thing which is being backed
up.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;</summary><content type="html">
&lt;p&gt;When a backup fails to complete, that’s a reliable sign of trouble.
Most of the time it’s in the backup mechanism, but the second most
likely underlying cause is a problem in the thing which is being backed
up.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;
</content><category term="misc"/><category term="technology"/><category term="storage"/><category term="sysadmin"/></entry><entry><title>superstition</title><link href="https://blog.randomstring.org/2021/12/18/superstition/" rel="alternate"/><published>2021-12-18T07:54:43-05:00</published><updated>2021-12-18T07:54:43-05:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2021-12-18:/2021/12/18/superstition/</id><summary type="html">
&lt;blockquote&gt;
&lt;p&gt;When you believe in things that you don’t understand, Then you
suffer, Superstition ain’t the way&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;– Stevie Wonder&lt;/p&gt;
&lt;p&gt;Every time I write about the mechanical processes behind this blog, I
stop adding entries to it. Recognizing a pattern is the first part of
building a superstition. It’s also the first part of building a
hypothesis, because the two processes are one and the same. Humans love
to recognize patterns. We have special names for some of them –
pareidolia, recognizing faces where they don’t exist. Paranoia, seeing
enemies where they don’t exist. If you think of these as distortions of
helpful evolved processes, then superstition is just a general
phenomenon of seizing on the wrong explanation for an interesting
pattern.&lt;/p&gt;
</summary><content type="html">
&lt;blockquote&gt;
&lt;p&gt;When you believe in things that you don’t understand, Then you
suffer, Superstition ain’t the way&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;– Stevie Wonder&lt;/p&gt;
&lt;p&gt;Every time I write about the mechanical processes behind this blog, I
stop adding entries to it. Recognizing a pattern is the first part of
building a superstition. It’s also the first part of building a
hypothesis, because the two processes are one and the same. Humans love
to recognize patterns. We have special names for some of them –
pareidolia, recognizing faces where they don’t exist. Paranoia, seeing
enemies where they don’t exist. If you think of these as distortions of
helpful evolved processes, then superstition is just a general
phenomenon of seizing on the wrong explanation for an interesting
pattern.&lt;/p&gt;

</content><category term="misc"/><category term="blog"/></entry><entry><title>smoothest pelican upgrade yet</title><link href="https://blog.randomstring.org/2021/10/27/smoothest-pelican-upgrade-yet/" rel="alternate"/><published>2021-10-27T09:53:03-04:00</published><updated>2021-10-27T09:53:03-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2021-10-27:/2021/10/27/smoothest-pelican-upgrade-yet/</id><summary type="html">
&lt;p&gt;This blog is created by Pelican, a static site generator that
combines some text files that I write with a layout and some CSS styles
to produce the HTML that is rsync’d over to the nginx webserver which
answers your requests.&lt;/p&gt;
&lt;p&gt;I just upgraded from 4.6 to 4.71, and also from an older python3
release to Debian’s current 3.9 release. Nothing appears to need to be
changed, which is nice and relaxing compared to the last few
upgrades.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;</summary><content type="html">
&lt;p&gt;This blog is created by Pelican, a static site generator that
combines some text files that I write with a layout and some CSS styles
to produce the HTML that is rsync’d over to the nginx webserver which
answers your requests.&lt;/p&gt;
&lt;p&gt;I just upgraded from 4.6 to 4.71, and also from an older python3
release to Debian’s current 3.9 release. Nothing appears to need to be
changed, which is nice and relaxing compared to the last few
upgrades.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="technology"/><category term="pelican"/></entry><entry><title>setting vim options makes me itch</title><link href="https://blog.randomstring.org/2021/09/29/setting-vim-options-makes-me-itch/" rel="alternate"/><published>2021-09-29T09:50:09-04:00</published><updated>2021-09-29T09:50:09-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2021-09-29:/2021/09/29/setting-vim-options-makes-me-itch/</id><summary type="html">
&lt;p&gt;It’s hard to break the habits of a lifetime – or at least, those
rooted decades deep.&lt;/p&gt;
&lt;p&gt;Ever since I can remember, I always wanted to be a goodfeather.
Sorry, wrong reference. As far back as I can recall, I have been wary of
making changes to vi (later vim) settings out of a fear that I would
become reliant on them, and thence unproductive when I had to work on a
freshly installed machine.&lt;/p&gt;
&lt;p&gt;There are several good arguments against this position.
&lt;/p&gt;</summary><content type="html">
&lt;p&gt;It’s hard to break the habits of a lifetime – or at least, those
rooted decades deep.&lt;/p&gt;
&lt;p&gt;Ever since I can remember, I always wanted to be a goodfeather.
Sorry, wrong reference. As far back as I can recall, I have been wary of
making changes to vi (later vim) settings out of a fear that I would
become reliant on them, and thence unproductive when I had to work on a
freshly installed machine.&lt;/p&gt;
&lt;p&gt;There are several good arguments against this position.
&lt;/p&gt;
&lt;p&gt;First, even a sysadmin who is professionally installing machines just
doesn’t do that much by hand any more. A one-off machine is a rarity; a
corporate cattle machine will have basically everything ready to go by
the time anyone would want to log in and edit something.&lt;/p&gt;
&lt;p&gt;Second, I spend far less time installing and investigating broken
machines these days. It isn’t impossibly rare, but it is decidedly
unusual now.&lt;/p&gt;
&lt;p&gt;Third, humans are adaptable. Even if I were to become entirely
dependent on soft text wrapping and line numbers, not having them is not
the end of the world. I would notice fairly quickly and either make the
appropriate settings, or more likely just carry on without them.&lt;/p&gt;
&lt;p&gt;I suppose I am ready to allow a few more entries into my general
&lt;code&gt;.vimrc&lt;/code&gt;.&lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="tech"/><category term="vim"/><category term="tradition"/></entry><entry><title>an element of style</title><link href="https://blog.randomstring.org/2021/09/11/an-element-of-style/" rel="alternate"/><published>2021-09-11T07:58:19-04:00</published><updated>2021-09-11T07:58:19-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2021-09-11:/2021/09/11/an-element-of-style/</id><summary type="html">
&lt;p&gt;I just realized that I internalized the O’Reilly house style decades
ago, and so I think it’s the proper way to write documentation.&lt;/p&gt;
&lt;p&gt;Primary elements: the document, even at book length, takes the form
of a precise, pedantic, but informal letter to the audience. The author
might reference themself as “I” and tell brief anecdotes to
contextualize the material, and frequently encourages the reader in the
second person:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;You can also reticulate the frobnitz with the ‘–frob-harder’ switch
if that feels more natural to you.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;As a side effect, this style of technical writing minimizes the
number of gendered pronouns, which I always prefer because I don’t know
who is reading the work.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;</summary><content type="html">
&lt;p&gt;I just realized that I internalized the O’Reilly house style decades
ago, and so I think it’s the proper way to write documentation.&lt;/p&gt;
&lt;p&gt;Primary elements: the document, even at book length, takes the form
of a precise, pedantic, but informal letter to the audience. The author
might reference themself as “I” and tell brief anecdotes to
contextualize the material, and frequently encourages the reader in the
second person:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;You can also reticulate the frobnitz with the ‘–frob-harder’ switch
if that feels more natural to you.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;As a side effect, this style of technical writing minimizes the
number of gendered pronouns, which I always prefer because I don’t know
who is reading the work.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="technology"/><category term="books"/><category term="technical writing"/></entry><entry><title>recovery from audiophilia</title><link href="https://blog.randomstring.org/2021/08/16/recovery-from-audiophilia/" rel="alternate"/><published>2021-08-16T11:50:57-04:00</published><updated>2021-08-16T11:50:57-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2021-08-16:/2021/08/16/recovery-from-audiophilia/</id><summary type="html">
&lt;p&gt;When you stop looking for ways to improve your sound reproduction
experience and instead look for new music to listen to, you have begun
to recover from audiophilia.&lt;/p&gt;
&lt;p&gt;Or at least, I have.&lt;/p&gt;
&lt;p&gt;Places in the house with acceptable sound systems:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;my bedroom&lt;/li&gt;
&lt;li&gt;the living room&lt;/li&gt;
&lt;li&gt;the den/theater&lt;/li&gt;
&lt;li&gt;the office&lt;/li&gt;
&lt;li&gt;the other end of the office&lt;/li&gt;
&lt;li&gt;the third system in the office&lt;/li&gt;
&lt;li&gt;two portable systems&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Places in the house with marginal sound systems:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the kitchen&lt;/li&gt;
&lt;li&gt;the dining room&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;-30- &lt;/p&gt;</summary><content type="html">
&lt;p&gt;When you stop looking for ways to improve your sound reproduction
experience and instead look for new music to listen to, you have begun
to recover from audiophilia.&lt;/p&gt;
&lt;p&gt;Or at least, I have.&lt;/p&gt;
&lt;p&gt;Places in the house with acceptable sound systems:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;my bedroom&lt;/li&gt;
&lt;li&gt;the living room&lt;/li&gt;
&lt;li&gt;the den/theater&lt;/li&gt;
&lt;li&gt;the office&lt;/li&gt;
&lt;li&gt;the other end of the office&lt;/li&gt;
&lt;li&gt;the third system in the office&lt;/li&gt;
&lt;li&gt;two portable systems&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Places in the house with marginal sound systems:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the kitchen&lt;/li&gt;
&lt;li&gt;the dining room&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;-30- &lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="technology"/><category term="philosophy"/><category term="music"/></entry><entry><title>years of experience are a bad proxy</title><link href="https://blog.randomstring.org/2021/07/06/years-of-experience-are-a-bad-proxy/" rel="alternate"/><published>2021-07-06T08:40:45-04:00</published><updated>2021-07-06T08:40:45-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2021-07-06:/2021/07/06/years-of-experience-are-a-bad-proxy/</id><summary type="html">Let’s say that you are constructing a technical employment
advertisement and you would like to specify that this position requires
someone who knows what they are doing in a few technologies.</summary><content type="html">&lt;p&gt;Let’s say that you are constructing a technical employment
advertisement and you would like to specify that this position requires
someone who knows what they are doing in a few technologies.&lt;/p&gt;
&lt;p&gt;A typical want ad will say something about required years of
experience in each of those technologies. This is bad because it is not
merely imprecise, but it is a proxy for what you actually want. Clear
communication requires that you ask for what you want, not something
that approximates it.&lt;/p&gt;
&lt;p&gt;(Also, asking for specific years of experience might open you to age
discrimination lawsuits in parts of the world where that’s a thing. I am
not a lawyer.)&lt;/p&gt;
&lt;p&gt;Let me offer you this scale, instead:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Beginning: has started to use this technology&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Familiar: has successfully completed at least one major project
using this technology&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Proficient: routinely uses this technology in many
projects&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Advanced: has taught others; is comfortable discussing design and
development of the technology itself&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Expert: generally recognized and associated with the
technology&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each of these stages represents a clear jump in competence. Which
would you rather have: a person who has read this scale and declares
that they are familiar with your primary programming language, or
someone who read “3-5 years of Ruby” and decided that because they have
encountered Ruby once or twice a year for each of the last four years,
that fits? In the other direction, people can acquire significant skills
in short periods of time if the conditions are right. There are
technologies where it is possible, given the right conditions, to gain
proficiency in a year or two.&lt;/p&gt;
&lt;p&gt;One might also be interested in recency: I have beginner-level
competency in a bunch of languages that I haven’t used in ten years. I’d
like to think that it would only be a matter of a week or two to regain
those skills, but they have certainly rusted. I might drop them from my
resume, or leave them on since the jobs I like tend to be interested in
generalists who learn things quickly.&lt;/p&gt;
&lt;p&gt;It is rare for a position to demand an Expert in anything; it’s more
likely that an Expert is part of your organization’s founders or is
approached personally, rather than through an open advertisement.&lt;/p&gt;
&lt;p&gt;This post was generally inspired by &lt;a
href="https://cellio.dreamwidth.org/2100936.html"&gt;Hiring Dark
Pattern&lt;/a&gt;&lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="employment"/><category term="ads"/></entry><entry><title>that should not go there</title><link href="https://blog.randomstring.org/2021/06/19/that-should-not-go-there/" rel="alternate"/><published>2021-06-19T09:28:37-04:00</published><updated>2021-06-19T09:28:37-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2021-06-19:/2021/06/19/that-should-not-go-there/</id><summary type="html">
&lt;p&gt;Twenty-five years ago, approximately, my housemates and I bought
office chairs – rolling five-star bases, adjustable arms, comes in a box
with an L-shaped hex driver like IKEA stuff – and put them in our dining
room around the table. They were cheap and comfortable.&lt;/p&gt;
&lt;p&gt;I can’t tell you how many people looked at that arrangement and
needed to talk about their sudden feelings.
&lt;/p&gt;</summary><content type="html">
&lt;p&gt;Twenty-five years ago, approximately, my housemates and I bought
office chairs – rolling five-star bases, adjustable arms, comes in a box
with an L-shaped hex driver like IKEA stuff – and put them in our dining
room around the table. They were cheap and comfortable.&lt;/p&gt;
&lt;p&gt;I can’t tell you how many people looked at that arrangement and
needed to talk about their sudden feelings.
&lt;/p&gt;
&lt;p&gt;I can tell you that a bunch of friends immediately declared their
intention to do the same when they next bought furniture – including my
parents. I think most of them did.&lt;/p&gt;
&lt;p&gt;Back in the 1980s, a “home computer” would come with a video output
that would drive a television as though it were producing a TV channel.
VCRs used the same system when they first came out. Dedicated monitors
were too expensive unless you were rich or could justify the expense for
business purposes.&lt;/p&gt;
&lt;p&gt;Over time it became normal that you bought a specialized,
high-resolution monitor. It could be a big expense – I remember tracking
prices obsessively.&lt;/p&gt;
&lt;p&gt;Then LCD monitors went from being terrible and expensive to mediocre
and almost affordable, just before everyone bought a new TV (as ATSC
digital television was introduced). That led to a production revolution
that made big high-res (1920x1080) TVs cheap, and that brought down the
prices of monitors using the same technology.&lt;/p&gt;
&lt;p&gt;Still, there is a disconnect in many people’s head between “computer
monitor” and “TV”. No company makes a 42” 4K computer monitor for a
reasonable price, but dozens will sell you a 42” 4K TV for cheap. Pretty
much every computer has an HDMI output, though, and all those TVs use
that input.&lt;/p&gt;
&lt;p&gt;It turns out that at normal office desk depths, putting such a TV at
the back of the desk is just like having four normal 21” monitors - the
kind that go for $100 each these days - mounted next to each other, but
without the annoying bezels in between them. So that’s what we do in our
house for the desks that need them. It’s typically 25-40% cheaper than
the separate monitors would be, too.&lt;/p&gt;
&lt;p&gt;Just like the office chairs at the dining table, people seem split
between immediate revulsion and delight.&lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="technology"/><category term="monitors"/><category term="psychology"/></entry><entry><title>bears repeating</title><link href="https://blog.randomstring.org/2021/06/14/bears-repeating/" rel="alternate"/><published>2021-06-14T19:19:28-04:00</published><updated>2021-06-14T19:19:28-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2021-06-14:/2021/06/14/bears-repeating/</id><summary type="html">
&lt;p&gt;Biometrics are usernames, not passwords.&lt;/p&gt;
&lt;p&gt;And you can’t change them when you change your name, and you might
accidentally change them via trauma.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;</summary><content type="html">
&lt;p&gt;Biometrics are usernames, not passwords.&lt;/p&gt;
&lt;p&gt;And you can’t change them when you change your name, and you might
accidentally change them via trauma.&lt;/p&gt;
&lt;p&gt;-30- &lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="security"/></entry><entry><title>where the cloud came from</title><link href="https://blog.randomstring.org/2021/04/25/where-the-cloud-came-from/" rel="alternate"/><published>2021-04-25T08:48:13-04:00</published><updated>2021-04-25T08:48:13-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2021-04-25:/2021/04/25/where-the-cloud-came-from/</id><summary type="html">
&lt;p&gt;The Cloud – where did we get that metaphor?&lt;/p&gt;
&lt;p&gt;The answer is pretty simple. Imagine you are a techie working on an
Internet project in the late 1990s. You are explaining to a
less-technical audience how your application is going to be built. You
have a whiteboard, and you draw some simple things as you talk:&lt;/p&gt;
</summary><content type="html">
&lt;p&gt;The Cloud – where did we get that metaphor?&lt;/p&gt;
&lt;p&gt;The answer is pretty simple. Imagine you are a techie working on an
Internet project in the late 1990s. You are explaining to a
less-technical audience how your application is going to be built. You
have a whiteboard, and you draw some simple things as you talk:&lt;/p&gt;

&lt;p&gt;“Here is our datacenter in Los Angeles” – big rectangle – “and in the
meet-me room we have border routers” – little circles – “that are
connected to seven other networks and our long-haul links to San Jose
and Seattle.” You start drawing lines and a vague map of the United
States.&lt;/p&gt;
&lt;p&gt;One of your colleagues interrupts. “As of next Wednesday, it’s going
to be nine peer networks.”&lt;/p&gt;
&lt;p&gt;Inspiration strikes. Instead of concentrating on the specifics of
where the networks are connected to each other, you draw a big floofy
cloud in the middle of the map, and just draw a line connecting your
data center to the cloud, and another line connecting on the East Coast
– maybe around Virginia, maybe around Boston or NYC, it’s hard to tell –
and then another rectangle for another data center. “Let’s not get into
specifics, we’re growing and everybody else is growing and the important
thing is that it’s all interconnected pretty well.”&lt;/p&gt;
&lt;p&gt;The metaphor works, and pretty soon everyone in your company is
drawing a cloud to represent all the parts of the Internet that don’t
need to be described in depth right now. They go to conferences and draw
the clouds; everybody likes this and clouds start appearing in white
papers, then official documentation, and eventually it’s ubiquitous.&lt;/p&gt;
&lt;p&gt;Somewhere around 2000, a person asks where a particular server is,
and the engineer at the white board says “it’s in the cloud”, meaning
that the actual position is not relevant, as long as it is
well-connected. And after that, everything is “in the cloud”.&lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="etymology"/><category term="technology"/></entry><entry><title>make systemd journald dump to rsyslogd</title><link href="https://blog.randomstring.org/2021/04/21/make-systemd-journald-dump-to-rsyslogd/" rel="alternate"/><published>2021-04-21T09:47:13-04:00</published><updated>2021-04-21T09:47:13-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2021-04-21:/2021/04/21/make-systemd-journald-dump-to-rsyslogd/</id><summary type="html">
&lt;p&gt;This is a reminder to myself on how to make the
&lt;code&gt;systemd journald&lt;/code&gt; relay everything through
&lt;code&gt;rsyslogd&lt;/code&gt;, so we get useful info in &lt;code&gt;/var/log&lt;/code&gt;.
&lt;/p&gt;</summary><content type="html">
&lt;p&gt;This is a reminder to myself on how to make the
&lt;code&gt;systemd journald&lt;/code&gt; relay everything through
&lt;code&gt;rsyslogd&lt;/code&gt;, so we get useful info in &lt;code&gt;/var/log&lt;/code&gt;.
&lt;/p&gt;
&lt;p&gt;In &lt;code&gt;/etc/systemd/system/syslog.service&lt;/code&gt;, set&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Requires=syslog.socket&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In &lt;code&gt;/etc/rsyslog.conf&lt;/code&gt;, set&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;module(load=&amp;quot;imuxsock&amp;quot; SysSock.Name=&amp;quot;/run/systemd/journal/syslog&amp;quot; ) # provides support for local system logging&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;then restart rsyslogd.&lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="technology"/></entry><entry><title>advanced technology</title><link href="https://blog.randomstring.org/2021/04/14/advanced-technology/" rel="alternate"/><published>2021-04-14T09:46:17-04:00</published><updated>2021-04-14T09:46:17-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2021-04-14:/2021/04/14/advanced-technology/</id><summary type="html">
&lt;p&gt;Fun fact of the day: the AT in SATA is a direct reference to the IBM
PC/AT launched in 1984.&lt;/p&gt;
</summary><content type="html">
&lt;p&gt;Fun fact of the day: the AT in SATA is a direct reference to the IBM
PC/AT launched in 1984.&lt;/p&gt;

&lt;p&gt;Let’s work backwards.&lt;/p&gt;
&lt;p&gt;SATA, the Serial AT Attachment, is different from PATA, the Parallel
AT Attachment because, among other things, it uses a 7 conductor cable
rather than a 40 or 80 conductor cable. The accompanying power connector
is wider than the standard data cable.&lt;/p&gt;
&lt;p&gt;PATA was formerly ATA, back when it didn’t have a serial competitor.
It was also called EIDE, Enhanced Integrated Drive Electronics, and
before that just Integrated Drive Electronics. All of these names stem
from the fact that the connector just extends the PC/AT 16 bit ISA bus
out to the drive, where the controller is mounted on the drive
itself.&lt;/p&gt;
&lt;p&gt;Prior to ATA, drives had dedicated controllers that plugged into the
system bus, that then ran cables out to the disk drive itself. Some
controllers could handle two disks!&lt;/p&gt;
&lt;p&gt;If you had a fancy computer, you might have had a Small Computer
Systems Interface controller, SCSI. That could talk to 7 other devices
in its original incarnation. SCSI controllers were expensive and SCSI
disks were expensive, but SCSI could also talk to printers and scanners
and similar strange beasts. The SCSI protocol lives on in SAS, Serial
Attached SCSI – which uses the same connectors as SATA. Almost all SAS
controllers can talk to SATA disks, so having the SAS capability is
useful.&lt;/p&gt;
&lt;p&gt;The original ATA spec could transfer 8.3MB/s. SATA3 specifies 6GB/s.
The latest successor, U.2, is a way of carrying 4 PCIe bus lanes out to
a pluggable drive - 32GB/s for PCIe version 3.&lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="technology"/><category term="names"/><category term="aging"/><category term="history"/></entry><entry><title>quote: outsourcing risk</title><link href="https://blog.randomstring.org/2021/03/10/quote-outsourcing-risk/" rel="alternate"/><published>2021-03-10T10:59:28-05:00</published><updated>2021-03-10T10:59:28-05:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2021-03-10:/2021/03/10/quote-outsourcing-risk/</id><summary type="html">

&lt;blockquote&gt;
&lt;p&gt;However, this only works as long as the other party actually
internalizes the risk and liability. Since there are no consequences for
mishandling data, operating IT services you’re not structurally
competent to operate, and eventually having your crown jewels stolen -
the contractor doesn’t really internalize risk, has no incentive to
mitigate it.&lt;/p&gt;
&lt;/blockquote&gt;
</summary><content type="html">&lt;blockquote&gt;
&lt;p&gt;This sounds like general problem of enterprise security. There are no
consequences. I can entirely get why a company would outsource IP
cameras to a third party cloud, even with storing data on-site. Business
runs on contracts. It’s entirely normal to contract out everything
except your core competencies, if it’s cheaper this way. It’s how you
turn CAPEX, complex OPEX and high risk into simple OPEX and low risk. A
contract is in big part a risk shifting tool. This works well in
practice… outside IT. The problem is, with IT and data, there’s a
mismatch between expectations and reality. An enterprise should feel
safe buying their video surveillance from Verkada, because between the
contract and the legal framework, Verkada should be bankrupt now, and
their management possibly facing jail time. That’s the part where
contracts work as Cover-Your-Ass tool: if you shift risk and liability
to outside party, the liability is not on you.
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;However, this only works as long as the other party actually
internalizes the risk and liability. Since there are no consequences for
mishandling data, operating IT services you’re not structurally
competent to operate, and eventually having your crown jewels stolen -
the contractor doesn’t really internalize risk, has no incentive to
mitigate it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
&lt;p&gt;All this to say: Verkada should go down after this, and their
customers should be named and shamed widely - the latter is so that
future customers of IT services put more care into vetting companies
they contract IT out to. You shouldn’t get to CYA with a contract where
assumptions around contracting are broken.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;– from &lt;a
href="https://news.ycombinator.com/item?id=26409399"&gt;TeMPOral on Hacker
News, 20210310&lt;/a&gt;&lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="quote"/><category term="technology"/><category term="risk"/></entry><entry><title>how to add DNS/TLS to your existing DNS server</title><link href="https://blog.randomstring.org/2021/02/18/how-to-add-dns-tls-to-your-existing-dns-server/" rel="alternate"/><published>2021-02-18T08:46:53-05:00</published><updated>2021-02-18T08:46:53-05:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2021-02-18:/2021/02/18/how-to-add-dns-tls-to-your-existing-dns-server/</id><summary type="html">
&lt;p&gt;I will assume you have a working DNS server listening on the default
port, 53, and that you have certbot or some other means of acquiring SSL
certs.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Install stunnel4&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a config file in
&lt;code&gt;/etc/stunnel4/dns.conf&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;pid = /var/run/stunnel4/stunnel.pid

[dns]
accept = 853
accept = :::853
connect = 127.0.0.1:53
cert = /etc/letsencrypt/live/randomstring.org/fullchain.pem
key = /etc/letsencrypt/live/randomstring.org/privkey.pem
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Substitute the locations of an appropriate SSL cert and key.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Start stunnel4.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;-30- &lt;/p&gt;</summary><content type="html">
&lt;p&gt;I will assume you have a working DNS server listening on the default
port, 53, and that you have certbot or some other means of acquiring SSL
certs.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Install stunnel4&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a config file in
&lt;code&gt;/etc/stunnel4/dns.conf&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;pid = /var/run/stunnel4/stunnel.pid

[dns]
accept = 853
accept = :::853
connect = 127.0.0.1:53
cert = /etc/letsencrypt/live/randomstring.org/fullchain.pem
key = /etc/letsencrypt/live/randomstring.org/privkey.pem
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Substitute the locations of an appropriate SSL cert and key.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Start stunnel4.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;-30- &lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="technology"/><category term="DNS"/><category term="SSL"/><category term="TLS"/></entry><entry><title>Apple M1 MBP micro-review</title><link href="https://blog.randomstring.org/2021/02/17/apple-m1-mbp-micro-review/" rel="alternate"/><published>2021-02-17T14:34:27-05:00</published><updated>2021-02-17T14:34:27-05:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2021-02-17:/2021/02/17/apple-m1-mbp-micro-review/</id><summary type="html">
&lt;p&gt;My work-issued MacBook Pro (Retina, late 2013) began to break down:
the speakers fried, it was running out of memory (8GB), and then it
started rebooting spontaneously. I mentioned this and work bought a
replacement. Since I’m capable of working around exciting new bugs, they
sent me the newest M1 MacBookPro, with an Apple-designed and -produced
M1 8 core CPU.&lt;/p&gt;
&lt;p&gt;Herewith, a micro-review. &lt;/p&gt;</summary><content type="html">
&lt;p&gt;My work-issued MacBook Pro (Retina, late 2013) began to break down:
the speakers fried, it was running out of memory (8GB), and then it
started rebooting spontaneously. I mentioned this and work bought a
replacement. Since I’m capable of working around exciting new bugs, they
sent me the newest M1 MacBookPro, with an Apple-designed and -produced
M1 8 core CPU.&lt;/p&gt;
&lt;p&gt;Herewith, a micro-review. &lt;/p&gt;
&lt;p&gt;Physically: it is slightly smaller than the 2013 MBP. The screen
bezels are a tiny bit shorter on all sides. The hinge has been moved
further back, and the trackpad is annoyingly larger. It now has more
physical movement, which I consider a bit of a minus. The ESC key is
where it should be, but the rest of the function key row has been
replaced by the touchbar, which is, as far as I can tell, 100%
gimcrackery. Mostly it shows spelling suggestions and helpfully informs
you when it thinks you are typing into a password box.&lt;/p&gt;
&lt;p&gt;Total ports: 2 USB-C / thunderbolt! ports on the left, one of which
has to be used for power. One headphone/mic combo jack on the right.
That’s it. No more SD card, USB-A ports, HDMI, or nice row of LEDs to
let you know the battery charging status.&lt;/p&gt;
&lt;p&gt;Operationally (after about an hour and a half?): this does not feel
significantly different from the 4-core i5 in the old machine. The extra
RAM is good. The camera is doing a little better job with brightness
levels. The speakers work.&lt;/p&gt;
&lt;p&gt;It really doesn’t feel faster, and I have the seven-year-old one
right next to it.&lt;/p&gt;
&lt;p&gt;The new processor is supposed to be roughly on par with my house
server’s Ryzen 3600. It doesn’t feel like it.&lt;/p&gt;
&lt;p&gt;But let’s face it: I don’t stretch these machines. They run web
browsers, terminals, WireGuard, and LibreOffice.&lt;/p&gt;
&lt;p&gt;If the old one could get a RAM upgrade and the speakers fixed, that
would have been just fine.&lt;/p&gt;
&lt;p&gt;Annoyances: the wasteful touchbar thing. The excessively large
touchpad, which I keep brushing by accident while typing. The lack of
useful ports.&lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="technology"/><category term="apple"/><category term="laptops"/></entry><entry><title>users will learn things if they have motivation</title><link href="https://blog.randomstring.org/2021/01/17/users-will-learn-things-if-they-have-motivation/" rel="alternate"/><published>2021-01-17T12:45:26-05:00</published><updated>2021-01-17T12:45:26-05:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2021-01-17:/2021/01/17/users-will-learn-things-if-they-have-motivation/</id><summary type="html">
&lt;p&gt;I don’t know about your mother, but my mother is not even a power
user – Windows, hunt-and-peck typing – and she taught herself to use IRC
because that’s what the other people in her social group were using.&lt;/p&gt;
&lt;p&gt;I assume she didn’t use any /command except /join – maybe not even
that, because if you’re only using one channel then you can have your
client autojoin – but that was enough to get her in. Presumably she
learned group etiquette on the fly, the way most people do.
&lt;/p&gt;</summary><content type="html">
&lt;p&gt;I don’t know about your mother, but my mother is not even a power
user – Windows, hunt-and-peck typing – and she taught herself to use IRC
because that’s what the other people in her social group were using.&lt;/p&gt;
&lt;p&gt;I assume she didn’t use any /command except /join – maybe not even
that, because if you’re only using one channel then you can have your
client autojoin – but that was enough to get her in. Presumably she
learned group etiquette on the fly, the way most people do.
&lt;/p&gt;
&lt;p&gt;People are all “I can’t use that, I’m too dumb, I can’t learn nerd
stuff” but before the browser era millions of non-nerds sat down with
friends, were guided through minimal instructions, and dealt with
inconsistent semi-hidden interfaces.&lt;/p&gt;
&lt;p&gt;You’re all so focused on point-and-click that you think people won’t
learn stuff when it gets them what they want. Pro-tip: primates are good
at learning stuff that gets them what they want, and the things most
primates want most of the time are food, sex, status and socialization.
The Internet only became useful as a way of getting food in the last
decade, but it’s been doing well in the other three since the birth of
Usenet. Is easy nice? Yes. Is it necessary? No. Not for the right
motivation.&lt;/p&gt;
</content><category term="misc"/><category term="technology"/><category term="users"/><category term="education"/><category term="ui"/><category term="ux"/></entry><entry><title>assumptions</title><link href="https://blog.randomstring.org/2021/01/12/assumptions/" rel="alternate"/><published>2021-01-12T11:33:00-05:00</published><updated>2021-01-12T11:33:00-05:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2021-01-12:/2021/01/12/assumptions/</id><summary type="html">
&lt;p&gt;Coworker: the username was autofilling so I assumed it was correct.
But you know what they say about assuming.&lt;/p&gt;
&lt;p&gt;Me: That it is indistinguishable from making a mistake, only you
didn’t realize you had even made a decision?&lt;/p&gt;
</summary><content type="html">
&lt;p&gt;Coworker: the username was autofilling so I assumed it was correct.
But you know what they say about assuming.&lt;/p&gt;
&lt;p&gt;Me: That it is indistinguishable from making a mistake, only you
didn’t realize you had even made a decision?&lt;/p&gt;

</content><category term="misc"/><category term="quote"/><category term="philosophy"/></entry><entry><title>a thing which should be obvious</title><link href="https://blog.randomstring.org/2020/12/05/a-thing-which-should-be-obvious/" rel="alternate"/><published>2020-12-05T18:57:40-05:00</published><updated>2020-12-05T18:57:40-05:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2020-12-05:/2020/12/05/a-thing-which-should-be-obvious/</id><summary type="html">
&lt;p&gt;A smart contract can prove that someone who knew a secret agreed to
the terms of the contract, but it can’t prove that someone who says they
aren’t party to that contract is lying.&lt;/p&gt;
</summary><content type="html">
&lt;p&gt;A smart contract can prove that someone who knew a secret agreed to
the terms of the contract, but it can’t prove that someone who says they
aren’t party to that contract is lying.&lt;/p&gt;

</content><category term="misc"/><category term="blog"/><category term="smart contracts"/></entry><entry><title>pseudovalidation techniques</title><link href="https://blog.randomstring.org/2020/12/01/pseudovalidation-techniques/" rel="alternate"/><published>2020-12-01T16:30:20-05:00</published><updated>2020-12-01T16:30:20-05:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2020-12-01:/2020/12/01/pseudovalidation-techniques/</id><summary type="html">
&lt;p&gt;Pseudovalidation is a major goal of marketing and advertising.
Actually validating a claim is expensive and often boring. Why not just
make people feel like they’re important in some way?&lt;/p&gt;
&lt;p&gt;But once you recognize it, pseudovalidation feels disrespectful:
these people are lying to me and don’t even care if I know it:&lt;/p&gt;
</summary><content type="html">
&lt;p&gt;Pseudovalidation is a major goal of marketing and advertising.
Actually validating a claim is expensive and often boring. Why not just
make people feel like they’re important in some way?&lt;/p&gt;
&lt;p&gt;But once you recognize it, pseudovalidation feels disrespectful:
these people are lying to me and don’t even care if I know it:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Subject: Lunch?  
  
Hi Dan,  
  
My Head of Delivery asked me to reach out to you (see below) and offer to  
buy you lunch through Uber Eats for a quick virtual meet and greet.  
  
Here is a 1-minute video &amp;lt;URL/explainer&amp;gt; about what we  
do and why PERSON would like to get on your radar.  
  
Let me know if you think it’s a bad idea?  
  
MARKETROID  
  
  
---------- Forwarded message ----------  
From: PERSON (no email address)  
Date: Nov 18, 2020, 9:41 AM  
Subject: Meeting with Dan  
To: MARKETROID (no email address)  
  
MARKETROID - I came across Dan’s LinkedIn profile. Here is the link  
&amp;lt;yup, a linked-in profile&amp;gt;  
Try to see if you can get an email and invite Dan to a virtual lunch.  
    
I think Dan would be a great person to get in front of.  
  
Thanks.  
  
PERSON-diminutive-nickname  
    
PERSON  
Head of Delivery at COMPANY  
Watch Our Software Development Humor Commercials  &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Let’s see what we’ve got.&lt;/p&gt;
&lt;p&gt;MARKETROID plays on our sympathy for them as a hard-working
MARKETROID who just wants to get their job done. They offer a small
bribe for our attention. As pseudovalidation that you have come to the
attention of PERSON, (who commands MARKETROID and is thus mighty and
powerful), they send a copy of an email which is curiously unconvincing
as the sort of email actual humans send to each other.&lt;/p&gt;
&lt;p&gt;Note that at no time does MARKETROID say&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;what COMPANY does&lt;/li&gt;
&lt;li&gt;why it would be interesting to us&lt;/li&gt;
&lt;li&gt;why they think we are clearly the people they need to sell to&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nor is it normal for a salescritter or MARKETROID to forward internal
email to someone outside the company. Usually there’s about seventeen
lines of extralegal disclaimers at the bottom explicitly rejecting that
as an action compatible with continued employment.&lt;/p&gt;
&lt;p&gt;Update, from a day later: as part of my job, I occasionally inspect
the company-wide spam filters to see whether they are effective. Guess
what a coworker determined was spam, with every word the same except
that it had my coworker’s name inserted instead of mine?&lt;/p&gt;
&lt;p&gt;Note to salescritters: if your phrasing is creepy when it’s repeated
to different people, it really is a bad idea.&lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="tech"/><category term="spam"/><category term="marketing"/></entry><entry><title>this one trick always backfires</title><link href="https://blog.randomstring.org/2020/11/17/this-one-trick-always-backfires/" rel="alternate"/><published>2020-11-17T09:10:16-05:00</published><updated>2020-11-17T09:10:16-05:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2020-11-17:/2020/11/17/this-one-trick-always-backfires/</id><summary type="html">
&lt;p&gt;In the last few years, email marketers have started sending streams
of messages that reference each other, apparently attempting to induce a
feeling of an existing relationship, and then shame that I am somehow
not carrying my end of it.&lt;/p&gt;
&lt;p&gt;This does not work anymore. &lt;/p&gt;</summary><content type="html">
&lt;p&gt;In the last few years, email marketers have started sending streams
of messages that reference each other, apparently attempting to induce a
feeling of an existing relationship, and then shame that I am somehow
not carrying my end of it.&lt;/p&gt;
&lt;p&gt;This does not work anymore. &lt;/p&gt;
&lt;p&gt;My internal evaluator has been so overloaded by these pathetic
(literally; look it up) entreaties that I am starting to view
non-marketing emails with a skeptical eye. “Oh really?” asks my stream
of consciousness. “My boss wants to meet at a different time tomorrow?
You expect me to fall for that? NEVER.”&lt;/p&gt;
&lt;p&gt;Plaintive whines about “Did this email slip through the cracks?” or
“Can we reschedule? [an appointment that was never made]” are now
instantly rejected.&lt;/p&gt;
&lt;p&gt;Tough noogies, marketers.&lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="spam"/><category term="marketing"/></entry><entry><title>Amazon Fire HD 10 (2019)</title><link href="https://blog.randomstring.org/2020/10/17/amazon-fire-hd-10-2019-/" rel="alternate"/><published>2020-10-17T18:25:53-04:00</published><updated>2020-10-17T18:25:53-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2020-10-17:/2020/10/17/amazon-fire-hd-10-2019-/</id><summary type="html">
&lt;p&gt;I began an entry in July of 2018 with this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The Amazon Kindle Fire HD10 (2017) is the high-end tablet of their
line. The hardware is mediocre and the software is quite bad. I do not
recommend you purchase this or any other Fire tablet… unless you have
some very specific requirements.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I can now say this:&lt;/p&gt;
&lt;p&gt;The Amazon Kindle Fire HD10 (2019) is the high-end tablet of their
line. The hardware is mediocre and the software is quite bad. I can
recommend that you purchase this tablet if you are comfortable with the
use of &lt;code&gt;adb&lt;/code&gt; and command line tools. It is cheap ($95 on
Prime Day) and capable of doing a number of useful things, such as…&lt;/p&gt;
</summary><content type="html">
&lt;p&gt;I began an entry in July of 2018 with this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The Amazon Kindle Fire HD10 (2017) is the high-end tablet of their
line. The hardware is mediocre and the software is quite bad. I do not
recommend you purchase this or any other Fire tablet… unless you have
some very specific requirements.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I can now say this:&lt;/p&gt;
&lt;p&gt;The Amazon Kindle Fire HD10 (2019) is the high-end tablet of their
line. The hardware is mediocre and the software is quite bad. I can
recommend that you purchase this tablet if you are comfortable with the
use of &lt;code&gt;adb&lt;/code&gt; and command line tools. It is cheap ($95 on
Prime Day) and capable of doing a number of useful things, such as…&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reading comics&lt;/li&gt;
&lt;li&gt;reading ebooks&lt;/li&gt;
&lt;li&gt;watching YouTube (I recommend NewPipe)&lt;/li&gt;
&lt;li&gt;watching other video streaming services&lt;/li&gt;
&lt;li&gt;controlling other electronics when a web-based or Android control
application is available&lt;/li&gt;
&lt;li&gt;casual web browsing (get Firefox, install uBlock Origin)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are guides on xda-developers to installing the Google store
(you’ll need 4 apks), installing a new launcher, disabling the
horrendous Amazon launcher, and even installing a new keyboard, which
was sorely lacking on the 2017 edition. All of those things require
developer mode and connecting &lt;code&gt;adb&lt;/code&gt; (the Android debugger)
via a USB cable. If that’s not a mystery to you, and you aren’t looking
to run high-end games, this is not an awful machine. And it is
cheap.&lt;/p&gt;
</content><category term="misc"/><category term="blog"/></entry><entry><title>when did I start to expect good fonts?</title><link href="https://blog.randomstring.org/2020/10/04/when-did-i-start-to-expect-good-fonts-/" rel="alternate"/><published>2020-10-04T15:36:29-04:00</published><updated>2020-10-04T15:36:29-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2020-10-04:/2020/10/04/when-did-i-start-to-expect-good-fonts-/</id><summary type="html">
&lt;p&gt;In the beginning of my experience, it wasn’t that computers had fonts
so much as each computer had A Font, and that was how the computer
talked to you. All of them were quite low resolution; blocky and
bad.&lt;/p&gt;
&lt;p&gt;Now I expect every character to be drawn in an appropriate, smooth,
curved, and informatively differentiated typeface.&lt;/p&gt;
&lt;p&gt;When did that change start, and when was it complete?
&lt;/p&gt;</summary><content type="html">
&lt;p&gt;In the beginning of my experience, it wasn’t that computers had fonts
so much as each computer had A Font, and that was how the computer
talked to you. All of them were quite low resolution; blocky and
bad.&lt;/p&gt;
&lt;p&gt;Now I expect every character to be drawn in an appropriate, smooth,
curved, and informatively differentiated typeface.&lt;/p&gt;
&lt;p&gt;When did that change start, and when was it complete?
&lt;/p&gt;
&lt;p&gt;To a certain extent, it begins with Macintosh, the first
widely-available system to offer a GUI on an all-drawn screen (rather
than character cells) and the LaserWriter, a printer whose pixels were
not visible without a magnifying glass. I didn’t own one of those,
though. What I did own was a 80386SX, a 32-bit CPU with a 16-bit bus,
which had an astonishing 2MB of RAM and a 130MB hard disk, supporting an
extended VGA card which could manage 256 colors at 1024x768 resolution.
We used to think that was hot stuff.&lt;/p&gt;
&lt;p&gt;Word for Windows was the first software I had regular access to that
could manage some semblance of fidelity to a typeface on screen (not
high fidelity) and on paper (not bad, really).&lt;/p&gt;
&lt;p&gt;Convincing screen typography didn’t really materialize until 2000 or
so, when higher-resolution displays could show TrueType scalable fonts.
Before that, anything I saw on screen was a poor imitation of a book;
sometime after that, I started expecting a close match.&lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="technology"/><category term="X11"/><category term="fonts"/></entry><entry><title>dice rolls</title><link href="https://blog.randomstring.org/2020/09/20/dice-rolls/" rel="alternate"/><published>2020-09-20T14:35:03-04:00</published><updated>2020-09-20T14:35:03-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2020-09-20:/2020/09/20/dice-rolls/</id><summary type="html">
&lt;p&gt;How the RPG rules describe dice rolls:&lt;br/&gt;
this result on the dice is a critical success,&lt;br/&gt;
this range is a success,&lt;br/&gt;
that range is a failure,&lt;br/&gt;
this result is a critical failure.&lt;/p&gt;
&lt;p&gt;How every RPG player feels about it:&lt;br/&gt;
this is a critical success,&lt;br/&gt;
this is nearly a critical success,&lt;br/&gt;
this is an excellent success,&lt;br/&gt;
these are very good successes,&lt;br/&gt;
this is a success,&lt;br/&gt;
that’s just a little failure,&lt;br/&gt;
that’s a failure,&lt;br/&gt;
these are failures too,&lt;br/&gt;
that result is a critical failure. &lt;/p&gt;</summary><content type="html">
&lt;p&gt;How the RPG rules describe dice rolls:&lt;br /&gt;
this result on the dice is a critical success,&lt;br /&gt;
this range is a success,&lt;br /&gt;
that range is a failure,&lt;br /&gt;
this result is a critical failure.&lt;/p&gt;
&lt;p&gt;How every RPG player feels about it:&lt;br /&gt;
this is a critical success,&lt;br /&gt;
this is nearly a critical success,&lt;br /&gt;
this is an excellent success,&lt;br /&gt;
these are very good successes,&lt;br /&gt;
this is a success,&lt;br /&gt;
that’s just a little failure,&lt;br /&gt;
that’s a failure,&lt;br /&gt;
these are failures too,&lt;br /&gt;
that result is a critical failure. &lt;/p&gt;
</content><category term="misc"/><category term="blog"/></entry><entry><title>what software does a firewall run, anyway?</title><link href="https://blog.randomstring.org/2020/09/11/what-software-does-a-firewall-run-anyway-/" rel="alternate"/><published>2020-09-11T11:57:49-04:00</published><updated>2020-09-11T11:57:49-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2020-09-11:/2020/09/11/what-software-does-a-firewall-run-anyway-/</id><summary type="html">
&lt;p&gt;What’s running on the firewall? A big list follows, with discussion.
&lt;/p&gt;</summary><content type="html">
&lt;p&gt;What’s running on the firewall? A big list follows, with discussion.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ACPId - reports on thermal performance&lt;/li&gt;
&lt;li&gt;atd - executes delayed jobs via at&lt;/li&gt;
&lt;li&gt;cron - executes repeating jobs, like the local backup, the remote
backup, and the automated package updater.&lt;/li&gt;
&lt;li&gt;dbus-daemon - nearly useless, but Linux more or less requires
it&lt;/li&gt;
&lt;li&gt;ddclient - dynamic DNS client updater, fires off an update when we
get a new external address&lt;/li&gt;
&lt;li&gt;dhclient - DHCP client, gets external address from the fiber
ISP&lt;/li&gt;
&lt;li&gt;dhcp6c - DHCPv6 client, not currently in use but plausible&lt;/li&gt;
&lt;li&gt;dhcpd - DHCP server, for handing out addresses on the inside
network. Has a failover arrangement with another server&lt;/li&gt;
&lt;li&gt;getty - console management&lt;/li&gt;
&lt;li&gt;irqbalance - a daemon on SMP Linux systems that evens out load
across cores&lt;/li&gt;
&lt;li&gt;postfix - handling local mail.&lt;/li&gt;
&lt;li&gt;radvd - IPv6 routing advertisements&lt;/li&gt;
&lt;li&gt;rsyslogd - the reliable syslog daemon&lt;/li&gt;
&lt;li&gt;snmpd - statistics reporting&lt;/li&gt;
&lt;li&gt;sshd - SSH daemon, allows access only from internal IPs&lt;/li&gt;
&lt;li&gt;systemd-udevd - last remnant of systemd, managing device names&lt;/li&gt;
&lt;li&gt;unbound - DNS caching resolver&lt;/li&gt;
&lt;li&gt;vnstatd - network bandwidth monitor&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Not appearing because they are kernel tasks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;interface configuration&lt;/li&gt;
&lt;li&gt;wireguard tunnels&lt;/li&gt;
&lt;li&gt;routing&lt;/li&gt;
&lt;li&gt;firewalling&lt;/li&gt;
&lt;li&gt;IPv6 tunnel&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I will get around to discussing them at a later date.&lt;/p&gt;
&lt;p&gt;What’s not running on the firewall?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;apache, nginx, or any other webserver&lt;/li&gt;
&lt;li&gt;postgresql, mariadb, or any other database&lt;/li&gt;
&lt;li&gt;mail service for other machines. This one is a toss-up: mail service
is relatively low-impact for modern hardware and low (single family)
volumes. But it has a lot of moving parts and implies lots of storage,
which impacts backup/restore time. As much as possible, I’d like the
restoration process for this firewall to be fast. So mail is on a
different, more resilient server.&lt;/li&gt;
&lt;li&gt;an authoritative DNS server. unbound looks to many other sources,
but it isn’t the source of my DNS authority for internal or external
networks. This is more of a toss-up than mail, because DNS service is
quite small.&lt;/li&gt;
&lt;li&gt;systemd. We’re using sysvinit because it is much smaller, has fewer
moving parts, and does not annoy me anywhere near as much.&lt;/li&gt;
&lt;li&gt;daemontools, or a similar service manager. daemontools is great for
semi-reliable services, because it will fire them back up again when
they terminate. On a firewall, though, I want everything to be so
reliable that any premature death is a major pain point that indicates I
need to fix it ASAP.&lt;/li&gt;
&lt;/ul&gt;
</content><category term="misc"/><category term="technology"/><category term="security"/><category term="linux"/><category term="firewalls"/><category term="administration"/><category term="philosophy"/></entry><entry><title>quoting myself, part n+3</title><link href="https://blog.randomstring.org/2020/09/10/quoting-myself-part-n-3/" rel="alternate"/><published>2020-09-10T15:51:10-04:00</published><updated>2020-09-10T15:51:10-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2020-09-10:/2020/09/10/quoting-myself-part-n-3/</id><summary type="html">
&lt;p&gt;For every computer system, someone needs to know what they are doing,
and check up on it when something goes wrong. That person is the
sysadmin.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If you don’t know who the sysadmin is, it’s you.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It’s just like everything else in life: if you care about a thing,
you are responsible for taking care of it. If nobody takes care of it,
it decays and dies.&lt;/p&gt;
</summary><content type="html">
&lt;p&gt;For every computer system, someone needs to know what they are doing,
and check up on it when something goes wrong. That person is the
sysadmin.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If you don’t know who the sysadmin is, it’s you.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It’s just like everything else in life: if you care about a thing,
you are responsible for taking care of it. If nobody takes care of it,
it decays and dies.&lt;/p&gt;

</content><category term="misc"/><category term="technology"/><category term="philosophy"/></entry><entry><title>last spinning boot disk replaced</title><link href="https://blog.randomstring.org/2020/09/07/last-spinning-boot-disk-replaced/" rel="alternate"/><published>2020-09-07T11:35:28-04:00</published><updated>2020-09-07T11:35:28-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2020-09-07:/2020/09/07/last-spinning-boot-disk-replaced/</id><summary type="html">
&lt;p&gt;Today I replaced the last spinning root disk in the house. The media
server still has 4x3TB spinning disks, but the old 120GB spinning boot
disk has been replaced by a cheap 1 TB SSD. Boot times improved
dramatically, and the database access for various things now feels
instantaneous.&lt;/p&gt;
&lt;p&gt;Process follows, but it’s nothing extraordinary.&lt;/p&gt;
</summary><content type="html">
&lt;p&gt;Today I replaced the last spinning root disk in the house. The media
server still has 4x3TB spinning disks, but the old 120GB spinning boot
disk has been replaced by a cheap 1 TB SSD. Boot times improved
dramatically, and the database access for various things now feels
instantaneous.&lt;/p&gt;
&lt;p&gt;Process follows, but it’s nothing extraordinary.&lt;/p&gt;

&lt;ol type="1"&gt;
&lt;li&gt;I shut down the machine&lt;/li&gt;
&lt;li&gt;Disconnected the four storage drives, just to be careful&lt;/li&gt;
&lt;li&gt;Connected the new SSD&lt;/li&gt;
&lt;li&gt;Booted to single user mode&lt;/li&gt;
&lt;li&gt;Partitioned the new SSD (sdb1 and sdb2, for root and swap)&lt;/li&gt;
&lt;li&gt;dd if=/dev/sda1 of=/dev/sdb1 bs=1M&lt;/li&gt;
&lt;li&gt;that took about 30 minutes&lt;/li&gt;
&lt;li&gt;grub-install /dev/sdb&lt;/li&gt;
&lt;li&gt;e2fsck -f /dev/sdb1&lt;/li&gt;
&lt;li&gt;resize2fs /dev/sdb1&lt;/li&gt;
&lt;li&gt;update-grub&lt;/li&gt;
&lt;li&gt;Double-checked UUIDs from /dev/disks/by-uuid and
/boot/grub/grub.cfg&lt;/li&gt;
&lt;li&gt;shut down the machine&lt;/li&gt;
&lt;li&gt;unplugged the old root drive, moved the SSD over to that SATA port,
reconnected the storage drives&lt;/li&gt;
&lt;li&gt;power up&lt;/li&gt;
&lt;li&gt;marvel at the speed of boot, investigate other issues like the
ethernet claiming to be flaky (the plug was loose; replugging solved
it).&lt;/li&gt;
&lt;/ol&gt;
</content><category term="misc"/><category term="blog"/><category term="linux"/><category term="technology"/></entry><entry><title>please focus your attention</title><link href="https://blog.randomstring.org/2020/08/04/please-focus-your-attention/" rel="alternate"/><published>2020-08-04T16:49:11-04:00</published><updated>2020-08-04T16:49:11-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2020-08-04:/2020/08/04/please-focus-your-attention/</id><summary type="html">
&lt;p&gt;One thing that UNIX users have that Mac and Windows users don’t: it’s
generally quite easy to change their window manager theme – and to
write/draw their own.&lt;/p&gt;
&lt;p&gt;Window decorations – a frame, a titlebar, some buttons – are handled
by the X11 window manager, which is itself a replaceable part. Window
managers range from minimalist exercises in reductionism through gaudy
feature-festivals like Enlightenment, the original perpetrator of
shaped, translucent and transparent effects. But…
&lt;/p&gt;</summary><content type="html">
&lt;p&gt;One thing that UNIX users have that Mac and Windows users don’t: it’s
generally quite easy to change their window manager theme – and to
write/draw their own.&lt;/p&gt;
&lt;p&gt;Window decorations – a frame, a titlebar, some buttons – are handled
by the X11 window manager, which is itself a replaceable part. Window
managers range from minimalist exercises in reductionism through gaudy
feature-festivals like Enlightenment, the original perpetrator of
shaped, translucent and transparent effects. But…
&lt;/p&gt;
&lt;p&gt;But most window manager themes get something quite wrong. They focus
lots of your attention on the active window, which is good, and then
they make the decorations for all the other windows dim, drab – and
frequently unreadable. Here’s my insight:&lt;/p&gt;
&lt;p&gt;The purpose of decoration on non-active windows is to have a
maximally readable title, so that you can differentiate them and select
the right one.&lt;/p&gt;
&lt;p&gt;The purpose of decoration on the active window is to stand out from
the rest, so that at a glance toward the screen you know which one is
active.&lt;/p&gt;
&lt;p&gt;Now, I said that it’s easy to create your own window manager theme –
and so I’ve followed through and created a series of themes for XFWM,
the window manager that is part of the XFCE desktop. The latest is
designed for large displays, 4K and more. The active window gets a
bright, rounded border (in a configurable color) and the inactive
windows get thin (black/white/black, 3 pixels total) frames and high
contrast black on light grey titles.&lt;/p&gt;
&lt;p&gt;And, as with all software one writes oneself, it doesn’t have to
please anyone except me.&lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="technology"/><category term="hci"/><category term="x11"/><category term="xfwm"/></entry><entry><title>quote of the day entry n+1</title><link href="https://blog.randomstring.org/2020/07/15/quote-of-the-day-entry-n-1/" rel="alternate"/><published>2020-07-15T14:53:20-04:00</published><updated>2020-07-15T14:53:20-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2020-07-15:/2020/07/15/quote-of-the-day-entry-n-1/</id><summary type="html">
&lt;blockquote&gt;
&lt;p&gt;“Magic”, applied to technology, is an indictment, not a
compliment.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;– me, July 15 2020. &lt;/p&gt;</summary><content type="html">
&lt;blockquote&gt;
&lt;p&gt;“Magic”, applied to technology, is an indictment, not a
compliment.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;– me, July 15 2020. &lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="technology"/><category term="philosophy"/></entry><entry><title>validation</title><link href="https://blog.randomstring.org/2020/06/23/validation/" rel="alternate"/><published>2020-06-23T12:56:24-04:00</published><updated>2020-06-23T12:56:24-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2020-06-23:/2020/06/23/validation/</id><summary type="html">
&lt;p&gt;A departing co-op (student intern, paid) said that she had been told
by another co-op that the company’s keywords were “clever, competent,
and kind” and that she was amazed to discover that we all lived up to
that.&lt;/p&gt;
&lt;p&gt;Since I was the first person at the company to start using that
phrase – in employment advertisements, where I was describing necessary
traits of the people I wanted to hire – I am entirely chuffed.
&lt;/p&gt;</summary><content type="html">
&lt;p&gt;A departing co-op (student intern, paid) said that she had been told
by another co-op that the company’s keywords were “clever, competent,
and kind” and that she was amazed to discover that we all lived up to
that.&lt;/p&gt;
&lt;p&gt;Since I was the first person at the company to start using that
phrase – in employment advertisements, where I was describing necessary
traits of the people I wanted to hire – I am entirely chuffed.
&lt;/p&gt;
</content><category term="misc"/><category term="blog"/></entry><entry><title>self-reflection: when do I post?</title><link href="https://blog.randomstring.org/2020/06/18/self-reflection-when-do-i-post-/" rel="alternate"/><published>2020-06-18T12:37:46-04:00</published><updated>2020-06-18T12:37:46-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2020-06-18:/2020/06/18/self-reflection-when-do-i-post-/</id><summary type="html">
&lt;div class="sourceCode" id="cb1"&gt;&lt;pre class="sourceCode bash"&gt;&lt;code class="sourceCode bash"&gt;&lt;span id="cb1-1"&gt;&lt;a aria-hidden="true" href="#cb1-1" tabindex="-1"&gt;&lt;/a&gt;&lt;/span&gt;
&lt;span id="cb1-2"&gt;&lt;a aria-hidden="true" href="#cb1-2" tabindex="-1"&gt;&lt;/a&gt;&lt;span class="fu"&gt;ls&lt;/span&gt; &lt;span class="at"&gt;-alt&lt;/span&gt; &lt;span class="at"&gt;--time-style&lt;/span&gt; +%A&lt;span class="kw"&gt;|&lt;/span&gt;&lt;span class="fu"&gt;awk&lt;/span&gt; &lt;span class="at"&gt;-F&lt;/span&gt; &lt;span class="dt"&gt;\ &lt;/span&gt; &lt;span class="at"&gt;-e&lt;/span&gt; &lt;span class="st"&gt;'{print $6}'&lt;/span&gt; &lt;span class="kw"&gt;|&lt;/span&gt;&lt;span class="fu"&gt;sort&lt;/span&gt;&lt;span class="kw"&gt;|&lt;/span&gt; &lt;span class="fu"&gt;uniq&lt;/span&gt; &lt;span class="at"&gt;-c&lt;/span&gt; &lt;span class="kw"&gt;|&lt;/span&gt; &lt;span class="fu"&gt;sort&lt;/span&gt; &lt;span class="at"&gt;-nr&lt;/span&gt;&lt;/span&gt;
&lt;span id="cb1-3"&gt;&lt;a aria-hidden="true" href="#cb1-3" tabindex="-1"&gt;&lt;/a&gt;&lt;/span&gt;
&lt;span id="cb1-4"&gt;&lt;a aria-hidden="true" href="#cb1-4" tabindex="-1"&gt;&lt;/a&gt;&lt;span class="ex"&gt;76&lt;/span&gt; Friday&lt;/span&gt;
&lt;span id="cb1-5"&gt;&lt;a aria-hidden="true" href="#cb1-5" tabindex="-1"&gt;&lt;/a&gt;&lt;span class="ex"&gt;47&lt;/span&gt; Thursday&lt;/span&gt;
&lt;span id="cb1-6"&gt;&lt;a aria-hidden="true" href="#cb1-6" tabindex="-1"&gt;&lt;/a&gt;&lt;span class="ex"&gt;19&lt;/span&gt; Tuesday&lt;/span&gt;
&lt;span id="cb1-7"&gt;&lt;a aria-hidden="true" href="#cb1-7" tabindex="-1"&gt;&lt;/a&gt;&lt;span class="ex"&gt;18&lt;/span&gt; Wednesday&lt;/span&gt;
&lt;span id="cb1-8"&gt;&lt;a aria-hidden="true" href="#cb1-8" tabindex="-1"&gt;&lt;/a&gt;&lt;span class="ex"&gt;15&lt;/span&gt; Saturday&lt;/span&gt;
&lt;span id="cb1-9"&gt;&lt;a aria-hidden="true" href="#cb1-9" tabindex="-1"&gt;&lt;/a&gt;&lt;span class="ex"&gt;12&lt;/span&gt; Monday&lt;/span&gt;
&lt;span id="cb1-10"&gt;&lt;a aria-hidden="true" href="#cb1-10" tabindex="-1"&gt;&lt;/a&gt; &lt;span class="ex"&gt;4&lt;/span&gt; Sunday&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
</summary><content type="html">
&lt;div class="sourceCode" id="cb1"&gt;&lt;pre
class="sourceCode bash"&gt;&lt;code class="sourceCode bash"&gt;&lt;span id="cb1-1"&gt;&lt;a href="#cb1-1" aria-hidden="true" tabindex="-1"&gt;&lt;/a&gt;&lt;/span&gt;
&lt;span id="cb1-2"&gt;&lt;a href="#cb1-2" aria-hidden="true" tabindex="-1"&gt;&lt;/a&gt;&lt;span class="fu"&gt;ls&lt;/span&gt; &lt;span class="at"&gt;-alt&lt;/span&gt; &lt;span class="at"&gt;--time-style&lt;/span&gt; +%A&lt;span class="kw"&gt;|&lt;/span&gt;&lt;span class="fu"&gt;awk&lt;/span&gt; &lt;span class="at"&gt;-F&lt;/span&gt; &lt;span class="dt"&gt;\ &lt;/span&gt; &lt;span class="at"&gt;-e&lt;/span&gt; &lt;span class="st"&gt;&amp;#39;{print $6}&amp;#39;&lt;/span&gt; &lt;span class="kw"&gt;|&lt;/span&gt;&lt;span class="fu"&gt;sort&lt;/span&gt;&lt;span class="kw"&gt;|&lt;/span&gt; &lt;span class="fu"&gt;uniq&lt;/span&gt; &lt;span class="at"&gt;-c&lt;/span&gt; &lt;span class="kw"&gt;|&lt;/span&gt; &lt;span class="fu"&gt;sort&lt;/span&gt; &lt;span class="at"&gt;-nr&lt;/span&gt;&lt;/span&gt;
&lt;span id="cb1-3"&gt;&lt;a href="#cb1-3" aria-hidden="true" tabindex="-1"&gt;&lt;/a&gt;&lt;/span&gt;
&lt;span id="cb1-4"&gt;&lt;a href="#cb1-4" aria-hidden="true" tabindex="-1"&gt;&lt;/a&gt;&lt;span class="ex"&gt;76&lt;/span&gt; Friday&lt;/span&gt;
&lt;span id="cb1-5"&gt;&lt;a href="#cb1-5" aria-hidden="true" tabindex="-1"&gt;&lt;/a&gt;&lt;span class="ex"&gt;47&lt;/span&gt; Thursday&lt;/span&gt;
&lt;span id="cb1-6"&gt;&lt;a href="#cb1-6" aria-hidden="true" tabindex="-1"&gt;&lt;/a&gt;&lt;span class="ex"&gt;19&lt;/span&gt; Tuesday&lt;/span&gt;
&lt;span id="cb1-7"&gt;&lt;a href="#cb1-7" aria-hidden="true" tabindex="-1"&gt;&lt;/a&gt;&lt;span class="ex"&gt;18&lt;/span&gt; Wednesday&lt;/span&gt;
&lt;span id="cb1-8"&gt;&lt;a href="#cb1-8" aria-hidden="true" tabindex="-1"&gt;&lt;/a&gt;&lt;span class="ex"&gt;15&lt;/span&gt; Saturday&lt;/span&gt;
&lt;span id="cb1-9"&gt;&lt;a href="#cb1-9" aria-hidden="true" tabindex="-1"&gt;&lt;/a&gt;&lt;span class="ex"&gt;12&lt;/span&gt; Monday&lt;/span&gt;
&lt;span id="cb1-10"&gt;&lt;a href="#cb1-10" aria-hidden="true" tabindex="-1"&gt;&lt;/a&gt; &lt;span class="ex"&gt;4&lt;/span&gt; Sunday&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

</content><category term="misc"/><category term="blog"/><category term="awk"/><category term="statistics"/></entry><entry><title>the internet is railways, not highways</title><link href="https://blog.randomstring.org/2020/06/16/the-internet-is-railways-not-highways/" rel="alternate"/><published>2020-06-16T08:04:39-04:00</published><updated>2020-06-16T08:04:39-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2020-06-16:/2020/06/16/the-internet-is-railways-not-highways/</id><summary type="html">
&lt;p&gt;Internet Fast Lanes: Every time somebody says “Fast Lane” in this
argument, I get a little more upset. The Internet doesn’t have fast
lanes and slow lanes.&lt;/p&gt;
&lt;p&gt;The Internet is not a highway.&lt;/p&gt;
&lt;p&gt;The Internet is a railway system.&lt;/p&gt;
</summary><content type="html">
&lt;p&gt;Internet Fast Lanes: Every time somebody says “Fast Lane” in this
argument, I get a little more upset. The Internet doesn’t have fast
lanes and slow lanes.&lt;/p&gt;
&lt;p&gt;The Internet is not a highway.&lt;/p&gt;
&lt;p&gt;The Internet is a railway system.&lt;/p&gt;

&lt;p&gt;The Internet is made up of train tracks and switches. Every train
travels at the same speed along a given track. If you want to increase
the traffic, you can raise the speed on the whole section of track, or
you can lay down another track next to it.&lt;/p&gt;
&lt;p&gt;When you pay for Internet service, you pay for a section of track
(two, actually, one in each direction) between your house and the
nearest train station owned by your ISP. You will never receive more
trains than can fit down the track you paid for, and you will never be
able to send more trains than can fit on the outbound track.&lt;/p&gt;
&lt;p&gt;As long as a given track is being used less than 100% (nose-to-tail
trains), all traffic will flow perfectly. Tracks cannot be used at more
than 100%, because you can’t fit another train on. If the local station
master wants to put another train on, some train waiting to go out must
be delayed. Only a few trains can fit on the siding, and if more come in
than can be handled, some trains will be disintegrated.&lt;/p&gt;
&lt;p&gt;The decisions that an ISP can make are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;increase the speed of a track&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;increase the number of tracks between two points.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;decide which trains waiting on the siding get to go through, and
which ones are disintegrated.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;” Fast Lane” means they want an extra fee to not disintegrate your
trains so often.&lt;/p&gt;
&lt;p&gt;“Net Neutrality” means that they aren’t allowed to look at your
train’s origin, destination and manifest before deciding to disintegrate
it or not.&lt;/p&gt;
&lt;p&gt;Therefore: if your tracks are not utilized 100%, no trains need to be
disintegrated. The disintegration is a system of last resort, which you
turn to only in extreme circumstances, because you could not build
capacity to keep up with demand. “Fast Lane” is a sign of a broken
system, which can be fixed by managing your systems properly and
predicting demand.&lt;/p&gt;
</content><category term="misc"/><category term="blog"/><category term="technology"/><category term="internet"/><category term="analogy"/></entry><entry><title>when you want to work with text</title><link href="https://blog.randomstring.org/2020/06/13/when-you-want-to-work-with-text/" rel="alternate"/><published>2020-06-13T12:47:26-04:00</published><updated>2020-06-13T12:47:26-04:00</updated><author><name>-dsr-</name></author><id>tag:blog.randomstring.org,2020-06-13:/2020/06/13/when-you-want-to-work-with-text/</id><summary type="html">
&lt;p&gt;You probably already know this, but as a reminder:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;sed&lt;/code&gt; is for inserting, replacing and deleting.
&lt;code&gt;-i&lt;/code&gt; causes sed to edit in place.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;pandoc&lt;/code&gt; is for converting between text formats like
HTML, Markdown, RST, TeX, various wikis…&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;calibre&lt;/code&gt; has command-line subtools like
&lt;code&gt;ebook-convert&lt;/code&gt; which can produce good EPUB from lots of
other formats.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;libreoffice&lt;/code&gt; handles typical office document tasks.
Graphical.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;sigil&lt;/code&gt; is specialized as an EPUB authoring tool.
Graphical.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;scribus&lt;/code&gt; can do page-layout tasks up to full daily
newspapers. Graphical.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With those and a good text editor, you can produce good-looking
documents ranging from a business letter through a book.&lt;/p&gt;
</summary><content type="html">
&lt;p&gt;You probably already know this, but as a reminder:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;sed&lt;/code&gt; is for inserting, replacing and deleting.
&lt;code&gt;-i&lt;/code&gt; causes sed to edit in place.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;pandoc&lt;/code&gt; is for converting between text formats like
HTML, Markdown, RST, TeX, various wikis…&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;calibre&lt;/code&gt; has command-line subtools like
&lt;code&gt;ebook-convert&lt;/code&gt; which can produce good EPUB from lots of
other formats.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;libreoffice&lt;/code&gt; handles typical office document tasks.
Graphical.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;sigil&lt;/code&gt; is specialized as an EPUB authoring tool.
Graphical.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;scribus&lt;/code&gt; can do page-layout tasks up to full daily
newspapers. Graphical.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With those and a good text editor, you can produce good-looking
documents ranging from a business letter through a book.&lt;/p&gt;

</content><category term="misc"/><category term="blog"/><category term="tools"/><category term="unix"/><category term="text"/></entry></feed>