Benjamin R. Bray
Main Interests
- Building reliable, reusable, and maintainable software that is enjoyable to use.
- Working on language servers, static analysis, and type inference in order to upgrade the user experience of software engineering workflows.
- Tools for composing rich text documents. I created the Noteworthy markdown editor, as well as the
prosemirror-math
andremark-cite
packages. - Computer graphics, simulation, and numerical methods. I originally learned to code by making Flash games, and fell in love with the unique confluence of art, math, and code involved.
Education
- Master of Science (M.S.) in Computer Science from Georgia Institute of Technology, 2019
- Bachelor of Science (B.S.) in Mathematics from University of Michigan, 2017
- See the second page of my resume for a list of notable coursework.
Publications
Skills
The skills below are listed in no particular order. Use the links to jump between sections!
- Product Development
- Frontend Engineering
- Backend Engineering
- Functional Programming, Compilers, and Formal Methods
- Computer Graphics & Numerical Methods
- Machine Learning
- Open Source
- Teaching
Product Development
As a Research & Development Engineer for Hasuo Lab at the National Institute of Informatics,
- I worked closely with researchers to help translate their academic work into proof-of-concept software tools aimed at improving formal verification workflows in the automotive industry.
- When planning each project, I considered carefully how best to leverage my team’s core competencies to solve problems brought to us by collaborators from Japanese automotive companies.
- I contributed to the successful delivery of four prototypes:
- (ongoing) A model checker for a simple imperative probabilistic programming language.
- A domain-specific language called
tempo-lang
which compiles to signal temporal logic expressions, along with a language server and web app for creating, documenting, and exemplifying specifications. (see [Reimann 2024]) - A web app for demonstrating the behavior of RSS safety conditions (see [Hasuo 2022])
- (joined midway) A proof checker for Differential Floyd-Hoare Logic (see [Hasuo 2022])
- I presented our work at the IAA Mobility 2023 trade show in Munich, Germany.
- You can learn more about our work by reading paper1, paper2, these slides, or this brochure.
Many of my open-source projects are aimed at designing better software for students and researchers, whose needs are often underserved by commercial software:
- I created Noteworthy to experiment with new ways to support WYSIWYG editing of documents making extensive use of math, diagrams, links, and academic citations.
- I created
prosemirror-math
in order to encourage more widespread adoption of user-friendly LaTeX math input on the web. With weekly downloads and adoption by the Zotero reference manager, I like to think that I’ve already had an impact!
I find it immensely satisfying to work on projects tailored to meet the needs of a niche audience who will benefit directly from my improvements. A good user experience is at the forefront of all the work that I do.
Frontend Engineering
I have 7 years of experience writing TypeScript, both at work and for open source projects.
- I’m proficient with both the React and SolidJS reactive UI frameworks.
- I have a deep working knowledge of the ProseMirror and CodeMirror editor toolkits.
- I’ve worked briefly with WebGL and Rust+WebAssembly, and would enjoy diving deeper.
I enjoy designing rich document editors for note-taking, documentation, and academic writing.
- I created the Noteworthy WYSIWYG desktop markdown editor, tailored for personal research notes making extensive use of math and citations. Built with TypeScript and Electron.
- I maintain the
prosemirror-math
andremark-cite
packages on NPM.
prosemirror
, using KaTeX.remark
markdown processor adding support for pandoc
-style inline citation syntax and bibliography formatting.Backend Engineering
I worked for one year as a backend engineer at Smartpay KK, a Japanese fintech startup.
- I led the design, implementation, testing, and release of a programmatic disbursements backend service which integrates with bank APIs to automatically issue merchant payouts and consumer refunds on a fixed schedule.
- I participated in code review, API design, and sprint planning for a backend API powering the mobile & web apps for a pay-later service.
- I collaborated with our frontend team to design a GraphQL API to power our mobile app.
- Tools: Scala (with
cats-effect
), Docker, GCP, PubSub, Postgres, Terraform Cloud
I also have experience with the following backend tech:
- Building backend services with
node.js
, Scala’shttp4s
, and Haskell’sservant
. - Containerizing networked applications with Docker.
- Writing GitHub Actions for continuous integration and other automations.
Functional Programming, Compilers, and Formal Methods
While working as a Research Engineer for Hasuo Lab at NII, Haskell was my daily driver for implementing parsers, interpreters, type inference algorithms, and a language server.
- I added support for user-defined functions, enum types, and record types to a domain-specific language called
tempo-lang
, which evaluates to signal temporal logic expressions. - We used
sbv
to supportz3
SAT/SMT formulas as a compile target for ourtempo-lang
DSL. - Tools:
servant
,aeson
,mtl
,transformers
,megaparsec
,quickcheck
, and a dash oflens
.
As a Backend Engineer at Smartpay, I wrote purely-functional Scala in tagless-final style using the cats-effect
ecosystem. Compared to Haskell, Scala takes a more pragmatic approach to functional programming, allowing for gradual adoption of functional patterns where they pay off the most.
- A functional core, imperative shell architecture allowed my team to build new features quickly, with confidence that the underlying operations were sound.
cats-effect
made it easy to mock side-effects in ourhedgehog
property-based tests.
In my free time, I enjoy experimenting with dependently-typed languages like Coq and Lean. I’d love to work on tools which make dependently-typed programming more user-friendly. I created the toy language yagi-lang
to learn more about dependent type theory and language implementation:
Here are a few other related personal projects:
Computer Graphics & Numerical Methods
I’m comfortable with the foundations of computer graphics, including:
- linear algebra, matrix calculus, differential equations
- OpenGL, WebGL, rendering pipeline, shaders
- physically-based animation (collision detection, constraint resolution, fluid simulation)
- classic shading techniques as well as the basics of physically-based rendering
- the basics of discrete differential geometry for mesh processing
As a Computer Vision Engineer at EmbodyMe, I trained deep learning models for facial expression transfer, and contributed to our graphics pipeline, which applied spherical harmonics lighting and other post-processing effects to enhance the realism of meshes output by the deep learning model.
Stemming from my interest in physical simulation for games, I elected to take several project-based courses (in C++
, CUDA
and python
) on numerical analysis during my undergrad and masters. Topics included:
- matrix norms, conditioning, stability, error analysis
- fixed point methods, gradient descent, Newton’s method
- convex optimization, linear programming, linear complementarity problems, Frank-Wolfe
- stationary iterative methods; conjugate gradient and Krylov subspaces; Chebychev polynomials
- nonuniform FFT and butterfly algorithms; Ewald summation; multigrid; fast multipole methods
- Finite element analysis; molecular simulation with hydrodynamic interactions
Here are a few notable projects I’ve worked on, either through coursework or out of personal interest:
- (ongoing) A Rust implementation of the sequential impulse algorithm for 2D rigid body physics, based on Erin Catto’s description of the classic Box2D solver.
- A C++/CUDA simulation of 2D incompressible fluid flow, based on the “Stable Fluids” paper by Jos Stam, using a parallel Jacobi method on the GPU.
- A TypeScript implementation of 2d collision detection using tests based on both the Separating Axis Theorem the Gilbert-Johnson-Keerthi distance algorithm
As a teenager I worked as an independent game developer, publishing Flash games to the Newgrounds game portal under the username archawn. My games earned a modest amount of money from ad revenue and sponsorships through the Flash Games License marketplace. You can play a collection of my early games at the link below.
Machine Learning
In my role as a Computer Vision Engineer at EmbodyMe,
- I used PyTorch for training deep learning models to transfer facial expressions from an input video onto a target image in real time. At a high level, our model operated on face blendshapes produced by MediaPipe, and we applied various graphics post-processing techniques to achieve a realistic result. We used a separate model for mouth inpainting.
- I led a biweekly deep learning & graphics reading group to follow recent developments (GANs, attention, transformers, distillation, NeRF) and distribute knowledge among the team.
- Tools: Python, PyTorch, ONNX, MediaPipe, PyOpenGL
I spent 3 years as an Undergraduate Research Assistant using statistical topic models to analyze a large corpus of 19th-century German periodicals. During the course of the project:
- I implemented algorithms for topic modeling (LDA/HDP) from scratch in Python, designed a custom OCR error correction scheme for German blackletter fonts, and trained a logistic regression classifier for place-name detection.
- I built a web-app allowing humanities researchers to browse our dataset and visualize the results of our topic modeling analysis.
I have also served as a lecturer and teaching assistant for a several courses in Machine Learning at the undergraduate & graduate levels. See the teaching section below for more details.
Open Source
Open Source Packages
I maintain the following npm
packages:
prosemirror
, using KaTeX.remark
markdown processor adding support for pandoc
-style inline citation syntax and bibliography formatting.Open Source Contributions
I’m quick to git clone
open source software that I rely on. Here are a few of my contributions:
- [jgm/citeproc#88] Support hyperlinked titles according to draft of CSL v1.0.2 spec
- [jgm/citeproc#113] Handle CSL `second-field-align` correctly for whole-citation links
- [pjones/byline#20] Support ANSI Vivid Color Intensity
- [beetbox/beets#3692] Allow Discogs Plugin to respond during Singleton Import Mode
-
[benrbray/tikzjax] my fork of
aristicat1/tikzjax
adds aDockerfile
and fixes build issues
Teaching
Georgia Tech
- (Teaching Assistant) ISYE 6740, Computational Data Analysis, (Spring 2020)
- (Lecturer/TA) CS 4540, Advanced Algorithms for Machine Learning (Fall 2019)
- (Lecturer/TA) CS 4540, Advanced Algorithms for Machine Learning (Fall 2018)
University of Michigan
- (Instructional Aide) EECS 445, Machine Learning, (Winter 2017)
- (Instructional Aide) EECS 445, Machine Learning (Fall 2016)
- (Instructional Aide) EECS 545, Graduate Machine Learning (Winter 2016)
- (Math Lab Tutor) MATH 425, Introduction Probability, (Fall 2015 - Winter 2016)