delta619

Ashutosh Malla

Portrait of Ashutosh Malla
That’s me. Online I’m usually delta619.

I’m a backend engineer. My working hours go into APIs, event-driven services and the AWS plumbing underneath them, most recently for hotel platforms and delivery infrastructure.

This site is the other half. Four things I built because I wanted them to exist, and one because two doctors asked. I’ve written down how each of them works and rebuilt the interesting part as a small simulation you can poke at.

If you’re here to hire, the short version is in the box. The résumé has the rest.

Does
Backend and platform engineering, distributed systems
Writes
Go, Node.js, Python
Runs it on
AWS, Kubernetes, Kafka, Redis
Studied
MS Computer Science, University of San Francisco
Find me
GitHub LinkedIn Email

A distributed file system in Go

This started as a big data course project at USF: build something shaped like HDFS, then run it on the department’s cluster. Mine ran on twelve storage machines named orion01 to orion12, which is why the simulation further down uses those names.

A client cuts a file into 7 MB chunks and sends them to storage nodes. One controller remembers which node holds which chunk, keeps that in a Bitcask store on disk, and makes sure every chunk exists on three nodes. Everything talks protobuf over TCP.

The part I’d show someone first is how the controller picks a home for the next chunk.

func getRouteChunk() (string, error) {
	efficiencyConstant := float64(0)
	mostEfficientNode := ""

	for node, value := range registrationMap {
		if value == 1 { // node is active
			space := getDiskSpace(node)
			requests := getNodeRequests(node)
			efficiency := float64(space) / (float64(requests) + 1)
			if efficiency > efficiencyConstant || mostEfficientNode == "" {
				efficiencyConstant = efficiency
				mostEfficientNode = node
			}
		}
	}
	…
}
Fig. 1 From app/controller/controller.go, unedited apart from the cut at the end.

Free disk space divided by the number of requests the node has already been handed, highest wins. A big empty machine doesn’t get everything just because it is big.

Failure handling is blunt. Every node sends a heartbeat each five seconds, carrying its free space and request count. The controller looks at the clock every two seconds, and any node that has been quiet for more than six is written off. For each chunk that node held, a surviving copy is told to send itself somewhere new.

You can watch that happen here. Pick a node, stop it, and wait.

Controller sweeps every 2 s · timeout 6 s · 3 copies of each chunk
    dataset.csv, 28 MB, in 4 chunks
    Fig. 2 A simulation, running in your browser in real time. The intervals and the scoring rule are the ones in the code; the five nodes and their numbers are made up.

    A shared canvas without WebSockets

    Open a link and you get a room with a six-character ID. Draw, and anyone else holding that link sees your lines appear and can add their own. Someone who turns up late gets the whole drawing replayed to them first.

    I built it on long polling. Each browser keeps a single POST /wait open, and the server simply doesn’t reply until it has strokes to hand over. Drawing is batched at both ends: the client collects points for 100 ms before sending them, and every 100 ms the server empties its queue into every response that is waiting. The browsers then ask again.

    Strokes are also written to MongoDB every three seconds, which is where the replay for latecomers comes from.

    Your browser
    1. client buffer0 pts
    2. POST /updateidle
    3. server queue0 batches
    4. POST /waitheld open
    Someone else’s
    Draw in the left box.
    Fig. 3 A simulation with no network calls. The right-hand canvas only gets what would arrive over the wire, replayed at 50 ms a point like the real client does. Slow it down to see the four steps separately.

    A to-do list that changes with the tab

    I built this one for myself. A single long list follows you around all day, and most of it has nothing to do with the page in front of you. Todays Tasks keeps a separate list for each website instead. Open it on GitHub and you see GitHub tasks. Open it on Figma and you see Figma tasks. The repository describes it as a simple, fast extension for people with ADHD.

    The Todays Tasks popup open over a GitHub page, showing four tasks: Review PR #42, Update unit tests, Merge feature branch, and Write release notes.
    Fig. 4 The real thing, from the extension’s store screenshots.
    Fig. 5 A copy of the popup that runs here. Switch sites, add a task, or press the grid for every site at once. It forgets everything when you reload.

    There is no server behind it. Tasks are saved in the browser first. If you sign in, they also go into one tasks.json in the extension’s own hidden folder in your Google Drive, which is the only part of Drive it is permitted to touch.

    When a laptop comes back online, whatever it saved locally is merged into the Drive copy. Where two devices disagree about whether a task is done, the later edit wins, and a small banner tells you how many tasks changed.

    Something for the Touch Bar to do

    The Touch Bar on my MacBook mostly sat idle, so I wrote a menu bar app that turns it into an audio visualizer for whatever is playing. It has fourteen modes and eight colour themes.

    Fig. 6 Four of the modes and four of the themes, drawn from a generated signal. Nothing here listens to your audio.

    Getting at system audio on a Mac normally means installing a virtual audio driver. I used ScreenCaptureKit instead, which can tap whatever is playing with nothing extra installed. The trade is the permission dialog, where macOS asks for “Screen & System Audio Recording”.

    From there the samples go through a 4096-point FFT that re-runs every 512 samples. SpriteKit draws the result into a strip 30 points tall, and a private framework, DFRFoundation, puts that strip on the bar.

    1. System audio
    2. ScreenCaptureKit
    3. 4096-point FFT
    4. SpriteKit scene
    5. Touch Bar

    PintNetwork

    In the middle of 2020, hospitals in India were treating some COVID-19 patients with plasma from people who had already recovered. Two doctors in Mumbai, Dr Neil Pinto and Dr Kareena, saw that willing donors and the patients who needed them had no straightforward way to find each other.

    They brought the problem and the medical criteria. I wrote the web application, front and back, in about a week.

    Donors and patients registered on pintnetwork.com. A donor’s answers were checked against the doctors’ rules, and when a donor and a patient were matched, both got an SMS and an email with what they needed to reach each other.

    donor.healthy =
      donor.hiv != 1 &&
      donor.mosquito != 1 &&
      donor.days14over == 1 &&
      donor.pregnant == 0 &&
      donor.age >= 18 &&
      donor.age <= 65;
    Fig. 7 The eligibility check, from controller/donorController.js.

    Daily Excelsior wrote about it on 13 July 2020. A week after launch, it reported, 66 donors and 65 patients had registered.

    I kept working on it after that. The history of the public backend runs to May 2021: matching by city, then by blood group, then a rewrite during the second wave. In that version a coordinator confirms each match from an admin view, and the messages go out from there.

    The site is offline now. What is left is the code and the article.

    The archive has the rest, including a Kubernetes multi-app template, a Bitly clone and an ISP throttling detector.

    The day job

    I’m a backend and platform engineer. Day to day that means designing APIs, wiring services together with events, and keeping them running on AWS.

    That work has been on multi-tenant hotel platforms and on nationwide delivery infrastructure, with a fair amount of API integration and security hardening along the way. I have an MS in Computer Science from the University of San Francisco, and before that I studied at Mumbai University.

    The projects above have one thing in common. Each made me build a part I would normally take for granted: replication, real-time sync, an audio pipeline.

    Summary for recruiters
    FocusBackend and platform systems, secure APIs, event-driven services, distributed systems
    DomainsMulti-tenant hotel platforms, nationwide delivery infrastructure, API integrations, security hardening
    LanguagesGo, Node.js, Python
    InfrastructureAWS, Kubernetes, Docker, Kafka, Redis, PostgreSQL
    EducationMS Computer Science, University of San Francisco. Mumbai University, 2019
    Full historyRésumé on Toptal

    Write to me

    If you’re hiring for backend work, or you think I got one of these decisions wrong, I’d like to hear it.

    ashutoshjk97@gmail.com