Wednesday, 8 July 2026

Navigating OpenClaw Architecture

The best place to start is by reading architecture.md in the docs/concepts subdirectory.

Then move on to the other concepts (not all equally weighted in importance) than read the source code.

Tuesday, 7 July 2026

Data Rates Rule...OK!

So git clone is busy "Receiving objects" but it's taking time...what data rate is underlying this operation?

Data rates are measured using a variety of standardised conventions.  

They are usually multiples of bits per second (bit/s) or bytes per second (B/s).  bit and Byte are ISQ symbols (International System of Quantities).

Residential Internet speeds are often measured in Megabits per second (Mbit/s - often abbreviated Mbps - as you will see in the Windows Network Speed Test application).  1 Mbps is 1000 kilo bits per second, or 1000 kbit/s or 1000 kbps).

There is also the Mibit/s convention - which stands for mebibits per second (or MiB/s).

This is 2^20 bits per second, or 1,048,576. Just over a million bits per second, basically.

External Dependencies Are the Root of All Evil

Open source software is great except when it isn't.

Update all the dependencies for a new cool software and older software (using older versions of those co-dependencies) suddenly breaks.  

In Windows, we used to call it "DLL Hell" but it has its manifestations in Linux too.

Then it's a cycle of repair and debugging.

Debugging Python - Module Versions

You may get errors in Python programs when you update external module dependencies, as the newer versions may have added some breaking changes - e.g. stronger validation or security checks. 

You can validate the version of the module you are using if __version__ is exposed by the module. To do this, try the following, using the module name required (urllib3 used here as an example):

python
import urllib3
print( urllib3.__version___)

Thursday, 25 June 2026

Introduction to VLSI Systems (Mead & Conway, 1978)

An early textbook on building semiconductor systems. A key learning was the scaling law: "as transistors grow entirely new classes of computation become feasible".

ApplicationData versus LocalApplicationData

Both refer to app-specific storage locations in Windows.

  • ApplicationData - roaming profile data
  • LocalApplicationData - local, machine-specific data
Data in ApplicationData is not automatically cleaned up - and is treated as "important to the user". Data in LocalApplicationData is generally persistent - but Storage Sense can purge temporary files.

The Powerful System.Environment

System.Environment is an all-powerful class.  

It allows interaction with the current environment and platform. It is something to revere when developing intelligent agents that need to navigate the user's environment.

System.Environment.SpecialFolder is a well-known enum.  

It contains the CSIDLs (these are not .NET "things", they are Windows "things"). 

CSIDL = Constant Special Item ID List.  Here are some of the popular values.

Desktop 0  (logical desktop rather than physical file system location)
ApplicationData 26
LocalApplicationData 28
System 37
ProgamFiles 38

A full rundown of CSIDLs is here.