Repository navigation
A volume for the player, and a server that rests when nobody is using it.
The player has a volume of its own. A speaker at the end of its row opens a
narrow upright level over itself, with a way to silence it, and closes on a press
outside or Escape; on a phone it sits at the foot of the opened player. The level
belongs to the browser and never reaches the server. It is squared on its way to
the sound, since hearing is not linear, so the middle of the line sounds like the
middle. On an iPhone or an iPad, where a page cannot set the level, the speaker
mutes and unmutes instead.
A server nobody is using asks nothing. Two loops woke every minute to read the
database for answers that could not have changed, and between them kept a
connection open for ever — which in sqlx is a thread with a two megabyte stack of
its own, retired and replaced every half hour. An idle server now holds none.
The tags of an MP3 name the people in its involved people list by what they did —
Producer, Arranger, Engineer, Mix, DJ-mix — rather than as a row of TIPL that says
nothing about which is which. The producer, which the tag reader used to drop from
an MP3 altogether, is among them.
On a phone the opened player shrinks the cover to fit, rather than letting it push
the controls off a screen that is not much taller than it is wide.
Nothing changes in the database, so a data directory made by 0.1.0 is one 0.2.0
opens as it is, and every password hashed then still lets its account in.
podman run -d --name tocata \
-p 4224:4224 \
-v tocata-data:/data \
-v /srv/music:/media:ro \
ghcr.io/ogarcia/tocata:0.2.0
Or the binary for this architecture from the files below, which is the whole
program. It makes its own database on the way up and writes the first
administrator's password to the log exactly once.