studio status report: 2023-01

month 01 of 2023 was about slow progress on Songhay.Player.ProgressiveAudio and the new topic of travel

The “Songhay.Player.ProgressiveAudio release 6.0.0” project is still underway. There are two, audio-player samples showing this work:


A third sample is planned, demonstrating how a playlist of progressive audio files should be presented. These three pieces will work together to guide me toward how to build a WebAssembly-based product in Bolero/F#. For this month, like last month, the Progressive Audio name is at the top of the Obsidian Graph View:

Obsidian Graph View

The size of this graph is embarrassingly smaller than that of last month. At the bottom of the graph is the new Studio topic, travel. Not a small amount of time was spent researching how to arrange travel in the 21st century as the following excerpts of Obsidian notes reveal:

[[travel]]: Google Flights

Modern travel arrangement featuring commercial flight starts with searches for flights, reporting prices by date. Google Flights is the preferred way of getting these reports. The prices help drive the selection of departure and return dates. Ideally, these prices lead back to the airline directly—otherwise, the risk of getting an inflexible cheap flight is in play.

Once flight departure and return dates are selected, hotel and car rental searches follow. Hotel searches starts with the indirect booking sites until experience yields direct relationship with a hospitality brand.

[[Azure Functions]]: support for dependency injection has been there for a while…

Before you can use dependency injection, you must install the following NuGet packages:

using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;

[assembly: FunctionsStartup(typeof(MyNamespace.Startup))]

namespace MyNamespace
    public class Startup : FunctionsStartup
        public override void Configure(IFunctionsHostBuilder builder)

            builder.Services.AddSingleton<IMyService>((s) => {
                return new MyService();

            builder.Services.AddSingleton<ILoggerProvider, MyLoggerProvider>();

[[Microsoft]] Windows 10 now ships with OpenSSH?

A Linus Tech Tips video tells me a few things:

Windows Doesn’t Suck! Microsoft Just Wants You To Think So…

Windows Doesn’t Suck! Microsoft Just Wants You To Think So…

First, there has been a %ProgramData%\ssh folder and it was empty:

PS> Get-ChildItem -Path C:\ProgramData\ssh\

Second, I am almost certain, I did not install OpenSSH (in 2021) yet here it is:

PS> Get-ChildItem -Path C:\WINDOWS\System32\OpenSSH

    Directory: C:\WINDOWS\System32\OpenSSH

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----         5/20/2021   1:48 PM         307712 scp.exe
-a----         5/20/2021   1:48 PM         374272 sftp.exe
-a----         5/20/2021   1:48 PM         481280 ssh-add.exe
-a----         5/20/2021   1:48 PM         382976 ssh-agent.exe
-a----         5/20/2021   1:48 PM         662016 ssh-keygen.exe
-a----         5/20/2021   1:48 PM         557568 ssh-keyscan.exe
-a----         5/20/2021   1:48 PM         946176 ssh.exe

[[Songhay Player for Progressive Audio]]: storing/changing state in data- attributes is not reliable

The following is showing me that data- attributes work best when they are read-only:


I assumed that click behavior was being attenuated by window animation calls —but, by a process of elimination, I can see this is a DomStringMap mutation-delay problem:


There must be a lag when setting button.dataset.playing.

[[PowerShell]]: no signs seen of Microsoft unifying/standardizing environment variables across platforms

Issue #1262 reveals the Microsoft attitude toward cross-platform unification/standardization of environment variables: there are no direct statements or forms of “apology” expressing concern. Issues #3263 and #2312 are closed not out of success but more of reducing duplicates and suggesting that some kind of deliberate effort of unification/standardization is not needed by design.

As of this writing, when $env:COMPUTERNAME, $env:HOMEDRIVE or $env:OS returns a value, this implies that PowerShell is running on Windows. Simultaneously, $env:DESKTOP_SESSION, $env:HOME or $env:PWD returning values implies Linux. Even more explicit tests can be scripted like this:

$studioServer = "[unknown]"

if(Test-Path -Path Env:COMPUTERNAME) {
    $studioServer = $env:COMPUTERNAME