Friday, December 12, 2025

The American Professor and the Japanese Giant Yamaha : The story of the worlds first commercial successful digital synthesizer Yamaha DX7

This is a great story of how Yamaha built the DX7 — with the help of John Chowning, the inventor of FM synthesis. Inspired by the bold vision of Yamaha’s then-president Genichi Kawakami, who said, “If we can make the best musical instruments in the world, then no matter how difficult it is, no matter how much money it costs, we’ll do it,” Yamaha spent over 10 years turning Chowning’s discovery into a real instrument. Their long pursuit finally resulted in the launch of the DX7 in the early 1980s, a synthesizer that changed music forever.

 Read

https://hub.yamaha.com/keyboards/synthesizers/discovering-digital-fm-john-chowning-remembers/

 

Saturday, November 29, 2025

The Birth of a Mini NAS - Beelink NAS manufacturing video

 A nice video of manufacturing NAS devices in Beelink china

The Birth of a Mini NAS - Pure Factory ASMR

https://www.youtube.com/watch?v=12lqrpUwgNc&t=1069s


Thursday, November 27, 2025

Saturday, November 15, 2025

dotnet-counters not showing threadpool counters in .NET 10 After upgrading from .NET 9 to .NET 10

I just upgraded an ASP.NET MVC application from .NET 9 to .NET 10. The process was straightforward: I simply changed the target framework version in the project file and updated a few NuGet packages. The app is hosted in Kubernetes, so I also updated the ASP.NET image version in the Dockerfile.
I built and deployed everything, and it went smoothly—taking just about 10 minutes in total.

Next, I wanted to inspect the ThreadPool performance counters inside the running container.

downloaded dotnet-counters direct binaries from https://learn.microsoft.com/en-us/dotnet/core/diagnostics/dotnet-counters 

copied to container with kubectl cp .

 Initially ran dotnet-counters from Windows Terminal (connected via kubectl exec).
→ The default System.Runtime counters loaded, but ThreadPool metrics (like threadpool-thread-count) were missing.
 

 

Switched to PuTTY (same kubectl exec session). → ThreadPool counters appeared.

 

 

The issue was specific to Windows Terminal—likely a display or ANSI escape sequence handling problem , resolution something.

 So  ran with counter filter then it showed

dotnet-counters monitor --process-id 1 --counters System.Runtime[threadpool-thread-count,threadpool-queue-length,threadpool-completed-items-count]

You can see  available counters via ./dotnet-counters.2 list , recently it gives a url to the documentation  https://learn.microsoft.com/dotnet/core/diagnostics/built-in-metrics.

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Sunday, November 9, 2025

Interesting things / Finds

 I will update this page with interesting things / finds i find day to day

Code

 Things i remember 09/nov/2025

JSLinux - Linux In Browser

I think this is the first project that ran Linux in browser  created by lgendery Fabrice Bellard  ( FFmpeg , QEMU)

https://bellard.org/jslinux/

 qb.js  - QBASIC implementation in javascript 

 QBASIC implementation in javascript stevehanov 

https://stevehanov.ca/blog/?id=92 

Kilo -  small text editor in less than 1K  

 Created by antirez (Salvatore Sanfilippo) creator of redis

 https://github.com/antirez/kilo

Building an Operating System for the Raspberry Pi

https://jsandler18.github.io/

Emulating The IBM PC On An ESP32

https://hackaday.com/2021/07/28/emulating-the-ibm-pc-on-an-esp32/

 Exclaidraw

A whiteboard where you can sketch sequence diagrams, flowcharts, architecture diagrams, or pretty much anything visual.

Built on  React

https://github.com/excalidraw/excalidraw 

mTCP - TCP/IP applications for your PC compatible retro-computers  

TCP/IP for old computers DOS 8088 

 https://www.brutman.com/mTCP/mTCP.html

 Teleforking a process onto a different computer!

https://thume.ca/2020/04/18/telefork-forking-a-process-onto-a-different-computer/ 

https://github.com/trishume/telefork 

 MartyPC is a cross-platform emulator of early PCs written in Rust

https://github.com/dbalsom/martypc 

https://martypc.net/

tiny8bit - Run some of the old computers emulated in browser 

Run many old computer C64 ,  Sinclair  , Amstrad  , and some old ones i never heard before.

https://floooh.github.io/tiny8bit/ 

 https://floooh.github.io/tiny8bit/

Web Based tools / Services

shodan - Search engine for everything connected in internet

Its a kind of a port scanner that scans at internet scale.

https://www.shodan.io/

 sqrx - Disposable browser - Be Fearless!

 sqrx allows to browse web in a remote computer instantly!

10-nov-2025 in their website i cannot find an option currently to use it , i think they are moving to enterprise space. 

their chrome extension still works 

https://chromewebstore.google.com/detail/squarex-be-secure-anonymo

https://sqrx.com  

 

Tech / Development Articles 

Soyuz digital computer -  Initially soyuz was not require that much computing functions as Apollo /  Space shuttle. Still soyuz used a digital computer  Argon-16 , Triple redundant Argon was of 2 KB RAM and 16KB ROM

https://spectrum.ieee.org/a-digital-soyuz 

 My Dad's Story (1970)- Soviet era technical college admission

A touching account of the author’s father’s journey to gain admission to a military university during the Soviet era  a story of determination, hardship, and perseverance, including his struggle just to board the train that would take him to his entrance exams.

http://ilyavolodarsky.com/soviet-college-admission 

General / Stories

Russia / Soviet union related

 https://medium.com/@arnfinn.sorensen/russia-my-father-and-me-629498afa3e7 

 

  

 

 

Wednesday, October 29, 2025

Reading SOAP / WCF client Request XML Response XML And HTTP Headers with system.servicemodel behavior and message inspector

To troubleshoot issues you need to log SOAP request, response XML, and response HTTP headers. You can use an endpoint behavior and a message inspector to achieve it.

See the below sample — it will call a public service: https://www.crcind.com/csp/samples/SOAP.Demo.cls

Project File

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net9.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="System.ServiceModel.Http" Version="8.1.2" />
  </ItemGroup>

</Project>

Program.cs

using SoapAddIntegerDemo;
using System;
using System.ServiceModel;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var binding = new BasicHttpBinding();
        binding.Security.Mode = BasicHttpSecurityMode.Transport;
        var behavior = new SoapInspectorBehavior();

        var address = new EndpointAddress("https://www.crcind.com/csp/samples/SOAP.Demo.cls");
        var client = new SoapDemoClient(binding, address);
        client.Endpoint.EndpointBehaviors.Add(behavior);

        var result = await client.AddIntegerAsync(1, 2);
        Console.WriteLine($"Received Result :  {result}");
        Console.WriteLine($"Soap Request :  {behavior.LastRequestXml}");
        Console.WriteLine($"Soap Response :  {behavior.LastResponseXml}");
        Console.WriteLine($"Soap response headers :  {behavior.LastHeaders}");

        Console.ReadLine();
    }
}

SoapMessageInspector.cs

using System.Net;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.ServiceModel.Dispatcher;
using System.Text;

public class SoapMessageInspector : IClientMessageInspector
{
    public string LastRequestXml { get; private set; } = null!;
    public string LastResponseXml { get; private set; } = null!;
    public string LastHeaders { get; private set; } = "No Headers received";

    public object BeforeSendRequest(ref Message request, IClientChannel channel)
    {
        LastRequestXml = request.ToString();
        return request;
    }

    public void AfterReceiveReply(ref Message reply, object correlationState)
    {
        LastResponseXml = reply.ToString();
        foreach (var property in reply.Properties)
        {
            if (property.Value is not HttpResponseMessageProperty httpProperties) continue;

            var sb = new StringBuilder();
            var headers = (WebHeaderCollection)httpProperties.Headers;
            foreach (var headerName in headers.AllKeys)
            {
                sb.AppendLine($"{headerName}: {headers[headerName]}");
            }
            LastHeaders = sb.ToString();
        }
    }
}

SoapInspectorBehavior.cs

using System.ServiceModel.Channels;
using System.ServiceModel.Description;
using System.ServiceModel.Dispatcher;

public class SoapInspectorBehavior : IEndpointBehavior
{
    private readonly SoapMessageInspector _inspector = new();

    public string LastRequestXml => _inspector.LastRequestXml;
    public string LastResponseXml => _inspector.LastResponseXml;
    public string LastHeaders => _inspector.LastHeaders;

    public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters) { }

    public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher) { }

    public void Validate(ServiceEndpoint endpoint) { }

    public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
    {
        clientRuntime.ClientMessageInspectors.Add(_inspector);
    }
}

SoapDemoClient.cs

using System.ServiceModel;
using System.ServiceModel.Channels;
using System.Threading.Tasks;

namespace SoapAddIntegerDemo;

[ServiceContract(Namespace = "http://tempuri.org")]
public interface ISoapDemo
{
    [OperationContract(Action = "http://tempuri.org/SOAP.Demo.AddInteger", ReplyAction = "*")]
    Task<long> AddIntegerAsync(long Arg1, long Arg2);
}

public class SoapDemoClient : ClientBase<ISoapDemo>, ISoapDemo
{
    public SoapDemoClient(Binding binding, EndpointAddress address)
        : base(binding, address)
    {
    }

    public Task<long> AddIntegerAsync(long Arg1, long Arg2)
        => Channel.AddIntegerAsync(Arg1, Arg2);
}

Tuesday, October 28, 2025

Tool - excalidraw - Draw sequence diagrams flow charts

For a long time, I’ve been using WebSequenceDiagrams.com and SequenceDiagram.org to draw sequence diagrams. Both are great tools — but if you don’t use them regularly, it takes a bit of time to get back into the flow. Recently, I came across Excalidraw , It’s a simple, intuitive whiteboard where you can sketch sequence diagrams, flowcharts, architecture diagrams, or pretty much anything visual. The best part? It’s open source — you can check it out https://excalidraw.com/ (or even self-host it) here: github.com/excalidraw/excalidraw . If you haven’t tried it , Give It a try !

The American Professor and the Japanese Giant Yamaha : The story of the worlds first commercial successful digital synthesizer Yamaha DX7

This is a great story of how Yamaha built the DX7 — with the help of John Chowning, the inventor of FM synthesis. Inspired by the bold visio...