24 Jun 2025
I’ve extended my proof-of-concept molecular similarity search pipeline discussed in my previous blog post using Streamlit Cloud.
Try it here: MolSearch.
You can search for molecules similar to any compound by entering its SMILES representation. The database is small since this is intended to be a lightweight search, but I believe it demonstrates the power and utility of this approach. See the source code and more details on GitHub.
23 Jun 2025
I recently built the puzzle Queens, from LinkedIn games, using Vue.js and Vite. I wanted to try my hand at designing a game that I play often, and integrating a project into my website as a webpage. This turned out to be a pretty simple gateway project to accomplish both objectives.
The Queens game challenges players to place queens on a chess board so that no queen can attack another queen – a fun and sometimes frustrating way to spend your Sunday morning. This implementation was inspired by Fotis Adamakis’s excellent article on recreating the Queens game in Vue, which I used as a starting point (and admittedly is most of the code). I added a few key features:
- three difficulty level selections (easy, medium, and hard),
- a smart timer that starts only on the first move with pause/resume functionality
- minimal color palette and small stylistic touches
You can play the game here: Queens. The source code is available here on GitHub for those interested in the implementation details. Good luck!
13 Jan 2025
Inspired by a post from the Observable Team, I created an analysis of New York Times Mini Crossword statistics using JavaScript and the D3 library. I compared my crossword performance against my girlfriend’s to see, once and for all, how we stack up head-to-head.
The data includes 3 years of crossword history, from January 2022 to December 2024.
Check out the full Observable notebook here!
31 Mar 2024
Through my work at Frontier Medicines, an early-stage covalent drug discovery company, I developed a similarity search tool for a space of 15 billion synthesizable molecules.
To do this, I represented molecules as vector embeddings using a proprietary transfomer model fine-tuned according to Frontier’s use case. In addition, I featurized every molecule in the search space to allow multiple search fields and relevant filters by running computational workloads on distributed clusters, and stored this rich feature information using a data warehouse on AWS.
The end product was offered to chemists using a UI I built with Streamlit that kickstarted an AWS SageMaker pipeline job. The pipeline job ran each component of the workflow, including the parsing of query molecules, the vector similarity search, metadata retrieval from the data warehouse, and appropriate clustering and filtering.
More details about how I leveraged vector databases for semantic search can be found on the Pinecone website, detailing Frontier’s adoption of their serverless product in an early-access program.
A bite-sized version of the project intended as a proof-of-concept can be found on my GitHub.
27 Oct 2022
I’m excited to announce the publication of a first-author paper under mentorship of Dean Buonomano at UCLA and in collaboration with Ash Tanwar. This paper was the culmination of years of work using deep learning models trained on tasks designed to tease out explanations for how the brain represents timing and memory through the intrinsic dynamics of neural circuits.
The paper can be read in full here. Here are the highlights:
- A recurrent neural network (RNN) can implement timing, working memory (WM), and the comparison of intervals.
- RNN units (neurons) exhibit mixed selectivity (i.e. not tuned only to timing or WM, but tuned to both)
- Units contain more information about the timing of the interval than the WM of the interval
- Our work predicts how a human brain could represent timing and WM information