This is an incomplete list of a few projects I’ve worked on, in semi-chronological order.
My current project. Started right around the beginning of the pandemic. Flexi.chat is a videoconferecing application with a schedule and flexible speaking formats. For example, you can have everyone in the meeting speak one after the other (the app handles muting and un-muting the right people), then repeatedly shuffle people into pairs so that everyone gets to talk 1-on-1 with everyone else. Or have a “speed-dating” style format for the first 20 minutes of your remote meetup, before bringing everyone back to the main room.
I went to the Recurse Center from January to mid-March 2020, as part of the Winter 1 2020 batch. There I met a lot of cool people, upskilled, and made these projects
- Paint By Wasm, a paint by numbers generator in JS and Rust
- k4a-sys, a published package with Rust bindings to the Azure Kinect SDK.
- k4a-rs, a Rust safe wrapper to k4-sys (never finished)
- Re-started puzzle solving, by making a puzzle generator with D3 and svelte
Talks about Coz
I gave a talk at Rust MTL about Coz (and its Rust library coz-rs), the causal profiler that finds bottlenecks in your code for you. I gave an in-depth talk about the paper behind it at Papers We Love Montreal.
I was solving a 1000 piece impressionist puzzle the other day (which was tough), and I thought we had lost a puzzle piece because it felt like we had tried everyone and none fit. In the depths of despair, I wondered “is there not an AR app that solves puzzles?” It turns out there is not.
It is a tickling idea because it sounds like something “easy” for a computer to do, to keep track of thousands of pieces and methodically try out myriad combinations. The puzzle approach one takes feels so mechanistic, it feels like a computer could try. There are no AR puzzle app, and the problem is actually quite tough. Jigsaw puzzles are clearly fun-makework, so it wouldn’t be fun to automate.
It turns out I fell down a deep rabbit-hole-hairy-yak situation. It turns out that the outside part of a jigsaw puzzle is an instance of Travelling Salesperson Problem: You have all these edge pieces, that you can imagine as graph nodes. If you end up connecting two pieces, call that an edge between the nodes. If you use something like a pairwise “match-probability” metric and call that an edge weight or distance, then you are looking for a a) minimal weight b)loop through all the puzzle pieces c)that visits each piece only once and d)starts and ends at the same place. The CS-speak version of this is a “minimal weight hamiltonian cyclce”.
Because I thought this was neat, and on a 1k piece puzzle there are maybe ~100 edge pieces, I thought it might be possible to bruteforce the TSP solution. I foundthis amazing SO post detailing a heuristic based branch and bound traversal written in Java, and I thought it might be fun to integrate to my existing puzzle solving attempt in Rust. The java
Elixon was an attempt at a Phoenix port of Mastodon.social. It failed because I was trying to do too much at once for a hobby project.
Fealines was a cross-platform app for collecting EEG data for people who own the Interaxon Muse.
I made an app for meditators to talk to each other and I showed the prototype at Mind and Life 2014. There is a poster with more information at http://pocketsangha.com/poster.pdf
My first ‘open-source’ project. I had this idea for an image filter based on the voronoi transform. It picks random points on an image. Then, for each pixel in my new image, I color it the same color as the nearest point.
I submitted an entry to a programming contest where the goal was to crack a bunch of SHA1s of fake credit card numbers. I wanted to use rainbow tables, and there is already a library to generate them(rainbowCrack), however it it didn’t support the rules that I wanted so I made several modifications to the C++ code. I also managed to halve the space I needed, which was nice as the tables were huge (10GB).
I worked at Spire right before their launch in 2014. I helped benchmark some data analysis algorithms, and implement a few inference algorithms.
I was an intern at Transcriptic a year after it started. I helped program thermocycler drivers in Scala.
My first hardware/software project; I had plans to put an accelerometer on a rowing boat to measure my rowing prowess. I bought a teensy board and an accelerometer off of Sparkfun
- Compiling LibPDQ to JS with Emscripten Part 4: Writing Docs & Emitting Typescript
- Compiling LibPDQ to JS with Emscripten Part 3: All in JS → Pushing to NPM
- Compiling LibPDQ to JS with Emscripten Part 2: Using C functions in JS
- Compiling LibPDQ to JS with Emscripten: First steps
- The 2 Data structures you need in a Scrabble AI