<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Projects on Aaron Ang</title><link>https://aaron-ang.github.io/projects/</link><description>Recent content in Projects on Aaron Ang</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://aaron-ang.github.io/projects/index.xml" rel="self" type="application/rss+xml"/><item><title>opthash</title><link>https://aaron-ang.github.io/projects/opthash/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://aaron-ang.github.io/projects/opthash/</guid><description>&lt;p&gt;Rust implementations of &lt;strong&gt;Elastic Hashing&lt;/strong&gt; and &lt;strong&gt;Funnel Hashing&lt;/strong&gt; from &lt;em&gt;Optimal Bounds for Open Addressing Without Reordering&lt;/em&gt; (Farach-Colton, Krapivin, Kuszmaul, 2025) — open-addressing hash maps that achieve optimal expected probe complexity without reordering elements after insertion.&lt;/p&gt;
&lt;p&gt;Both maps share a single-arena allocation indexed by per-level descriptors, 7-bit fingerprint control bytes, SIMD control-byte scans for occupancy and lookup, and per-level salt re-randomization to decorrelate probe paths across levels. They differ in how they probe within a level. Published to &lt;a href="https://crates.io/crates/opthash"&gt;crates.io&lt;/a&gt; and &lt;a href="https://pypi.org/project/opthash"&gt;PyPI&lt;/a&gt; (via PyO3 bindings), with CI and continuous benchmarking.&lt;/p&gt;</description></item><item><title>Raft</title><link>https://aaron-ang.github.io/projects/raft/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://aaron-ang.github.io/projects/raft/</guid><description>&lt;p&gt;A complete implementation of the &lt;a href="https://raft.github.io/raft.pdf"&gt;Raft consensus algorithm&lt;/a&gt; in Go: leader election with randomized election timeouts and term management, log replication and consistency checks via AppendEntries RPCs, commitment of entries across the cluster, and state persistence for crash recovery.&lt;/p&gt;
&lt;p&gt;Tech stack: Go.&lt;/p&gt;</description></item><item><title>CodeCrafters Builds</title><link>https://aaron-ang.github.io/projects/codecrafters/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://aaron-ang.github.io/projects/codecrafters/</guid><description>&lt;p&gt;Built-from-scratch reimplementations of real systems, following &lt;a href="https://codecrafters.io"&gt;CodeCrafters&lt;/a&gt;’ “Build Your Own X” challenges — all in Rust. Each one meant working directly with a system’s wire format, on-disk format, or grammar: parsing protocols, byte layouts, B-trees, and event loops by hand.&lt;/p&gt;
&lt;p&gt;The ones I went deepest on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/aaron-ang/bittorrent-rs"&gt;BitTorrent&lt;/a&gt; — bencode parsing, tracker communication, the peer handshake, and downloading and verifying file pieces over TCP&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/aaron-ang/redis-rs"&gt;Redis&lt;/a&gt; — a Redis server speaking the RESP protocol with core commands&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/aaron-ang/shell-rs"&gt;Shell&lt;/a&gt; — a POSIX-style shell: a REPL with builtins, external command execution, quoting, redirection, and pipelines&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/aaron-ang/interpreter-rs"&gt;Interpreter&lt;/a&gt; — a tree-walk interpreter for the &lt;a href="https://craftinginterpreters.com"&gt;Lox language&lt;/a&gt;: scanning, parsing to an AST, and evaluation with variables, control flow, and functions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Also built: &lt;a href="https://github.com/aaron-ang/kafka-rs"&gt;Kafka&lt;/a&gt;, &lt;a href="https://github.com/aaron-ang/sqlite-rs"&gt;SQLite&lt;/a&gt;, &lt;a href="https://github.com/aaron-ang/git-rs"&gt;Git&lt;/a&gt;, &lt;a href="https://github.com/aaron-ang/dns-server-rs"&gt;DNS server&lt;/a&gt;, &lt;a href="https://github.com/aaron-ang/http-server-rs"&gt;HTTP server&lt;/a&gt;, and &lt;a href="https://github.com/aaron-ang/grep-rs"&gt;grep&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Unix File System</title><link>https://aaron-ang.github.io/projects/unix-file-system/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://aaron-ang.github.io/projects/unix-file-system/</guid><description>&lt;p&gt;A Unix-style file system built on inodes, implemented in C on top of a virtual disk (8,192 blocks × 4KB, stored as a single file). It lays out a superblock, directory table, inode and data bitmaps, and an inode table, then runs file and directory operations against that on-disk layout.&lt;/p&gt;
&lt;p&gt;Tech stack: C.&lt;/p&gt;</description></item><item><title>Threading Library</title><link>https://aaron-ang.github.io/projects/threading-library/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://aaron-ang.github.io/projects/threading-library/</guid><description>&lt;p&gt;A user-level threading library in C: a round-robin scheduler that preempts threads using &lt;code&gt;SIGALRM&lt;/code&gt;, a pthread-style API (&lt;code&gt;create&lt;/code&gt;/&lt;code&gt;exit&lt;/code&gt;/&lt;code&gt;join&lt;/code&gt;/&lt;code&gt;self&lt;/code&gt;), and synchronization primitives — signal-blocking critical sections and a mutex implementation.&lt;/p&gt;
&lt;p&gt;Tech stack: C.&lt;/p&gt;</description></item><item><title>PredicT</title><link>https://aaron-ang.github.io/projects/predict/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://aaron-ang.github.io/projects/predict/</guid><description>&lt;h3 id="mbta-congestion-predictor"&gt;MBTA congestion predictor&lt;/h3&gt;
&lt;p&gt;Nobody likes a crowded subway. PredicT estimates how busy Boston&amp;rsquo;s “T” will be from three inputs — date, time, and subway line — so you can plan around the crowds.&lt;/p&gt;
&lt;p&gt;We pulled publicly available MBTA tap-in and tap-out records from every station across the day, cleaned them, and trained &lt;a href="https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=GIML_Basics"&gt;InterSystems IntegratedML&lt;/a&gt; on the result to predict passenger volume. A React front end queries those predictions through a Flask API.&lt;/p&gt;</description></item><item><title>Terrier Alert</title><link>https://aaron-ang.github.io/projects/terrier-alert/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://aaron-ang.github.io/projects/terrier-alert/</guid><description>&lt;h3 id="a-subscription-and-notifier-service-for-boston-universitys-undergraduate-courses"&gt;A subscription and notifier service for Boston University’s undergraduate courses.&lt;/h3&gt;
&lt;p&gt;Originally created as a personal web scraping tool for college courses, I decided to make the service publicly available by designing and implementing additional functionality over Winter 2022.&lt;/p&gt;
&lt;p&gt;Additional improvements were made in Spring 2023 to make the system more robust. Any feedback is welcome via the &lt;a href="https://t.me/BUClassBot"&gt;Telegram Bot&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The service is free to use, running on &lt;a href="https://render.com/"&gt;Render&lt;/a&gt; and MongoDB Atlas&amp;rsquo;s free tier.&lt;/p&gt;</description></item><item><title>Letter Boxed</title><link>https://aaron-ang.github.io/projects/letter-boxed/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://aaron-ang.github.io/projects/letter-boxed/</guid><description>&lt;h3 id="puzzle-solver-and-visualizer-for-nyts-letter-boxed"&gt;Puzzle solver and visualizer for NYT&amp;rsquo;s &lt;a href="https://www.nytimes.com/puzzles/letter-boxed"&gt;Letter Boxed&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;It started as a Java project for &lt;a href="https://www.cs.bu.edu/courses/cs112/"&gt;CS 112&lt;/a&gt; in Spring 2022. That summer I rewrote the recursive backtracking solver in &lt;a href="https://www.typescriptlang.org"&gt;TypeScript&lt;/a&gt;, built a &lt;a href="https://react.dev"&gt;React&lt;/a&gt; frontend to visualize it, and deployed it to GitHub Pages.&lt;/p&gt;
&lt;p&gt;The solver did all its work on the client, and heavy puzzles would freeze the UI. I chased that problem for a while: first I moved the algorithm to a Google Cloud Function (which stopped the freezing but added network latency), then rewrote that function in &lt;a href="https://go.dev"&gt;Go&lt;/a&gt; to bring latency back down. Eventually I brought the solver home to the client for good — running it in a &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API"&gt;Web Worker&lt;/a&gt; so the heavy computation never blocks the interface.&lt;/p&gt;</description></item><item><title>Tidbits</title><link>https://aaron-ang.github.io/projects/tidbits/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://aaron-ang.github.io/projects/tidbits/</guid><description>&lt;p&gt;Won &lt;strong&gt;1st Place&lt;/strong&gt; at &lt;a href="https://yhack-2024.devpost.com/"&gt;YHack 2024&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Tidbits transforms any lecture (audio or visual) into fun, byte-sized shorts with a one-click upload. We leverage what students are already familiar with: short-form video series with a core scroll-based functionality popularized by TikTok. Our goal is to transform these traditionally “unhealthy” and ”unintentional” forms of entertainment into deliberate methods of active learning.&lt;/p&gt;
&lt;p&gt;Built alongside three other students in a span of 24 hours.&lt;/p&gt;
&lt;p&gt;Tech Stack: Figma, Next.js, Sass, &lt;a href="https://fastapi.tiangolo.com/"&gt;FastAPI&lt;/a&gt;, &lt;a href="https://supabase.com/"&gt;Supabase&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>ArcAid</title><link>https://aaron-ang.github.io/projects/arcaid/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://aaron-ang.github.io/projects/arcaid/</guid><description>&lt;h3 id="zero-knowledge-financial-aid-application-tool"&gt;Zero-Knowledge Financial Aid Application Tool&lt;/h3&gt;
&lt;p&gt;Won &lt;strong&gt;Best Education Hack&lt;/strong&gt;, &lt;strong&gt;Best Use of Aleo, and Wolfram Award (top 8)&lt;/strong&gt; at &lt;a href="https://2023f.pennapps.com/"&gt;PenApps XXIV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Every year, more than &lt;strong&gt;$200 billion&lt;/strong&gt; in federal student aid is disbursed through slow, cumbersome, and non-private channels. ArcAid uses &lt;strong&gt;Aleo&lt;/strong&gt;’s zk-SNARKs to make applying for financial aid to multiple schools secure, efficient, and private.&lt;/p&gt;
&lt;p&gt;We believe the benefits are two-fold. First, more deserving students will be encouraged to apply for financial aid. Second, institutions will be more willing to process applications since administrative overhead is significantly reduced.&lt;/p&gt;</description></item><item><title>AtlasAI</title><link>https://aaron-ang.github.io/projects/atlasai/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://aaron-ang.github.io/projects/atlasai/</guid><description>&lt;p&gt;Won &lt;strong&gt;Best Use of Convex&lt;/strong&gt; at &lt;a href="https://cal-hacks-10.devpost.com/"&gt;Cal Hacks 10.0&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Wearables have given us an abundance of health data, but most of us do little with it.&lt;/p&gt;
&lt;p&gt;AtlasAI bridges that gap. It analyzes each user’s long-term health data and daily schedule to suggest concrete adjustments — flagging the times of day you tend to be stressed, for instance, and recommending breaks. Over time, those prompts help users trace the root causes of their stress and act on them.&lt;/p&gt;</description></item><item><title>Marlin</title><link>https://aaron-ang.github.io/projects/marlin/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://aaron-ang.github.io/projects/marlin/</guid><description>&lt;p&gt;Won &lt;strong&gt;3rd Place — Cybersecurity&lt;/strong&gt; at &lt;a href="https://cerebral-beach-hacks.devpost.com"&gt;Cerebral Beach Hacks&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Marlin is a Chrome extension designed to combat the rising threat of business email compromise, which caused over &lt;strong&gt;$2.9B&lt;/strong&gt; in losses in 2023 according to FBI reports. By making email security analysis accessible and user-friendly, Marlin helps protect users from sophisticated phishing attempts that often bypass traditional security measures. The extension works by extracting and anonymizing email content, analyzing it using an open-source Mixtral model via Kindo AI, and presenting users with clear, actionable insights about potential security threats.&lt;/p&gt;</description></item><item><title>Tissue.ai</title><link>https://aaron-ang.github.io/projects/tissue-ai/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://aaron-ang.github.io/projects/tissue-ai/</guid><description>&lt;p&gt;Tissue.AI was built to help new developers overcome one of the biggest barriers to contributing to open-source projects: &lt;strong&gt;figuring out where to start&lt;/strong&gt;. Facing large, unfamiliar codebases can feel daunting, and current LLM agents are still limited in their ability to solve real-world coding problems. By providing context, structured guidance, and step-by-step directions, Tissue.AI empowers newcomers to tackle GitHub issues with confidence. Users simply paste the link to an issue, and the system leverages &lt;a href="https://www.letta.com"&gt;Letta&lt;/a&gt;’s MemGPT technology to analyze the repository, gather relevant information, and present it in an interactive and approachable way. This enables developers—especially beginners—to better understand codebases and use the structured output alongside agentic coding tools like Cursor or Copilot.&lt;/p&gt;</description></item><item><title>Surgical.AI</title><link>https://aaron-ang.github.io/projects/surgical-ai/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://aaron-ang.github.io/projects/surgical-ai/</guid><description>&lt;p&gt;Surgical.AI tackles a critical healthcare safety issue: the &lt;strong&gt;3,000&lt;/strong&gt; annual cases of surgical tools being left inside patients&amp;rsquo; bodies during operations. Inspired by a case where a tool &amp;ldquo;the size of a dinner plate&amp;rdquo; was discovered inside a patient 18 months after a c-section, this project aims to prevent such incidents through AI-powered tool tracking, even when traditional manual tracking by medical staff fails.&lt;/p&gt;
&lt;p&gt;Our system, named Surgi, uses real-time video streaming to track and segment surgical tools during operations, maintaining a constant inventory of their status (in place, out of place, or missing). Surgi features hands-free voice communication and the ability to instantly replay the last known location of any tool, making it seamless for surgical staff to use during procedures.&lt;/p&gt;</description></item><item><title>Numlingo</title><link>https://aaron-ang.github.io/projects/numlingo/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://aaron-ang.github.io/projects/numlingo/</guid><description>&lt;h3 id="a-number-recall-game-for-language-learners"&gt;A number-recall game for language learners&lt;/h3&gt;
&lt;p&gt;Numlingo drills active recall of numbers in the language you&amp;rsquo;re learning: 60 seconds to translate as many randomly generated numbers as you can, as accurately as you can. Play solo, or join a multiplayer lobby for your language and race others.&lt;/p&gt;
&lt;p&gt;Real-time communication is powered by the Colyseus multiplayer framework which is a wrapper around Express.js. The client and server establish a web socket connection under the hood for communications.&lt;/p&gt;</description></item><item><title>StarGazer</title><link>https://aaron-ang.github.io/projects/stargazer/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://aaron-ang.github.io/projects/stargazer/</guid><description>&lt;h3 id="marvel-at-celestial-bodies-from-anywhere"&gt;Marvel at celestial bodies from anywhere!&lt;/h3&gt;
&lt;p&gt;This portable kit, along with a basic telescope, offers a cheap and simple way to observe planets. Simply choose the planet you want to observe in our app. The app will calculate the necessary adjustments based on your current location and trigger the gears in the hardware to rotate. Once that&amp;rsquo;s done, align your telescope with the pivot and the planet swings into view.&lt;/p&gt;</description></item></channel></rss>