Eshan Iyer

Senior at Thomas Jefferson High School for Science and Technology (Computer Systems, class of 2027), in Northern Virginia. I do independent machine-learning research, write systems code in Rust and Python, and run the self-hosted network that serves this page.

Contribution activity

Less More

Projects

Pumpkin

Rust · open source

A Minecraft server written entirely in Rust. I fix systems bugs in it: a /setblock that skipped neighbor updates so sand never fell, a loot-table path that panicked the whole server on an unknown item, native-plugin loading that aborted on corrupt metadata, and a terminal left broken after the server exited mid-prompt.

nephrouro-ai

Python

A two-tier transfer-learning system covering 14 nephrology and urology tasks. It has a model inference server, a separate website, and a methodology paper. Built around urodynamics and kidney/urology imaging data.

EchoSeg reliability

Research · Bucknell

Reading model uncertainty at the ejection-fraction endpoint as a failure detector for echocardiography segmentation. A strong Dice score does not tell you whether an automated EF is safe to act on, because error at end-diastole and end-systole can cancel. Work with Prof. Joshua Stough.

Goal-conditioned RL

Research

A specialist goal-conditioned agent for a hard Minecraft task, taming a wolf, measured against STEVE-1 as the baseline in the same environment. The specialist reached 24% success. STEVE-1 reached 0% across 120 text-conditioned episodes plus a visual-goal run, with its conditioning verified working.

terrain-urban-diffusion

Python

Terrain-conditioned diffusion that grows street-level layouts for small towns in Europe and Asia. It has a real-town mode that expands an existing place and a sandbox mode that grows one from scratch.

BodyMaps CT viewer

JHU · web + ML

A web-based CT viewer for the BodyMaps project with Prof. Zhou's group at Johns Hopkins: axial, coronal, and sagittal panels with a live 3D render. I also converted 22 model checkpoints to FP16, cutting them from about 18 GB to 5.4 GB with unchanged outputs.

Atlas Autoware

President · robotics

TJHSST's self-driving car team, which I lead. Fourteen people building an autonomous race car that has placed top-3 at four national competitions. I work on the physical build (VESC drivetrain, radio and servo wiring on an F1Tenth-class car) and rebuilt the site and sponsor outreach, which raised traffic 410% and brought in three sponsors.

eshnetwork

Self-hosted infra

The network serving this page. A Raspberry Pi and an Intel NUC running Forgejo, Authentik single sign-on, Caddy, a mail server, Home Assistant, and monitoring. The Home Assistant side runs its own energy automations that shift loads to cheaper, cleaner hours.

Health ML at GMU

Research · GMU

Machine learning on health data with Prof. Carlotta Domeniconi and Sumanth Manduru at George Mason, on depression-symptom detection from text.

Writing

Four bug fixes in a Rust Minecraft server

Pumpkin · systems, Rust

Pumpkin is a Minecraft server written in Rust, and it is a good place to practice reading someone else's systems code under real constraints. I have four fixes in review, each one a small failure with an annoying blast radius.

The first was /setblock. The command passed a force flag in every mode, which skips the pass that tells neighboring blocks their support changed. The visible symptom was sand or gravel that should fall staying frozen in the air after you cleared the block under it. Switching the destroy, replace, and keep modes to notify neighbors fixed it, and I checked it on a live server over RCON: the sand fell within about two seconds.

The other three are defensive. A loot-table entry with a missing prefix or an unknown item used to panic the entire server mid drop, so one bad entry could take everyone down on a mob kill. A native plugin with corrupt metadata could pass the version check and then try to allocate a nonsense amount of memory and abort. And if the server exited while it was waiting on console input, it left the terminal in raw mode until you ran reset. Each fix trades a crash for a logged warning or a clean exit.

A good Dice score does not mean the number is safe

EchoSeg reliability · with Prof. Stough, Bucknell

Automated echocardiography pipelines segment the left ventricle at end-diastole and end-systole and turn those masks into an ejection fraction. The usual quality number is Dice, which measures overlap with a reference mask. The problem is that a good Dice does not tell you whether the EF you computed is safe to act on.

The reason is cancellation. EF depends on the difference between two volumes, so an error that inflates both frames the same way can leave the final number looking fine while both masks are wrong. I have been testing whether model uncertainty, read at the EF endpoint instead of at the pixel level, catches the cases Dice misses. The early finding is that the aleatoric signal barely flags EF error, while the epistemic ones do. The manuscript frames this as failure detection rather than another accuracy table.

A specialist beat a foundation model at taming wolves

Goal-conditioned reinforcement learning

The question was simple: on a genuinely hard Minecraft task, does a small specialist trained for that task beat a large general agent you condition with a goal? The task was taming a wolf. The baseline was STEVE-1, conditioned both with text and with a real video clip of a successful taming.

The specialist reached 24% success on held-out seeds. STEVE-1 reached zero, across 120 text-conditioned episodes and a separate visual-goal run, in the same environment throughout. To make that a fair result rather than a broken setup, I confirmed STEVE-1's conditioning was actually working before running the comparison. Same map, same horizon, same evaluation seeds. The headline is a clean head-to-head, not a tuning artifact.

Fourteen kidney and urology tasks from one backbone

nephrouro-ai

nephrouro-ai is a two-tier transfer-learning system that covers 14 nephrology and urology tasks from a shared backbone, rather than training fourteen models from scratch. It ships as three pieces: an inference server that serves the models, a separate website, and a methodology paper that explains the two-tier setup.

The reason to share a backbone here is data. Individual urology tasks do not each come with a huge labeled set, so a common representation with light task-specific heads gets more out of what exists. Part of the work is sourcing real urodynamics data, including reaching out to clinicians for labeled examples.

Cutting 22 checkpoints to FP16 without changing the outputs

BodyMaps

For the BodyMaps work I took a set of 22 model checkpoints and converted them to half precision. The storage dropped from about 18 GB to 5.4 GB, roughly 70% smaller, and I checked that the outputs stayed the same rather than assuming half precision was free. The smaller set is easier to host and pull, which matters when other people on the project need to load it.

Served from eshnetwork, a Raspberry Pi and a NUC in Northern Virginia. Built on Forgejo.