A Git implementation in Rust.
A toy Lisp compiler targeting x86-64. Implemented in the Rust programming language.
- Uses an A-Normal form(ANF)- based intermediate representation.
- And features a linear-scan register allocator.
A raytracer. It supports diffuse(“matte”) and reflective(“metallic”) surfaces. Written in OCaml.
A compiler for QBE Intermediate Representation(IR). Currently compiles only a subset of the IR, and most optimizations are not yet implemented.
Futhark is a special-purpose programming language that compiles to parallel GPU code(via OpenCL). I made two minor syntactic contributions to the language:
- Support underscores in numeric literals. This feature allows
programmers to type in say,
1_000_000making programs more readable.
- Allow hexadecimal floating point literals, such as
Both involved changes to the compiler’s lexer, and also to the Python & C runtimes.
- Support underscores in numeric literals. This feature allows programmers to type in say,
After taking Michael Collins’s Natural Language Processing course offered on Coursera, I implemented a parts-of-speech tagger. It is implemented in Clojure.
Also, you can read how it works in a blog post I wrote.
Both use fourth-order Runge-Kutta method(RK4). Both are interactive demos implemented using C, SDL and OpenGL.
Notable older projects
These projects were either discontinued or are no longer actively maintained.
A web app that downloads Youtube videos to your Dropbox folder.
Discontinued because the good folks at Dropbox weren’t too happy that their platform was being used to ’re-distribute’ (potentially copyrighted) Youtube videos. Although the party only lasted for about 6 months, at its heyday, the website had upwards of 1000 daily visitors.
Tech-wise, it was a fairly simple Flask application using youtube-dl, the Python Dropbox SDK and RabbitMQ(via Celery).
I discussed some implementation details in a blog post.
A static-site generator written in Clojure. I was using it to generate my own website for a while.
I switched to another tool mostly because I found that I was spending too much time tweaking the tool. Besides, there are plenty of other static-site generators which solve the problem well.