first_page

studio status report: 2026-04

Month 04 of 2026 witnessed the continued lack of the re-release of kintespace.com—still almost out the ‘door.’ This month was dominated by two blockers:

  1. an illness that lasted over a seven days
  2. errands and meetings required in response to losing my #day-job of over four years

One, bound by logic, would assume that the loss of my #day-job would provide more time to get things done in my Studio. Instead, I spent more time staring to into space, recovering from illness 😐 10 days were spent in month 04 on Internet Publications:

Obsidian Graph

I also managed to release the following NuGet packages for this Studio:

  • SonghayCore 10.0.0 [📦 NuGet ]
  • SonghayCore.xUnit 10.0.0 [📦 NuGet ]
  • Songhay.DataAccess 10.0.0 and 10.0.1 [📦 NuGet ]
  • Songhay.Publications 10.0.0 and 10.0.1 [📦 NuGet ]
  • Songhay.Publications.DataAccess 10.0.0 and 10.0.1 [📦 NuGet ]

This Studio-wide upgrade to .NET 10 was overdue and could no longer be delayed. Moreover, .NET 10 has new feature, “file-based apps,” that allows eleventy to call out to .NET Publications code via the child_process module [📖 docs ]. This discovery maximizes the flexibility of eleventy pipelines removing a great number of conceptual and psychological boundaries in this Studio.

Selected notes of the month follow:

Obsidian: another sweep through plugins 🧹😐

plugins that try to replace Jupyter Notebooks

other awesome picks

Publications: “Why the heck are we still using Markdown??”

We don’t know what we want.

Do we want UI? Do we want a programming language? We don’t know. The only reason feature creep exists is because of unclear specifications.

You want a MINIMAL easily legible markup language, you have markdown. Simple as that right?

In markdown you can write a bold in different ways. **bold**, __bold__, <b>bold</b> are some of the ways a valid bold can be written. And these are for commonmark. If you’re using something which isn’t marketing itself as “CommonMark™ Compliant®©” You can very well encounter valid stuff that produce the same input. Like:

  • _*bold*_
  • *_bold*_
  • _*bold_*
  • *_bold_*

Truly magnificent.

—“Why the heck are we still using Markdown??

Songhay Core (C♯): extensive breaking changes in JsonElementExtensions 🔨🔥

The following renaming is happening in JsonElementExtensions:

  • every member that returns a nullable will be suffixed with *OrNull which is a functional but personal reminder that C# lacks an in-built Result<_,_> type
  • the ToScalarValue overloads will be renamed to ToValueTypeOrNull to reduce the use of the word *Scalar*
  • the ToObject overloads will be renamed to ToInstanceOrNull to use the word *Instance* to allude to reference types

https://github.com/BryanWilhite/SonghayCore/issues/191

Songhay Core (C♯): consider removing object-boxing from the signatures of XmlUtility methods #to-do 😐🔨

object should be removed from the signatures of:

  • GetNodeValue (consider marking obsolete because it is a shallow wrapper for GetNavigableNode)
  • GetNodeValueAndParse<T>

https://github.com/BryanWilhite/SonghayCore/issues/192

Jeffrey Snover: “Microsoft Hasn’t Had a Coherent GUI Strategy Since Petzold”

In 1988, Charles Petzold published Programming Windows. 852 pages. Win16 API in C. And for all its bulk, it represented something remarkable: a single, coherent, authoritative answer to how you write a Windows application. In the business, we call that a ‘strategy’.

What happened next is a masterclass in how a company with brilliant people and enormous resources can produce a thirty-year boof-a-rama by optimizing for the wrong things.  AKA Brillant people doing stupid things.

Silverlight wasn’t killed by technical failure. The technology was fine. It was killed by a business strategy decision, and developers were the last to know.

Remember that pattern. We’ll see it again.

—“Microsoft Hasn’t Had a Coherent GUI Strategy Since Petzold

Snover poster

Application Insights: “Exceptions sent to AppInsights twice” #day-job 😐

It’s official—and still not fixed:

When a function throws an exception, that exception is shown once in the console but is logged twice to AppInsights (testing that locally in Visual Studio) with different categories: Host.Results and Function.Function1.

—“Exceptions sent to AppInsights twice

Application Insights screenshot

Internet Products: testing meta property="og:image" (Open Graph protocol metadata)

It’s working without any Twitter stuff:

LinkedIn screenshot

eleventy: the need to run dotnet file-based apps from Node.js might be real 😐

According to Bing AI responding to the prompt, run command line from nodejs:

You can run command-line commands from Node.js using the built-in child_process module.

There are two main approaches:

  • exec — runs a command and buffers the entire output (good for short outputs).
  • spawn — streams output as it’s produced (better for large outputs or long-running processes).

exec code sample from Bing:

// Import the child_process module
const { exec } = require('child_process');

// Command to run (example: list files)
exec('ls -la', (error, stdout, stderr) => {
    if (error) {
        console.error(`Error executing command: ${error.message}`);
        return;
    }
    if (stderr) {
        console.error(`Command error output: ${stderr}`);
        return;
    }
    console.log(`Command output:\n${stdout}`);
});

spawn example:

const { spawn } = require('child_process');

// Spawn a process (example: ping google.com)
const child = spawn('ping', ['-c', '4', 'google.com']);

// Handle standard output
child.stdout.on('data', (data) => {
    console.log(`Output: ${data}`);
});

// Handle standard error
child.stderr.on('data', (data) => {
    console.error(`Error: ${data}`);
});

// Handle process exit
child.on('close', (code) => {
    console.log(`Process exited with code ${code}`);
});

I look forward (finally) to seeing that something like this:

dotnet run file.cs -- arg1 arg2

…called with ease from the eleventy context in Node.js.

eleventy: “The End of Eleventy”

Who uses 11ty? NASA, CERN, the TC39 committee, W3C, Google, Microsoft, Mozilla, Apache, freeCodeCamp, to name a few. The A11y Project launched with Eleventy 1.0 and its lead developer Eric Bailey noted that nearly three years later, the site could still install and run from a cold start with no complications.

Leatherman was initially hired by Netlify to work on Eleventy full-time, but in September 2024, 11ty moved to Font Awesome, with Leatherman joining their team. Now, in 2026, Eleventy is "Build Awesome", angled as the all-in-one site builder for Font Awesome and Web Awesome. But why?

My point of writing this is that the companies looking to monetize are far too focused on creating high-quality tools instead of focusing on doing the work and research into the "why". Into communicating the philosophy of SSGs in a way that would make them sincerely enticing long-term to non-technical people.

—“The End of Eleventy

Songhay System Studio: “Clean Architecture vs Hexagonal Architecture”

Both patterns enforce the same fundamental rule: business logic must not depend on infrastructure.

In both:

  • The domain (entities, business rules, use cases) sits at the centre
  • Infrastructure (databases, HTTP, messaging) sits at the edge
  • The domain communicates with infrastructure through interfaces, never directly
  • Swapping infrastructure — changing your database, your messaging platform, your delivery mechanism — should not require touching business logic

If you understand one deeply, the other will feel familiar.

—“Clean Architecture vs Hexagonal Architecture

Node.js-based Internet Product Research: I have verified that child_process works with dotnet run --file 😐✅

Following up the speculation from earlier this month:

screenshot of  command

See “How To Handle Command-line Arguments in Node.js Scripts” 📖

open pull requests on GitHub 🐙🐈

sketching out development projects

  • upgrade SonghayCore, Songhay.Publications, Songhay.DataAccess, etc. to .NET 10 📦🔝
  • consider using Lerna to coordinate the two levels of npm scripts 🧠👟
  • use a Jupyter Notebook to track finding and changing Amazon links to open source links 📓⚙
  • use a Jupyter Notebook to convert flickr links to Publications (responsive image) links 📓⚙
  • establish DataAccess logic for Obsidian markdown metadata 🔨✨
  • establish DataAccess logic for Index data, including adding and removing Obsidian documents (and Segments) 🔨✨
  • package DataAccess logic in *Shell project for npm scripting 🚜✨
  • convert rasx() context repo to the relevant conventions shown in the diagram above 🔨🚜
  • retire the old kinte-space repo for kintespace.com 🚜🧊
  • convert Songhay Day Path Blog repo to the relevant conventions shown in the diagram above 🔨🚜
  • re-release Songhay Dashboard by updating its repo to the relevant conventions shown in the diagram above 🔨🚜
  • start development of Songhay Publications Index (F♯) experience for WebAssembly 🍱✨
  • start development of Songhay Publications - Data Editor to establish a GUI for *Shell and provide visualizations and interactions for Publications data 🍱✨

🐙🐈https://github.com/BryanWilhite/