Unparalleledly deep systems knowledge exclusively licensed to the Win Joe Software Foundation (WSF) under one or more contributor license agreements
Friday, 8 May 2026
Debugging Web Access Issues with Microsoft Edge
Why Pre Shared Keys are not Wifi Passwords
Tuesday, 5 May 2026
Protecting RAM
Microsoft's GitHub
IPv4 vs IPv6
Purpose of IP Addresses and the Problem IPv6 Solves
An IP address (Internet Protocol address) is a numeric label to identify a network interface of a computer or network node participating in a computer network using the relevant IP version.
IPv6 was created to tackle the problem of IPv4 exhaustion.
IPv6 uses 128 bit addresses, yielding an address space of 2^128 possible addresses. This contrasts massively with IPv4 which is only 32 bits!!
Why is there no Planned IPv7?
The address space of IPv6 is so large that address exhaustion is not a foreseen possibility, and hence no IPv7 is planned at present.
What transition technologies are in play to help move to IPv6?
There are some transition technologies e.g. NAT64, aimed at easing the transition from IPv4 to IPv6.
Apart from Bigger Address Space, what else does IPv6 Bring to the Table?
Apart from bigger size, IPv6 also adds some interesting new features. Learn these.
Thursday, 30 April 2026
Understanding localhost
More on the Common Information Model
We have previously mentioned the CIM, or Common Information Model, in the context of systems management standards. It is effectively an object-oriented schema for classifying objects pertaining to systems management.
An example schema can be found here (note: there are multiple versions of the schema).
Notes from Microsoft Learn on this topic can be found in Microsoft's WMI SDK notes here.
From an organization perspective, the most important aspect is consistent adoption of a sufficiently descriptive data model, rather than the details of the data modelling itself.
Wednesday, 29 April 2026
The Mesh Network
The LM Link Feature in LM Studio
LM Link is a way to connect devices on which LM Studio is installed; allowing you to load models on remote devices as if they were local. Chats remain local and the only thing loaded on LM Studio's backend servers are your device list. In a way, it's model-connectivity-as-a-service using your own hardware.
LM Link is implemented on top of Tailscale VPN.
Monday, 27 April 2026
WinJoe, Was ist Delta Format?
Delta format (often called Delta Lake) is an open-source data storage layer originally developed by Databricks.
It sits on top of Apache Parquet and enhances it with database‑like guarantees and metadata management.
Delta is designed specifically for large-scale data engineering where reliability, consistency, and performance are essential - according to the creators, Databricks,
Big Data's New Vacation Home - The Lakehouse; Microsoft's Approach
Friday, 24 April 2026
Troubleshooting WSL2 Memory Hogging
WSL2 hogs memory and doesn't release it even when all consoles are closed. Do wsl --shutdown to free up memory.
Why does TypeScript feel a bit C-Sharpy?
TypeScript was created by Anders Hejlsberg, a Danish software engineer, in 2012. He formerly created C# around the year 2000. He is also known for Turbo Pascal and Delphi, both extraordinary products in their time. Deservedly he is a Microsoft Technical Fellow (a list of whom appear here).
Types in TypeScript
- boolean
- number (which represents integers and floating points)
- string
- BigInt (ES2020+) to represent whole numbers larger than 2^53 -1, and
- symbol to create unique identifiers
Node Version Manager - Strongly Recommended
The Node version manager, nvm, is strongly recommended to manage your version of Node.js and npm.
It also allows switching between various versions of Node (Nodejs and npm) for testing purposes.
As per official docs, nvm is designed to be installed per-user and invoked per-shell. It works on "any POSIX compliant shell" - including on Unix, macOS and WSL.
Once you install nvm (by wget'ing the installation shell script and piping it to bash) you can restart WSL and start using nvm.
Some nvm commands to know:
nvm install node # install latest version
nvm install --lts # install latest LTS version
nvm use node # switches to latest version
nvm use <version> #switch to a specific version
To see all Node versions, do nvm ls. Node uses semantic versioning, following the pattern MAJOR.MINOR.PATCH.
nvm ls shows the version active in shell in blue, and installed versions in green. Yellow are versions referenced by aliases but not installed.
Installing a Transpiler
Dawn of the Transpiler
The term "transpiler" (referring to a source-to-source translation tool, or "translating compiler") gained popularity around 2013 with the proliferation of translators from TypeScript and other abstractions (CoffeeScript, Dart) into JavaScript.
JavaScript at the time was becoming a "universal runtime".
Babel is a popular transpiler. tsc is the official transpiler. It can be installed via npm.
Thursday, 23 April 2026
Downsampling from a Data Science Perspective
Scala, Scala, Everywhere
Apache Spark (and its roots in Scala)
Apache Spark is a foundational layer underlying many data platforms.
It is written both in Java and Scala. Read the source code here.
A good starting point is SparkSession.scala.
One of Spark's "selling points" is "Exploratory Data Analysis (EDA) on petabyte-scale data without having to resort to downsampling" (see detailed post on downsampling).
A petabyte (PB) holds 1000 terabytes (one thousand million million bytes).
The Apache Incubator
Wednesday, 22 April 2026
Qwen Series of Models
The Qwen series of models comes from Alibaba Cloud. The Qwen 3.5 models, released in early 2026, has set new records for sub 2B models. It is much smaller than gpt-oss.
Compile to WASM - The Emscripten Toolchain
WebAssembly Not Automatically Blocked by Browsers
WebAssembly is a type of code designed to run in modern web browsers. It is designed to run alongside JavaScript using WebAssembly JavaScript APIs - creating an option for performance critical functionality.
As WebAssembly increases the browser's attack surface, so browsers contain WASM inside the browser's sandbox and restricts system access.
A risk maybe breaking out of the sandbox. Adobe Flash was a product sandboxed after a bunch of exploits, and after sandboxing exploits still occurred.
Transmission of WASM does not require TLS, HSTS or any other transport layer security mechanism making it susceptible to man-in-the-middle attacks.
Integrity checking is also impossible as WASM modules need not be signed by the author.
Some security-focused browser configurations can block WASM.
An Insider Look at CPython: The "Compiler-Interpreter"
Thursday, 16 April 2026
UTM is Urchin Tracking Module
UTM is something you may come across first in URLs.
UTM refers to Urchin Tracking Module, named after Urchin, the firm Google acquired in 2005 to form the basis for Google Analytics.
- utm_source denotes a tracking parameter in a URL - to denote where traffic is coming from
- utm_source=google indicates traffic came from google
- utm_source=email traffic came from an email
Saturday, 4 April 2026
TypeScript in CodePen
Friday, 3 April 2026
Bun - The JavaScript Runtime used by All (Cool Cats)
Thursday, 2 April 2026
Inside the Claude Code CLI
Wednesday, 18 March 2026
PowerShell Inspired Installations using iwr
npm and pnpm - the differences
npm, the Node package manager, can be incredibly disk-inefficient. pnpm was created to be (literally) a "performant npm" sometimes also called "painless npm".
The difference lies in each others' ability to store packages.
npm duplicates node_modules per project, resulting in a huge disk footprint, whereas pnpm uses a global store and stores links to the same, resulting in 70-90% space savings.
node_modules is a directory in a NodeJS project storing third-party libraries and dependencies.
Tuesday, 17 March 2026
TypeScript for Java and C# Programmers
There is a good tutorial here and also a basic (W3schools) one here.
An important point to note is that while TypeScript adds static typing to JavaScript, the underlying runtime is the same as JavaScript.
Recall that with static typing, the type of every variable and expression is checked before the program runs. This enables errors to be caught at compile-time rather than run-time (in dynamic typing, by contrast, types are enforced only when code executes).
TypeScript is not a "mandatory" OOP language, in the same way as Java or C# (wherein the class is the basic unit of code organization - all data and behaviour is contained in a class). In JavaScript, and by extension TypeScript, this constraint is not present. Functions can live anywhere. Avoiding OOP hierarchies where possible tends to be the preferred programming model.
In the spirit of not mandating classes for general programming, static classes are unnecessary in JavaScript. Singletons are also generally not used.
Monday, 16 March 2026
LoRA in Real Workflows
LoRA, or low-rank adaptation, is a fine-tuning technique for LLMs (one of many disparate techniques).
The idea is to inject low rank matrices into large pre training models.
Recall that the rank of a matrix A is the dimension of the vector space spanned by its columns. This in turn corresponds to the number of linearly independent columns of A.
So LoRA is essentially a dimensionality reduction of the column space of parameters to ease off compute.
Books and Resources on AI Engineering
OpenAI's Open Source Tokeniser
Sunday, 1 March 2026
Lambda Calculus and System F
The lambda calculus is a theory that treats functions as formulas or expressions.
Arithmetic is another example of a language of expressions.
In arithmetic, you have variables (x,y,z..), numbers (1,2,3...) and operators (+, - ...). x+y then denotes the output of applying the addition operator to x and y and this can be extended to more complicated expressions.
Lambda calculus extends this concept to functions.
If we define a function f mapping x to x squared; then consider A = f(10); then in the lambda calculus we simply write A = (lambda x. x^2)(10). The expression (lambda x. x^squared) stands for the function that maps x to x squared rather than the statement that x is mapped to x squared.
One advantage of the lambda calculus, is it allows us to easily consider higher-order functions, i.e. functions with functions as inputs and/or outputs.
An example is the expression f maps to f.f which takes the function f and applies it to the function f, the composition of f with itself. In lambda notation we write (lambda x.f(f(x)) and the operation that maps f to f composed with itself is (lambda f . lambda x. f(f(x)). You can see this is easy to extend to triple composition, and so on.
Technically speaking, lambda calculus is Turing-complete, that is, it is a universal model of computation that can be used to simulate any Turing machine.
Now lambda calculus can be typed or untyped, typed is more restrictive - we say it is weaker than untyped lambda calculus. In untyped lambda calculus we are flexible about domains and codomains. For typed calculus we have simply-typed - where we specify the type of every expression and polymorphically typed, where we have types of a specific form X->X but we don't specify the type.
System F is a form of polymorphic lambda calculus.
System F formalizes parametric polymorphism in languages. In so doing, it forms a theoretical basis for languages like ML and Haskell.
System F was discovered independently by logician Jean-Yves Girard (1972) working in proof theory, and computer scientist John C Reynolds, who held positions at Edinburgh University, Imperial College and Carnegie Mellon.
The ideas aforementioned stemmed from interest and investigation in the 1930s into what does it mean for a function to be "computable" - in other words, have results derivable using (in principle) pencil and paper only.
Tuesday, 24 February 2026
Overhauling Legacy Software with AI
There are opportunities and challenges with modernizing legacy software with AI.
How AI helps break the cost barrier to COBOL modernization | Claude
What are "Distillation Attacks"?
Sunday, 22 February 2026
Saturday, 21 February 2026
Tuesday, 17 February 2026
Amazon Bedrock
Friday, 13 February 2026
Windows Baseline Security
The AI Agent Prevention Society
Wednesday, 11 February 2026
CloudFlare R2
Immutable Github Releases
Windows SDK
Ingress and Egress Fees
- Ingress fees are typically zero - allowing users to upload data to Amazon S3 or Azure Blob Storage with no additional charge.
- Egress fees are typically charged when data exits the cloud. These fees can differ significantly between providers and source and destination region.
Microsoft Store Policies
Microsoft Store (Windows Store) has policies on Product and Content, which developers must abide by.
There are a few rules around IAP - short for "in app purchases".
What is DXCore ... really?
The IARC and Windows Software
The IARC is the International Age Rating Coalition, a global initiative to streamline age ratings for games and applications. Over 19m games and apps have so far been published using IARC. Developers must abide by the IARC Terms of Use.
Tuesday, 10 February 2026
Uploading App Packages to the Windows Store
Windows Store Apps - Pricing
If you are a Windows Store developer, you have a few pricing options: Free, Freemium (optional in-app purchases, Subscription or Paid (one time payment).
Quick Guide to the GDK
Monday, 9 February 2026
Do Not Commit csproj.user file
What is Ready to Run (R2R) Compilation in Visual Studio?
Ready-to-run compilation is a feature in .NET that improves startup performance by compiling them in Ready-to-run format. This is a form of AOT (ahead-of-time) compilation that reduces work for the JIT compiler as the application loads. Your binary contains IL and precompiled IL. It only works if you target specific environments such as Linux x64 or Windows x64.
Rust uses C++
The Return of C++ Tools in Visual Studio
Today - C# programmers must embrace C++ development tools. There is No Alternative. C++ tools container the valuable link.exe to create standalone .exe files. Publishing .NET programs as standalone EXEs needing no runtime need this toolkit. Install it! Give up that 1.5 GB of space for some C++ tooling!
How Does GitHub Copilot Analyze Unexpected Behaviour
Suppose you have a release EXE file that has an unexpected dependency at runtime on a DLL. Github Copilot will analyze your project file (Csproj) for build settings and request permissions to view the build log output from your most recent build. It then makes recommendations (e.g. fill in a missing step in the build to remediate your problem).
Where did the .csproj file go in Visual Studio??
GitHub Copilot Integration in Visual Studio
Lift the Hood, Change the Oil
The Most Important Part of AI is Applications
..all the layer underneath is just infrastructure stuff (Jensen Huang, 2026).
How Users Can do Side-Loading
Here's a how to.
- Double-click the .msix or .msixbundle file
- Install via PowerShell: Add-AppxPackage
- Deploy and distribute internally
WinUI Blank App (Packaged)
This is project template for creating a WinUI app along with a MSIX package for side-loading or distribution via the Microsoft Store.
Side-loading in the above case refers to installing an app outside of the Microsoft Store, usually by providing the MSIX package to users.
A Closer Look at System.Drawing's Bitmap Class
Recover Solution Explorer
Enable Native AOT Publish
Native AOT (Ahead-of-time) deployment compiles your app to native code avoiding the need for a runtime. Compilation takes longer but the app runs faster, and with lower memory usage. Debugging may be more complicated relative to regular .NET applications.
The Solution Explorer project file contains the essential code required for this.
<PublishAot>true</PublishAot>
More details on AOT deployment here.
Top Level Statements (TLS) in .NET
Top level statements were introduced in .NET 9 as a way to avoid Main methods in .NET programs. This makes .NET programs look more like simple scripts.
STS versus LTS in .NET Versioning (STANDARD vs LONG)
STS and LTS have very specific meanings in .NET versioning. WinJoes must be truly on top of these different versioning schemes.
For example, WinJane may be faced with a choice to build a console app with .NET 8.0 (LTS) or .NET 9.0 (STS) and should understand the trade-offs between the two.
STS = Standard Term Support (NOT short term support, which might be seen as the natural counter to LTS).
STS releases have a shorter support window, faster iteration and more frequent updates. It is needed for developers needing newest features and ok with no multi-year stability guarantees. It is intended to keep the platform evolving quickly. Since .NET 5, STS releases have odd version numbers.
STS releases have a typical lifetime around 18 months, and LTS around 3 years.
Software teams have different strategies: 1) anchor on LTS for stability, 2) use STS to ride the innovation wave. Microsoft keep odd numbered versions as STS and even numbered as LTS.
Saturday, 7 February 2026
Keep up to Speed with C# Language Design Discussions
Thursday, 5 February 2026
Personal AI Assistants
Personal AI assistants are here, but security controls are askew.
OpenClaw is an example of such an assistant. It acts as a bridge between messaging devices (such as WhatsApp, Telegram, iMessage) and AI agents.
You will find OpenClaw "advertised" on openclaw.im (the im suffix indicates the country code top-level domain (ccTLD) for the Isle of Man. You don't need to be in the Isle of Man to have this domain, and it had become quite popular with instant messaging software with registrations from Meebo and Yahoo! amongst others (Meebo was acquired by Google in June 2012 at which point it had 100m users).
Some of its taglines include "Your Code, Your AI, Your Rules". Its GitHub location is here.
Ollama integrates with OpenClaw. In this context, Ollama acts as a local LLM provider.
Sunday, 1 February 2026
GGUF = GPT-Generated Unified Format
GGUF is a special model file format used to run LLMs efficiently on your own computer. It stands for GPT-Generated Unified Format. It is the successor to GGML. Privacy-sensitive workflows are one application of these optimized-for-local execution model packages.
Friday, 30 January 2026
Using ssh-keygen from WSL to generate an SSH key
Managed HSM as a secure key storage option in Azure
Azure Key Vault
Azure Key Vault can store keys (e.g. API keys) securely which can then be retrieved by applications at runtime. Passwords and certificates can also be stored in the vault.
Objects in the vault are uniquely identified by a case-insensitive identifier called the object identifier. It has a prefix identifying the key vault, object type, user-provided object name, and object version.
The key vault section starts with https://{vault-name}.vault.azure.net or https://{hsm-name}.managedhsm.azure.net, for Managed HSM Pools.
Object types are "keys", "secrets" or "certificates".
Object name must be unique within the key vault. Only digits, letters and dashes are allowed in the object name. The object name must be between 1-127 characters.
Thursday, 29 January 2026
OpenAI's Advice on Key Safety
OpenAI has a set of recommendations on key safety.
There are basically two types of keys: API keys and admin keys (to check usage limits, quotas etc.).
Read more on those recommendations here, also summarised below.
The first recommendation (rule) is do not share API keys. API keys are unique to users, even if those users are on the same team.
The second recommendation is that the OpenAI API key should not be exposed in client-side environments like browsers or mobile apps, which could allow malicious users to make requests as you.
Wednesday, 28 January 2026
Excel Data Validation Rules
Where to find data validation rules in Excel's ribbon?
Data -> Data Tools -> click on the drop-down with a green tick and a red no-entry sign, then select Data Validation.
You can choose to allow any values, or restrict values e.g. to a list.
Software as a Production Line
iex in PowerShell
How Claude Code Works
Programming Work and AI
irm in PowerShell
Claude Code
- Service may impose rate limits or usage quotas
- Output accuracy is disclaimed
- Output may be refused if it violates safety policy
Various Python Text UI Options
We have covered Textual in an earlier post. Some other frameworks to build text UIs in Python include:
Python Textual Framework
Blogger API and OAuth2
JDK Switcheroo for "Xamarin"
Your version of Visual Studio is no longer supported or serviced
Friday, 23 January 2026
Character format issues in emacs
Replit versus GitHub Codespaces
dataclasses in Python
What is Pydantic?
Tuesday, 13 January 2026
Deployment Toolkit (MDT) Support Removed - Try Windows Autopilot
Friday, 9 January 2026
What is SASE?
Tuesday, 6 January 2026
Analytics Libraries Expect Regularised Data
Monday, 5 January 2026
The list() constructor in Python
Testing Prediction Models - Out of Sample Testing
Python Internal Modules - The Underscore Convention
Python Debugger Survival Skills
ARIMA in Python: Endogenous versus Exogenous Variables
The ARIMA model in statsmodels is described here.
Its constructor has the following initial arguments: ARIMA( endog, exog=None, order=(0,0,0),....).
- endog - observed time series process, y
- exog - array of "exogenous regressors"
- order - (p, d, q) model for autoregressive, differences and moving average component
Sunday, 4 January 2026
Claude Code
Claude Code is built for developers - try it.
You can run it from a terminal (formerly only WSL).
Due to prompt injection risks, do not use it on codebases you do not trust.