Skip to content
View CedricConday's full-sized avatar
🎯
Focusing
🎯
Focusing

Block or report CedricConday

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
CedricConday/README.md

Cedric Conday

I am a cognitive scientist. I started writing software in April 2026 because the tools I wanted for multiple sclerosis did not exist, and building them was the fastest way to find out whether they could.

What I build

Protocol Tracker is an Android app for people on a high-dose vitamin D3 protocol. The day is anchored to the patient's own first dose rather than the clock, every reminder is an offset from it, and the record of doses, symptoms and relapses never leaves the device. It began as a build for one patient and ships as a signed APK anyone can verify.

ms-twin-treat asks whether a multi-scale simulation of an MS therapy can be trusted at all. The backtest harness was built before the model, and nothing in the model is believed until it replays a known trial outcome. The honest result so far: the cell model beats both nulls on real interferon-beta data, and the foundation-model embedding I expected to carry it is statistically indistinguishable from a plain correlation matrix. The README says so.

The cell model scores 0.8732 against a canonical null of 0.8166 and a leaky null of 0.8498, with scGPT embeddings at 0.8696 and a noise ceiling of 0.8925

lesiontrack finds new, enlarging, shrinking and slowly expanding MS lesions across MRI timepoints, with one registration dependency and a run time of minutes. A synthetic backtest has to pass before any number is reported. It earned its keep immediately: it showed the registration tool's own Jacobian recovering under a third of the injected expansion, so the package now computes the Jacobian itself.

MSLesSeg patient P20, baseline to last follow-up: baseline lesions in cyan, new voxels on the warped follow-up in yellow, Jacobian expansion inside lesions with slowly-expanding-lesion candidate outlines in lime

Scatter of 24 injected lesion expansions against what lesiontrack measured back, all close to the identity line

bidsgate turns that check into a gate for any BIDS pipeline. Inject a known lesion or volume change into real data, run the tool, score what came back. The first scorecard is LST-AI on OpenNeuro controls, and it says plainly where the segmenter fails: the lower third of the brain, at any lesion size.

LST-AI v2 found 6 of 12 injected lesions in the lower third of the brain, 34 of 36 in the middle and 24 of 24 in the upper third; by volume it found 32 of 36 small, 10 of 12 medium and 22 of 24 large lesions

mscard is the report those two were built for: two MRI visits in, one page out, with new, enlarging, shrinking and resolved lesions, slowly expanding lesion candidates and brain volume change. Before the page is written, the same pipeline runs on the patient's own baseline with known changes injected, and every number carries how much of that truth it recovered. On 24 public MSLesSeg patients the tracking held (1 false change call in 551 lesions) and the standard slowly-expanding-lesion rule fired about once per lesion with no lesion expanding, which is the number a reader of any SEL count should have next to it. Every report is online.

mscard findings cards for MSLesSeg patient P1: 4 new, 3 enlarging, 4 shrinking, 7 resolved lesions, lesion volume change -18 %/yr, 20 SEL candidates and brain volume change, each with a green, amber, red or grey calibration badge

nifti-qc catches the qform/sform disagreement that silently mislocates an image in world space. I first fixed that bug inside LST-AI's own pipeline, then wrote the check so nobody has to find it three steps downstream again.

Two tools came out of the work itself rather than the subject. gh-odds measures, before you open a pull request, whether a repository actually merges outsiders and how long that takes. cachemiss reads the transcripts Claude Code keeps on disk and explains where a quota went.

Earlier, and still maintained: MCP servers for Xe currency data and the Centrapay payments API, and a decoder for x402 payment headers.

Upstream

Most of what I know about the neuroimaging stack I learned by fixing it. Merged work in nibabel, nilearn and MNE-Python covers an ECAT header dtype, non-finite values in surface smoothing, the brainsprite slice index, EyeLink calibration encoding, and epoch events that fall outside the raw range. Before that it was banking identifiers: IBAN generators in Faker that pass real checksum validation, and the registry in schwifty. The rest runs from Jaeger's MCP server to Adyen's HMAC validator to the OpenTelemetry collector. The full list is one search away.

Each one was a bug reproduced, fixed with a regression test, and accepted by the people who maintain the code.

Elsewhere

condaydigital.com. Germany. English and German.

Pinned Loading

  1. protocol-tracker protocol-tracker Public

    Offline-first Android tracker for high-dose Vitamin D3 protocols — doses, T0-anchored reminders, symptoms and compliance, all on-device.

    TypeScript

  2. ms-twin-treat ms-twin-treat Public

    Open, backtest-gated multi-scale simulation to test MS interventions in silico — validated against known trial outcomes before trusting a prediction. Highly experimental and not validated; nothing …

    Python 1

  3. nibabel nibabel Public

    Forked from nipy/nibabel

    Python package to access a cacophony of neuro-imaging file formats

    Python

  4. xe-mcp xe-mcp Public

    MCP server for the Xe Currency Data API — FX rates, conversion, volatility, moving averages, alerts, ASCII charts. TypeScript; free ECB fallback; AWS-ready.

    TypeScript 1

  5. centrapay-mcp centrapay-mcp Public

    MCP server for the Centrapay payments API (NZ) — payment requests, sandbox settlement, refunds, merchants. TypeScript; verified against the live sandbox.

    TypeScript 1

  6. nifti-qc nifti-qc Public

    Catch silently-broken NIfTI geometry (qform/sform mismatch, bad affines, misaligned inputs) before it ruins your results.

    Python 1