About Me

Hi I’m Ben.

I currently work at Amazon Lab126 as a Software Engineer. Here, I've done everything from writing ISP drivers for SoCs, participating in selecting SoCs for our prodcuts, dealt with demuxing and decoding media streams, all the way up to writing Android applications. My current interests at Lab lie in machine learning, performance optimization, and visualizing data.

Previously, I worked at CENTR Cameras, a 6 person startup where we worked on creating a panoramic video camera which could record and stitch video from 4 720p cameras at 60fps or at 1080p/30fps. I was the Software Engineer responsible for understanding the architecture of the SoC we worked with and I optimized the computer vision and image processing algorithms for the SoC's VPU, an array of VLIW vector processors. I also contributed to the website with PHP, HTML, Javascript, CSS, and even Go as necessary.

I graduated Cal Poly San Luis Obispo with a degree in Computer Science and a minor in Mathematics (mostly differential equations because no one told me how interesting Abstract Algebra and other fields could be). I contributed to a couple bioinformatics research projects at Cal Poly using CUDA. One was a genetic selection program to optimize breeding cattle for certain phenotypes such as milk or meat produced, and the other was a genetic analysis program to compare the genomes of different strains of E Coli bacteria for a database.

My main Computer Science interests include parallel and concurrent programming, type theory, compilers and transpilers, and functional programming, but I love problem solving in general which is why I was drawn to programming at a young age. Off the computer I enjoy lifting weights, brewing beer, watching Sci-Fi, noodling on my guitar, and playing basketball. Obviously by the color scheme of my site I’m a huge Laker fan.

Enjoy whatever it is I end up writing about.

Some of my Projects

Interactive C Interpreter

This is a project I’m working on with Aaron Keen. The goal is to help 101 students understand how C executes more intuitively by providing an interactive interface to the program. Right now it feels like a less good debugger, but the interpreter is in a state to be easily extended and now I get to start thinking about different ways to provide information. Mostly written in Javascript with a small Haskell server which uses the Language-C module to parse and serve a C AST as JSON. It's not currently running, but maybe in the future...

Parallel GenSel

This was my senior project and summer research job after I had graduated. The goal of the project is to investigate using CUDA to parallelize GenSel which is a Genetic Selection program written in C++. Our target for parallelization is the BayesC algorithm (specified in this paper) as it’s the currently most used algorithm. I worked to understand the algorithm and parallelize it if possible. Unfortunately, the algorithm was basically a Markov Chain formed with repeated Gibbs Sampling methods. In layman's terms: each iteration of the algorithm depended on the previous which is not parallelizable. My later work focused on optimizing the linear algebra sections of the code to determine where CUDA would beat out the C++ library Eigen.

Core Compiler

This isn’t really something I should leave up, but I will anyway. It was my first serious foray into Haskell programming and I think it’s totally broken. But it was super interesting at the time because in school I had written a Scheme interpreter and a compiler for SPARC, but I had no clue how a language like Haskell would be compiled especially with functions being curried. Now I know, and knowing is half the battle. Plus the compiling process with its state stepping function inspired me for the C interpreter, so evidently it did help in how I think about programming language execution models. It was fun to build a basic graph reduction machine with a couple types of basic garbage collection. When I get time I may try to re-write this with a type system and use my experience with Haskell more; not to mention that even though I’ve read through most of the book and turned it over in my head I haven’t yet fully implemented the compiler from AST -> G-machine -> Three Instruction Machine (and all the optimizations at the end of the book).