Rawer

Under Construction

Journal 2025-06-23

New Domain : tensegrity.it

I've added a new DNS domain to my collection, so I now have :

  1. danny.ayers.name - my personal site (this blog)
  2. hyperdata.it - my quasi-company site
  3. strandz.it - for a project, in planning
  4. tensegrity.it - my current raft of code projects

They are all undeniably Under Construction.

The new one came about because I realised that my the things I'm working on strongly resemble a tensegrity structure. Only after setting up a GitHub repo to record this did I think to check for the domain name. Right now the repo just contains a sketchy overview. I'll use the new domain for now just as a tech blog, keeping the .name domain for non-coding stuff.

Journal 2025-06-23

Simple Distortion Circuit

rough demo video

I was a bit frustrated not having a convenient distortion module on my setup so I designed one. After a handful of sketches and a little bit of breadboarding, this is what I came up with :

Schematic

Its operation is a lot more straightforward than it looks.

The left-hand op amp is just operating as a textbook inverting amp, gain of x1 to about x10. The right-hand hand op amp is having more fun. The core idea is that of a log amplifier, the "transdiode" configuration. It's using the exponential characteristic of a bipolar transistor in the feedback of the op amp to achieve a logarithmic transfer function. In other words, soft clipping. Tube overdrive style, if you're an American guitar head. The magic part of this configuration is that the combination of NPN and PNP transistors, simply one on top of the other, actually works to make the function work on negative-going signals in mirror image. No way that would work! But it does.

I've flipped the op amp inputs so this is non-inverting - I'd forgotten, I was going to make the input amp non-inverting too... Reason being, ideally I wanted it DC-coupled so it could be an interesting function on control voltages too. But when wired up to modules this messed up its use on signals - the your guess is as good as mine Eurorack standard voltage levels. So I AC coupled it, hence the cap on input & output. (The 100p cap in the feedback is my cargo cult attempt at ensuring HF stability. It makes no audible difference).

The variable resistance in the feedback effectively adjusts when the transistors start getting curvy. When it's down to the 10k I couldn't see or hear any difference from the input signal, is effectively unity gain. Wide open, the curve starts early, it sounds like hard clipping.

The pair of diodes was the result of messing about. I initially tried them from the signal path between the first op amp and the second, to ground. I expected a buzzier hard clipping at a lower level, until the log-ish follower was wound up for gain. But it wasn't very interesting. What was interesting is the current config. I'll leave it to someone better at sums than me to figure out properly, but intuitively I would have expected this to have extended the linearish low level region up by the voltage drop until transistor bias starts kicking in, with the effect of raising the curvy roof. Nah. The result in practice is that it gives an audible boost overall. When the bases are direct to ground, the transfer curve seems rather kinky, not as smooth as it should be. With the diodes in circuit, it have a much more elegant curve. My technical explanation is something something op amp compensating something bias something.

Here's it on the breadboard :

Breadboard

I've got all the music room gear in the office while I redecorate, and the desktop machine I usually run a 'scope (Bitscope) on was busy entertaining Claude. So it gave me a chance to use my breadboard. It is literally built on a plastic breadboard, hat tip to the originators. As well as the horrid little Chinese scope and signal generator there's a home-hack audio amp, underneath a +/- 12v, +5 PSU in a tin I got from Penny Market. Got 3.5 mm sockets, various pots, a few switches. The idea is I can take prototypes to the modular in a Mohammed-mountain kind of deal. Only after I'd made it did I hear about the Erica Synths (they who do collabs with the wonderful DIYer Moritz Klein) do a ready-made, neat version : the EDU DIY Labor. Hey ho. Saved meself a few quid.

Oh yeah, back to the circuit. Nothing's critical. For op amps I used a TL072, transistors a BC109 & BC179, generic highish gain silicon small signal I happened to have. To keep it balanced up & down you probably want a complementary pair like that. I plan to slap the circuit on a scrap of stripboard, cut & drill a bit of aluminium sheet for front panel, couple of hours work max, my itch scratched.

Simple Distortion Circuit

Journal 2025-06-16

Idea Generation from Imagined Acronym Expansions

cartoon of this post

Claude is funny. I'm putting together a knowledgebase navigation system based on an ontology, ZPT for use in Semem (not semen). I've go the under-the-hood pieces mostly in place, right now Claude & I are looking at Model Control Protocol (not male chauvinist pig) access.

ZPT is Zoom, Pan, Tilt, using a camera metaphor for looking at knowledge. Claude doesn't like that acronym expansion. When I've had it write docs it prefers "Zero-point traversal" which sounds like a thing, maybe from around graph theory, or quantum, but as far as I can tell, isn't. Just now Claude gave me another : "Zero-Prompt Templates". Again it sounds like a thing, like zero-shot prompting is, but, nah. Claude made it up.

Now I must to know what these things are.

Journal 2025-06-16

Journal 2025-06-14

Remind me why I'm doing this...

I had one of those moments just now. I've intermittently put a lot of time into Semem, my Semantic Memory thing. The sessions have got increasingly intense, it went something like this :

  1. Rough scaffolding implementation - a setup that included embeddings for semantic search plus using an LLM for concept extraction. It also had a bit of support for a temporal dimension, short-term & long-term memory (I lifted what I could from the design of Memoripy, given I'm using Node JS). I got a SPARQL store client in there, but wasn't really doing anything with it at this stage, data was mostly JSON.
  2. Ragno ontology design - I needed a model of a knowledgebase to build from. I went through several back-of-envelope cycles with it, the usual malarky of trying to pin things down to keep some semblence of control while still leaving things open enough to allow serendipity to play. Then I stumbled on the NodeRAG paper. Aha! This is what I want. Except they had things quite tightly pinned down, and the notion of non-retrievable resources on the Semantic Web? Nah. So I kinda merged the floppy thing I already had with this more rigid thing, implemented the basic structures. A huge bonus with the paper was that it outlines a bunch of different algorithms for working with knowledgebases.
  3. Ragno implementation - with considerable help from Claude I set about implementing them in the Semem environment. Lots of cycles. Claude is such a fibber about when things are complete & working. After a long journey through the gaslighting, I believe most, if perhaps not all, work.
  4. ZPT ontology design - that's Zoom, Pan, Tilt, not as Claude kept insisting in the docs Zero-point traversal. I looked that up, very much expecting it to be a thing, it makes sense for a curve, though traversal hints at this other form of graphs. Apparently not. Claude's imagination. If it becomes a thing in quantum in the next year or two, I'm joining a monastery. Zoom, Pan, Tilt is for knowledgebase navigation, using those cinematic analogies. I'd had it sketched out for a while. Finding the NodeRAG paper was also serendipitous in helping me think about this separately from the core knowledgebase description. (foraging for the win!) Maybe not orthogonally, but at least loosely-coupled. Being still fresh from the Ragno implementation I rolled with the momentum, got this bashed out. Again, I believe it mostly works - all the demo scripts (under examples/) have worked at least once. Heh, except those under pending, haven't a clue where I'm up to with those.
  5. MCP Implementation - I'd already got approximate HTTP API endpoints in place (along with very sketchy UI for trying things out), and even a first-pass, untested MCP. But it became increasingly obvious this was something I needed to do a bit more properly. Dual function : selectively expose the stuff under the hood for sanity-checking, plus it might actually be useful.

Which brings me back to my starting point. Useful for what..?!

I spend so much time making tools to make tools (ditto in real life) I forgot the original motivation.

Benchmarks! The primary goal of all modern software!

Ok, that was it, Personal Knowledge Management. Which may be project specific, relatively narrow domain. Not one size fits all. I play around with music and associated technology, have all kinds of other little hobby (and house-related) projects on the go. I've thousands of bookmarked links relating to this stuff. I've got loads of my own notes scattered all over the place, backups of intermittent blog posting going back a couple of decades. This is all knowledge that could potentially help me with my activities, if only I could access it in a useful way.

Yeah, so. How do I get all the material into my soon to be knowledgebase? Well, the other project I've been putting the other bulk of my time into is Transmissions, a pipeliney thing into for just such operations. That too is mostly in place/rather fragile in places.

I'm going to be spending the next few weeks (until 2025-07-03) at least making a note of loose strings in my tensegrity structure of projects. Then I'm going to try to avoid this stuff for a month.

Wish me luck.

PS. I have a Use Case : use Semem to help write a paper about...Semem! #:dogfood

Journal 2025-06-14

Where are the Tangibles in Schema.org?

tl;dr : Schema.org has terms for Thing, Intangible and Product, but no obvious way of describing a tangible thing that isn't necessarily a product. I suggest the obvious : https://schema.org/Tangible, which could be inserted quietly without breaking anything (details at the bottom here).

Motivation

One of my many projects-in-progress is a Yet Another Personal Project Manager, this one I'm calling #:Farelo. I need a model in which to describe projects, which, this being 2025, will be an ontology expressed in RDF/OWL (#:why-rdf). As it happens I've been working on this intermittently for over 20 years, I have a vocab that lives at https://purl.org/stuff/project. Some bits I'm happy with, some not so much, and there are one or two terms I intend adding. It also needs alignment with Schema.org, which seems to have taken the role of quasi-upper, maybe Standard Über Ontology.

Right now I really need the app yesterday, to manage my tensegrity structure of projects with confusing interdependencies. This time around, rather than trying to work with the software project domain right away, I thought a real-world project would be illuminating as a target. A project I have in progress is a reboot of my music room. It goes something like this :

Project : Music Room Reboot

  • Shift everything out of the room
  • Redecorate, make furniture,
  • Apply acoustic treatment (hang mattresses from the walls)
  • Clean, test and if necessary fix all the pieces of equipment
  • Shift everything back into the room
  • Make a lot of noise

It is a nice use case for a project management app as there are parts that are strictly sequential : I won't want to hang mattresses before redecorating. But some bits can happen in parallel : I have shifted pretty much everything out into the office (it's no longer in the initial state), where I've wired a bunch of things temporarily, so I can make a lot of noise while everything else progresses.

Stuff, a Set of Things

Ok, so how do I model all this? Ok, I've got most of what I need already covered in the project ontology, though major I am missing from the current version of the is the concept of project resources. These have a definite impact on dependency graphs. In the real world, I need to purchase paint (done!) before I can redecorate (soon...).

But, again in the real world, above I have all the pieces of equipment. For example, an analog mixer. It's a Behringer Xenyx 2442FX. The device is listed as a product, and that fits with Schema.org's term Product :

Any offered product or service. For example: a pair of shoes; a concert ticket; the rental of a car; a haircut; or an episode of a TV show streamed online.

Almost. It certainly was a product, before I bought it. I'm very unlikely to offer it as a product again - even if I'm able to get the couple of dead channels working, it also features some metalwork damage from the time I broke an acoustic guitar on it (a sudden power outage corrupted a whole day's work, I was very annoyed). Resale value - I'd probably give €20 for it if I was really stuck.

Also in the stuff is my primary guitar, The Vinocaster. A custom job, made by me to be exactly what I wanted. Which, for all practical purposes, it is. It is a product in the sense that I produced it (over many, many hours). But that's not how schema:Product is defined.

Pebble Dashed

Going a step further, how do I describe the subject of this image :

a pebble

[
    a schema:Thing ;
    rdfs:label "pebble" ;
    :weight "200"
]

Ok, so the Schema.org vocab is maintained largely by corporate entities, in the view of which the Web is a marketing tool. Chances are my local browser has encountered Schema.org terms in HTML tags a few dozen times already today. Thing [sic] is, the Web is more than just a marketing tool.

So how about :

Tangible is a subclass of Thing disjoint from Intangible. It has the description of "a thing which is apprehensible as physically real or existent by the senses". (Product is a subclass of the union of Tangible and Intangible).

A Modest Proposal

@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix schema: <http://schema.org/> .
@prefix : <http://example.org/ontology#> .

# Define Tangible as a subclass of Thing, disjoint from Intangible
schema:Tangible a owl:Class ;
    rdfs:label "Tangible" ;
    dc:description "a thing which is apprehensible as physically real or existent by the senses" ;
    owl:subClassOf schema:Thing ;
    owl:disjointWith schema:Intangible .

schema:Product a owl:Class ;
    owl:subClassOf [
        a owl:Class ;
        owl:unionOf ( schema:Tangible schema:Intangible )
    ] .

    :MyLittlePebble a schema:Tangible ;
    :weight "300" .

Where are the Tangibles in Schema.org?