Projects

Research software and infrastructure.

Tools

Software that makes something, or refuses to.

Rust / static analysis

let mass = (10.0)
    .scalar::<Kilogram>();
let force = Vec2::<f64, Force>
    ::new::<Newton>([1.0, 2.0]);
let acc = force.scale(mass.inv());
mass + forceRejected: incompatible dimensions

Incompatible units become compile errors.

experimentalOpen

Rust / UI module

Declare

<?component id="badge"?>
<?bind var="text"/>
<b class="badge">$text</b>
<?/component?>

Use

<?use id="badge"
  text="Suspicious"/>
<?use id="badge"
  text="Unsuspicious"/>
Rendered
Suspicious Unsuspicious

A static-site generator with reusable components and MDX.

productionOpen
Python / Graphics tooling
A white square moves and separates into red, green and blue blocks through Remblais transport.

Colour follows transport paths, and brightness sets the budget for created mass.

work in progressOpen

AI / interpretability

“marx” ↔ “stalin”

GPT-2 base
1,985
MarxGPT-2 aligned
2,249

README-reported Euclidean distances between mean-pooled output logits, not political scores.

Political-compass evaluation and output analysis for pairs of concepts.

experimentalOpen

Infrastructure

Shared systems for research and compute.
The mpi-rma ring against MPI_Send, one slot per payload size: faster outward, slower inward.

A typed Rust API over rsmpi, plus a ring transport.

publishedOpen
trame::contract launch · frames · lanes · steps none one process, no transport mpi RMA lanes · message batches nv one CUDA warp per rank selected by Cargo feature at build time; callers are written once
One contract, three implementations. The backend is a compile-time feature, not a run-time choice.

One contract for launches, frames and lanes. The backend is a Cargo feature.

experimentalOpen
nixsci

Deploys closures, records experiments, analyses locked data, builds documents.

experimentalOpen